전체 글87 velog 로 이관 마크다운 형식을 지원하고, 좀 더 깔끔한 UI 를 가진 velog 로 블로그를 이관 https://velog.io/@gyuseong 카테고리 없음 2023. 7. 30. [ 프로젝트 ] JPA 벌크 삭제 구현 도중 마주하게된 내용들 각 Entity 는 다음과 같은 관계로 이루어져있습니다. 위와 같은 상황에서 회원 탈퇴 시에 회원과 관련된 데이터를 모두 삭제하기 위해 요청이 들어오면 User를 삭제하고 Event 를 발행하여 User 와 관련이 있는 Trip과 Day 그리고 Schedule 을 모두 삭제해야합니다. ( 내용의 일관성을 위해 JPA 관련된 내용만을 기술합니다. ) 1. 첫번째 방법 : 영속성 전이 활용 하나의 Trip, Day, Schedule 은 생명주기가 동일합니다. 사용자가 생성한 여행 계획에 해당하는 Trip 이 삭제되면 Schedule 과 Day 모두 삭제되어야합니다. Day 와 Schedule 은 모두 독립적으로 존재할 수 없습니다. 따라서 영속성 전이 옵션 중 REMOVE 옵션을 주어 다음과 같이 처리했습니.. 👨💻 개발일지 2023. 7. 1. 'java.lang.Object org.hibernate.ScrollableResults.get(int)' 에러 해결하기 문제상황 @Override public Optional findDayWithSchedulesByDayId(Long dayId) { DayScheduleDetail dayScheduleDetail = query .from(day) .innerJoin(day.schedules, schedule) .where(day.id.eq(dayId)) .orderBy(schedule.scheduleIndex.value.asc()) .transform(groupBy(day.id).as(new QDayScheduleDetail( day.id, day.trip.id, day.tripDate, list(new QDayScheduleDetail_ScheduleSummary( schedule.id, schedule.title, s.. 👨💻 개발일지/🔨 ERROR FIX 2023. 5. 19. @RequiredArgConstructor 와 명시적 생성자 주입 @RequiredArgConstructor 란 무엇인가 ? 간략하게 설명하자면 Lombok 에서 제공하는 어노테이션으로, 클래스의 필드를 기반으로 자동으로 생성자를 생성해주는 기능을 제공합니다. 이를 통해 생성자 관련 코드를 간소화 할 수 있습니다. @RequiredArgConstructor 를 사용하면 다음과 같은 동작을 수행합니다. 'final'이나 '@NonNull'으로 선언된 필드들을 매개변수로 받는 생성자를 생성합니다. 생성자의 매개변수는 해당 필드들의 순서와 타입에 맞춰 생성됩니다. 생성자에는 클래스의 다른 필드나 메서드가 포함되지 않습니다. 예를 들어 다음과 같은 클래스가 있을 때 @RequiredArgsConstructor public class Person { private final S.. 👨💻 개발일지 2023. 5. 14. [ 프로그래머스 ] 연속된 부분 수열의 합 https://school.programmers.co.kr/learn/courses/30/lessons/178870 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr sequence의 길이가 1,000,000 이므로 모든 경우를 고려하여 O(N^2) 으로 해결하는 경우 TL 이 발생합니다. 즉, 시간복잡도 O(N) 으로 풀어야하므로 투 포인터(슬라이딩 윈도우)를 활용합니다. 풀이 - 투포인터, 슬라이딩 윈도우 class Solution { public int[] solution(int[] sequence, int k) { int n = sequence.len.. 💯 알고리즘 2023. 5. 12. AOP 활용 - 쿼리 카운터 만들기 도입 배경 프로젝트를 진행하는데 있어서 단일 요청마다 실행되는 쿼리의 개수를 좀 더 쉽고 명확하게 로그를 통해 확인하고 싶었기에 생성되는 SQL 쿼리의 개수를 세어주는 쿼리 카운터가 필요했습니다. 진행하고 있는 프로젝트에서는 현재 Spring Data JPA, QueryDSL, JPA 와 같은 데이터 접근 기술을 사용하고 있지만, 성능 개선과 복잡한 쿼리 작성을 위해 Mybatis 나 JDBC Template 도 도입할 여지가 있습니다. 이를 구현하기 위해서는 이들 모두가 쿼리 실행을 위해 공통으로 호출하는 메서드를 찾고, 요청을 가로채서 호출 될 때마다 횟수를 증가시키는 부가 기능을 끼워넣어야 합니다. 또 이러한 작업은 횡단 관심사 이기에 AOP 를 활용해서 별도의 모듈로 만들어야 합니다. 이를 위해서.. 👨💻 개발일지 2023. 5. 12. [ 프로젝트 ] Repository 의존관계 설정하기 계층 구조의 아키텍처 구성 고수준 모듈이 제대로 동작하려면 위와 같이 저수준 모듈을 사용(의존)해야합니다. 다만 위와 같이 구현 상세에 해당하는 Infrastructure 계층에 강하게 결합되면 해당 기능에 필요한 구현 기술에 변경이 생길 때마다 application, domain 모듈이 모두 영향을 받게 됩니다. 또한 이렇게 강하게 결합 되어 있을 경우 domain, application 계층에서 단위 테스트를 작성할 때, 의존하고 있는 infrastructure 모듈을 사용하지 않고 테스트를 작성하는데 어려움이 생기게 됩니다. 따라서 아래와 같은 방식으로 DIP를 통해 유연하게 설계해야합니다. 프로젝트에 적용하기 Repository 는 어플리케이션 외부에 위치한 DB와 연동을 통해 데이터를 처리해야한.. 👨💻 개발일지 2023. 5. 5. [ 프로그래머스 ] 카펫 https://school.programmers.co.kr/learn/courses/30/lessons/42842 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 - 완전탐색 import java.util.*; class Solution { public int[] solution(int brown, int yellow) { int[] answer = {}; for(int i = 1; i 💯 알고리즘 2023. 4. 26. [ 프로그래머스 ] 부대복귀 https://school.programmers.co.kr/learn/courses/30/lessons/132266 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 - 다익스트라 import java.util.*; class Solution { static List edges[]; static int dist[]; public int[] solution(int n, int[][] roads, int[] sources, int destination) { dist = new int[n + 1]; edges = new ArrayList[n + 1]; for.. 💯 알고리즘 2023. 4. 26. [ 프로그래머스 ] 삼총사 https://school.programmers.co.kr/learn/courses/30/lessons/131705 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 - 재귀 import java.util.*; import java.io.*; class Solution { static int n; static boolean visited[]; static int number[]; static int ans; public int solution(int[] arr) { number = arr; n = number.length; visited = new bo.. 💯 알고리즘 2023. 4. 24. API 란 무엇일까 API(WEB API) 는 소프트웨어를 위한, 소프트웨어가 제공하는 웹 인터페이스를 말합니다. 구체적인 구현은 공개하지 않고, 추상화된 개념을 통해 제공합니다. 이러한 API 는 주로 HTTP 라는 인터넷에서 사용하는 프로토콜에 의존하게 되며 이 때문에 웹 API 라고 부르게 됩니다. 이러한 API 를 소비하느냐 제공하느냐에 따라서 컨슈머 또는 프로바이더라고 불리우는데, 예를 들어 모바일 애플리케이션의 개발자는 컨슈머이고 백엔드 애플리케이션 개발자는 API의 프로바이더(컨슈머가 될 수도 있음)입니다. 이러한 API 가 중요한 이유는 소프트웨어 간의 대화(커뮤니케이션)가 가능하게 만들어 주기 때문에 그 활용성과 재사용성이 증가되었기 때문입니다. 예를 들어 카카오, 네이버, 페이스북 등 다양한 소셜 네트워크.. 👨💻 개발일지 2023. 4. 23. 웹 API 디자인 https://www.yes24.com/Product/Goods/94462254 일상 속 사물이 알려주는 웹 API 디자인 - YES24 웹 API는 새로운 서비스나 앱을 만들 때 기존에 존재하던 서비스가 제공하는 기능을 활용할 수 있도록 해준다. 굳이 기존 서비스에 대한 자세한 소스 코드를 알지 않더라도 개발자가 만드는 프로 www.yes24.com 기간 23/04/22 ~ 후기 📚 책 2023. 4. 22. 이전 1 2 3 4 ··· 8 다음