일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Hibernate
- awspring
- Cache
- OIDC
- Convention
- JPA
- N + 1
- batch insert
- injellij
- Git
- AWS
- oauth2.0
- @RequestMapping
- fetch join
- Batch
- Cannotacquirelockexception
- mockito
- jdbc
- 정적 팩터리 메서드
- 동시성
- @controller
- 이펙티브 자바
- @Transaction(readOnly=true)
- ngrinder
- spring-cloud-starter-aws
- MySQLTransactionRollbackException
- spring
- 성능테스트
- assert
- 데드락
- Today
- Total
목록분류 전체보기 (17)
정리정리
최근에 S3를 이용한 프로젝트를 하기 위해 Spring Cloud AWS Starter 의존성을 추가하다가 알게 된 점에 대해 정리하고자 합니다. 문제 상황 NCP의 Object Storage를 S3로 사용하기 위해 방법을 찾아보다가, 단순 AWS용 sdk를 추가하는 게 아닌 스프링에서 제공하는 AWS 의존성에 대해 알게 되었고, 이를 적용하고자 다음과 같은 의존성을 추가했었습니다. implementation 'org.springframework.cloud:spring-cloud-starter-aws' 그런데 의존성을 추가해도 S3 연결에 필요한 AmazonS3Client 객체를 import 할 수 없었고, External Libraries를 살펴봐도 aws에 관한 sdk가 추가되지 않았었습니다. 그래서..
이번 포스팅에서는 JPA와 같은 ORM에서 중요한 문제인 N + 1에 관해 알아보고, JPA에서 이를 해결하는 방법에 대해 포스팅을 해보겠습니다. N + 1 이란? 우선 N + 1 문제란, 어떤 엔티티를 조회할 때, 이와 연관관계가 있는 다른 엔티티를 조회하는 쿼리가 추가로 발생하는 현상을 말합니다. 이때 만약 처음 엔티티를 조회하는 쿼리의 결과가 N개라면, 각 N개의 엔티티와 연관관계를 가진 엔티티를 가져오기 위한 N번의 쿼리가 발생하기 때문에 N + 1 문제라고 불리는 것 같습니다. 간단한 예시로 다음과 같이 집사와 강아지가 일대다 관계에 놓여있다고 가정을 해보겠습니다. 이런 식으로 데이터가 있다고 가정을 했을 때, 집사를 조회하는 쿼리를 작성하면 다음과 같은 결과가 생기게 됩니다. #주인 3명 조회..
엔티티 정의 우선 맴버와 게시글이 일대다 양방향 관계에 있다고 가정을 하겠습니다. @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "member") private List posts = new ArrayList(); } @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Post { @Id @GeneratedValue(strategy = ..
OpenID Connect란OpenID Connect(OIDC)는 OAuth 2.0을 기반으로 만들어진 유저의 인증(Authentication)에 초점을 맞춘 프로토콜입니다. OIDC를 통해 유저는 타사 애플리케이션(클라이언트)에서 구글, 페이스북 등의 계정으로 인증이 가능해지고, 유저에 대한 기본적인 정보를 제공받을 수 있습니다.OIDC 흐름OIDC는 OAuth 2.0을 기반으로 만들어졌기 때문에 기본적인 흐름은 OAuth 2.0과 동일합니다. 다만 마지막에 access token과 함께 ID token을 추가로 제공하는 부분에서 차이가 발생합니다. 이 ID token을 통해 유저의 간단한 정보들이 담겨있고, 클라이언트는 이 토큰을 통해 유저를 인증하거나 간단한 프로필을 제공할 수 있습니다. 또한 OA..
혼자 프로젝트를 하다가 점점 인증 과정을 만드는게 프로젝트의 목적에 벗어나기도 하고 배보다 배꼽이 더 큰 경우가 많았습니다. 그래서 소셜 로그인을 도입하자는 생각을 했고, Spring Security의 도움 없이 실제로 구현을 해보고 싶어 자세한 동작 과정을 공부하던 중 생각보다 몰랐던 내용들이 많고, OIDC에 관한 내용을 포스팅 하기 전에 한 번쯤 정리를 해야 할 것 같아서 글을 작성하게 되었습니다. OAuth 2.0 OAuth 2.0의 정의에 대해 알아보겠습니다. The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf..
스프링 2.7 기준으로 작성된 글입니다. 스프링 부트 2.5 이후로 데이터베이스를 초기화하는 방법에 몇가지 변화가 있었습니다. 그래서 이번 포스트에서는 스프링 부트 2.5 이후에서 데이터베이스 스키마를 생성하고 초기화 하는 방법들을 알아보겠습니다. JPA 데이터베이스 초기화 @Entity 가 붙은 클래스들을 스캔해서 자동으로 스키마를 생성해주는 방식입니다. 이 방식에는 JPA에서 제공하는 설정과 Hibernate에서 제공하는 설정이 있습니다. 보통 개발 단계에서 Hibernate가 제공하는 ddl-auto의 create, create-drop, update 기능을 많이 사용하고, 프로덕트에는 none 으로 설정을 합니다. spring.jpa.generate-ddl=(boolean) JPA에서 기본적으로 ..
JPA(Java Persistence API) JPA는 Java Persistence API의 약자로 기술 명세, 즉 자바 표준 ORM 인터페이스입니다. JPA는 크게 세 가지 기능을 제공합니다. persistence API: entityManager를 통해 JPA 핵심 인터페이스 메타데이터: 엔티티를 생성할 때 사용하는 @Entity, @Id, @ManyToOne 등 JPQL(Java Persistence Query Language): JPA 전용 쿼리 문법 Spring Data JPA 스프링에서 제공하는 JPA를 더 쉽게 사용할 수 있게 하는 모듈입니다. Spring Data JPA는 너무 많은 boilerplate 코드를 작성하는데 드는 고생을 줄이고 쉽게 data access layer에 접근할 ..
doRetur와 thenReturn Mockito에는 stubbing을 하는 방법이 크게 2가지가 있습니다. 바로 doReturn/when 방식과 when/thenReturn 방식입니다. 두 방식 모두 거의 같은 기능을 제공하지만, 몇 가지 차이점이 존재합니다. 예시를 보면서 하나씩 알아보겠습니다. 1. void 메서드 Stubbing 많은 사람들이 stubbing을 할 때 when/thenReturn 방식을 사용한다고 합니다. 이 방식이 좀 더 사람이 읽기 쉽게 적혀있어서 선호된다고 하네요. 하지만 이 방식은 void 메서드를 stubbing 하지 못한다는 단점이 존재합니다. 그래서 이럴 경우에는 doReturn/when 방식에서는 doNothing()이라는 메서드를 지원하기 때문에 void 메서드의 ..