[Jinyong] Week10 미션 - #117
Conversation
[Jinyong] Week4 미션
[Jinyong] Week6 미션
[Jinyong] Week7 미션
[Jinyong] Week8 미션
[Jinyong] Week9 미션
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0def138327
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| @RequestParam(required = false) String sort | ||
| ) { | ||
| BaseSuccessCode code = MissionSuccessCode.OK; | ||
| return ApiResponse.onSuccess(code, missionService.getMissionList(storeId, pageSize, pageNumber, sort)); |
There was a problem hiding this comment.
가게 미션 목록 조회에서 컨트롤러는 pageSize, pageNumber 순서로 넘기지만 서비스 메서드는 pageNumber, pageSize 순서로 받습니다. 그래서 일반적인 요청인 pageNumber=0&pageSize=10이 서비스 안에서는 PageRequest.of(10, 0)으로 해석되어 Spring Data가 페이지 크기 0 예외를 냅니다. 컨트롤러와 서비스의 파라미터 순서를 동일하게 맞추거나 Pageable/요청 DTO로 묶어 전달하는 방식을 연습해 보세요; 다음 학습 포인트는 컨트롤러-서비스 계약과 페이징 파라미터 의미입니다.
Useful? React with 👍 / 👎.
| @Value("${jwt.token.secretKey}") String secret, | ||
| @Value("${jwt.token.expiration.access}") Long accessExpiration |
There was a problem hiding this comment.
JwtUtil 생성자가 jwt.token.secretKey와 jwt.token.expiration.access를 기본값 없이 필수로 요구하지만, 현재 커밋에는 Jinyong/src/main/resources 설정 파일이 없어 로컬 실행이나 @SpringBootTest contextLoads가 빈 생성 단계에서 placeholder 해석 실패로 멈춥니다. application.yml/application-test.yml에 테스트용 값을 추가하거나 @ConfigurationProperties로 외부 설정을 명확히 검증하세요; 다음 학습 포인트는 Spring Environment와 외부 설정 주입입니다.
Useful? React with 👍 / 👎.
|
|
||
|
|
||
| // ID 기준이면 다음 커서는 마지막 리뷰의 ID | ||
| if (query.equals("id")) { |
There was a problem hiding this comment.
위의 조회 분기에서는 query.toLowerCase()로 ID 같은 대소문자 입력도 허용하지만, 다음 커서를 만들 때는 원본 query.equals("id")를 검사합니다. 이 경우 query=ID&cursor=-1 첫 응답이 score:id 형식 커서를 내려주고, 다음 요청에서 ID 커서 파싱이 깨질 수 있습니다. String normalizedQuery = query.toLowerCase()처럼 한 번 정규화한 값을 조회 분기와 커서 생성에 모두 사용하세요; 다음 학습 포인트는 입력 정규화와 커서 페이지네이션 일관성입니다.
Useful? React with 👍 / 👎.
kjhh2605
left a comment
There was a problem hiding this comment.
[키워드 조사]
클라우드 컴퓨팅, AWS/GCP, 환경변수, yml 환경 분리를 실제 배포 맥락과 연결하려는 시도가 좋습니다. 다만 ch10 문서 중간에 코드 조각이 섞여 Markdown 구조가 끊기는 부분이 있어 개념 정리의 신뢰도가 낮아질 수 있습니다. Docker와 jar 비교까지 완결되도록 문서 구조를 다시 확인하는 것을 권장합니다.
[코드 리뷰]
회원가입, 로그인, JWT, OAuth, 예외 처리까지 인증 기능을 여러 계층으로 확장한 점이 좋습니다. Controller-Service-Converter-Repository 흐름도 비교적 명확합니다. 다만 JWT 기반 인증에서는 세션 정책을 코드 의도와 일치시켜야 하며, IDE 설정 파일과 로컬 실행 정보는 저장소에 포함하지 않는 습관이 필요합니다. 특히 환경변수와 민감 정보 관리 주차이므로, 배포 설정 파일과 로컬 설정 파일의 경계를 분명히 하는 것을 권장합니다.
| # application-local.yml | ||
| spring: | ||
| datasource: | ||
| url: jdbc:mysql://localhost:3306/mydb |
There was a problem hiding this comment.
문서 중간에 @EnableWebSecurity와 SecurityConfig 코드 일부가 섞여 있어 ch10 키워드 정리의 구조가 끊깁니다. 배포 개념 정리와 코드 조각을 분리하고, Docker와 jar 비교까지 문서가 완결되는지 다시 확인하는 것을 권장합니다.
|
|
||
| // 2. 세션을 쓰지 않으므로 Stateless(무상태)로 설정하며 끈다. | ||
| .sessionManagement(session -> session | ||
| .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) |
There was a problem hiding this comment.
JWT 기반 인증을 의도한다면 SessionCreationPolicy.STATELESS를 사용하는 것이 더 적절합니다. 현재 주석은 무상태를 설명하지만 실제 설정은 IF_REQUIRED라서 필요한 경우 세션이 생성될 수 있으므로, 주석과 설정을 일치시키는 것을 권장합니다.
| <component name="RunManager"> | ||
| <configuration name="Umc10thApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" nameIsGenerated="true"> | ||
| <envs> | ||
| <env name="DB_URL" value="jdbc:mysql://localhost:3306/umc10th?serverTimezone=Asia/Seoul&characterEncoding=UTF-8" /> |
There was a problem hiding this comment.
IDE 설정 파일과 로컬 실행 환경 정보는 저장소에 포함하지 않는 것을 권장합니다. 특히 환경변수와 민감 정보 관리 주차에서는 로컬 DB 접속 정보나 개인 실행 설정이 커밋되지 않도록 .gitignore와 추적 파일 정리를 함께 확인해야 합니다.
🔗 연관 이슈
🛠 작업 내용
🖼 스크린샷 (선택)
👀 리뷰 요구사항 (선택)
🤖 AI 활용
💬 나의 프롬프트
🧠 AI 응답
✅ 내가 최종 선택한 방법 (이유)
💡 나만의 Tip (선택)