2016년 2월 7일 일요일

아마존 AWS 무료서버 사용하기

Amazon web services(AWS)에서 서버호스팅서비스 무료로 이용하기
1.     AWS 소개
우선 아마존사이트 서울 리젼 서비스를 이용하기위해 처음 할일은 aws사이트를 찾는것이다.
구글에서 “amazon aws”를 치면 다음과 같이 검색이 되는데 “Ad”태그가 걸린 첫번째 링크를 클릭한다.


링크를 클릭하면 다음과 같은 페이지가 나오는데 이게 서울 region에서 제공하는 AWS이다. 내용을 읽어보면,
1. AWS 프리티어는 체험을 위해서 12개월 무료서비스를 한다는 내용이 나온다.
2. 우측상단의 가입버튼을 통해 가입한다.
è 가입하기 전에 어떤 서비스가 있는지 확인을 해본다.
1.     Amazon EC2
가상서버호스팅이고 리눅스, 윈도우를 선택가능하고 월 750시간 12개월간 무료이다.
인스턴스 1개로 750시간 2개로 375시간. 가입하면 클라우드 컴퓨터 1대를 1년간 사용할수있다는 말이다.
2.     Amazon S3
데이터 스토리지서비스 5G용량이 무료이고 그 이상은 추가비용이 필요.
3.     Amazon DynamoDB
NoSQL DB서비스를 사용할 수 있다. 25G용량에 대해 무료이다.
4.     AWS IoT
사물인터넷서비스
5.     Amazon EC2 Container Rgistry
SaaS(Software as a Service)에 해당하는 서비스. 활용기회는 없어 보이므로 이하 생략.
2.     AWS 계정생성
일단 무료계정생성을 클릭한다.

다음과 같은 가입 또는 로그인화면이 나오는데 계정이 있으면 로그인, 없으면 새 사용자임을 선택하고 가입한다.

가입후 로그인하면 나오는 첫화면. 우측상단 가운데메뉴에서 Asia Pacific(Seoul)을 선택한다. 또는 그 외 원하는 지역을 선택한다.
*****주의할 것은 서울만 이벤트기간으로 무료이고 이외의 지역은 유료라는 것이다. 계정을 등록할 때 같이 등록한 카드정보로 자동결제가 되므로 지역을 반드시 서울로 해야 한다!!!
Amazon Web Services이하 많은 서비스기능이 나열되어있는데, 우리가 필요한건 첫번째 항목 EC2이다. 클릭하도록 한다.

3.     AWS EC2 관리화면
EC2를 클릭하면 다음과 같은 관리화면이 나온다. 내가 사용하려는 클라우드 컴퓨터를 이 화면을 통해 설정하고 모니터링 등 관리를 한다.
필요한 메뉴를 확인해본다.
-       Instances: 내가 사용할 수 있는 클라우드 가상 컴퓨터단위를 인스턴스라고 하고 내가 생성한 가상컴퓨터를 관리한다.
-       Network & Security >> security groups: 가상컴퓨터 접속에 필요한 보안정책을 관리할 보안그룹. 그룹별로 접근을 관리할 방화벽을 설정한다.
-       Network & Security >> Key Pairs : 내가 접속할 가상컴퓨터 계정의 비번을 관리할 암호키을 관리한다.
이외의 메뉴는 당장은 필요하지 않은 것들로 추후 가상컴퓨터를 관리하며 알아가기로 한다.

4.     가상컴퓨터 생성
내가 사용할 가상컴퓨터를 AWS에서 할당받기 위해서는, 좌측목록에서 가상컴퓨터를 직접관리할 instances 메뉴를 선택한다. Instances 화면은 다음과 같은데, 각 기능을 살펴보면
-       Launch Instance : 가상컴퓨터를 할당받음. 제일 먼저 할 작업이다.
-       Connect : 할당받은 가상컴퓨터를 원격접속한다.
-       Actions: 그외 수행할 기능들을 모아둔 메뉴목록으로
n  Connect : 위와 동일 메뉴
n  Get Windows Password: 원격접속할때 비번을 할당받음
n  Launch More Like This: 할당받은 가상컴퓨터를 복제하여 재할당받음
n  Instance Status : Start(윈도우 시작) Stop(중지: 현재상태에서 홀딩), Reboot(재시작), Terminate(윈도우 종료)

n  Networking : 원격접속관련한 네트웍 설정
Change Security Groups : 다른 보안그룹으로 할당. 이하 3개메뉴는 당장 알 필요가 없다.
Attach Network Interface : 랜설정을 변경
Change Source/Dest. Check 네트웍상에 데이터 처리방향을 지정(디폴트로만 둘것)
Manage Private IP Addresses 내부아이피관리


필수적으로 알아야 할 메뉴에 대해 간략하게 확인했고, 이제 가상컴퓨터(Instance)를 다음과 같은 순서로 생성한다.
4.1.  Launch Instance 클릭
클릭하면 다음과 같이 Amazon Machine Image(AMI) 준비된 클라우드 컴퓨터 이미지를 선택하는 화면이 나온다.


메인목록에 나오는 것처럼 Linux들과 windows들 그리고 선택할 각각 Sql Server Amazon RDS같은 DB 포함 불포함 등의 목록이 있다. 여기서 로 되어있는 것만 무료인데, 좌측 를 선택하면 무료로 제공되는 것들만 다시 목록으로 나온다. 이중 윈도우는 Windows Server 2003 R2, 2008, 2008 R2, 2012, 2012 R2 버전이 제공되는데 무엇을 하더라도 크게 상관은 없고, 2003의 경우 32/64bit 여부만 확인한다. 일단은 2008 R2를 선택하기로 한다.
4.2.  Instance type선택
그 다음은 컴퓨터의 사양을 선택해야 하는데 Instance Type의 목적 즉 일반용, 계산용최적화, 메모리 최적화, 저장소최적화로 구분되는데 무료로 선택할 수 있는 것은 일반용밖에 없다.
이경우 cpu1, 메모리 1기가, Amazon Elastic Block Store(EBS) 30기가가 제공된다.

*** 앞서도 언급했지만, 서울지역만 무료이벤트를 하므로 서울지역으로 설정했는지 반드시 확인한다. 혹시 실수로 결제가 되었는지 확인하고 싶으면 우측상단 “Billing & Cost Management에서 확인한다.

선택내용을 확인후 우측하단 “Next: Configure Instance Details”를 클릭한다.
4.3.  Instance 상세 설정

여기서는 인스턴스 개수, 네트웍설정, IAM role(권한설정), 그외 감시기능 종료방식등을 설정하는데, 특별한 AWS API를 쓰지 않으면 디폴트로 둘 내용들이다. 또 별도 설정에 추가비용이 들어가는 것(Additional Charges)들이 있으므로 디폴트로 확인만 하고 우측하단의 “Next: Add Storage”를 클릭한다.
4.4.  스토리지 추가
먼저 언급했듯이 EBS라는 아마존 특화된 스토리지 30기가를 기본으로 받는다. 용량추가는 유료이다.

디폴트 설정을 확인만 하고 다음 “Next: Tag Instance”를 클릭한다.

4.5.  Tag instance
등록한 instance를 관리하기 위해, 가상컴퓨터이름에 별도의 태그명을 부여하여 관리하는 것으로 무료로 1,2개 등록하는 것이라면 불필요한 기능이다.
굳이 사용한다면 Tag Value는 등록한 instance 명을 쓰고 Tag Key에 관리하려는 name을 부여한다. 다음 “Next: Configure Security Group”을 클릭한다.


4.6.  보안그룹 설정
윈도우에서 방화벽설정하는 것과 같이 등록한 가상컴퓨터의 접속 방화벽규칙을 등록한다.
가상방화벽에서 외부로 나가는(Outbound) 것에 대해서는 할 필요가 없다. 대신 외부에서 가가상컴퓨터 들어오는 것은 기본적으로 막혀져있기 때문에 원하는 포트 및 프로토콜을 지정해서 등록해주어야 한다. 다음과 같이 “All traffic” type으로 지정된 default보안그룹이 있고, 필요한 포트를 열도록 추가적인 보안그룹을 등록해야 한다.

예를 들어 가상컴퓨터에 웹서버를 구축하는데 http 80포트를 쓰겠다고 하면, 다음과 같이 “Create a new security group”을 선택하고 HTTP type 80포트를 지정해서 등록한다.(“Add Rule”을 클릭)

가상컴퓨터에 원격접속해야 하므로 다음과 같이 원격접속프로토콜인 RDP type으로 보안그룹을 등록해야 한다.

RDP타입 보안그룹 등록을 한후 다음과 같이 default 보안그룹 RDP타입의 보안그룹 2개를 선택하고 다음 단계인 “Review and Launch”를 클릭한다.
** 웹서버가 필요한 경우 앞서 언급한것처럼 HTTP 타입의 보안그룹을 추가한다.
4.7.  인스턴스 기동 리뷰
등록한 내역을 다음과 같이 확인하고 최종 “Launch”를 클릭하여 가상컴퓨터를 기동한다.



4.8.  공개키 생성
앞서 Launch 버튼을 클릭하면 다음과 같이 key pair를 선택하라는 팝업이 뜬다.

AWS 접속보안은 공인인증에서처럼 공개키/개인키 관리방식을 사용하는데,
팝업의 선택박스를 클릭하면 “Choose an existing key pair”, “Create a new key pair”, “Proceed without a key pair” 3가지 선택항목이 나오는데, 최초로 윈도우로 접속하려면 administrator계정의 비번을 알아야 하는데 키를 생성하고 이 키값으로 비번을 받기 때문에 반드시 키쌍을 생성하는 것(Create a new key pair)을 선택하도록 한다.

키 생성을 선택하면 위의 그림처럼 key pair name을 입력창, “download key pair”버튼이 나오는데, key pair name을 정해서 입력하고 버튼을 클릭하면 key pair name으로 *.pem파일이 다운로드된다. 다운로드한 pem 파일은 가상컴퓨터 기동후 adminitrator의 비번을 할당받을 때 사용되므로 잘 보관하도록 한다.
다운로드한 pem파일을 별도 보관하고 Launch Instance버튼을 클릭한다.

4.9.  기동후 상태

“Your instances are now launcing”, “Get notified of estimated charges” 등록한 가상컴퓨터가 기동되고 있고, 예상결제금액은 통지된다는 메시지가 뜨면(물론 무료지만..) 정상적으로 등록 기동된것이다. 우측하단 “View Instance”를 클릭하여 상태를 확인한다.


화면상의 2번째가 막 등록한 가상컴퓨터이고, Name항목이 비어있는데 tag등록을 하지 않아 그런 것이고 tag등록을 하면 다른 항목처럼 tag keyName으로 나온다.

5.     가상컴퓨터 접속
5.1.  윈도우 비번 받기
이제 기동된 가상컴퓨터를 접속을 해야 하는데, 우선 할 것은 비번을 받아내는 것이다.
Instance상태 창에서 상단 Actions>>Get Windows Password를 선택하여 윈도우 비번을 받아낸다.


“Get Windows Password”를 클릭하면 다음과 같은 팝업이 뜨는데, 앞서 생성한 키쌍을 찾는 메시지가 나온다.

Choose file을 클릭하여 키쌍을 생성했을 때 받은 pem파일을 선택하거나, pem파일의 내용을 하단 edit창에 붙여넣기를 하도록 한다.
그리고 “Decrypt Password”를 누르면 다음과 같이 가상컴퓨터의 DNS, Administrator계정, 해당 비번이 나온다. 이 비번으로 원격접속을 할 수 있는데 접속 후 비번을 가급적 변경하고 비번을 따로 보관하도록한다.



5.2.  원격접속
인스턴스 상태관리화면에서 상단 “connect”를 클릭한다.


클릭하면 다음과 같이 “Download Remote Desktop File”을 클릭하여 원격접속 단축키파일을 만들어 접속할 수 있다.
또는 “Connect”를 접속하지 않고, 윈도우 시작메뉴>>보조프로그램>>원격 데스크톱 연결을 클릭하여 직접 연결해도 된다.
여기서는 “Download Remote Dsektop file”을 클릭하여 다운받은 *.rdp파일을 클릭하여 다음과 같이 연결하도록 한다.
다음 로그인화면에서 먼저 할당받은 비번을 입력한다.

원격컴퓨터의 인증서를 확인할수 없다는 메시지가 나오는데 무시하고 예를 클릭한다.


5.3.  원격 컴퓨터 접속화면
접속한 화면은 다음과 같은데, 우리가 알고 있던 윈도우와는 차이가 있으나, 기본적인 윈도우 탐색기, 도스창은 모두 있고
탐색기를 통해 확인해보면 C드라이버로 30기가가 할당되어있는 것을 확인할 수있다.

5.4.  원격 컴퓨터 관리
원격컴퓨터는 끄기를 하거나 AWS Instance 상태관리창에서 Actions>>Instance State >> Terminate를 클릭해 끌 수 있다. 추가적인 기능을 구입하지 않으면 앞으로 1년간 무료로 사용할수있다.


2014년 3월 10일 월요일

제 2 장. Spring Batch 2.2의 새로운 특징

 2 .  Spring Batch 2.2 새로운 특징
Spring Batch 2.2 release 6가지 주요 테마로 구성된다:
  • Spring Data Integration
  • Java Configuration
  • Spring Retry
  • Job Parameters
2.1. Spring Data Integration
Spring Batch 2.0 출시 이후, Spring Data project Spring NoSQL 동향에 대한 지원을 해왔다. Spring Batch 2.2 출시 버전에 Spring Data추상화를 통해 MongoDB, Neo4j, Gemfire 네이티브 기능 가능하도록 지원했다.
2.2 버전은 사용자정의 Spring Data Repository 사용자가 직접 작성할수 있는 기능도 지원했다. RepositoryItemReader RepositoryItemWriter는 각각 repository implementation (각각 PagingAndSortingRepository CrudRepository) 감싸 영구 데이터와 데이터를 주고받는다.
2.2. Java Configuration
버전 2.2.0이전에는 job 설정하는 옵션은 수작업을 하거나 batch DSL(dsl파일)방식으로 XML설정밖에 없었다. 그러나 2.2.0버전에서  Job 정의하는데 자바기반 설정이 추가되었다. 신규 설정옵션을 지원하기 위해 annotation builder클래스가 추가되었다. 다음은 이전에 정의하던 방식이다:
   

   
       
       
   

   

   
       
   
   
이젠 @EnableBatchProcessing annotation 통해 설정가능하고 다음과 같이 JobBuilderFactory StepBuilderFactory를 통해 자바기반설정이 지원된다:
 @Configuration
 @EnableBatchProcessing
 @Import(DataSourceCnfiguration.class)
 public class AppConfig {

     @Autowired
      private JobBuilderFactory jobs;

     @Bean
     public Job job() {
          return jobs.get("myJob").start(step1()).next(step2()).build();
     }

     @Bean
     protected Step step1() {
          ...
     }

     @Bean
     protected Step step2() {
          ...
     }
}
많은 공통클래스들이 @EnableBatchProcessing annotation 참조하는데 기본적으로 autowiring 가능하다. 공통클래스들은  JobRepsitoryJobLauncherJobRegistryPlatformTransactionManager,JobBuilderFactory, StepBuilderFactory 등이 있다. Job step 새로운 자바 설정방식으로 설정하는 방법은 4.2 “Java Config” 나와있다.
2.3. Spring Retry
The ability to retry an operation via the RetryTemplate으로 동작을 재시도하는 기능은 원래부터Spring Batch 특성이다. 하지만 기능은 예를 들어 통합Spring같은 다른 프레임웍에서는 아주 유용한 특성으로 인식되어 2.2.0버전 출시때, 재시도로직은Spring Retry라는 자체 라이브러리로 따로 분리되었다. 변경으로 2가지 주요 영향도가 발생했는데, 하나는 org.springframework.batch.retry 패키지를 대부분 신규 라이브러리로 옮긴것과, 패키지명에 “batch” org.springframework.retry로 바꿨다는 것이다.
2.4. Job Parameters
Spring Batch 2.2.0 출시이전에는 job execution으로 전달되는 인자가 job구분자값으로 사용되었다. 때문에 job 재실행하려면 인자 값이 변경될 없도록 한정되는 문제가 생겼다. 경우를 수용하기 위해 2.2.0 job인자를 job구분자값으로 쓰도록 하는 방식을 들였다.
기본적으로 2.2.0에서 job 인자는 아직까지는 구분자값으로 쓰인다. 하지만, Spring Batch 이제부터 사용자가 인자를 job인스턴스구분에 써도 되도록 하고 있다. 변경사항을 지원하기 위해 batch 도메인모델이 변경되었다. 2.2.0이전에는 job 인자값은 JobInstance와 관계를 맺었었다. 2.2.0이후부터는 , JobExecution과 관계를 맺는 것으로 변경되었다. 변경사항에 따라 job repository database 스키마도 변경도 필요하다.

원문

2014년 3월 8일 토요일

제1장. 스프링배치(spring batch) 소개

제1장.    스프링배치 소개
기업영역은 필수 업무 환경에서 대량처리가 수반되는 애플리케이션을 많이 요구한다. 이런 업무처리들은 사용자 상호작용 없이 효율적으로 처리되는 대량의 정보를 처리하는 복잡한 자동화 공정을 포함한다.
이런 공정은 보통 시간기반 이벤트(예를 들어 월말계산, 공지 ), 주기적 실행되는 애플리케이션인데, 대량의 데이터 (예를 들어 보험수익결정 이나 요율 조정) 주기적으로 처리하는 복잡한 업무 룰이 적용되고, /외부시스템에서 제공된 정보의 통합으로 표준화, 검증 레코드 트랜잭션처리 등이 수반된다배치처리는 기업환경에서 매일 수십억 건의 트랜잭션을 처리해 왔다

Spring Batch 기업시스템에서 매일 처리하는 업무에 필수적인 견고한 배치 애플리케이션 개발을 위해 설계된, 가벼운 종합 배치 프레임웍이다. Spring Batch 생산성, POJO(plain old java object)기반의 개발방식이나,  그동안 일반적으로 스프링 프레임웍에서 확인되는 사용편의성에 기반하여 만들어졌다. 스프링 프레임웍의 경우, 편의성 때문에 개발자들이 필요할 기업 서비스를 쉽게 개선시킬 있었다. Spring Batch 스케쥴용 프레임웍은 아니다. 기업용 스케쥴러는 상업용이나 오픈소스진영에서 Quartz, Tivoli, Control-M 등이 제공된다. Spring batch 이런 scheduler들을 교체한다기 보다 같이 결합되어 사용되도록 의도되었다.

Spring Batch 재사용가능한 일련의 함수들을 제공하는데, 대량 레코드 처리하는데 필수적인 함수들로, 로깅이나 로그추적, 트랜잭션관리, job 처리통계, job재기동, skip이나 자원관리 같은 기능들을 제공한다. Spring batchs 또한 보다 진보된 기능이나 특성을 제공하는데, 최적화나 파티셔닝 기술을 통해 대량 고성능의 배치업무를 가능케 한다. 단순복잡여부 관계없이 대량배치업무는 spring batch프레임웍의 고도의 처리량 조절방식을 통해 상당한 대량정보를 처리할 있다.
원문
1.1.절 배경
오픈소스 프로젝트나 관련 커뮤니티들이 웹기반이나 SOA메시지기반 구조 프레임웍에 관심을 가지는 동안, 기업IT환경내에 배치업무처리에 대한 요구가 많았음에도 불구하고 이를 수용하는 자바기반의 배치처리를 위한 프레임웍은 그동안 관심을 받지 못했다. 표준 재사용가능한 배치 아키텍쳐가 부족하여 고객 기업IT업무측에서는 단발성 자체 솔루션들을 만들어왔다. SpringSource Accenture 이를 바꾸기 위해 협력하여, Accenture 현장에서 일해왔던 산업과 기술 경험이 배치 아키텍쳐를 구현하는데 있어 SpringSource 기술경험의 깊이와 Spring으로 증명된 프로그래밍 모델과 합쳐져서 자연스럽고 강력한 파트너쉽을 이루어, 고품질의 시장지향적인 소프트웨어를 탄생시켜 기업형 Java분야에 중요한 간극을 매웠다.

사는 또한 현재 많은 고객들과 spring기반의 배치 아키텍쳐 솔루션을 개발하여 유사한 문제를 해결하기 위해 협업중이다.
이런 협업을 통해 몇가지 유용한 추가적인 세부사항과 실환경 제약사항이 제공되는데, 솔루션은 과정에서 고객이 처한 실제 문제에 적용될 있음이 입증된다. 이와 또는 추가적인 이유로 SpringSource Accenture 팀을 이루어 spring batch개발에 협력해 왔다.
Accenture 과거 지적재산권이 있는 배치처리 아키텍쳐 프레임웍을 spring batch 프로젝트에 제공해왔는데, 제공된 프레임웍은 과거 몇세대의 플랫폼들( COBOL/메인프레임, C++/Unix, Java/범용플랫폼 ) 배치 아키텍쳐를 만들어온 수십년간의 경험에 기반한다. 또한 제동된 프레임웍외에 프로젝트를 지원, 기능강화 차후 로드맵을 진행할 있는 참가자 자원도 제공하였다.
Accenture SpringSource 협력은 차후 소프트웨어 공법과 프레임웍, 배치 애플리케이션을 개발할 기업사용자에 의해 지속적으로 강화될 운영/개발툴의 표준화를 촉진하는 것을 목표로 한다.
기업이나 공공기관/단체가 표준화되고 검증된 솔루션을 기업/기관IT환경에 제공하고자 spring batch 좋은 선택이 것이다.
원문

1.2. 사용시나리오
전형적인 배치프로그램은 일반적으로 대량의 레코드를 데이터베이스나 파일, 큐에 읽어서(read) 특정방식으로 데이터를 처리(process)하고 수정된 형태로 파일 작성(write)한다. Spring Batch 이런 간단한 배치반복과정을 자동화하여, 통상 사용자 상호작용 없이 오프라인환경에서 하나의 세트로 이루어지는 일련의 트랜잭션을 처리토록 한다. 대부분의 IT프로젝트들은 배치잡업무가 있는데, Spring Batch 이들 프로젝트들에 탄탄한 기업규모의 솔루션으로서는 유일하게 오픈소스 프레임웍으로 제공된다.
업무 시나리오
  • 주기적으로 배치 프로세스를 처리한다.
  • 동시처리 배치 프로세스: 하나의 job 병렬처리
  • 단계적 결재방식의 기업용 메시지처리
  • 대량 병렬 배치 처리
  • 실행실패 수동 또는 예약방식 재기동
  • 의존관계의 실행단계들(step) 절차적으로 처리(워크플로우 기동방식 배치기능들과 연동실행)
  • 부분처리: 레코드처리생략 (. 롤백발생시)
  • 전체 배치 트랜잭션: 소량배치처리이거나 기존 스토어드프로시져 또는 스크립트와 연동된 경우
기술 목적
  • 배치개발자는 Spring 프로그래밍 모델을 사용한다: 업무로직에 집중하고, 인프라 스트럭쳐는 프레임웍이 관할토록 한다.
  • 인프라 스트럭쳐와 배치실행환경, 배치 애플리케이션간 관련사항들을 명확히 분리함.
  • 모든 프로젝트가 구현할 있는 Interface로서 공통 핵심 실행 서비스를 제공한다.
  • 변경 필요 없이 ‘out of the box’로서 사용가능한 핵심 실행 interface 간단하고 기본적인 방식으로 구현 제공한다.
  • 아키텍쳐의 모든 계층에서 spring 프레임웍을 활용하여 설정이나, customization이나, 서비스확장이 쉽도록 한다.
  • 제공되는 모든 핵심서비스들은 인프라 스트럭쳐 계층에 영향을 주지 않고 쉽게 교체나 확장될 있어야 한다.
  • Maven 이용하여 애플리케이션과는 완전히 별도로 jar 아키텍쳐로서 단순한 배포모델을 제공한다.
원문
1.3. Spring Batch 아키텍쳐
Spring Batch 확장성과 다양한 그룹의 최종사용자를 염두에 두고 구상 설계되었다. 아래 그림은 확장성과 최종사용 개발자의 사용용이성을 돕는 계층구조로서 계략도를 보여준다.
Figure 1.1: Spring Batch 계층 구조

계층 구조는 3개의 주요 고수준 컴포넌트들을 강조한 것이다 -애플리케이션과 코어, 인프라 스트럭쳐. 애플리케이션은 모든 배치job들과 Spring Batch 사용하는 개발자가 작성한 소스코드이고, 배치코어(Batch Core) 배치job 기동하고 제어하는 핵심 런타임 클래스(JobLauncher JobStep 상세구현) 구성된다. 애플리케이션과 Core 모두 공통 인프라 스트럭쳐 위에 탑재된다. 인프라스트럭쳐는 공통 reader, writer, RetryTemplate같은 service들과 코어프레임워크(, retry) 구성된다. 애플리케이션 개발자는 ItemReader, ItemWriter같은 형태로 구성물들을 활용한다.