세팅을 다 하고 알았지만 

꼭 이클립스 에서 할 필요 없이 웹 같은 경우는 소스 수정이 주된 목적일수 있어서...


http://www.atom.io/ 에서 git에서 만든 툴인데 이거 받아서 쓰는것도 좋습니다. !! (이쁨;;;)



시작하기에 앞서 기본 세팅을 해야한다.


1. 테마 
* 학교 다닐때 처럼 한두시간 보는게 아니기 때문에 (물론 학교다닐때도 한두시간만 본건 아니였지만)
눈에 익숙할수 있도록 테마를 지정해 주어야 한다. 그렇기 위해서 테마 설정을 위한 기본 테마를 다운 받는다.



Eclipse MarketPlace 에 " color theme " 검색 후 Installed


그렇게 되면 Window-> Preferences -> General -> Appearance  에 Theme: Window Classic 선택 





Window -> Preferences -> General -> Appearance -> Color Theme -> 적당한것 선택 필자는 Oblivion 선택




해당 선택을 하게되면 테마 적용이 된다.




결과는 에디터 창은 검정색이 되며 탐색기 창은 원래 기본 클래식으로 변하게 된다.


해당 테마 적용시 json 과 html 에 대한 에디터 색이 마음에 들지 않는다.


이 또한 맞게 변화를 주어야 한다.





Web -> HTML Files -> Syntax Color -> 해당 칼라에 대한 수정 





JSON -> JSON Files -> Editor -> Syntax Color 에 서 수정




가끔 HTML 사용하다 보면 js 파일이나 jquery 파일들 적용이 직접 안되서 Unknown Tag(Warning 시작에 지장 X) 라고 뜨는 경우가 있는데


이걸 제거해주기 위함이다. HTML 파일에서 해당 태그를 제거 시켜주기 위해서는 


Web > HTML Files -> Validation 에 들어가서 Elements, Attribute에서 해당되는 태그에 대한 유효성 검사를 Ignore로 바꾸게 되면 밑줄이 나타나지 않아 코딩하기 좀더 수월해질것이다. 





'개발일지(Platform & Library) > Spring' 카테고리의 다른 글

5. Spring 기본 세팅  (0) 2016.09.27
4. Spring (개요 - 2) IOC 및 DI  (0) 2016.09.26
3. Spring (프로젝트 생성)  (0) 2016.09.26
2. Spring(개요)  (0) 2016.09.26
1. Spring(이해)  (0) 2016.09.26

스프링 - Life Cycle 


1. 클라이언트 요청에 대한 최초 진입 지점  !!(DispatcherServlet) 


2. DispatcherServlet 은 Spring Bean Definition 에 설정되어있는 Handler Mapping 정보를 참조하여


해당 요청을 처리하기 위한 Controller 를 찾는다.


3. DispathcerServlet 은 선택된 Controller를 호출하여 클라이언트가 요청한 작업을 처리한다.

4. Controller는 Business Layer와의 통신을 통하여 원하는 작업을 처리한 다음 요청에 대한 성공유무에 따라 

Model And View 인스턴스를 반환한다. ModelAndView 클래스에는 UI Layer 에서 사용할 Model 데이터와

UI Layer로 사용할 View에 대한 정보가 포함되어 있다.

5. DispatcherServlet 은 ModelAndView의 View의 이름이 논리적인 View의 정보이면 ViewResolver를 

   참조하여 이를 논리적인 View정보를 실질적으로 처리해야할 VIew를 생성하게된다.

   DispatcherServlet은 ViewResolver를 통하여 전달된 View에게 ModelAndView를 전달하여

   마지막으로 클라이언트에게 원하는 UI 를 제공할 수 있도록 한다. 마지막으로 클라이언트에게 UI를 제공할 책임은 View클래스가 담당 



클라이언트의 요청이 DispatcherServlet에 전달되서 HandlerMapping을 사용하여 클라이언트의 요청을 처리할 Controller 객체를 선택합니다.


Controller 객체는 비즈니스 로직을 호출해서 처리하고 요청 처리 결과 정보를 ModelAndView 객체를 리턴합니다.


DispatcherServlet은 넘겨받은 ModelAndView 객체를 이용해서 ViewResolver로부터 응답 결과를 출력할 뷰 객체를 구해서 출력합니다.




1. 클라이언트의 요청을 받을 DispatcherServlet을 web.xml에 등록

2. 클라이언트의 요청을 처리할 Controller 클래스를 생성

3. ViewResolver를 설정

4. JSP나 HTML 또는 Velocity를 이용해서 출력 코드 작성 


이 기본 라이프 사이클이라는 가정 


프로젝트 기준으로는 


1. web.xml 들어가서  Dispatcher  설정 







servelt-name 은 WEB-INF 에 appServlet폴더에 맞춰서 되어있고

url-pattern 은 *.do주어서


test.do sample.do 같은 액션으로 컨트롤러에서 받아서 사용할수 있도록  변경 

// 컨트롤러에 대한 개념은 다시 설명 


2. appServlet -> servlet-context.xml 설정 





새로운 패키지 작성 kr.or.testcontroller (의 내부에 있는 testController를 동작하게 하기 위해서는


context:component-scan base-package ="kr.or.testcontroller" 를 추가해주어야 한다.


필자는 html 파일도 열어야 하기 때문에 (스프링에서 html 파일 열기가 자주하시는 분들이 없어서 그런가 찾아서 했다.)


webapp 폴더 바로 밑에 html폴더를 하나 만들고 intro.html을 열기 위해서 


<resources mapping="/html/**" location="html/"/> 을 추가해주었다.   // 그래야 리소스 폴더로 인식하고 리다이렉트가 가능


// 멀티 리졸버 라는 기능을 사용하시는 분들도 있던데 알면 좋켔다.. p:order에서 에러가 나버려서;;;



3. Controller 작성 



2에 작성 되었던 base-package에 대한 컨트롤러를 작성한다.



패키지에 일반 자바 클래스 생성후 


@Controller 로 Annotation 을 설정 한다.

이후 해당 클래스 내부 함수에 


@RequestMapping 설정 후 위와같이 입력 test.do 에 대한 값이 진행시(*.do)


반환값으로 redirect:/html/index.html 을 하는 모습을 볼수있다. 위에 화면엔 가려져있지만 사실 index.html이 있음


// 위에 <resources:~~~~/> 추가 때문에 html폴더를 리소스 폴더로 인식하고 리다이렉트시 해당 파일을 열수 가 있다.













'개발일지(Platform & Library) > Spring' 카테고리의 다른 글

6. Spring 기본 세팅 - 2 (테마 및 유효성 검사)  (0) 2016.09.28
4. Spring (개요 - 2) IOC 및 DI  (0) 2016.09.26
3. Spring (프로젝트 생성)  (0) 2016.09.26
2. Spring(개요)  (0) 2016.09.26
1. Spring(이해)  (0) 2016.09.26

1. IOC


객체를 만드는 부분(생성자를 호출)을 직접호출하지 않고 분리를 해서 별도의 클래스 또는 객체의 메서드가 생성자를 호출해서 리턴하도록 구현하는 경우


다른 클래스의 객체를 만드는 역할을 수행하는 메서드를 소유한 클래스를 팩토리 클래스 라고 하며 이러한 형태의 디자인 패턴을 팩토리 메서드 패턴이라고 합니다.


프로젝트의 facotry 패키지에 DaoFactory 클래스 생성



package factory;

import db.*; // 사용자 


public class DaoFactory {

static public GoodsDao create () {

 return new GoodsDao();

}

}


프로젝트 Main 클래스의 main 메서드 수정


import db.*;

import factory.*;

public class Main {

public static void main(Strinbg[] args)

{

GoodsDao dao = DaoFactory.create();

GoodsDto good = new GoodsDto();

good.setCode("010");

good.setTitle("grapefruit");

good.setManufacture("japan");

good.setPrice("3000");

dao.insertGoods(good)


GoodsDto dto = dao.get("001");

System.out.println(dto);

}

}




일반적인 프로그램에서의 제어는 오브젝트를 생성하고 그 오브젝트를 이용해서 작업을 수행하는 형태입니다.


제어의 역전이란 앞에서의 코드처럼 직접 객체를 생성하지 않고 다른 곳에서 생성해준 객체를 가지고 작업을 수행하는 방식입니다.


Eclipse 기반의 톰캣 컨테이너를 사용하는 프로젝트에서 서블릿은 메인 메서드가 없고 우리가 직접 생성자를 호출한 적도 없는데 서블릿 객체의 메소드가 호출되어있는데는 서블릿에 대한 제어권한을 가진 컨테이너가 적절한 시점에


서블릿 크래스의 오브젝트를 생성하고 그 안의 메서드를 호출하는 형태로 동작하기 때문인데 이러한 방식을


제어의 역전이라고 한다.


프레임워크나 Connection Pool  을 이용한 데이터베이스 활용도 제어의 역전을 활용한 예로 객체 생성시 객체의 생성자를 직접 호출하지 않습니다.


스프링에서는 스프링이 제어권을 가지고 생성하는 관계를 설정하는 오브젝트를 Bean 이라고 합니다.


스프링 빈은 스프링 컨테이너가 생성과 관계설정, 사용등을 제어해주는 제어의 역전이 적용된 오브젝트를 가리키는 단어 입니다.


스프링에서 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트를 빈 팩토리(Bean Factory)라고 한다.


Bean Factory 인터페이스


--- bean 객체를 관리하고 각 bean 객체간의 의존 관계를 설정해주는 기능을 제공하는 가장 단순한 인터페이스로 이 인터페이스를 implements 한 클래스로는 XmlBeanFactory 클래스가 존재 


--- 생성자의 Resource 인터페이스를 구현한 클래스의 객체를 대입해서 객체 생성

--- Resource 인터페이스를 구현한 클래스

--- --- FileSystemResource : 파일 시스템의 파일로부터 생성

--- --- InputStreamResource : InputStream 이용

--- --- ClassPathResource: 클래스 패스에서 읽어 나옵니다.

--- --- UrlResource : URL 에서 읽어옵니다.

--- --- ServletContextResource : 웹 애플리케이션의 루트 디렉토리에서 읽어 옵니다.


Resource 인터페이스를 implements 한 클래스의 객체 생성 후 getBean() 을 호출해서 설정된 bean 의 id를 넘겨주거나 여기에 추가로 리턴되는 클래스 이름을 넘겨서 bean 객체를 생성합니다.


BeanFactory 인터페이스만 구현한 클래스는 단순히 컨테이너 객체를 생성하고 DI를 처리해주는 기능만을 제공 합니다.


스프링에서 다양한 부가 기능(웹 개발, 메시지 처리...)을 사용하기 위해서 인데 이러한 기능사용시에는 ApplicationContext 인터페이스를 이용해야 한다.


ApplicationContext

--- BeanFactory 인터페이스를 상속한 인터페이스로 빈 객체 라이프 사이클, 파일과 같은 자원 처리 추상화, 메시지 지원 및 국제화 지원 , 이벤트 지원, xml 스키마 확장 등의 추가적인 기능을 제공하는 인터페이스


--- AnnotationConfigApplicationContext, GenericXmlApplicationContext 클래스가 ApplicationContext 인터페이스를 implements



WebApplicationContext

--- Web 프로젝트에서 사용가능 한 ApplicationContext 인터페이스 

--- ClassPathXmlApplicationContext, FileSystemXmlApplicatonContext, XmlWebApplicationContext, AnnotationConfigWebApplicationContext, 클래스가 implements 


--- 클래스를 이용하는 경우는 거의 없고 웹 애플리케이션에서 web.xml 파일의 설정을 통해 XmlWebApplicationContext 객체를 생성해서 사용하는 경우가 많음


--- --- --- --- --- Annotation 을 이용해서도 객체 생성이 가능한데 Factory 클래스 상단에 @Configuration 을 추가하고 Factory 메서드의 상단의 @Bean 을 추가한후 아래 클래스의 객체를 생성해서 getBean 을 호출 한다. 



@@@@ Annotation 을 이용한 ApplicationContext 활용 bean 생성


프로젝트의 DaoFactory 클래스 변경

package factory;


import db.*;

import org.springfraemwork.context.annotation.*;


@Configuration


public class DaoFactory {

@bean 

static public GoodsDao create()

{

return new GoodsDao();

}

}


// 해당 예제는 3.2.5 RELEASE 입니다. 후에 필요시 교체 



Main 클래스 변경


package db;


import org.sprignframework.context.annotation.AnnotationConfigApplicationContext;


public class Main {

                      public static void main(String[] args){

AnnotationConfigApplicationContext context = new 


AnnotationConfigApplicationContext(DaoFactory.class);

GoodsDao dao = context.getBean("create",GoodsDao.class);


GoodsDto dto = dao.get("001");


System.out.println(dto);

context.close();

}



}



앞에  예제와 같이 객체를 생성했을 때의 장점은 오브젝트가 생성 시점과 전략을 다르게 가져갈 수 있도록 해주고 의존관계 자동설정 및 오브젝트에 대한 사후 처리 정보의 조합, 

인터셉팅 등 오브젝트를 효과적으로 활용할 수 있도록 해주는 기능을 제공 한다.

--- ApplicationContext는 IoC 컨테이너면서도 Singleton을 저장하고 관리하는 Singleton 레지스트리이기도 합니다.


--- 특별한 설정을 하지 않으면 스프링에서 생성한 빈 오브젝트에서는 전부 Singleton 형태로 생성되고 매개변수가 없는 생성자(디폴트 생성자)를 이용해서 생성됩니다.


--- 싱글톤으로 생성하는 이유는 스프링이 구동되는 환경이 서버 환경일 가능성이 높기 때문입니다.


---  클라이언트의 요청이 올 때마다 각 로직을 담당하는 오브젝트를 새로 만들게 되면 너무나 많은 오브젝트를 생성하게 되       어서성능이 저하되기 때문이다.


<<<( ( 해당 싱글톤 패턴 의 경우는 디자인 패턴 프로그래밍에서 나타나는 패턴이므로 C++ 에서도 사용이 가능하다 )


**** ** Singleton 패턴을 만드는 방법

---  생성자를 private 으로 생성

---  자신과 같은 타입의 static 필드를 선언

---  static 필드의 팩토리 메서드인 getInstance 메서드를 생성해서 앞에서 만든 static 필드에 메모리를 할당하고 리턴하는 코드를 작성



****** Singleton 패턴의 한계

--- 상속할 수 없습니다.

--- 테스트가 어렵습니다.

--- Singleton 은 항상 전역의 개념을 가지고 있으모 바람직하지 않을수 있다. (상황에 맞춰서 잘 사용해야 함)


p 1 - 26


'개발일지(Platform & Library) > Spring' 카테고리의 다른 글

6. Spring 기본 세팅 - 2 (테마 및 유효성 검사)  (0) 2016.09.28
5. Spring 기본 세팅  (0) 2016.09.27
3. Spring (프로젝트 생성)  (0) 2016.09.26
2. Spring(개요)  (0) 2016.09.26
1. Spring(이해)  (0) 2016.09.26

일단 STS를 받아야 한다. 



// 글 작성시에 생성된 버전은 STS 3.8.1.RELEASE


https://spring.io/tools/sts/all 에 들어가서 버전에 맞는 STS를 받아서 설치 한다.



File -> New -> Spring Legacy Proejct 선택 




Project Name 을 입력 후 맨 아래에 Spring MVC Project 를 선택후 Next 를 선택 한다. 




그럼 해당 창이 나타나는데 여기서는 111.222.333 형식으로 작성 한다.


이후에 톰캣으로 테스트 할시 가리키는 프로젝트 명이 될수 있다. 


ex) kr.or.test 라고 작성시에 


localhost/test 로 사용해서 테스트를 진행할수 있기 때문에  기본 3개는 작성하여야 한다 (2개 1개 는 Finish 가 되지도않지만)



여기까지 작성후 Finish 할시 적상적인 MVC 프로젝트의 생성을 마친다. 


이 이후 설정은 다음장에서 보도록 한다. 


'개발일지(Platform & Library) > Spring' 카테고리의 다른 글

6. Spring 기본 세팅 - 2 (테마 및 유효성 검사)  (0) 2016.09.28
5. Spring 기본 세팅  (0) 2016.09.27
4. Spring (개요 - 2) IOC 및 DI  (0) 2016.09.26
2. Spring(개요)  (0) 2016.09.26
1. Spring(이해)  (0) 2016.09.26
특징
플랫폼 호환성 문제 해결
스프링은 JavaEE가 제공하는 다수의 기능을 지원하고 있기 때문에 JavaEE대체
스프링은 IoC(제어의 역전) 지원
스프링은 DI(dependency Injection)패턴을 지원
스프링은 AOP(Aspect Oriented Programming)지원
스프링은 POJO(Plain Old Java Object)지원
트랜잭션 처리를 위한 일관된 방법을 제공
영속성과 관련된 다양한 API제공

JDBC/ORM, iBatis, Hibernate, JPA등과 같은 프레임워크와의 연동을 지원


스프링 프레임워크의 모듈 


(spring-beans)

스프링 컨테이너를 이용해서 객체를 생성

(spring-context)

객체 생성, 라이프 사이클 처리, 스키마 확장

(spring-aop)

AOP 기능

(spring-web)

REST 클라이언트, 데이터 변환처리, 서블릿 필터, 파일 업로드 지원 

(spring-webmvc)

스프링 기반의 MVC 프레임 워크 

(spring-oxm)

XML 처리

(spring-tx)

트랜잭션 처리

(spring-jdbc)

데이터베이스 연동

(spring-orm)

하이버네이트,JPA, MyBatis등과 의 연동 지원 

(spring-context-suport)

스케줄링, 메일전송, 캐시연동, 벨로시티 등 










스프링 -> Spring Framework 


JAVA 를 위한 Open Source 애플리케이션 FrameWork



POJO (Plain Old Java Object) 자바 빈즈 객체를 의미



스프링 의 강세?

-> 크기와 부하의 측면에서 경량

-> IOC (제어 역행) 이라는 기술을 통해 애플리케이션의 느슨한 결함을 도모

-> AOP(Aspect-Oriented Programming 관점 지향 프로그래밍)

***AOP

객체지향(OOP) : 유지 보수성과 확장성

AOP는 OOP 의 프로그래밍을 지향하면서 유지보수를 좀 더 편리하게 하기 위한 방법

"재사용" 보다는 변화가 쉬운 컴포넌트 구조 


장점 ( 중복 되는 코드 제거 Unit Testing 의 편의성 , 유지보수의 향상)


-> 애플리케이션 객체의 생명 주기와 설정을 포함하고 관린한다는 점에서 일종의 컨테이너(Container)라고 할수 있음

-> 간단한 컴포넌트로 복잡한 애플리케이션을 구성하고 설정할 수 있음


!!! 스프링은 POJO방식의 프레임 워크 

!!! 스프링은 제어 반전(IOC: Inversion of Control)을 지원

컨트롤 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자 코드를 호출한다.

!!! 스프링은 의존성 주입(DI: Dependency Injection)을 지원

 각각 계층 혹은 서비스 의 의존성이 존재시 프레임 워크가 서로 연결 시켜준다.

!!! 스프링은 AOP 을 지원 (AOP: Aspect-Oriented Programming)을 지원


+ Recent posts