반응형
    
    
    
  ✔️ 오늘 한 일
- 회원가입 기능 구현 완료
- 로컬, 테스트 프로파일 분리
- 테스트용 Docker 기반 MairaDB 설정
- 회원가입 기능 테스트
👀 오늘의 이슈
- 테스트용 DB 설정 및 프로파일 분리
- 고민한 내용
- 로컬 환경과 테스트 환경을 분리하면서, 테스트 시 로컬에서 사용하는 실제 DB와 동일한 데이터베이스를 사용할 것인지에 대해 고민했다.
 
- 고민한 이유
- 로컬 DB와 테스트 DB를 동일하게 유지하면 편리할 수 있지만, 테스트 중 데이터가 손상되거나 의도하지 않은 영향을 미칠까 우려되었다.
 
- 결론
- 테스트 환경과 실제 로컬 개발 환경을 완전히 분리하기로 결정했다.
 이를 위해 Docker를 활용해 테스트 전용 MariaDB를 설정하여 테스트 데이터와 로컬 데이터를 독립적으로 관리할 수 있게 했다.
 이로 인해 테스트 중 발생하는 데이터 변화가 로컬 DB에 영향을 주지 않고, 테스트 환경을 필요에 따라 쉽게 초기화하거나 재구성할 수 있어 더 안전하고 효율적인 테스트 환경을 구성할 수 있게 되었다.
 
- 테스트 환경과 실제 로컬 개발 환경을 완전히 분리하기로 결정했다.
💡 Today I Learned
- POST 요청 성공 응답코드 HttpStatus.OK / HttpStatus.CREATED 반환
- 문제
- @PostMapping요청의 반환값으로- SuccessResponse.created()를 사용했는데,
 실제 응답은- 201 CREATED가 아닌- 200 OK가 반환되었다.
 
// 작성한 코드
@PostMapping
public SuccessResponse<UserCreateResponse> signup(@Valid @RequestBody UserCreateRequest request) {
    return SuccessResponse.created("회원가입이 완료되었습니다.", userService.signup(request));
}// SuccessResponse 클래스
@Getter
public class SuccessResponse<T> {
    private HttpStatus success;
    private String message;
    private T data;
    public SuccessResponse(HttpStatus success, String message, T data) {
        this.success = success;
        this.message = message;
        this.data = data;
    }
    public static <T> SuccessResponse<T> ok(String message, T data) {
        return new SuccessResponse<>(HttpStatus.OK, message, data);
    }
    public static <T> SuccessResponse<T> created(String message, T data) {
        return new SuccessResponse<>(HttpStatus.CREATED, message, data);
    }
}- 원인SuccessResponse.created메서드가HttpStatus.CREATED를 반환하도록 설정하더라도,
 Spring은 기본적으로ResponseEntity를 사용하지 않으면 HTTP 상태 코드를 자동으로 설정하지 않는다.- Spring MVC는 컨트롤러 메서드에서 반환된 객체를 HTTP 응답 본문으로 직렬화하지만,
 상태 코드를 명시적으로 설정하지 않으면 기본값인HttpStatus.OK(200)가 반환된다.
- 즉, SuccessResponse.created()가 내부적으로HttpStatus.CREATED를 설정하고 있어도, 이 정보는 응답의 실제 HTTP 상태 코드에 반영되지 않는다.
 
- Spring MVC는 컨트롤러 메서드에서 반환된 객체를 HTTP 응답 본문으로 직렬화하지만,
- 해결
- 반환값을 ResponseEntity<>로 감싸서 상태 코드를 명시적으로 설정했다.
 수정 후, 실제로201 CREATED상태 코드가 반환되었다.
 
- 반환값을 
@PostMapping
public ResponseEntity<SuccessResponse<UserCreateResponse>> signup(@Valid @RequestBody UserCreateRequest request) {
    SuccessResponse<UserCreateResponse> response = SuccessResponse.created("회원가입이 완료되었습니다.", userService.signup(request));
    return new ResponseEntity<>(response, HttpStatus.CREATED);
}
< 해당 글은 velog에서 이전하며 옮겨온 글로, 가독성이 좋지 않을 수 있는 점 양해 부탁드립니다. >
🔗 velog 버전 보기 : https://velog.io/@ryuneng2/TIL-원티드-프리온보딩-백엔드-인턴십-Week3-20일차-0908
'TIL > 2024 원티드 프리온보딩 백엔드 인턴십' 카테고리의 다른 글
| [TIL] 원티드 프리온보딩 백엔드 인턴십 Week4) 22일차, 0910 (0) | 2025.01.23 | 
|---|---|
| [TIL] 원티드 프리온보딩 백엔드 인턴십 Week3) 21일차, 0909 (0) | 2025.01.23 | 
| [TIL] 원티드 프리온보딩 백엔드 인턴십 Week3) 19일차, 0907 (1) | 2025.01.23 | 
| [TIL] 원티드 프리온보딩 백엔드 인턴십 Week3) 18일차, 0906 (0) | 2025.01.23 | 
| [TIL] 원티드 프리온보딩 백엔드 인턴십 Week3) 17일차, 0905 (0) | 2025.01.23 |