09009
[Spring Boot] 회원 연습 (2) - 회원가입 DB 연동하기 본문
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 클래스에 의해 테이블이 만들어진 것이다.
'Back-End > Spring' 카테고리의 다른 글
[Spring Boot] 회원 연습 (4) - 로그인 (0) | 2024.01.22 |
---|---|
[Spring Boot] 회원 연습 (3) - 회원가입 완료하기 (0) | 2024.01.22 |
[Spring Boot] 회원 연습 (1) - 회원가입 페이지 요청 (0) | 2024.01.22 |
[Spring Boot] 회원 연습 - 기본 주소 요청 (0) | 2024.01.22 |
[Spring Boot] 인텔리제이 부트 초기 환경설정 (0) | 2024.01.21 |