본문 바로가기

Spring

(50)
Transaction 정책 및 Hibernate/jpa bulk save 데이터를 한번에 여러 데이터를 저장할때 , bulk save로 검색하면 여러 샘플이 나오는데10만건(특정)의 데이터를 50(특정)건수 만큼씩 끊어서 Transaction을 적용하고 저장하고 싶을때 참고하면 좋을거 같다. Spring 에서 Transaction을 사용하기 위해서는 몇가지 주의할점이 있다. 1. class 나 inferface 에선언하여 사용한다.2. 자기 참조는 불가능 하다. (클레스를 분리하여 외부 호출로 사용 ) - AOP proxy 방식때문이다.3. private method 에서는 동작되지 않음... 자기 참조로 호출이 불가능 하기때문에 약간의 꼼수라고 해야 할까요 ? 내부 무명 클레스를 이요하거나, DL 방식으로 Class를 불러와서 사용하면 가능 하다. 예제는 DL 방식으로 불러..
JPA Hibernate Bulk Save , Multi save 일괄 처리 JDBC 일괄 처리JDBC는 단일 PreparedStatement로 표현할 수있는 SQL 문을 함께 일괄 처리 할 수 ​​있도록 지원합니다. 구현 방식은 일반적으로 드라이버가 데이터베이스에 대한 네트워크 호출을 절약 할 수있는 한 번의 호출로 서버에 일괄 작업을 보냅니다. Hibernate는 JDBC 배치를 활용할 수 있습니다. 다음 설정은이 동작을 제어합니다. hibernate.jdbc.batch_size드라이버에게 배치를 실행하기 전에 Hibernate가 함께 배치 할 문장의 최대 수를 제어한다. 0 또는 음수는이 기능을 비활성화합니다. hibernate.jdbc.batch_versioned_data일부 JDBC 드라이버는 일괄 처리가 실행될 때 잘못된 행 수를 반환합니다. JDBC 드라이..
JPA Hibernate Multi PK 주의점 (정적 내부 클레스) Hibernate 사용시 주의점 Hibernate: No default constructor for entity Inner Classhttps://stackoverflow.com/questions/28053135/hibernate-no-default-constructor-for-entity-inner-class 내부 클래스 이용시 하이버네이트 내부에서 프록시(리플레케이션)으로 기본 생성자를 콜 한다. 이때 내부 클레스를 사용 하게 되면 실제로 내부클레스는 디폴트 생성자가 없기때문에 에러가 나가 된다. 이에 문제를 해결하기 위해서는 정적 내부 클레스를 이용한다. 해결 방안 : 정적 내부클레스 이용 @Embeddablepublic class ClassName { @EmbeddeId public static ..
Spring devtools restart 파일 감지 스프링부트 개발자툴 활용하기, 개발시 resource 성격의 파일을 리로드할때, 혹은 변경된 클레스만 핫스와핑 하여 사용시 spring devtools 모듈을 설정 하여 사용한다. spring.devtools.restart.enabled 설정으로 restart 제어 . 재시작 비활성화 (false 시) .application.preperties : 클레스 로더 초기화 하여 핫스와핑은 되지만 파일 감지는 없음 (제한적).java main method에 System preperties : 재시작 지원을 완벽히 비활성화 할때, 예를 들면 특정 라이브러리에서만 비활성화시. Debug Mode 로 실행해야 동작 한다. (spring boot version 2.0.3.RELEASE) maven org.springf..
Springboot jpa & Hibernate Naming Strategy(네이밍 전략) Springboot jpa & Hibernate Naming Strategy 전략 어느날 부터인가 컬럼명이 카멜케이스로 나오고 있다. 왜이러지? Springboot 특정 버전 이상부터 프로퍼티 설정이 변경되었다. 프로젝트에 대소문자 구별이 있으면 추후에도 문제가 생길 여지가 있어 모두 소문자로 사용하기 위한 전략을 택했다. ImprovedNamingStrategy 이용시 카멜 케이스를 언더스코어 버전으로 변경해준다. Spring Boot 디폴트는 org.springframework.boot.orm.jpa.SpringNamingStrategy이다.SpringNamingStrategy는 ImprovedNamingStrategy 을 상속한 클레스이다. Hibernate 4 spring.jpa.hibernate..
@OneToOne 양방향 매핑 주키(PK)공유 @OneToOne 양방향 매핑 주키(PK)공유 두테이블에서 같은 키를 PK로 이용한다. A -> PK -> B -> FK,PK *부모객체메인객체 @OneToOne 선언영속상태 정의부모객체에 양방향 매핑의 mappedBy를 설정하여 외례키 컬럼이 생성되지 않도록 한다. @Entity@JsonIgnoreProperties(ignoreUnknown = true)public class Users implements Serializable { @Id private String email; @OneToOne(mappedBy = "users" , cascade = { CascadeType.PERSIST ,CascadeType.MERGE , CascadeType.REMOVE // 사용자 삭제시 FCM Key 함께 삭제..
ORM Jpa @ResponseBody 재귀 memory error ORM을 이용하다보면 @ResponseBody 에서 자동으로 마샬링 언마샬링시에 무한 재귀에 빠지게 된다.이때 부모자식과 같은 관계를 갖는 객체는 원하는 형태에 따라 다음과 같은 @Annotation을 붙여 주어야 한다. @JsonBackReference 는 순환참조의 역할을 끝어주게 되며, 해당 객체가 마샬릴될때 대상에서 제외 된다. 즉 양방향의 JSON 마샬링을 할 수 없는 단점 존재한다. 양방양이 가능한 @JsonIdentityInfo(http://springquay.blogspot.kr/2016/01/new-approach-to-solve-json-recursive.html) 있지만 같은 객체에대한 마샬링은 해주지 않고 참조만 하고 있어, 언마샬링구조엔 맞지 않고 다시 호출해주어야 한다. * 부모..
Spring boot Swagger 안드로이드의 앱개발을 위해 서버를 API 형태로 만들어야 하다보니 API문서를 만들고 테스트할수 있는 환경을 갖추어 주려면 엑셀이나, Jmeter와 같은 툴을 이용하여 테스트 하여야 했다.또한 API를 변경할때마다 문서를 변경해주고 최신화 시켜주어야 하는 작업을 해야 한다. Swagger는 간단한 설정으로 프로젝트에서 지정한 Annotation을 이용하여 API를 보고 테스트 할 수 있는 Web UI 환경을 제공해 준다.(공식 사이트 https://swagger.io/)Springboot 에서는Springfox 를사용한다. 1. 의존성 추가Gradlecompile('io.springfox:springfox-swagger-ui:2.7.0')compile('io.springfox:springfox-swagg..