본문 바로가기
개발/세상에서 가장 간단한 로그인

3-2. Service 클래스 만들어주기

by 하모예 2020. 10. 24.

(이 글은 기본적으로 Eclipse, Sql Developer가 설치, 인코딩 처리, 서버 등록이 완료된 상태를 가정하고 작성되었습니다.)

  • 사용 기술 : Java, JSP, Oracle, Bootstrap, CSS, HTML
  • 오늘의 기술 : JAVA
  • 사용 툴 : Eclipse

오늘은 Dao를 만들어봅시다.

먼저 login.model.dao패키지에 우클릭 [New] - [Class]로 MemberDao 클래스를 만들어주세요. 

그 다음 Member를 반환값으로 가지는  loginMember()메소드를 만들어줄께요.

package login.model.dao;

import login.model.vo.Member;

public class MemberDao {
	public Member loginMember() {
    
	}
}

 

그리고 Ctrl + Shift + O 를 눌러서 login.model.vo.Member를 import해주세요. 

노파심에 말씀드리면 반드시 이 많은 Member중에서 꼭 우리가 만든 Member를 임포트 해주셔야 합니다!!

 

이제 우리가 데이터를 가져올 데이터베이스에 접근해서 데이터를 가져오는 로직을 짜보겠습니다. 

이때 java.sql~로 시작되는 패키지들의 도움을 많이 받을 거에요. 

전체 코드를 보여드리고 주석으로 설명을 달겠습니다. 

package login.model.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import login.model.vo.Member;

public class MemberDao {
	// controller에서 가져온 클라이언트의 정보를 매개변수로 넣어줍니다. 
	public Member loginMember(Connection conn, String userId, String userPw) {
        // 데이터베이스에 쿼리를 보내기 위한 객체
        // 하나하나 입력해야하는 Statement의 단점을 해결해줍니다
		PreparedStatement pstmt = null;
		//일치하는 아이디와 비밀번호를 가지고 있는 Member 데이터를 넣을 객체
		ResultSet rs = null;
		Member m = null;
		try {
			// 실행행할 SQL문 
			String sql = "SELECT * FROM LOGIN WHERE USERID=? AND USERPW=?";
			pstmt = conn.prepareStatement(sql);
			// 쿼리문 물음표들에 들어갈 값 지정 
			pstmt.setString(1, userId);
			pstmt.setString(2, userPw);
			rs=pstmt.executeQuery();
			// rs는 테이블 형태로 데이터를 불러와서 rs.next() 
            // 즉, 결과값 테이블에 다음 행의 유무로 데이터가 있는지 없는지 확인. 
			if(rs.next()) {
				m = new Member();
				m.setUserId(rs.getString("USERID"));
				m.setUserPw(rs.getString("USERPW"));
			}
		}catch(SQLException e) {
			e.printStackTrace();
		}finally {
			// Connection, PreparedStatement, ResultSet을 활용한 후에는 반드시 닫아줘야 함.
            // 처음에 입력할때와 반대 순서로 닫아주는 것이 중요!
			try {
				if(rs!=null) {
					rs.close();
				}if(pstmt!=null) {
					pstmt.close();
				}
			}catch(SQLException e) {
				e.printStackTrace();
			}
		}
		// 매개변수로 불러온 userId, userPw와 일치는 데이터가 데이터베이스에 있을 경우
        // 해당하는 setter로 넣어준 Member m 객체를 반환.
		return m;
	}
}

 

이렇게 만들어진 DAO는 데이터베이스에 접근하여 원하는 조건을 충족하는 데이터를 불러옵니다. 

다음으로 DAO와 View, Controller를 연결하는 다리 역할을 해주는 Service를 만들어 보겠습니다. 

여러 선배님들의 좋은 설명들이 많지만 Service는 쉽게 설명하면 DAO에게 메소드를 호출하고,

DAO는 결과값을 Service에게 전달해주고 이 가공된 정보를 View에게 전달해주는 역할이라고 할 수 있습니다. 

아래 선배님의 글을 참고하시면 이해에 큰 도움이 됩니다. 

https://m.blog.naver.com/jysaa5/221751719334

 

[용어] DAO, DTO, Service - 개념

- Spring Framework의 MVC에서 Model = Service, DAO, DTO(=VO)로 나눌 수 있...

blog.naver.com

Service는 DAO에 비해서 아주 단촐합니다. 

1-1부터 쭉 따라오셨던 분들은 바로 아시겠죠?

login.model.service 패키지에 MemberService 클래스를 만들어주세요.

package login.model.service;

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

import login.model.dao.MemberDao;
import login.model.vo.Member;

public class MemberService {
	
	private MemberDao dao = new MemberDao();
	
	public Member loginMember(String userId, String userPw) {
		// 연결정보를 담는 객체 
		Connection conn = null;
        Member m = null;
		try {
			//오라클 드라이버
			Class.forName("oracle.jdbc.driver.OracleDriver");
			//본인의 오라클 주소, 계정명, 계정비밀번호
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
					"계정명","계정비밀번호");
			conn.setAutoCommit(false);
            m = dao.loginMember(conn, userId,userPw);
		}catch(SQLException e) {
			e.printStackTrace();
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}finally {
			if(conn!=null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		return m;
	}
}

 

원래 처음에 했어야 하는데 까먹고 지나온게 있네요. 

ojdbc.jar를 WEB-INF 밑에 lib 밑에 넣어줍니다. 

ojdbc는 오픈 라이브러리기때문에 구글링하시면 쉽게 다운로드 받으실 수 있습니다. 

혹시 다운로드가 안되시거나 파일이 필요하시면 댓글로 메일주소 남겨주시면 보내드리겠습니다.

이제 전에 만들어놨던 LoginServlet으로 가서 아래 두줄을 추가해주시면 끝!!

Member m =new MemberService().loginMember(userId,userPw);
System.out.println(m);

 

다음시간에는 SqlDeveloper로 가서 계정만들고, 테이블 만들고 간단한 테스트를 해보겠습니다.

댓글