Java 9 버젼에서 변화된 내용들을 가볍게 정리하는 형태로 만들어봤다.
소프트웨어 캠퍼스 강사팀 4기의 발표자료 이기도 하다.
소프트웨어 캠퍼스(https://www.facebook.com/groups/softwarecamp/)는 강의와 스터디등을 통해 서로를 성장시켜갈 수 있는 커뮤니티가 되려는 곳이다.
SLiPP(https://slipp.net) 서비스를 Java에서 Scala로 전환하는 과정에 대해 살펴본다. Scala를 선택한 이유, Java와 Scala를 동시에 서비스하면서 점진적으로 리팩토링하는 과정, Scala + Spring 기반으로 개발할 때 고려사항, Java에서 Scala로 전환하는 과정에 대한 경험담을 공유한다.
Java 9 버젼에서 변화된 내용들을 가볍게 정리하는 형태로 만들어봤다.
소프트웨어 캠퍼스 강사팀 4기의 발표자료 이기도 하다.
소프트웨어 캠퍼스(https://www.facebook.com/groups/softwarecamp/)는 강의와 스터디등을 통해 서로를 성장시켜갈 수 있는 커뮤니티가 되려는 곳이다.
SLiPP(https://slipp.net) 서비스를 Java에서 Scala로 전환하는 과정에 대해 살펴본다. Scala를 선택한 이유, Java와 Scala를 동시에 서비스하면서 점진적으로 리팩토링하는 과정, Scala + Spring 기반으로 개발할 때 고려사항, Java에서 Scala로 전환하는 과정에 대한 경험담을 공유한다.
탑크리에듀교육센터(www.topcredu.co.kr)제공
스프링프레임워크 & 마이바티스(Spring Framework, MyBatis)
19번째 자료입니다. 참고하시어 많은 도움되셨길 바랍니다.
교육 및 수강문의/기타문의사항은 홈페이지(www.topcredu.co.kr)를 통하여 하실 수 있습니다.^^
탑크리에듀교육센터(www.topcredu.co.kr)제공
스프링프레임워크 & 마이바티스(Spring Framework, MyBatis)
20번째 자료입니다. 참고하시어 많은 도움되셨길 바랍니다.
교육 및 수강문의/기타문의사항은 홈페이지(www.topcredu.co.kr)를 통하여 하실 수 있습니다.^^
여러 언어에서 null 안전성을 주요 마케팅 쟁점으로 내세우면서 null 안전성이 관심을 많이 받고 있습니다.
자바에서도 null을 잘 다루어야 소프트웨어 결함을 줄이고 견고하게 만들 수 있는데 null의 위협에서 코드를 안전하게 지키는 설계 지침을 정리하고 안전하다고 확인하는데 도움이 되는 도구를 소개합니다.
자바개발시 모델객체를 생성할 때 setter/getter/toString/hashCode/equals 메소드를 만드는데 이럴 경우 클래스 파일의 소스가 길어지고 복잡해지는데, 이를 해결하기 위해 롬복(Lombok)을 사용하죠, 자바개발 하시는 분이라면 알아두시면 유용하리라 생각 됩니다.
탑크리에듀교육센터(www.topcredu.co.kr)제공
15번째 스프링프레임워크 & 마이바티스(Spring Framework, MyBatis)자료입니다.
Spring JDBC에서 DB 접근하는 방법, Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate, Maven, Gradle에서 오라클 설정에 대해 설명한 자료이니 많은 참고 바랍니다.
UNIST 프로그래밍 동아리 HeXA (http://www.hexa.pro) 내부 React 강의 프레젠테이션 자료의 공개버전
내용
- HTML, Javascript 속성 튜토리얼
- React 소개
- Node.js 설치
https://github.com/kimxogus/react-tutorial
(Spring Data JPA)식별자(@Id, Primary Key) 자동 생성, @GeneratedValue의 strategy 속성,Ge...탑크리에듀(구로디지털단지역3번출구 2분거리)
탑크리에듀(http://www.topcredu.co.kr), 오라클자바커뮤니티(http://ojc.asia) 제공 JPA 기초강좌 입니다. 이번 강좌는 JPA에서의 DB에 따른 식별자(Primary Key) 값을 자동 생성하는 방법에 대해 알아봅니다. 식별자 자동생성은 @GeneratedValue 어노테이션으로 지정하는데 복합키 보다는 대행키(인공키, Artifitial Key) 사용을 권장하며 @GeneratedValue의 strategy 속성에 값을 지정해 여러 가지 식별자 자동 생성 전략을 선택할 수 있습니다. AUTO, TABLE, SEQUENCE, IDENTITY 값으로 지정하며 이 값들은 열거형인 GenerationType에 정의되어 있죠, 천천히 자료 살펴보시고 교육센터 홈페이지에 오시면 동영상 강좌 및 다양한 슬라이드 강좌 있으니 참조 하세요~
스프링 프레임워크 기반 개발에서 가장 자주 사용되는 컨텍스트 설정과 관련된 어노테이션 @Scope, @Autowired, @Resource, @Inject, @Required, @Named, @Order, @PostConstruct, @PreDestroy와 관련된 간단한 설명 입니다.
탑크리에듀교육센터(www.topcredu.co.kr)제공
스프링프레임워크 & 마이바티스(Spring Framework, MyBatis)
17번째 자료입니다. 참고하시어 많은 도움되셨길 바랍니다.
교육 및 수강문의/기타문의사항은 홈페이지(www.topcredu.co.kr)를 통하여 하실 수 있습니다.^^
탑크리에듀교육센터(www.topcredu.co.kr)에서 제공하는 자료입니다. 스프링프레임워크 & 마이바티스(Spring Framework, MyBatis) 9번째 자료입니다. AOP 충고(Advice),프로그래밍적인 방법을 통한 AOP 구현(ProxyFactory 이용)에 대하여 설명한 자료이므로 참고하시면 좋을 것 같습니다^^.
탑크리에듀교육센터(www.topcredu.co.kr)제공
스프링프레임워크 & 마이바티스(Spring Framework, MyBatis)
19번째 자료입니다. 참고하시어 많은 도움되셨길 바랍니다.
교육 및 수강문의/기타문의사항은 홈페이지(www.topcredu.co.kr)를 통하여 하실 수 있습니다.^^
탑크리에듀교육센터(www.topcredu.co.kr)제공
스프링프레임워크 & 마이바티스(Spring Framework, MyBatis)
20번째 자료입니다. 참고하시어 많은 도움되셨길 바랍니다.
교육 및 수강문의/기타문의사항은 홈페이지(www.topcredu.co.kr)를 통하여 하실 수 있습니다.^^
여러 언어에서 null 안전성을 주요 마케팅 쟁점으로 내세우면서 null 안전성이 관심을 많이 받고 있습니다.
자바에서도 null을 잘 다루어야 소프트웨어 결함을 줄이고 견고하게 만들 수 있는데 null의 위협에서 코드를 안전하게 지키는 설계 지침을 정리하고 안전하다고 확인하는데 도움이 되는 도구를 소개합니다.
자바개발시 모델객체를 생성할 때 setter/getter/toString/hashCode/equals 메소드를 만드는데 이럴 경우 클래스 파일의 소스가 길어지고 복잡해지는데, 이를 해결하기 위해 롬복(Lombok)을 사용하죠, 자바개발 하시는 분이라면 알아두시면 유용하리라 생각 됩니다.
탑크리에듀교육센터(www.topcredu.co.kr)제공
15번째 스프링프레임워크 & 마이바티스(Spring Framework, MyBatis)자료입니다.
Spring JDBC에서 DB 접근하는 방법, Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate, Maven, Gradle에서 오라클 설정에 대해 설명한 자료이니 많은 참고 바랍니다.
UNIST 프로그래밍 동아리 HeXA (http://www.hexa.pro) 내부 React 강의 프레젠테이션 자료의 공개버전
내용
- HTML, Javascript 속성 튜토리얼
- React 소개
- Node.js 설치
https://github.com/kimxogus/react-tutorial
(Spring Data JPA)식별자(@Id, Primary Key) 자동 생성, @GeneratedValue의 strategy 속성,Ge...탑크리에듀(구로디지털단지역3번출구 2분거리)
탑크리에듀(http://www.topcredu.co.kr), 오라클자바커뮤니티(http://ojc.asia) 제공 JPA 기초강좌 입니다. 이번 강좌는 JPA에서의 DB에 따른 식별자(Primary Key) 값을 자동 생성하는 방법에 대해 알아봅니다. 식별자 자동생성은 @GeneratedValue 어노테이션으로 지정하는데 복합키 보다는 대행키(인공키, Artifitial Key) 사용을 권장하며 @GeneratedValue의 strategy 속성에 값을 지정해 여러 가지 식별자 자동 생성 전략을 선택할 수 있습니다. AUTO, TABLE, SEQUENCE, IDENTITY 값으로 지정하며 이 값들은 열거형인 GenerationType에 정의되어 있죠, 천천히 자료 살펴보시고 교육센터 홈페이지에 오시면 동영상 강좌 및 다양한 슬라이드 강좌 있으니 참조 하세요~
스프링 프레임워크 기반 개발에서 가장 자주 사용되는 컨텍스트 설정과 관련된 어노테이션 @Scope, @Autowired, @Resource, @Inject, @Required, @Named, @Order, @PostConstruct, @PreDestroy와 관련된 간단한 설명 입니다.
탑크리에듀교육센터(www.topcredu.co.kr)제공
스프링프레임워크 & 마이바티스(Spring Framework, MyBatis)
17번째 자료입니다. 참고하시어 많은 도움되셨길 바랍니다.
교육 및 수강문의/기타문의사항은 홈페이지(www.topcredu.co.kr)를 통하여 하실 수 있습니다.^^
탑크리에듀교육센터(www.topcredu.co.kr)에서 제공하는 자료입니다. 스프링프레임워크 & 마이바티스(Spring Framework, MyBatis) 9번째 자료입니다. AOP 충고(Advice),프로그래밍적인 방법을 통한 AOP 구현(ProxyFactory 이용)에 대하여 설명한 자료이므로 참고하시면 좋을 것 같습니다^^.
Scala, Spring-Boot, JPA를 활용한 웹 애플리케이션 개발 과정에 대해 다룬다. Spring-Boot와 JPA 조합만으로도 생산성 있는 웹 애플리케이션 개발이 가능하다. 이 조합만으로도 충분히 의미가 있지만 여기에 Scala라는 약간은 불편한 듯 보이는 언어를 도입함으로써 얻을 수 있는 즐거움을 공유한다. Spring-Boot + JPA 조합에 Scala를 적용하면서의 좌충우돌 경험담을 전한다.
[Uws] enterprise application architecture, msa, java9, spring 소개HYUN-JOO LEE
회사 교육용으로 만든 자료입니다. 엔터프라이즈 어플리케이션 아키텍처의 개념부터 시작하여 마이크로서비스 아키텍처와 기존 모놀리식 아키텍처 비교하고 왜 우리가 자바9에 집중해야 하는지 설명하려고 만든 자료입니다. 현재 회사에서 진행하고 있는 클라우드 어플리케이션 통합/아키텍처링 사업과 PoC 플랫폼 개발을 위한 회사 내부 교육용으로 만들었습니다. MSA 부분은 IBM Blumix 밋업 자료에서 발췌했습니다. 잘못된 부분이나 다른 의견이 있으신 분 댓글이나 메세지 주세요. hjlee@uws.co.kr
2. 새로운 툴인 "JShell"을 제공
◦ 쉘과 REPL(Read Evaluate Print Loop)을 위한 것
◦ 자바 클래스, 인터페이스, 객체 등의 생성을 매우 쉽게 실행하고 테스트하게 해줌
REPL(Read Evaluate Print Loop)
◦ 읽고(read), 계산하고(evaluate), 출력하는(print) 반복 구조
◦ 스크립트 언어 (interactive interpreter shell )들의 다른 명칭(예전 이름)
◦ 개발자가 간단한 코드를 입력하여 바로 결과값을 확인하게 해주는 편의성 툴
다운 가능한 곳 : https://jdk9.java.net/download/
2
3. 3
G:>jshell
| Welcome to JShell -- Version 9-ea
| For an introduction type: /help intro
jshell> int a = 10
a ==> 10
jshell> System.out.println("a value = " + a )
a value = 10
4. 불변 List, Set, Map, Map.Entry를 만들어주는 편리한 신규 팩토리 메서드 제공
비어있거나 비어있지 않은 Collection 객체를 만드는데 사용
자바8이나 이전 버전에서 우리는 Collections 클래스의 unmodifiableXXX와 같은
유틸 메서드를 사용해서 불변 Collection 객체를 만듬
◦ 그러나 그 메서드들을 이용한 방법은 지루하고 장황
◦ 그 단점을 없애기 위해서 새로운 팩토리 메서드를 추가.
4
5. List와 Set 인터페이스
◦ "of" 메서드는 불변의 비어있거나 비어있지 않은 List 또는 Set을 만들어줌
Empty List Example
Non-Empty List Example
5
List immutableList = List.of();
List immutableList = List.of("one","two","three");
7. Java8에서 Default와 Static 메서드를 이용해서 인터페이스에 구현체를 넣는 방법이
추가됨
하지만 private으로 구현체를 추가하는 방법이 없었기 때문에 이번에 추가되었음
7
public interface Card{
private Long createCardID(){
// Method implementation goes here.
}
private static void displayCardDetails(){
// Method implementation goes here.
}
}
8. 자바9의 큰 변화 중 하나는 모듈 시스템
직소 프로젝트(Jigsaw project)는 다음과 같은 특징을 갖고 있음
◦ Modular JDK
◦ Modular Java Source Code
◦ Modular Run-time Images
◦ Encapsulate Java Internal APIs
◦ Java Platform Module System
자바 SE 9 버전 전에는 자바 기반 응용 프로그램을 개발할 때 모노리틱
(monolithic) Jar 방식을 사용했음
◦ 한계와 단점이 많았음
◦ 이러한 모든 단점을 방지하기 위해, 자바 SE 9 모듈 시스템이 나옴
8
9. JDK 9는 92 모듈 (최종 릴리스에서 변경 될 수 있습니다)와 함께 함
JDK 모듈을 사용할 수 있고 아래와 같이 자신의 모듈을 만들 수 있음
Simple Module Example
9
module com.atin.monitor.ui {
requires javafx.base;
requires javafx.controls;
requires javafx.graphics;
exports com.atin.monitor.ui.launch;
exports com.atin.monitor.ui.show;
}
11. 자바9에서 프로세스 API를 개선함
다음과 같은 두 커플 형태의 신규 클래스가 추가되었다.
◦ OS 프로세스를 관리 및 컨트롤할 있음
java.lang.ProcessHandle
java.lang.ProcessHandle.Info
Process API Example
11
ProcessHandle currentProcess = ProcessHandle.current();
System.out.println("Id: = " + currentProcess.getPid());
12. 자바 7에서 나온 자원 관리 방법(try with resource)을 개선
Java 7
Java 9
12
void testARM_Before_Java9() throws IOException{
BufferedReader reader1 = new BufferedReader(
new FileReader("journaldev.txt"));
try (BufferedReader reader2 = reader1) {
System.out.println(reader2.readLine());
}
}
void testARM_Java9() throws IOException{
BufferedReader reader1 = new BufferedReader(
new FileReader("journaldev.txt"));
try (reader1) {
System.out.println(reader1.readLine());
}
}
13. 자바8에서 CompletableFuture가 가지는 문제점을 개선
delayedExecutor()은 static 유틸 메서드로 사용
주어진 시간 딜레이 이후에 기본 실행자로 보내진 new Executor를 반환
13
Executor exe =
CompletableFuture.delayedExecutor(50L, TimeUnit.SECONDS);
14. 리액티브 프로그래밍은 큰 인기를 끌고 있음
Scala, Play, Akka 등의 프레임워크는 이미 리액티브 스트림을 구축
Java9은 새로운 리액티브 스트림 API를 추가함
자바9의 리액티브 스트림 API
◦ 자바 언어를 이용해서 매우 쉽게 병행성, 확장성, 비동기 애플리케이션을 구현
한 Publish / Subscribe 프레임워크
◦ API
java.util.concurrent.Flow
java.util.concurrent.Flow.Publisher
java.util.concurrent.Flow.Subscriber
java.util.concurrent.Flow.Processor
14
15. 자바 7에서 Diamond Operator를 추가했지만,
자바 8에서 익명 내부 클래스 사용시 한계가 있다는 것을 확인
해당 이슈를 수정하였고 아래와 같은 예를 들 수 있다.
자세한 타입 파라미터 없이 단순히 "List"만을 사용하였지만 상세한 타입을 알아서 확
인해서 읽고 처리함
15
public List getEmployee(String empid){
// Code to get Employee details from Data Store
return new List(emp){ };
}
16. Optional 클래스에 신규 메서드를 추가
값이 Optional 객체로 주어질 때 Stream 메서드는 값과 함께 sequential stream을
리턴, 값이 비어 있다면 빈 스트림을 리턴함
다음은 Optional에서 stream의 사용 형태를 보여준다.
위 Optional.stream 메서드는 Employee 객체의 Optional 스트림을 Employee 객
체 스트림으로 변환해줌
16
Stream<Optional> emp = getEmployee(id)
Stream empStream = emp.flatMap(Optional::stream)
17. Stream 인터페이스에 사용 가능한 4개의 메서드가 추가
Stream은 인터페이스이므로 신규 구현된 메서드는 모두 default 메서드
그 중 두 개는 매우 중요
◦ dropWhile 메서드
◦ takeWhile 메서드
takeWhile은 인수로서의 predicate를 취하고 주어진 값의 스트림 서브셋을 리턴
해당 값을 만족시키는 값이 없으면 빈 스트림을 리턴.
17
jshell> Stream.of(1,2,3,4,5,6,7,8,9,10)
.takeWhile(i -> i < 5 )
.forEach(System.out::println);
1
2
3
4
18. 자바8과 이전 버전에서 @Deprecated 어느테이션
◦ 어떤 메서드도 없이 단순히 마커 인터페이스
Java SE 9에서 Oracle Corporation은 @Deprecated 주석을 강화
◦ 지원 중단 된 API에 대한 자세한 정보를 제공
◦ 지원 중단 된 API의 정적 사용을 분석하는 도구를 제공
forRemoval고 since가 추가됨 (정보 제공)
18
19. 추가 배경
◦ HTTP/2 프로토콜과 WebSocket 기능을 지원하기 위함
◦ 기존 HTTP 클라이언트 API에 많은 문제점이 있음
새로운 HTTP 2 클라이언트 API가 추가
◦ "java.net.http" 패키지에 새로운 HTTP 2 클라이언트 API 도입
◦ HTTP / 1.1 및 HTTP / 2 프로토콜 모두 지원
◦ 동기화(블로킹 모드)와 비동기 모드 모두 지원
◦ WebSocket API를 사용하여 비동기 모드 지원
상세 자료
◦ http://download.java.net/java/jdk9/docs/api/java/net/http/package-
summary.html
19
20. Java SE 9에서 새로운 multi-Resolution Image API를 도입 예정
이 API의 중요한 인터페이스는 MultiResolutionImage
java.awt.image 패키지로 이용 가능
MultiResolutionImage
◦ 서로 다른 높이와 너비 (해상도가 다름)의 이미지 세트를 캡슐화
◦ 요구 사항을 사용하여 이미지를 쿼리 할 수 있도록 함
20
21. 기타 특징 (덜 중요한 특징은 아님)
◦ GC (Garbage Collector) Improvements
◦ Stack-Walking API
◦ Filter Incoming Serialization Data
◦ Deprecate the Applet API
◦ Indify String Concatenation
◦ Enhanced Method Handles
◦ Java Platform Logging API and Service
◦ Compact Strings
◦ Parser API for Nashorn
◦ Javadoc Search
◦ HTML5 Javadoc
21