본문 바로가기

전체보기

(244)
자바 스트림(Stream) API 정리, 스트림을 이용한 가독성 좋은 코드 만들기(feat. 자바 람다, 함수형 프로그래밍, 자바8) Java Stream 자바 공부를 하면서 Stream이 무엇인지, 어떻게 사용되고 있는지 인지는 하고 있었으나 실제 코드로 타이핑해보지 않았다.그러던 중 이번에 가볍게 API 훑어보는 식으로 공부를 하면서 코드를 쳐보면서 조금 더 익히게 되었다.Stream은 자바 8부터 추가된 기능으로 "컬렉션, 배열등의 저장 요소를 하나씩 참조하며 함수형 인터페이스(람다식)를 적용하며 반복적으로 처리할 수 있도록 해주는 기능"이다. (InputStream, OutputStream같은 I/O Stream이 아니다.)1234567891011121314List names = Arrays.asList("jeong", "pro", "jdk", "java");// 기존의 코딩 방식long count = 0;for (String ..
스프링 부트 애플리케이션 더블 클릭으로 실행하는 방법, Fully Executable Jar (JSmooth로 .exe파일은 이제 그만!) Running Spring boot Applications by using double click 제목은 거창해보이나 아주 간단한 설정만으로 스프링 부트 애플리케이션을 "완전히 독립적으로 실행" 할 수 있다.기존에는 빌드를 통해서 .jar 파일을 만들고 명령 프롬프트 창에서 "java -jar XXXXX.jar" 이런 식으로 명령어를 작성해서 실행했다.지금도 특별한 불만이나 요구사항이 없으면 그대로 사용하는 것이 좋다.그런데 가끔은 스프링 애플리케이션을 더블 클릭만으로 실행해야할 때가 있다.특히 소프트웨어를 제공할 때, 사용자는 개발자가 아니기 때문에 명령어 실행에 대해 거부감이 들 수 밖에 없다. 따라서 최대한 단순하게 실행하기를 원하는 경우에 아래와 같은 방법을 사용하는 것을 고려해볼 수 있다.Set..
JAVA에서 날짜,시간 제대로 사용하는 LocalDate, LocalTime, LocalDateTime (NTP 시간 서버에서 정확한 시간 받아오기, json object 받기, JPA 테스트 with LocalDateTime) 아직도 Calendar, Date 사용하니? 자바에서 아직도 Calendar.getInstance해서 시간/날짜를 표현하는 프로그래머가 있을까?처음 공부할 때나 단순하게 표현해야할 때는 사용할 수 있지만 단점이 극명한 클래스라 사용하지 않는게 좋다는 것을 미리 말한다.어떤 문제점이 있는지는 네이버 D2의 글에서 잘 설명해준다.Calendar, Date 클래스의 문제점 (출처 : https://d2.naver.com/helloworld/645609 )1. 불변 객체가 아니다.-> 즉 set으로 변경이 가능하다는 점은 누군가 악의적으로 변경할 수 있기 때문에 get/set 메서드에서 직접 Date클래스를 사용하는 것이 위험하다.2. 상수 필드 남용-> calendar.add(Calendar.SECOND, 2..
스프링 부트 2.0의 default DBCP, hikariCP가 그렇게 빠르다던데? (hikariCP 저만의 성능 테스트를 해봤습니다.) HikariCP hikariCP는 스프링 부트 2.0부터 default JDBC connection pool이다. hikariCP github사이트에 가보면 엄청 빠르고, 가볍고, 신뢰할 수 있다고 설명한다.심지어 "zero-overhead"라며 엄청나게 높은 성능을 강조하고 벤치마크 결과도 보여준다.원하면 벤치마크 테스트 소스도 가져가서 직접 돌려보라고도 하는데 자세한건 모르겠고 나만의 테스트 환경을 만들어서 테스트 해보기로 했다.스프링 부트에서 hikariCP 성능 테스트 PC 사양도 중요하고 인터넷 사양도 중요하고 로컬 DB냐 원격 DB냐도 갈리고 여러 환경이 중요한 것으로 아는데 크게 생각 안하고 단순히 직접 경험해본다에 중점을 두었다.먼저 hikariCP는 스프링부트 2.0부터 default로 ..
Vue.js 2.x 가이드 따라치기 Overview (Vue Document가 그렇게 잘 되어있다던데..) Vue.js Vue는 따로 블로그로 정리할 필요없이 Document가 잘 되어있는 것으로 알려져있다.(심지어 vue.js 한국 사용자 모임에서 많은 프로젝트들(vue-router, vue-loader등)을 번역해놔서 문서들이 어색함이 없이 술술 읽힌다.)하지만 Document가 아무리 잘 되어있어도 읽기만 하고 넘어가거나 그런가보다 하고 넘어가면 의미가 없다.한국어 번역 작업을 열심히 해주셨으니 잘 읽어보고 실습을 해보고 나름대로 느낀 점을 정리하면 좋겠다고 생각했다.Vue.js 가이드 따라하기 Vue.js의 장점은 여러 블로그에 많으니 생략한다. 또한 여러가지 설치 방법(환경 설정)이 있지만 생략한다.대신 CDN으로 가져와서 해보거나 jsfiddle에서 계속 테스트한다. (추후 spring boot와 ..
Spring boot Actuator를 이용하여 스프링 애플리케이션 정보 모니터링 하기 (java application state/performance check) Spring boot Actuator * 스프링 부트 2.0 레퍼런스 기준으로 작성했습니다.spring boot actuator는 한 마디로 얘기하면 "스프링 부트 애플리케이션에서 제공하는 여러가지 정보를 모니터링하기 쉽게 해주는 기능"이다.그 정보가 무엇이냐면 컨텍스트 빈, 환경 설정, 자동 설정, JVM 상태 등의 것이다.여기서 필요한 정보를 얻어서 가공할 수 있고, 모니터링할 수도 있는 것이다.또한 내가 만든 어떠한 값들을 actuator를 통해서 제공할 수도 있다. (custom endpoint)아래부터는 Actuator를 사용하기 위해서 어떻게 해야하고, 어떤 정보를 볼 수 있는지 테스트해보려고한다. Actuator settings Actuator를 사용하는 법은 아주 간단하다.- maven d..
Spring boot 설정 파일 yaml 사용법 (설정 파일을 읽어서 bean으로 필요할 때 사용하는 방법) Spring boot의 설정 파일 YAML을 사용하는 방법 대부분의 애플리케이션에서 설정과 관련된 변수들은 보통 파일에다가 쓰고 읽어오는 방식으로 프로그래밍한다.외부에 설정파일을 넣을 수도 있고 내부적으로 프로젝트에 넣을 수도 있다.해당 파일들은 포맷(.properties, .ini 등)도 다양하다.스프링 부트에서도 설정에 대한 내용을 다양한 파일에 적고 읽어와 사용하는데 그 중에서 가장 적합하고 스프링 부트에서 권장하는 형식인 yaml에 대해서 간단히 설명하고 사용해본다.왜 YAML 이어야 하는가?-> 사람이 보기 편하다!1234567environments: dev: url: http://dev.example.com name: Developer Setup prod: url: http://another...
데이터베이스 성능 개선 포인트! 데이터베이스 Call 수 줄이기, 네트워크 부하 줄이기(array processing, 부분 범위 처리) 데이터베이스 SQL 쿼리 호출(Call) 수 줄이기 DB 성능 최적화를 하기 위해서 가볍게 개선 포인트를 알아보는 시간을 지난 포스트에 이어 갖는다.지난 포스트에서는 SQL 쿼리가 날라왔을 때 SQL 쿼리를 파싱하고 실행 계획을 캐시하고 최적화하는 부분을 살펴봤다.이번 포스트에서는 애초에 데이터베이스에 쿼리를 적게 날리는 즉, 호출 수를 줄이는 부분과 오고가는 데이터의 양(네트워크 부하)을 줄이는 부분을 알아볼 것이다.(다음 포스트에서는 데이터베이스가 파일시스템(ex. SSD)과 데이터 I/O하는 부분에서 최적화를 알아볼 것이다. 아래 그림을 참조하면 좋다.)데이터베이스 Call과 성능 위에서는 편의를 위해 애플리케이션을 통해 호출되는 Call이 전부인양 말했지만 엄밀히 따지면 Call을 종류는 다양하다..