얼마전 M1 24인치 iMac을 장만한 하였습니다. 드디어 회사 맥북이 아닌 제 소유의 아이맥을 가지게되어 기쁜 마음도 잠시.. 회사에서 쓰던 내용을 그대로 migration하기 싫어서 일일히 수동세팅을 하는 중입니다. (이번 기회에 안 쓰던-또는 생각이 안 나는- 앱 및 설정들은 철저히 배제할 예정) 혹시 나중에도 비슷한 경험을 하게될 것을 대비해 자주 쓰는 설정이나 프로그램에 대해 계속 업데이트 하려고 합니다. macOS 설정 현재 버전: 11.4 Big Sur 트랙패드 세 손가락으로 드래그 설정: 손쉬운 사용 - 포인터 제어기 - 트랙패드 옵션 - 드래그 활성화 Dock 크기 조정: Dock 및 메뉴 막대 - 크기 블루투스 아이콘 보기: Dock 및 메뉴 막대 - Bluetooth - 메뉴 막대에서..
사용자 정의 Repository Best Practice 사용자 정의 Repository를 만들 때 가장 좋은 방법을 소개합니다. 일반적으로 사용자 정의 Repository라고 함은, JpaRepository를 상속해서 쿼리 메서드를 이용하는 것이 아니라 구현체에서 직접 JPA를 사용하거나 MyBatis, JdbcTemplate, QueryDSL 등을 이용해 구현한 것을 말합니다. 상대적으로(?) 나쁜 예시 Entity가 Member, Team이 존재하고 Member는 JpaRepository를 사용하고 Team은 사용자 정의 Repository를 사용한다고 가정하면 그냥 구현해도 상관없습니다. 하지만 MemberRepository가 존재하는데 CustomMemberRepository를 따로 만들어서 S..
모든 소스 코드는 여기에서 확인 가능합니다. Hint SQL에서 Hint를 사용하듯이 JPA에서도 JPA 구현체에 힌트를 전달할 수 있습니다. 조회만 사용하기(Read Only) 기본적으로 JPA를 이용해 데이터를 조회하게되면 영속성 컨텍스트에 저장되어 관리되고, 그 값을 수정한 뒤 flush()하거나 dirty checking이 발생하면 업데이트 쿼리도 발생하게 됩니다. Hint를 사용하여 영속성 컨텍스트에 저장되는 것을 방지해 메모리 낭비를 막고 혹시 모를 변경사항에 대해 업데이트되지 않도록 할 수 있습니다. 먼저 Repository에 이름으로 사용자를 조회하는 메서드를 추가합니다. package io.lcalmsky.springdatajpa.domain.repository; import io.lca..

문제 코딩테스트 연습 > 월간 코드 챌린지 시즌2 > 괄호 회전하기 문제 설명 다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다. (), [], {}는 모두 올바른 괄호 문자열입니다. 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다. 만약 A, B가 올바른 괄호 문자열이라면, AB도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다. 대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때..
모든 소스 코드는 여기에서 확인 가능합니다. Fetch Join과 @GraphEntity를 소개하기 전에 JPA를 사용하다보면 겪을 수 있는 사례 하나를 소개합니다. Member Entity와 Team Entity가 다대일 관계(@ManyToOne) 일 때 Entity 클래스에 서로의 관계를 표시해줍니다. Entity간 연관관계가 있고 JPA를 이용하여 조회해야 하는 상황에서는 되도록이면 FetchType.LAZY 사용을 권장합니다. 관계 파악을 위해 소스 코드를 살펴봅시다. (설명에 필요 없는 import문 등은 생략하였습니다.) @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @ToString public class Member ..

모든 소스 코드는 여기에서 확인 가능합니다. JPA는 보통 데이터를 가져와서 변경하면 변경 감지(dirty checking)를 통해 DB에 업데이트 퀴리를 수행합니다. 이런 업데이트들은 건 별로 select 이후 update가 이루어지기 때문에 수천 건을 업데이트 해야하는 경우 비효율적일 수 있습니다. JPA를 사용해서도 수 천, 수 만 건의 데이터를 한 번에 업데이트 하는 벌크 업데이트(Bulk Update)쿼리를 사용할 수 있습니다. @Modifying 애너테이션 벌크 업데이트를 하기 위해선 @Query와 함께 @Modifying 애너테이션을 사용해야 합니다. 나이가 N살 이상인 전체 회원의 나이를 1씩 증가시켜야 한다는 요구사항이 존재한다고 가정하고 이를 구현한 소스 코드 입니다. package i..
모든 소스 코드는 여기에서 확인 가능합니다. 그동안 API에서 페이징 처리를 위해 page와 size를 받아 공식을 계산해서 SQL문을 수정해보신 경험이 있을 겁니다. 스프링 데이터 JPA는 매우 편리하게 표준화된 페이징 및 정렬 방식을 제공합니다. 페이징과 정렬 파라미터 org.springframework.data.domain.Sort: 정렬 인터페이스 org.springframework.data.domain.Pageable: 페이징 인터페이스(내부에 Sort 포함) 반환 타입 org.springframework.data.domain.Page: total count를 포함하는 페이징 결과 타입, count 쿼리를 추가로 수행 org.springframework.data.domain.Slice: tota..
모든 소스 코드는 여기에서 확인 가능합니다. 스프링 데이터 JPA를 사용하면 기본 인터페이스 외에도 메서드 추가 만으로 직접 구현체를 구현하지 않아도 기능을 사용할 수 있습니다. 쿼리 메서드 기능 메서드 이름으로 쿼리 생성 메서드 이름을 분석하여 JPQL 쿼리를 수행합니다. package io.lcalmsky.springdatajpa.domain.entity; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.ToString; import javax.persistence.*; @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTE..

이직 준비를 위해 알고리즘 문제 풀이 연습을 하다가 매 번 막히는 부분이 있습니다. 바로 조합(Combination)을 만드는 부분인데요, 어느 정도 시도해보다가 잘 안 되면 답을 베끼는 것이 몸에 배다보니 그 순간에만 대충 이해하고 넘어가고, 다음 번에 비슷한 유형의 문제를 만났을 때 어김 없이 문제를 풀지 못하는 저의 모습이 너무 한심해 기록으로 남겨보려고 합니다. 조합(Combination) 먼저 조합은 n 개중 r 개를 고르는 경우의 수를 구할 때 사용합니다. 수식으로는 이렇게 표현합니다. 재귀(Recursive) 알고리즘을 이용해 조합 구하기 앞서 살펴본 수식을 점화식 형태로 표현하기 위해 규칙을 찾아봅시다. 5개 중 3개를 선택하는 경우, 하나를 반드시 포함한 상태에서는 나머지 4개 중 2개만..
IntelliJ로 개발을 하다 보면 업데이트의 영향인지 갑자기 앱이 종료될 때가 있습니다. (현재 저는 Mac OS는 Big Sur 11.4 버전을, IntelliJ는 2021.1.2 버전을 사용하고 있는데 아주 환장의 콜라보 상태입니다) 로컬에서 스프링 부트 애플리케이션을 개발하면서 별 다른 설정 없이 기동시켰다면 8080 포트로 앱이 실행되었을 거고 갑자기 앱이 종료되면 이 프로세스까지 같이 종료되지 않기 때문에, 다시 앱을 켜고 스프링 부트 앱을 실행시키면 Web server failed to start. Port 8080 was already in use. 이런 에러 로그를 마주하게 됩니다. 이럴 땐 터미널 내에서 아주 간단하게 해당 포트를 물고있는 프로세스를 종료할 수 있습니다. jaime > ..
- Total
- Today
- Yesterday
- Spring Boot JPA
- r
- 헥사고날 아키텍처
- gRPC
- 스프링 부트 애플리케이션
- JSON
- spring boot application
- Spring Boot Tutorial
- Linux
- spring boot app
- 함께 자라기
- 클린 아키텍처
- 함께 자라기 후기
- intellij
- leetcode
- Spring Data JPA
- JPA
- Java
- QueryDSL
- 스프링 부트 튜토리얼
- 스프링 데이터 jpa
- 스프링 부트 회원 가입
- Jackson
- proto3
- 스프링 부트
- 스프링부트
- @ManyToOne
- spring boot jwt
- Spring Boot
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |