본문 바로가기

전체 글121

[JPA] 자바 ORM 표준 JPA 프로그래밍_1장 1장 JPA 소개 ∘ 객체 지향의 장점을 포기하고 단순히 테이블에 맞추어 데이터 전달 역할만 하도록 개발하는지 의문 ∘ 객체와 관례형 데이터베이스의 차이(패러다임의 차이. 둘은 다른 역할을 가지니까.)로 인해 객체 모델이 데이터 중심의 모델로 바뀌었음 ∘ ORM(Object Relational Mapping) 프레임워크 : 객체와 관계형 데이터베이스 간의 차이를 중간에서 해결해줌 ∘ JPA : 자바 진영의 ORM 기술 표준 - CRUD SQL을 알아서 처리해줌 - 객체 모델링과 관계형 데이터베이스 사이의 차이점 해결 - 실행 시점에 자동으로 SQL을 만들어서 실행 - 조회된 결과를 객체로 매핑하는 작업도 대부분 자동으로 처리해줌 - 객체 중심으로 개발 ⇒ 생산성 향상, 유지보수 용이 - 데이터베이스 변경.. 2023. 5. 20.
Mango Plate 클론코딩 프로젝트 시작 인텔리제이 깃허브 클론 https://rebornbb.tistory.com/entry/GIT-intelliJ%EC%97%90%EC%84%9C-GitHub-%EC%A0%80%EC%9E%A5%EC%86%8C-%EB%B3%B5%EC%A0%9C-Git-Clone%ED%95%98%EA%B8%B0 [GIT] intelliJ에서 GitHub 저장소 복제 Git Clone하기 파일 > 새로만들기 > 버전관리에있는프로젝트 URL입력란에 깃허브 레파지토리 URL을 입력해야한다. clone하려는 깃헙 레파지토리에 code 클릭 > URL 복사 URL 입력란에 붙여넣고 복제를 눌러주면 프로 rebornbb.tistory.com @notnull과 column nullable 비교 https://kafcamus.tistory.c.. 2023. 5. 9.
[DDD] 도메인 주도 개발 시작하기_Ch11 Chapter 11 CQRS 11.1 단일 모델의 단점 주문 내역 조회 기능을 구현하려면 여러 애그리거트에서 데이터를 가져와야 됨 조회 기능을 구현할 때 식별자를 이용해서 애그리거트를 참조하면 즉시 로딩과 같은 JPA의 쿼리 관련 최적화 기능을 사용할 수 없음. 직접 참조하더라도 조회 화면 특성에 따라 같은 연관도 즉시 로딩이나 지연 로딩으로 처리해야 되므로 고민해야 됨. 이러한 문제는 시스템 상태를 변경할 때와 조회할 때 단일 도메인 모델을 사용하기 때문 이런 상황에서 구현 복잡도를 낮추려면 상태 변경을 위한 모델과 조회를 위한 모델을 분리하면 됨 11.2 CQRS 시스템이 제공하는 기능 : 상태를 변경하는 기능, 사용자 입장에서 상태 정보를 조회하는 기능 도메인 모델 관점에서 상태 변경 기능은 주로 .. 2023. 5. 8.
[DDD] 도메인 주도 개발 시작하기_Ch10 Chapter 10 이벤트 10.1 시스템 간 강결합 문제 외부 시스템의 서비스를 호출할 때의 문제 - 외부 서비스가 정상이 아닐 때 트랜잭션 처리가 애매함 - 트랜잭션을 롤백할지 말지 - 외부 서비스의 성능에 직접적인 영향을 받음 - 설계상 서로 다른 로직이 섞일 수 있음 컨텍스트 간의 강결합이 있으면 결합된 컨텍스트끼리 영향을 주고받게 됨 이벤트를 사용하면 강결합 제거 가능 10.2 이벤트 개요 이벤트 : 과거에 벌어진 어떤 것. 상태가 변경됐음을 의미. 이벤트가 발생하면 그에 따른 동작이 수행됨 10.2.1 이벤트 관련 구성요소 이벤트 도입을 위해서는 이벤트, 이벤트 생성 주체, 이벤트 디스패처(퍼블리셔), 이벤트 핸들러(구독자)를 구현해야 됨 - 이벤트 생성 주체 : 엔티티, 밸류, 도메인 서비스.. 2023. 5. 8.
EOL while scanning string literal 파이썬에서 'EOL while scanning string literal' 에러가 뜬다면 코드에서 괄호나 따옴표를 빠뜨렸는지 확인해봐야 한다. 문자열 주변에서 빠뜨렸을 확률이 높다. 2023. 4. 21.
[DDD] 도메인 주도 개발 시작하기_Ch8 Chapter 8 애그리거트 트랜잭션 관리 8.1 애그리거트와 트랜잭션 ∘ 운영자는 상품의 배송 상태를 바꾸고, 동시에 고객은 배송지 정보를 바꿈. 서로 다른 애그리거트 객체를 이용하지만 트랜잭션 커밋할 때 두 정보가 다 바뀜 → 애그리거트의 일관성이 깨짐 ∘ 애그리거트 트랜잭션 처리 방식에는 선점 잠금과 비선점 잠금이 있음 8.2 선점 잠금 선점 잠금 : 먼저 애그리거트를 구한 스레드가 애그리거트 사용이 끝날 때까지 다른 스레드가 해당 애그리거트를 수정하지 못하게 블로킹 먼저 애그리거트를 사용하던 스레드가 수행하고 트랜잭션을 커밋하면 잠금이 해제됨 데이터 충돌 문제 해결 가능 선점 잠금은 보통 DBMS가 제공하는 행단위 잠금을 사용해서 구현함 JPA 프로바이더와 DBMS에 따라 잠금 모드 구현이 다름 .. 2023. 4. 2.
[DDD] 도메인 주도 개발 시작하기_Ch7 Chapter 7 도메인 서비스 7.1 여러 애그리거트가 필요한 기능 ∘ 여러 개의 애그리거트가 필요한 경우가 있음 ex. 결제 금액 계산 로직의 경우 상품, 주문, 할인 쿠폰, 회원 애그리거트가 필요함 ∘ 복잡하다고 기능과 관련 없는 구성 요소가 있는 애그리거트에 기능을 넣으면 안 됨 ∘ 애그리거트가 자신의 책임 범위를 넘어서는 기능을 구현하게 되면 외부에 대한 의존이 높아지고 코드 수정이 어려워짐 ∘ 애그리거트가 여러 개 있을 때 기능을 어디에 구현할지에 대한 문제가 생기면 도메인 기능을 별도 서비스로 구현하면 됨 7.2 도메인 서비스 ∘ 도메인 서비스는 도메인 영역에 위치한 도메인 로직을 표현할 때 사용 7.2.1 계산 로직과 도메인 서비스 ∘ 특정 애그리거트에 넣기 어려운 도메인 개념은 도메인 서.. 2023. 4. 2.
[DDD] 도메인 주도 개발 시작하기_Ch6 https://www.notion.so/sssoyeon/Chapter-6-2c669842d363400e84e2eb841c3ff4f9 2023. 3. 23.