Skip to content

Latest commit

 

History

History
148 lines (133 loc) · 6.93 KB

README.md

File metadata and controls

148 lines (133 loc) · 6.93 KB

bankshop-griotold

은행 거래 및 쇼핑몰 서비스 REST API

image

  • 사이트 주소 : https://www.griotold.shop
    • 비용 문제로 서비스 종료
  • 깃허브 : https://github.com/Griotold/bankshop-griotold
  • 사용 툴
    • Java 11
    • Spring Boot 2.7.14
    • QueryDSL 5.0.0
    • JPA
    • Spring Security
    • MySql 8
    • h2
    • JWT 4.2.1
    • Junit 5
    • jacoco 0.8.9
    • Swagger 3.0.0
    • LucidChart : ERD 툴
    • Postman
    • Docker
    • AWS
      • Elastic BeanStalk
      • Route 53
      • AWS Certificate Manager
  • 인원 : 1명
  • 기간 : 2023.08.01~2023.08.28

프로젝트 목적

  • 평소에 농협 모바일 앱 NH콕뱅크를 자주 사용하고 있다.
  • NH콕뱅크 앱은 계좌 이체와 같은 은행 관련 기능뿐만 계좌와 연동하여 쇼핑몰 서비스를 제공하고 있다.
  • NH콕뱅크 앱은 백엔드 단계에서 어떻게 처리되고 있을까를 상상해보며 데이터베이스를 구축해보고
  • Spring Framework를 활용하여 로직을 구현해봤다.

프로젝트 수행 과정

08.01 ~ 08.08

  • Spring Security JWT 세팅 및 로그인, 회원가입 기능 구현
  • Swagger 세팅
  • @RestControllerAdvice를 통한 공통 예외 처리
  • Spring AOP를 통한 Validation
  • 은행 관련 기능
    • 계좌 생성, 삭제, 조회, 상세조회
    • 계좌 입금, 출금, 이체

08.09 ~ 08.16

08.17 ~ 08.23

08.24 ~ 08.28

  • AWS를 활용한 HTTPS 배포
  • 문서화 작업

ERD

bankshop_ERD

API 스펙

예시 - 계좌 입금

{
    "number" : "1111",
    "amount" : 100000,
    "transactionType" : "DEPOSIT",
    "tel" : "01012345678"
}
  • Response Body
{
    "code": 1,
    "msg": "계좌 입금 완료",
    "data": {
        "id": 1,
        "number": 1111,
        "transactionDto": {
            "id": 6,
            "transactionType": "입금",
            "sender": "ATM",
            "receiver": "1111",
            "amount": 100000,
            "tel": "01012345678",
            "createdAt": "2023-08-28 11:02:51"
        }
    }
}

중요 포인트

1. @ExceptionHandler와 @RestControllerAdvice를 통한 예외처리

@ExceptionHandler

  • 스프링은 API 예외 처리 문제를 해결하기 위해 @ExceptionHandler 라는 애노테이션을 사용하는 매우 편리한 예외 처리 기능을 제공하는데,
  • 이것이 바로 ExceptionHandlerExceptionResolver 이다.
  • 스프링은 ExceptionHandlerExceptionResolver 를 기본으로 제공하고,
  • 기본으로 제공하는 ExceptionResolver 중에 우선순위도 가장 높다.
  • 실무에서 API 예외 처리는 대부분 이 기능을 사용한다.

@RestControllerAdvice

  • @ExceptionHandler 를 사용해서 예외를 깔끔하게 처리할 수 있게 되었지만,
  • @ExceptionHandler 만 사용하면 정상 코드와 예외 처리 코드가 하나의 컨트롤러에 섞여 있게 된다.
  • @ControllerAdvice 또는 @RestControllerAdvice 를 사용하면 둘을 분리할 수 있다.
    • 둘의 차이는 그냥 @ResponseBody 차이

CustomExceptionHandler

2. AOP를 활용하여 Validation

  • Spring Bean Validation으로 사용자의 입력을 검사할 수 있다.
  • 유효성 검사는 하나의 서비스에만 국한된 것이 아니고 Request Body가 들어가는 모든 요청에 공통 관심사다.
  • AOP를 도입하여 Request Body의 유효성 검사를 처리하는 방식으로 구현했다.
  • 자세한 건 여기를 클릭!

3. 컬렉션 조회와 페이징

  • 컬렉션을 조회하는데 페이징을 하려면 다음 3가지 규칙을 따라야 한다.
  1. XXXToOne 관계는 모두 fetch join한다
  2. 컬렉션은 지연 로딩 한다.
  3. hibernate.default.batch_fetch_size 설정으로 N + 1 문제를 해결한다.

4. AWS를 활용한 HTTPS 배포

5. jacoco 플러그인 테스트 커버리지 확인

  • 현재 프로젝트는 테스트 코드 커버리지가 58%이다.(라인 커버리지 기준)
image

References