-
Spring boot 프로젝트 구조 잡기개발 일지/Back-end 2022. 1. 10. 11:38반응형
안녕하세요!
신규 프로젝트를 시작할 때 우리 개발자들이 흔히 하게 되는 고민 중에 하나이죠.
새로운 마음으로 이번에는 잘(?) 해보자!!
프로젝트의 폴더(파일) 구조를 잡는 것입니다.
앞 포스트에서는 React의 프로젝트 구조잡기에 대해 살펴봤습니다.
Backend로는 스프링 부트를 사용하고 있는데요. 우선 어느 정도 정리는 해서 프로젝트를 진행하고 있습니다.
React나 Vue.js 등 프론트엔드에서 프로젝트 구조 잡기할 때 참고하였던 모델은 SPA(Single Page Application)과 PWA(Progressive Web App)이었습니다.
백엔드의 경우는 DDD(Domain Driven Design) 전략을 참고하려고 합니다.
MSA(Microservice Architecture)와도 연결되는 부분이죠.
이렇게 하는 이유는 확장성 때문일 겁니다. 서비스를 개선하고 신규 기능을 추가할 수록 시스템이 거대해지기 때문이죠.
DDD (Domain Driven Design)
DDD와 관련해서는 아래 기술 블로그를 참고해 주세요!
https://incheol-jung.gitbook.io/docs/q-and-a/architecture/ddd
이외에도 구글링해보면 많은 자료를 찾을 수 있습니다.
MSA (Microservice Architecture)
마이크로서비스 아키텍처는 이곳을 참고해 보도록 하시죠!
여기 있는 내용도 번역하며 정리하면 좋은텐데... 시간이 나지 않는 군요..!
(우선순위에 밀려서...)
그리고 깃헙에 있는 MSA 예제도 있으니 참고해보세요~
https://github.com/microservices-demo/microservices-demo
프로젝트 구조 잡기
이번에 제가 참고한 best practice는 아래 블로그의 게시글이었습니다.
https://cheese10yun.github.io/spring-guide-directory/
이 블로그 게시글을 확인해 보시면, "계층형"과 "도메인형"의 2개 구조를 언급하고 있습니다.
약 3년전에 처음 프로젝트 구조잡기에 대해 고민할 때는 "계층형" 구조로 과제를 진행하였습니다.
작은 규모의 시스템일 경우 "계층형" 구조가 이해하기도 쉽고 소스도 많이 없기 때문에 관리에 용이했기 때문이죠.
당시... 혼자 1개월이내 기존 ASP, .net 시스템을 Java기반으로 전환해야 했습니다.
그때는 해당 시스템 운영 담당자였기 때문에 비즈니스 로직은 98% 이해하고 있어서 그나마 다행이었습니다.
ASP와 .net 소스들을 전환하는 작업에만 집중하면 되었기 때문이죠.
자, 다시 돌아와서 위와 같이 "계층형" 구조로 진행할 경우 치명적인 단점이 있습니다.
시스템 규모가 커질수록, 그리고 확장 가능성을 고려할 때는 적절하지 않습니다.
하나의 디렉로티에 너무 많은 클래스가 생성되기 때문입니다.
그래서 이번에는 위에서도 언급한 DDD 전략으로 "도메인형" 구조로 선정하였습니다.
- /src/docs : api 도큐먼트
- /src/main/.../domain : 도메인 패키지 (세부 비즈니스 도메인 패키지가 위치합니다.)
- /src/main/.../global : 프로젝트 전반에 사용되는 백오피스 패키지
- /src/main/test : api 테스트 패키지
크게 나눠보면 이렇게 4개로 나눠볼 수 있을 것 같습니다.
이번 프로젝트를 진행하며 조금 더 학습하며 발전시켜보려 합니다.
관련 프로젝트는 다음 깃헙 리포를 참고해주세요!
https://github.com/bookclubstory/bookclub-back
반응형'개발 일지 > Back-end' 카테고리의 다른 글
웹소켓 애플리케이션을 위한 Spring Boot 구성 (3) 2023.05.17 Spring MVC로 이미지/미디어 데이터 변환하기 (0) 2022.01.26 Stomp (The Simple Text Oriented Messaging Protocol) 번역 (0) 2021.12.13 Spring AMQP를 사용한 메시징 (0) 2021.12.02 Pub-Sub vs. Message Queues (0) 2021.12.02