07. DTO,Controller,H2

박선규's avatar
Jan 26, 2024
07. DTO,Controller,H2
📌
HTTP 상태 코드란? 특정 HTTP 요청이 성공적으로 완료되었는지 알려주는 것! (1 ~ 500 까지 존재 한다!) (서버 입장에서 얘기하는 것이다.) 간단히 큰 값마다의 예시
100 → 기다려 200 → 굳 300 → 딴 거 줄게 400 → 너(클라이언트) 잘못했어 500 → 내가(서버) 잘못했어
 

DTO(Data Transfer Object, 데이터 전송 객체)

📌
notion image
  • 프로세스 간의 데이터를 전달하는 객체를 의미한다.
  • 클라이언트와 서버 간의 데이터를 전달하기 위한 컨테이너이다. → 클라이언트가 서버에 요청 / 서버가 클라이언트에 응답 사용하는 이유는 코드 재사용성을 통해 분리된 레이어간의 데이터 전송 쉽게 가능하며 캡슐화를 통해 보안을 지킬 수 있습니다.
코드 재사용성: 같은 형태의 데이터를 여러 곳에서 전송해야 할 경우, DTO를 재사용함으로써 코드의 중복을 줄일 수 있습니다. 이는 유지보수를 쉽게 만들어줍니다. 레이어 간 데이터 전송: 시스템이 여러 레이어로 구성되어 있을 때, DTO는 이 레이어들 사이에서 데이터를 안전하고 일관되게 전달하는 역할을 합니다. 이로써 각 레이어는 자신의 역할에만 집중할 수 있게 되며, 시스템의 구조가 깔끔해집니다. 캡슐화와 보안: DTO는 필요한 데이터만을 담고 있으며, 이 데이터에 대한 접근을 제어할 수 있습니다. 이를 통해 데이터의 무결성을 보장하고, 불필요한 데이터의 노출을 방지하여 보안을 강화할 수 있습니다.
dto 만들기 및 사용

dto

package shop.mtcoding.blog.user; import lombok.Data; public class UserRequest { /** * 요청 DTO = Data Transfer Object */ @Data //getter, setter,tostring 다들고 있는 어노테이션 public static class JoinDto { //user가 서버한테 요청하는 가입 데이터 private String username; private String password; private String email; } @Data //getter, setter,tostirng 다들고 있는 어노테이션 public static class LoginDto { //user가 서버한테 요청 하는 로그인 데이터 private String username; private String password; } }

dto 사용

package shop.mtcoding.blog.user; import jdk.swing.interop.SwingInterOpUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @Controller public class UserController { @PostMapping("/join") public String join(UserRequest.JoinDto requestDTO){ System.out.println(requestDTO); return "redirect:/loginForm"; } @GetMapping("/joinForm") public String joinForm() { return "user/joinForm"; } @GetMapping("/loginForm") public String loginForm() { return "user/loginForm"; } @GetMapping("/user/updateForm") public String updateForm() { return "user/updateForm"; } @GetMapping("/logout") public String logout() { return "redirect:/"; } }
 
 

Controller의 역할

  • 요청을 받고 응답하는 역할을 한다.
  • 유효성 검사를 한다.
📌
컨트롤러를 프레젠테이션 레이어라고 하는데
주로 사용자의 요청을 URL OR URI로 받고 데이터를 DTO로 받고,
servic rayer에 위임한다. Controller의 역할의 응답과 요청 데이터, 처리 결과를 어떻게 하는지?! 1. 요청 → URL (Locator), URI (Identifier) 2. 응답 → HTML, JSON 3. 데이터 → DTO
4. 처리 결과 → View를 통해 반환
 

H2 (database)

  • 자바에서 사용하는 관계형 데이터 베이스 관리 시스템(RDBMS)이다.
  • 인 메모리 DB 이며 스프링 실행 중 에만 가능하다.
    • Ram에 저장되어 휘발성이며 종료 시 사라진다.
  • 설치할 필요가 없는 DBMS다.
📌
H2 DB를 개발단계(dev)에선 사용한다. 장점
  1. 자바 애플리케이션 임베드가 가능하다. (임베드= 장착)
  1. 방언(db dialect) 설정이 가능 함
    1. H2를 실행 할때 방언(언어) 설정 가능하다
    2. 방언 설정
      notion image
H2(JDBC URL 문법)
notion image
 

USER 데이터 베이스 만드는 코드

package shop.mtcoding.blog.user; import jakarta.persistence.*; import lombok.Data; import java.time.LocalDateTime; // user로 테이블명을 만들면, 키워드여서 안만들어질 수 있다. _tb 컨벤션 지키자. @Table(name="user_tb") @Data @Entity public class User { @Id // PK 설정 @GeneratedValue(strategy = GenerationType.IDENTITY) // auto_increment 전략 private int id; private String username; private String password; private String email; // 카멜 표기법으로 만들면 DB는 created_at 으로 만들어진다. (언더스코어 기법) private LocalDateTime createdAt; }
만들고 실행 했는데 테이블 생성 쿼리가 안보임 
이때 YML로 H2 설정한다. 밑 내용
만들고 실행 했는데 테이블 생성 쿼리가 안보임 이때 YML로 H2 설정한다. 밑 내용

H2 연결하는법

→ 방언 설정 : MODE=MySQL
→ http://localhost:8080/h2-console 접속 시 접근 가능
매번 가입 할때 마다 귀찮으니 input태그에 value에 미리 값 적어놓기
server: servlet: encoding: charset: utf-8 force: true port: 8080 spring: datasource: driver-class-name: org.h2.Driver url: jdbc:h2:mem:test;MODE=MySQL # MODE=MySQL 은 방언(DB Dialect) 설정 username: sa password: h2: console: enabled: true jpa: hibernate: ddl-auto: create # ddl - CREATE DROP ALTER TRUNCATE COMMENT show-sql: true properties: hibernate: format_sql: true # sql 을 깔끔하게 보이게 하
db구조 보는법
 
ddl-auto=create, drop, alter(테이블 변경할 때 사용) 기
 
실행시 자동 테이블 생성
notion image
create로 설정해야지 서버 실행할때마다 데이터 들어감
 
 
jpa 설정
notion image
 
notion image
 
 
 
 
 
 
 
 
Share article
RSSPowered by inblog