Spring

    [Spring] HttpComponentsCllientHttpRequestFactory를 이용한 RestTemplate 사용에 대해

    HttpComponentsCllientHttpRequestFactory를 이용한 RestTemplate 사용에 대해 RestTemplate을 선언할 때에 new RestTemplate() 다음과 같이 선언해서 이용할 수가 있다. 그런데 이용법에 대한 구글링을 찾다보니 HttpComponentsClientHttpRequestFactory를 생성자 파라미터로 넘겨주어 RestTemplate을 생성하는 코드를 찾아볼 수가 있었다. 다음과 같이 말이다. HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); HttpClient client = HttpClientBuilder.create() .set..

    [JPA] OSIV와 Spring Framework에서의 OSIV에 대해서

    OSIV와 Spring Framework에서의 OSIV에 대해서 스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다. 트랜잭션이 시작할 때 영속성 컨텍스트를 생성하고 트랜잭션이 끝날 때 영속성 컨텍스트를 종료한다. 보통 비즈니스 로직을 시작하는 서비스 계층에 @Transactional 어노테이션을 선언해서 트랜잭션을 시작한다. 이 어노테이션으로 인해 트랜잭션 AOP가 동작을 하고, 트랜잭션을 커밋하면 JPA는 flush로 변경 내용을 데이터베이스에 반영한 후에 데이터베이스 트랜잭션을 커밋한다. 예외 발생 시에는 트랜잭션을 롤백하고 종료한다. 이 때에는 flush를 호출하지 않는다. 트랜잭션이 같으면 같은 영속성 컨텍스트를 사용한다. 트랜잭션이 다르면 다른 영속성 컨텍스트를 사용한다..

    [Spring] @Async를 이용한 비동기 처리에 대해

    @Async 를 이용한 비동기 처리에 대해 @Async 는 비동기적으로 처리를 할 수 있게끔 스프링에서 제공하는 어노테이션이다. 해당 어노테이션을 붙이게 되면 각기 다른 쓰레드로 실행이 된다. 즉, 호출자는 해당 메서드가 완료되는 것을 기다릴 필요가 없다. 이 어노테이션을 사용하기 위해서는 @EnableAsync 가 달려있는 configuration 클래스가 우선적으로 필요하다. @Configuration @EnableAsync public class AsyncConfig { } By default, both Spring's @Async annotation and the EJB 3.1 @javax.ejb.Asynchronous annotation will be detected. -@EnableAs..

    [Spring] application.yml의 Profile에 대한 테스트 이것저것

    application.yml의 Profile에 대한 테스트 이것저것 Profile에 대한 개념이 있다는 가정하에 진행하겠다. 모른다면 !링크를 참고하자. application-{프로파일}.yml 은 특정 Profile에 맞는 yml 파일이다. Profile을 따로 지정하지 않고 실행하게 된다면 application.yml이 실행이 된다. 그렇다면 이때의 Profile은 무엇으로 실행되는 것일까?? Baeldung 싸이트 피셜로 'default' Profile 이라고 한다. 그렇다면 Profile을 지정하지 않고 돌렸는데 application.yml 이 없다면 어떻게 될까?? //application.yml person: name: defaultBepoz age: 100 //applicati..

    [JPA] JPA CascadeType.PERSIST 에 대한 개인적인 궁금증 해결

    JPA CascadeType.PERSIST 에 대한 개인적인 궁금증 해결 Team과 Member와 같은 1:n의 연관관계를 처리할 때에 Team에 Member를 넣은 후 일일이 Member를 영속화하기 번거로우니 Team만 영속화시켜도 Member 또한 영속화되도록 하기위해 설정을 해준다. 이렇듯이 보통 1에서 n에 대하여 이 속성을 걸어주게된다. @Entity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Team { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToMany(ma..

    [JPA] @PrePersist 에 대해

    @PrePersist에 대해 @PrePersist 어노테이션은 JPA 엔티티 라이프 싸이클의 콜백을 조종할 수 있게하는 어노테이션이다. 다음과 같은 어노테이션들이 있다. 이런 콜백 이벤트들을 사용하는 방법은 엔티티 내부에 직접 메서드를 작성해주는 것과 EntityListener를 만들어 주는 방법이 있다. 일반적으로 Auditing을 위해서 EntityLIstener를 사용해본 적이 있을 것이다. 유의할 점은 콜백 메서드들은 void 타입을 리턴해야 한다는 것이다. 내가 엔티티를 만들고 repository의 save메서드를 호출할 때에 @PrePersist가 달린 메서드가 호출이 되고 DB에 insert된 후에 @PostPersist 메서드가 호출이 된다. 만약 내가 @GeneratedValue로 pk를..

    [Spring] Rest Docs 도입 중 맞닥뜨린 asciiDoctor에 대한 에러

    Rest Docs 도입 중 맞닥뜨린 asciiDoctor에 대한 에러 Spring Rest Docs를 하려고 gradle 설정을 하고 테스트도 통과시키고 src/docs/asciidoc/index.adoc 까지 준비를 마쳐놓은 상태였다. 그러고선 빌드를 하니깐 다음과 같은 오류가 나왔다. Type 'org.asciidoctor.gradle. xxx ' property 'xxx' is missing an input or output annotations. 에러 내용에 어떤식으로 해결하라고 나와있는데 저걸 뭘 어떻게 해야될지도 모르겠고... 이전에 똑~~같이 Rest Docs 했는데 왜 안되나 싶었다. 그 이유는 버전 문제인 것 같았다. 이곳에 존재하는 gradle-wrapper..

    [JPA] DATA JPA 사용 시 조심해야할 클래스 명에 대해

    DATA JPA 사용 시 조심해야할 클래스 명에 대해 Member라는 엔티티 내부에 다음과 같은 Enum을 가지고 있다. 그리고 위와 같이 Data Jpa를 사용해 메서드 이름으로 쿼리를 생성하고 있다. 결론부터 말하자면 위의 코드는 컴파일 에러가 발생한다.(Unable to locate Attribute with the the given name) 그 이유는 다음과 같다. 엔티티가 DDL을 이용하여 테이블을 생성할 때에 따로 설정하지 않은 상태라면 필드명을 통해 컬럼명을 정하게 된다. 처음에 맞이하는 대문자들은 소문자로 바꾸고 이후에 맞이하는 대문자들은 언더바를 사용해 표시한다. private String nickName -> nick_name 으로 생성 private String Nickname ->..