본문으로 바로가기

토비의 스프링3 교재는 아래와 같은 흐름이다.


용어정리

컨스트럭터(Constructor):'생성자'라고 보통 번역을 하지만 한자어이므로 그냥 컨스트럭터라고 쓴다.



프로젝트 생성 방법


//STS(eclipse), Maven으로 하는 경우

sts를 켠다

1.패키지 익스플로러(package explorer)에서 우측 클릭 해서 컨텍스트(context) 메뉴를 열어서 스프링 프로젝트(spring project)를 생성을 선택한다.

2.옵션은 스프링 웹 메이븐(spring web maven)이나 스프링 엠브이씨(spring mvc)를 선택한다.

3.생성한 프로젝트에 우클릭을 해서 메이븐 클린(maven clean)을 한다.

4.메이븐 인스톨(maven install)을 한다.

5.pom에서 com.mysql.jdbc.driver 를 디펜던씨(dependency)에 추가한다.

6.메이븐 클린 - 메이븐 인스톨 한다.



//Intelli J, Gradle로 하는 경우


build.gradle

apply plugin: 'java'
apply plugin: 'idea'


sourceCompatibility = 1.5
version = '1.0'

repositories {
mavenCentral()
}

dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
compile 'mysql:mysql-connector-java:5.1.6'

}




리팩토링 순서

1.User, UserDao만든다


User.java

/**

* Created by krkim on 2015-09-08.
*/
public class User {
String id;
String password;
String name;

public User() {
}

public User(String id, String password, String name) {
this.id = id;
this.password = password;
this.name = name;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}


UserDao.java

import java.sql.*;

/**
* Created by krkim on 2015-09-08.
*/
public class UserDao {

private Connection getConnection() throws ClassNotFoundException, SQLException {

Class.forName("com.mysql.jdbc.Driver");

Connection c = DriverManager.getConnection(
"jdbc:mysql://localhost/krkdb",
"root",
"111111"
);


return c;
}

public void add(User user) throws SQLException {
Connection c = null;

try {
c = getConnection();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

PreparedStatement ps = c.prepareStatement("insert into users(id, password, name) values(?,?,?)");
ps.setString(1, user.getId());
ps.setString(2, user.getPassword());
ps.setString(3, user.getName());

ps.executeUpdate();

ps.close();
c.close();

}

public User get(String id) throws SQLException {
Connection c = null;

try {
c = getConnection();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

PreparedStatement ps = c.prepareStatement("select * from users where id=?");
ps.setString(1, id);

ResultSet rs = ps.executeQuery();
rs.next();

User user = new User(rs.getString("id"), rs.getString("password"), rs.getString("name") );

rs.close();
ps.close();
c.close();

return user;
}

}


2.getConnection()을 분리한다.

위에서 했음


3.추상 클래스 이용해서 connection 개별 구현하기

이건 안쓰기 때문에 넘어감


4.인터페이스 이용해서 개별 connection만들기

아래에서 같이 할 예정


5.전략 패턴 이용

2015/09/08 - [Web개발/Spring] - Toby의 Spring3 따라하기-제3편 connectionMaker interface 이용해서 분리하기



6.팩토리 메소드 패턴 이용



7.application context로 리팩토링 하면서 싱클톤 패턴 구현

spring library를 import 한다.


applicationContext.xml은 src/main/resource에 넣는다.

applicationContext.xml은 클라이언트(Client)역할을 하는 UserDaoTest에서 불러온다.


Test code에서 dao를 ApplicationContext를 이용해 생성한다.


applicationContext.xml을 작성하다보면 에러가 나는데 spring-jdbc가 없어서 나는 에러이다. pom.xml에서 spring-jdbc 디펜던씨(dependency)를 추가 해준다.


applicationContext를 이용해 userDao 오브젝트(object)를 받아올 수 있는데 해당 userDao 오브젝트는 dataSource object가 DI된 상태이다. 이 정보가 applicationContext.xml에 기록이 되어있다.





막히는 부분에 대한 간단한 설명

dataSource object에서 getConnection() 메소드를 이용해 connection Object를 생성할 수 있다.


1장의 내용은 userDao에 dataSource를 글로벌 변수로 선언하는 것으로 마무리 된다.


dataSource object를 전역 변수로 선언해 놓으면 dataSource는 DI받으면 되므로 connection에 관해 더이상 신경쓰지 않아도 되는 코드를 만들 수 있다.


외부에서 object를 넣어주는 방법(토비는 주입 이라고 써놓았다)을 DI라고 하는데 DI하는 방법은 컨스트럭터를 이용하는 방법과 셋 메소드를 이용하는 방법 두가지가 있다.










댓글을 달아 주세요