서블릿의 비지니스 로직 처리 방법 & 서블릿의 데이터베이스 연동하기
서블릿의 비지니스 로직 처리 방법
서블릿 비지니스 처리 작업이란 서블릿이 클라이언트로부터 요청을 받으면 그 요청에 대해 작업을 수행하는 것을 의미합니다. 웹 프로그램에서 대부분의 비지니스 처리 작업은 데이터베이스 연동 관련 작업이지만 그 외에 다른 서버와 연동해서 데이터를 얻는 작업도 수행합니다. 이 기능은 서블릿의 핵심 기능이라 할 수 있을 만큼 중요합니다.
서블릿의 비지니스 작업 예로는 여러 가지를 둘 수 있지만 대표적인 것들을 다음과 같습니다.
- 웹 사이트 회원 등록 요청 처리 작업
- 웹 사이트 로그인 요청 처리 작업
- 쇼핑몰 상품 주문 처리 작업

1. 클라이언트로부터 요청을 받습니다.
2. 데이터베이스 연동과 비지니스 로직을 처리합니다.
3. 처리 결과를 클라이언트에게 돌려줍니다.
서블릿의 데이터베이스 연동하기
서블릿에서 데이터베이스와 연동하는 과정은 자바의 데이터베이스 연동 과정과 같습니다. 클라이언트로부터 요청을 받으면 서불릿은 SQL문을 사용해 데이터베이스에 접근하여 적업을 합니다. 이 과정에서 DAO외 VO 클래스가 사용됩니다.
1. 먼저 SQL Developer에서 회원 테이블과 회원 정보를 입력하기 위해 SQL Developer를 실행합니다.

2. 왼쪽 메뉴의 +를 클릭합니다.

3. 왼쪽 메뉴에서 미리 만들어 놓은 접속 이름을 클릭하거나 직접 연결 정보를 입력한 후 접속을 클릭합니다.

4. 접속한 후 생성되는 워크시트에 다음과 같은 테이블 생성 SQL문을 입력합니다.
--- 회원 태이블 생성
create table t_member (
id varchar2(10) primary key,
pwd varchar2(10),
name varchar2(50),
email varchar2(50),
joinDate date default sysdate
);
-- 회원 정보 추가
insert into t_member
values ('hong', '1212', '홍길동', 'hong@gmail.com', sysdate);
insert into t_member
values ('lee', '1212', '이순신', 'lee@test.com', sysdate);
insert into t_member
values ('kim', '1212', '김유신', 'kim@jweb.com', sysdate);
commit;
select * from t_member;
5. 그런 다음 마우스 포인터를 각각의 SQL문에 위치시킨 후 왼쪽 상단 녹색 버튼을 클릭해 SQL문을 실행하여 테이블을 생성합니다. 그런 다음 insert 문에 대해서도 동일하게 실행합니다.

6. 커밋이 완료됐다는 메시지가 나타나고 select문으로 조회 시 회원 정보가 표시됩니다.


7. 이클립스에서 만든 프로젝트에서 회원 정보를 조회해 보겠습니다. 새 프로젝트 pro07을 설정한 다음 오라클 데이터베이스와 연동하는 데 필요한 드라이버인 ojdbc6.jar를 프로젝트의 /webapp/WEB-INF/lib 폴더에 복사하여 붙여 넣습니다.

8. sec01.ex01 패키지를 만들고 다음과 같이 회원 조회와 관련된 자바 클래스 파일인 MemberDAO, MemberServlet, MemberVO 클래스 를 각각 생성합니다.

9. 브라우저의 요청을 받는 MemberServlet 클래스를 다음과 같이 작성합니다.
package sec01.ex01;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Date;
import java.util.List;
@WebServlet("/member")
public class MemberServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
MemberDAO dao = new MemberDAO();
List<MemberVO> list = dao.listMembers();
out.print("<html><body>");
out.print("<table border=1><tr align='center' bgcolor='lightgreen'>");
out.print("<td>아이디</td><td>비밀번호</td><td>이름</td><td>이메일</td><td>가입일</td></tr>");
for (int i=0; i<list.size();i++){
MemberVO memberVO=(MemberVO) list.get(i);
String id=memberVO.getId();
String pwd = memberVO.getPwd();
String name=memberVO.getName();
String email=memberVO.getEmail();
Date joinDate = memberVO.getJoinDate();
out.print("<tr><td>"+id+"</td><td>"+
pwd+"</td><td>"+
name+"</td><td>"+
email+"</td><td>"+
joinDate+"</td></tr>");
}
out.print("</table></body></html>");
}
}
10. MemberDAO 클래스를 다음과 같이 작성합니다. 회원 정보 조회 SQL문을 실행하여 조회한 레코드들의 컬럼 값을 다시 MemberVO 객체의 속성에 설정한 다음 ArrayList에 저장하고 호출한 곳으로 반환합니다.
package sec01.ex01;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class MemberDAO {
private static final String driver = "oracle.jdbc.driver.OracleDriver";
private static final String url = "jdbc:oracle:thin:@localhost:1521:XE";
private static final String user = "scott";
private static final String pwd = "tiger";
private Connection con;
private Statement stmt;
public List<MemberVO> listMembers()
{
List<MemberVO> list = new ArrayList<MemberVO>();
try {
connDB();
String query = "select * from t_member";
System.out.println(query);
ResultSet rs = stmt.executeQuery(query);
while(rs.next())
{
String id = rs.getString("id");
String pwd = rs.getString("pwd");
String name = rs.getString("name");
String email = rs.getString("email");
Date joinDate = rs.getDate("joinDate");
MemberVO vo = new MemberVO();
vo.setId(id);
vo.setPwd(pwd);
vo.setName(name);
vo.setEmail(email);
vo.setJoinDate(joinDate);
list.add(vo);
}
rs.close();
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
private void connDB()
{
try {
Class.forName(driver);
System.out.println("Oracle 드라이버 로딩 성공");
con = DriverManager.getConnection(url, user, pwd);
System.out.println("Connection 생성 성공");
stmt = con.createStatement();
System.out.println("Statement 생성 성공");
} catch (Exception e) {
e.printStackTrace();
}
}
}
11. MemeberVO 클래스를 다음과 같이 작성합니다. 이는 값을 전달하는 데 사용되는 VO(Value Object) 클래스입니다. 테이블에서 조회한 레코드의 컬럼 값을 속성에 저장해야 하므로 컬럼 이름과 동일한 자료형과 이름으로 속성을 선언하고 getter/setter를 각각 생성합니다.
package sec01.ex01;
import java.sql.Date;
public class MemberVO {
private String id;
private String pwd;
private String name;
private String email;
private Date joinDate;
public MemberVO()
{
System.out.println("MemberVO 생성자 호출");
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getJoinDate() {
return joinDate;
}
public void setJoinDate(Date joinDate) {
this.joinDate = joinDate;
}
}
12. http://localhost:8090/pro07/member로 요청하여 실행 결과를 확인합니다. 회원 정보가 웹브라우저로 출력되는 것을 확인할 수 있습니다.

'프로그래밍 언어 > 자바 웹' 카테고리의 다른 글
| DataSource 이용해 데이터베이스 연동하기 (1) | 2025.05.28 |
|---|---|
| PreparedStatement를 이용한 회원 정보 실습 (1) | 2025.05.25 |
| 서블릿을 이용한 여러 가지 실습 예제 (4) | 2025.05.18 |
| 자바스크립트로 서블릿에 요청하기 (2) | 2025.05.15 |
| GET 방식과 POST 방식 요청 동시에 처리하기 (0) | 2025.05.12 |