기술 면접을 보면 가끔 자바8의 new features에 무엇이 있는지 질문 받을 때가 있다. 이제 자바 8을 실무에서 많이 사용하고 있는데도 정작 답변을 하려면 말문이 막힌다. 2014년도에 자바8 이 소개됐으니 6년이란 시간이 지났지만 commerical support 도 2030년까지 연장됐고 하니 정리를 하는 기분으로 대표적 기능을 한 개씩 작성해 봐야겠다. 람다표현식 (Lambda Expressions) 1. 무엇? 람다의 어원은 수학에서 왔다. 자세한 내용은 잘 모른다. 어쨌든 프로그래밍에서 말하는 람다는 익명 함수를 말한다. 람다 표현식은 익명 함수를 나타내는 표현식이다. 빠르고 간결하게 선언해서 사용할 수 있는 기능 블록이다. 밑에 코드는 자바스크립트(ES6+)의 Arrow Function..
1. Overview 지난번에 Controller 에서 비동기 처리 하는법을 알아봤다. 오늘은 Service 계층에서 비동기 처리를 위한 몇가지 방법을 간단한 예제로 알아보겠다. 2. Asynchronous Service 2.1 Future Future 는 Java 1.5 부터 java.util.concurrent 패키지에 추가된 비동기 처리를 위한 인터페이스다. Future 를 이용해서 비동기 처리를 할 수 있는 서비스를 만들어서 테스트 해보자. 10초를 대기하고 이후 입력받은 이름에 대괄호를 씌어 반환하는 메서드이다. public Future getName(String name) { final ExecutorService executorService = Executors.newSingleThreadE..
1. Overview Blocking/Non Blocking 의미는 차치하고 결국 이런 단어를 언급해 설명하고자 하는 건 요청이 있고 해당 요청에 대한 처리 작업 시간이 길더라도 wait 하지 않고 얼마나 자원을 효율적으로 사용할 수 있는가에 초점이 있다. 오늘은 Spring Boot로 동작 가능한 프로그램을 작성해 실제로 어떻게 동작하는지 확인해보겠다. 2. Servlet Thread (Blocking) tomcat은 default 로 200개의 써블릿 쓰레드를 설정해서 요청을 처리한다. 만약에 200개의 쓰레드가 모두 사용 중이라면 이후 요청은 서블릿 쓰레드가 확보 될 때까지 대기를 해야된다. 테스트를 쉽게 하기 위해서 톰캣의 스레드 갯수를 1개로 변경하고 테스트를 하겠다. 2.1 applicatio..
개발 단계에서 H2 database 는 유용하게 사용된다. Spring Boot 에 embded 돼있기 때문에 별도의 설치 없이 사용 가능하다. 또한 웹에서 접근 가능한 UI를 제공한다. 해당 설정 정보는 application.yml 파일에 설정으로 관리할 수 있다. 아래는 해당 설정이다. spring: h2: console: path: /h2-web enabled: true 하지만 web 계층에서 web-flux를 사용하고 있다면 해당 설정은 동작하지 않고 H2 web Ui 를 사용하기 위해서 아래와 같은 자바 Configuration 파일을 작성해야된다. @Profile("local") 은 로컬에서만 사용한다는 의미이다. deploy 배포 환경을 따른다. package info.m2sj.jpatuto..
정적 자원은 *.html , *.js , *.css 등과 같은 웹,와스가 분리 될 경우 웹서버(아파치, 웹투비 등)에 관리되는 자원들이다. Spring Boot 로 서비스할 때 별도의 웹서버 구성을 하지 않는다면 정적 자원 접근을 위한 설정이 존재한다. Spring Boot 에서 정적 자원을 접근하는 방법을 알아보겠다. Spring Web Spring boot 에서는 정적 자원 접근을 위한 default 설정을 가지고 있다. org.springframework.boot.autoconfigure.web.ResourceProperties 파일을 살펴보면 아래와 같은 코드에서 default 설정을 확인할 수 있다. public class ResourceProperties { private static fina..
jquery에서 $.when() 은 Deffered 객체를 인자로 받는 Promise 관련 메서드이다. 기본적으로 가변형 인자를 받는데 동적인 Deffered 객체를 배열에 담아 인자로 전달할 때가 있다. 아래는 그 방법이다. var d1 = $.Deferred(); var d2 = $.Deferred(); var d3 = $.Deferred(); var defferedArray = [d1, d2, d3]; //ES5 이하 $.when.apply($, defferedArray).done(); //ES6+ 가변 인자를 이용 $.when(...defferedArray).done();
MSA (Microservice Architecture) 와 Cloud 를 이용한 서비스등 배포 편의성 등으로 Docker를 많이 사용합니다. Docker Container 내부에 이미 애플리케이션을 실행하기 위한 환경을 (OS 등) 갖추고 있기 때문에 Docker를 이용하면 애플리케이션을 빠르고 신속하게 서비스할 수 있습니다. 오늘은 간단한 예제를 통해 자바 애플리케이션을 Maven을 통해 Docker Image를 만들어 보겠습니다. Simple Project 생성 우선 메이븐을 이용해서 프로젝트 초기화를 하겠습니다. 메이븐이 설치되어 있지 않다면 [maven 설치]해당 링크로 가서 운영체제에 맞는 maven을 설치하면 됩니다. maven이 설치 됐다면 아래 명령어로 프로젝트를 생성합니다. mvn ar..
리눅스 명령어 해석기 explainshell.com 이라는 사이트가 있습니다. 리눅스 터미널 명령어를 구조적, 시각적으로 해석해서 이해를 쉽게하기 위해 도와주는 사이트입니다. 예를 들어 아래와 같이 복잡하고 긴 명령어를 해석할 수 있습니다. find . -type f|xargs -I{} -t -n2 cp {} ./aaa netstat -an|egrep .+172.+LISTEN.+|awk '{print $4}'|xargs -I {} sh -c 'lsof -i|grep $1' - {}
Fork/Join Framework 는 효율적인 병렬처리를 위해 자바 7에서 소개된 새로운 기능이다. Fork/Join은 자바에서만 쓰이는 용어는 아니고 병렬 처리를 위한 공통된 모델이고 분할 정복 알고리즘을 통해서 재귀적으로 처리된다. 괜히 어려워지는 것 같은데 간단한 예제를 통해 Java에서 Fork/Join Framework 을 사용 하는법을 알아보자 Fork/Join 나눴다/합쳐지다 Fork/Join 을 네이버에서 영어 뜻을 찾아보면 아래와 같다. Fork Join 단어 뜻대로 보면 일을 나누고 합치는 것이다. 더 풀어 쓰면 어떤 작업을 여러개의 쓰레드가 나누어 처리하게 하고 작업이 끝나면 작업들을 합치는 것이다. 만약 100개의 랜덤한 숫자가 있고 이를 합산하는 프로그램을 Fork/Join을 통..
- Total
- Today
- Yesterday