-
Notifications
You must be signed in to change notification settings - Fork 300
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
[JDBC 라이브러리 구현하기 - 4단계] 라온(문채원) 미션 제출합니다. #571
Conversation
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.
|
||
import java.sql.SQLException; | ||
|
||
@FunctionalInterface |
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.
라온이 1단계에서 함수형 인터페이스와 제네릭이 어렵다 했는데 이젠 정말 잘사용하시네요 👍👍
public void changePassword(final long id, final String newPassword, final String createBy) { | ||
transactionTemplate.execute(() -> { | ||
userService.changePassword(id, newPassword, createBy); | ||
return null; |
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.
null을 반환하게 해야할까요 ?
} | ||
|
||
@Nullable | ||
public <T> T execute(final TransactionCallback<T> action) { |
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.
이 메소드를 사용하는 changePassword같은 경우에는 Callback으로 값을 반환할 필요가 없지 않을까요 ?
이 부분 때문에 괜히 return null을 메소드 내부에서 추가한 것 같아요 !
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.
changePassword()
에서는 값 반환이 비즈니스 로직 상 필요없지만, 다른 메서드에서는 값을 반환하는 경우가 무조건적으로 있다 생각해서 다음과 같이 구현하였는데요, 개발자 입장에서 해당 비즈니스 로직에 무의미한 null 반환이 들어가는 것도 좋은 방법이 아니라는 생각이 들었습니다! 스프링 구현방식을 참고해서 executeWithOutResult(Runnable action)
라는 메서드를 만들고 내부에서 null 반환을 처리하는 방법으로 해결해보았습니다 ..!
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.
executeWithOutResult(Runnable action)
메소드를 통해서 전과 다르게 null 값이 제거되고 가독성도 좋아진 것 같아요!
if (map.isEmpty()) { | ||
resources.remove(); | ||
} | ||
return oldConnection; |
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.
라온은 왜 여기서 Connection이 반환 되어야 한다고 생각하나요 ?
반환 값으로 사용하지도 않는데 말이에요! (저도 잘 몰라서 질문합니다)
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.
흠 저도 고민해보지 않고 주어진 시그니처대로 그냥 작성했던거 같아요 ..!
어떤 커넥션이 해제되었는지 확인하는 용도로 사용하는거 아닐까요 ? 저도 이 이외의 활용은 잘 생각나지 않네요 ..
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.
저도 그런식으로 이해했습니다! 그렇기에 라온은 다른 생각을 가지고 있나 궁금해서 물어봤었어요 ~ 😀
@@ -10,14 +12,39 @@ public abstract class TransactionSynchronizationManager { | |||
|
|||
private TransactionSynchronizationManager() {} | |||
|
|||
@Nullable |
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.
nullable 할 수 있음을 명시적으로 표시해주었군요 👍
혹시 sonarLint의 힘 ?!
final Connection conn = dataSource.getConnection(); | ||
final PreparedStatement pstmt = conn.prepareStatement(sql) | ||
) { | ||
final Connection conn = DataSourceUtils.getConnection(dataSource); |
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.
connection 재사용 좋아요 !
verify(mockConnection, times(1)).rollback(); | ||
verify(mockConnection, times(1)).close(); | ||
} | ||
} |
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.
테스트를 진짜 잘 작성해주셨네요 리스펙합니다 !!
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.
안녕하세요, 오션 🌊
무의미한 null 값을 반환하는 부분과 핸들링하는 exception만 조금 수정해봤습니다!
별거 없는데 조금 늦었네요 😅
마지막 리뷰 요청이 될 것 같은데요,
오션과 티키타카 하면서 많이 배웠고 !! 재밌었습니다 ~~
전정준씨랑 얼른 잠실에서 볼 수 있었으면 좋겠네요 ^^
며칠 안남은 테코톡 기대하겠습니다 😊 파이팅하십쇼 !!
마지막까지 잘 부탁드립니다 🙇♂️
감사합니다 ~~
if (map.isEmpty()) { | ||
resources.remove(); | ||
} | ||
return oldConnection; |
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.
흠 저도 고민해보지 않고 주어진 시그니처대로 그냥 작성했던거 같아요 ..!
어떤 커넥션이 해제되었는지 확인하는 용도로 사용하는거 아닐까요 ? 저도 이 이외의 활용은 잘 생각나지 않네요 ..
} | ||
|
||
@Nullable | ||
public <T> T execute(final TransactionCallback<T> action) { |
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.
changePassword()
에서는 값 반환이 비즈니스 로직 상 필요없지만, 다른 메서드에서는 값을 반환하는 경우가 무조건적으로 있다 생각해서 다음과 같이 구현하였는데요, 개발자 입장에서 해당 비즈니스 로직에 무의미한 null 반환이 들어가는 것도 좋은 방법이 아니라는 생각이 들었습니다! 스프링 구현방식을 참고해서 executeWithOutResult(Runnable action)
라는 메서드를 만들고 내부에서 null 반환을 처리하는 방법으로 해결해보았습니다 ..!
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.
안녕하세요, 오션 🌊🌊!!
드디어 마지막 4단계네요 .. 길고 길었습니다 ㅋㅋ
미션 요구사항 이외에 추가적으로
TransactionCallback
과TransactionTemplate
을 통해 트랜잭션 중복 로직을 제거해주었습니다.어딘가 부족한 부분이 있는거 같지만 .. 시간이 없어서 리뷰 요청 후에 조금 더 고민해보겠습니다 ㅎㅎ
커밋이 많이 없어서 커밋 단위로 보셔도 좋을거 같아요!
마지막 4단계도 잘 부탁드립니다 🙇♂️
뮤텍스와 세마포어 잘 먹겠습니다 ^^