[Mini Project] 밝은빛 도서관-3

JUNHO YEOM·2023년 1월 6일
0

5일차

프로젝트가 진행되면서 생각한 것들

이런것 적는것... 부끄럽지만
DB에서 자료를 검색하고 다룰때는 Primary Key로 하는게 당연하잖아요 여러분?
하지만 저는 왜 도서 제목으로 검색하고, 값을 다루려고 했을까요...?
책을 찾고, 반납하는 등의 로직을 구현하면서 책 제목을 사용하고 있었다.
아니... 왜...?
코드를 작성할 수록 이상한 느낌이 계속들고 머리속에서 물음표가 3개쯤 뜰때쯤
이상함을 느끼고 코드 수정을 시작했다.
머리를 안써서 몸이 고생했다.

primary key를 타깃으로 CRUD 하자



VO는 확장성을 고려해서 만들자

일반적으로 DB의 table에 해당하는 Column들 만을 VO의 인자로 넣었는데
확장성을 고려하지 않고 그때그때 필요한 값들만을 사용해서 만들다 보니,
나중에 추가적인 값들이 필요할 때, VO에 담을 수 없는 문제가 발생했다.
내가 어떤 값들을 return해주고 싶은지를 먼저 고민하고 VO를 생성했다면
VO의 수정소요를 줄일 수 있었을 것이라는 생각이 들었다.


메모리 정리 해주기

아직 MyBatis를 배우지 않아서 DBCP의 ConnectionPool을 이용하여 DB관련한
코드를 제작하고 있다.
대략적인 코드는 이렇다.

	public UserVO findOne(String user_id) {
		String sql = "SELECT * FROM user where user_id=?";
		UserVO result = null;
		try {
			PreparedStatement pstmt = con.prepareStatement(sql);
			pstmt.setString(1, user_id);
			ResultSet rs = pstmt.executeQuery();
			if (rs.next()) {
				result = new UserVO(rs.getString("user_id"), rs.getString("user_password"), rs.getString("user_name"),
						rs.getInt("user_point"));
			} 
            rs.close();
			pstmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return result;
	}

내가 한 실수는 코드 작성하기에 급급해서
con.close와 같이 close를 해주지 않은 코드들이 있었다는 것이다.
이렇게 되면 메모리를 효율적으로 사용할 수 없게 되고, 문제가 발생하게 된다.

close 해주지 않으니까, 프로그램이 멈췄어요... 응답이 없어요...



포인트 테이블 만들어 주기

CREATE TABLE point
(
point_id int primary key auto_increment,
point_content char(100) NOT NULL,
point_value int NOT NULL,
user_id char(20) not null,
foreign key (user_id) references user (user_id)
);

유저가 정상적으로 도서를 반납할 경우 포인트를 지급해 주기 위해 포인트 테이블을 만들어 주었다.

0개의 댓글