전체 글(85)
-
2025 상반기 회고 - 도메인을 지키는 설계
이번 블로그에서는 상반기 동안 진행한 WMS 프로젝트에서 마주했던 문제들과 그 해결 방법을 공유하고자 합니다. 제가 정의하고 해결한 문제는 총 4가지인데, 4가지의 특징을 한데 모아보니 제가 공통적으로 고민했던 것은 "어떻게 하면 도메인을 지키는 설계를 할 수 있을까?" 였습니다. 여기서 말하는 도메인이란 비즈니스 로직을 의미하며 외부 인프라로 부터 독립된 소프트웨어가 해결해야 할 특정 비즈니스 문제나 상황을 의미합니다. 저는 이번 블로그에서 제가 도메인을 지키기 위해 어떤 고민과 노력을 했는지 공유 해보려고 합니다. 제가 정의한 문제는 총 4개로 동기적으로 수행되어야 하는 외부 서비스 호출을 처리하는 방법비동기적으로 수행가능한 외부 서비스 호출을 처리하는 방법다중 서비스 클래스를 사용하는 경우 트랜..
2025.07.01 -
상반기 WMS 프로젝트 회고: 전략 패턴(Strategy Pattern) 적용기
이번 글에서는 상반기 동안 진행한 WMS 프로젝트에서 제가 경험한 문제 상황과, 이를 디자인 패턴 – 전략 패턴(Strategy Pattern)을 적용해 해결한 과정을 공유드리고자 합니다.이전 포스팅에서는 DDD 설계를 주제로, Use Case 기반의 Application Layer 구현과 트랜잭션 관리에 대해 다뤘습니다.이번 글에서는 전략 패턴을 활용한 설계 개선 경험을 중심으로 이야기해보려 합니다.Design Pattern(디자인 패턴)과 Strategy Pattern(전략 패턴) 디자인 패턴이란 소프트웨어 개발 과정에서 반복적으로 마주치는 문제들을 유형화하여, 그에 대한 검증된 해결 방식을 정리해 놓은 설계 템플릿입니다. 결국 궁극적인 목적은 코드 품질을 향상하고, 유지보수 용이한 코드를 설계해 협..
2025.06.15 -
DDD 설계: Use Case 기반의 Application Layer 구현과 트랜잭션 관리
이번글은 상반기 동안 진행한 WMS 프로젝트에서, 겪었던 문제상황과 해결과정에 대한 내용을 정리해보려고 합니다. 본 글의 주제는 DDD 설계: Use Case 기반의 Application Layer 구현과 트랜잭션 관리이며 제목처럼 DDD의 철학에서 언급하는 Use Case 기반의 애플리케이션 설계에 대해 DD 예정입니다. 특히 Application Service와 Domain Service의 개념을 활용해서 궁극적으로 유지보수하기 쉬운 코드를 설계하기 위해서 제가 어떤 전략을 사용했는지 정리해 볼 예정입니다. 그전에 잠깐 DDD의 개념에 대해 정리하자면 Domain Driven Design의 약자로 도메인 주도 설계를 의미합니다. 즉, 여기서 말하는 도메인은 업무 영역을 의미하며 복잡한 도메인 로직을..
2025.06.12 -
코루틴(Coroutine)이란?
코루틴은 비동기 프로그래밍을 위한 (1) 경량 스레드 개념으로 일반적인 함수와는 달리 (2)중간에 실행을 멈췄다가 다시 시작할 수 있는 함수를 의미합니다. chat gpt를 통해 '코루틴에 대해 설명해 줘'라는 질문을 작성하면 얻을 수 있는 답입니다. 저는 해당 답변에서 두 가지에 대한 추가 질문을 했습니다. 경량 스레드란?중간에 실행을 멈췄다가 다시 시작할 수 있는 함수의 동작 방식은?먼저 경량 스레드는 (1)운영체제 수준의 스레드가 아니라, 애플리케이션 또는 (2) 런타임 수준에서 실행되는 단위를 의미합니다. 간단한 코드를 통해서 일반적인 멀티 스레드 방식과 경량 스레드 방식(코루틴 사용)의 차이를 보겠습니다. 먼저 일반적인 멀티 스레드 방식에서는 아래 코드를 실행하면 Thread {... }. ..
2025.05.15 -
NestJs AOP - @toss/nestjs-aop vs 함수형 프로그래밍 패러다임
이전에 'NestJs는 AOP를 지원할까?'에 대한 내용으로 포스팅을 했던 적이 있습니다. 당시에는 NestJs는 공식적으로 AOP를 지원하지 않는다고 했었습니다. NestJs는 AOP를 지원할까? Spring AOP와의 비교 분석지난 몇 년간 Spring 생태계에 익숙해져 있었던 터라 Spring에서는 로깅, 트랜잭션, 예외처리등 공통로직을 '객체'로 바라보고 비즈니스로직에서 공통로직을 별도로 분리하는 AOP(Aspect Oriented Programmijminc00.tistory.com해당 블로그를 링크드인에 공유했는데, 토스의 Node.js 개발자인 김인성 님께서토스에서 NestJS에서 AOP를 사용하기 위해 만든 @toss/nestjs-aop 오픈소스 라이브러리를 소개해주셨습니다. (해당 라이브..
2025.04.06 -
NestJS의 Provider vs Spring의 Component: 등록 및 관리 방식의 핵심 차이 및 분석
현대 애플리케이션 개발에서 의존성 주입(Dependency Injection, DI)은 코드의 모듈화와 유지보수를 크게 개선해 주는 중요한 설계 패턴입니다. NestJs와 Spring은 각각 TypeScript와 Java라는 서로 다른 언어를 기반으로 하지만, DI를 위해 비슷한 역할을 수행하는 개념을 가지고 있습니다. NestJs에서는 Provider, Spring에서는 Component(혹은 Bean)라는 이름으로 이를 구현하는데, 두 프레임워크의 등록 방식과 곤리 방식은 어떤 차이가 있는지 궁금증을 가지고 해당 글을 적게 되었습니다. 이번 글에서는 그 차이를 상세하게 분석해보고, 각 방식이 가지는 장점과 단점을 살펴 보겠습니다.NestJs의 Provider vs Spring의 ComponentNe..
2025.03.23