-
Notifications
You must be signed in to change notification settings - Fork 4
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
[feat/CK-236] JdbcTemplate을 이용하여 bulk insert를 적용한다 #198
Conversation
🪄 Test Coverage Report
|
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.
배치 인서트라니.. 생각도 못하고있었는데 밀리 폼 미쳤네요. 이전이랑 배치 적용 이후 성능 차이 비교하면 이력서에 좋은 양분이 되겠네요!
DAO 관련된 부분만 생각해주세요! 고생하셨습니다🙌
.innerJoin(goalRoom.goalRoomPendingMembers.values, goalRoomPendingMember) | ||
.fetchJoin() |
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.
join이 안되어있었네요..👍
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.
이미 Service가 Repository 계층에 의존하고 있으니 DAO 대신 Repository 계층을 만드는건 어떨까요?
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.
이미 JpaRepository를 상속받는 GoalRoomMemberRepository가 존재해서 만들기가 애매했어요..!
그래서 기존 GoalRoomMemberRepository
가 GoalRoomMemberJdbcRepository
라는 인터페이스를 상속받도록 했어요! GoalRoomMemberJdbcRepository
인터페이스는 saveAllInBatch
라는 메서드를 구현하도록 했고, GoalRoomMemberJdbcRepositoryImpl
구현체를 만들어서 batch insert 작업해주었습니다.
구조가 조금 복잡한 것 같은데 괜찮은지 확인부탁드립니다!
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.
JPA는 진짜 잘 알고 써야겠네요... 뭔가 다 해 줄 거 같으면서도 모르고 쓰면 위험한 포인트들이 몇개씩 있는 거 같아요. 영속성 컨텍스트의 1차 캐시에 identity를 저장하는 것 때문에 한 번에 저장이 안 되는 줄을 처음 알았어요
이런 건 어디서 찾으셨는지 대단하네요 밀리👍👍
궁금한 점이 한 가지 있는데 saveAll도 delteAll처럼 @query로 해 주는 건 안 되는 건가요? 똑같은 문제가 발생하는지 궁금하네요. 추가적으로 Dao가 추가된다면 단위 테스트 요청해도 될까요? 안 된다구요?
@@ -28,4 +29,8 @@ Optional<GoalRoomPendingMember> findByGoalRoomAndMemberIdentifier( | |||
+ "where g=:goalRoom " | |||
+ "and gp.member = m") | |||
List<GoalRoomPendingMember> findAllByGoalRoom(@Param("goalRoom") final GoalRoom goalRoom); | |||
|
|||
@Modifying |
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.
@Modifying을 붙여야 하는 이유가 JPA에서 동작을 추론가능한 메서드명일 경우라서 그런건가요?
🪄 Test Coverage Report
|
* [feat/CK-179] 로드맵 카테고리 생성을 구현한다 (#141) * feat: 로드맵 카테고리 생성 인수테스트 작성 * feat: 로드맵 카테고리 생성 서비스 구현 * feat: 로드맵 카테고리 생성 api 구현 * docs: 로드맵 카테고리 생성 docs 작성 * refactor: 인수테스트 카테고리 생성 api로 수정 * feat: 로드맵 카테고리 앞뒤 공백 제거하도록 수정 * [feat/CK-190] 골룸 생성 시 투두리스트를 필수로 입력받는 로직을 제거한다 (#145) * feat: 골룸 생성 시 투두리스트 필수 입력 로직 제거 * refactor: 사용하지 않는 메서드 제거 * [feat/CK-189] 네이버 OAuth 로그인 기능을 구현한다 (#144) * feat: 회원 전화번호, 생년월일 삭제, 이메일 추가 * feat: naver oauth 구현 및 member field 변경 * feat: 네이버 로그인 uri 변경 * docs: 네이버 로그인 API 명세 작성 * feat: NaverOauthService 테스트코드 작성 * test: oauth 기능 테스트 코드 추가 * test: NaverOauthNetworkService 테스트 수정 * chore: git submodule 업데이트 --------- Co-authored-by: ChoiYoungHoon <[email protected]> Co-authored-by: Ohjintaek <[email protected]> * feat: MemberProfile email not null 및 Member salt nullable 설정 * feat: oauth 회원가입 시 아이디에 uuid 붙히도록 수정 * design: 네이버 로그인 버튼 구현 * feat: naver oauth API 통신 구현 * feat: 네이버 로그인 주소 반환 시 응답 코드 200으로 변경 * feat: 네이버 oauth 로그인 시 콜백 변경 및 auth code 받도록 수정 * feat: 네이버 oauth api 수정 * fix: 시작 날짜가 오늘 이전이면서 모집 중인 골룸도 자동으로 시작하도록 수정 * feat: 이미지 파일 get url 요청 시 cloud front로 내려주도록 수정 * fix: 로드맵 태그 여러개일시 데이터 조회 중복 문제 해결 * fix: 파일 경로 생성시 한글과 공백은 인코딩한다 * test: test coverage 수정 * fix: file 확장자 오류를 해결한다 * fix: file이름을 저장할때 uuid로만 저장한다 * feat: 로드맵 태그에 BatchSize 적용 * feat: 골룸 노드 목록 조회 시 노드 설명과 이미지 반환하도록 수정 * [feat/CK-227] 로드맵 골룸 조회 시 최신순일때는 모든 상태를, 마감임박 순일 땐 모집 중인 상태만 반환한다 (#185) * chore: 패키지 경로 수정 * feat: 조건에 따른 로드맵 골룸 조회 시 쿼리 수정 * refactor: 1:N 문제 방지를 위해 @batchsize 설정 * feat: 로드맵 골룸 응답에 골룸 상태 추가 * chore: 서브모듈 업데이트 * chore: 패키지 경로 수정 * refactor: 메서드 네이밍 수정 * refactor: BaseEntity의 CreatedAt 스프링 의존성 끊기 (#191) * refactor: MemberIdentifierArgumentResolver에서 Authenticated 어노테이션 확인하도록 수정 (#193) * [feat/CK-232] 전역적으로 사용하는 Exception을 분리하고 AOP로 예외를 변환하는 기능을 구현한다. (#194) * refactor: exception 패키지를 service 패키지 하위로 이동 * feat: 도메인 Exception을 서비스 Exception으로 변환해주는 AOP 구현 * [feat/CK-222] Redis를 도입하고 Refresh Token을 Redis에 저장하도록 변경한다 (#190) * build: spring data redis 및 testcontainers 의존성 추가 * feat: RefreshToken 레디스에 저장하도록 변경 * test: Redis 테스트 설정 및 RefreshTokenRedisRepository 테스트 * chore: 서브모듈 업데이트 * refactor: JwtTokenProvider에서 RefreshToken 생성해서 반환하도록 수정 * refactor: 리뷰 반영 * refactor: RedisTemplate으로 변경 * test: JwtTokenProvider 테스트 추가 * test: test config에 redis 설정 추가 * test: test 추가 * chore: 기존 refresh token table을 drop하는 쿼리 추가 * refactor: ttl을 초단위로 변경하는 로직 변수 추출 * refactor: 변수명 변경 * refactor: 레디스 테스트 간 격리 * chore: git submodule 업데이트 * [feat/CK-235] Redis 캐시를 적용한다 (#197) * test: test container에 의존하지 않도록 변경 * feat: redis cache 적용 * feat: redis config 설정 수정 * fix: RedisConfig를 test에서 비활성화 시킨다 * test: CacheKeyGenerator test code 작성 * feat: 수정 요구사항 반영 * chore: 서브모듈 최신화 * chore: 서브모듈 최신화 * chore: flyway v4 파일 제거 * chore: flyway v4 파일 복구 * [feat/CK-237] 골룸 참여 시 발생하는 동시성 이슈를 해결한다 (#199) * refactor: 골룸 참여 시 발생하는 동시성 이슈를 비관적 락으로 해결 * test: 테스트 코드 수정 * [feat/CK-236] JdbcTemplate을 이용하여 bulk insert를 적용한다 (#198) * refactor: 기존 saveAll, deleteAll을 bulk insert로 개선 * refactor: Dao 대신 Repository 계층에 의존하도록 수정 - JdbcRepository 추상화 * feat: amazon s3 접근 시 credentials 사용하도록 수정 --------- Co-authored-by: Miseong Kim <[email protected]> Co-authored-by: Ohjintaek <[email protected]> Co-authored-by: Miseong Kim <[email protected]> Co-authored-by: Jungwoo <[email protected]> Co-authored-by: 부엉이 <[email protected]> Co-authored-by: Ohjintaek <[email protected]>
* feat: 골룸 노드 목록 조회 시 노드 설명과 이미지 반환하도록 수정 * [feat/CK-227] 로드맵 골룸 조회 시 최신순일때는 모든 상태를, 마감임박 순일 땐 모집 중인 상태만 반환한다 (#185) * chore: 패키지 경로 수정 * feat: 조건에 따른 로드맵 골룸 조회 시 쿼리 수정 * refactor: 1:N 문제 방지를 위해 @batchsize 설정 * feat: 로드맵 골룸 응답에 골룸 상태 추가 * chore: 서브모듈 업데이트 * chore: 패키지 경로 수정 * refactor: 메서드 네이밍 수정 * refactor: BaseEntity의 CreatedAt 스프링 의존성 끊기 (#191) * refactor: MemberIdentifierArgumentResolver에서 Authenticated 어노테이션 확인하도록 수정 (#193) * [feat/CK-232] 전역적으로 사용하는 Exception을 분리하고 AOP로 예외를 변환하는 기능을 구현한다. (#194) * refactor: exception 패키지를 service 패키지 하위로 이동 * feat: 도메인 Exception을 서비스 Exception으로 변환해주는 AOP 구현 * [feat/CK-222] Redis를 도입하고 Refresh Token을 Redis에 저장하도록 변경한다 (#190) * build: spring data redis 및 testcontainers 의존성 추가 * feat: RefreshToken 레디스에 저장하도록 변경 * test: Redis 테스트 설정 및 RefreshTokenRedisRepository 테스트 * chore: 서브모듈 업데이트 * refactor: JwtTokenProvider에서 RefreshToken 생성해서 반환하도록 수정 * refactor: 리뷰 반영 * refactor: RedisTemplate으로 변경 * test: JwtTokenProvider 테스트 추가 * test: test config에 redis 설정 추가 * test: test 추가 * chore: 기존 refresh token table을 drop하는 쿼리 추가 * refactor: ttl을 초단위로 변경하는 로직 변수 추출 * refactor: 변수명 변경 * refactor: 레디스 테스트 간 격리 * chore: git submodule 업데이트 * [feat/CK-235] Redis 캐시를 적용한다 (#197) * test: test container에 의존하지 않도록 변경 * feat: redis cache 적용 * feat: redis config 설정 수정 * fix: RedisConfig를 test에서 비활성화 시킨다 * test: CacheKeyGenerator test code 작성 * feat: 수정 요구사항 반영 * chore: 서브모듈 최신화 * chore: 서브모듈 최신화 * chore: flyway v4 파일 제거 * chore: flyway v4 파일 복구 * [feat/CK-237] 골룸 참여 시 발생하는 동시성 이슈를 해결한다 (#199) * refactor: 골룸 참여 시 발생하는 동시성 이슈를 비관적 락으로 해결 * test: 테스트 코드 수정 * [feat/CK-236] JdbcTemplate을 이용하여 bulk insert를 적용한다 (#198) * refactor: 기존 saveAll, deleteAll을 bulk insert로 개선 * refactor: Dao 대신 Repository 계층에 의존하도록 수정 - JdbcRepository 추상화 * [feat/CK-239] Amazon S3 접근 시 credential 정보를 이용하도록 수정한다 (#201) * feat: amazon s3 접근 시 credentials 사용하도록 수정 * test: test application.yml에 credentials 추가 --------- Co-authored-by: Miseong Kim <[email protected]> Co-authored-by: Ohjintaek <[email protected]> Co-authored-by: Miseong Kim <[email protected]> Co-authored-by: Ohjintaek <[email protected]>
* [feat/CK-179] 로드맵 카테고리 생성을 구현한다 (#141) * feat: 로드맵 카테고리 생성 인수테스트 작성 * feat: 로드맵 카테고리 생성 서비스 구현 * feat: 로드맵 카테고리 생성 api 구현 * docs: 로드맵 카테고리 생성 docs 작성 * refactor: 인수테스트 카테고리 생성 api로 수정 * feat: 로드맵 카테고리 앞뒤 공백 제거하도록 수정 * [feat/CK-190] 골룸 생성 시 투두리스트를 필수로 입력받는 로직을 제거한다 (#145) * feat: 골룸 생성 시 투두리스트 필수 입력 로직 제거 * refactor: 사용하지 않는 메서드 제거 * [feat/CK-189] 네이버 OAuth 로그인 기능을 구현한다 (#144) * feat: 회원 전화번호, 생년월일 삭제, 이메일 추가 * feat: naver oauth 구현 및 member field 변경 * feat: 네이버 로그인 uri 변경 * docs: 네이버 로그인 API 명세 작성 * feat: NaverOauthService 테스트코드 작성 * test: oauth 기능 테스트 코드 추가 * test: NaverOauthNetworkService 테스트 수정 * chore: git submodule 업데이트 --------- Co-authored-by: ChoiYoungHoon <[email protected]> Co-authored-by: Ohjintaek <[email protected]> * feat: MemberProfile email not null 및 Member salt nullable 설정 * feat: oauth 회원가입 시 아이디에 uuid 붙히도록 수정 * design: 네이버 로그인 버튼 구현 * feat: naver oauth API 통신 구현 * feat: 네이버 로그인 주소 반환 시 응답 코드 200으로 변경 * feat: 네이버 oauth 로그인 시 콜백 변경 및 auth code 받도록 수정 * feat: 네이버 oauth api 수정 * fix: 시작 날짜가 오늘 이전이면서 모집 중인 골룸도 자동으로 시작하도록 수정 * feat: 이미지 파일 get url 요청 시 cloud front로 내려주도록 수정 * fix: 로드맵 태그 여러개일시 데이터 조회 중복 문제 해결 * fix: 파일 경로 생성시 한글과 공백은 인코딩한다 * test: test coverage 수정 * fix: file 확장자 오류를 해결한다 * fix: file이름을 저장할때 uuid로만 저장한다 * feat: 로드맵 태그에 BatchSize 적용 * [Release] 골룸 대시보드 내의 노드 반환 데이터 추가 및 골룸 목록 조회 시 모든 상태의 골룸을 조회하도록 수정한다. (#188) * feat: 골룸 노드 목록 조회 시 노드 설명과 이미지 반환하도록 수정 * [feat/CK-227] 로드맵 골룸 조회 시 최신순일때는 모든 상태를, 마감임박 순일 땐 모집 중인 상태만 반환한다 (#185) * chore: 패키지 경로 수정 * feat: 조건에 따른 로드맵 골룸 조회 시 쿼리 수정 * refactor: 1:N 문제 방지를 위해 @batchsize 설정 * feat: 로드맵 골룸 응답에 골룸 상태 추가 * chore: 서브모듈 업데이트 * chore: 패키지 경로 수정 * refactor: 메서드 네이밍 수정 --------- Co-authored-by: Ohjintaek <[email protected]> * [Release] 동시성 문제 해결 및 캐시를 적용하여 성능 개선을 한다. (#203) * feat: 골룸 노드 목록 조회 시 노드 설명과 이미지 반환하도록 수정 * [feat/CK-227] 로드맵 골룸 조회 시 최신순일때는 모든 상태를, 마감임박 순일 땐 모집 중인 상태만 반환한다 (#185) * chore: 패키지 경로 수정 * feat: 조건에 따른 로드맵 골룸 조회 시 쿼리 수정 * refactor: 1:N 문제 방지를 위해 @batchsize 설정 * feat: 로드맵 골룸 응답에 골룸 상태 추가 * chore: 서브모듈 업데이트 * chore: 패키지 경로 수정 * refactor: 메서드 네이밍 수정 * refactor: BaseEntity의 CreatedAt 스프링 의존성 끊기 (#191) * refactor: MemberIdentifierArgumentResolver에서 Authenticated 어노테이션 확인하도록 수정 (#193) * [feat/CK-232] 전역적으로 사용하는 Exception을 분리하고 AOP로 예외를 변환하는 기능을 구현한다. (#194) * refactor: exception 패키지를 service 패키지 하위로 이동 * feat: 도메인 Exception을 서비스 Exception으로 변환해주는 AOP 구현 * [feat/CK-222] Redis를 도입하고 Refresh Token을 Redis에 저장하도록 변경한다 (#190) * build: spring data redis 및 testcontainers 의존성 추가 * feat: RefreshToken 레디스에 저장하도록 변경 * test: Redis 테스트 설정 및 RefreshTokenRedisRepository 테스트 * chore: 서브모듈 업데이트 * refactor: JwtTokenProvider에서 RefreshToken 생성해서 반환하도록 수정 * refactor: 리뷰 반영 * refactor: RedisTemplate으로 변경 * test: JwtTokenProvider 테스트 추가 * test: test config에 redis 설정 추가 * test: test 추가 * chore: 기존 refresh token table을 drop하는 쿼리 추가 * refactor: ttl을 초단위로 변경하는 로직 변수 추출 * refactor: 변수명 변경 * refactor: 레디스 테스트 간 격리 * chore: git submodule 업데이트 * [feat/CK-235] Redis 캐시를 적용한다 (#197) * test: test container에 의존하지 않도록 변경 * feat: redis cache 적용 * feat: redis config 설정 수정 * fix: RedisConfig를 test에서 비활성화 시킨다 * test: CacheKeyGenerator test code 작성 * feat: 수정 요구사항 반영 * chore: 서브모듈 최신화 * chore: 서브모듈 최신화 * chore: flyway v4 파일 제거 * chore: flyway v4 파일 복구 * [feat/CK-237] 골룸 참여 시 발생하는 동시성 이슈를 해결한다 (#199) * refactor: 골룸 참여 시 발생하는 동시성 이슈를 비관적 락으로 해결 * test: 테스트 코드 수정 * [feat/CK-236] JdbcTemplate을 이용하여 bulk insert를 적용한다 (#198) * refactor: 기존 saveAll, deleteAll을 bulk insert로 개선 * refactor: Dao 대신 Repository 계층에 의존하도록 수정 - JdbcRepository 추상화 * [feat/CK-239] Amazon S3 접근 시 credential 정보를 이용하도록 수정한다 (#201) * feat: amazon s3 접근 시 credentials 사용하도록 수정 * test: test application.yml에 credentials 추가 --------- Co-authored-by: Miseong Kim <[email protected]> Co-authored-by: Ohjintaek <[email protected]> Co-authored-by: Miseong Kim <[email protected]> Co-authored-by: Ohjintaek <[email protected]> * chore: properties 버젼 변경 --------- Co-authored-by: Miseong Kim <[email protected]> Co-authored-by: Ohjintaek <[email protected]> Co-authored-by: Miseong Kim <[email protected]> Co-authored-by: Jungwoo <[email protected]> Co-authored-by: 부엉이 <[email protected]> Co-authored-by: Ohjintaek <[email protected]>
📌 작업 이슈 번호
CK-236
✨ 작업 내용
💬 리뷰어에게 남길 멘트
🚀 요구사항 분석