Skip to content
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 라이브러리 구현하기 - 1단계] 로건(정다빈) 미션 제출합니다. #266

Merged
merged 12 commits into from
Sep 27, 2023

Conversation

70825
Copy link
Member

@70825 70825 commented Sep 26, 2023

안녕하세요 하디!

이번 미션 2단계가 리팩터링이라 JdbcTemplate에 있는 중복 코드도 같이 제거하지 않았어요
1단계 요구사항은 개발자가 프로덕션 코드에서 결과 추출만 집중할 수 있도록 요구하는 것 같아서 그대로 두었습니다.
이거는 한 번에 2단계에서 같이 진행할 예정입니다

그리고 모든 모듈에 코드 리포맷을 돌려서 변경된 파일이 굉장히 많은 상태라 여기 부분만 보시면 편할 것 같아요
아니면 style: 코드 포맷 수정 이전까지 커밋 순서대로 보셔도 됩니다

저는 이번 미션 보고 레벨 1 체스 미션이 생각났는데요
저때는 JdbcTemplate + RowMapper로 비슷하게 만들어보아서 이번엔 User.class와 같은 클래스를 보내면 동적으로 해당 클래스를 반환하게 만들어보았습니다.

감사합니다!

@70825 70825 self-assigned this Sep 26, 2023
Copy link

@jundonghyuk jundonghyuk left a comment

Choose a reason for hiding this comment

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

안녕하세요 로건 리뷰어 하디입니다 !

1단계 잘 구현해주신 것 같아요 멋집니다 !

로건의 코드를 보면서 ResultSet의 메서드에 대해서도 많이 알게되었어요 ㅋㅋㅋ

리팩토링은 다음 단계이기도 하고, 로건의 구현 방식을 묻는 커멘트를 하나 남겨뒀어요.

이 질문은 해당 pr에 남기셔도 되고 다음 단계 하실 때 대답해주셔도 될 것 같아요 고생하셨습니다 !

2단계 파이팅 !

Comment on lines +62 to +66
public <T> T queryForObject(final String query, final Class<T> convertClass, final Object... args) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {

Choose a reason for hiding this comment

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

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html

를 참고해보시면 jdbctemplate의 메서드에 대해서 볼 수 있는데요 !

queryForObject를 비롯해서 여러 메서드들이 두 번째 인자로 Class<T> 또는 RowMapper<T>를 받고 있습니다 !

로건은 현재 Class<T>를 구현해주셨는데요 !

jdbctemplate은 RowMapper<T>Class<T>를 받는 메서드를 왜 모두 구현해 놨을까요 ?

로건의 생각을 듣고싶습니다.

Copy link
Member Author

Choose a reason for hiding this comment

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

2단계 진행하면서 대략적인 장단점을 확인할 수 있었어요

1. Class<T>

확실히 RowMapper<T>를 사용한다면 메서드와 RowMapper<T>를 왔다갔다하는 경우가 있었는데, User.class로 사용하니까 해당 메서드에만 집중할 수 있어서 컨텍스트 스위칭이 없다는 점이 매우 편했어요

거기다가 개발자는 User라는 클래스만 잘 변환하는걸 원하지, 어떻게 변환을 해야할지 UserDao에 적을 필요 없다는 점이 RowMapper<T>보다는 캡슐화가 잘 적용되어 있다는 느낌이 들었어요.

단점은 JdbcTemplate을 구현하는 미션이라 해당 코드가 RowMapper<T>보단 확실히 지저분하다는 점이네요. 그래서 2단계라 리팩터링이라 코드가 클린해보는게 좋아보여서 RowMapper<T>로 변경했어요 ㅎㅎ

2. RowMapper<T>

장점은 RowMapper<T>UserDao에서 설정할 수 있으므로 좀 더 커스텀이 가능해서 유연하다는게 장점이 될 수 있을 것 같아요.
단점은 Class<T>의 장점이 단점인 것 같아요!


둘 다 제공하는 이유는 저도 궁금해서 Spring JDBC PR을 살펴봤는데, 애초에 깃허브에 기록한 첫 커밋부터 두가지 방법을 모두 만들어놨더라구요.
첫 커밋에 코드양이 엄청 많은걸보면 다른 곳에서 작업하던걸 깃허브에서 옮긴 것 같은데, 이전 기록을 어디서 찾아야할지 모르겠어요.
그래서 제가 추측하기로는 서로의 장단점의 반대가 다른 방법의 장단점으로 작용해서 선택적으로 사용하라고 한게 아닐까 생각이 듭니다..???

@jundonghyuk jundonghyuk merged commit 4fbe26b into woowacourse:70825 Sep 27, 2023
1 check failed
70825 added a commit to 70825/jwp-dashboard-jdbc that referenced this pull request Oct 4, 2023
* refactor: stage0 코드 정리

* refactor: stage1 코드 정리

* refactor: stage3 코드 정리

* feat: UserDao의 update, findAll, findByAccount 기능 추가

* refactor: 반환값이 없는 DAO 메서드를 JdbcTemplate로 이동

* feat: update 메서드로 인해 영향 받은 행 수를 반환하도록 추가

* refactor: User 생성자 파라미터 long → Long으로 변경

* refactor: 한 개의 반환값만 얻는 쿼리문을 JdbcTemplate의 queryForObject로 변경

* refactor: 여러개의 반환값을 얻는 쿼리문을 JdbcTemplate의 queryForList로 변경

* refactor: findByAcoount에 JdbcTemplate 적용

* refactor: UserDao 생성자에 DataSource 삭제

* style: 코드 포맷 수정
70825 added a commit to 70825/jwp-dashboard-jdbc that referenced this pull request Oct 4, 2023
* refactor: stage0 코드 정리

* refactor: stage1 코드 정리

* refactor: stage3 코드 정리

* feat: UserDao의 update, findAll, findByAccount 기능 추가

* refactor: 반환값이 없는 DAO 메서드를 JdbcTemplate로 이동

* feat: update 메서드로 인해 영향 받은 행 수를 반환하도록 추가

* refactor: User 생성자 파라미터 long → Long으로 변경

* refactor: 한 개의 반환값만 얻는 쿼리문을 JdbcTemplate의 queryForObject로 변경

* refactor: 여러개의 반환값을 얻는 쿼리문을 JdbcTemplate의 queryForList로 변경

* refactor: findByAcoount에 JdbcTemplate 적용

* refactor: UserDao 생성자에 DataSource 삭제

* style: 코드 포맷 수정
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants