본문 바로가기
  • 초보개발일지
KDT/servlet(jsp)

[JSP]회원가입 및 조회 기능이 있는 간단한 홈페이지 제작 1편 (회원가입 기능 편)

by wooksWork 2026. 1. 26.

음.. html, css, java, servlet, jsp, oracle까지 연동되는 홈페이지 제작 함.

 

일단 기능은

- 회원가입

-로그인 페이지(로그인 구현 x)

-회원정보 조회(id, pw, nick)

 

목차

1. 테이블 설계

2. 회원가입 페이지

 

- 로그인 페이지랑 계정 조회는 다음 글에서..

 


1. 테이블 설계

DROP SEQUENCE SEQ_MEMBER;
CREATE SEQUENCE SEQ_MEMBER NOCACHE NOCYCLE;

DROP TABLE MEMBER CASCADE CONSTRAINTS;
CREATE TABLE MEMBER(
    NO          NUMBER          DEFAULT SEQ_MEMBER.NEXTVAL CONSTRAINT MEMBER_PK PRIMARY KEY
    ,ID         VARCHAR2(100)   CONSTRAINT MEMBER_ID_NN NOT NULL CONSTRAINT MEMBER_ID_UQ UNIQUE
    ,PW         VARCHAR2(100)   CONSTRAINT MEMBER_PW_NN NOT NULL
    ,NICK       VARCHAR2(100)   CONSTRAINT MEMBER_NICK_NN NOT NULL CONSTRAINT MEMBER_NICK_UQ UNIQUE
    ,CREATED_AT TIMESTAMP       DEFAULT SYSDATE
    ,UPDATED_AT TIMESTAMP       DEFAULT SYSDATE
    ,QUIT_YN    CHAR(1)         DEFAULT 'N' CONSTRAINT MEMBER_QUIT_YN_CK CHECK( QUIT_YN IN ('Y','N') )
);

SELECT * FROM MEMBER;

 

계정에 따라 no 값을 PK로 주고

id, nick는 중복될 수 없게 설정

 

no값을 위한 시퀀스 생성

 

계정생성일시 -> 시스템 시간으로 디폴트

수정 일시 -> 초기값 시스템 시간 -> 수정시마다 업데이트(구현 안됨)

계정탈퇴 -> 논리 삭제(구현 안됨)

 


2. 회원가입 페이지

 

userId / userPw / userNick를 입력 후 회원가입을 진행하면 404 - 찾을 수 없음으로 나오는걸 볼 수 있는데

아직 로그인 페이지를 만들지 않은 상태라 정상인 접근이고

주소창에 app/member/login 경로로 잘 접근한 것이 보임.

-> login페이지 만들면 해결됨

 

로그인 페이지 접근 정상 작동하고 sql developer에서 테이블 확인했을때 입력한 데이터가 잘 들어가면 성공!

회원가입 기능을 위한 폴더구성

lib 에 ojdbc.jar파일 추가 잘 해주고

기본적인 JDBCTemplate, Dao, Vo class 생성 해줘야함

jsp페이지를 위한 views 폴더 하위에 join.jsp 생성 -> 실제 보여지는 회원가입 페이지 

error를 위한 페이지는 아직 생성 안함. (추가 예정-> WEB-INF/common/errMsg.jsp)

 

아래는 각 파일 별 코드

- JDBCTemplate

- MemberDao

- MemberJoinController

- MemberService

- MemberVo

- join.jsp


JDBCTemplate

package com.kh.app.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBCTemplate {
	
	public static Connection getConn() throws Exception {
	      String driver = "oracle.jdbc.driver.OracleDriver";
	      String url = "jdbc:oracle:thin:@//127.0.0.1:1521/xe";
	      String user = "C##KH";
	      String password = "1234";
	      
	      Class.forName(driver);
	      Connection conn = DriverManager.getConnection(url , user , password);
	      
	      conn.setAutoCommit(false);
	      
	      return conn;
	   }
	
	
	public static void commit(Connection conn) {
		try {
			if(conn != null && !conn.isClosed()) {
				conn.commit();
			}//if
		}catch(Exception e) {
			e.printStackTrace();
		}//try
		
	}//method
	
	
	public static void rollback(Connection conn) {
		try {
			if(conn != null && !conn.isClosed()) {
				conn.rollback();
			}//if
		}catch(Exception e) {
			e.printStackTrace();
		}//try
		
	}//method
	
	
	
	public static void close(Connection conn) {
		try {
			if(conn != null && !conn.isClosed()){
				conn.close();
			}//if
		} catch (Exception e) {
			e.printStackTrace();
		}//try
		
	}//method
	
	
	public static void close(Statement stmt) {
		try {
			if(stmt != null && !stmt.isClosed()){
				stmt.close();
			}//if
		} catch (Exception e) {
			e.printStackTrace();
		}//try
		
	}//method
	
	
	public static void close(ResultSet rs) {
		try {
			if(rs != null && !rs.isClosed()){
				rs.close();
			}//if
		} catch (Exception e) {
			e.printStackTrace();
		}//try
		
	}//method
	
	
}//class

MemberDao

package com.kh.app.member;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import com.kh.app.db.JDBCTemplate;

public class MemberDao {

	public int join(Connection conn, MemberVo vo) throws Exception {
		
		String sql = """
				INSERT INTO MEMBER(
					NO
					, ID
					, PW
					, NICK
				) VALUES(
					SEQ_MEMBER.NEXTVAL
					, ?
					, ?
					, ?
				)
				""";
		
		PreparedStatement pstmt = conn.prepareStatement(sql);
		pstmt.setString(1, vo.getId());
		pstmt.setString(2, vo.getPw());
		pstmt.setString(3, vo.getNick());
		
		int result = pstmt.executeUpdate();
		
		JDBCTemplate.close(pstmt);
		return result;
		
	}//method

}//class

MemberJoinController

package com.kh.app.member;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/member/join")
public class MemberJoinController extends HttpServlet{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.getRequestDispatcher("/WEB-INF/views/member/join.jsp").forward(req, resp);

	}//method
	
	
//	view
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		try {
			String id = req.getParameter("userId");
			String pw = req.getParameter("userPw");
			String nick = req.getParameter("userNick");
			
			MemberVo vo = new MemberVo();
			vo.setId(id);
			vo.setPw(pw);
			vo.setNick(nick);
			
			int result = new MemberService().join(vo);
			
			if(result == 1) {
				resp.sendRedirect("/app/member/login");
			}else {
				throw new Exception("[ERROR-M001] 회원가입 에러 ");
			}//if
			
		}catch(Exception e) {
			e.printStackTrace();
			req.setAttribute("errMsg", "회원 가입 중 에러");
			req.getRequestDispatcher("/WEB-INF/views/common/error.jsp").forward(req, resp);
		}
		
	}//method

}//class

MemberService

package com.kh.app.member;

import java.sql.Connection;

import com.kh.app.db.JDBCTemplate;

public class MemberService {
	
//	join
	public int join(MemberVo vo) throws Exception {
		Connection conn = JDBCTemplate.getConn();
		
		int result = new MemberDao().join(conn, vo);
		
		if(result == 1) {
			JDBCTemplate.commit(conn);
		}else {
			JDBCTemplate.rollback(conn);
		}
		
		JDBCTemplate.close(conn);
		
		return result;
	}//method



}//class

MemberVo

package com.kh.app.member;

public class MemberVo {
	private String no; 
	private String id; 
	private String pw; 
	private String nick; 
	private String createdAt; 
	private String updatedAt; 
	private String delYn;
	@Override
	public String toString() {
		return "MemberVo [no=" + no + ", id=" + id + ", pw=" + pw + ", nick=" + nick + ", createdAt=" + createdAt
				+ ", updatedAt=" + updatedAt + ", delYn=" + delYn + "]";
	}
	public String getNo() {
		return no;
	}
	public void setNo(String no) {
		this.no = no;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPw() {
		return pw;
	}
	public void setPw(String pw) {
		this.pw = pw;
	}
	public String getNick() {
		return nick;
	}
	public void setNick(String nick) {
		this.nick = nick;
	}
	public String getCreatedAt() {
		return createdAt;
	}
	public void setCreatedAt(String createdAt) {
		this.createdAt = createdAt;
	}
	public String getUpdatedAt() {
		return updatedAt;
	}
	public void setUpdatedAt(String updatedAt) {
		this.updatedAt = updatedAt;
	}
	public String getDelYn() {
		return delYn;
	}
	public void setDelYn(String delYn) {
		this.delYn = delYn;
	}
	public MemberVo(String no, String id, String pw, String nick, String createdAt, String updatedAt, String delYn) {
		super();
		this.no = no;
		this.id = id;
		this.pw = pw;
		this.nick = nick;
		this.createdAt = createdAt;
		this.updatedAt = updatedAt;
		this.delYn = delYn;
	}
	public MemberVo() {
		super();
		// TODO Auto-generated constructor stub
	} 
	
	
	
	
}//class

join.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h1>회원가입</h1>

    <form action="/app/member/join" method="post">

        <input type="text" name="userId" placeholder="아이디">
        <br>
        <input type="password" name="userPw" placeholder="패스워드">
        <br>
        <input type="text" name="userNick" placeholder="닉네임">
        <br>
        <input type="submit" value="회원가입">
    </form>

</body>
</html>