모든 소스 코드는 여기에서 확인 가능합니다. 스프링 데이터 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..

얼마전에 이직하려고 이력서를 제출했다가 과제 안내를 받았는데 과제 스펙을 보자마자 보자마자 포기했던 슬픈 기억이 있습니다. 그 이유는 바로 프론트엔드 개발이 포함되어있었기 때문인데 백엔드 개발자로 지원했는데 프론트를 구현해야 하는 상황이 이해가 안 갔고, 회사 업무가 너무 바빠 프론트까지 공부할 여력이 없었기 때문입니다. (요구사항에는 간단히 기능만 확인할 수 있을 정도로 간단히 구현하라고 되어있었지만..) 그래서 주말인데 비도 오고해서(사실 할 게 없어서..) 인프런 무료 강좌중 thymeleaf를 이용해 간단한 서비스를 만드는 것을 수강하기로 결심하고 열심히 수강하고 있었습니다. 강의 내용중 요구사항 분석 - 도메인 설계 및 개발 - 도메인 테스트 - 서비스 개발 - 서비스 테스트로 이어지는 개발 프..
Factor는 제한된 수의 다른 값들을 저장하는 변수입니다. 이런 변수들을 범주형 변수(categorical variable)라고 부릅니다. 데이터 셋에는 두 가지 유형의 변수가 있습니다. categorical(범주형) 값이 제한되고, 특정 유한한 그룹을 기반으로 함 ex) 나라, 연도, 성별, 직업 등 continuous(연속형) 정수(integer)부터 십진수(decimal)까지 모든 값을 가질 수 있음 ex) 수익, 주가 등 범주형 변수(categorical variable) R은 범주형 변수를 Factor에 저장합니다. 아래는 문자 변수를 Factor 변수로 변환하는 코드 입니다. > factor(x = character(), levels, labels = levels, ordered = is.o..
행렬이란 우리가 익히 알고있는 행과 열로 구성된 2차원 배열입니다. 즉, 같은 데이터 타입을 가지고 있는 두 개 이상의 벡터의 조합이라고 할 수 있습니다. 생성 matrix()라는 함수를 이용하여 행렬을 생성할 수 있습니다. matrix()는 세 가지의 필수 파라미터를 가집니다. > matrix(data, nrow, ncol, byrow = FALSE) data: 행렬을 구성할 요소들의 컬렉션 nrow: 행 수 ncol: 열 수 byrow: row(행)를 기준으로 데이터를 채움, col(열)을 기준으로 채우려면 FALSE(기본값)를 사용 행렬 생성 > matrix_test = matrix(1:10, byrow = TRUE, nrow = 5) > matrix_test [,1] [,2] [1,] 1 2 [2..
- Total
- Today
- Yesterday
- Spring Boot
- 클린 아키텍처
- proto3
- Spring Data JPA
- Java
- Spring Boot Tutorial
- 함께 자라기 후기
- JSON
- JPA
- QueryDSL
- 스프링부트
- spring boot application
- intellij
- leetcode
- gRPC
- spring boot app
- 스프링 부트 튜토리얼
- Jackson
- 알고리즘
- spring boot jwt
- 함께 자라기
- @ManyToOne
- 스프링 부트 애플리케이션
- 스프링 데이터 jpa
- Spring Boot JPA
- r
- Linux
- 스프링 부트 회원 가입
- 스프링 부트
- 헥사고날 아키텍처
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |