값 타입은 복잡한 객체 세상을 조금이라도 닫순화 하려고 만든 개념이다. 따라서 값 타입은 단순하고 안전하게 다룰수 있어야한다. 값 타입 공유 참조 임베티드 타입 같은 값 타입을 여러 엔티티에서 공유하면 위험함 부작용 발생 값 타입 복사 값 타입의 실제 인스턴스인 값을 공유하는 것은 위험 대신 값(인스턴스)를 복사해서 사용. 객체 타입의 한계 항상 값을 복사해서 사용하면 공유 참조로 인해 발생하는 부작용을 피할 수 있다. 문제는 임베디드 타입처럼 직접 정의한 값 타입은 자바의 기본 타입이 아니라 객체 타입이다. 자바 기본 타입에 값을 대입하면 값을 복사한다. 객체 타입은 참조 값을 직접 대입하는 것을 막을 방법이 없다. 객체의 공유 참조는 피할 수 없다. 불변 객체 객체 타입을 수정할 수 없게 만들면 부작..
새로운 값 타입을 직접 정의할 수 있음 JPA는 임베디드 타입(embedded type)이라 함 주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고도 함 int, String과 같은 값 타입 사용법 @Embeddable: 값 타입을 정의하는 곳에 표시 @Embedded: 값 타입을 사용하는 곳에 표시 기본 생성자 필수 장점 재사용 높은 응집도 Period.isWork()처럼 해당 값 타임만 사용하는 의미 있는 메소드를 만들 수 있음 임베디트 타입을 포함한 모든 값 타입은 값 타입을 소유한 엔티티에 생명주기를 의존함 임베디드 타입과 테이블 매핑 임베디드 타입은 엔티티의 값일 뿐이다. 임베디드 타입을 사용하기 전과 후에 매핑하는 테이블은 같다. 객체와 테이블을 아주 세밀하게 매핑하는 것이 가능 잘 설계..
Chat GPT 란? Chat GPT는 Generative Pretrained Transformer 의 약자예요. Generative 다음 단어를 예측 Pre-trained 많은 양의 데이터를 사전 훈련 Transformer 신경망에 기반한 인코더- 디코더 Chat GPT는 대화형 모델이고, instruct GPT 와 형제 모델이에요. Chat GPT 의 학습 방식은 아래와 같아요. - RLHF(Reinforcement learning by Human Feedback) SFT(Supervised Fine-Tuning) 사람이 직접 지도 학습 RM(Reword Model) 보상 학습 PPO(Proximal Policy Optimization) Algorithm 강화 학습 알고리즘 - 대화형 에이전트에 최적..
프록시 객체는 처음 사용할 때 한 번만 초기화 프록시 객체를 초기화 할 때, 프록시 객체가 실제 엔티티로 바뀌는 것은 아님, 초기화 되면 프록시 객체를 통해서 실제 엔티티에 접근 가능 프록시 객체는 원본 엔티티를 상속 받음, 따라서 타입 체크시 주의 해야함 (== 비교 실패, 대신 instance of 사용) 영속성 컨텍스트에 찾는 엔티티가 이미 있으면, em.getReference()를 호출해도 실제 엔티티 반환 영속성 컨텍스트의 도움을 받을 수 없는 준영속 상태일 때, 프록시를 초기화 하면 문제 발생 프록시와 즉시로딩 주의 - 가급적 지연 로딩만 사용(특히 실무) - 즉시 로딩을 적용하면 예상하지 못한 SQL이 발생 - 즉시 로딩은 JPQL에서 N+1 문제를 일으킨다. - @ManyToOne, @On..
Flutter 프로젝트 마무리 후 이제 CI/CD 를 도입을 해보려고 해요. 많은 CI\CD 프로그램, 사이트들이 있는데, 저는 돈이 없으니까 무료로 어느정도 사용이 가능한 Codemagic 을 이용해서 자동으로 Firebase App Distribution에 배포 하도록 진행 할 거에요. 시작하기전 Firebase, Codemagic, Github 에 가입이 되어 있다고 가정을 하고 진행할거에요. 당연히 이미 Firebase에 프로젝트도 등록이 되어있어야 해요. 자 그럼 시작해 볼게요. 1. Firebase console (https://console.firebase.google.com/) 에서 프로젝트 개요 옆에 톱니바퀴 버튼을 누르고 프로젝트 설정 에 들어가요. 2. 아래로 스크롤 하면 내 앱 항목..