Java JDBC와 DAO 패턴으로 회원 로그인·가입 기능 구현하기

먼저 회원 정보를 저장할 테이블을 만듭니다.

CREATE TABLE member (
    user_id  VARCHAR(20) PRIMARY KEY,
    user_pw  VARCHAR(255) NOT NULL
);

JavaBean는 데이터를 담는 객체 역할을 합니다. 실제 데이터베이스 접근은 DAO(Data Access Object)가 담당하며, DAO는 데이터베이스와 비즈니스 로직 사이에서 CRUD를 수행합니다. 여기서는 데이터 접근 로직을 DAO로 분리하고, 연결 설정은 별도 유틸리티 클래스로 분리합니다.

회원 정보를 는 JavaBean 예시입니다.

package model;

public class UserAccount {
    private String userId;
    private String userPw;

    public UserAccount() {}

    public UserAccount(String userId, String userPw) {
        this.userId = userId;
        this.userPw = userPw;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUserPw() {
        return userPw;
    }

    public void setUserPw(String userPw) {
        this.userPw = userPw;
    }
}

데이터베이스 연결을 당하는 유틸리티 클래스입니다.

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DbConnectionProvider {
    private static final String URL = "jdbc:mysql://localhost:3306/test";
    private static final String USER = "root";
    private static final String PASSWORD = "123456";

    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            throw new RuntimeException("JDBC 드라이버 로딩 실패", e);
        }
    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }
}

회원 인증과 가입을 처리하는 DAO입니다.

package dao;

import java.sql.*;
import model.UserAccount;
import util.DbConnectionProvider;

public class MemberDao {

    public boolean authenticate(UserAccount account) {
        String sql = "SELECT 1 FROM member WHERE user_id = ? AND user_pw = ?";
        try (Connection conn = DbConnectionProvider.getConnection();
             PreparedStatement pstmt = conn.prepareStatement(sql)) {

            pstmt.setString(1, account.getUserId());
            pstmt.setString(2, account.getUserPw());

            try (ResultSet rs = pstmt.executeQuery()) {
                return rs.next();
            }
        } catch (SQLException e) {
            throw new RuntimeException("로그인 처리 중 오류", e);
        }
    }

    public void register(UserAccount account) {
        String sql = "INSERT INTO member(user_id, user_pw) VALUES (?, ?)";
        try (Connection conn = DbConnectionProvider.getConnection();
             PreparedStatement pstmt = conn.prepareStatement(sql)) {

            pstmt.setString(1, account.getUserId());
            pstmt.setString(2, account.getUserPw());
            pstmt.executeUpdate();

        } catch (SQLException e) {
            throw new RuntimeException("회원 가입 중 오류", e);
        }
    }
}

JSP나 서블릿에서는 다음과 같이 DAO를 호출합니다.

UserAccount account = new UserAccount(
        request.getParameter("id"),
        request.getParameter("pw")
);

MemberDao dao = new MemberDao();

if (dao.authenticate(account)) {
    // 로그인 성공
} else {
    // 로그인 실패
}

태그: java JDBC MySQL DAO PreparedStatement

9월 8일 03:18에 게시됨