Java

최범균 님의 DDD Start를 읽고 정리한 내용입니다. 도메인 도메인 모델 이커머스에서 모니터를 구매한다고 가정해보자. 원하는 스펙의 모니터를 검색하고 다양한 물건을 비교한다. 눈에 띄는 물건이 여러 개라면 장바구니에 넣어둘 수도 있다. 구매를 결정했다면 어떤 결제수단을 사용할지, 배송지는 어딘지를 선택한다. 배송을 시작했다면 배송 추적 기능을 활용하여 내 물건이 어디쯤 왔는지를 확인한다. 개발자에겐 쇼핑몰은 구현 대상이다. 그리고 쇼핑몰에서는 구매를 위한 다양한 기능을 제공한다. 여기서 쇼핑몰은 소프트웨어로 해결하기 위한 도메인에 해당한다. 정의 도메인 모델은 특정 도메인을 개념적으로 표현한 것이다. 비즈니스 로직에 맞는 규칙을 구현한 레이어는 도메인이 되어야 한다. 예시 상품 주문을 예시로 코드를 ..
· Java/JPA
김영한 님의 자바 ORM 표준 JPA 프로그래밍을 읽고 정리한 내용입니다. 교보문고 링크 연관관계 매핑 기초 객체는 참조를 사용하여 연관 관계를 맺고 테이블은 외래 키를 사용해서 연관 관계를 맺는다. 관계가 있는 다른 데이터를 참조한다는 점에서 동일하지만, 참조와 외래 키는 완전히 다른 특징을 갖는다. 연관관계 매핑을 이해하기 위한 두 가지 키워드가 있다. 방향 : 회원/팀이라는 관계를 생각해본다. 단방향 : 회원 → 팀, 팀 → 회원 둘 중 한 쪽만 참조하는 관계 양방향 : 회원 → 팀, 팀 → 회원 둘이 서로를 참조하는 관계 다중성 1:1 (일대일) 1:N (일대다 혹은 다대일) N:M (다대다) 연관관계의 주인 : 양방향 연관관계를 만들 떄 연관 관계의 주인을 정해야 한다. 단방향 연관관계 가장 먼..
Bean 생성 원리와 저장 위치 Spring에서 bean 생성 전략은 두 가지로 나뉜다. 일반적으로 singleton을 사용하지만 상황에 따라 prototype bean을 사용하기도 한다. 그렇기 때문에 Spring에서는 bean의 정의를 따로 저장해둔다. 지난 포스트에선 딱 여기까지 진행했었다. 이번엔 실제로 생성된 bean이 어디에 저장되는지를 탐구해보려고 한다. 소스 코드 작성 Spring framework의 코드만 보고 bean의 위치를 직접 찾아가기는 어렵다. 목적에 맞는 소스 코드를 작성한다. SomeBean @ToString public class SomeBean { private String name = "someBean"; } BeanConfiguration public class Bea..
· Java/JPA
김영한 님의 자바 ORM 표준 JPA 프로그래밍을 읽고 정리한 내용입니다. 교보문고 링크 엔티티 매핑 JPA에서 실제 테이블에 연결하는 객체를 엔티티라고 부른다. 따라서 엔티티와 테이블을 정확히 매핑시켜 사용하는 것이 매우 중요하다. 아래는 매핑을 위한 대표적인 Annotation 목록이다. 객체와 테이블 매핑 @Entity @Table 기본 키 매핑 @Id 필드와 컬럼 매핑 @Column 연관관계 매핑 @ManyToOne @JoinColumn @Entity 테이블과 매핑할 클래스엔 @Entity가 반드시 붙어야 한다. 속성 name (Default : 클래스명) entity에 사용할 이름 엔티티 중복은 허용되지 않는다. entity의 이름과 테이블 이름은 다른 개념이다. 주의사항 기본 생성자는 반드시 ..
· Java/JPA
김영한 님의 [자바 ORM 표준 JPA 프로그래밍]을 읽고 내용을 정리한 것입니다. 교보문고 링크 EntityManager와 영속성 컨텍스트 mybatis처럼 직접 SQL을 작성하거나 JPA를 활용한 개발을 할 때는 눈에 보이는 것 이상의 차이가 있다. 가장 사소한 예시를 들어보자면 CRUD로 불리는 가장 기본적인 4가지 동작 중 UPDATE는 JPA에 존재하지 않는다. 그럼에도 JPA는 업데이트 동작을 잘 수행한다. 영속성 컨텍스트가 데이터의 변경을 감지하여 자동으로 update 쿼리를 실행하기 때문이다. JPA는 EntityManager와 영속성 컨텍스트를 통해 데이터의 상태 변화를 감지하고 필요한 쿼리를 자동으로 수행한다. Spring boot + Spring Data를 사용하여 막 JPA를 배우는..
Bean 생성 AnnotationConfigApplicationContext AnnotationConfigApplicationContext 클래스는 어노테이션을 읽어 bean을 등록하는 역할을 담당하고 있다. 그 중에서도 기본 생성자에 포함되어 반드시 호출하게 되어 있는 register라는 메소드를 살펴보았다. /** * Register one or more component classes to be processed. * Note that {@link #refresh()} must be called in order for the context * to fully process the new classes. * @param componentClasses one or more component classe..
Spring AOP Aspect-Oriented Programming는 OOP를 보완하는 수단이다. 로깅, 트랜잭션 등 서비스 로직 내에서 동일하게 사용되는 특별한 관심사(Aspect)를 모듈화하는 기법이다. 개요 트랜잭션을 활성화한 로직은 아래와 같은 공통 사항을 포함할 수 있다. 트랜잭션 활성화 서비스 로직 수행 Commit / Rollback 트랜잭션 종료 AOP가 없다면 트랜잭션이 필요한 로직을 아래처럼 수행할 수 있다. void doLogic() { transactionManager.enable(); boolean result = service.execute1(); if (result) { transactionManager.commit(); } else { transactionManager.ro..
SpEL (Spring Expression Language 런타임 시간에 작동하는 강력한 표현 언어로, Spring 하위 프로젝트에서 주로 사용된다. 구성 ExpressionParser parser = new SpelExpressionParser(); Expression exp = parser.parseExpression("5 * 5"); int expVal = exp.getValue(Integer.class); System.out.println(expVal); 주요 문법 ${"property_name"} $ 로 시작하며, property 값을 읽어올 수 있다. #{"expression"} # 로 시작하며, 1+1(덧셈), 1 eq 1(참/거짓 판별) 등 표현식을 사용하여 나타낼 수 있다. express..
감동이중요해
'Java' 카테고리의 글 목록 (3 Page)