%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4

2020-08-08
소프트웨어 세상에서 제발 건설식  비유가 사라지면 좋겠습니다. 건설업은 시설을 중심에 놓고, 사람을 부품으로 사용하는 생산체계입니다. 매번 맨땅에서부터 시작해야 하니 그런게 이해됩니다. 하지만, 소프트웨어 세상에선 그런걸 잘했다고 돈을 더벌진 않죠. 그냥 잘팔리는 제품을 만들어야 합니다. 즉, 소프트웨어 세계에선 사람이 비용이 아니라 투자대상입니다. IT 분야에서 남다른 통찰력을 보여주는 김수보님의 최근 글. IT 환경과 함께 변해온 개발 문화/방법론 및 변화 배경을 읽을 수 있다. 정말 오래된, 개발 분야에 건설 방법론을 적용하지 말자는 떡밥인데 개인적으로 해결책은 간단하다고 생각한다. 글 안에 답이 있다....
2020-08-07
책 표지는 이렇다. 이 책은 미국을 배경으로 제품관리자, Product Manager, 프로덕트 오너 등을 위해 쓴 글이지만, 반드시 PO, PM 이 아니더라도 서비스 기획자라 불리는 이들에게도 그렇고, 스타트업 창업자나 애자일에 관심있는 개발팀 리더에게 역시 필독서로 권할 만한 책이다. 가히 제품 개발의 교과서라 할 만하다. 독후감을 쓰기 전에 이 책을 소개한 김민지 님에게 감사를 드린다. 사실 이 글은 오늘 저녁에 있을 독서토론의 발제문으로 김민지 님이 제시한 것에 대해 미리 생각을 써두는 것이기도 하다. 그럼 출발~...
2020-07-31
필자는 마이크로서비스 아키텍처 Microservice Architecture (이하 MSA) 기반으로 커머스 시스템을 만들고 있다. MSA에서 어려운 점 중 하나는 데이터 일관성을 유지하는 일 이다. 예를 들어 주문 프로세스(결제, 주문 원장 기록, 재고 차감 등등)는 모두 성공하거나 하나라도 실패한다면 이전 상태로 되돌아가야 한다. 모놀리틱 아키텍처 Monolithic Architecture 와 관계형 데이터베이스를 사용하는 전통적인 시스템은 데이터베이스 트랜잭션을 사용하여 데이터 일관성을 보장한다. 반면 마이크로서비스마다 데이터베이스를 따로 사용하는 MSA는 데이터베이스 트랜잭션만으로 보장이 안된다. 왜냐하면 통합된 하나의 데이터베이스를 사용하지 않기 때문이다. 물론...
2020-07-08
해당 코드는 Github 에서 확인할 수 있습니다. JPA + Querydsl group_concat 사용법 Querydsl 기반으로 작업하다 보면 sql 함수가 필요한 경우가 있습니다. 대표적으로 sum(), max() 등이 있고 해당 함수는 Querydsl 자체에서 지원해 주고 있습니다. 하지만 group_concat 과 같은 함수를 사용하기 위해서는 별도의 설정이 필요합니다. 본 포스팅의 내용은 Mysql 환경에서 JPA + Querydsl 조합에서 group_concat 을 사용하는 방법을 정리한 것입니다. Mysql 환경에서 group_concat 을 사용하기 위해서 별다른 설정 없이...
2020-06-08
들어가기 앞서 이 글을 쓰는데 도움을 주신 cp949 님, 김형준 님 그리고 장재휴 님에게 감사드립니다. 필자는 커머스 코드 자산화 개발일지 를 연재하고 있다. 구현 과정에서 Golang을 기반으로 마이크로서비스 아키텍처를 차용하였고 대부분의 마이크로서비스(회원, 장바구니, 결제, 주문)의 데이터 저장소로 MongoDB 를 사용했다. MongoDB를 사용한 이유는 크게 두 가지였다. 집합적 데이터 모델 객체/관계형 패러다임 불일치 예를 들면 주문 도메인에서 주문을 아래와 같이 객체 모델링 할 수 있다. 그리고 여러 가지 이유로...
2020-05-27
코로나19로 달라진 삶을 이야기하는데, 우리회사(베터코드 주식회사)의 상황과 내 삶 역시 많이 달라졌다. 나이탓인지 우리가 공동체의 생활을 한다는 사실을 점차 체감한다. 내 삶에 급격한 변화가 일어나는 3개월 남짓의 기간동안 겪은 일중에 공동체에 내놓아 함께 논의할 만한 내용이 있어 글을 쓴다. 서울에서의 영업 시작 코로나19로 인해 그간 북경에 상주하며 중국에서 SaaS 시장 진입을 노리던 일을 일단 중단하기로 했다. 일보 후퇴 후에 전진해야 하는 상황이 되었다. 일단, 가만히 있지 못하는 성미가 작용했다. 아직 중국 철수를 결정하기 전에 북경 복귀를 기다리던 중에 사회적 거리두기 때문에 조심스럽게 몇몇 기업에서 비슷한 고민을 하는 분들을 만났다. 대개는 서울을 떠나기 전인 5년 전 즈음까지 인연을 맺었던 분들이다. 그들과 나눈 주제는 다양했지만, 함께 나누는 이야기의 키워드는 '클라우드', 주로 리테일 부문의 'Digital Tranformation' 그리고 '리팩토링'이었다....
2020-05-07
이전 포스팅 에서 이어지는 내용이다. 전체 프로젝트는 여기 에서 받을 수 있다. 이번에는 리모트 디버그에 대해서 정리할 것이다. 공식 문서 에도 소개가 잘 되어 있지만, 이 문서도 보고 바로 따라하기에는 좀 어렵다. 여기서 정리할 내용이다. Docker Compose 설정 GDB 설정 Remote Debug via GDB/gdbserver Use Remote GDB Server Use GDB Remote Debug GDB Server로 Target Process를 실행 Target Process를 실행 후에 GDB Server를 해당 PID로 Attach Dockerfile, docker-compose.yml 그리고 CMake의 build type, compile debug option, release option과 같은 세부 사항이나 GDB Server의 옵션 등과 기타 디버그 설정 등도 여기서 모두 설명하면 너무 길어지므로 생략하고, 리모트 디버그 연동만 정리하겠다. 이전 포스팅에서 Debugger 설정을 다음과 같은 상태로 두고 넘어갔었다....
2020-04-29
이 글은 적당히 갖춰나간 운영 환경 의 후속 글이다. 이전 글에서는 서비스의 외형적인 모습을 소개했다면, 이번 글에서는 그것을 가능하게 했던 내부의 문화를 소개한다. MSA Micro Service Architecture 이 삽질을 3년이나 하고 나서야 뼛속까지 알게 되었다. 이건 기술의 문제가 아니었다. 문화였고 일하는 방식이었다. 익스트림 프로그래밍 Extreme Programming, 이하 XP 이 소개된 지는 이미 20년이 넘었지만, 계속해서 XP를 얘기하는 이유는 MSA Micro Service Architecture 는 일하는 방식과 떼어서 얘기할 수 없기 때문이다. 아주 많은 작은 서비스들에게 역할과 책임을 부여하고, 그 서비스들이 상호 작용하며 만들어낸 서로 공존하는 상태. 그것이 바로 MSA 아니던가? 마이크로 서비스를 만드는 사람들이 이렇게 일을 하고 있지 않으면, 그건 거추장스러운 기술 셋으로 덧씌워진 또 다른 형태의...
2020-04-23
자바로 개발된 프로젝트를 유지 보수하다 보면 Object Serialization, Deserialization이 사용된 코드를 흔하게 볼 수 있다. 간단하게 Serializable 인터페이스를 구현했거나 Externalizable 인터페이스를 구현해서 JSON 등의 다른 포맷으로 영속화를 시켰는지는 여기서 중요하지 않다. serialVersionUID를 명시적으로 정의하지 않고 생략했다면, 모두 동일한 문제를 가지고 있다.   문제는 아래와 같은 상황에서 발생한다. A 객체를 직렬화하여 Redis나 DB 등 외부에 저장하고, 저장된 값을 A 객체로 역직렬화하여 사용하고 있다....
2020-04-15
2016년, 중국 패션 리테일 영역의 클라우드 서비스 회사가 되겠다는 야심 찬 희망을 품고 아기 발걸음 [1] 을 시작했고, 2020년 현재 아래와 같은 구성을 갖추었다. 처음부터 이런 구성을 그려놓고 차근차근 갖춰 나간 것은 아니었다. 2016년 봄, 알리 클라우드에 3대의 리눅스 서버를 구매해서 1대에 대충 스테이징 환경과 각종 관리 툴을 세팅하고 2대 서버에 운영을 위한 최소한의 구성만 갖춘 채 첫 번째 기능을 출시했다. 매번 필요할 때마다 점진적으로 아키텍처를 개선해 나갔고, 4년이 지난 지금 꽤 그럴싸한(?) 모양을 갖추게 되었다. 지금 우리가 갖추고 있는 기술 셋을 소개해본다....
더보기