전체 글

전체 글

    [JPA] Collection, 고아, 트랜잭션, Facade, OSIV

    [JPA] Collection, 고아, 트랜잭션, Facade, OSIV

    Colleciton 엔티티 필드 중 컬렉션 타입도 프록시의 일종은 컬렉션 래퍼(PersistentBag)로 교체된다. final 키워드도 의미가 없다. 컬렉션 래퍼인 프록시로 교체되어야 하기 때문에 사용 안 하는 것이 좋다. 그리고 JPA 철학이 엔터티를 그대로 영속화한다는 개념이기 때문에. final로 선언된 필드가 테이블의 컬럼이라고 생각하면 final 은 더욱 어울리지 않는다. JPA에서 지원하는 컬렉션은 Collection, Set, List, Map이 있다. Collection: 최상위 컬렉션. 하이버네이트는 중복 허용, 순서 보장 x Set: 중복 X, 순서 X List: 중복 O, 순서 O Map: Key, Value 형태. Map은 복잡한 매핑에 비해 활용도가 떨어지고 다른 컬렉션을 사용해..

    [JPA] N+1 문제

    [JPA] N+1 문제

    준비 Team 이 부모이고, Student는 자식들의 부모관계로 설정하고 양방향 관계로 설정을 하였다. 축구팀에는 2명의 학생, 농구팀에도 2명의 학생을 배정하였다. Fetch Type을 Eager로 사전 로딩을 세팅해뒀다. 1차 캐시를 사용하지 않기 위해, setup() 마지막에 session.evit()을 호출하여 캐시를 삭제하고, 테스트 코드를 실행한다. @Entity @Getter public class Team { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String name; @JsonManagedReference @OneToMany(mappedBy = "team", fetch = FetchType..

    AOP / Spring AOP 요약

    AOP / Spring AOP 요약

    AOP 소개 AOP는 관점지향 프로그래밍 기법이다. 핵심 기능과 부가 기능을 분리하고 모듈화하기 위해서이다. AOP는 다양하게 적용될 수 있다. 우리가 흔히 사용하는 런타임 시점에 메소드 호출 시에 AOP를 적용할 수 있지만, 그 외에 컴파일 시, 클래스 로딩 시, 런타임에서도 필드 변경, 정적 변수 접근 등 다양하게 적용이 가능하다. 하지만 Spring AOP 에서는 런타임 시에 메서드 호출 시에만 사용 할 수 있다. 프록시를 사용하기 때문이다. AspectJ 를 사용하면 위에 나열한 다양한 상황에서 AOP를 적용할 수 있다. 예를 들면, 로깅 로직은 모든 기능 또는 도메인의 핵심로직 대부분에 들어가있다. 만약 로깅을 사용하는 소스코드가 수정이 발생하면, 모든 로직을 수정해야한다. 비지니스 로직을 핵심..

    Spring AOP 적용

    빈 후처리기를 사용한 프록시 적용 전역 Bean 후처리기를 Spring 에서 제공하고 있다. Bean 후처리기란 Spring Cotext가 객체 생성 후, Container 에 Bean 으로 등록하기 전 실행하는 로직이다. 빈 후처리 로직에 프록시 bean을 등록하게 하면 공통으로 같은 프록시가 적용될 수 있다. 이전 실습에서는 프록시 타겟마다 프록시 생성을 일일이 해준 것을 빈 후처리기를 통해 코드 재사용성을 높였다. 빈 후처리기 + 포인트 컷 빈 후처리기는 전역을 대상으로 실행되기 때문에, 프록시 적용이 필요한 bean 에만 적용되도록 필터링이 필요하다. 필터링 역할을 포인트 컷이 할 수 있다. Spring AOP 를 사용하면 AnnotationAwareAspectJAutoProxyCreator라는 ..

    스프링 AOP

    스프링 AOP

    유용성 1. ProxyFactory ProxyFactory를 통해 인터페이스가 있는 경우 JDK 동적 프록시 사용, 그렇지 않으면 CGLIB 사용하도록 하여 일관성 있고 편리하게 프록시를 사용할 수 있게 함 ProxyFactory 를 통해 프록시 기술을 선택할 수 있게 함 proxyTargetClass=true 로 설정하면, 인터페이스 여부와 상관 없이 구체 클래스 기반 프록시 CGLIB 를 사용함. 스프링부트 AOP에서는 기본적으로 proxyTargetClass=true로 설정되어 있음 2. Advice, Pointcut Advice를 통해 부가 기능을 구현하기 편함 기존에는 JDK 동적 프록시 InvocationHandler 와 CGLIB가 제공하는 MethodInterceptor를 중복으로 따로 만..

    강화학습 기본 용어

    강화학습 기본 용어

    이 포스팅은 [강화 학습 1강] 강화 학습 Introduction, 팡요랩 을 바탕으로 작성했습니다. 보상 Rewards 모든 목적은 축적된 보상의 합을 최대화하는 것이다 Scalar feedback signal: Scalar 값이 주어진다 에이전트가 각 t 스텝마다 얼마나 잘하고 있는지 알려주는 것이다 에이전트의 일은 누적된 보상을 최대화하는 것이다 Sequential Decision Making 목적: 미래 받을 보상을 최대화하는 액션을 선택하는 것 행동은 장기적인 보상을 발생시킬 수 있다 즉각적인 Reward보다 긴 기간의 Reward가 좋을 경우가 있다. 예시로는 재무투자가 있다. 환경 Environment History And State History는 observations, actions, ..

    강화 학습

    질문사항 정의 주로 어느 문제를 해결하는데 사용되는지 기존 ML, 딥러닝 차이점 가장 쉬운 예시 소개 정의 강화 학습(Reinforcement learning)은 기계 학습의 한 영역이다. 행동심리학에서 영감을 받았으며, 어떤 환경 안에서 정의된 에이전트가 현재의 상태를 인식하여, 선택 가능한 행동들 중 보상을 최대화하는 행동 혹은 행동 순서를 선택하는 방법이다. 출처: 강화 학습,위키 강화(Reinforcement)는 시행착오(Trial and Error)를 통해 학습하는 방법 중 하나를 의미합니다. 이러한 강화를 바탕으로 강화학습은 실수와 보상을 통해 학습을 하여 목표를 찾아가는 알고리즘입니다. 기존의 신경망들이 라벨(정답)이 있는 데이터를 통해서 가중치와 편향을 학습하는 것과 비슷하게 보상(Rewa..

    프록시 패턴과 데코레이션 패턴

    프록시 패턴과 데코레이션 패턴

    시작하며 기존의 템플릿 메서드 패턴, 템플릿 콜백 패턴은 기존 코드를 수정할 수 밖에 없다. 그래서 코드를 건드리지 않는 프록시 패턴을 도입해보고자 한다. Strategy Pattern, Template Callback 패턴 템플릿 메서드 Template Method 패턴과 차이 Template Method 패턴에서는 자주 변경되는 점과 변경되지 않는 점을 부모와 자식 관계인 '상속 관계'로 해결했다. 하지만 단점으로 의존성이 높았다. Strategy mulmandu17.tistory.com 프록시 서버와 클라이언트 관계에서 실제 서버처럼 행동하는 대체자를 프록시라고 한다. 프록시를 도입하면 다음과 같은 이점을 얻을 수 있다. 1. 접근 제어 권한에 따른 접근 차단 캐싱 지연로딩 2. 부가 기능 추가 현..

    Strategy Pattern, Template Callback 패턴

    템플릿 메서드 Template Method 패턴과 차이 Template Method 패턴에서는 자주 변경되는 점과 변경되지 않는 점을 부모와 자식 관계인 '상속 관계'로 해결했다. 하지만 단점으로 의존성이 높았다. Strategy 전략 패턴 전략패턴에서는 상속 관계를 '위임 관계' 로 변경함으로써 의존성을 낮출 수 있다. 위임 관계는 관계 있는 것들을 조립하여 실행하는 방법이다. 조립에는 생성할 때 조립하는 방법이 있고 호출할 때 조립하는 방식이 있다. public class ContextV1 { private final Strategy strategy; public ContextV1(Strategy strategy) { this.strategy = strategy; } public void execut..

    Template Method 패턴

    Template Method 패턴 자주 변경되는 점과 변경되지 않는 지점을 분리하여 설계한 방법이다. 변경되지 않는 점은 Template 양식에 위치하고, 자주 변경되는 지점은 사용할 때마다 구현해서 사용하는 구현체로 남겨둔다. 단일 책임 원칙(SRP)을 지킬 수 있다. 모듈화를 함으로써 로깅과 비지니스 로직을 분리했다. 그리고 공통되는 로깅 로직을 따로 빼서 공통으로 코드를 관리하는 덕분에 변경이 일어날 시 한 곳만 수정을 하면 된다. GOF 디자인 패턴 책에서의 정의는 다음과 같다 템플릿 페머스 디자인 패턴의 목적은 다음과 같습니다. "작업에서 알고리즘의 골격을 정의하고 일부 단계를 하위 클래스로 연기합니다. 템플릿 메서드를 사용하면 하위 클래스가 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 단..