본문 바로가기

스터디/Spring Boot

[Spring Boot] 스프링 스터디 2일차

- 웹 어플리케이션 5계층에 대한 이해

Controller: 사용자로부터 Get요청을 받음.

Service: transaction 처리, 비즈니스 로직 처리

DAO: 서버에 접근

Domain: 데이터베이스에서 객체 형태로 Spring에서 다루기 위한 데이터 타입 클래스.

DTO: 보안 및 불필요한 내용 제외하고 필요한 내용만 다루는 곳.

 

Spring Boot의 자바 상에서 Annotation 사용(Domain - 불변의 법칙: 생성자로 한번 Domain이 생성되면 이후에 바뀔 일이 없음)

: 기본생성자 private 선언, setter 사용 X, getter는 꼭 필요할 때만 필드 단위로 사용

 

데이터베이스상의 필드: user_name, Spring에서 사용하는 필드: name

@Column(name = "user_name")
private String name;

 

DDL문 처럼 테이블 생성 한번 하고 더이상 사용하지 않는 코드

@Column(nullable = false, length = 30)

 

USER와 ADMIN을 구별하여 테이블 생성

public enum RoleType {
    USER, ADMIN;
}

@Enumerated(EnumType.STRING)
private RoleType roleType;

 

매개변수가 없는 기본생성자를 protected로 선언(상속 방지 - 보안)

@NoArgsConstructor(access = AccessLevel.PROTECTED)

 

//@AllArgsConstructor -> 웬만하면 사용하지 말고 직접 타이핑하기
public User(String name, String email, String password, String address, RoleType roleType) {
        this.name = name;
        this.email = email;
        this.password = password;
        this.address = address;
        this.roleType = roleType;
    }

 

 

 

Controller에서는 논리적인 로직 말고 경로만 잡아주기!!!

 

1. HTML전달 - Server Side Rendering: @Controller

2. REST API 전달 - Client Side Rendering: @RestController(@Controller + @ResponseBody)

 

DTO의 Req, Res는 @Getter가 필요하다.

Why? 자바 코드에 클래스 형식으로 사용되지만, json으로 파싱되어 response를 보내고 사용자로부터 byte 스트림을 역직렬화하여 request를 받는다. 이 과정에서 Spring Boot가 관여함.