코드스테이츠_국비교육 158

52.01_[Spring MVC] 트랜잭션(Transaction)_트랜잭션 개요_22.11.04

>트랜젝션 : 여러 작업을 하나로 묶는 단위. : 여러 작업을 하나로 묶을 수 있는 기준은 각 작업들이 별개의 업무를 수행하되, 결국 하나의 작업처럼 인식되어야 한다. 즉, '전부 성공하든가' 혹은 '전부 실패하든가'로 처리되어야 하는 작업 단위를 트랜젝션이라고 한다. >트랜잭션의 ACID 원칙 -Atomicity(원자성) : 원자란 물질을 이루는 가장 작은 단위이다. 이와 같은 의미로 트랜잭션은 더 이상 나눠지지 않는 가장 작은 단위여야한다는 의미이다. 트랜잭션으로 취급받는 작업은 더 이상 쪼갤 수 없다. -Consistency(일관성) : 트랜잭션이 성공적으로 종료된 경우, 결과 데이터가 로직에서 의도한대로 저장되거나 변경되어야하는 것을 의미. 어찌보면 당연한 얘기이다. 1의 정보가 들어왔을때, 1이..

51.01_[Spring MVC] JPA 기반 데이터 액세스 계층_Spring Data JPA 연관 관계 정리_22.11.03

>JPA 목적 : 객체 지향 프로그래밍과 데이터베이스 사이의 패러다임 불일치를 해결한다. : JPA에서 Entity 객체와 DB 테이블을 어떻게 매핑할 지를 잘 이해하는 것이 중요한 이유 >1차원 매핑 : @Entity, @Column, @Id, @GeneratedValue, @Enumerated 등의 애너테이션으로 애너테이션을 사용한 객체와 DB를 바로 연결시키는 방식들의 매핑 >연관 관계 매핑 : Entity 객체 사이의 매핑 : DB에서 테이블이 외래키로 매핑하는 식의 관계처럼 Entity 객체 간의 매핑을 의미함. >연관 관계 매핑 관점 포인트 -방향성 : 단반향, 양방향 -연관 관계의 주인 : 해당 연관 관계를 주도하는 객체가 누구인지, 즉 외래키를 갖고 있는 객체가 누구인지. -다중성 : 1:..

50.01_[Spring MVC] JPA 기반 데이터 액세스 계층_Spring Data JPA_22.11.02

>Spring Data + JPA -Spring Data + JDBC : Spring Data 패밀리~ : JPA, JDBC 기술만 다르고 데이터 액세스 접근 방식은 Spring Data이기 때문에 거의 유사하다. : 추상화 된 데이터 액세스 접근 방식으로 구성되어 있다. (아마 repository 얘기인 듯) >JpaRepository : Spring Data JPA에서는 Repository 인터페이스를 생성할 때, JpaRepository를 상속받아쓴다. (JDBC에서는 CrudRepository : JPA에 특화된 많은 기능이 포함되어 있음. : 내에 들어가는 인자는 똑같다. >JPQL : DB table이 아닌 entity 객체 기준으로 작성하는 JPA의 쿼리문 : SQL 쿼리문이 아님! : 하지..

49.02_[Spring MVC] JPA 기반 데이터 액세스 계층_엔티티 매핑(미완)_22.11.01

JPA를 이용한 DB 테이블과 상호 작용 1. DB 테이블과 엔티티 클래스 간 매핑 >@Entity : 클래스 레벨에 붙이는 애너테이션 : @Entity 애너테이션은 필수적으로 사용해야하는 애너테이션이다. : 해당 클래스는 테이블과 매핑되고 JPA 관리 대상 엔티티가 된다. -name(attribute) : name 속성을 부여할 수 있다. : name 속성을 부여하여 JPA 가 어떤 이름으로 관리할 지 지정한다. : 값을 지정하지 않으면 클래스명이 기본값이 된다. >@Table : 클래스 레벨에 붙이는 애너테이션 : @Table 애너테이션의 사용은 선택 사항이며, 주로 Table 명이 클래스 명과 달라야할 경우 name attribute로 변경하기 위해 사용하는 애너테이션이다. : @Table 및 na..

49.01_[Spring MVC] JPA 기반 데이터 액세스 계층_개요(미완)_22.11.01

JPA (Java Persistence API) : JPA는 Java에서 사용하는 ORM 기술의 표준 사양, 스펙이다. : 표준 사양, 스펙이란 Java의 인터페이스로 정의되어 있다는 의미로, 이를 구현한 구현체가 따로 있다는 것을 의미. : JPA 학습 = JPA 스펙 구현체를 학습 Hibernate ORM :JPA 스펙의 구현체 중 하나. JPA 위치 : JPA 는 데이터 액세스 계층 내부에 있음. : 데이터 액세스 계층이 상단이고 데이터베이스가 하단이라면, JPA - Hibernate ORM - JDBC API 순으로 존재한다. : 마지막 과정인 JDBC API는 Hibernate ORM의 내부에서 이용하는 부분이다. JPA 용어에서 P의 의미 -Persistence : JPA는 ORM 기술이므로 ..

48.02_[Spring MVC] Spring Data JDBC_Pagination API_22.10.31

>페이지네이션 : 저장된 데이터를 모두 요청하는 것이 아닌 단위별로 나누어 요청하는 것 : 페이지를 한 단위로 한다. >페이지네이션 요청 -?page=1&size=10 : 원하는 page 와 한 page에 몇 개의 데이터를 볼 것인지에 대한 정보 size 를 쿼리로 요청한다. : 해당 쿼리문은 모든 정보를 10개로 나눈 후 1번 page를 요청하는 것이다. >구현 과정 1. Controller 수정 -getMembers 핸들러 메서드 : List와 pageInfo를 응답 메세지로 하는 Dto를 반환한다. : 쿼리 파라미터를 매개변수로 삼는다. : Spring 에서 제공하는 pagination 관련 Api를 사용하여 쿼리 파라미터를 받아 pageInfo, service 로 정보를 넘긴다. 2. Entity..

48.01_[Spring MVC] Spring Data JDBC_정리_22.10.31

초기 설정 및 기본 사용법 1. 의존 라이브러리 추가 -Spring Boot Starter Data JDBC -H2 (In-memory DB) 2. H2 사용 설정 -application.yml 파일 설정 -동작 유무 확인; 애플리케이션 실행 로그 -동작 유무 확인; H2 DB 접속 3. 패키지 구조 설정 및 클래스 생성 -Controller : 서비스 연동, mapper 사용 -Dto : getter, setter, id 필드 필요 유무 파악, Validation -Entity : getter, setter, id 필드 필요 유무 파악 -Mapper : @Mapper 및 spring 설정, 추상 메서드 생성 -Service : controller 대응 메서드 설정 4. 클래스 수정 및 추가 -Entit..

47.03_[Spring MVC] Spring Data JDBC_서비스 및 레포지토리 구현_22.10.28

>Repository : DDD 용어 중 하나로, 데이터 액세스 계층에서 데이터베이스와 상호작용하는 역할을 하는 인터페이스를 의미한다. : 각각의 데이터 액세스 계층은 각각의 레포지토리를 사용한다. : 특정 데이터를 받는 데이터 액세스 계층이 데이터베이스에 CRUD 작업을 하기 위해 사용하는 인터페이스이며, CRUD 작업을 위해 CrudRespository를 상속받는다. : 해당 인터페이스 내부에는 기능을 수행하기 위한 쿼리문이 존재한다. 이 후 Repository 인터페이스를 선언했다면 Service 클래스를 수정하며 repository 인터페이스를 적용할 것이다. 그런데 이 때 (1)repository를 구현하지 않고 repository의 메서드를 사용하게 되고, (2)심지어 repository 에 ..

47.02_[Spring MVC] Spring Data JDBC_도메인 엔티티 클래스 정의_22.10.28

>클래스 간 관계 설정 : 데이터베이스 테이블 간 관계는 PK와 FK의 지정으로 서로의 관계를 설정할 수 있음. : 클래스는 객체 내 변수(필드)를 선언하며 해당 변수가 다른 클래스를 참조하는 변수로 선언함으로써 관계를 설정한다. : 주의할 것은 PK와 FK 로 관계를 연결할 때에는 1:N 관계에서 N의 입장이 1의 입장의 PK 를 FK로 갖지만, 객체의 참조 관계에서는 1:N관계에서 1의 입장이 N의 입장의 객체를 List, Set과 같은 자료구조(컬렉션)으로 참조하는 필드를 갖는다. : 하지만 이 또한 어그리거트 루트 간 관계에서는 반대된다. 즉, 어그리거트 루트 간 참조는 DB table과 같다. >Aggregate 객체 매핑하기 -규칙 1. 모든 엔티티 객체의 상태는 애그리거트 루트를 통해서만 변..

47.01_[Spring MVC] Spring Data JDBC_JDBC 기반 설계(DDD)_22.10.28

Spring Data JDBC 기반의 도메인 엔티티 및 테이블 설계 >데이터베이스의 테이블과 도메인 엔티티 클래스의 설계 : Spring Data JDBC를 사용하기 위해 가장 먼저 할 일 >DDD(Domain Driven Design) : 도메인 주도 설계 : 도메인이란, 각 분야 혹은 비즈니스적인 업무 영역같은 개념으로 알고 있으면 된다. 예를 들면, 나는 대학에서 ~~전공을 이수했으니 ~~도메인을 갖고 있는 사람이다. : 만들고자하는 애플리케이션이 사용되는 도메인에 대한 지식, 즉 도메인 지식이 뛰어나다면 퀄리티가 높은 애플리케이션을 만들 수 있다. : 도메인 주도 설계(DDD)는 애플리케이션의 전체적인 도메인과 내부 기능들 각각의 도메인도 고려하며 설계하는 구현 기법이다. (내부 기능을 구현하는 ..