본문 바로가기

Develop

(317)
[JPA] JPQL 공부 시작하기전에... SQL은 데이터 베이스 테이블을 대상으로 쿼리를 하지만 JPQL은 엔티티 객체를 대상으로 쿼리를 한다,. 또한 SQL을 추상화해서, 특정 데이터베이스 SQL에 의존적이지 않다. 간단한 예다. 동적 쿼리를 생성하기에는 ibatis와 mybatis가,편하긴 하지만 jpa에서도 장점은 있다. Criteria를 쓰면, 동적 쿼리에 대한 생성이되지만, 실무에서 쓰기에는 유지보수가 말이안된다. 그래서 동적 쿼리는 Criteria보다, QueryDSL로 많이 사용한다고 한다. QueryDsl 은 오픈소스이다. 이 기술은, 자바 처럼 실수로 오타가 나면 디버깅이 바로 표기되기 떄문에 빠르고 동적 쿼리로 생성되기에 겉 형태가 sql과 비슷하여, 눈에 잘들어온다는 장점이 있다. 또한 자바 쿼리라서 재사용 또한 가능하다. ..
[JPA] 값 타입 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적가능 예_ 회원 엔티티의 키나 나이값을 변경해도 식별자로 인식가능 값 타입 int,Integer,문자열 처럼 단순히 값으로 사용하는 자바 기본타입이나 객체 식별자가 없고, 값만 있으므로 변경시 추적불가 예_숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 된다. -값타입_ 기본값 타입 -자바 기본타입 -int,long -> 공유가 되지 않는 객체 -래퍼 클래스 -Integer,Long -> 공유가 가능하지만, 변경되면 안된다. -String -값타입_임베디드 타입 JPA에서 임베디드한, 데이터 값을 이런식으로 컬럼으로 가질수있다. 이렇게하면, 하위 속성들이 별도 컬럼으로 생성이된다. 이렇게 사용하면 재사용 성이 높고..
[JPA] 영속성 전이 영속성 관련되서, Parent와 child를 persist할때 1:N 관계여도, parent와 child를 다 persist해줘야 한다. 예를 들어, 해당 과 같은 소스에서 차일드가 2개이고, 부모가 한개인 경우에는 총 3번의 persist를 해줘야 쿼리가 3개 다 나간다. 한번 persist를 빼보자 add를 해도, parent만 저장이된다. 이런 케이스때는 일일히 결국 persist를 해줘야 할까? 아니다. 영속성 전이를 이용하면 편하다 동일 소스 여도, 영속성 전이가 되어서 insert가 3개 다 나가는 것을 볼수있다. -라이프사이클이 유사할때,(등록,삭제) -소유자가 하나일때, child를 가지는게 parent하나일때, 위 두가지일때 쓰는것이 좋다. 고아 객체 부모엔티티와 연관관계가 끊어진 자식 ..
[JPA] 지연로딩과 즉시로딩 두 객체에 대한 로딩을 할때, 해당 처럼 Lazy 조인으로 하게되면, 해당 컬럼을 지연 로딩을 할수 있다. 그렇게 되면, 해당 find할때 팀을 가져오는 것이아니라, 실제로 팀을 사용할때 가져오는 쿼리를 발송한다. 이는 프록시를 활용한 것이다. 처음에 멤버를 가져올때 팀은 프록시 객체만 가져오고, 실제로 팀을 사용할때, 해당 팀에 대해서 영속성 컨텍스트에게 프록시 객체가 초기화 요청을 하여 쿼리가 나가는 것이다. 지연 로딩의 반대는 FetchType.eager이면서 즉시로딩이라고한다. 해당 방법으로 엔티티를 가져오면, 프록시 객체가 아닌, 관련된 엔티티들을 조인으로 전부를 진짜 객체로 가져온다. 가급적 실무에서는 지연 로딩을 사용해야한다 왜냐면 즉시로딩은 한번의 엔티티에 다른 엔티티들에 대한 조회를 같이..
[Spring] @Configuration @Configuration 스프링에서 설정 클래스를 선언하는 어노테이션이다. 우선 스프링 빈을 만드는 방법은 @Bean, @Configurtaion, @Component 3가지 어노테이션을 사용하면 된다. Configuration을 클래스 파일에 달게 되면, 이 클래스는 빈등록하기 위한 파일이라는 것을 가시적으로 알려준다. @Configuration을 붙인 class를 java config파일이라고 생각한다면 @Configuration에 대한 클래스 파일 하위에 객체에 대한 return을 해주는 메소드에 빈을 해주면, ApplicationContext 중, AnnotationConfigApplicationContext는 JavaConfig클래스를 읽어 IOC와 DI를 적용하게 된다. 쉽게말하면, Conf..
[Spring] 주요 어노테이션 총 정리 스프링 관련 주요 어노테이션을 정리하면서 스프링 전반적인 개념을 좀더 쌓아보자 1. @Configuration 스프링에서 설정 클래스를 선언하는 어노테이션이다. 우선 스프링 빈을 만드는 방법은 @Bean, @Configurtaion, @Component 3가지 어노테이션을 사용하면 된다. Configuration을 클래스 파일에 달게 되면, 이 클래스는 빈등록하기 위한 파일이라는 것을 가시적으로 알려준다. @Configuration을 붙인 class를 java config파일이라고 생각한다면 @Configuration에 대한 클래스 파일 하위에 객체에 대한 return을 해주는 메소드에 빈을 해주면, ApplicationContext 중, AnnotationConfigApplicationContext는 ..
[Spring] Pointcut 개념과 공부 Pointcut : JoinPoint : 조인포인트는, 특정 aop가 발생되는 지점을 이야기한다. 이전 포스팅에서, 조인포인트를 지정하지 않아, 모든 메소드가 자동으로 걸렸던걸 이해하면 편하다, 이 조인포인트는 advice별로 적용이 가능하다. weaving : 위빙은 뜨개질하다라는 의미이기도 하다, 실제로 메소드나 특정 클래스가 호출될때 프록시를 통하게 되는데 해당 위빙은 프록시와, 이 타겟에 대한 동작과정을 엮는것을 의미한다. 이러한 Pointcut과 advice를 연결해주는 것을 advisor라고 한다. 시점, pointcut과 advice (행위) 를 서로 연결해 주는 중간 매개체라고 하면된다. 요런식으로 해당 매핑되는 메소드를 리스트 형태로, 세팅 할수도있다. 추가로 property name으로..
[Spring] BeforeAdvice 구현 및 예제 공부 before advice는 생각 보다 단순하다. 해당 과 같이 생성하고, xml 파일에서 빈을 불러와서 로드한다. 단순히 클래스에 대한 빈등록을 하고, 해당 인터셉터 리스트에 추가해준다. 참고로 beforeAdvice는, MethodBeforeAdvice를 구현한다. AfterReturningAdvice, returnValue로, 해당 파라미터에 대한 사용도 가능하다 추가로 예외에 대한 핸들러도 등록이 가능하다. 강제로 쓰로우를 시키고 해당 쓰로우때, 빈을 등록하면, 해당 쓰로우 이후에는, 해당 인터셉터가 돈다 advice_throwing이라는 것을 볼수 있다. 여러가지의 advice를 활용하여 인터셉터를 구현해봤다. beforeAdvice,afterReturning,afterThrowing,around..