프로그래밍/Java
-
[클린 아키텍처 12] 아키텍처 스타일 결정하기프로그래밍/Java 2024. 10. 11. 12:57
언제 실제로 육각형 아키텍처를 사용해야 할까? 도메인이 왕이다영속성 관심사나 외부 시스템에 대한 의존성 등의 변화로부터 자유롭게 도메인 코드를 개발할 수 있는 것이 육각형 아키텍처 스타일의 주요 특징이다!이것이 육각형 아키텍처가 DDD와 정말 잘 어울리는 이유 만약 도메인 코드가 애플리케이션에서 가장 중요한 것이 아니라면 해당 아키텍처 스타일은 필요하지 않을 것 경험이 여왕이다인간은 습관의 동물이다.만약 새로운 웹 어플을 만든다면 계층형 아키텍처 스타일을 이용할 것. 아키텍처 스타일에 대해 괜찮은 결정을 내리는 방법은 다른 아키텍처 스타일을 경험해 본보는 것!이 경험이 다음 아키텍처 결정을 이끌어줄 것이다 그때그때 다르다어떤 소프트웨어를 만드냐, 도메인 코드의 역할이 무엇이냐, 팀의 경험이 무엇이냐에 다..
-
[JPA] 상속관계 매핑프로그래밍/Java 2022. 2. 15. 13:16
상속관계 매핑 객체의 상속의 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 전략 1. 조인 전략 각 테이블로 변환 각각 조인해서 사용 DTYPE으로 구분 2. 단일 테이블 전략 한 테이블로 합쳐서 사용 DTYPE으로 구분 3. 구현 클래스마다 테이블 전략 상위 테이블 없이 슈퍼타입 컬럼을 서브타입 애들이 다 갖고 있음 - extends 사용시 JPA 기본전략은 단일테이블 전략 - 상위 테이블을 추상 클래스로 만들 것 어노테이션 사용 @Inheritance - strategy를 이용하여 전략 선택 가능 @Inheritance(strategy = InheritanceType.JOINED) // 조인전략 @Inheritance(strategy = InheritanceType.SINGLE_TABLE) // 단일 ..
-
[JPA] 연관관계(1:N) 매핑하기프로그래밍/Java 2022. 2. 10. 09:52
연관관계 매핑 (1:N) 외래키가 있는 곳이 주인이다! Team과 Member가 1대다 관계일 때, Member 테이블이 연관관계의 주인이다. (Many To One 중 Many가 연관관계의 주인이다.) 연관관계의 주인은 비즈니스적으로 중요하지 않다. => N이 그냥 주인이 되는 것. 양방향 매핑시 연관관계의 주인에는 꼭! 값을 세팅해야함. // XXXXX Team.getMembers().add(member); // OOOOO member.setTeam(team); 객체지향적으로 보면 양 쪽에 값을 세팅해주는게 맞다. Team.getMembers().add(member); member.setTeam(team); - 연관관계 편의 메소드를 생성하자 // 로직이 들어가면 메소드명을 changeTeam 등으로..
-
[JPA] 지연로딩 & 즉시로딩프로그래밍/Java 2022. 1. 21. 14:17
지연 로딩 객체가 실제 사용될 때 로딩 Member member = meberDAO.find(memberId); // select * from member Team team = member.getTeam(); String teamName = team.getName(); // select * from team 객체가 실제 사용될 때 로딩 필요할 때마다 쿼리문을 이용해 호출 즉시 로딩 (최적화) JOIN SQL로 한번에 연관된 객체까지 미리 조회 Member member = meberDAO.find(memberId); // select m.*, t.* from member join team.. Team team = member.getTeam(); String teamName = team.getName(); ..
-
[JPA] 엔티티 데이터 접근 전략 @Access (feat. 필드접근 vs 프로퍼티 접근)프로그래밍/Java 2021. 12. 28. 13:47
@Access JPA가 엔티티 데이터에 접근하는 방식을 지정한다. 필드 접근 @Access(AccessType.FIELD) - 필드에 직접 접근한다. 필드 접근권한이 private이어도 접근할 수 있다. 프로퍼티 접근 @Access(AccessType.PROPERTY) - 프로퍼티에 접근한다. @Access가 없는 경우 @Access를 설정하지 않으면 @Id의 위치를 기준으로 접근 방식이 설정된다. @Entity @Access(AccessType.FIELD) public class Member { @Id // id가 필드에 있으므로 @Access(AccessType.FIELD) 생략 가능 private String id; } @Entity @Access(AccessType.PROPERTY) public ..
-
[JPA] 영속성 관리 (영속성 컨텍스트란?)프로그래밍/Java 2021. 12. 28. 10:47
영속성 컨텍스트 엔티티를 영구 저장하는 환경. 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 영속성 컨텍스트는 논리적인 개념에 가깝다. 영속성 컨텍스트는 엔티티 매니저를 생성할 때 하나 만들어진다. ✔️ persist 엔티티를 영속성 컨텍스트에 저장 ✔️ flush 영속성 컨테스트에 저장된 엔티티를 데이터베이스에 반영 엔티티의 생명주기 비영속 / 영속(영속성 컨텍스트에 저장된 상태) / 준영속(영속성 컨텍스트에 저장되었다가 분리된 상태) / 삭제 쓰기 지연 엔티티 매니저는 트랜잭션을 커밋하기 직전까지 데이터베이스에 엔티티를 저장하지 않고, 내부 쿼리 저장소에 INSERT SQL을 모아둔다. 그리고 트랜잭션을 커밋할 때 모아둔 쿼리를 데이터베이스..
-