각 패키지에 대한 이해를 하기 앞서, 패키지가 무엇을 뜻하는지 알아보도록 하자.
- 자바의 패키지는 단순히 디렉토리만을 의미하진 않는다. 패키지는 클래스의 일부분이며, 클래스를 식별하는 용도로 사용된다.
- 패키지는 주로 개발 회사의 도메인 이름의 역순으로 만든다.
- 패키지는 상위 패키지와 하위 패키지를 도트로 구분한다.
- 패키지는 관련된 클래스와 인터페이스를 그룹화하여 조직화하는 방법이다.
- 네임스페이스 관리와 접근 제어를 통해 코드의 모듈성을 향상시키며, 서로 다른 개발자나 팀이 작성한 코드 간의 이름 충돌을 방지한다.
각각 패키지에 대한 설명은 이러하다.
- domain 패키지
JPA에서 사용하기 위한 엔티티 클래스들을 저장하기 위한 패키지.
- controller 패키지
http 요청이 오면, 그에 대한 응답을 주는 클래스의 모임
응답을 주기 위한 과정들은 service 패키지에서 처리하도록 한다.
- service 패키지
비즈니스 로직이 필요한 클래스들의 모임이며, 가장 복잡한 코드가 들어간다.
controller에서 service의 메소드를 호출하게 되고,
service는 repository의 메소드를 호출하게 된다.
- repository 패키지
database와 통신을 하는 계층으로,
Spring Data JPA를 사용해서 만든 repository를 이용하게 된다.
- dto(Data Transfer Object)패키지
클라이언트가 body에 담아서 보내는 데이터를 받기 위한 클래스,
또는 Database에서 받아온 데이터를 클라이언트에게 보여주기 위한 클래스
DB에서 받아온 Entity를 그대로 응답으로 주게 되면 문제가 생기게 된다.
요구사항에서 변경이 생겨 DB table의 설계가 바뀌게 되어 엔티티의 변경이 생겼을 시, 엔티티를 그대로 응답으로 줄 경우 DB의 변경사항이 프론트에게 까지 영향을 주게 된다.
dto를 통해 응답 데이터를 결정하게 되면, DB에 변경이 생길 경우 dto만 변경하면 되기 때문에 더 좋은 설계가 된다.
- converter 패키지
앞서 dto는 db에서 받아온 데이터를 클라이언트에게 보여주기 위한 클래스 라고 설명했다.
그럼 db에서 받아온 entity를 dto로 변환하는 과정이 필요하다는 건데, 이것은 어디서 일어날까?
이게 바로 converter에서 일어난다.
추가로, entity의 생성 역시 converter에서 일어나기도 한다.
converter에서 엔티티의 생성을 하게 되면, service는 비즈니스 로직에만 집중할 수 있어, 단일 책임 원칙 측면에서 더 우수하다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!