728x90
반응형

개발방법론!!

-어플리케이션을 개발하는 방법에 대한 이론

갱단이라 불리는 4명의 사람들이(GOF: Gang of four) 전세계적인 개발자들의 개발패턴을 조사하여 디자인패턴을 만듦

개발자들의 개발방법(=패턴)에 대해 명칭을 붙여 용어를 통일시킴

이사람들이 이름을 붙인 패턴이 24-25 개 정도 된다.

전세계 개발자들이 많이 쓰는 패턴 중 그중에 1개

객체를 메모리에 한번만 올려 사용하는 패턴을 가리켜 싱글톤 패턴(singleTon)이라 한다.

public class Dog {

//Dog라는 클래스를 메모리에 1번만 올리게 막는다.

//1. 생성자를 private으로 묶는다. -> 어느 누구도 new연산자를 사용하여 객체를 올릴수 없게된다.

//2. 아무도 메모리에 못올라오게 막고, 살짝 연다.

// - 멤버로 instance라는 변수에 dog를 담아둔다.

// - get 으로 받아온다

// - static 으로 올려 한개만 올라오게 해준다.

private static Dog instance; // static 에 올려진 객체는 중복해서 생성되지 않는다.

private Dog() {

}

public static Dog getInstance() {

if(instance == null) instance = new Dog();

//3. null 이면 내가 new 해서 Dog를 만든다

// 1)private : 내가 제공하는 메서드로만 가져와라. 외부 접근 못함

// 2)null 이면 내가 넣어준다. new 해서 Dog()..

return instance;

}

}

// Dog를 사용하는 클래스

public class UseDog {

public static void main(String[] agrs) {

Dog d1 = Dog.getInstance();

System.out.println(d1);

}

}

728x90
반응형
728x90
반응형

객체를 이루는 것은.. 데이터와 기능이다.

클래스(Class)라는 틀을 기반으로 객체가 생성된다.

'new' 객체생성을 명령하는 키워드이다.

Member member = new Member();

이렇게 객체를 생성하는 행위를 가리켜 '인스턴스화(instantion)' 한다고 하고

그리고 이렇게 생성이 된 객체를 가리켜 '인스턴스(Instance)' 라고 부른다.

728x90
반응형

'Web Programming > java-jsp' 카테고리의 다른 글

팩토리 패턴  (0) 2013.09.08
싱글톤 패턴  (0) 2013.09.08
Tomcat + Spring Framework + myBatis셋팅  (0) 2013.09.05
싱글톤 패턴 & 팩토리 패턴  (0) 2013.09.04
ermaster  (0) 2013.09.04
728x90
반응형

Tomcat + Spring Framework + iBatis 를 설치해야할 일이 생겨 하는 김에 여기에 정리해놓고자 한다.

 

1. 톰캣 다운로드

http://tomcat.apache.org/download-70.cgi 에서 Core zip 버전을 받으면 된다. (Linux경우 tar.gz)

ex) http://mirror.apache-kr.org/tomcat/tomcat-7/v7.0.33/bin/apache-tomcat-7.0.33.zip

다운로드 후 압축 해제하면 설치는 끝.

편의상 압축 푼 후 해당 tomcat 디렉토리를 c:\tomcat7 로 이동시켜주겠다.

 

2. Project 생성

IDE는 이클립스를 사용한다.

여기서는 Dynamic Web Project를 생성해서 사용하겠다.

 

 

 

 

이후엔 Project Name 만 설정하고 맨 마지막까지 Next한 후 마지막 창에서 web.xml 을 생성한다는 체크박스에 체크하고 Finish해준다.

 

 

위와 같이 프로젝트가 생성이 되었으면 성공이다.

 

3. Spring Framework lib 다운로드.

Maven을 사용하면 편하지만 원시적(?)으로 직접가서 lib를 다운로드 하겠다.

http://www.springsource.org/download/community 에 접속하면 zip파일이 있으니 다운로드 하면 된다.

(자신의 jdk버전에 맞는 가장 최신버전)

 

 

다운로드 후 압축해제.

아래와 같이 파일 list가 보인다.

우리가 사용할 곳은 libs 디렉토리이다.

 

libs안의 jar파일을 모두 다 사용하는 건 아니고 필요한 jar파일들만 사용하면 된다.

기본적인 beans, core, jdbc, context, context-support, expression, aop, tx와 spring mvc를 사용할것이므로 web, webmvc도 이클립스의 WEB-INF/lib로 드래그 하여 복사해 준다. 

 

4. Server 생성 (Eclipse)

아래의 과정은 Eclipse내에서 개발하고 바로 Tomcat을 실행시켜 브라우저에서 확인이 가능하고 디버깅도 가능하게 하는 작업이다.

 

 

 

 

OK를 누르면 Eclipse내에 Server라는 탭이 하나 생성이 될 것이다.

 

 

Tomcat v7.0 선택 (좀 전에 Tomcat download 한 버전에 맞게 선택하면 된다.)

Next 하면 아래 창이 뜬다.

 

Tomcat installation directory : 에서 Browse..를 클릭하여 좀전에 download한 Tomcat디렉토리를 선택해 주고 Next.

 

 

지금 만들고 있는 서버와 매칭시킬 프로젝트를 선택하면 된다.

프로젝트를 Add하고 Finish하면 끝.

 

 

생성완료.

위 Tomcat v7.0 Server at localhost 를 더블클릭하면 아래와 같은 창이 나온다.

맨 아래의 Module 탭을 선택하자.

 

 

선택한 후 Edit 버튼을 클릭하면 아래 창이 뜬다.

 

Path를 /로 수정하고 OK를 클릭한다.

 

위 Tomcat v7.0 Server at localhost 에 마우스 우클릭해서 Start나 Debug를 선택해주자.

 

상태가 Debugging으로 변한 걸 확인 할 수 있다.

 

브라우저로 확인해보자.

http://localhost:8080/ (톰캣이 기본포트가 8080인데 설정을 변경했다면 해당 포트로 접속해보면 된다.)

 

 

페이지를 찾을 수 없다는 에러 페이지인데.. 이 에러는 Tomcat에서 내보내는 에러 페이지이니 톰캣은 정상적으로 구동된 걸 확인 할 수 있다.

 

Eclipse에서 개발하고 바로 Eclipse내에서 이렇게 Server를 구동해서 확인 및 디버깅을 할 수 있다.

 

5. Spring Framework에 의존된 library들 다운받기

- jakarta taglibs standard (Spring mvc에서 사용하는 lib)

http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/ 에서 zip 파일 다운로드 후 압축해제 하면 lib 디렉토리 안에 jstl.jar, standard.jar 파일 있음.

두 파일을 WEB-INF/lib 안으로 드래그 하여 복사해줌.

 

- apache common logging (Spring core에서 사용하는 lib)

http://commons.apache.org/logging/download_logging.cgi 에서 binaries zip 파일 다운로드 후 압축해제하면 디렉토리 안에 commons-logging-x.x.x.jar 파일 있음.

이 파일도 WEB-INF/lib 안으로 드래그 하여 복사해줌.

 

- codehaus jackson (Spring mvc에서 json변환시 사용하는 lib)

http://wiki.fasterxml.com/JacksonDownload 에서 1.x 버전을 받아야 함.

받아서 WEB-INF/lib 안으로 드래그 하여 복사해줌.

 

6. spring mvc 설정

- web.xml

...

<!-- Spring Config Setting : bean 설정하는 xml 파일 위치 지정 -->
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
    /WEB-INF/config/*-context.xml
  </param-value>
 </context-param>
<!-- Spring Config Setting -->
     
 <!-- listener Register : Spring Framework이 로딩되게 listener를 설정함 -->
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 <!-- listener Register -->
     
<!-- Spring-MVC Config Setting : Spring MVC 관련 설정 -->
 <servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>
    /WEB-INF/config/spring-servlet.xml
   </param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 
 <servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>/*</url-pattern>
 </servlet-mapping>
 <!-- Spring-MVC Config Setting -->

...

 

- WEB-INF/config/application-context.xml

...

// 컨트롤러가 리턴하는 객체를 JSON포맷의 메시지로 변환하게 하는 Converter 설정. 

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
 <property name="messageConverters">
  <list>
   <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
  </list>
 </property>
</bean>

...

 

- spring-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:p="http://www.springframework.org/schema/p"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

 <!-- component scan -->
 <context:component-scan base-package="trust.controller" use-default-filters="false">
  <context:include-filter type="annotation"
   expression="org.springframework.stereotype.Controller" />
 </context:component-scan>
 <!-- component scan -->
</beans>

 

- TestController

package trust.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class TestController {
 @RequestMapping(value="/test") <- URL이 /test일 경우 실행하게 함.
 @ResponseBody <- 해당 메소드가 리턴하는 객체를 JSON포맷의 메시지로 변환하게 하는 Annotation
 public String testView() {
  return "aa";
 }
}

 

결과

 

 

 

7. iBatis 연동

MyBatis 로 이름이 바꼈다.

http://blog.mybatis.org/

http://code.google.com/p/mybatis/downloads/detail?name=mybatis-spring-1.1.2-SNAPSHOT-bundle.zip&can=1&q= 에서 lib 다운로드

(mybatis-spring-1.1.2-SNAPSHOT.zip)

zip 파일 압축해제하면 aopalliance-1.0.jar, mybatis-3.1.1.jar, mybatis-spring-1.1.2-SNAPSHOT.jar 가 있다.

이 파일들을 WEB-INF/lib 안에 드래그 해서 넣어준다.

 

mysql을 사용할 것이므로 Connector도 받아야 한다.

http://www.mysql.com/products/connector/ 에서 JDBC용 커넥터를 다운받아 WEB-INF/lib 안에 넣어준다.

(mysql-connector-java-5.1.22-bin.jar)

 

- WEB-INF/config/mybatis-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="locations">
   <value>/WEB-INF/config/mybatis.properties</value>
  </property>
 </bean>
 
 <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
  <property name="driverClass" value="${jdbc.driverClass}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="username" value="${jdbc.username}"/>
  <property name="password" value="${jdbc.password}"/>
 </bean>
 
 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="configLocation" value="/WEB-INF/config/mybatis-config.xml"/>
 </bean>
 
 <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg ref="sqlSessionFactory"/>
 </bean>
</beans>

 

- WEB-INF/config/mybatis.properties

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/DB명?autoReconnect=true
jdbc.username=사용자계정
jdbc.password=비밀번호

 

- WEB-INF/config/mybatis.config

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "HTTP://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
 <settings>
  <setting name="cacheEnabled" value="false" />
  <setting name="useGeneratedKeys" value="true" />
  <setting name="defaultExecutorType" value="REUSE" />
 </settings>
 
 <mappers>
  <mapper resource="../sqlMap/sqlMapper.xml" />
 </mappers>
</configuration>

 

- WEB-INF/sqlMap/sqlMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="네임스페이스"> 
    <select id="쿼리id" parameterType="int"
        resultType="int">
        select count(*) from 테이블명
    </select>
</mapper>

sqlMapper 작성 방법 : http://www.mybatis.org/core/sqlmap-xml.html 

 

WEB-INF/config/mybatis-context.xml 파일은 Spring이 로딩되면서 자동으로 읽게끔 설정을 web.xml에 해뒀으니 로딩이 될 것이다.

 

8. DAO 작성

import java.util.List;

import org.mybatis.spring.support.SqlSessionDaoSupport;

 

public class UserGameLogDAO extends SqlSessionDaoSupport {
 public List selectLogList() {
  return getSqlSession().selectList("네임스페이스.쿼리id");
 }
}

 

- application-context.xml

...

<bean class="UserGameLogDAO" name="userGameLogDAO">
 <property name="sqlSessionTemplate" ref="sqlSessionTemplate" />
</bean>

...

 

DAO를 호출하면 DB를 정상적으로 조회해 오는 걸 볼 수 있을 것이다.

728x90
반응형

'Web Programming > java-jsp' 카테고리의 다른 글

팩토리 패턴  (0) 2013.09.08
싱글톤 패턴  (0) 2013.09.08
객체(Object)와 인스턴스(Instance)  (0) 2013.09.08
싱글톤 패턴 & 팩토리 패턴  (0) 2013.09.04
ermaster  (0) 2013.09.04
728x90
반응형

1. 싱글톤 패턴

= singleTon. 객체를 메모리에 단 한번만 올려 사용하는 패턴

2. 팩토리 패턴

1) 팩토리(factory)란 ?

- 객체 생성을 처리하는 클래스

- 팩토리를 사용했을 때의 장점

1. 객체 생성코드를 전부 한 객체 또는 메소드에 집어넣으면 코드에서 중복되는 내용을 제거할 수 있다.

2. 클라이언트 입장에서는 객체 인스턴스를 만들 때 필요한 구상 클래스가 아닌 인터페이스만 필요로 하게 된다.

3. 구현이 아닌 인터페이스를 바탕으로 프로그래밍을 할 수 있고, 그 결과 유연성과 확장성이 뛰어난 코드를 만들 수 있다.

- 정적 팩토리 : 객체를 생성하기 위한 메소드를 실행시키기 위해서 객체의 인스턴스를 만들지 않아도 된다. 하지만 서브 클래스를 만들어서 객체 생성 메소드의 행동을 변경시킬 수 없다.

* 간단한 팩토리(simple factory)는 디자인 패턴이라기보다 관용구에 가깝다.

2) 의존성 뒤집기 원칙(Dependency Inversion Principle) - 추상화 지향!

- 추상회된 것에 의존하도록 만들어라. 구상 클래스에 의존하도록 만들지 않도록 한다는 원칙.

- 고수준 구성요소가 저수준 구성요소에 의존하면 안 된다.

(여기에서 '고수준' 구성요소는 다른 '저수준' 구성요소에 의해 정의되는 행동이 들어있는 구성요소이다.)

- 코드가 변하지 않을 것이라고 확신한다면 의존성 뒤집기 원칙을 적용할 필요 없다.

* 원칙을 지키는 데 도움이 될만한 가이드 라인!

- 어떤 변수에도 구상 클래스에 대한 레퍼런스를 저장하지 말자.(new 연산자를 사용하지 말자)

- 구상 클래스에서 유도된 클래스를 만들지 말자.(추상화된 것으로부터 유도된 클래스를 만들자)

- 베이스 클래스에 이미 구현되어 있던 메소드를 오버라이드 하지 말자.

* 팩토리 메소드는 객체 생성을 처리하며, 팩토리 메소드를 이용하면 객체를 생성하는 작업을 서브 클래스에 캡슐화 시킬 수 있다. 이렇게 하면 수퍼 클래스에 있는 클라이언트 코드와 서브 클래스에 있는 객체 생성 코드를 분리시킬 수 있다.

--------------------------------

팩토리에 해당하는 두 패턴 : 팩토리 메소드 패턴, 추상 팩토리 패턴

3) 팩토리 메소드 패턴

팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브 클래스에서 결정하게 만든다. 팩토리 메소드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브 클래스에게 맡기는 것이 된다.

- 구상 형식의 인스턴스를 만드는 작업을 캡슐화 한다.

- 상속을 통해 객체를 만든다. 객체 생성시 클래스를 확장, 메소드를 오버라이드 한다.

- 클라이언트와 구상 형식을 분리, 클라이언트에서는 자신이 사용할 추상 형식만 알면 되고 구상 형식은 서브 클래스에서 처리한다.

- 클라이언트 코드와 인스턴스를 만들어야 할 구상 클래스를 분리시켜야 할 때, 어떤 구상 클래스를 필요로 하게 될지 미리 알 수 없는 경우에 사용한다.

- 서브 클래스를 만들고 팩토리 메소드를 구현하기만 하면 팩토리 메소드 패턴을 활용할 수 있다.

4) 추상 팩토리 패턴

추상 팩토리 패턴에서는 인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고도 생성할 수 있다.

- 클라이언트에서 추상 인터페이스를 통해 일련의 제품들을 공급받을 수 있다. 이때, 실제로 어떤 제품이 생산되는지 전혀 알 필요가 없다. (클라이언트와 팩토리에서 생산되는 제품을 분리시킬 수 있다.)

- 실제 팩토리는 실행시, 서브 클래스에 의해서 결정된다.

- 객체 구성을 통해 객체를 만든다.(클라이언트와 구상 형식 분리)

- 제품군을 만들기 위한 추상 형식을 제공한다. 이형식의 서브 클래스에서 제품 생산 방법을 정의한다.

- 일단 인스턴스를 만들고 추상 형식을 써서 만든 코드에 전달하는 식으로 추상 팩토리 패턴을 사용할 수 있다.

- 일련의 연관된 제품을 하나로 묶을 수 있다.

- 구상 팩토리 구현시 제품 생산 용도로 팩토리 메소드를 사용하기도 한다.

- 클라이언트에서 서로 연관된 일련의 제품들(제품군)을 만들어야 할 때 사용한다.

*팩토리 메소드 패턴, 추상 팩토리 패턴 모두 객체 생성을 캡슐화해서 코드와 구상 형식을 분리시킬 수 있게 해준다.

 

728x90
반응형

'Web Programming > java-jsp' 카테고리의 다른 글

팩토리 패턴  (0) 2013.09.08
싱글톤 패턴  (0) 2013.09.08
객체(Object)와 인스턴스(Instance)  (0) 2013.09.08
Tomcat + Spring Framework + myBatis셋팅  (0) 2013.09.05
ermaster  (0) 2013.09.04
728x90
반응형
http://ermaster.sourceforge.net/

이클립스에서 erd그리고 쿼리문 생성해줌 

728x90
반응형

'Web Programming > java-jsp' 카테고리의 다른 글

팩토리 패턴  (0) 2013.09.08
싱글톤 패턴  (0) 2013.09.08
객체(Object)와 인스턴스(Instance)  (0) 2013.09.08
Tomcat + Spring Framework + myBatis셋팅  (0) 2013.09.05
싱글톤 패턴 & 팩토리 패턴  (0) 2013.09.04

+ Recent posts