본문 바로가기
Spring/Coding Convention

[Spring boot] Spring 프로젝트 계층구조에 대한 고민

by domo7304 2022. 1. 13.

< 기존에 했었던 개인 프로젝트의 directory structure >

이전에 진행했던 프로젝트의 directory structure

이전에 혼자 공부하며 진행했던 스프링 프로젝트이다. 크게 config - src - utils 로 나누고, config는 통합 json response 및 exception 등을, src 도메인 단위로 controller - service - dao 를 가지도록, utils는 jwt, validation 등을 가지도록 하였다.

스프링 동작 원리에 대해 잘 알지 못하지만, 이번 프로젝트에서도 위 구조를 그대로 쓰기 보다는 구글링을 조금 더 해보고, 일반적으로 더 많이 쓰이는 컨벤션이 있는지, 이유가 있다면 왜인지 더 알고 싶어서 깃허브와 구글을 찾아보았다.


토글에 첨부한 링크의 프로젝트들을 전부 뜯어보며 directory structure를 살펴보았는데....스프링 동작 원리에 대해 잘 알지 못하니 정작 왜 그런지 알 수가 없었다.

https://my-codinglog.tistory.com/category/%EC%9B%B9/%EB%8F%84%EB%A9%94%EC%9D%B8%20%EC%A3%BC%EB%8F%84%20%EC%84%A4%EA%B3%84%20%28Domain%20Driven%20Development%29

 

'웹/도메인 주도 설계 (Domain Driven Development)' 카테고리의 글 목록

 

my-codinglog.tistory.com

구글링 하다보니 Domain Driven Development 라는 개념에 도달했는데, 일단 참고할 만한 링크만 남겨두고 나중에 꼭 이론에 대해서도 포스팅 해야겠다. 일단 여러 참고자료들의 적당한 절충안을 찾아 프로젝트 구조를 잡아 시작하기로 하였다.


2022.01.16. 이번에도 난관에 봉착했다...팀원 셋 중 프로젝트를 처음부터 설계해 본 팀원이 없었고, 나도 열심히 찾아보았으나 큰 단위의 프로젝트를 다뤄본 적이 없으니

  • Service 인터페이스와 구현체, 인터페이스는 꼭 존재해야 하는 것인가?
  • Service class 를 만들 때 단순히 UserService 와 같이 작성하면 되는 것 아닌가? 동작을 중심으로 UserSignUpService 와 같이 적는다면, 이에 대한 효용? 얻는 이점은? 실제로 이렇게 많이 적는지?
  • Controller - Service - Repository 자체를 하나의 폴더 밑으로 넣는 것과(xxxController, xxxService, xxxRepository 방식), 각 layer 별로 폴더를 만들어서 여러 개의 controller, service, repository 를 갖게 하는 것의 차이는?

이러한 고민사항에 대해 속 시원한 답을 도출해낼 수가 없었다. 

첫 설계부터 탄탄하게 쌓은 채로 시작한다면 정말 좋겠지만 언제까지고 스켈레톤 설계에만 매달릴 수도 없기 때문에, 일단 가장 단순한 형태 Controller - Service - Repository 를 하나씩 갖도록 구현을 시작한 후, 클래스를 더 세분화하여 나눠야하는 필요성을 알게 되는 시점이 온다면 추후 수정하기로 결정하였다.

댓글