src
┣ main
┃ ┣ java
┃ ┃ ┗ com
┃ ┃ ┃ ┗ giddy
┃ ┃ ┃ ┃ ┗ user
┃ ┃ ┃ ┃ ┃ ┣ domain
┃ ┃ ┃ ┃ ┃ ┃ ┣ option
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ controller
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ dto
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ request
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ response
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ entity
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ mapper
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ service
┃ ┃ ┃ ┃ ┃ ┃ ┗ user
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ controller
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ UserController.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ dto
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ request
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ UpdateUserInfoRequest.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ response
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ FeignResponse.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ UserInfoDTO.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ entity
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ User.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ mapper
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ UserMapper.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ service
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ UserService.java
┃ ┃ ┃ ┃ ┃ ┣ global
┃ ┃ ┃ ┃ ┃ ┃ ┣ annotation
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ AnonymousCallable.java
┃ ┃ ┃ ┃ ┃ ┃ ┣ config
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ DatabaseConfig.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ FeignClientConfig.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ Log4j2Logger.java
┃ ┃ ┃ ┃ ┃ ┃ ┣ constant
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ AuthConstants.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ UserConstants.java
┃ ┃ ┃ ┃ ┃ ┃ ┣ dto
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ request
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ response
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ ErrorResponse.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ FormattedPopupMessage.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ ResponseCode.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ TopSevenDTO.java
┃ ┃ ┃ ┃ ┃ ┃ ┣ error
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ exception
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ AuthException.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ ConflictException.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ ExceptionBase.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ ExecuteFailedException.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ InvalidParameterException.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ MissingRequiredParameterException.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ NotAllowedMethodException.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ NotFoundException.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ handler
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ ExceptionResolver.java
┃ ┃ ┃ ┃ ┃ ┃ ┣ feign
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ auth
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ AuthClient.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ AuthClientAdapter.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ chat
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ match
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ MatchClient.java
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ MatchClientAdapter.java
┃ ┃ ┃ ┃ ┃ ┃ ┗ util
┃ ┃ ┃ ┃ ┃ ┗ UserApplication.java
┃ ┗ resources
┃ ┃ ┣ domain
┃ ┃ ┃ ┣ option
┃ ┃ ┃ ┃ ┗ mapper
┃ ┃ ┃ ┗ user
┃ ┃ ┃ ┃ ┗ mapper
┃ ┃ ┃ ┃ ┃ ┗ UserMapper.xml
┃ ┃ ┣ static
┃ ┃ ┣ templates
┃ ┃ ┗ application.yml
┗ test
┃ ┗ java
┃ ┃ ┗ com
┃ ┃ ┃ ┗ giddy
┃ ┃ ┃ ┃ ┗ user
┃ ┃ ┃ ┃ ┃ ┣ domain
┃ ┃ ┃ ┃ ┃ ┃ ┗ user
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ service
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ UserServiceTest.java
┃ ┃ ┃ ┃ ┃ ┗ UserApplicationTests.java
패키지 구조는 크게 domain과 global로 구분합니다. domain은 서비스의 핵심 비즈니스 로직 코드가 구현되어 있습니다. global은 핵심 비즈니스 로직에 종속적이지 않고 전역에서 사용할 수 있는 config, 예외 처리등을 관리합니다.
domain은 핵심 비즈니스 로직을 관리합니다. 구현해야할 비즈니스 로직에 맞춰 도메인 하위 패키지를 구분합니다. UserService는 사용자 정보를 관리하는 user와 계정 및 기타 설정을 관리하는 option으로 하위 레벨로 구성됩니다.
user와 option은 동일한 하위 계층 구조를 가집니다. 하위 계층 구조는 다음과 같습니다.
controller는 MVC의 controller 레벨의 역할을 수행합니다. 사용자 요청이 진입하는 지점이며 적합한 처리 로직에 분기를 해주는 기능을 수행합니다.
dto는 해당 도메인에서 비즈니스 로직을 수행할 때 사용하는 dto를 관리합니다. 또한 사용자 요청으로 들어오는 request, 요청에 대한 결과를 담은 response 객체도 함께 관리합니다.
entity는 해당 도메인에서 핵심으로 사용하는 DB 테이블과 매칭되는 클래스를 관리합니다. entity는 매칭되는 테이블과 동일한 property를 가지고 있습니다.
mapper는 mybatis 구현에 필요한 mapper 인터페이스를 관리합니다.
service는 해당 도메인에서 사용자 요청을 적합한 비즈니스 로직을 통해 필요한 데이터로 가공하는 역할을 수행합니다.
global은 핵심 비즈니스 로직에 종속적이지 않고 도메인이 공통으로 사용하는 전반적인 기능을 관리합니다.
global은 공통으로 사용하는 annotation, config, error를 사용하며 이외 사용 환경에 따라 feign 외부 라이브러리를 domain이 사용할 수 있도록 관리합니다.
config는 프로젝트의 설정을 관리합니다.
error는 예외 처리를 관리합니다. exception은 발생 가능한 사용자 정의 예외 클래스를 관리합니다. handler는 발생한 예외를 어떻게 처리할지 관리합니다. ExceptionResolver은 발생한 예외를 domain이 직접 처리하지 않고 전역에서 처리할 수 있도록 구현했습니다.
feign은 다른 마이크로 서비스의 REST 호출을 할 수 있도록 지원합니다. feign의 하위에는 호출하고자 하는 마이크로 서비스의 domain을 가집니다. REST 호출에 대한 정보를 가진 Client 인터페이스와 호출을 실제로 구현한 Adapter를 가집니다.