[플랭고] JPA delete() 쿼리 안 나가는 문제 해결
개발 공부/Spring2023. 9. 28. 12:48[플랭고] JPA delete() 쿼리 안 나가는 문제 해결

💥 문제 상황 JPA를 사용하다가 xxxRepository.delete(Entity entity) 메서드를 통해 엔티티를 삭제하고 싶었는데 아무리 해도 delete 쿼리가 발생하지 않는 문제가 있었다. 엔티티 삭제 코드 @Transactional public void rejectOrExitSchedule(Long memberId, Long scheduleId) { Schedule schedule = findScheduleById(scheduleId); validateMemberNotOwner(memberId, schedule); ScheduleMember scheduleMember = findScheduleMemberByMemberIdAndScheduleId(memberId, scheduleId); sc..

[플랭고] 반정규화 + Lock vs 정규화 + 서브쿼리 - 누가 더 빠를까
프로젝트/[앱] 플랭고2023. 9. 17. 22:23[플랭고] 반정규화 + Lock vs 정규화 + 서브쿼리 - 누가 더 빠를까

배경 플랭고 앱 개발 중 기존에는 일정과 회원이 일대일로 대응되었는데 '함께 할 친구' 기능을 추가하면서 일정과 회원의 관계가 일대다로 변경되었다. 이에 따라 기존 조회, 수정 로직 등이 많이 변경되었는데 다른 부분은 모두 변경을 마치고 '일정 목록 조회' 기능에서 고민되는 부분이 생겼다. 현재 Schedule 테이블에 일정 관련 정보가 있고, ScheduleMember 테이블에 일정에 참여하는 회원에 대한 정보가 담겨있는데 앱에서 일정 목록 조회 시 다음과 같이 일정에 참여하는 회원 수를 표시해주기 위해서 목록 조회 시 Schedule과 ScheduleMember를 같이 조회해야 되는 상황이 생겼다. 이를 구현하기 위해 여러 방법을 사용할 수 있을 것 같았지만 각 방법 별 성능 차이를 확인하고 싶어서 ..

인프콘 2023 후기
기록/후기, 회고2023. 8. 31. 22:54인프콘 2023 후기

작년에 이어 올해도 인프콘에 다녀왔다! 워낙 치열한 경쟁률을 자랑하는 컨퍼런스라서 올해는 어렵겠지 생각했는데 작년 청년멘토링 프로그램을 통해 멘토링을 해주셨던 동욱님께서 너무나 감사하게도 초대권을 주셔셔 올해도 다녀올 수 있게 되었다. 작년 인프콘 후기 요즘 너무 정신이 없어서 시간이 가는걸 잘 못 느끼고 있었는데 작년 8월에 갔던 인프콘을 올해 다시 왔다고 생각하니 1년이 지났다는걸 확 실감할 수 있었다. 오프닝을 시작으로 인프콘이 시작되었다. 나름 인프콘 경력직(?)으로서 인프콘의 정수는 기업부스와 인프런 굿즈 뽑기임을 알고 있었기에 (아닙니다) 세션을 듣기 전에 기업 부스를 돌며 굿즈를 받으러 다녔다. 마침 우리가 듣고 싶은 세션이 모두 오후에 몰려있기도 했다. 기업 부스 기업 부스를 돌며 설명을 ..

[플랭고] JPQL fetch join + where절 사용 방법과 조건
개발 공부/Spring2023. 8. 29. 19:58[플랭고] JPQL fetch join + where절 사용 방법과 조건

프로젝트 개발 중에 fetch join 과 where 절을 함께 사용하고 싶은 상황이 생겼다. 아무생각 없이 코드를 치다가 순간 섬뜩해서 영한님 JPA 강의 자료를 뒤져보니 역시.. fetch join의 대상에 별칭을 주고 where 절에서 필터링하는건 불가능하다고 되어있었다. 그래서 고민을 좀 해봤는데 고민을 할수록 다음과 같은 고민들이 꼬리에 꼬리를 물고 생겨났다. fetch join은 별칭을 아예 줄 수 없나? where 절에 XToOne 쪽 필드를 조건으로 주는 경우는 어떻게 동작하나? fetch join 말고 join은 사용 해도 되는건가 그럼? 이 경우에는 어떻게 동작하지? 애초에 fetch join을 왜 where 절과 함께 사용하면 안 되는거지..? … JPA의 어려움에 멘붕이 올뻔했지만 ..

[플랭고] 일대일에서 일대다로 변경 시 validation 관련 문제 (Custom ConstraintValidator)
개발 공부/Spring2023. 8. 23. 01:08[플랭고] 일대일에서 일대다로 변경 시 validation 관련 문제 (Custom ConstraintValidator)

문제 상황 개발 중인 애플리케이션 플랭고의 '기록하기' 기능은 현재 1장의 이미지만 첨부할 수 있다. 이를 20장까지 첨부할 수 있도록 변경하는 작업을 진행했다. (사진은 2023 인프콘 🥹) 먼저 다음과 같은 작업들을 진행했다. 1. 이미지 url을 저장할 DiaryImage 테이블, 엔티티 생성 @Getter @NoArgsConstructor(access = PROTECTED) @Entity public class DiaryImage extends BaseTimeEntity { @Id @GeneratedValue(strategy = IDENTITY) private Long id; @ManyToOne(fetch = LAZY) @JoinColumn(name = "diary_id") private Diar..

[플랭고] 스프링 시큐리티 실패 핸들러 에서 직접 예외를 던지면 안 되는 이유
개발 공부/Spring2023. 8. 20. 21:19[플랭고] 스프링 시큐리티 실패 핸들러 에서 직접 예외를 던지면 안 되는 이유

문제 상황 개발 중인 프로젝트에서 json 형태로 로그인을 처리하기 위해 AbstractAuthenticationProcessingFilter을 상속받는 커스텀 AuthenticationFilter를 구현하고 시큐리티에 필터로 등록해 사용하려고 했다. 다음과 같이 커스텀 Json 로그인 처리 필터를 구현하고 public class JsonEmailPasswordAuthenticationFilter extends AbstractAuthenticationProcessingFilter { ... @Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws Au..

[알고리즘 - 구현] 자물쇠와 열쇠
개발 공부/알고리즘2023. 6. 27. 22:30[알고리즘 - 구현] 자물쇠와 열쇠

☀️ 시작 이번 문제는 2020 카카오 신입 개발자 블라인드 채용 1차 코딩 테스트의 3번 문항 '자물쇠와 열쇠' 문제이다. 카카오 해설을 보면 출제 의도는 2차원 배열을 다룰 수 있는가 이다. 📖 문제 문제 링크 이 문제는 MxM 크기의 key 배열과 NxN 크기의 lock 배열이 주어지는데 M

[알고리즘 - 구현] 뱀
개발 공부/알고리즘2023. 6. 27. 21:07[알고리즘 - 구현] 뱀

☀️ 시작 풀다 풀다 안 풀려서 결국 답지를 보고 풀었던 문제.. 생각보다 간단했는데 처음에 했던 잘못된 접근법 하나에서 빠져나오지 못해 결국 풀지 못했다. 다음엔 오래 안 풀리는 문제는 며칠 뒤에 다시 도전해보는 것도 재밌을 것 같다. 📖 문제 문제 링크 먼저 문제는 뱀 게임을 시뮬레이션하는 문제로, 보드 위에서 움직이는 뱀이 벽에 닿거나 자신의 몸과 부딪히면 끝나는 게임의 종료까지 걸리는 시간을 계산하는 문제이다. 입력으로는 사과의 좌표와 방향 전환을 언제, 어떤 방향으로 해야하는지가 주어진다. 처음에는 문제를 잘못 이해해서 '방향 전환'이라는게 아래와 같이 방향 전환과 직진을 동시에 하는 건줄 알았는데 문제를 다시 잘 읽어보니 아래와 같이 n초 후에 뱀의 머리만 방향을 전환하는 것이었다. 즉, 4초..

[알고리즘 - 구현] 기둥과 보 설치
개발 공부/알고리즘2023. 6. 27. 16:04[알고리즘 - 구현] 기둥과 보 설치

☀️ 시작 이번 문제는 2020 신입 개발자 블라인드 채용 1차 코딩 테스트의 5번 문항 '기둥과 보 설치' 문제이다. 확실히 구현문제는 어렵지만 머릿속으로 풀이 과정을 생각하고 이를 코드로 구현해내는 과정이 재밌고 뿌듯하다. 정답률이 1.9%라는데 나도 그랬지만 카카오 코테는 블라인드라 일단 지원하고 보는 사람이 너무 많아서 정답률에 크게 의미를 두지 않아야 할 것 같다는 생각이 든다. 그래도 항상 손도 못대던 카카오 코테인데 이번엔 직접 풀 수 있어서 기분이 좋았다. 📖 문제 문제 링크 먼저 문제의 구현 요구사항을 간단히 요약하면, 죠르디가 '기둥'과 '보'를 사용해 구조물을 만들려고 하는데 입력으로 주어지는 '설치'와 '삭제' 요청을 시뮬레이션하면서 가능한 요청만 반영하여 최종 완성된 구조물을 출력..

[이펙티브 자바] Item 23 - 태그 달린 클래스보다는 클래스 계층구조를 활용하라
스터디/자바2023. 6. 20. 21:39[이펙티브 자바] Item 23 - 태그 달린 클래스보다는 클래스 계층구조를 활용하라

태그 달린 클래스 아래와 같이 내부적으로 특정 필드 (태그 역할)을 갖고 이 필드에 값에 따라 다른 동작을 수행하는 클래스를 책에선 '태그 달린 클래스'라고 표현하고 있다. public class Figure { public enum Shape {RECTANGLE, CIRCLE}; private final Shape shape; // 태그 // RECTANGLE용 필드 private double length; private double width; // CIRCLE용 필드 private double radius; // RECTANGLE용 생성자 public Figure(double length, width) { ... } // CIRCLE용 생성자 public Figure(double radius) { ..

image