# RequiredArgsConstuctor
의존성 주입을하는 방식에는 필드 주입, 수정자 주입, 생성자 주입이 있다.
그 중, 생성자 주입을 가장 추천한다.
1. 의존성을 명시적으로 선언 : 클래스의 생성자를 통해 의존성을 주입하기 때문에 가독성이 향상되고,
클래스가 어떤 종속성을 필요로 하는지 명확하게 알 수 있다.
2. 순환 참조 방지 : A -> B, B -> A를 참조하는 순환참조를 에러로 표시해준다.
# Project Structure
src/ directory :
main/java – 자바 파일을 작성하는 공간이다.
Controller, Service, Repository, Entity, DTO등이 들어간다.
main/resources – 자바를 제외한 HTML, CSS, JavaScript, Application/yml 파일을 작성하는 곳이다.
Templates – 템플릿 파일을 저장한다. 이때 템플릿 파일은 HTML 파일 형태로 자바 객체와 연동되는 파일이다.
Static – 스타일시트(css), 자바스크립트(js) 그리고 이미지 파일(jpg, png)등을 저장하는 공간이다.
application.yml / properties 파일 – 스프링부트의 설정 정보를 관리하는 파일
• .properties에서 .yml로 변경한 이유 : yml이 properties보다 가독성이 훨씬 낫다. .yml 사용하는 것을 추천해서 변경
• Refractor -> rename -> properties를 yml로 변경!
# Entity
Entity는 데이터베이스에쓰일 필드와 여러 엔티티간 연관관계를 정의하는 역할을 합니다.
쉽게 이해하려면 데이터베이스 테이블에 대응하는 하나의 클래스라고 생각하시면 됩니다.
Database란?
구조화된 정보 또는 데이터의 조직화된 모음으로서 일반적으로 컴퓨터 시스템에 저장되는 것.
13.
# Entity
Entity의 다양한Annotation
1. @Entity : Entity 어노테이션은 JPA를 사용해 테이블과 매핑할 클래스에 붙여주는 어노테이션이다.
2. @Id : Primary Key(PK)로 지정할 필드 위에 붙여주는 어노테이션이다.
3. @GeneratedValue(strategy = GenerationType.IDENTITY)
- 데이터를 저장할 때 해당 속성에 값을 따로 세팅하지 않아도 1씩 자동으로 증가하여 저장된다.
# ORM
ORM(Object-Relational Mapping)이란?
•객체와 관계형 데이터베이스 간의 매핑을 자동으로 처리해주는 기술입니다.
• ORM에서는 Entity들을 객체의 형태로 다룰 수 있게 해준다.
• Spring에서는 보통 JPA(Java Persisten Api)를 이용한다.
16.
# JPA
JPA는 JavaPersistence API의 약자로 ORM 기술에 대한 API 표준 명세이다.
쉽게 설명하면 : 자바에서 ORM을 사용하기 위한 표준 인터페이스
Spring Data JPA는 JPA를 쓰기 편하게 만들어 놓은 모듈이다.
17.
# Spring DataJPA
Spring Data JPA는 JPA를 Repository 기반으로 간편하고 효율적으로 사용할 수 있는 모듈이다.
사용자가 Repository에 정해진 규칙대로 메소드를 입력하면, Spring이 알아서 해당 메소드 이름에 적합한 쿼리를
날리는 구현체를 만들어 Bean으로 등록해준다.
Hibernate는 JPA(interface)의 구현체로서 가장 점유율이 높다.
Method 호출만으로도
Query가 실행된다.
# Repository
Repository는 DB통신이 필요할 때 사용합니다.
Repository는 특이하게 함수명으로 기능을 제작합니다.
• 일반 객체 조회는 findBy로 시작 ex)findById(Long Id)
• By 뒤에는 기준이 되는 변수명을 적어줍니다.
20.
# Repository
개별 interface를만들고 JpaRepository라는 interface를 상속 받는다.
JpaRepository의 제네릭 타입으로는 <Entity, PK의 타입>을 지정해주면 Spring Data JPA는 자동으로 스프링의 빈(bean)으로 등록됩니다.
• [ 스프링이 내부적으로 인터페이스 타입에 맞는 객체를 생성해서 빈으로 등록 ]
# Database
이후 설정을Embedded에서 Server로 변경해서 실행시킨다.
이때 Embedded가 아닌 Server로 실행시키는 이유!
데이터베이스 파일을 생성한 후 TCP 소켓을 통해 접속해야 어플리케이션과 콘솔을
동시에 접근했을 때 오류가 발생하지 않기 때문이다.
# yml
ddl-auto :
•create : 실행될 때마다 기존 스키마를 삭제하고
새로운 스키마 생성
• create-drop : Create와 동일한데 종료 시에 스키마를
다시 삭제하는 특징이 있음
• update : 기존 스키마와 현재 Entity를 비교하고
변경점이 있으면 스키마에 반영함
• validate : 기존 스키마와 Entity를 비교하고 일치
여부를 확인한다. 변경사항이 있으면 반영하지 않고
경고를 발생시키거나 예외 던짐
• none : 자동으로 스키마를 생성하거나 업데이트 하지
않는다. 개발자가 수동으로 관리해야 함
테스트 할 때는 Create or update! 서버를 배포 한 뒤에는 validate or none!
# Service
Service에는 비즈니스로직을 주로 다룬다.
비즈니스 로직이란?
간단한 주문관리 시스템을 예시로 들었을 때
1. 주문처리
2. 재고 조회
3. 재고 감소
4. 주문 발송
35.
# Service
Service의 Annotation들
1.@Service
루트 컨테이너에 Bean 객체로 생성해준다.
* 루트 컨테이너에 Bean 객체로 등록을 해야 SpringBoot가 제공하는
기능들을 사용할 수 있다.
2. @Transactional
메소드에 Transactional 어노테이션을 붙이면 해당 범위 내 메소드가
Transcation이 되도록 보장해준다.
36.
# Service
Transaction이란?
간단한 예시를들어보겠습니다.
중고나라에서 루이비통 지갑을 구매하기 위해 판매자에게 입금을 했다.
그런데 루이비통 지갑이 아닌 벽돌이 도착했다.
-> 시간을 돌리고 싶다.
Transaction은 시간 되돌리는 것을 가능하게 한다!
모든 작업들이 성공적으로 완료 되어야 DB에 적용을 하고, 중간에 에러가 발생하면 작업을
원상복구 할 수 있다.
37.
# Service VSController
Service를 없애고 Controller에서 바로 Repository에서 접근해도 되지 않나..?
38.
# Service
Service를 Controller와따로 사용하는 이유!
Controller에서 바로 Repo로 연결해서 사용할 수 있는데 그렇게 되면 중복 코드가 발생한다.
코드 중복이 발생하며, 유지 보수가 어려워지며, 재사용성이 저하된다.
# Controller
사용자가 웹브라우저에서 URI로 요청을 보내면, 그 요청을 Controller가 받는다.
사용자의 Request를 전달 받아 요청의 처리를 담당하는 Service를 호출한다.
41.
# Controller
@Controller Vs@RestController
@Controller는 주로 View(화면)을 반환하기 위해 사용합니다.
RestController는 @Controller + @ResponseBody가 합쳐진 형태로 JSON 형태의 객체 데이터를 반환합니다.
Json이란? JavaScript Object Notation 이며, 데이터를 저장하거나 전송할 때 많이 사용되는 DATA 교환 형식
• 특정 언어에 종속되지 않으며, 대부분의 프로그래밍 언어에서 다룰 수 있다.
여러분들은 FRONT/BACK을 나눠 개발 해야기에 JSON으로 데이터를 전달하는 방법을 알아야 합니다.
42.
# Controller
HTTP Method의종류
• PostMapping
• Body를 통해 서버로 요청 데이터 전송하는 Method (Create)
• GetMapping
• 리소스 조회 Method (Read)
• PutMapping
• 리소스를 대체 하는 Method (Update)
• DeleteMapping
• 리소스 제거하는 Method (Delete)
# PostMan
여러분은 Json을다룰 줄 알아야 하기 때문에 API 테스트 하는 PostMan을 사용할 줄 알아야 한다!!
PostMan은 HTTP 테스트가 편해서 웹 개발자들 사이에서는 많이 사용되고 있는 소프트웨어
https://www.postman.com/
우선 PostMan을 설치해주세요!