-
Notifications
You must be signed in to change notification settings - Fork 6
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
[step1] refactor: Controller 로직 분리 및 서비스 계층 적용 #4
Conversation
seeeeeeong
commented
Jan 24, 2025
•
edited
Loading
edited
- Controller 로직을 Service와 Repository로 분리하였습니다.
- UrlShortenService에 대한 테스트 코드를 작성했습니다.
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.
기능 요구 사항에는 shorten-url 생성, shorten-url 조회
로 기록해주셨습니다.
하지만 실제로 구현된 것은 ApiResponse, ExceptionHandler 등 API 인터페이스에 대한 부분이 대거 들어가 있습니다.
너무 많은 변경이 들어있는 pr 입니다.
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.
- Controller 로직을 Service와 Repository로 분리하였습니다.
- UrlShortenService에 대한 테스트 코드를 작성했습니다.
build.gradle.kts
Outdated
|
||
// Lombok | ||
compileOnly("org.projectlombok:lombok") | ||
annotationProcessor("org.projectlombok:lombok") |
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.
lombok 이 꼭 필요한가요?
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.
Controller와 Service에서 편의성을 위해 @requiredargsconstructor를 사용하기 위해 Lombok을 활용해왔습니다. 이에 대해 찾아보니 생성자 주입의 경우 Lombok을 사용해도 괜찮다는 의견과, 지양해야 한다는 의견이 있어 이에 대해 멘토님의 의견이 궁금합니다.
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.
저는 lombok 사용을 선호하지 않습니다. 하지만 어쩔수 없이 사용하긴 할 것 같습니다.
- dto 생성은 record 로 대체할 수 있지만, 생성자 주입과 로그는 대체가 힘들어서 입니다.
그리고 코멘트에 @
를 다실 때는 블럭으로 감싸주세요.
@DisplayName("shorten-url을 생성하고 조회한다.") | ||
void shortenUrlCreateAndSearch() { |
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.
@DisplayName("shorten-url을 생성하고 조회한다.") | |
void shortenUrlCreateAndSearch() { | |
void shorten_url을_생성하고_조회한다() { |
nit
저는 이런 형태를 더 선호 합니다.
- DisplayName 을 따로 써야되는 것은 둘째치고, 그것에 해당하는 메서드를 영작해야되는데 꽤 귀찮습니다.
- 꼭 이렇게 써야된다면 저는 메서드 이름을 그냥 test1 로 했던 것 같습니다.
- 사실 이제는 kotlin 으로 넘어와서 큰 신경 안쓰고 있습니다.
String key = urlShortenService.shortenUrlCreate(expectedOriginUrl); | ||
String originUrl = urlShortenService.shortenUrlSearch(key); | ||
|
||
assertTrue(originUrl.equals(expectedOriginUrl)); |
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.
assertTrue(originUrl.equals(expectedOriginUrl)); | |
assertThat(originUrl).isEqualTo(expectedOriginUrl); |
nit
} | ||
|
||
public String shortenUrlCreate(String originUrl) { | ||
String randomKey = String.valueOf(new Random().nextInt(10000)); |
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.
new Random()
이 메서드 안에 있는 것이 의도된 것일까요?
|
||
private final UrlShortenRepository urlShortenRepository; | ||
|
||
public String shortenUrlSearch(String key) { |
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.
shortenUrl 이 반복되는 것이 의도된 것일까요?
|
||
public String shortenUrlSearch(String key) { | ||
return urlShortenRepository.findByKey(key) | ||
.orElseThrow(() -> new IllegalArgumentException("Invalid key")); |
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.
로직상 존재하지 않는 key
인 경우 예외가 발생됩니다.
- Invalid key 는 존재하지 않는 key 를 뜻하는 것일까요?
} | ||
|
||
public String shortenUrlCreate(String originUrl) { | ||
String randomKey = String.valueOf(new Random().nextInt(10000)); |
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.
randomKey 채번의 위치가 여기가 맞을까요?
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.
코드 자체에는 아직 문제가 있습니다. 하지만 이미 2번의 리뷰를 거쳤고, pr 제목의 목적에는 충분한 코드이기에 approve 합니다.