2025년 1월 회고
지난 3년간의 안주를 깨고 '성장하는 한 해'를 만들기로 결심한 2025년 1월을 돌아본다. KPT(Keep, Problem, Try) 형식으로 일기 쓰기, 오픈소스 분석, 새로운 기술 습득 등 잘한 점과 아쉬웠던 점을 정리하고, 다음 달을 위한 구체적인 개선 방향을 모색한다.
지난 3년간의 안주를 깨고 '성장하는 한 해'를 만들기로 결심한 2025년 1월을 돌아본다. KPT(Keep, Problem, Try) 형식으로 일기 쓰기, 오픈소스 분석, 새로운 기술 습득 등 잘한 점과 아쉬웠던 점을 정리하고, 다음 달을 위한 구체적인 개선 방향을 모색한다.

LLMOps 플랫폼 오픈소스인 Dify를 확장성 있게 셀프 호스팅하기 위해 소스코드를 분석한다. 폴더 구조 파악, 로컬 실행, API 코드 분석 등의 과정을 거치며 Dify의 전체 아키텍처를 이해하고, 오픈소스 프로젝트를 효과적으로 파악하는 노하우를 공유한다.

소프트웨어 엔지니어로서의 성장의 한계를 느끼고, '조직을 이끄는 삶'이라는 새로운 길을 모색한다. 비전 정의부터 실행까지 조직을 이끄는 6단계의 구체적인 방법을 제시하고, 결국 이 모든 과정은 조직의 실행력과 장기적인 동기부여를 이끌어내는 능력으로 귀결된다는 점을 이야기한다.
비즈니스에서 빠른 결정이 항상 옳은지, 제프 베조스의 '1-Way/2-Way Decision' 개념을 통해 알아본다. 되돌릴 수 없는 결정과 있는 결정을 구분하는 프레임워크를 제시하고, 특히 중요한 1-Way Decision의 성공 확률을 높이기 위해 외부의 신뢰할 수 있는 제3자의 피드백을 구하는 것이 왜 중요한지 설명한다.
Kotlin 코루틴이 스레드를 차단하지 않고 비동기 작업을 처리하는 원리를 파헤쳐본다. 컴파일러가 suspend 함수를 어떻게 상태 머신과 Continuation 객체로 변환하는지, 그리고 디스패처와 이벤트 루프가 어떻게 코루틴의 재개를 담당하는지 그 내부 동작을 알아본다.
도메인 모델과 영속성 모델을 분리하는 것이 항상 최선일까? 모델 분리의 장단점을 구체적인 카드 시스템 예시를 통해 살펴본다. 이를 통해 비즈니스 표현력과 코드의 복잡성 사이에서의 균형점을 어떻게 찾아야 할지 고민해본다.
graceful shutdown이 무엇인지, 그리고 왜 필요한지 알아본다. Java와 Spring Boot 환경에서 graceful shutdown을 구현하는 방법과, 메시지 큐나 비동기 작업 처리 시 주의해야 할 점들을 함께 살펴본다.
graceful shutdown이 모든 시스템에 필요한 것은 아니다. 웹 서버, 데이터베이스, 메시지 브로커, 그리고 데이터 집계 시스템 등 데이터 무결성과 안정성이 특히 중요한 시스템에서 graceful shutdown이 왜 필수적인지 구체적인 사례를 통해 알아본다.