Java 27

@Transactional 란?

@Transactional 메서드나 클래스에 적용되어 해당 메서드나 클래스에서 수행되는 모든 작업을 하나의 트랜잭션으로 묶어주는 역할 해당 메서드나 클래스에서 수행된 작업 중 어떤 하나라도 실패하는 경우, 모든 작업이 취소되어 데이터 일관성이 유지된다. Transaction ACID 1) 원자성 (Atomicity) - 한 트랜잭션 내에서 실행한 작업들은 하나의 단위로 처리 - 모두 성공하거나 모두 실패 2) 일관성 (Consistency) - 트랜잭션은 일관성 있는 데이터베이스 상태를 유지 3) 격리성 (Isolation) - 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리 4) 영속성 (Durability) - 트랜잭션을 성공적으로 마치면 결과가 항상 저장 @ 애너테이션 속성 * 접근제어..

Java 2023.05.01

[ DDD ] 02. 아키텍처 개요

이 게시글은 "도메인 주도 개발 시작하기 : DDD 핵심 개념 정리부터 구현까지" 최범균 님의 책을 기반으로 작성하였습니다. [DDD] 01. 도메인 모델 시작하기 이 게시글은 "도메인 주도 개발 시작하기 : DDD 핵심 개념 정리부터 구현까지" 최범균 님의 책을 기반으로 작성하였습니다. DDD란? Domain Driven Design 의 약어 도메인 주도 설계로 도메인을 중점으로 ddol.tistory.com 네 개의 영역 표현 영역 사용자의 요청을 받아 응용 영역에 전달, 응용 영역의 처리 결과를 다시 사용자에게 보여주는 역할을 한다. 표현 영역의 사용자는 웹 브라우저를 사용하는 사람일 수도 있고, REST API를 호출하는 외부 시스템일 수도 있다. 응용 영역 사용자의 요청을 전달받아 사용자에게 제..

DDD 2023.04.30

[DDD] 01. 도메인 모델 시작하기

이 게시글은 "도메인 주도 개발 시작하기 : DDD 핵심 개념 정리부터 구현까지" 최범균 님의 책을 기반으로 작성하였습니다. DDD란? Domain Driven Design 의 약어 도메인 주도 설계로 도메인을 중점으로 설계하는 방식이다. 도메인이란? 우리가 온라인 서점을 구현해야한다고 가정해보면, 온라인 서점은 구현해야 할 소프트웨어의 대상 온라인 서점 안에는 책을 판매하는 데 필요한 상품 조회, 구매, 결제, 배송 추적 등의 기능이 필요 소프트웨어로 해결하고자 하는 문제 영역인 온라인 서점이 도메인에 해당한다. 도메인의 특징 한 도메인은 다시 하위 도메인으로 나뉠 수 있다. ex) 온라인 서점 도메인의 하위 도메인으로 회원, 카탈로그, 주문, 정산, 배송 등등 카탈로그 하위 도메인은 고객에게 구매할 ..

DDD 2023.04.23

[Spring] DAO, DTO, VO, Record 개념 및 차이점

DAO 의 경우 데이터 엑세스를 위한 객체 DTO, VO, RECORD 의 경우 데이터를 표현하기 위한 객체 DAO ( Data Access Object ) 데이터 액세스 객체 DB에서 데이터를 가져오거나 DB에 데이터를 저장하는 등의 작업을 수행하는 객체 비즈니스 계층과 DB 간의 인터페이스 역할 DTO ( Data Transfer Object ) 데이터 전송 객체 데이터를 효율적으로 전송하기 위한 객체 일반적으로 DB에서 가져온 데이터를 다른 계층에서 사용하기 적합한 형식으로 변환하여 전송하는데 사용 DTO 속성은 getter / setter 메서드로 구성 데이터 전송에만 사용 VO ( Value Object ) 값 객체 데이터의 불변성을 보장하고 상태를 가지지 않음 보통 DB의 한 행 또는 여러 행..

Java 2023.04.17

[Spring] Controller Request 값 @valid 이용하여 검증하기

Controller에서 값을 받아 일일이 값을 검증해주다보니 소스가 길어지고 가독성이 안좋아지는 것 방지하고자 @valid를 사용하게 되었다. 1. build.gradle 에 validation 의존성 추가 dependencies { implementation('org.springframework.boot:spring-boot-starter-validation') } 2. Request Class 에 검증할 어노테이션 추가 @Getter @FieldDefaults(level = AccessLevel.PRIVATE) public class CreateUserRequest { @NotBlank(message = "아이디를 입력해주세요.") String id; @Min(value = 8, message = "..

Java 2023.04.16

[JPA] 기본 키 매핑 어노테이션 @Id / @GeneratedValue [IDENTITY, SEQUENCE, TABLE, AUTO]

@Id - 내가 직접 셋팅해주는 직접 할당 @GeneratedValue - IDENTITY : 데이터베이스에 위임, MYSQL @Id//pk가 무엇인지 알려줌 @GeneratedValue(strategy=GenerationType.IDENTITY) private String id; -> MYSQL의 autoincrement와 같이 DB가 알아서 값을 넣어주는 자동 생성 방법 Member member = new Member(); //member.setId("ID_A"); member.setUsername("Hi"); em.persist(member); id 값은 자동할당하기로 하였기 때문에 값을 안주고 실행하게되면 MySQL 방언에 따라 아래와 같이 auto_increment로 생성된다. 순차적으로 id ..

JPA 2021.07.06

[JPA] @Temporal / @Lob / @Transient 속성

@Temporal 날짜 타입 (java.util.Date, java.util.Calendar)을 매핑할 때 사용 - DATE : 날짜 2020-07-05 - TIME : 시간 10:50:11 - TIMESTAMP : 날짜,시간 2020-07-05 10:50:11 ** 지금은 사실 @Temporal이 필요 없다.. 자바8이 되면서 하이버네이트에서 LocalDate, LocalDateTime을 지원해주기 시작하였다. @Temporal(TemporalType.TIMESTAMP) //날짜 Type -> DATE날짜/TIME시간/TIMESTAMP날짜시간 private Date createdDate; @Temporal(TemporalType.TIMESTAMP) private Date lastModifiedDate;..

JPA 2021.07.05

[JPA] @Column / @Enumerated 속성

@Column 컬럼을 매핑 name : 필드와 매핑할 테이블의 컬럼 이름 @Column(name = "name") private String username; insertable / updateable : 등록, 변경 가능 여부 / 기본값 : TRUE //DB에 insert문이 처리될 때 할건지 말건지 / update문 처리될때 반영할건지 말건지 @Column(insertable=true, updatable=true) private String username; nullable : null 값의 허용 여부 설정 (false로 설정하면 DDL 생성시 not null 처리) / 기본값 : TRUE // false일 경우, not null 제약조건이 걸린다 @Column(nullable=false) priva..

JPA 2021.07.02

[JPA] @Entity / @Table 매핑 어노테이션 정리

@Entity - @Entity가 붙은 클래스는 JPA가 관리한다. - JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수 - 기본 생성자 필수!! JPA 스펙상 규정이 되어있다고 해요 :) - final 클래스, enum, interface, inner 클래스는 @Entity 를 이용해서 사용할 수 없음 - 저장할 필드에 final 사용할 수 없음 @Entity 속성 1. @Entity(name="Member") - JPA가 내부적으로 구분하는 이름 - 설정을 따로 안하면 기본값으로 클래스 이름을 그대로 사용한다. - 같은 클래스 이름이 없으면 가급적으로 기본값을 사용한다. @Table - 엔티티와 매핑할 테이블 지정 1. @Table(name="MBR") - MBR 테이블로 처리된다. -..

JPA 2021.07.01