Skip to content

[준오] Chapter 5. 프로젝트 세팅하기 - API 응답 통일, 에러 핸들러#31

Open
OCJune wants to merge 7 commits into
juno/mainfrom
juno/#30
Open

[준오] Chapter 5. 프로젝트 세팅하기 - API 응답 통일, 에러 핸들러#31
OCJune wants to merge 7 commits into
juno/mainfrom
juno/#30

Conversation

@OCJune
Copy link
Copy Markdown

@OCJune OCJune commented Apr 29, 2026

✏️ 작업 내용

#️⃣ 연관된 이슈

closes #30


💡 함께 공유하고 싶은 부분

해당 주차를 공부하면서 함께 이야기하고 싶은 주제를 남겨주세요.

(어려웠던 부분과 해결 과정, 핵심 코드, 참고한 자료 등)


🤔 질문

해당 주차 워크북을 공부하면서 궁금했던 질문들을 남겨주세요.


✅ 워크북 체크리스트

  • 모든 핵심 키워드 정리를 마쳤나요?
  • 핵심 키워드에 대해 완벽히 이해하셨나요?
  • 이론 학습 이후 직접 실습을 해보는 시간을 가졌나요?
  • 미션을 수행하셨나요?
  • 미션을 기록하셨나요?

✅ 컨벤션 체크리스트

  • 디렉토리 구조 컨벤션을 잘 지켰나요?
  • pr 제목을 컨벤션에 맞게 작성하였나요?
  • pr에 해당되는 이슈를 연결하였나요?
  • 적절한 라벨을 설정하였나요?
  • 스터디원들에게 code review를 요청하기 위해 reviewer를 등록하였나요?
  • 닉네임/main 브랜치의 최신 상태를 반영하고 있는지 확인했나요?

📌 주안점

@OCJune OCJune requested a review from Copilot April 29, 2026 11:10
@OCJune OCJune self-assigned this Apr 29, 2026
@OCJune OCJune requested a review from a team April 29, 2026 11:10
@OCJune OCJune added the 🚀Week 5 5주차 워크북 미션 label Apr 29, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Sets up the Week 5 Spring Boot project skeleton and introduces a unified API response envelope plus a global exception handler (with Swagger/OpenAPI configuration) to standardize success/failure responses across controllers.

Changes:

  • Added ApiResponse wrapper with success/error code abstractions (BaseSuccessCode / BaseErrorCode) and general success/error enums.
  • Added @RestControllerAdvice global exception handler for ProjectException and generic exceptions.
  • Bootstrapped a new Gradle-based Spring Boot project structure (wrapper/scripts/config) with initial member/mission/review scaffolding.

Reviewed changes

Copilot reviewed 57 out of 58 changed files in this pull request and generated 18 comments.

Show a summary per file
File Description
Juno/Week5/Week5_Mission/src/test/java/com/example/week5_mission/Week5MissionApplicationTests.java Spring Boot context-load test scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/global/enums/Address.java Global enum placeholder used by DTOs
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/global/config/SwaggerConfig.java OpenAPI/Swagger configuration + JWT security scheme
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/global/apiPayload/handler/GeneralExceptionAdvice.java Global exception handling returning unified ApiResponse
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/global/apiPayload/exception/ProjectException.java Base runtime exception carrying BaseErrorCode
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/global/apiPayload/code/GeneralSuccessCode.java Common success code definition
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/global/apiPayload/code/GeneralErrorCode.java Common error code definition
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/global/apiPayload/code/BaseSuccessCode.java Success code interface (status/code/message)
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/global/apiPayload/code/BaseErrorCode.java Error code interface (status/code/message)
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/global/apiPayload/ApiResponse.java Unified API response envelope
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/review/service/ReviewService.java Review service scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/review/repository/ReviewRepository.java Review repository scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/review/exception/code/ReviewErrorCode.java Review-domain error code scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/review/exception/ReviewException.java Review-domain exception type
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/review/entity/ReviewPhoto.java Review photo entity scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/review/entity/Review.java Review entity scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/review/entity/Reply.java Reply entity scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/review/dto/ReviewResDTO.java Review response DTO scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/review/dto/ReviewReqDTO.java Review request DTO scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/review/converter/ReviewConverter.java Review converter scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/review/controller/ReviewController.java Review endpoints returning ApiResponse
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/mission/service/MissionService.java Mission service scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/mission/repository/MissionRepository.java Mission repository scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/mission/exception/code/MissionErrorCode.java Mission-domain error code scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/mission/exception/MissionException.java Mission-domain exception type
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/mission/entity/mapping/MemberMission.java Mapping entity scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/mission/entity/Store.java Store entity scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/mission/entity/Mission.java Mission entity scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/mission/entity/Location.java Location entity scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/mission/dto/MissionResDTO.java Mission response DTO scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/mission/dto/MissionReqDTO.java Mission request DTO scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/mission/converter/MissionConverter.java Mission converter scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/mission/controller/MissionController.java Mission endpoints returning ApiResponse
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/member/service/MemberService.java Member service scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/member/repository/MemberRepository.java Member repository scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/member/exception/code/MemberErrorCode.java Member-domain error code scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/member/exception/MemberException.java Member-domain exception type
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/member/enums/Term.java Member term enum scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/member/enums/SocialType.java Social type enum scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/member/enums/Gender.java Gender enum scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/member/entity/mapping/MemberTerm.java Mapping entity scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/member/entity/mapping/MemberFood.java Mapping entity scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/member/entity/Term.java Term entity scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/member/entity/Member.java Member entity scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/member/entity/Food.java Food entity scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/member/dto/MemberResDTO.java Member response DTO scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/member/dto/MemberReqDTO.java Member request DTO scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/member/converter/MemberConverter.java Member converter scaffold
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/domain/member/controller/MemberController.java Auth/member endpoints returning ApiResponse
Juno/Week5/Week5_Mission/src/main/java/com/example/week5_mission/Week5MissionApplication.java Spring Boot application entrypoint
Juno/Week5/Week5_Mission/settings.gradle Gradle project name setup
Juno/Week5/Week5_Mission/gradlew.bat Gradle wrapper (Windows)
Juno/Week5/Week5_Mission/gradlew Gradle wrapper (POSIX)
Juno/Week5/Week5_Mission/gradle/wrapper/gradle-wrapper.properties Gradle wrapper distribution pin
Juno/Week5/Week5_Mission/gradle/wrapper/gradle-wrapper.jar Gradle wrapper binary
Juno/Week5/Week5_Mission/build.gradle Gradle build configuration + dependencies
Juno/Week5/Week5_Mission/.gitignore Project gitignore (includes env/yml ignores)
Juno/Week5/Week5_Mission/.gitattributes EOL and binary handling rules

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +30 to +35
BaseErrorCode code = GeneralErrorCode.INTERNAL_SERVER_ERROR;
return ResponseEntity.status(code.getStatus())
.body(ApiResponse.onFailure(
code,
ex.getMessage()
)
Comment on lines +23 to +28
Components components = new Components()
.addSecuritySchemes(securityScheme, new SecurityScheme()
.name(securityScheme)
.type(SecurityScheme.Type.HTTP)
.scheme("Bearer")
.bearerFormat("JWT"));
Comment on lines +10 to +13
public enum ReviewErrorCode implements BaseErrorCode {

REVIEW_ERROR_CODE(HttpStatus.NOT_FOUND, "MEMBER404_1", "해당 사용자를 찾을 수 없습니다.");

public class MemberResDTO {

@Getter
public static class SignUpRequestBody {
@@ -0,0 +1,4 @@
package com.example.week5_mission.domain.member.enums;

public enum Gender {
Comment on lines +23 to +28
implementation 'org.springframework.boot:spring-boot-starter-webmvc'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-data-jpa-test'
testImplementation 'org.springframework.boot:spring-boot-starter-webmvc-test'
Comment on lines +20 to +24
@GetMapping("")
public ApiResponse<MissionResDTO.MissionList> missions(
@RequestHeader("Authorization") String auth,
@RequestBody MissionReqDTO.Missions dto
){
Comment on lines +1 to +4
package com.example.week5_mission.domain.mission.service;

public class MissionService {
}
Comment on lines +3 to +6
public class ReviewResDTO {
public static class Review {
Long reviewId;
}
Comment on lines +3 to +15
import com.example.week5_mission.domain.mission.entity.Mission;
import lombok.Getter;

public class MissionResDTO {

@Getter
public static class MissionList {
Mission[] missionList;
}

@Getter
public static class Mission {
int point;
@sekong11
Copy link
Copy Markdown

sekong11 commented May 3, 2026

공통 응답/예외 핸들러 모두 적절하게 구현하신 것 같습니다! 고생하셨어요!!

Copy link
Copy Markdown

@CokaNuri CokaNuri left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

제가 코드별로 달아드린 코멘트를 보시고 반영해주세요!

@OCJune OCJune requested a review from CokaNuri May 10, 2026 13:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🚀Week 5 5주차 워크북 미션

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Chapter 5. 프로젝트 세팅하기 - API 응답 통일, 에러 핸들러

4 participants