Project

[가계부 시스템] 4. 클래스 구조

robinjoon98 2021. 8. 4. 09:55

2021.07.29 - [Project] - [가계부 시스템] 3. API 설계

 

[가계부 시스템] 3. API 설계

2021.07.15 - [Project] - [가계부 시스템] 2. 시스템 설계 - 아키텍쳐, DB [가계부 시스템] 2. 시스템 설계 - 아키텍쳐, DB 2021.07.15 - [Project] - [가계부 시스템] 1. 요구사항 정리 [가계부 시스템] 1. 요구..

blog.robinjoon.space

1. 패키지 구조

패키지 목록

총 5개의 패키지로 구성되어있다. 

  • config : 스프링 설정을 모아둔 패키지이다.
  • controller : API 호출시 동작하는 Controller들을 모아둔 패키지이다.
  • dao : DB와의 통신을 담당하는 클래스들을 모아둔 패키지이다.
  • dto : 가계부에 필요한 DTO 들을 모아둔 패키지이다.
  • intercepter : API 인증 토큰검사를 위한 스프링 인터셉터가 있는 패키지이다.

각 패키지에 대한 설명을 아래에 이어서 할 것이다. 자세한 코드는 포함되지 않으니 궁금하면 포스팅 하단의 깃허브 링크를 참고하자.

2. controller 패키지

Controller 들

각 Controller들은 다루는 DTO에 따라 분리하였다. 또한, 별도로 Service를 작성하지 않고, 각 Controleller에서 직접 Dao를 사용하도록 하여 구조의 복잡성을 줄였다.

dao 패키지 내의 클래스들

dao 패키지에는 클래스가 많다. 스프링에는 Java에서 기본으로 제공하는 JDBC의 불편함을 개선한 JdbcTemplate 을 제공하는데, 여기서 사용하는 인터페이스인 RowMapper<T> 를 구현한 클래스들을 별도의 파일로 구분해서 그렇다. 지금 돌이켜보면, "어차피 거의 대부분의 RowMapper 들은 하나의 Dao 내에서만 쓰이니 내부클래스등의 방법을 사용하는게 좋지 않았을까?" 라는 생각이 든다. 

4. dto 패키지

DRO 들

이 시스템에서 필요한 데이터들을 저장하는 DTO 들이다. 다른 DTO 들은 왜 있는지 납득이 가겠지만, DtoWithHttpCode.java 가 왜 있는지 궁금할 것이다. 이 프로젝트를 진행할 때는 스프링에서 제공하는 ResponseEntity 를 몰랐다. 따라서, RESTController 에서 서버의 에러나 잘못된 요청일 때 올바른 HTTP 상태코드와 json 형태로 응답을 제공해야 하는데 방법을 몰라, 다른 DTO를 감싸는 DTO를 따로 만든 것이다.

5. intercepter 패키지

intercepter 패키지

이 패키지에는 인증작업을 수행하는 AuthIntercepter 클래스가 있다. 스프링에서는 요청을 Controller가 받기 전에 전처리를 할 수 있도록 Intercepter 를 제공한다. 이 시스템에서는 모든 API 요청에 인증토큰이 포함되어있고, 이를 인증해야만 하기 때문에, Intercepter를 사용했다.

 

깃허브

 

GitHub - robinjoon/AccountBook: Income and Expense Management System

Income and Expense Management System. Contribute to robinjoon/AccountBook development by creating an account on GitHub.

github.com