본문 바로가기

스프링 부트58

스프링 Java 8 LocalDateTime 직렬화 역직렬화 오류 해결 방법 Java 8 date/time type java.time.LocalDateTime not supported by default LocalDataTime을 역직렬화하지 못해서 생기는 문제입니다. jackson-datatype-jsr310 종속성을 추가하고 해결해야 됩니다. //자바 역직렬화 문제 해결 패키지 implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310' implementation 'com.fasterxml.jackson.core:jackson-databind' 추가적으로 만약 캐시로 사용할 객체에 LocalDateTime 타입의 값이 존재한다면 위처럼 @JsonSerialize, @JsonDeserialize 어노테이션을 기.. 2022. 2. 5.
[Error-Log] ConcurrentModificationException 해결법 @OnetoMany에서 collection 삭제할 때 에러 해결 방법 프로젝트에서 상품 이미지를 수정하려고 할 때 이미지를 새로 올리도록 설정해놨습니다. 그렇기 때문에 기존 이미지 url들을 삭제한 후에 이미지를 업로드하는 로직으로 구성하는 와중에 생긴 에러입니다. orphanremoval 설정을 해두어 url쪽의 FK만 null로 설정해줘도 연관 관계가 끊기게 되고 자동으로 해당 url 엔티티는 delete가 됩니다. 그러나 일반적으로 for을 사용해서 삭제를 진행하게 되면 삭제될 때마다 index가 바뀌어 제대로 삭제가 진행되지 않으면서 ConcurrentModificationException 에러를 띄우게 됩니다. for(Url url : productById.getUrlList()) { url.s.. 2022. 2. 4.
맥북으로 스프링에서 Jmeter로 성능 테스트해보기 1. Jmeter를 먼저 깔아줍시다. Apache JMeter - Download Apache JMeter Download Apache JMeter We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours) may not yet be ava jmeter.apache.org zip 파일을 받고 압축을 풀어주도록 합니다. 2. 별도 설치 필요 없이 터미널에 접속하고 압축 푼 폴더 안의 /.. 2022. 2. 4.
스프링 레디스 redis cache 프로젝트에 적용하기 실행 환경 mac air m1 몬터레이 spring boot: 2.6.2 redis: 6.2.6 Docker Desktop: 4.4.2 스프링에서 레디스를 사용하기 위해서 도커에 redis 컨테이너가 실행 중인 상태로 두신 상태를 전제로 진행하겠습니다. 1. build.gradle에 implementation 추가하기 data-redis와 cache manager 사용을 위해 두 가지 모두 추가해줍니다. implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.springframework.boot:spring-boot-starter-cache' 2. @EnableCaching 추가 프로젝트에서 캐.. 2022. 2. 4.
스프링 부트 JPA 기본 정리 @Entity = 테이블과 매핑하기 위해 필수 어노테이션 @Table = 엔티티와 매핑할 테이블을 지정 @Table(name=”student”) 기본 값은 엔티티의 이름을 소문자로 바꿔 사용한다. ex) public class Student → student hibernate.hbm2ddl.auto 옵션 설명 create 기존 테이블 삭제 후 다시 생성 create-drop create와 같으나 종료시점에 테이블 DROP update 변경분만 반영(운영DB에는 사용하면 안됨) validate 엔티티와 테이블이 정상 매핑되었는지만 확인 none 사용하지 않음 운영 장비에는 절대 create, create-drop, update 사용하면 안된다. 개발 초기 단계는 create 또는 update • 테스트 서.. 2022. 1. 19.
스프링부트 Application.properties에서 H2 설정 하는법 H2 도입 진행 중인 프로젝트에서 개발용으로 H2 디비를 사용하기로 하였고 실제 서비스용으로 Postgresql을 사용하기로 정하였다. H2 설정을 위해 공부를 하던 중 H2방식에도 여러 가지 방식이 있는 것을 처음 알았다. spring.datasource.url 이 코드를 어떤 방식으로 설정하느냐에 따라 달라지게 된다. spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:tcp://localhost/../test spring.datasource.username=sa spring.datasource.password= spring.h2.console.enabled=true spring.h2.console.path=/.. 2022. 1. 19.
김영한 스프링의 핵심 원리 정리 스프링이란 스프링 프레임워크는 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로서 간단히 스프링이라고도 한다. 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다. 스프링 프레임워크 핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트 웹 기술: 스프링 MVC, 스프링 WebFlux 데이터 접근 기술: 트랜잭션, JDBC, JPA , XML 지원 기술 통합: 캐시, 이메일, 원격접근, 스케줄링 테스트: 스프링 기반 테스트 지원 언어: 코틀린, 그루비 스프링 부트 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용 Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됨 손쉬운 빌드 구성을 위한 starter 종속성 제공 스프링과 3rd parth(외부.. 2022. 1. 19.
스프링 레디스 Redis 에러 Creating Server TCP listening socket *:6379: bind: No error 실행 환경 - 윈도우 , redis 3.0.504 버전 혹시나 이 오류를 만나셨다면 1. cmd를 관리자 권한으로 실행 시켜주세요 2. redis-cli.exe를 실행 시켜주세요 3. shutdown을 입력한 후에 exit로 종료해주세요 4. redis-server.exe redis.windows.conf를 cmd 창에 입력하면 redis server가 실행됩니다!! 2022. 1. 18.
entitygraph 사용시 주의할 점 다중 엔티티 그래프를 사용할땐 주의할 점이 있습니다.. 몰랐던 부분인데 JPA에서 Fetch join의 조건이 있었습니다. ToOne 관계는 몇 개든 사용할 수 있다 ToMany 관계는 다중 그래프 관계에서 한 곳만 쓸 수 있다. 기존 코드에서는 ToMany 관계가 두 개 모두 되어 있어 이러한 에러를 만나게 되었습니다. org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags: [com.ireland.ager.account.entity.Account.products, com.ireland.ager.product.entity.Product.urlList] @NamedEntityGraph( name = .. 2022. 1. 18.
스프링부트 JPA N+1 문제와 해결 방법 N+1 문제??? 스프링에서 객체 간 연관 관계 설정시에 발생하는 문제로 조회한 데이터만큼의 SQL 쿼리가 추가적으로 발생해 읽어오는 문제를 말합니다. Fetch 전략을 Lazy나 Eager 어떤 전략과 상관없이 N+1 문제는 발생하게 됩니다. 원인 스프링에서 SQL 조회 쿼리를 날려주는 JPQL(Java Persistence Query Language)를 실행하게 되면 JPA가 분석해 쿼리를 작성하게 됩니다. 그러나 JPQL은 Fetch 전략에 대한 정보가 없기 때문에 개발자가 선택한 특성을 무시하고 쿼리를 작성하게 됩니다. 해결 방법 Fetch Join 사용법 @Query("select a from Account a join fetch a.product") List findAllByProducts().. 2022. 1. 18.