[한화시스템 BEYOND SW캠프] 22기 12주차 회고

dev_ho·2026년 1월 18일

한 해가 지나고 벌써 1월의 3번째 주차가 지났습니다. 이번에 진행했던 백엔드 프로젝트에 대한 내용을 위주로 회고를 진행해 보겠습니다.

[Retrospective] 두 번째 백엔드 프로젝트: 설계의 중요성과 MSA를 향한 첫걸음

두 번째 단위 프로젝트가 마무리되었습니다. 이번 프로젝트는 첫 번째 데이터베이스 프로젝트에 비해 개인적인 아쉬움이 많이 남지만, 그만큼 '어떻게 하면 더 체계적으로 개발할 수 있을까?'에 대해 깊이 고민해 볼 수 있었던 귀중한 시간이었습니다. 이번 프로젝트에서 겪은 시행착오와 배운 점들을 정리해 봅니다.

프로젝트 레포지토리 링크


1. 프로젝트의 나침반, WBS의 부족함과 초기 방향성

프로젝트 초기, 어떤 순서로 진행해야 할지에 대한 명확한 가이드라인이 없다 보니 방향을 잡는 데 예상보다 많은 시간을 허비했습니다. 단순히 '코드를 짜는 것'보다 '언제 무엇을 할지'를 정의하는 것이 팀 전체의 생산성에 얼마나 큰 영향을 미치는지 체감했습니다.


2. 설계 단계에서 마주한 기술적 고민들

설계가 견고하지 않으면 구현 과정에서 반드시 병목 현상이 발생한다는 것을 깨달았습니다. 이번 프로젝트를 통해 복기한 주요 설계 유의점입니다.

🏗️ CQRS 구조 도입과 패키징 전략

이번 프로젝트에서는 CQRS(Command Query Responsibility Segregation) 구조를 채택하여 진행했습니다.

  • 장점: CUD(생성/수정/삭제)와 R(조회) 로직이 명확히 분리되어 특정 기능을 수정할 때 Java 파일의 위치를 찾기가 매우 수월했습니다.
  • 고민점: 하지만 공통 파일(Global Config, Utility 등)을 어느 디렉터리에 둘지에 대한 고민이 많았습니다. 결합도를 낮추면서도 성능에 문제를 주지 않는 구조에 대해 더 깊은 연구가 필요함을 느꼈습니다.
    1. 공통 라이브러리 추출 - Security Config or Logging을 별도의 Git repository로 분리하여 Gradle, Maven으로 관리
    2. 조금의 중복 허용 - MSA에서는 서비스 간 독립성이 최우선이지만, 비즈니스 로직이 포함된 코드면 서비스별로 복제해서 사용이 유지보수에 유리할 수 있음
    3. Sidecar 패턴 활용 - 설정 파일, 모니터링 로직 등은 소스코드에 두지 않고 Config Server 같은 외부 설정 서버를 활용하여 결합도 낮추기

🔍 API 명세와 엔티티 매핑

  • API 우선 설계: 최종적인 API 명세서를 먼저 확정하는 것이 세부 로직을 짜는 것과 다른 팀원의 서비스와의 연결의 핵심임을 다시 한번 확인했습니다.
  • Entity & DTO 매핑: 엔티티 간 연관관계를 설정할 때 발생하는 복잡성과, 이를 DTO로 변환하는 과정에서의 어려움을 고려하여 초기 설계 단계에서 매핑 전략을 더 구체화해야 함을 배웠습니다.

3. MSA 아키텍처: 서비스 분리와 데이터 흐름

프로젝트의 구조를 MSA(Microservices Architecture)로 결정한 후, 서비스를 어떻게 나눌 것인지가 가장 큰 화두였습니다.

  • 서비스 경계 정의: 각 도메인 서비스(예: 레시피 서비스 등)를 독립적으로 나누고, 서비스 간의 데이터 흐름을 미리 정의하는 과정이 전체 아키텍처를 이해하는 데 큰 도움이 되었습니다.
  • 결합도와 성능: 서비스 간의 결합도를 낮추기 위해 어떤 통신 방식을 채택할 것인지, 그로 인해 성능상(Latency 등) 발생할 수 있는 문제들을 미리 예측하고 설계에 반영하는 연습을 할 수 있었습니다.

4. 기술적 성장: Gateway와 Security

이번 프로젝트에서 기술적으로 가장 이해하기 어려웠던 부분은 API Gateway를 통한 보안 제어였습니다. 특히 기존의 Standalone 방식과 Gateway 방식의 차이점을 이해하고, JWT 토큰을 어떻게 효율적으로 검증할지 고민했습니다.

이와 관련된 Spring Cloud Gateway Security 설정과 독립 실행형 방식과의 비교 분석 내용은 별도의 WIL 포스팅으로 자세히 정리했습니다.

🔗 별도 게시글 링크: MSA 환경에서의 Gateway Security와 JWT 활용법


🖋️ 마치며

"설계에 쏟는 1시간이 코딩 10시간을 줄여준다"는 말을 뼈저리게 느낀 프로젝트였습니다. 비록 과정 중 시행착오는 있었지만, CQRSMSA라는 거대한 구조를 직접 부딪치며 설계해 본 경험은 앞으로 더 견고한 시스템을 구축하는 데 든든한 밑거름이 될 것입니다.

다음 프로젝트에서는 이번에 느낀 설계 체크리스트를 바탕으로, '코드만 잘 짜는 개발자
'
가 아닌 '시스템 전체를 조망할 수 있는 개발자'로 성장해 나가고자 노력하겠습니다.

profile
새로운 기술에 열린 개발자

0개의 댓글