
GitHub - tableMinPark/springboot-auth
Contribute to tableMinPark/springboot-auth development by creating an account on GitHub.
github.com
기술 스택 및 버전
- Java 11
- Spring Boot 2.7.10
- Mysql 8.0.33
- Redis 7.0.8
프로젝트 목표
- TDD를 통한 서비스 로직 구현해보기
- 단위 테스트를 수행하면서 코드의 신뢰도 높혀보기
- Spring Security를 적용한 환경에서 단위 테스트 진행해보기
- 개발과 테스트 환경을 완전히 분리시킨 환경 구축해보기
- ControllerAdvice를 통해 예외 처리 및 실패 메시지 응답 코드 처리해보기
- 단위 테스트를 수행하면서 테스트의 중요성 느껴보기
프로젝트 구조

ER 다이어그램

브랜치 전략

개발 순서
(클릭하면 각 단계 별 게시물로 넘어갑니다.)
1. 서브 도메인 브랜치를 생성 후 Entity를 만든다.
해당 서브 도메인에서 사용되어질 Entity들을 설계한 것과 동일하게 생성합니다.
1-1.Repository CRUD 단위 테스트를 한다.
데이터베이스와의 연결과 생성된 Entity의 CRUD가 가능한지를 확인하기 위헤 삽입, 조회, 삭제, 수정 등의 로직을 검증합니다.
2. 기능 구현 브랜치를 생성한다.
서브 도메인에서 구현되어야 하는 기능을 붙혀 "feature/[기능명]" 형식으로 브랜치를 생성합니다.
2-1. TDD를 통해 서비스 로직을 개발하고 서비스에 적용한다.
RED 단계(실패하는 테스트 코드)부터 Green 단계(테스트 코드를 성공시키기 위한 실제 코드)를 거쳐 기능 로직을 완성합니다. 이후 테스트 코드를 Blue 단계(중복 코드 제거, 일반화 등의 리팩토링) 과정을 통해 실제 서비스 로직에 적용합니다.
2-2. 서비스 로직을 검증하기 위한 단위 테스트를 진행한다.
적용한 실제 서비스 로직을 호출하여 인자를 바꿔가면서 단위 테스트 합니다. 입력 값을 null로 바꾸거나, 이메일 유효성 검증과 같은 단위 테스를 진행합니다.
3. 컨트롤러 로직을 개발하고 컨트롤러에 적용한다.
컨트롤러에서 클라이언트에게 입력 받는 값들을 정리하고 유효성을 검증합니다. 이후 문제가 없으면 서비스를 호출하고 결과 값을 응답 객체로 리턴하는 로직을 작성합니다.
3-1. api 호출 시 응답 메시지에 대한 단위테스트를 진행한다.
클라이언트가 api를 호출했을 때 응답으로 받는 메시지의 유효성을 검증합니다. ControllerAdvice를 통해 의도한 상황대로 예외 처리가 잘되는지, 상황에 맞는 실패 응답 메시지가 반환되는지를 확인해야 합니다.
4. 이후 지속적으로 케이스를 추가하면서 단위 테스트를 진행한다.
테스트 케이스를 지속적으로 추가하면서 여러 가지 상황에 대한 로직의 유효성을 검증합니다.
응답 메시지 형식 (JSend)
1. 성공
{
"status" : "success",
"data" : {
"accessToken" : "eyJhbGciOiJIU ...",
"refreshToken" : "GciOiJIUeyJhb ..."
}
}
2. 실패
{
"status" : "fail",
"data" : {
"title" : "이메일 형식이 맞지 않음",
"content" : "이메일 형식이 맞지 않아서 로그인할 수 없습니다."
}
}
3. 에러
{
"status" : "error",
"message" : "데이터베이스의 연결 실패로 로그인을 처리할 수 없습니다."
}
API 명세서
method | Url | 설명 | request | response |
post | /auth/register | 회원가입 | { "email" : "test@test.com", "password" : "12345678" } |
{ "status" : "success", "data" : null } |
post | /auth/login | 로그인 | { "email" : "test@test.com", "password" : "12345678" } |
{ "status" : "success", "data" : { "accessToken" : "eyJhbGciOiJIU ...", "refreshToken" : "expiredToken:e ..." } } |
post | /auth/logout | 로그아웃 | { "status" : "success", "data" : null } |
테스트 환경
- application-test.yml를 생성하여 테스트를 위한 환경 설정 파일을 분리
- H2 데이터베이스를 테스트 환경에 적용해서 개발과는 분리 된 환경에서 테스트 진행
- 모든 테스트에서 반복적으로 일어나는 과정들(회원 등록, 로그인 토큰 등록)을 TestUtil로 분리
- Spring Security를 적용한 환경에서 @WithUserDetails를 통해 단위 테스트 진행
테스트 케이스의 종류
- CRUD를 검증하기 위한 테스트 케이스
- TDD 기반 서비스 로직 구현을 위한 테스트 케이스
- 서비스 로직을 검증하기 위한 테스트 케이스
- API 호출을 통해 응답 객체를 검증하기 위한 테스트 케이스
테스트 패키지 구조


'Java > Junit' 카테고리의 다른 글
[Spring] JUnit5 기반 기능 구현해보기 - Repository 단위 테스트 (0) | 2023.08.31 |
---|---|
[Spring] JUnit5 Assertions & Assumptions (0) | 2023.08.30 |
[Spring] JUnit5으로 테스트해보기 (0) | 2023.08.30 |
[Spring] Junit이란? (0) | 2023.08.28 |