본문 바로가기

Spring boot Bean 생성 순서 정하는 방법, 생성되지 않은 Bean을 주입받으려고 하다가 실패했을 때 해결 방법, IoC 컨테이너를 공부해야하는 이유.. (※생명 주기 아님) Spring boot에서 bean 등록 순서를 결정하는 방법 스프링/스프링부트에서 bean을 등록하는 방법은 여러가지가 있다.스프링부트에서는 Bean을 등록할 때 자바코드(Annotation)로 등록하는 것을 권장한다.따라서 스프링 부트를 사용하는 개발자들은 @Component, @Service, @Controller, @Repository, @Bean, @Configuration 등으로 Bean들을 등록하고 주입받아 사용하는게 일반적이다.그런데 프로그램 개발중에 아무 생각없이 여러 개의 Bean들을 등록해놓고 어떤 Bean에서 @Autowired로 자연스럽게 주입받아서 '사용'하려다가 에러를 만났다.바로 Bean에 '아직' 등록되지 않은 Bean을 클래스에서 사용하려고 했기 때문이다.무슨 얘기인지 Sp..
자바 파일 변경 감지, 와치서비스를 이용한 파일 변경 알림 받기(WatchService, WatchKey) Java File Change Notification, Monitoring, WatchService 0. 긴~~ 사족다양하게 키워드를 준비해봤다.업무에서 Application Runtime중에 어떤 파일의 데이터(meta-data, properties 등...)가 변경되면 이벤트를 받아 다시 데이터를 메모리로 적재하는(reload) 기능이 필요했다.이 기능은 꽤나 광범위하게 쓰이고 있다.eclipse, IntelliJ 같은 IDE에서 파일이 변경되면 즉시 변경된 파일에 (*)별 표시가 뜨는 것과 Spring 같은 경우는 devtools를 dependency로 추가하면 파일이 변경될 때마다 서비스를 재시작해주는 기능등이 있다.또한 설정 값(Properties) 변경을 알려주는 기능은 그냥봐도 너무 많다.a..
자바 스트림(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..