09009

[Spring Boot] 회원 연습 (2) - 회원가입 DB 연동하기 본문

Back-End/Spring
[Spring Boot] 회원 연습 (2) - 회원가입 DB 연동하기
09009 2024. 1. 22.

build.gradle

jpa, oracle 관련 dependency 추가

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.oracle.database.jdbc:ojdbc11'
plugins {
	id 'java'
	id 'org.springframework.boot' version '3.2.2'
	id 'io.spring.dependency-management' version '1.1.4'
}

group = 'com.yyi'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '17'
}

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'

	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	runtimeOnly 'com.oracle.database.jdbc:ojdbc11'

	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
	useJUnitPlatform()
}

새로운 dependency를 추가하면 오른쪽 코끼리 모양 아이콘을 무조건 클릭해서 라이브러리를 꼭 업데이트 해주어야 한다 !

 

application.yml

ddl-auto는 update로 하기!!!

server:
  port: 8081
  servlet:
    encoding:
      charset: UTF-8
      force: true
      enabled: true

# database 연동 설정
spring:
  datasource:
    driver-class-name: oracle.jdbc.OracleDriver
    url: jdbc:oracle:thin:@localhost:1521:XE
    username: (아이디)
    password: (비번)
  thymeleaf:
    cache: false

  # spring data jpa 설정
  jpa:
    database-platform: org.hibernate.dialect.OracleDialect
    open-in-view: false
    show-sql: true
    hibernate:
      ddl-auto: update

 

 

 

 

service, repository, dto, entity 패키지 생성하기

 

 

MemberService 생성

package com.yyi.member.service;

import org.springframework.stereotype.Service;

@Service
public class MemberService {


}

 

 

MemberDTO 생성

package com.yyi.member.dto;

import lombok.*;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class MemberDTO {
    private Long id;
    private String memberEmail;
    private String memberPassword;
    private String memberName;
}

 

필드를 사용하기 위해서는 lombok 라이브러리에 있는 @Getter, @Setter 사용

lombok 라이브러리는 어노테이션만 작성해주면 각각 필드에 있는 getter, setter를 자동으로 만들어준다.

 

@NoArgsConstructor : 기본 생성자를 자동으로 만들어주는 기능

@AllArgsConstructor : 필드를 모두 매개변수로 하는 생성자를 만들어주는 기능

@ToString: 객체 출력 형식

 

 

MemberController 코드 수정

package com.yyi.member.controller;

import com.yyi.member.dto.MemberDTO;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class MemberController {
    // 회원가입 페이지 출력 요청
    @GetMapping("/member/save")
    public String saveForm() {
        return "save"; // templates 폴더에서 "save"라는 html 파일을 찾는다.
    }

    @PostMapping("/member/save")
    public String save(@ModelAttribute MemberDTO memberDTO) {
        System.out.println("MemberController.save");
        System.out.println("memberDTO = " + memberDTO);
        return "index";
    }


}

 

여기까지 작성된 코드를 바탕으로 다시 실행시켜 (회원가입)을 진행하면 아래와 같이 출력됨

 

생성자 주입 방식을 사용하여 컨트롤러와 서비스 연결하기 (컨트롤러가 서비스를 사용할 수 있는 권한을 부여받는다)

 

MemberController

package com.yyi.member.controller;

import com.yyi.member.dto.MemberDTO;
import com.yyi.member.service.MemberService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
@RequiredArgsConstructor
public class MemberController {
    // 생성자 주입
    private final MemberService memberService;

    // 회원가입 페이지 출력 요청
    @GetMapping("/member/save")
    public String saveForm() {
        return "save"; // templates 폴더에서 "save"라는 html 파일을 찾는다.
    }

    @PostMapping("/member/save")
    public String save(@ModelAttribute MemberDTO memberDTO) {
        System.out.println("MemberController.save");
        System.out.println("memberDTO = " + memberDTO);
        memberService.save(memberDTO);
        return "index";
    }


}

 

일단, MemberEntity 클래스 먼저 생성

Entity 클래스는 일종의 테이블 역할을 수행함

Spring Data JPA: 데이터베이스 테이블을 일종의 자바 객체처럼 활용할 수 있도록 하는 것이 가장 큰 특징이다.

 

MemberEntity

package com.yyi.member.entity;

import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;

@Entity
@Getter
@Setter
@Table(name = "member_table") // 테이블 이름 : member_table
public class MemberEntity {
    @Id // pk 지정
    @GeneratedValue(strategy = GenerationType.SEQUENCE) // oracle에서 auto_increment 지정
    private Long id;

    @Column(unique = true) // unique 제약조건을 추가
    private String memberEmail;

    @Column
    private String memberPassword;

    @Column
    private String memberName;
    
}

 

 

그 다음, MemberRepository 인터페이스 생성

package com.yyi.member.repository;

import com.yyi.member.entity.MemberEntity;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MemberRepository extends JpaRepository<MemberEntity, Long> {


}

 

MemberService

package com.yyi.member.service;

import com.yyi.member.dto.MemberDTO;
import com.yyi.member.repository.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class MemberService {
    private final MemberRepository memberRepository;

    public void save(MemberDTO memberDTO) {

    }
}

 

DB 테스트

 

위는 Entity 클래스에 의해 테이블이 만들어진 것이다.