개요
1. 초난감 DAO를 만들어보고 테스트 하기
2. 초난감 DAO의 문제점 확인하기
본문
1. 초난감 DAO를 만들어보고 테스트 하기
package springbook.user.ex1.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import springbook.user.ex1.domain.User;
//초난감 DAO
public class UserDao {
public void add(User user) throws ClassNotFoundException, SQLException{
Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/springbook?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Seoul&useUnicode=true&characterEncoding=UTF8&",
"root", "1234");
PreparedStatement ps = c.prepareStatement(
"insert into users(id, name, password) values(?,?,?)");
ps.setString(1, user.getId());
ps.setString(2, user.getName());
ps.setString(3, user.getPassword());
ps.executeUpdate();
ps.close();
c.close();
}
public User get(String id) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/springbook?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Seoul&useUnicode=true&characterEncoding=UTF8&", "root", "1234"
);
PreparedStatement ps = c.prepareStatement(
"select * from users where id = ?"
);
ps.setString(1, id);
ResultSet rs = ps.executeQuery();
rs.next();
User user = new User();
user.setId(rs.getString("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
rs.close();
ps.close();
c.close();
return user;
}
//테스트
public static void main(String[] args) throws ClassNotFoundException, SQLException {
UserDao dao = new UserDao();
User user = new User();
user.setId("cholongbul");
user.setName("초롱불");
user.setPassword("greenlight");
dao.add(user);
System.out.println(user.getId() + "등록 성공");
User user2 = dao.get(user.getId());
System.out.println(user2.getName());
System.out.println(user2.getPassword());
System.out.println(user2.getId() + "조회 성공");
}
}
책을 따라서 UserDao 입력. 프로젝트 생성은 단순하게 자바 프로젝트로 만들었으며 패키지 경로는 수정할 때마다 따로 저장해놓을 생각에 springbook.user.ex1으로 만들었다. 수정할 때마다 ex2, ex3로 만들어갈 생각이다. mysql jdbc링크는 기존 팀프로젝트에서 쓰던 링크가 있기에 그대로 가져왔다. mysql 사용자와 비밀번호도 팀프로젝트에서 쓰던대로 root, 1234를 썼다.
마찬가지로 책을 따라서 User 클래스도 작성했다.
package springbook.user.domain;
public class User {
String id;
String name;
String password;
public User(){
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
User클래스는 ex구분 없이 바로 domain패키지에 작성했다. User클래스는 수정없이 계속 사용되기에 ex로 구분할 필요성을 못느꼈다.
다음으로 mysql에 실습을 위한 테이블을 작성했다
CREATE TABLE users (
id VARCHAR(10) PRIMARY KEY,
NAME VARCHAR(20) NOT NULL,
PASSWORD VARCHAR(10) NOT null
)
이후 프로젝트 빌드 패스에서 mysql커넥터 라이브러리를 추가

필자의 경우 이미 팀프로젝트및 개인 프로젝트를 위해서 mysql을 활용하고 있었고 따라서 책에서 제시하는 mysql 버전은 고려하지 않고 가지고 있는 커넥터 라이브러리를 추가했다.
마지막으로 잘 연결되었는지 테스트 해본다.

잘되었다.
정리
여기까지는 자바를 처음 배울 때 DB와 연결하는 코드 만들기 실습을 수행하는 것과 다를 바가 없다. 기초를 복습하려는 게 아니라 스프링을 배우기 위해서라면 이 코드의 문제점을 익혀야 한다. 사실 처음 자바와 DB를 연결할 때도 이런 식으로 코드를 짜진 않았다. 그때도 최소한의 관심사의 분리가 이루어지게 코딩을 해서 DB와 연결하는 클래스와 DB에 sql문을 만들어서 보내는 클래스를 따로 작성했다. 정말 아무 것도 모를 때 기초를 가르치는 자바 선생님의 입장에서도 그 정도의 객체화는 하게끔 가르칠 정도로 기초중의 기초이며 그것이 이루어지지 않은 게 위의 '초난감DAO'인 것이다.
앞으로 위의 초난감 DAO를 수정해나가면서 어떻게 좋은 코드로 개선해나갈 수 있는지 이해해 가도록 하자.
소스 깃허브
https://github.com/cholongbul/Tobyspring
'스프링' 카테고리의 다른 글
토비의 스프링 - 1.5 스프링IoC (0) | 2021.05.20 |
---|---|
토비의 스프링 - 1.4 제어의 역전 (0) | 2021.05.20 |
토비의 스프링 - 1.3 DAO의 확장 (0) | 2021.05.19 |
토비의 스프링 - 1.2 DAO의 분리 (0) | 2021.05.19 |
테스트 입문 (0) | 2021.04.08 |