-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
🏄 :: (Meogo-52) feign client #53
Conversation
Caution Review failedThe pull request is closed. Walkthrough이 변경 사항은 Changes
Possibly related PRs
Suggested labels
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 10
🧹 Outside diff range and nitpick comments (35)
src/main/kotlin/org/meogo/domain/school/enum/Gubun.kt (1)
1-5
: 전반적인 구현이 잘 되어 있습니다.enum 클래스의 구조와 구현이 잘 되어 있습니다. 교육 수준을 체계적으로 분류하는 좋은 방법입니다.
다음 사항들을 고려해 보시기 바랍니다:
- enum 클래스의 목적과 사용법을 설명하는 KDoc 주석을 추가하는 것이 좋겠습니다.
- 향후 국제화를 고려한다면, 문자열 값을 리소스 파일로 분리하는 것을 고려해 보세요.
다음과 같이 KDoc 주석을 추가할 수 있습니다:
/** * 교육 기관의 유형을 나타내는 열거형 클래스입니다. * * @property value API 요청 또는 데이터베이스 쿼리에 사용되는 문자열 값 */ enum class Gubun(val value: String) { // ... (기존 코드) }src/main/kotlin/org/meogo/global/utill/exception/FcmException.kt (1)
1-8
: 구현이 깔끔하고 적절합니다.FcmException 객체의 구현이 간결하고 Kotlin의 모범 사례를 따르고 있습니다. 싱글톤 예외 타입에 대해 object를 사용한 것이 적절합니다.
패키지 이름 철자를 수정하는 것이 좋겠습니다.
현재 패키지 이름에 'utill'이라고 되어 있는데, 이는 'util'의 오타로 보입니다. 패키지 이름을 수정하는 것이 좋겠습니다.
다음과 같이 수정을 제안합니다:
-package org.meogo.global.utill.exception +package org.meogo.global.util.exception이 변경사항을 적용하면 일관성 있는 명명 규칙을 유지할 수 있습니다.
src/main/kotlin/org/meogo/global/feign/CareerSchoolResponse.kt (2)
7-9
: DataSearch 클래스 구현이 좋습니다. 작은 개선 제안이 있습니다.DataSearch 클래스가 CareerSchoolResponse 객체의 리스트를 잘 캡슐화하고 있습니다. 구조가 명확합니다.
가독성을 높이기 위해 'content' 대신 더 구체적인 이름을 사용하는 것을 고려해 보세요. 예를 들어:
data class DataSearch( val schools: List<CareerSchoolResponse> )이렇게 하면 속성의 목적이 더 명확해질 것 같습니다.
11-18
: CareerSchoolResponse 클래스 구현이 전반적으로 좋습니다. 일관성과 명확성을 위한 제안사항이 있습니다.CareerSchoolResponse 클래스가 학교 정보를 잘 표현하고 있습니다. nullable 타입의 적절한 사용도 좋습니다.
- 속성 이름의 일관성: 'adres'와 같은 약어 대신 'address'를 사용하는 것이 더 명확할 것 같습니다.
- 한국어 로마자 표기: 'schoolGubun'과 같은 속성은 영어로 번역하거나 주석을 추가하여 의미를 명확히 하는 것이 좋겠습니다.
예시:
data class CareerSchoolResponse( val seq: String, val link: String, val schoolType: String?, // formerly schoolGubun val address: String, // formerly adres val schoolName: String, val establishmentType: String // formerly estType )이렇게 변경하면 코드의 가독성과 유지보수성이 향상될 것 같습니다.
src/main/kotlin/org/meogo/domain/school/service/QuerySchoolService.kt (2)
7-10
: 생성자 수준의 의존성 주입을 고려해보세요.클래스 선언과 생성자가 올바르게 작성되었습니다. 하지만 코드를 더 개선하기 위해 생성자 수준의 의존성 주입을 사용하는 것이 좋습니다.
다음과 같이 변경하는 것을 고려해보세요:
@Service class QuerySchoolService @Autowired constructor( private val careerFeignClientService: CareerFeignClientService )이렇게 하면 의존성 주입이 더 명시적이고 테스트하기 쉬워집니다.
12-14
:execute
메서드의 개선 사항
execute
메서드가 간결하게 구현되어 있지만, 다음 사항들을 고려해보시기 바랍니다:
오류 처리: 현재 메서드에서 오류 처리가 보이지 않습니다.
careerFeignClientService.getSchoolInfo
에서 발생할 수 있는 예외를 처리하는 방법을 고려해보세요.정렬 효율성: 결과를 메모리에서 정렬하고 있는데, 대규모 데이터셋의 경우 비효율적일 수 있습니다. 가능하다면 데이터베이스 수준에서 정렬을 수행하는 것이 좋습니다.
문서화: 메서드에 대한 문서화(KDoc)를 추가하여 각 매개변수의 의미와 반환값에 대한 설명을 제공하는 것이 좋습니다.
다음과 같이 개선할 수 있습니다:
/** * 학교 정보를 조회하고 정렬된 결과를 반환합니다. * * @param gubun 학교 구분 * @param region 지역 (선택사항) * @param name 학교 이름 (선택사항) * @param sch1 추가 검색 조건 (선택사항) * @return 학교 이름으로 정렬된 학교 정보 리스트 * @throws SomeSpecificException 외부 서비스 호출 중 오류 발생 시 */ fun execute(gubun: Gubun, region: String?, name: String?, sch1: String?): List<School> { return try { careerFeignClientService.getSchoolInfo(gubun, name, region, sch1) .sortedBy { it.schoolName } } catch (e: Exception) { // 적절한 예외 처리 로직 throw SomeSpecificException("학교 정보 조회 중 오류 발생", e) } }이렇게 하면 메서드의 가독성과 유지보수성이 향상됩니다.
src/main/kotlin/org/meogo/global/feign/FeignProperty.kt (2)
3-13
:FeignProperty
객체가 잘 구현되었습니다.상수들이 잘 정의되어 있고 Kotlin 명명 규칙을 따르고 있습니다. API 요청 매개변수 이름을 중앙에서 관리할 수 있는 좋은 방법입니다.
각 상수에 대한 간단한 설명을 추가하는 것이 좋을 것 같습니다. 예를 들어:
/** * API 요청 매개변수 상수 */ object FeignProperty { /** API 키 매개변수 이름 */ const val API_KEY = "apiKey" // 다른 상수들에 대해서도 비슷한 방식으로 주석을 추가하세요. }
15-20
:FeignRequestProperty
객체가 잘 구현되었습니다.상수들이 잘 정의되어 있고 Kotlin 명명 규칙을 따르고 있습니다. API 요청의 기본 매개변수 값을 제공하는 좋은 방법입니다.
다음과 같은 개선 사항을 제안합니다:
- 객체에 대한 설명 주석을 추가하세요.
FeignProperty
와의 관계를 설명하는 주석을 추가하세요.- 각 상수에 대한 간단한 설명을 추가하세요.
예시:
/** * API 요청의 기본 매개변수 값 * 이 객체는 [FeignProperty]에 정의된 일부 매개변수의 기본값을 제공합니다. */ object FeignRequestProperty { /** 서비스 유형 */ const val SVC_TYPE = "api" /** 서비스 코드 */ const val SVC_CODE = "SCHOOL" /** 컨텐츠 타입 */ const val CONTENT_TYPE = "json" /** 페이지당 결과 수 */ const val PER_PAGE = 500 }src/main/kotlin/org/meogo/global/error/exception/ErrorCode.kt (1)
28-29
: FCM 서버 오류 코드가 적절히 추가되었습니다.새로운
FCM_SERVER_ERROR
코드가 기존 패턴을 따라 올바르게 추가되었습니다. 이는 FCM 관련 기능의 도입과 일치합니다.가독성을 위해 새로운 오류 코드를 기존
INTERNAL_SERVER_ERROR
와 구분하는 것이 좋겠습니다. 다음과 같이 빈 줄을 추가하는 것은 어떨까요?// Internal Server Error INTERNAL_SERVER_ERROR(500, "Internal Server Error"), + FCM_SERVER_ERROR(500, "FCM Server Error")
src/main/resources/application.yml (1)
48-49
: 환경 변수 사용 승인 및 문서화 제안
${CAREER_URL}
환경 변수를 사용하여 career URL을 설정한 것은 좋은 방법입니다. 이는 구성 관리에 적합합니다.이 환경 변수의 목적과 설정 방법에 대한 문서를 README 파일에 추가하는 것이 좋습니다.
src/main/kotlin/org/meogo/global/feign/CareerFeignClient.kt (1)
7-8
: FeignClient 인터페이스 선언이 적절합니다.인터페이스 이름과 @FeignClient 어노테이션 사용이 적절합니다. URL을 매개변수화한 것은 좋은 방식입니다.
가독성을 위해 인터페이스 선언 앞에 빈 줄을 추가하는 것이 좋습니다.
src/main/kotlin/org/meogo/domain/school/presentation/SchoolController.kt (3)
12-20
: 어노테이션이 적절하게 사용되었습니다.REST 컨트롤러에 적합한 어노테이션들이 사용되었으며, Swagger 어노테이션을 통해 API 문서화가 개선되었습니다.
@Operation
어노테이션에description
파라미터를 추가하여 API 엔드포인트에 대한 더 자세한 설명을 제공하는 것이 좋습니다. 예를 들어:@Operation( summary = "학교 정보 조회", description = "주어진 매개변수를 기반으로 학교 정보를 조회합니다. 구분, 지역, 이름, 학교 코드로 필터링할 수 있습니다." )
21-30
: 메서드 시그니처와 매개변수가 잘 정의되어 있습니다.메서드 이름이 그 목적을 명확히 설명하고 있으며, 선택적 매개변수에 대해 nullable 타입을 사용한 것이 적절합니다.
Gubun
enum 타입을 사용하여 타입 안전성을 제공하고 있습니다.각 매개변수에 대한 설명을 추가하면 API 사용자에게 더 명확한 정보를 제공할 수 있습니다. 예를 들어:
@RequestParam(name = "gubun", description = "학교 구분 (예: 초등학교, 중학교, 고등학교)") gubun: Gubun, @RequestParam(name = "region", description = "학교가 위치한 지역", required = false) region: String?, @RequestParam(name = "name", description = "학교 이름 검색어", required = false) name: String?, @RequestParam(name = "sch1", description = "학교 코드", required = false) sch1: String?
15-17
: 서비스 주입 및 사용이 적절합니다.생성자를 통한 의존성 주입은 좋은 방식이며, 서비스 메서드가 모든 필요한 매개변수와 함께 올바르게 호출되고 있습니다.
오류 처리를 개선하기 위해
try-catch
블록을 추가하는 것이 좋습니다. 예를 들어:fun getSchools( // ... 매개변수 ... ) = try { querySchoolService.execute(gubun, region, name, sch1) } catch (e: Exception) { // 적절한 오류 응답 반환 // 예: ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("오류 발생: ${e.message}") }이렇게 하면 예기치 않은 오류가 발생했을 때 더 우아하게 처리할 수 있습니다.
Also applies to: 30-30
src/main/kotlin/org/meogo/domain/comment/presentation/CommentController.kt (2)
18-18
:@Tag
어노테이션 추가 승인 및 개선 제안
CommentController
클래스에@Tag(name = "Comment API")
어노테이션을 추가한 것은 적절합니다. 이는 API 문서화를 개선하고 엔드포인트를 더 잘 구성하는 데 도움이 됩니다.태그 이름을 더 구체적으로 만들어 API의 목적을 더 잘 반영할 수 있습니다. 예를 들어, "댓글 관리 API" 또는 "Comment Management API"와 같이 변경하는 것을 고려해 보세요.
25-25
:@Operation
어노테이션 추가 승인 및 개선 제안
create
와delete
메서드에 각각@Operation(summary = "댓글 작성")
과@Operation(summary = "댓글 삭제")
어노테이션을 추가한 것은 적절합니다. 이는 각 API 엔드포인트의 목적을 명확히 설명하여 문서화를 개선합니다.각 작업에 대해 더 자세한 설명을 제공하기 위해
description
매개변수를 추가하는 것을 고려해 보세요. 예를 들어:@Operation( summary = "댓글 작성", description = "사용자가 제공한 내용으로 새 댓글을 생성합니다. 댓글 ID는 자동으로 생성됩니다." )이렇게 하면 API 사용자에게 각 엔드포인트에 대한 더 상세한 정보를 제공할 수 있습니다.
Also applies to: 33-33
src/main/kotlin/org/meogo/domain/bookmark/presentation/BookmarkController.kt (2)
22-25
: 북마크 생성 메서드 문서화 개선 승인@operation과 @ResponseStatus 어노테이션 추가로 API 문서화가 개선되었습니다.
메서드의 반환 타입을 명시적으로 지정하는 것이 좋습니다. 예를 들어:
fun create(@RequestParam(name = "school_id") schoolId: Int): ResponseEntity<Unit> = ResponseEntity.ok(bookmarkService.execute(schoolId))이렇게 하면 API의 응답 형식이 더 명확해집니다.
28-36
: 북마크 조회 메서드들의 문서화 개선 승인myBookmarks와 isBookmarked 메서드에 @operation 어노테이션이 적절히 추가되어 API 문서화가 개선되었습니다.
일관성을 위해 이 메서드들에도 @ResponseStatus 어노테이션을 추가하는 것이 좋습니다. 예를 들어:
@ResponseStatus(HttpStatus.OK) @GetMapping("/query/my") fun myBookmarks() = ... @ResponseStatus(HttpStatus.OK) @GetMapping("/query") fun isBookmarked(@RequestParam(name = "school_id") schoolId: Int) = ...이렇게 하면 모든 메서드에서 일관된 응답 상태 처리를 보장할 수 있습니다.
src/main/kotlin/org/meogo/global/utill/FcmUtil.kt (1)
18-29
: 디버깅 출력문 제거 및 메서드 승인
sendMessage
메서드의 로직은 올바르게 구현되었습니다. 그러나 프로덕션 코드에서는 디버깅을 위한println
문을 제거하는 것이 좋습니다.다음과 같이 디버깅 출력문을 제거하는 것을 제안합니다:
fun sendMessage(fcmToken: List<String>, title: String, message: String) { val message = messageSetting(fcmToken, title, message) - println("호우") try { firebase.sendMulticastAsync(message) } catch (e: FirebaseMessagingException) { throw FcmException } - println("이게되네") }🧰 Tools
🪛 detekt
[warning] 24-24: The caught exception is swallowed. The original exception could be lost.
(detekt.exceptions.SwallowedException)
src/main/kotlin/org/meogo/domain/user/presentation/UserController.kt (4)
3-4
: OpenAPI 주석 추가에 대한 승인OpenAPI 주석을 추가한 것은 API 문서화를 개선하는 좋은 방법입니다.
@Tag
주석을 사용하여 컨트롤러를 "User API"로 분류한 것도 적절합니다.더 나은 일관성을 위해
@Tag(name = "User API")
를@Tag(name = "사용자 API")
로 변경하는 것을 고려해 보세요. 이렇게 하면 한글로 작성된 다른 주석들과 일치하게 됩니다.Also applies to: 28-28
47-50
: 로그인 메서드 추가 승인새로 추가된
signIn
메서드는 사용자 로그인 기능을 적절히 처리하고 있습니다. OpenAPI 주석도 메서드의 목적을 잘 설명하고 있습니다.일관성을 위해
@Valid
어노테이션을UserSignInRequest
에도 추가하는 것을 고려해 보세요. 이는signUp
메서드에서 사용된 방식과 일치하며, 입력 유효성 검사를 보장합니다.fun signIn(@Valid @RequestBody request: UserSignInRequest): TokenResponse = userSignInService.execute(request)
52-60
: 계정 ID 확인 및 마이페이지 메서드 추가 승인
checkAccountId
와myPage
메서드가 적절히 추가되었습니다. 두 메서드 모두 목적을 잘 설명하는 OpenAPI 주석이 포함되어 있습니다.
checkAccountId
메서드의 경우, HTTP 상태 코드를 명시적으로 설정하는 것이 좋습니다. 예를 들어:@ResponseStatus(HttpStatus.OK) fun checkAccountId(@RequestBody request: UserCheckRequest): Boolean = userCheckAccountIdService.execute(request)이렇게 하면 API 사용자에게 예상되는 응답 상태를 명확히 전달할 수 있습니다.
Line range hint
62-70
: 프로필 업데이트 메서드 추가 승인
updateProfile
메서드가 적절히 추가되었습니다. 파일 업로드와 사용자 데이터 수정을 동시에 처리하는 방식이 좋습니다.
반환 타입을 명시적으로 지정하는 것이 좋습니다. 예를 들어, 작업 성공 시
Unit
을 반환하도록 할 수 있습니다.파일 업로드 실패에 대한 예외 처리를 고려해 보세요. 예를 들어:
@PatchMapping("/modify") @ResponseStatus(HttpStatus.OK) fun updateProfile( @RequestPart(name = "image", required = false) file: MultipartFile?, @Valid @RequestPart(name = "request") request: UserModifyRequest ): Unit = modifyUserInfoService.execute(request, file)이렇게 하면 API의 동작이 더 명확해지고, 클라이언트 측에서 예외 상황을 더 잘 처리할 수 있습니다.
src/main/kotlin/org/meogo/domain/post/presentation/PostController.kt (5)
26-26
: API 태그 추가 승인 및 개선 제안"Community API" 태그 추가는 API 문서화를 개선하는 좋은 변경사항입니다. 더 나은 일관성을 위해 태그 이름을 영어로 변경하는 것을 고려해 보세요.
다음과 같이 변경하는 것을 고려해 보세요:
-@Tag(name = "Community API") +@Tag(name = "Community API", description = "게시글 관련 API")
Line range hint
39-49
: create 메서드에 대한 @operation 어노테이션 추가 승인 및 개선 제안
create
메서드에 대한 @operation 어노테이션 추가는 API 문서화를 개선하는 좋은 변경사항입니다. 국제적 사용을 위해 영어 설명을 추가하는 것을 고려해 보세요.다음과 같이 변경하는 것을 고려해 보세요:
-@Operation(summary = "게시글 작성") +@Operation(summary = "게시글 작성", description = "Create a new post")
Line range hint
56-65
: modify 메서드에 대한 @operation 어노테이션 수정 필요@operation 어노테이션 추가는 좋은 변경이지만, 현재 요약문에 오류가 있습니다. 메서드 이름은 "modify"이고 게시글을 수정하는 것 같은데, 요약문은 "댓글 수정"이라고 되어 있습니다.
다음과 같이 수정하는 것을 제안합니다:
-@Operation(summary = "댓글 수정") +@Operation(summary = "게시글 수정", description = "Modify an existing post")
66-73
: queryAll 및 querySchool 메서드에 대한 @operation 어노테이션 추가 승인 및 개선 제안
queryAll
및querySchool
메서드에 대한 @operation 어노테이션 추가는 API 문서화를 개선하는 좋은 변경사항입니다. 국제적 사용을 위해 영어 설명을 추가하는 것을 고려해 보세요.다음과 같이 변경하는 것을 고려해 보세요:
-@Operation(summary = "모든 게시글 조회") +@Operation(summary = "모든 게시글 조회", description = "Query all posts") -@Operation(summary = "학교별 게시글 조회") +@Operation(summary = "학교별 게시글 조회", description = "Query posts by school")
74-82
: queryPostDetail 및 queryMyPosts 메서드에 대한 @operation 어노테이션 추가 승인 및 개선 제안
queryPostDetail
및queryMyPosts
메서드에 대한 @operation 어노테이션 추가는 API 문서화를 개선하는 좋은 변경사항입니다. 국제적 사용을 위해 영어 설명을 추가하는 것을 고려해 보세요.다음과 같이 변경하는 것을 고려해 보세요:
-@Operation(summary = "게시글 상세보기") +@Operation(summary = "게시글 상세보기", description = "Query post details") -@Operation(summary = "내가 쓴 게시글 조회") +@Operation(summary = "내가 쓴 게시글 조회", description = "Query my posts")src/main/kotlin/org/meogo/domain/review/presentation/ReviewController.kt (5)
Line range hint
29-41
: 클래스 어노테이션 및 생성자 매개변수 추가 승인@tag 어노테이션 추가와 생성자 매개변수 주입은 좋은 변경사항입니다. API 문서화가 개선되고 의존성 주입 패턴을 따르고 있습니다.
생성자 매개변수가 많아 가독성이 떨어질 수 있습니다. 필요하다면 빌더 패턴이나 팩토리 메서드를 고려해 보세요.
Line range hint
42-52
: 리뷰 생성 메서드 추가 승인리뷰 생성을 위한 새로운 메서드가 적절히 추가되었습니다. @operation 어노테이션을 통해 API 문서화가 개선되었습니다.
images
매개변수에 대한 null 체크나 빈 리스트 처리를 고려해 보세요. 또한, 대용량 파일 업로드에 대한 제한을 설정하는 것이 좋을 수 있습니다.
Line range hint
58-66
: 리뷰 수정 메서드 추가 승인리뷰 수정을 위한 새로운 메서드가 적절히 추가되었습니다. @operation 어노테이션을 통해 API 문서화가 개선되었습니다.
images
매개변수에 대한 null 체크나 빈 리스트 처리를 고려해 보세요. 또한, 존재하지 않는 리뷰 ID에 대한 예외 처리를 추가하는 것이 좋을 수 있습니다.
67-72
: 리뷰 삭제 메서드 추가 승인리뷰 삭제를 위한 새로운 메서드가 적절히 추가되었습니다. @operation 어노테이션을 통해 API 문서화가 개선되었습니다.
존재하지 않는 리뷰 ID에 대한 예외 처리를 추가하는 것이 좋을 수 있습니다. 또한, 삭제 작업의 성공 여부를 반환하는 것을 고려해 보세요.
Line range hint
86-90
: 학교 일치 여부 확인 메서드 추가 승인학교 ID 일치 여부를 확인하는 새로운 메서드가 적절히 추가되었습니다. @operation 어노테이션을 통해 API 문서화가 개선되었습니다.
메서드 이름을
isSchoolMatch
로 변경하는 것을 고려해 보세요. 이는 boolean 값을 반환하는 메서드의 일반적인 네이밍 컨벤션에 더 부합합니다.src/main/kotlin/org/meogo/global/config/FcmConfig.kt (1)
31-31
: 임시 파일 삭제의 성공 여부를 확인하세요.
tempfile.delete()
의 반환값을 확인하여 파일이 정상적으로 삭제되었는지 확인하고, 실패 시 적절한 조치를 취하는 것이 좋습니다.코드 수정 예시:
if (!tempfile.delete()) { // 파일 삭제 실패에 대한 처리 로직 추가 logger.warn("임시 파일 삭제 실패: {}", PATH) }src/main/kotlin/org/meogo/global/feign/CareerFeignClientService.kt (1)
40-40
: 불필요한let
과toString()
을 제거하세요.
schooGubun
을 설정할 때let
과toString()
은 필요하지 않습니다.school.schoolGubun
을直接 사용하시면 됩니다.수정 제안:
- schoolGubun = school.let { it.schoolGubun }.toString(), + schoolGubun = school.schoolGubun,
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (21)
- build.gradle.kts (1 hunks)
- src/main/kotlin/org/meogo/MeogoBackendApplication.kt (1 hunks)
- src/main/kotlin/org/meogo/domain/bookmark/presentation/BookmarkController.kt (2 hunks)
- src/main/kotlin/org/meogo/domain/comment/presentation/CommentController.kt (2 hunks)
- src/main/kotlin/org/meogo/domain/post/presentation/PostController.kt (5 hunks)
- src/main/kotlin/org/meogo/domain/question/presentation/QuestionController.kt (4 hunks)
- src/main/kotlin/org/meogo/domain/review/presentation/ReviewController.kt (5 hunks)
- src/main/kotlin/org/meogo/domain/school/domain/School.kt (1 hunks)
- src/main/kotlin/org/meogo/domain/school/enum/Gubun.kt (1 hunks)
- src/main/kotlin/org/meogo/domain/school/presentation/SchoolController.kt (1 hunks)
- src/main/kotlin/org/meogo/domain/school/service/QuerySchoolService.kt (1 hunks)
- src/main/kotlin/org/meogo/domain/user/presentation/UserController.kt (4 hunks)
- src/main/kotlin/org/meogo/global/config/FcmConfig.kt (1 hunks)
- src/main/kotlin/org/meogo/global/error/exception/ErrorCode.kt (1 hunks)
- src/main/kotlin/org/meogo/global/feign/CareerFeignClient.kt (1 hunks)
- src/main/kotlin/org/meogo/global/feign/CareerFeignClientService.kt (1 hunks)
- src/main/kotlin/org/meogo/global/feign/CareerSchoolResponse.kt (1 hunks)
- src/main/kotlin/org/meogo/global/feign/FeignProperty.kt (1 hunks)
- src/main/kotlin/org/meogo/global/utill/FcmUtil.kt (1 hunks)
- src/main/kotlin/org/meogo/global/utill/exception/FcmException.kt (1 hunks)
- src/main/resources/application.yml (3 hunks)
✅ Files skipped from review due to trivial changes (1)
- src/main/kotlin/org/meogo/domain/school/domain/School.kt
🧰 Additional context used
🪛 detekt
src/main/kotlin/org/meogo/global/utill/FcmUtil.kt
[warning] 24-24: The caught exception is swallowed. The original exception could be lost.
(detekt.exceptions.SwallowedException)
🔇 Additional comments (27)
src/main/kotlin/org/meogo/global/feign/CareerSchoolResponse.kt (1)
3-5
: LGTM: CareerSchoolListResponse 클래스가 잘 구현되었습니다.CareerSchoolListResponse 클래스가 API 응답을 적절히 캡슐화하고 있습니다. 구조가 명확하고 간결합니다.
src/main/kotlin/org/meogo/domain/school/service/QuerySchoolService.kt (1)
1-6
: 패키지 선언과 임포트가 적절합니다.패키지 선언과 임포트가 클래스의 기능에 맞게 올바르게 작성되었습니다.
src/main/kotlin/org/meogo/MeogoBackendApplication.kt (1)
7-9
: OpenFeign 지원이 올바르게 추가되었습니다.OpenFeign 의존성 추가와
@EnableFeignClients
어노테이션 적용이 적절히 이루어졌습니다. 이는 선언적 REST 클라이언트 기능을 사용할 수 있게 해줍니다.개선 제안: 프로젝트의 패키지 구조에 따라
basePackages
를 더 구체적으로 지정하는 것이 좋을 수 있습니다. 예를 들어, Feign 클라이언트가 특정 하위 패키지에만 있다면["org.meogo.infrastructure.feign"]
과 같이 지정할 수 있습니다.다음 스크립트를 실행하여 Feign 클라이언트 구현을 확인하세요:
✅ Verification successful
OpenFeign 지원이 올바르게 추가되었습니다.
OpenFeign 의존성 추가와
@EnableFeignClients
어노테이션 적용이 적절히 이루어졌습니다. 현재basePackages
를["org.meogo.global.feign"]
으로 설정하는 것이 Feign 클라이언트의 직접적인 위치를 반영하여 더 구체적이고 효율적일 수 있습니다.🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Feign 클라이언트 인터페이스 검색 echo "Feign 클라이언트 인터페이스:" rg -t kotlin -C 3 "@FeignClient" src/Length of output: 739
src/main/resources/application.yml (3)
2-3
: 프로파일 설정 검토 필요'default' 프로파일을 활성화하고 있습니다. 프로덕션 환경에서는 환경별 프로파일(예: 'dev', 'prod')을 사용하는 것이 좋습니다. 이를 통해 환경별로 다른 설정을 적용할 수 있습니다.
환경별 프로파일 설정이 있는지 확인하기 위해 다음 스크립트를 실행하세요:
#!/bin/bash # 설명: 환경별 프로파일 설정 확인 # 테스트: application-{profile}.yml 파일 검색 fd -e yml -e yaml 'application-.*\.ya?ml$'
51-52
: 환경 변수 사용 승인 및 보안 고려사항 제안
${CAREER_KEY}
를 사용하여 OpenFeign career 키를 설정한 것은 좋은 방법입니다. 이는 민감한 정보를 관리하는 데 적합합니다.이 키의 보안을 강화하기 위해 다음 사항을 고려하세요:
- 키 순환 정책 구현
- 프로덕션 환경에서 암호화된 환경 변수 사용
다음 스크립트를 실행하여 이 키가 소스 코드에 하드코딩되어 있지 않은지 확인하세요:
#!/bin/bash # 설명: CAREER_KEY가 소스 코드에 하드코딩되어 있는지 확인 # 테스트: 모든 .java 및 .kt 파일에서 CAREER_KEY 문자열 검색 rg -t java -t kotlin 'CAREER_KEY'
14-14
: 프로덕션 환경에서 SQL 로깅 비활성화 권장
show-sql: true
설정은 SQL 문을 로깅하여 디버깅에 유용하지만, 프로덕션 환경에서는 성능에 영향을 줄 수 있습니다. 프로덕션 환경에서는 이 설정을 비활성화하는 것이 좋습니다.프로파일별로 이 설정이 다르게 적용되는지 확인하기 위해 다음 스크립트를 실행하세요:
src/main/kotlin/org/meogo/global/feign/CareerFeignClient.kt (1)
1-5
: 패키지 선언과 임포트가 적절합니다.패키지 이름과 임포트된 클래스들이 Feign 클라이언트 인터페이스에 적합합니다.
src/main/kotlin/org/meogo/domain/school/presentation/SchoolController.kt (1)
1-10
: 패키지 구조와 임포트가 적절합니다.패키지 구조가 도메인 주도 설계 접근 방식을 따르고 있으며, 필요한 모든 임포트가 포함되어 있습니다. 사용하지 않는 임포트도 없습니다.
src/main/kotlin/org/meogo/domain/comment/presentation/CommentController.kt (1)
3-4
: OpenAPI 어노테이션 임포트 추가 승인OpenAPI 문서화를 위한
Operation
과Tag
어노테이션의 임포트가 적절히 추가되었습니다. 이는 API 문서화 개선에 필요한 변경사항입니다.src/main/kotlin/org/meogo/domain/bookmark/presentation/BookmarkController.kt (4)
3-4
: OpenAPI 어노테이션 임포트 추가 승인OpenAPI 어노테이션을 위한 필요한 임포트문이 적절히 추가되었습니다.
15-15
: API 태그 추가 승인"Bookmark API"로 컨트롤러를 태그하여 API 문서화와 구조화가 개선되었습니다. 이는 API 사용자에게 더 나은 탐색 경험을 제공할 것입니다.
Line range hint
38-42
: 북마크 삭제 메서드 문서화 개선 승인delete 메서드에 @operation과 @ResponseStatus 어노테이션이 적절히 추가되었습니다. NO_CONTENT 상태 코드는 삭제 작업에 적합합니다.
이 변경사항으로 API의 동작과 응답이 더 명확해졌습니다.
Line range hint
1-43
: 전체 리뷰 요약이 PR은 BookmarkController의 API 문서화를 크게 개선했습니다. 주요 변경 사항은 다음과 같습니다:
- OpenAPI 어노테이션 추가로 API 구조와 기능이 명확해졌습니다.
- @tag 어노테이션으로 API가 적절히 분류되었습니다.
- 각 메서드에 @operation 어노테이션이 추가되어 기능 설명이 개선되었습니다.
- 일부 메서드에 @ResponseStatus 어노테이션이 추가되어 HTTP 응답 상태가 명확해졌습니다.
이러한 변경으로 API 사용자의 이해도와 사용성이 향상될 것입니다. 몇 가지 작은 개선 사항을 제안했지만, 전반적으로 변경 사항은 긍정적이며 승인을 권장합니다.
src/main/kotlin/org/meogo/global/utill/FcmUtil.kt (2)
1-17
: LGTM: 클래스 구조와 임포트가 적절합니다.클래스 구조와 임포트가 잘 정의되어 있습니다.
@Component
어노테이션을 사용하여 Spring 빈으로 올바르게 설정되었으며, 필요한 모든 임포트가 포함되어 있습니다.firebase
프로퍼티의 지연 초기화도 적절히 구현되었습니다.
31-55
: LGTM: messageSetting 메서드가 잘 구현되었습니다.
messageSetting
메서드는 Android와 iOS(APNS) 플랫폼 모두에 대해 적절하게 구성된MulticastMessage
를 생성합니다. 알림 제목과 본문이 올바르게 설정되었으며, 각 플랫폼에 대한 커스텀 데이터도 잘 추가되었습니다. 메서드의 구조와 구현이 훌륭합니다.src/main/kotlin/org/meogo/domain/user/presentation/UserController.kt (1)
Line range hint
38-45
: 회원가입 메서드에 대한 OpenAPI 주석 승인
signUp
메서드에@Operation(summary = "회원가입")
주석을 추가한 것은 적절합니다. 이는 API 사용자에게 엔드포인트의 목적을 명확히 전달합니다.src/main/kotlin/org/meogo/domain/post/presentation/PostController.kt (1)
3-4
: OpenAPI 어노테이션 추가 승인OpenAPI 어노테이션을 위한 import 추가는 API 문서화를 개선하는 좋은 변경사항입니다.
src/main/kotlin/org/meogo/domain/question/presentation/QuestionController.kt (7)
3-4
: OpenAPI 주석 추가에 대한 승인OpenAPI 주석을 추가한 것은 API 문서화를 개선하는 좋은 방법입니다.
@Tag
주석을 사용하여 "Question API"로 컨트롤러를 분류한 것도 적절합니다.Also applies to: 26-26
37-37
: createQuestion 메서드에 대한 @operation 주석 승인
createQuestion
메서드에 "질문 작성"이라는 요약을 포함한@Operation
주석을 추가한 것은 적절합니다. 이는 API 사용자에게 명확한 정보를 제공합니다.
45-45
: modifyQuestion 메서드에 대한 @operation 주석 승인
modifyQuestion
메서드에 "질문 수정"이라는 요약을 포함한@Operation
주석을 추가한 것은 적절합니다. 이는 메서드의 기능을 명확히 설명합니다.
55-55
: querySchoolQuestion 메서드에 대한 @operation 주석 승인
querySchoolQuestion
메서드에 "학교별 질문 조회"라는 요약을 포함한@Operation
주석을 추가한 것은 적절합니다. 이는 메서드의 기능을 정확히 설명합니다.
60-60
: queryTypeQuestion 메서드에 대한 @operation 주석 승인
queryTypeQuestion
메서드에 "학교별 + 태그별 질문 조회"라는 요약을 포함한@Operation
주석을 추가한 것은 적절합니다. 이는 메서드의 기능을 정확히 설명하며, 학교와 태그 모두를 기준으로 질문을 조회한다는 점을 명확히 합니다.
67-67
: queryDetail 메서드에 대한 @operation 주석 승인
queryDetail
메서드에 "질문 상세보기"라는 요약을 포함한@Operation
주석을 추가한 것은 적절합니다. 이는 메서드의 기능을 명확히 설명하며, API 사용자에게 유용한 정보를 제공합니다.
72-72
: deleteQuestion 메서드 변경 승인
deleteQuestion
메서드에 "질문 삭제"라는 요약을 포함한@Operation
주석을 추가한 것은 적절합니다.@DeleteMapping
주석에서 괄호를 제거한 것은 Spring의 표준 사용법에 더 잘 부합합니다.이러한 변경사항들은 API 문서화를 개선하고 코드의 일관성을 높입니다.
Also applies to: 74-74
src/main/kotlin/org/meogo/domain/review/presentation/ReviewController.kt (3)
3-4
: Swagger 어노테이션 추가 승인Swagger 어노테이션을 위한 import 추가는 API 문서화를 개선하는 좋은 변경사항입니다.
53-57
: 학교별 리뷰 조회 메서드 추가 승인학교 ID로 리뷰를 조회하는 새로운 메서드가 적절히 추가되었습니다. @operation 어노테이션을 통해 API 문서화가 개선되었습니다.
73-85
: 리뷰 사진 조회, 학교 리뷰 결과 조회, 키워드 조회 메서드 추가 승인리뷰 사진 조회, 학교 리뷰 결과 조회, 키워드 조회를 위한 새로운 메서드들이 적절히 추가되었습니다. 각 메서드에 @operation 어노테이션을 통해 API 문서화가 개선되었습니다.
close #52
Summary by CodeRabbit
릴리스 노트
School
,Gubun
,CareerSchoolListResponse
,DataSearch
,CareerSchoolResponse
데이터 클래스 및CareerFeignClient
,CareerFeignClientService
,QuerySchoolService
,FcmUtil
,FcmConfig
서비스 추가.SchoolController
,UserController
,BookmarkController
,CommentController
,PostController
,QuestionController
,ReviewController
에 API 문서화 개선을 위한 OpenAPI 주석 추가.application.yml
파일에 SQL 로깅 활성화 및 새로운 URL 및 OpenFeign 속성 추가.