본문 바로가기
개발

Spring Boot와 MySQL을 활용한 회원가입 시스템 구축하기

by new-fp 2024. 11. 14.
728x90

데이터베이스 연결 및 회원가입 구현하기: Spring Boot와 MySQL을 활용한 예제

안녕하세요! 오늘은 Spring Boot를 사용하여 데이터베이스와 연결하고, 회원가입 기능을 구현하는 방법에 대해 알아보겠습니다. 이 과정은 실제 개발 프로젝트에서도 유용하게 활용되는 기능으로, 안정적으로 사용자 정보를 관리할 수 있게 해줍니다. 지금 바로 시작해볼까요?

들어가며

프로그래밍에 있어 데이터 관리는 매우 중요한 요소입니다. 이를 위해 데이터베이스는 필수적이며, Java와 함께 사용되는 Spring Boot는 데이터베이스와의 연결을 손쉽게 만들어줍니다. 이번 포스트에서는 MySQL을 데이터베이스로 사용하여 기본적인 회원가입 시스템을 구축해보겠습니다.

1. 데이터베이스 연결

먼저, MySQL 데이터베이스에 연결하기 위한 준비를 해보겠습니다.

1-1) 디펜던시 추가

build.gradle 파일에 다음과 같은 디펜던시를 추가합니다.

// DB connection (MySQL)
implementation 'mysql:mysql-connector-java'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

1-2) DB 접속 정보 설정

application.properties 파일에 데이터베이스 연결 정보를 설정해주세요.

# JDBC driver
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# DB 접속 주소
spring.datasource.url=jdbc:mysql://localhost:3306/spring_security?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul
# DB 계정 정보
spring.datasource.username=root
spring.datasource.password=1234

1-3) 연결 테스트

데이터베이스 연결을 확인하기 위해 간단한 테스트 클래스를 작성합니다.

package com.app.springsecurity.config;

import org.junit.jupiter.api.Test;
import java.sql.Connection;
import java.sql.DriverManager;

public class DatabaseConfigTest {
    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void testConnection() {
        try (Connection con = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/spring_security?serverTimezone=Asia/Seoul",
                "root",
                "1234")) {
            System.out.println("DB Connection => " + con);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

2. 회원가입 구현

이제 실제 회원가입 기능을 구현해볼 차례입니다.

2-1) ENTITY 생성

회원 정보를 저장할 UserEntity 클래스를 작성합니다.

package com.app.springsecurity.user.repo;

import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Id;

@Data
@Entity(name="USER_INFO")
@NoArgsConstructor
public class UserEntity {
    @Id
    private String userId;
    private String userPw;
    private String userName;

    @Builder
    public UserEntity(String userId, String userPw, String userName) {
        this.userId = userId;
        this.userPw = userPw;
        this.userName = userName;
    }
}

2-2) DTO 생성

회원가입에서 사용할 DTO(Data Transfer Object) 클래스를 만들어봅니다.

package com.app.springsecurity.user.dto;

import com.app.springsecurity.user.repo.UserEntity;
import lombok.Data;

@Data
public class UserDTO {
    private String id;
    private String password;
    private String name;

    public UserEntity toEntity() {
        return UserEntity.builder()
                .userId(id)
                .userPw(password)
                .userName(name)
                .build();
    }
}

2-3) REPOSITORY 생성

Spring Data JPA를 사용하여 데이터베이스 작업을 수행할 저장소 인터페이스를 생성합니다.

package com.app.springsecurity.user.repo;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<UserEntity, String> {
}

2-4) SERVICE 생성

비즈니스 로직을 포함하는 서비스를 만들어 줍니다.

package com.app.springsecurity.user.service;

import com.app.springsecurity.user.dto.UserDTO;
import com.app.springsecurity.user.repo.UserRepository;
import lombok.AllArgsConstructor;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;

@Service
@AllArgsConstructor
public class UserService {
    private UserRepository userRepository;
    private PasswordEncoder passwordEncoder;

    public String saveUser(UserDTO userDTO) {
        userDTO.setPassword(passwordEncoder.encode(userDTO.getPassword()));
        userRepository.save(userDTO.toEntity());
        return userDTO.getId();
    }
}

2-5) CONTROLLER 생성

사용자의 요청을 처리할 컨트롤러를 작성합니다.

package com.app.springsecurity.user.controller;

import com.app.springsecurity.user.dto.UserDTO;
import com.app.springsecurity.user.service.UserService;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@AllArgsConstructor
public class UserController {
    private final UserService userService;

    @PostMapping("/user/save")
    public String saveUser(UserDTO userDTO) {
        return userService.saveUser(userDTO);
    }
}

3. 회원가입 화면 생성

Thymeleaf를 이용하여 사용자에게 데이터를 입력받을 수 있는 화면을 만듭니다.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>회원가입</title>
</head>
<body>
    <form method="post" th:action="@{/user/save}">
        아이디 : <input type="text" name="id">
        패스워드 : <input type="password" name="password">
        이름 : <input type="text" name="name">
        <button>가입하기</button>
    </form>
</body>
</html>

마무리하며

오늘은 Spring Boot와 MySQL을 활용하여 간단한 회원가입 기능을 구현하는 방법을 알아보았습니다. 데이터베이스와의 연동을 통해 사용자의 정보를 안전하게 저장하고 관리할 수 있습니다. 이 기본적인 구조를 바탕으로 추가적인 기능도 손쉽게 구현할 수 있으니, 여러분의 생각을 추가해보세요. 궁금한 점이 있으면 언제든지 댓글로 남겨주세요!

다음 포스트도 기대해 주세요!

728x90