일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 동시성
- OIDC
- awspring
- @Transaction(readOnly=true)
- 성능테스트
- Git
- Cannotacquirelockexception
- oauth2.0
- JPA
- Cache
- jdbc
- spring
- ngrinder
- Batch
- MySQLTransactionRollbackException
- @controller
- Hibernate
- N + 1
- fetch join
- injellij
- assert
- AWS
- @RequestMapping
- 데드락
- mockito
- spring-cloud-starter-aws
- Convention
- 정적 팩터리 메서드
- 이펙티브 자바
- batch insert
- Today
- Total
목록spring (6)
정리정리
최근에 인프런의 스프링 강의 예제를 스프링 부트 3.1로 따라 치다가 겪은 문제점과 알게 된 점이 있어 정리해 보고자 글을 작성합니다. 문제 상황 우선 문제를 겪은 예제 코드는 다음과 같았습니다. @RequestMapping @ResponseBody public interface OrderControllerV1 { @GetMapping("/v1/request") String request(@RequestParam("itemId") String itemId); } public class OrderControllerV1Impl implements OrderControllerV1 { @Override public String request(String itemId) { return "ok"; } } AOP를 ..
io.awspring.cloud의 spring-cloud-starter-aws 라이브러리를 이용해 s3를 연결하다가 생긴 문제점에 대해 찾아보고 정리하는 포스팅입니다. 문제 상황 및 해결 스프링 부트 3에서 작성한 s3 연결 예제가 기존의 스프링 부트 2를 사용하는 프로젝트에서 작동하지 않았습니다. 문제 원인은 제가 마음대로 작성한 properties 키 이름 때문이었습니다. #기존 문제가 발생한 키 이름 #ncp: # credentials: # accessKey: accessKey # secretKey: secretKey # s3: # bucket: bucketName # endpoint: https://kr.object.ncloudstorage.com # region: # static: kr-stan..
최근에 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가 추가되지 않았었습니다. 그래서..
스프링 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에 접근할 ..
JPA는 특성상 실제 쿼리를 날리지 않아도 DB의 값이 변경되는 경우가 많습니다. 그리고 보통 영속성 컨택스트의 생명 주기가 서비스 계층과 비슷하기 때문에 서비스 계층 단위 테스트를 할 때는 JPA를 포함시켜 테스트를 많이 합니다. 특히 스프링의 @Transactional은 테스트 코드에 추가할 경우, 테스트가 끝나면 자동으로 트랜잭션을 롤백해주기 때문에 간단하게 JPA를 포함시켜 서비스 계층을 테스트할 수 있습니다. 하지만 그랬다가는 예상치 못하는 오류가 발생하는 경우가 있기 때문에 주의해야 합니다. 이번 포스팅에서는 서비스 계층 테스트 코드에 @Transactional을 붙였을 때 문제점과, @Transactional을 이용하지 않고 테스트 코드를 작성하는 방법에 대해 적으려고 합니다. Spring ..