'FRAMEWORK'에 해당되는 글 10건

  1. 2019.05.20 spring , spring boot 차이
  2. 2017.07.17 Spring Batch 개념
  3. 2017.05.18 [intelliJ] Spring boot 시작하기 -1 1
  4. 2016.10.05 스프링 환경설정 java 버전
  5. 2016.04.12 Spring scheduler 설정 및 사용
  6. 2015.10.20 스프링 이클립스 연동하기
  7. 2015.08.24 aop 예제
  8. 2015.08.23 aop

1. 스프링부트는 tomcat를 내장하면서, Servlet Container에 종속되던 Web Application이 역으로 

 Web Application에 Servlet Container에 종속되는 형태이다.

 

2. Dependency 간의 버전 호환성등으로 문제되던게 해결되었다 (spring-boot-starter.. )

3. 일반적으로 쓰이는 설정을 기본으로 제공한다.(별도로 설정하지 않으면 기본설정대로)

4. Micro service  구성의 용이함 (어플리케이션 환경을  쉽고 빠르게 구성함)

 

개인적인 견해

작은 규모의 어플리케이션을 실행하기 위해 어플리케이션보다 큰 WAS를 설치해야한다.

이렇게 비교적 규모가 작은 어플리케이션에 was 를 설치하는것은 효율적이지 않다

이런경우,

stand alone 스타일의 어플리케이션을 구동해야할 경우엔 스프링부트에서 제공되는 임베디드 컨테이너에서 자신의

어플리케이션을 실행시키는게 효율적일 수 있다.

그러나 규모가 큰 웹사이트에서는 MVC형태로 만들어 WAS에 배포하는 스타일이 낫다.

WAS에서 관리되는 데이터 소스나 메시지 서비스를 이용할수 있기 때문이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'FRAMEWORK > Spring Boot' 카테고리의 다른 글

[intelliJ] Spring boot 시작하기 -1  (1) 2017.05.18
Posted by 양승아
:

Spring Batch 개념

FRAMEWORK/Spring 2017. 7. 17. 16:55 |

Spring Batch 개념


- 데이타 프로세싱과 관련된 다양한 방법들을 설정으로 관리할 수 있으며 관련한 통계 정보를 제공(commit 개수, Rollbak, restart ..등)

- 다양한 실행 방법 지원 (command line, Quartz..)

- 각종 읽기와 쓰기 기능의 구성요소를 같은 인터페이스들로 추상화 시키고 있고, 그어 맞는 기본 구현 클래스 제공

- 추가 코딩없이 설정만으로 기존 모듈 활용 가능

- 유연한 Exception 처리





시스템 내의 Soc(Separation of Concern)을 위해 논리적으로 티어 구분을 한다. 

개념 적으로 구분했지만, 논리적인 컴포넌트 배포를 매핑할 때와 데이터 소스나 타겟과 통합하는데 효율적이다.


- Run 티어 : 스케줄링과 애플리케이션 실행에 관련

- Job 티어 : 일반적으로 배치 잡의 실행을 책임. 연속적으로 배치 Step 을 실행시키고 모든 Step 이 실행되서 정확한 상태에 있고 모든 정책이 정확하게 적용됐는지를 보장

- Application 티어 : 프로그램을 실행하는데 필요한 컴포넌트를 포함, 배치 기능을 수행하는데 적용되는 특정 태스크와 정책을 적용.

- Data 티어 : 데이터베이스, 파일, 큐들을 포함하는 물리적인 데이터 소스와 통합




구성요소 






Job 

하나의 배치작업을 정의, 예를 들어 "API 서버의 사용로그 테이블의 데이타를 로그 분석 시스템으로 옮기는 배치"


Job Instance

배치가 실제 실행되면, 각각의 실행을 Instance 라고 한다. 예를 들어 Batch Job이 매주 한번씩 수행된다고 할때 각각의 수행되는 Batch Job을 Batch Instance 라고 한다. 


Job Execution

배치가 실행될때, 각 배치의 실행시, 실제 수행된 Execution을 정의한다.

예를 들어 Batch job 이 월요일 오전에 수행되었을때, 첫번째 실패하고 두번째에 Retry에 의해 성공했다면 이 각각 다른 Job Execution이 실행되고, 같은 작업을 시도하였기 때문에 같은 Job instance 가 된다.


Job parameter

매번 배치 작업이 수행될때 마다 전달되는 Parameter 이다. 예를 들어 매주 수행되는 배치가 있을때, 시작 시간,데이타를 읽을 범위 들 지정하여 Batch Job Instance 를 생성한다면, 이렇게 넘어가는 인가가 JobParamer 이다




Spring 에서 Batch Job 구성


Step 

Spring 에서 Batch Job 은 Step의 모음으로 구성된다. Job 은 Step이 순차적으로 수행되게 된다.


Tasklet 

Tasklet은 각 Step 에서 수행되는 로직이다. 개발자가 custom logic 을 만들수 있고 또는 보통 Batch 의 경우 데이타를 ETL(Extract Transform Loading)하는 형태이기 때문에 ,Spring Batch에서 미리 정의해놓은 Reader, Processor, Writer interface 를 사용할 수 있다.


ItemReader - 데이타를 읽는 컴포넌트

ItemProcessor - 읽은 데이타 처리

ItemWriter - 처리한 데이타를 저장







'FRAMEWORK > Spring' 카테고리의 다른 글

스프링 환경설정 java 버전  (0) 2016.10.05
Spring scheduler 설정 및 사용  (0) 2016.04.12
스프링 이클립스 연동하기  (0) 2015.10.20
aop 예제  (0) 2015.08.24
aop  (0) 2015.08.23
Posted by 양승아
:

스프링 부트 시작하기(인텔리J사용)


특징

war파일을 사용하지 않고 내장된 embed tomcat 또는 jetty사용가능

Spring Boot 에서 지원하는 start pom 으로 Meven 또는 gradle 간단하게 사용

Spring의 수많은 설정을 자동으로 설정함 (xml설정 필요 없음),autoconfigure 


인텔리J에서 Spring Boot 프로젝트 생성하기

기술적인 관점에서 보면 스프링 MVC로 웹요청 처리, 뷰 템플릿으로 뷰정의, 스프링데이터 jpa로 데이터데이스에 독서 목록을 영속화,

데이터베이스는 일단 내장된  H2 사용하는 자바애플리케이션 코드작성하는 프로젝트 생성해보자.


인텔리J- new project 



인텔리J 에서 Spring Initializr 프로젝트 생성후

아래와 같이 type 에 메이븐 또는 그레이들 프로젝트를 선택한다.(양이는 그레이들 선택)



NEXT후 

Web, Thymeleaf, JPA, H2를 체크 하여 프로젝트 생성하면 완료!

갓 생성된 스프링부트 프로젝트 살펴보면

src/main/java 애플리케이션 코드 작성

src/main/resources 리소스 작성

src/test/resources 테스트 소스

(기존에 사용했던 Spring+gradle 과 같은 구조)


주요파일

build.gradle - 빌드 명세

gradlew - 그레이들 레퍼

DemoApplication.java - 애플리케이션의 부트스트랩 클래스이자 주 스프링 구성 클래스

application.properties - 애플리케이션과 스프링  부트 프로퍼티를 구성하는 데 사용하는 파일


DemoApplication.java 클래스

스프링의 구성 클래스이다.

스프링의 구성을 제거했지만 자동 구성을 활성화하는 최소한의 구성은 해야한다.

아래 코드보면 구성 코드는 단 한줄이다.

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}


@SpringBootApplication 은 스프링 컴포넌트 검색, 스프링부트 자동 구성을 활성화한다. 

@SpringBootApplication 은 @Configuration(스프링의자바기반구성클래스 의미), @ComponentScan(검포넌트 검색 기능 활성화,클래스 자동 검색),@EnableAutoConfiguration(자동설정 활성화) 가 포함되어 있는 어노테이션이다. 

이전에는 이세개의 어노테이션을 붙여야 했지만 스프링부트 버젼이 올라가면서   @SpringBootApplication 하나면 충분하다.


main()메소드에서 해당 클래스 참조 하여 StringApplicaion.run 메소드 전달하여 애플리케이션을 실행할 수 있게 한다.

아직 애플리케이션을 하나도 작성하지 않았지만 애플리케이션을 빌드하고 실행 가능.


빌드(인텔리J커멘트창 이용) 

$ gradle bootRun 

(스프링부트 그레이들 플러그인 포함)

  

gradle build

$ java -jar build/libs/readinglist-0.0.1-SNAPSHOT.jar 

(그레이드 빌드후 자바명령으로 실행가능)


명령 실행후 애플리케이션 정상적으로 작동 (localhost:8080 으로 확인하면 404 NotFoundError 페이지 나타나게됨)

양이는 톰캣 로컬 지정하고 셋팅하여 진행하였음.



application.properties 

초기 셋팅시 파일은 완전히 비어있음.

이파일은 선택적이므로 미사용시 파일 삭제해도 무관하다.

잠깐 프로퍼티를 살짝 건드려보자.

server.port=8000

추가하면 내장 톰캣서버가 기본 포트 8080 포트로 수신 대기하게 된다.

다시 실행하면 8000으로 변경된걸 확인할수 있다.

(중요중요)application.properties를 로드하라고 스프링부트에 명시적으로 요청한 적이 없다는 점!!

application.properties가 존재하면 스프링부트가 자동으로 이 파일을 로드하고 그 안에 프로퍼티를 스프링과 애플리케이션 코드를 구성하는 사용할 수 있게 한다.



스프링부트 프로젝트 빌드 파일(build.gradle)

buildscript {
ext {
springBootVersion = '1.5.3.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {//스프링부트 의존성
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot' //스프링부트 플러그인 적용

version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.7

repositories {
mavenCentral()
}


dependencies {
compile('org.springframework.boot:spring-boot-starter-data-jpa') //스타터 의존성
compile('org.springframework.boot:spring-boot-starter-freemarker')
compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.0')
compile('org.springframework.boot:spring-boot-starter-thymeleaf')
compile('org.springframework.boot:spring-boot-starter-web')
runtime('com.h2database:h2')
testCompile('org.springframework.boot:spring-boot-starter-test')
}

빌드파일을 살펴보면 스프링 애플리케이션과 크게 다르지 않다는걸 알 수있다.

다만 스프링부트로 개발할 때는 빌드에 푸가로 도움을 주는 세부적인 옵션을 사용한다.


여기까지 스프링부트 갓 생성한 초기 프로젝트에 대해 알아보았다.

'FRAMEWORK > Spring Boot' 카테고리의 다른 글

spring , spring boot 차이  (0) 2019.05.20
Posted by 양승아
:

스프링 환경설정 java 버전 


흔히 스프링 환경설정을 xml 파일에 bean 사용하여 설정한다고 생각한다.

하지만 DB 설정만 보더라고 ip,user,password 가 xml에 그대로 노출되기 쉽다. (혹은 paramer클래스 사용)

파라미터로 사용자가 암호화된 값을 넣으면 set 메소드 내부에서는 암호화 된값을 decrypt 작업을 거처 암호화전의

데이터를 만든뒤 클래스 맴버변수에 셋팅한다. 이럴 경우 기존 클래스를 상속받은 새로운 클래스를 계속 생성해야되는

상황이 생긴다. 

기존클래스의 상속받은 새로운 클래스를 만들지 않고 기존 클래스 사용하면서 이러한 설정 정보를 java 코드에 넣어

구현한다면 늘어나는 클래스없이 관리하기 용이하다.



java 클래스가 Spring 환경설정 클래스라는것을 알려주기 위해  

@Configuration  사용

@Bean  어노테이션을 함수위에 언급함으로써 이함수는 Spring에서 사용하는  Bean을 리턴해준다는 것을 언급한다.


위의 어노테이션을 Spring이 읽을수 있게 하려면 환경설정 xml 에 어노테이션을 include 해주면 된다.



'FRAMEWORK > Spring' 카테고리의 다른 글

Spring Batch 개념  (0) 2017.07.17
Spring scheduler 설정 및 사용  (0) 2016.04.12
스프링 이클립스 연동하기  (0) 2015.10.20
aop 예제  (0) 2015.08.24
aop  (0) 2015.08.23
Posted by 양승아
:

mvc - config.xml 환경설정에 bean task 추가,xsi 추가한다.





task beans 태그의 자식태그 추가(id : scheduler 연동)






 @scheduled 어노테이션을 확인해보면 expression이 존재 합니다.
 간단히 설명 하면

  "*" 표시는 항상/모두 를 의미하는 expression
 
 0 20 10 *  *  *
   분   년도 


[참고]스케쥴러 cron 양식

 

초 0-59 , - * / 

분 0-59 , - * / 

시 0-23 , - * / 

일 1-31 , - * ? / L W

월 1-12 or JAN-DEC , - * / 

요일 1-7 or SUN-SAT , - * ? / L # 

년(옵션) 1970-2099 , - * /

* : 모든 값

? : 특정 값 없음

- : 범위 지정에 사용

, : 여러 값 지정 구분에 사용

/ : 초기값과 증가치 설정에 사용

L : 지정할 수 있는 범위의 마지막 값

W : 월~금요일 또는 가장 가까운 월/금요일

# : 몇 번째 무슨 요일 2#1 => 첫 번째 월요일



'FRAMEWORK > Spring' 카테고리의 다른 글

Spring Batch 개념  (0) 2017.07.17
스프링 환경설정 java 버전  (0) 2016.10.05
스프링 이클립스 연동하기  (0) 2015.10.20
aop 예제  (0) 2015.08.24
aop  (0) 2015.08.23
Posted by 양승아
:

이클립스에 스프링 연동하기


1. 이클립스에서 Spring framewowrk 다운받기

이클립스 위에 help -> Eclipse marketplace 클릭



2. 마켓에서  STS 검색

Spring Tool Suit (STS) for Eclipse 3.7.1.RELEASE 를 install  




3. 스프링 프로젝트 생성

우클릭 - New - Spring Project 




4. pox.xml 파일 확인 (Spring 버전확인)

버전 변경이 Spring 레퍼런스 페이지 참고하여 박스 부분 변경하면 됨.!


끝~!!

'FRAMEWORK > Spring' 카테고리의 다른 글

스프링 환경설정 java 버전  (0) 2016.10.05
Spring scheduler 설정 및 사용  (0) 2016.04.12
aop 예제  (0) 2015.08.24
aop  (0) 2015.08.23
Spring @PathVariable 이용하여 parameter 를 url 형식으로 받기  (0) 2015.08.13
Posted by 양승아
:

aop 예제

FRAMEWORK/Spring 2015. 8. 24. 19:30 |

AOP 예제 

 

XML 형식 aop 

sevlet-context.xml 에 

맨위 <beans>에 xmlns:aop="http://www.springframework.org/schema/aop" 추가 한다.


	<!-- XML 형식의 AOP -->
	<beans:bean id="loggingAspect" class="com.iuom.www.aop.LoggingAspect"/>
	
	<aop:config>
	    <aop:pointcut expression="execution(* com.iuom.www..*DAO.*(..))" id="loggingAspectPointCut"/>
	    <aop:aspect ref="loggingAspect">
	        <aop:before method="beforeMethod" pointcut-ref="loggingAspectPointCut"/>
	        <aop:after method="afterMethod" pointcut-ref="loggingAspectPointCut"/>
	        <aop:after-throwing method="errorMethod" throwing="exception" pointcut-ref="loggingAspectPointCut" />
	    </aop:aspect>
	</aop:config>



com.iuom.www..*DAO.*(..)) 이하에 모든 클래스에 pointcut 지정


com.iuom.www..*DAO.*(..)) 이하 클래스는 메소드를 실행하기전에 

aop:before 어드바이스에 의해  loggingAspect 의  beforeMethod 메소드 실행


com.iuom.www..*DAO.*(..)) 이하 클래스는 메소드 실행후

aop:after 어드바이스에 의해 loggingAspect의 afterMethod 실행


aop:after-throwing 에 의해 com.iuom.www..*DAO.*(..) 이하 모든 클래스 메소드가 실행후 에러가 나면

loggingAspect 의 errorMethod 실행




어노테이션 이용한 AOP

@Aspect
@Configuration
public class LoggingAnnotation {

	final private Logger logger = LoggerFactory.getLogger(LoggingAspect.class);
	
	@Pointcut("execution(* com.iuom.www..*Service.*(..))")
	private void pointMethod() {}
	
	@Before("pointMethod()")
	public void testMethod() {
		logger.info("Aspect 로그 Service 체크 시작 ----->");
	}
}




'FRAMEWORK > Spring' 카테고리의 다른 글

Spring scheduler 설정 및 사용  (0) 2016.04.12
스프링 이클립스 연동하기  (0) 2015.10.20
aop  (0) 2015.08.23
Spring @PathVariable 이용하여 parameter 를 url 형식으로 받기  (0) 2015.08.13
[Spring] ehcache 캐싱하기  (0) 2015.08.12
Posted by 양승아
:

aop

FRAMEWORK/Spring 2015. 8. 23. 14:29 |

aop

-기능을 핵심 비지니스 로직과 공통 모듈로 구분하고, 핵심 로직에 영향을 미치지 않고 사이사이에 공통모듈을 효과적으로 잘 끼어 넣도록 잘 끼워넣도록 하는 개발 방법이다.

공통 모듈(보안,로깅 등) 만든후 코드밖에서 이 모듈을 비스니스로직에 삽입하는게 바로 aop 적인 개발

코드 밖에 설정된다는 것이 핵심!


aop 가 사용되는 경우

-간단한 메소드 성능 검사

-트랜잭션 처리

-예외 반환

-아키텍쳐검증

-동기화문제

-락 설정

-예외를 만났을때 재시도하는 애스텍트

-로깅,인증,권한


aop의 구성요소

-조인포인트(joinPoint) : 횡단 관심 모듈의 기능이 삽입되어 동작할 수 있는 실행 가능한 특정위치

-포인트컷(pointCut): 어떤 클래스의 어느 조인토인트를 사용할 것인지를 결정하는 선택 기능

-어드바이스 또는 인터셉터 : 어드바이스는 각 조인포인트에 삽입되어져 동작할 수 있는 코드

인터셉터 : 인터셉터 제인 방식의 aop 툴에서 사용하는 용어로 주로 한 개의 invoke메소드를 가지는

어드바이스의 종류

before advice : 메소드 실행전에 적용되는 실행

after returning advice : 메서드가 정상적으로 실행된 후에 실행(예외를 던지는 상황은 정상적인 상황에서 제외)

after throwing advice : 예외를 발생시킬 때 적용되는 Advice를 정의

Around advice : 메서드 호출 이전, 이후, 예외 발생 등 모든시점에서 적용 가능한 advice 를 정의


-위빙(weaving) 또는 크로스컷팅(crossCutting)

:포인트컷에 의해서 결정된 조인포인트에 지정된 어드바이스를 삽입하는 과정(다른 말로 크로스컷팅)

위빙은 aop가 기존의 핵심 관심 모듈의 코드에 전혀 영향을 주지 않으면서 필요한 횡단 관심 기능 추가할 수 있게 해주는 핵심적인 처리과정이다.

위빙을 처리하는 방법은 후처리기를 통한 코드생성 기술을 통한 방법부터 특별한 컴파일러 사용하는 것

이미 생성된 클래스의 정적인 바이트코드의 변환 또는 실행 중 클래스로더를 통한 실시간 바이트코드 변환

그리고 다이내믹 프록시를 통한 방법까지 매우 다양


-인트로덕션 또는 인터타입선언

:인트로덕션은 정적인 방식의 aop기술

동적인 aop장식을 사용하면 코드의 조인포인트에 어드바이스를 적용해서 핵심관심토드의 동작을 변경할수 없음

인트로덕션은 이에 반해서 기존의 클래스와 인터페이스에 필요한 메소드나 필드를 추가해서 사용할 수있음

oop에서 말하는 오브젝트의 상속이나 확장과는 다른 방식으로 어드바이스 또는 애스팩스를 이용해서

기존클래스에 없는 인터페이스 등을 다이내믹하게 구현해 줄 수 있다.


-애스팩트(aspect)

: 포인트 컷(어디에서) +어드바이스(무엇을할지)+(필요에따라 인트로덕션도포함)

aspect J 와 같은 자바 언어를 확장한 aop에서는 마치 자바의 클래스처럼 에스팩트를 코드로 작성할 수 있다.aop 툴의 종류에 따다서 어드바이와 포인트컷을 각각 일반 자바 클래스로 작성하고 이를 결합한 어드바이저 클래스를 만들어서 사용하는 방법도 있음.



aop 설정 구조


<aop:config>

<aop:pointcut>  :pointcout 설정

<aop:aspect> : aspect 설정

<aop:before> : method 실행 전

<aop:after-returning /> : method 정상 실행 후

<aop:after-throwing /> : method 예외 발생 시

<aop:after /> : method 실행 후 (예외 발생 예부 상관 없음)

<aop:around /> : 모든 시점 적용 가능

</aop:before>

</aop:aspect>

</aop:config>




Posted by 양승아
: