일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
- database
- 그리디
- 애자일프로그래밍
- 애자일기법
- 알고리즘
- Elasticsearch
- Baekjoon
- 데이터베이스
- 엘라스틱서치
- 코드
- 코딩테스트
- cleancode
- 백준
- Spring
- API
- 프레임워크
- 개발
- spring boot
- JPA
- 읽기쉬운코드
- ES
- kotlin
- 그리디알고리즘
- framework
- 개발자
- 자바
- 코딩
- Java
- 클린코드
- 스프링
- Today
- Total
목록spring boot (12)
튼튼발자 개발 성장기🏋️

일반적으로 Swagger는 실질적인 로직에 침투적으로써 코드가 지저분해지며 문서의 신뢰성이 저하되는 등 단점이 너무나도 많다. 하지만 Spring Restdocs는 테스트 코드로부터 문서화 하기 때문에 swagger의 단점을 보완하며 정적 문서 형태로 풍부하게 작성할 수 있는 등 swagger보다 더 널리 사용된다.kopring에서 Spring restdocs의 장점만을 이끌어내면서 swagger까지 함께 사용할 수 있는 방법을 알아본다.Hint: Spring restdocs와 swagger는 모두 Springdoc OpenAPI를 통해 사용된다. 1. build.gradle.kts 작성가장 먼저 OpenAPI를 사용하기 위한 기틀을 마련해보자. 플러그인과 종속성 및 Task 설정부터 시작한다.impor..

사이드 프로젝트를 진행하던 중 ssl 인증서 갱신 자동화를 고민하고 정리해두기 때문에모든 내용은 사이드 프로젝트에 초점을 맞춘다. 1. letsencrypt 인증서 발급sudo certbot certonly --manual --preferred-challenges dns -d "{도메인}" 가장 먼저 os에 알맞게 certbot 설치가 선행되어야한다.인증서를 발급받는 여러가지 방법 중 위 방법으로 발급했다. letsencrypt 인증서는 /etc/letsencrypt 디렉토리에서 관리된다. ll /etc/letsencrypt/live/{도메인} 위 command로부터 cert.pem, chain.pem, fullchain.pem, privkey.pem 4가지의 pem파일이 생성된다. 하지만 궁극적인 ..
JPA에서의 N+1 문제는 주로 연관된 엔티티를 조회할 때 발생하는 성능 문제로, 데이터베이스 쿼리가 예상보다 많이 발생하여 성능이 저하될 수 있다. 이 문제는 즉시 로딩(Eager Loading)이나 지연 로딩(Lazy Loading) 설정에 따라 다르게 나타날 수 있다. N+1 문제를 해결하기 위해서는 페치 조인(Fetch Join), @BatchSize, @Fetch(FetchMode.SUBSELECT)와 같은 전략을 사용할 수 있다.1. N+1 문제와 즉시 로딩즉시 로딩은 연관된 엔티티를 조회할 때 기본적으로 즉시 데이터베이스에서 로드한다. 하지만 잘못된 설정이나 비효율적인 쿼리로 인해 N+1 문제가 발생할 수 있다. 엔티티가 아래와 같을 때, 특정 author를 조회한다고 가정해볼 때 books..
JPA에서는 예외가 발생했을 때 표준 예외를 던지며, JPA 예외는 런타임 예외인 PersistenceException을 상속받는다. JPA 예외는 크게 두 가지 범주로 나눌 수 있다.트랜잭션 롤백을 표시하는 예외: 트랜잭션 롤백이 필요함을 나타내는 예외다. 이 예외가 발생하면 트랜잭션이 강제로 롤백된다.트랜잭션 롤백을 표시하지 않는 예외: 트랜잭션 롤백을 강제하지 않으며, 트랜잭션을 계속 유지할 수 있는 예외다.트랜잭션 롤백을 표시하는 예외이 범주에 속하는 예외는 비정상적인 데이터 액세스나 영속성 컨텍스트의 무결성 문제를 발생시킬 때 던진다. 트랜잭션을 즉시 롤백해야 함을 나타내며, 이를 복구하려고 시도할 수 없다.EntityExistsException: 이미 존재하는 엔티티를 병합하거나 영속하려고 할..

컬렉션자바는 기본으로 Collection, List, Set, Map 컬렉션을 지원한다. 이 컬렉션은 JPA에서 아래와 같이 활용할 수 있다.@OneToMany, @ManyToMany를 사용하여 일대다, 다대다 관계를 매핑할 때@ElementCollection을 사용하여 값 타입을 하나 이상 보관할 때(각 자바의 컬렉션의 특징은 자바의 기본적인 사항이므로 넘어간다.)JPA와 컬렉션하이버네이트는 엔티티를 영속 상태로 만들 때 컬렉션 필드를 하이버네이트에서 준비한 "내장 컬렉션"으로 감싸서 사용한다. "래퍼 컬렉션"이라고도 부른다.@Entitypublic class Member { @Id @GeneratedValue private Long id; @OneToMany @JoinCo..

트랜잭션 범위의 영속성 컨텍스트웹 애플리케이션에서 트랜잭션 범위의 영속성 컨텍스트는 데이터베이스와의 상호작용을 효율적으로 관리하는 데 필수적이다. 트랜잭션 범위의 영속성 컨텍스트는 일반적으로 요청 당 트랜잭션으로 설정되며, 이 경우 모든 엔티티 객체는 해당 트랜잭션 내에서 관리된다. 이는 데이터의 일관성을 유지하고, 중복된 데이터베이스 접근을 줄이는 데 도움을준다.스프링 컨테이너의 기본 전략 스프링 컨테이너는 데이터베이스 작업을 관리하기 위해 @Transactional 어노테이션을 사용하여 트랜잭션을 처리한다. 기본적으로 스프링은 각 요청마다 새로운 트랜잭션을 시작하고, 작업이 완료되면 자동으로 커밋하거나 예외가 던져지면 롤백한다. 이러한 접근 방식은 데이터 일관성을 보장하고, 예외 발생 시 롤백을 통해..
스프링 데이터 JPA 소개스프링 데이터는 다양한 데이터 저장소와의 통합을 지원하는 스프링 프로젝트다. 스프링 데이터 JPA는 그 중 하나로, JPA를 사용하여 데이터베이스와의 상호작용을 단순화하고, 개발자의 생산성을 높여준다. 주요 목표는 다음과 같다.데이터 접근 기술의 추상화: JPA를 사용하는 데이터 접근 기술을 더 간편하게 사용하도록 돕는다.표준화된 데이터 접근 레이어: 데이터 접근 계층의 표준화와 코드의 재사용성을 높인다.쿼리 메소드와 자동화: 쿼리 메소드, JPQL, 네이티브 쿼리 등을 사용하여 데이터 접근을 간단히 한다.스프링 데이터 JPA는 JpaRepository와 같은 인터페이스를 제공하여 CRUD 작업과 데이터 조회를 간편하게 수행할 수 있게 한다.스프링 데이터 JPA 설정스프링 데이터..
1. 벌크 연산엔티티를 수정하려면 영속성 컨텍스트의 변경 감지 기능이나 병합을 사용하고, 삭제하려면 remove() 메소드를 사용한다. 만약 수백개 혹은 수천개의 데이터를 처리해야한다면 성능이 매우 떨어질 것이다. 이럴 때 벌크 연산을 사용하여 한 번에 처리가 가능하다.1.1 벌크 연산의 주의점벌크 연산은 데이터베이스에서 대량의 데이터를 한 번에 업데이트하거나 삭제하는 작업을 의미한다. JPA에서는 JPQL을 사용하여 벌크 연산을 수행할 수 있다. 벌크 연산은 다음과 같은 주의점을 가지고 있다.영속성 컨텍스트의 비동기성: 벌크 연산은 데이터베이스에 직접 쿼리를 실행하기 때문에, JPA의 영속성 컨텍스트에 있는 엔티티들과 동기화되지 않는다. 즉, 영속성 컨텍스트는 벌크 연산 결과를 알지 못하므로, 벌크 연..