본문 바로가기
Framekwork/photogram

[스프링 부트 포토그램] 18강 인증 회원가입 - User 모델 만들기

by 아이엠제니 2024. 9. 2.

 

IDE: IntetlliJ Ultimate
Spring Boot: 3.3.0
JDK: 17

 


 

 

 

01. DTO 생성


 

💾 auth > signup.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>page</title>
    <link rel="stylesheet" th:href="@{/css/style.css}">
    <link rel="stylesheet" th:href="@{https://pro.fontawesome.com/releases/v5.10.0/css/all.css}"
          integrity="sha384-AYmEC3Yw5cVb3ZcuHtOA93w35dYTsvhLPVnYs9eStHfGJvOvKxVfELGroGkvsg+p" crossorigin="anonymous" />
</head>

<body>
<div class="container">
    <main class="loginMain">
        <!--회원가입섹션-->
        <section class="login">
            <article class="login__form__container">

                <!--회원가입 폼-->
                <div class="login__form">
                    <!--로고-->
                    <h1><img th:src="@{/images/logo.jpg}" alt=""></h1>
                    <!--로고end-->

                    <!--회원가입 인풋-->
                    <form class="login__input" th:action="@{/auth/signup}" method="post">
                        <input type="text" name="username" placeholder="유저네임" required="required"/>
                        <input type="password" name="password" placeholder="패스워드" required="required"/>
                        <input type="email" name="email" placeholder="이메일" required="required"/>
                        <input type="text" name="name" placeholder="이름" required="required"/>
                        <button>가입</button>
                    </form>
                    <!--회원가입 인풋end-->
                </div>
                <!--회원가입 폼end-->

                <!--계정이 있으신가요?-->
                <div class="login__register">
                    <span>계정이 있으신가요?</span>
                    <a th:href="@{/auth/signin}">로그인</a>
                </div>
                <!--계정이 있으신가요?end-->

            </article>
        </section>
    </main>
</div>
</body>
  • 회원가입 인풋에 있는 name에 맞게, dto를 생성함

 

 

💾 web > dto > auth > SignupReqDto.java

package org.example.photogram_re.web;

import lombok.extern.slf4j.Slf4j;
import org.example.photogram_re.web.dto.auth.SignupReqDto;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

@Slf4j
@Controller // 1. IoC 2. 파일을 리턴하는 controller
public class AuthController {

    @GetMapping("/auth/signin")
    public String signinForm() {
        return "auth/signin";
    }

    @GetMapping("/auth/signup")
    public String signupForm() {
        return "auth/signup";
    }

    // 회원가입버튼 -> /auth/signup -> /auth/signin
    @PostMapping("/auth/signup")
    public String signup(SignupReqDto signupReqDto) { // key=value (x-www-form-urlencoded)
        log.info("signup request: {}", signupReqDto.toString());
        return "auth/signin";
    }

}
  • `signup` 메서드의 파라미터에 `SignupReqDto signupReqDto) 추가
    • `@Slf4j` 애노테이션 추가
    • `log.info("signup request: {}", signupReqDto.toString());` 로, Log 찍어봄

  • 회원가입 화면에서 입력한 내용 Log로 확인할 수 있음

 

 

 

02. Entity


💾 domain > user > User.java

package org.example.photogram_re.domain.user;

//  JPA-Java persistence API (자바로 데이터를 영구적으로 저장(DB)할 수 있는 API를 제공

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@AllArgsConstructor
@NoArgsConstructor
@Entity
@Data
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 번호 증가 전략이 DB를 따라감
    private Long id;

    private String username;
    private String password;

    private String name;
    private String website;
    private String bio; // 자기 소개
    private String email;
    private String phone;
    private String gender;

    private String profileImageUrl; // 사진
    private String role; // 권한

    private LocalDateTime createdDate;

    public void createDate() {
        this.createdDate = LocalDateTime.now();
    }

}
  • `@AllArgsConstructor`
    • 클래스의 모든 필드를 매개변수로 가지는 생성자를 자동으로 생성해 주는 역할을 함
    • 해당 클래스의 모든 필드를 초기화할 수 있는 생성자가 자동으로 만들어짐
  • `@NoArgsConstructor`
    • 매개변수가 없는 기본 생성자를 자동으로 생성해줌
    • 클래스에 명시적으로 생성자를 정의하지 않아도 자동으로 기본 생성자를 만들어 줌
  • `@Entity`
    • 클래스가 데이터베이스 테이블과 매핑되는 엔티티 클래스임
    • 데이터베이스 테이블에 해당하는 객체로, 이 객체를 통해 데이터베이스에 접근하고 조작할 수 있음
  • `@GeneratedValue(Strategy = GenerationType.IDENTITY)
    • 데이터베이스에서 기본 키의 값을 자동으로 생성하고 관리하도록 설정할 때 사용함
    • `@Id` 애노테이션과 함께 사용되며, 특정 엔티티의 기본 키가 데이터베이스에 의해 자동으로 생성되도록 설정함

 

 

DB에 가서 확인을 해보면, 테이블이 잘 생성된 것을 볼 수 있다.

 

 

 

이지업클래스 [메타코딩] 스프링부트 SNS프로젝트 - 포토그램 만들기 강의 실습

참고
OpenAi. (2024) ChatGPT (version 3.5)[Large Language model]. https://chat.openai.com

 

 

 

 

 

300x250