분류 전체보기
-
spring @Transactional aop 구현해보기카테고리 없음 2023. 4. 20. 09:52
말이 거창하지 실제 Transactional 을 구현하는건 아니다. @Transactional 대충 어떻게 동작하는지 알아보기 위해 aop 를 구현하는 것이다. 실질적으로 Transactional을 구현하는건 아니다. Transaction이라는 어노테이션이 달린 메서드는 aop 를 동작한다고 해보겠다. @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @Inherited @Documented public @interface Transaction { } 그리고나서 AOP 동작을 위해 MethodInterceptor 구현해야된다. 실제 여기서 트랜잭션 시작과 끝을 구현하면된다. public class TransactionInterceptor i..
-
slf4j 중복 binding, bridge카테고리 없음 2023. 4. 20. 09:52
이번 포스팅은 log를 찍을때 중복으로 binding, bridge 가 있을 경우에 어떻게 되는지 테스트 해볼라고 한다. 저번 spring boot logging 에서 봤듯이 spring boot의 logger 동작 방식을 살펴봤었다. 물론 spring boot 기반으로 테스트 해본다. 설정하기도 귀찮아서... spring boot의 프로젝트를 생성 후에 메이븐을 추가하자. org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-logging org.springframework.boot spring-boot-starter-log4j spring boot 로그 설정을 log4j로 하면 log4j bin..
-
JPA (프록시)카테고리 없음 2023. 4. 20. 09:52
프록시 객체는 객체 그래프로 연관된 객체들을 탐색한다. 그런데 객체가 데이터베이스에 저장되어 있으므로 연관된 객체를 마음껏 탐색하기는 어렵다. JPA 구현체들은 이 문제를 해결하려고 프록시라는 기술을 사용한다. 프록시를 사용하면 연관된 객체를 처음부터 데이터베이스에서 조회하는 것이 아니라, 실제 사용하는 시점에 데이터베이스에서 조회 할 수 있다. 하지만 자주 함께 사용하는 객체들은 조인을 사용해서 함께 조회하는 것이 효과적이다. JPA는 지연로딩 즉시로딩을 모두 지원한다. 프록시 엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것이 아니다. 예를 들어 회원 엔티티를 조회할 때 연관된 팀 엔티티는 비지니스 로직에 따라 사용될 때도 있지만 그렇지 않을 때도 있다. private static void pr..
-
객체화된 기본 자료형 대신 기본 자료형을 이용하라카테고리 없음 2023. 4. 20. 09:52
오랜만에 이펙티브자바! 자바의 자료형 시스템은 두부분으로 나뉜다. 하나는 int, double, boolean 등의 기본 자료형, 다른 하나는 String과 List 등의 참조 자료형이다. 모든 자료형에는 대응되는 참조 자료형이 있는데 이를 객체화된 기본 자료형(boxed primitive type)이라 부른다. int, double, boolean의 객체화된 기본 자료형은 각각 Integer, Double, Boolean이다. 자바 1.5부터 자동 객체화(autoboxing)와 자동 비객체화(auto-unboxing)가 언어의 일부가 되었다. 그 둘사이에는 실직적인 차이가 있으므로 둘 가운데 무엇을 사용하고 있는지를 아는 것이 중요하며, 어떤 것을 사용할지 신중하게 결졍해야 된다. 기본 자료형과 객체화..
-
spring jpa querydsl multiple datasource카테고리 없음 2023. 4. 20. 09:52
몇일전에 Spring 멀티 데이터 소스를 설정하다가 계속 에러가 났다. 근데 집에서 해보니까 한방에 되는 일이 있었는데 회사에서 그대로 했는데도 불구 하고 계속 에러를 내뱉었다. expected single matching bean but found 2 xxxentityManagerFactory, xxxentityManagerFactory 이런 에러가 발생하였다. 일단 에러를 보면 두개의 엔티티 매니저 팩토리가 있다고 그러는거 같았다. 계속 원인을 찾다가 querydsl 쪽에 문제가 있다고 판단 되었음을 확인 할 수 있었다. QueryDslRepositorySupport 클래스를 보면 아래와 같은 setter 메소드가 있다. ... @Repository public abstract class QueryD..
-
spark 활용해 보기카테고리 없음 2023. 4. 20. 09:52
우리는 저번 포스팅에 스팍을 설치하고 간단하게 알아봤다. 이번시간에는 간단하게 활용을 해서 해보겠다. 그리고 스칼라도 조금알아야 된다. 필자도 조금밖에 모른다. 물론 자바를 알아도 되긴 하지만 스팍은 스칼라로 해야 뭔가 한듯하다. 자바로하면 소스도 길고 보기도 별루 안좋다. http://grouplens.org/datasets/movielens 위의 사이트의 가면 영화 데이터를 다운로드 받을 수 있다. 위의 데이터로 진행해 보겠다. 일단 스팍을 기동한 후에 다운로드 받을 파일을 적당한 곳에 압축을 푼다. 우리는 ratings.csv 파일으로 할 예정이다. 다운받을 폴더에 README.txt 를 열어 보면 아래와 같이 나와있다. Ratings Data File Structure (ratings.csv) -..
-
JPA 페치 조인카테고리 없음 2023. 4. 20. 09:52
저번 시간에 이어서 조인 중이 페치 조인에 대해서 알아보자. 저번에는 내부 외부 컬렉션 세타 조인에 대해서 알아봤다. 페치 조인은 우리가 흔히 쓰던 sql 조인이 아니고 JPQL에서 성능 최적화를 위해 제공되는 기능이다. 연관된 엔티티나 컬렉션을 한 번에 같이 조회하는 기능으로 fetch 명령어를 사용할 수 있다. 페치 조인 ::= [LEFT [OUTER] | INNER] JOIN FETCH 조인경로 위는 JPA 표준 명세에 정의된 페치 조인이다. 엔티티 페치 조인 페치 조인을 사용해 보자 select m from Member m join fetch m.team 연관된 엔티티와 컬렉션을 함께 조회하는데 여기서 회원(m)과 팀(m.team)을 함께 조회한다. 일반 JPQL과는 다르게 m.team 에는 별칭..
-
Spring boot elasticsearch카테고리 없음 2023. 4. 20. 09:52
저번 포스팅까지 elasticsearch 를 사용해 봤다. 이번에는 Spring boot로 elasticsearch를 사용해보자 spring-data-elasticsearch를 사용할 예정이고 ElasticsearchRepository와 ElasticsearchTemplate 두개를 사용해서 해볼 것이다. ElasticsearchRepository @Document(indexName = "account", type = "account", shards = 1, replicas = 0, refreshInterval = "-1") @Data @AllArgsConstructor @NoArgsConstructor public class Account { @Id private String id; private St..