http://start.goodtime.co.kr/2013/06/%EC%83%88-%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%A0-%EB%95%8C-%EB%82%98%EC%9D%98-5%EB%B6%84-%EC%84%A4%EC%A0%95/
이클립스 처음설치했을때 5분안에 기본설정하기
2016년 10월 28일 금요일
2016년 10월 26일 수요일
component-scan / annotation-config / annotation-driven 차이점 + @Component
http://hamait.tistory.com/322
스프링컨테이너와 IOC, 스프링빈과 자바빈 차이
http://limmmee.tistory.com/13 퍼옴
스프링 프레임워크 2 - 컨테이너와 빈의 생명주기
자 그럼 이제 본격적으로 스프링 프레임워크에 대해서 얘기를 해 볼까?
어마어마한 두께를 자랑하며 한 장만 봐도 눈물을 흘린다는 스프링 입문서. 토비의 스프링에서는 이렇게 말한다.
스프링은 거대한 컨테이너임과 동시에 IoC/DI를 기반으로 하고 있는 거룩한 존재이며 서비스 추상화를 통해 삼위일체로 분리되는 3단 변신로봇이다. (응? 한글인데 무슨말인지 1도 모르겠다.)
음. 대충 보니, 컨테이너, IoC/DI 가 키워드인것 같군.
컨테이너란?
Spring은 하나의 프레임워크이다. 그런데 왜 Spring 컨테이너, IoC 컨테이너라는 말을 사용할까? 그렇다면 컨테이너의 정의는 무엇인가?
Servlet 컨테이너, EJB 컨테이너라고 말하는 것을 종종 들어봤을 것이다. 컨테이너는 보통 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하도록하는 것이라 할 수 있다.
다시말해, 컨테이너란 당신이 작성한 코드의 처리과정을 위임받은 독립적인 존재라고 생각하면 된다. 컨테이너는 적절한 설정만 되어있다면 누구의 도움없이도 프로그래머가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸을 컨트롤해준다.
Servlet 컨테이너는 Servlet의 생성, 생성 후 초기화, 서비스 실행, 소멸에 관한 모든 권한을 가지고 있다. 개발자들이 직접 Servlet을 생성하고 서비스하지는 않는다. 이처럼 Servlet 인스턴스에 대한 생명주기를 관리하는 기능을 가진다. 또한, Servlet 컨테이너의 web.xml을 보면 JSP/Servlet 접근 권한에 대한 추가적인 서비스도 지원하고 있다. 이는 Servlet의 구현과는 별도로 각 JSP/Servlet에 대한 Security를 관리해주는 기능을 한다.
스프링 컨테이너는 스프링 프레임워크의 핵심부에 위치하며, 종속객체 주입을 이용하여 애플리케이션을 구성하는 컴포넌트들을 관리한다.
다시 말하면, 프로그래머가 작성한 코드는 컨테이너를 사용하게 됨으로서 프로그래머의 손을 떠나 컨테이너의 영역으로 떠나버리게 된다. (정확히 말하자면 컨테이너가 맘대로 객체를 생성하는 게 아니라 프로그램을 이용하는 이용자의 호출에 의해 컨테이너가 동작하게 되는 구조이다.)
스프링 컨테이너의 두 종류
1. 빈팩토리 BeanFactory (org.springframework.beans.factory.BeanFactory)
DI의 기본사항을 제공하는 가장 단순한 컨테이너
팩토리 디자인 패턴을 구현한 것. Bean(이하 빈) 팩토리는 빈을 생성하고 분배하는 책임을 지는 클래스
빈 팩토리가 빈의 정의는 즉시 로딩하는 반면, 빈 자체가 필요하게 되기 전까지는 인스턴스화를 하지 않는다 (lazy loading, 게으른 호출)
BeanFactory factory = new XmlBeanFactory(new FileInputStream("bean.xml"));
MyBean myBean = (Mybean) factory.getBean("myBean");
|
getBean()이 호출되면, 팩토리는 의존성 주입을 이용해 빈을 인스턴스화하고 빈의 특성을 설정하기 시작. 여기서 빈의 일생이 시작된다.
2. 어플리케이션 컨텍스트 ApplicationContext (org.springframework.context.factory.BeanFactory)
빈팩토리와 유사한 기능을 제공하지만 좀 더 많은 기능을 제공하는 어플리케이션 컨텍스트
빈팩토리보다 더 추가적으로 제공하는 기능
- 국제화가 지원되는 텍스트 메시지를 관리해 준다.
- 이미지같은 파일 자원을 로드 할 수 있는 포괄적인 방법을 제공해준다.
- 리너스로 등록된 빈에게 이벤트 발생을 알려준다.
따라서 대부분의 애플리케이션에서는 빈팩토리보다는 어플리케이션 컨텍스트를 사용하는 것이 좋다.
가장 많이 사용되는 어플리케이션 컨텍스트 구현체
- ClassPathXmlApplicationContext : 클래스패스에 위치한 xml 파일에서 컨텐스트 정의 내용을 읽어들인다.
- FileSystemxmlApplicationContext : 파일 경로로 지정된 xml 파일에서 컨텐스트 정의 내용을 읽어들인다.
- XmlWebApplicationContext : 웹 어플리케이션에 포함된 xml 파일에서 컨텐스트 정의 내용을 읽어들인다.
ApplicationContext context = new ClassPathXmlApplicationContext("conf/bean.xml");
MyBean bean = context.getBean("myBean");
|
빈 팩토리와 애플리케이션컨텍스트의 기능상의 차이점 말고 또 다른 차이점은 다음과 같다.
빈 팩토리 : 처음으로 getBean()이 호출된 시점에서야 해당 빈을 생성(lazy loading)
애플리케이션 컨텍스트 : 컨텍스트 초기화 시점에 모든 싱글톤 빈을 미리 로드한 후 애플리케이션 기동 후에는 빈을 지연 없이 얻을 수 있음(미리 빈을 생성해 놓아 빈이 필요할 때 즉시 사용할 수 있도록 보장)
IoC (Inversion of Control, 제어의 역전)
IoC란 Inversion of Control의 약어이다. inversion은 사전적 의미로는 '도치, 역전'이다. 보통 IoC를 제어의 역전, 의존적 주입이라 번역한다.
역시, 한글인데 무슨말인지 이해가 안간다.
IoC 란 제어의 역전 즉 외부에서 제어를 한다는 것이다. 음 감이 딱 온다면, 당신은 천재!
맞다. IoC는 바로 컨테이너이다.
위에서 컨테이너를 설명하면서 말했던 것 처럼 기존에 자바 기반으로 어플리케이션을 개발할 때 자바 객체를 생성하고 서로간의 의존관계를 연결시키는 작업에 대한 제어권은 보통 개발되는 어플리케이션에 있었다. 그러나 Servlet, EJB등을 사용하는 경우 Servlet Container, EJB Container에게 제어권이 넘어가서 객체의 생명주기(라이프사이클)을 Container들이 전담하게 된다. 이처럼 IoC에서 이야기하는 제어권의 역전이란 객체의 생성에서부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것(IoC 컨테이너)을 의미 한다.
IoC와 DI의 관계
스프링 프레임워크의 가장 큰 장점으로 IoC 컨테이너 기능이 부각되어 있으나, IoC 기능은 스프링 프레임워크가 탄생하기 훨씬 이전부터 사용되던 개념이었다. 그러므로 "IoC 기능을 스프링 프레임워크의 장점이라고 이야기하는 것은 적합하지 않다"고 반론을 제기하면서 "새로운 개념을 사용하는 것이 적합하다"고 주장한 사람이 마틴 파울러이다. 경량 컨테이너들이 이야기하는 IoC를 DI라는 용어로 사용하는 것이 더 적합하다고 이야기하고 있다. 마틴 파울러의 이 같은 구분 이후 IoC 개념을 개발자들마다 다양한 방식으로 분류하고 있으나 다음 그림과 같이 IoC와 DI 간의 관계를 분류하는 것이 일반적이다.
+) 자바빈 VS 스프링 빈
자바 빈 : 데이터를 표현하는 것을 목적으로 하는 자바클래스이다. 컴포넌트와 비슷한 의미로 사용되기도 한다.
클래스에는 값을 저장하는 속성필드, get,set 메소드, 기본 생성자등을 포함하고 있다.
+) java.io.Serializable 인터페이스는 생략 가능하나 빈즈 규약에 명시된 내용으로 자바 빈즈에 저장된 프로퍼티를 포함한 채로 파일 시스템에 저장되거나 네트워크로 전송될 수 있도록 객체 직렬화를 제공해야 하므로 implements 한다.
스프링 빈 : 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트
http://limmmee.tistory.com/13
2016년 10월 20일 목요일
스프링 .properties 참조 방법
간단히 설명을 하면
1. web.xml 서버띄울때 필요한 정보 입력
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/applicationContext*.xml</param-value>
</context-param>
2. applicationContext*.xml 파일 내부 설정
<import resource="database.xml"/> <!--DB설정파일-->
<context:property-placeholder location="classpath*:properties/local.properties" />
추가)database.xml 예시파일
${db.mail.driverClassName}이와 같은 정보가 properties에 기입되어있다
<bean id="dataSource" class="해당 클리스" destroy-method="close">
<property name="driverClassName" value="${db.mail.driverClassName}" />
<property name="url" value="${db.mail.url}" />
<property name="username" value="${db.mail.username}" />
<property name="password" value="${db.mail.password}" />
<property name="maxActive" value="5" />
<property name="maxIdle" value="1" />
<property name="minIdle" value="1" />
<property name="maxWait" value="30000" />
<property name="defaultTransactionIsolation" value="1" />
</bean>
3. 설정후 자바와 jsp에서 properties 파일의 값을 읽는방법
java
@Value("${file_dir.url}")
private String fileUploadLo
jsp
<spring:eval var="httpsPort" expression="@applicationProperties.getProperty('port.https')" />
jsp에서 사용하긴 위해서 아래와 같이 bean id가 잡혀있어야함
<!-- Properties -->
<context:property-placeholder location="classpath*:properties/*-${spring.profiles.active}.properties" />
<bean id="applicationProperties" class="클래스명">
<property name="singleton" value="true" />
<property name="location" value="classpath:properties/local.properties" />
</bean>
상세내용은 아래를 참조
http://jijs.tistory.com/entry/spring-%EC%84%A4%EC%A0%95-xml%EA%B3%BC-%EC%86%8C%EC%8A%A4%EC%BD%94%EB%93%9C%EC%97%90%EC%84%9C-properties-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
1. web.xml 서버띄울때 필요한 정보 입력
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/applicationContext*.xml</param-value>
</context-param>
2. applicationContext*.xml 파일 내부 설정
<import resource="database.xml"/> <!--DB설정파일-->
<context:property-placeholder location="classpath*:properties/local.properties" />
추가)database.xml 예시파일
${db.mail.driverClassName}이와 같은 정보가 properties에 기입되어있다
<bean id="dataSource" class="해당 클리스" destroy-method="close">
<property name="driverClassName" value="${db.mail.driverClassName}" />
<property name="url" value="${db.mail.url}" />
<property name="username" value="${db.mail.username}" />
<property name="password" value="${db.mail.password}" />
<property name="maxActive" value="5" />
<property name="maxIdle" value="1" />
<property name="minIdle" value="1" />
<property name="maxWait" value="30000" />
<property name="defaultTransactionIsolation" value="1" />
</bean>
3. 설정후 자바와 jsp에서 properties 파일의 값을 읽는방법
java
@Value("${file_dir.url}")
private String fileUploadLo
jsp
<spring:eval var="httpsPort" expression="@applicationProperties.getProperty('port.https')" />
jsp에서 사용하긴 위해서 아래와 같이 bean id가 잡혀있어야함
<!-- Properties -->
<context:property-placeholder location="classpath*:properties/*-${spring.profiles.active}.properties" />
<bean id="applicationProperties" class="클래스명">
<property name="singleton" value="true" />
<property name="location" value="classpath:properties/local.properties" />
</bean>
상세내용은 아래를 참조
http://jijs.tistory.com/entry/spring-%EC%84%A4%EC%A0%95-xml%EA%B3%BC-%EC%86%8C%EC%8A%A4%EC%BD%94%EB%93%9C%EC%97%90%EC%84%9C-properties-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
스프링 .properties 참조 방법
간단히 설명을 하면
1. web.xml 서버띄울때 필요한 정보 입력
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/applicationContext*.xml</param-value>
</context-param>
2. applicationContext*.xml 파일 내부 설정
<import resource="database.xml"/> <!--DB설정파일-->
<context:property-placeholder location="classpath*:properties/local.properties" />
추가)database.xml 예시파일
${db.mail.driverClassName}이와 같은 정보가 properties에 기입되어있다
<bean id="dataSource" class="해당 클리스" destroy-method="close">
<property name="driverClassName" value="${db.mail.driverClassName}" />
<property name="url" value="${db.mail.url}" />
<property name="username" value="${db.mail.username}" />
<property name="password" value="${db.mail.password}" />
<property name="maxActive" value="5" />
<property name="maxIdle" value="1" />
<property name="minIdle" value="1" />
<property name="maxWait" value="30000" />
<property name="defaultTransactionIsolation" value="1" />
</bean>
3. 설정후 자바와 jsp에서 properties 파일의 값을 읽는방법
java
@Value("${file_dir.url}")
private String fileUploadLo
jsp
<spring:eval var="httpsPort" expression="@applicationProperties.getProperty('port.https')" />
상세내용은 아래를 참조
http://jijs.tistory.com/entry/spring-%EC%84%A4%EC%A0%95-xml%EA%B3%BC-%EC%86%8C%EC%8A%A4%EC%BD%94%EB%93%9C%EC%97%90%EC%84%9C-properties-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
1. web.xml 서버띄울때 필요한 정보 입력
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/applicationContext*.xml</param-value>
</context-param>
2. applicationContext*.xml 파일 내부 설정
<import resource="database.xml"/> <!--DB설정파일-->
<context:property-placeholder location="classpath*:properties/local.properties" />
추가)database.xml 예시파일
${db.mail.driverClassName}이와 같은 정보가 properties에 기입되어있다
<bean id="dataSource" class="해당 클리스" destroy-method="close">
<property name="driverClassName" value="${db.mail.driverClassName}" />
<property name="url" value="${db.mail.url}" />
<property name="username" value="${db.mail.username}" />
<property name="password" value="${db.mail.password}" />
<property name="maxActive" value="5" />
<property name="maxIdle" value="1" />
<property name="minIdle" value="1" />
<property name="maxWait" value="30000" />
<property name="defaultTransactionIsolation" value="1" />
</bean>
3. 설정후 자바와 jsp에서 properties 파일의 값을 읽는방법
java
@Value("${file_dir.url}")
private String fileUploadLo
jsp
<spring:eval var="httpsPort" expression="@applicationProperties.getProperty('port.https')" />
상세내용은 아래를 참조
http://jijs.tistory.com/entry/spring-%EC%84%A4%EC%A0%95-xml%EA%B3%BC-%EC%86%8C%EC%8A%A4%EC%BD%94%EB%93%9C%EC%97%90%EC%84%9C-properties-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
2016년 10월 18일 화요일
shell script , 리눅스 명령어
참조 SITE
http://blog.daum.net/99445015/171
RSYNC 정리
https://www.joinc.co.kr/w/Site/Tip/Rsync
서버점검명령어
top
vmstat
free -m
http://1828.tistory.com/entry/Linux-%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%98-%EC%A0%84%EC%B2%B4%EC%83%81%ED%83%9C%EB%A5%BC-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%9C%BC%EB%A1%9C-%ED%8C%8C%EC%95%85
배치목록명렁어
-각 계정별로 설정되어 있음
crontab -l
현재 사용유저 정보 명령어
id
http://blog.daum.net/99445015/171
RSYNC 정리
https://www.joinc.co.kr/w/Site/Tip/Rsync
서버점검명령어
top
vmstat
free -m
http://1828.tistory.com/entry/Linux-%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%98-%EC%A0%84%EC%B2%B4%EC%83%81%ED%83%9C%EB%A5%BC-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%9C%BC%EB%A1%9C-%ED%8C%8C%EC%95%85
배치목록명렁어
-각 계정별로 설정되어 있음
crontab -l
현재 사용유저 정보 명령어
id
2016년 10월 17일 월요일
extends 와 implements의 정의 퍼옴
http://oybso.tistory.com/entry/Java%EC%97%90%EC%84%9C-extends%EC%99%80-implements-%EC%9D%98-%EC%A0%95%EC%9D%98
엄청설명 잘 되있음
엄청설명 잘 되있음
2016년 10월 11일 화요일
2016년 10월 6일 목요일
spring:message 사용방법 및 메세지 다국어
참조
http://changpd.blogspot.kr/2013/05/localeresolver-messagesource.html
http://changpd.blogspot.kr/2013/05/localeresolver-messagesource.html
피드 구독하기:
글 (Atom)