[Project] 기능구현 (DTO, DAO)
DTO 생성 (Data Transfer Object)
1. 데이터를 사용할때 안전하고 유지보수에 편리하고 용도에 맞게 분별해서 사용할 수 있도록 DTO라는 클래스를 이용한다.
DB를 만들때 사용했던 변수들을 private로 선언해서 이용한다. 변수명도 같게 사용함.
1. 위의 설명대로 변수를 선언한뒤
2. Source -> Generate Getter and Setter 을 클릭하고
3. Select All -> Generate 클릭
4. DTO클래스 완성
DAO클래스로 로그인 기능구현
1. 전단계(2021.02.05 - [분류 전체보기] - [Project] tomcat - DB (jdbc) 연결)에서 getConnection을 만들었던 DAO클래스이다.
2. 1번의 하단에 기능을 구현할 메서드와 반환값, 매개변수를 선언한다.
나는 회원가입기능과 로그인 기능을 구현 할 예정이므로 큰 틀을 이렇게 잡아봤다.
- 2024. 07. 28 지금의 나였으면 service단 에 join, login을 구현했을 것 같다.
3. 로그인 기능 구현하기
public int login(String id, String password) {
String sql = "select * from member where id=? and password=?";
try {
conn=getConnection();
ps=conn.prepareStatement(sql);
ps.setString(1,id);
ps.setString(2,password);
rs=ps.executeQuery();
if(rs.next()) {
return 1;
}
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(rs!=null) rs.close();
if(ps!=null) ps.close();
if(conn!=null) conn.close();
}catch(Exception e) {
e.printStackTrace();
}
}
return 0;
}
4.같은 원리로 join메서드도 만들어준다.
public int join(String id, String password, String birthday, String email, String hobby) {
int idcheck = idcheck(id);
if(idcheck<0) {
return -1;
}
String sql = "insert into member values(?,?,?,?,?)";
try {
conn = getConnection();
ps = conn.prepareStatement(sql);
ps.setString(1,id);
ps.setString(2,password);
ps.setString(3,birthday);
ps.setString(4,email);
ps.setString(5,hobby);
rs = ps.executeQuery();
if(rs.next()) {
return 1;
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(rs!=null) rs.close();
if(ps!=null) ps.close();
if(conn!=null) conn.close();
}catch(Exception e) {
e.printStackTrace();
}
}
return 0;
}
+) idcheck 메서드도 만들어서 완성도를 높인다
public int idcheck(String id) {
String sql = "select * from member where id = ?";
try {
conn = getConnection();
ps = conn.prepareStatement(sql);
ps.setString(1, id);
rs=ps.executeQuery();
if(rs.next()) {
return -1;
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(rs!=null) rs.close();
if(ps!=null) ps.close();
if(conn!=null) conn.close();
}catch(Exception e) {
e.printStackTrace();
}
}
return 1;
}
- DTO 클래스에서 생성자나 ToString을 용도에 따라 만들 수 있다.
- DAO login클래스의 return값이 int인 것은 가장 편하고 보편적이라서 그렇다. (상황에 따라 달라져도 문제는 없음)
2024. 07. 28 내용 추가
- join, login을 할때마다 connection을 생성하고 닫는 부분이 (내가했지만) 생소하게 느껴졌다.
- hikari cp 나 jdbc에서 connection pool개수 조절을 지원해줘서 지금까지 관련 이슈를 경험하지 못한건가?
- deadlock관련 중요내용인것같으니 더 공부해봐야겠다.
- https://codingdog.tistory.com/entry/jdbc%EC%97%90%EC%84%9C-connection%EC%9D%84-close-%ED%95%B4-%EC%A3%BC%EC%A7%80-%EC%95%8A%EC%95%98%EC%9D%84-%EB%95%8C-%EC%96%B4%EB%96%A4-%EC%9D%BC%EC%9D%B4-%EC%9D%BC%EC%96%B4%EB%82%98%EB%8A%94%EC%A7%80-%EC%8B%A4%EC%8A%B5%ED%95%B4-%EB%B4%85%EC%8B%9C%EB%8B%A4
jdbc에서 connection을 close 해 주지 않았을 때 어떤 일이 일어나는지 실습해 봅시다.
jdbc를 사용할 때, connection을 close 해 주지 않으면 어떤 일이 벌어질까요? 파일을 열어놓고 close를 안 하면 fd가 낭비되는 것처럼 connection이 계속 쌓이다가, connection이 고갈될 겁니다. jdbc mysql과 연
codingdog.tistory.com
[Spring] DB커넥션풀과 Hikari CP 알아보기
실무환경에서 DataBase 성능 최적화 및 ORM에 대해 이야기 할때 커넥션풀이라는 단어가 자주 등장하여 한번 정리가 필요할 것 같아 정리한 포스트 입니다.
velog.io
https://techblog.woowahan.com/2606/
응? 이게 왜 롤백되는거지? | 우아한형제들 기술블로그
이 글은 얼마 전 에러로그 하나에 대한 호기심과 의문으로 시작해서 스프링의 트랜잭션 내에서 예외가 어떻게 처리되는지를 이해하기 위해 삽질을 해본 경험을 토대로 쓰여졌습니다. 스프링의
techblog.woowahan.com