모든 소스 코드는 여기에서 확인 가능합니다. 그동안 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 > ..
JPA를 다루다보면 Entity를 생성할 때 반복적으로 해줘야 할 일들이 있습니다. @Entity 애너테이션을 클래스 이름 위에 생성해줘야 하고, lombok을 같이 사용하는 경우 @Getter, @Setter 등을 경우에 따라 생성해줘야 합니다. 특히 IntelliJ Ultimate 버전을 사용하게 되면 DataSource와 자동으로 연동하여 JPA 관련된 속성들을 파악해 컴파일타임에 바로바로 에러나 경고를 표시해주기도 합니다. 그래서 계속 반복적인 작업을 하는게 귀찮기도 하고 바로바로 나타나는 빨간 줄들이 신경쓰이기도 해서 거의 기본 포맷처럼 사용하는 Entity 클래스를 Live Template 기능을 사용해 정의해봤습니다. 먼저 설정 탭에서 Live Template을 검색한 뒤 Java 항목을 찾..
IntelliJ에서 스프링 개발을 하다보면 application.properties 파일에 한글 값을 넣을 때가 종종 있습니다. 하지만 설정 값을 @Value 값을 이용해 Injection하고 출력해보면 아주 이상한 값이 출력되는 것을 확인할 수 있습니다. 이 문제를 해결하기 위해선 유니코드 인코딩을 한 뒤 설정 값에 넣어줘야 합니다. 하지만 계속 값을 인코딩하고 설정파일에 붙여넣는다면 매우 불편하겠죠. 다행히 IntelliJ에서 자동 변환을 해줍니다. Preferences - File Encodings로 들어가셔서 Transparent native-to-ascii conversion을 체크하시면 설정파일(.properties)에 한글이 포함되었을 경우 알아서 유니코드 인코딩을 해줍니다.
Overview 스프링 부트에서 graceful shutdown을 사용하는 방법을 소개합니다. 먼저 graceful shutdown은 애플리케이션 서버 종료시 새로운 요청은 받지 않고 기존 요청을 완전히 처리한 이후 서버를 종료하는 것을 말합니다. 스프링 부트 2.3 이상 버전부터 동작합니다. 참고로 이전 버전에서는 응답을 보내기 전에 서버를 종료했을 경우 클라이언트가 응답을 받지 못합니다. 설정 파일 설정 파일 수정만으로 간단히 해당 기능을 구현할 수 있습니다. 서블릿 기반 MVC와 reactive stream 기반 webflux에서도 동작합니다. 타임아웃 설정도 추가할 수 있습니다. 단, 요청을 처리하는 시간보다 타임아웃으로 설정한 시간이 짧을 경우 클라이언트는 응답을 받을 수 없습니다. 이 경우 g..
Overview 스프링 부트를 이용하여 도커 이미지를 쉽게 만드는 방법을 소개합니다. 스프링 부트의 계층(layer)중 중복으로 포함되는 계층(라이브러리, 부트 로더 등)을 캐싱하여 효율적으로 도커 이미지를 생성합니다. Spring Boot Version 2.3 이상 build.gradle spring-boot-gradle-plugin dependency 추가 bootJar task에 layered 추가 layered()는 deprecated 되었음 layered(Action action) 사용 권장 dependencies { implementation 'org.springframework.boot:spring-boot-gradle-plugin:2.5.0' } bootJar { layered() } Gr..
- Total
- Today
- Yesterday
- proto3
- Spring Data JPA
- leetcode
- Linux
- 알고리즘
- gRPC
- r
- 스프링 부트 튜토리얼
- 함께 자라기 후기
- QueryDSL
- Jackson
- Spring Boot
- spring boot app
- Spring Boot Tutorial
- 클린 아키텍처
- 함께 자라기
- @ManyToOne
- Spring Boot JPA
- 스프링 부트
- 헥사고날 아키텍처
- JPA
- Java
- spring boot jwt
- intellij
- 스프링 부트 애플리케이션
- spring boot application
- JSON
- 스프링 부트 회원 가입
- 스프링 데이터 jpa
- 스프링부트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |