회사 교육용으로 만든 자료입니다. 엔터프라이즈 어플리케이션 아키텍처의 개념부터 시작하여 마이크로서비스 아키텍처와 기존 모놀리식 아키텍처 비교하고 왜 우리가 자바9에 집중해야 하는지 설명하려고 만든 자료입니다. 현재 회사에서 진행하고 있는 클라우드 어플리케이션 통합/아키텍처링 사업과 PoC 플랫폼 개발을 위한 회사 내부 교육용으로 만들었습니다. MSA 부분은 IBM Blumix 밋업 자료에서 발췌했습니다. 잘못된 부분이나 다른 의견이 있으신 분 댓글이나 메세지 주세요. hjlee@uws.co.kr
[Uws] enterprise application architecture, msa, java9, spring 소개
1. No part of this document may be circulated, quoted, or reproduced for distribution outside the client organization without prior written approval from UWS
Eureka Moment for Digital Transformation
- 엔터프라이즈 어플리케이션 아키텍처
2017. 11. 16
이 현 주 대표이사
3. - 2 -
1. 엔터프라이즈 어플리케이션 Enterprise Application
“엔터프라이즈 어플리케이션은 막대한 규모의 복잡한 데이터를 표시, 관리,
저장하고, 이러한 데이터를 이용한 비즈니스 프로세스를 지원하거나 자동화하는
애플리케이션을 말한다.”
- Martin Fowler, Patterns of Enterprise Application Architecture
이 슈
각 시스템은 각기 다른 시기에 다른 기술을
바탕으로 구축되며, 공동 작업 메커니즘 (데이터
포맷, 메세징 시스템 등)이 상이하 경우가 많음
동시에 여러 다른 통합 체계가 존재함
비즈니스 프로세스의 차이와 데이터에 대한
개념 불일치로 인한 문제
비즈니스 논리가 예외적인 상황이 많음
특 징
지속적 데이터 처리
막대한 양의 데이터 처리
여러 사람이 동시에 데이터를 처리함
많은 데이터를 처리하기 위한 사용자
인터페이스 화면의 수가 많음
단독으로 운영되는 경우가 없음
4. - 3 -
2. 아키텍처 Enterprise Application
“아키텍처는 프로젝트에 참여하는 전문 개발자의 시스템 설계에 대한 공유된
이해를 반영하는 주관적 개념이다. 이 공유된 이해는 일반적으로 시스템의 중요
컴포넌트, 그리고 이러한 컴포넌트 간의 상호작용 방법에 대한 것이다.”
- Ralph Johnson
이 슈
계층형 아키텍처 (프레젠테이션, 도메인, 데이터
원본)
파이프 아키텍처
필터 아키텍처
모놀리식 아키텍처
마이크로 서비스 아키텍처
서버리스 아키텍처
특 징
공유된 이해를 반영하는 주관적 개념
시스템의 중요한 컴포넌트 그리고 컴포넌트
간의 상호작용 방법
올바른 의사결정에 대한 것이며 여전히 주관적
5. - 4 -
1. Java 플랫폼 모듈 시스템 Java 9 updated
Jigsaw(직소) 프로젝트 기반하에 개발된 Java9 Module 시스템은 안정적인 구성과 유연한 캡슐화를 제공하여
개발자(라이브러리, 응용, Java SE)는 확장 가능한 플랫폼을 만들고 무결성을 높이며 성능을 향상 시킬 수 있습니다.
Java 9
모듈을 만들고 모듈에 명시적으로 외부에서 호출할 수
있는 API와 연계할 다른 모듈을 선언, API 캡슐화 구성
이 슈
기존 Java 패키징 매커니즘의 문제
캡슐화 지원 부족
가시성 한정자 (visibility modifier)가 클래스까지만
유화하고 패키징에서 부족함
JAR로 제공된 패키지의 클래스를 보면 어느 클래스를
써야하는지 알 수 없으므로 API 설계자가 의도하지 않은
호출이 발생할 수 있음
유연한 런타임 이미지를 만들 수 있도록 Java 플랫폼을
모듈화
필요한 모듈만으로 경량화된 이미지를 만들 수 있음
어플리케이션이 사용하는 런타임 환경(이미지)를 만들
수 있음
Java에서 사용하는 표준 API뿐만 아니라 3rd party
라이브러리도 필요한 것만 배포 가능
소형 디바이스 – IoT
서버 아키텍처 – 애플리케이션의 컨테이너화(도커),
마이크로 서비스, 클라우드
스타트업의 시간과 성능 – 필요한 모듈만 구동
6. - 5 -
2. 대화식 REPL 도구 제공 Java 9 updated
Java 9는 테스트 프로젝트 없이 코드 셋을 신속하게 테스트할 수 있는 대화식 REPL(Read-Eval-Print-Loop) 도구
제공하여 Java 기능을 쉽게 배우거나 평가할 수 있습니다.
파이썬과 같은 Intepretor 언어 만큼은 아니지만 이제 codecademy 와 같은 코드 학습 웹 서비스에서
Java를 배울 수 있을지도…..곧….
7. - 6 -
3. HTML5 Javadoc Java 9 updated
Javadoc은 HTML형식의 API문서를 생성할 수 있는 도구이며 이전 JDK에서는 HTML 4.01 형식을 사용했지만 JDK9
Javadoc은 HTML5 markup을 생성하고 검색 기능 및 Doclint를 향상시켰습니다.
HTML5를 지원하는 JDK9에서는 -html5 parameter를 추가함
8. - 7 -
4. 기타 Java 9 updated
try-with-resources 향상 – 코드를 깔끔하게 유지할 수 있음
Private 인터페이스 메소드 – 중복 코드를 피하고 인터페이스를 캡슐화할 수 있음
다이아몬드 연산자 – 익명클래스에 대한 <> 추가
구 분 내 용
Languate update
프로세스 API – 모든 프로세스, 현재/하위/종료된 프로세스 정보 확인할 수 있음
플랫폼 로깅 API 및 서비스 – 로깅 API 메시지 사용자를 위한 서비스 인터페이스
CompletableFuture API 강화 – 지연 시간 초과 지원하는 부분 개선함
Reactive Streams – Flow API
New code Libraries
“우여 곡절끝에 공식 릴리즈된 Java9에 대해 빠르게 훑어 보았다. 개인적으로 Java9에 신규로 도입되어진
직소(Jigsaw)에 대해 공식 릴리즈 이전부터 관심을 가지고 있었고 Java9에서 가장 관심갖고 지켜봐야할
부분이 아닌가 생각한다. 직소를 보면 Java 라는 언어가 전통적으로 강세를 보여왔던 Enterprise
Application에서 좀 더 Small size Application 지원을 위한 또 하나의 초석을 닦았다는 생각이 든다.
혹자들은 Java는 죽었다고들 하지만 본인은 직소같은 메커니즘의 도입이 Java의 생명을 계속해서
연장해줄거라고 판단한다. ”
16. - 15 -
1. 배경 Spring
“EJB를 사용하면 어플리케이션 작성을 쉽게 할 수 있다. 저수즌의 트랜잭션이나 상태관리, 멀티 쓰레딩,
리소스 풀링과 같은 복잡한 저수준의 API 를 이해하지 못하더라도 아무 문제없이 어플리케이션을 개발할
수 있다.”
- Enterprise JavaBean 1.0 Specification, Chater 2 Goals
자바 엔터프라이즈 어플리케이션 개발 표준 EJB
EJB의 대안, 스프링 프레임워크
그러나 현실은 너무 어려웠다.
Rod Johnson은 자신의 저서에서 EJB를 사용하지 않고 엔터프라이즈 어플리케이션을 개발하는 방법을
소개하였고, 이것이 스프링 프레임워크의 모태가 되었다.
2003년 Juergen Hoeller의 팀이 스프링 프레임워크를 만듬 EJB는 겨울 같아서
스프링이라 명칭 정함
17. - 16 -
2. POJO+Framework Spring
점차 POJO + 경량 프레임워크를 사용하기 시작
POJO (Plain Old Java Object)
- 특정 프레임워크나 기술에 의존적이지 않은 자바 개체
- 특정 기술에 얽매이지 않기 때문에 생산성, 이식성 향상
경량 프레임워크
- EJB가 제공하는 서비스를 지원해 줄 수 있는 프레임워크 등장
- Hibernate, JDO, iBatis, Spring
18. - 17 -
3. 스프링 프레임워크 Spring
스프링프레임워크란?
- 자바로 엔터프라이즈 어플리케이션을 만들 때 사용할 수 있는 Programming 및 Configuration 모델을
제공해주는 프레임워크
- 주로 하는 일이 바로 어플리케이션 수준에 인프라스트럭처를 제공하는 일이고…
- 쉽게 말하면, 개발자가 비즈니스 로직 개발에만 전념할 수 있게 해준다.
2003년 6월 아파치 2.0 라이선스로 공개
- 1.0 : 2004년 4월
- 3.0 : 2009년 12월
- 4.0.1 : 2014년 1월
- 5.0 : 2017년 10월
- 현재 Java 9 지원