반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


1. Dto(Data Transfer Object)

Data Transfer Object의 줄임말로, 프로세스 사이에서 데이터를 운반하는 객체(Object)라고 생각하면 된다. 이 Dto는 Dao나 Service 등처럼 로직을 가지고 있지 않고, Data에 접근하기 위해 getter와 setter를 가지고 있다. 즉, Dao가 데이터베이스(DB)에서 얻어온 데이터를 Service나 Controller로 보낼 때 getter와 setter를 통해 얻어 사용하는 객체라고 생각하면 된다. 

package com.ssafy.happyhouse.user.dto;

public class UserDto {
	private String userId;
	private String userName;
	private String userPwd;
	private String email;
	private String phoneNumber;

	public String getUserId() {
		return userId;
	}

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

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getUserPwd() {
		return userPwd;
	}

	public void setUserPwd(String userPwd) {
		this.userPwd = userPwd;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getPhoneNumber() {
		return phoneNumber;
	}

	public void setPhoneNumber(String phoneNumber) {
		this.phoneNumber = phoneNumber;
	}

	@Override
	public String toString() {
		return "UserDto [userId=" + userId + ", userName=" + userName + ", userPwd=" + userPwd + ", email=" + email
				+ ", phoneNumber=" + phoneNumber + "]";
	}
	
}


2. Dao(Data Access Object)

Dao는 Data Access Object의 줄임말로, 데이터 접근 객체라고 해석이 된다. 즉, Dao를 통해 DB를 연결하여 오직 DB에 연결하여 데이터를 가져오거나 삭제, 수정 등 CRUD를 작업하는 것이라고 생각하면 된다. 그 이유는, 다른 로직에서 데이터베이스(DB)를 통해 데이터를 얻어오려면 DB Driver와 Connection 객체를 생성하여 작업량이 많아진다. 비효율적인 작업량을 줄이기 위해 DB와 연결하는 객체를 따로 만들어 관리하면 불필요한 작업량이 줄어든다. 

 

그래서, Dao(Data Access Object)에서는 아래와 같은 작업을 수행한다.

 

- Dao(Data Access Object) 인터페이스 만들기

public interface IUserDao {
	public int insert(UserDto userDto);
	public int delete(String userId);
	public int modify(String userId, UserDto userDto);
	public List<UserDto> selectAll();
	public UserDto selectOne(String userId);
}

 

- 싱글턴 패턴(Singleton Pattern)

private static UserDao instance;

public static UserDao getUserDao(){
	if(instance==null){
    	instance = new UserDao();
    }
    return instance;
}

private UserDao(){ }

 

- CRUD(Create, Read, Update, Delete)를 위한 SQL문

public int insert(UserDto userDto) {
		Connection conn = null;
		PreparedStatement pstmt = null;

		try {
			conn = DBUtil.getConnect();
			StringBuilder sql = new StringBuilder();
			sql.append("insert into user (userId, userName, userPwd, email, phoneNumber) \n");
			sql.append("values (?, ?, ?, ?, ?)");

			pstmt = conn.prepareStatement(sql.toString());

			pstmt.setString(1, userDto.getUserId());
			pstmt.setString(2, userDto.getUserName());
			pstmt.setString(3, userDto.getUserPwd());
			pstmt.setString(4, userDto.getEmail());
			pstmt.setString(5, userDto.getPhoneNumber());
			int res = pstmt.executeUpdate();
			return res;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.close(pstmt, conn);
		}
		return 0;
	}
public int delete(String userId) {
		Connection conn = null;
		PreparedStatement pstmt = null;

		try {
			conn = DBUtil.getConnect();
			StringBuilder sql = new StringBuilder();
			sql.append("delete from user \n");
			sql.append("where userId = ?");
			pstmt = conn.prepareStatement(sql.toString());
			pstmt.setString(1, userId);
			int res = pstmt.executeUpdate();
			return res;

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.close(pstmt, conn);
		}

		return 0;
	}
public int modify(String userId, UserDto userDto) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			conn = DBUtil.getConnect();
			StringBuilder sql = new StringBuilder();
			sql.append("update user \n");
			sql.append("set userName = ?, userPwd = ?, email = ?, phoneNumber = ? \n");
			sql.append("where userId = ?");
			pstmt = conn.prepareStatement(sql.toString());
			pstmt.setString(1, userDto.getUserName());
			pstmt.setString(2, userDto.getUserPwd());
			pstmt.setString(3, userDto.getEmail());
			pstmt.setString(4, userDto.getPhoneNumber());
			pstmt.setString(5, userDto.getUserId());
			int res = pstmt.executeUpdate();
			return res;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.close(pstmt, conn);
		}
		return 0;
	}
public List<UserDto> selectAll() {
		List<UserDto> list = new ArrayList<UserDto>();

		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;

		try {
			conn = DBUtil.getConnect();
			StringBuilder sql = new StringBuilder();
			sql.append("select userId, userPwd, userName, email, phoneNumber \n");
			sql.append("from user \n");
			sql.append("order by userId desc \n");
			pstmt = conn.prepareStatement(sql.toString());

			rs = pstmt.executeQuery();
			while (rs.next()) {
				UserDto userDto = new UserDto();
				userDto.setUserId(rs.getString("userId"));
				userDto.setUserPwd(rs.getString("userPwd"));
				userDto.setUserName(rs.getString("userName"));
				userDto.setEmail(rs.getString("email"));
				userDto.setPhoneNumber(rs.getString("phoneNumber"));

				list.add(userDto);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.close(rs, pstmt, conn);
		}

		return list;

	}
public UserDto selectOne(String userId) {
		UserDto userDto = null;

		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;

		try {
			conn = DBUtil.getConnect();
			StringBuilder sql = new StringBuilder();
			sql.append("select userId, userPwd, userName, email, phoneNumber \n");
			sql.append("from user \n");
			sql.append("where userId = ?");
			pstmt = conn.prepareStatement(sql.toString());
			pstmt.setString(1, userId);
			rs = pstmt.executeQuery();
			if (rs.next()) {
				userDto = new UserDto();
				userDto.setUserId(rs.getString("userId"));
				userDto.setUserPwd(rs.getString("userPwd"));
				userDto.setUserName(rs.getString("userName"));
				userDto.setEmail(rs.getString("email"));
				userDto.setPhoneNumber(rs.getString("phoneNumber"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.close(rs, pstmt, conn);
		}
		return userDto;
	}

 

3. Service

Service는 로직이 있는 부분이다. 즉, Dao(Data Access Object)를 통해 데이터베이스(DB)에 가서, 데이터를 Dto(Data Transfer Object)로 전달하여 받은 Dto를 처리하여 서비스에 반환한다. 이 Service 부분에도 Dao처럼 싱글턴 패턴이 있어야 한다.

 

Service에서는 아래와 같은 작업을 수행한다.

 

 

- 싱글턴 패턴(Singleton Pattern)

private static UserService instance;

public static UserService getUserService(){
	if(instance==null){
    	instance = new UserService();
    }
    return instance;
}

 

- CRUD(Create, Read, Update, Delete) 서비스 구현

public boolean register(UserDto userDto) {
		int res = UserDao.getUserDao().insert(userDto);	
		if(res > 0) return true;
		return false;
	}
public UserDto login(String userId, String userPwd) {
		UserDto user = UserDao.getUserDao().selectOne(userId);
		if(userPwd.equals(user.getUserPwd())) {
			return user;
		}
		return null;
	}
public boolean changeUserInfo(UserDto userDto) {
		int res = UserDao.getUserDao().modify(userDto.getUserId(), userDto);
		if(res > 0) return true;
		return false;
	}
public boolean deleteUser(String userId) {
		int res = UserDao.getUserDao().delete(userId);
		if(res > 0) return true;
		return false;
	}

 

4. Controller

Controller는 클라이언트에게 받은 요청을 수행할 로직을 제어(Control)하는 객체이다.

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기