boot

boot

    Spring Boot version 2.1.x에서 2.2.x (spring frame 5.2 이상)으로 버전업 진행 시 Spring Cloud AWS SnsAutoConfiguration 에서 TypeNotPresentExceptionProxy 가 발생하며 실행안되는 문제

    문제 발생 평소 문제가 많았던 webflux 부분 수정을 위해 spring boot 2.1.3에서 2.2.7버전으로 업그레이드를 진행하기 위해 gradle에서 spring boot version을 2.2.7로 변경하고 애플리케이션을 실행 시켰다. 그런데 평소에는 자주본적이 없던 TypeNotPresentExceptionProxy 에러가 발생했다. org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [com.baemin.bmart.search.BmartSearchAdminApplication]; nested exception is java..

    [공유] 우분투 설치 시 boot efi 관련 오류 수정 방법

    와이프가 결혼전에 집에서 사용하던 노트북 lenovo 제품이 있어서 이걸 간단하게 사용할 서버로 쓰고 싶었다. 그래서 우분투를 설치하려고 하는데 계속 the 'grub-efi-amd64-signed' package failed to install into /target/. Without the GRUB boot loader, the installed system will not boot. 라는 오류만 발생했다. 구글링을 하면서 efl boot 영역을 설정해주고 별짓 을 다해도 안되었는데 오늘 아침에 이 유튜브를 보고 해결했다. 나중을 위해서 공유해논다. https://www.youtube.com/watch?v=DWlB0_f3GAY

    Spring boot 모니터링 Actuator 소개 및 설치

    spring acturator를 통해서 스프링 애플리케이션의 작동여부등을 체크해보자. 설정 우선 gradle 라이브러리를 추가한다. compile 'org.springframework.boot:spring-boot-starter-actuator' 그리고 기존에는 application.properties나 yml에 아래 옵션을 설정해줘야 했지만 기본적으로 설정이 되어있다. endpoints.health.enabled=true 하지만 이는 Spring boot 2.0에서 다음으로 변경되었다. (https://stackoverflow.com/questions/48900892/how-to-enable-all-endpoints-in-actuator-spring-boot-2-0-0-rc1) How to enable..

    Intellij에서 spring boot multi module 사용시 jsp 못찾는 이슈 해결방법

    기존에 공부삼아서 개발중이던 wedulpos에 spring batch를 추가해보려고 했다. 그래서 공통으로 mono 프로젝트로 되어있던 wedulpos를 multi module로 수정했다. 그랬더니 이상하게 servlet context에서 jsp를 로드하지 못했다. 그래서 계속해서 ServletException not include... jsp 또는 ServletException not jsp found 오류가 발생했다. 그래서 엄청난 구글링을 2틀동안했다. 집에서 그리고 약속장소에서 기다리면서 노트북으로 그리고 퇴근하고 오늘.. 정말 가지가지한 방법을 다해봤었다. 기본적으로 embed-tomcat의 경우 jasper를 가지고 있지 못해서 별도의 모듈을 추가하고 servlet jspl 추가했고, comp..

    heroku 에서 spring boot jar파일 deploy시 Web process failed to bind to $PORT within 90 seconds of launch 에러 처리

    heroku에 코드를 올리지 않고 바로 jar 파일을 deploy하기 위해서 heroku cli를 이용하여 올리는데 자꾸 Web process failed to bind to $PORT within 90 seconds of launch가 발생했다. 이유를 몰라서 계속 알아보던 중 heroku에서 spring boot를 실행시키기 위해서는 Procfile을 작성하고 port를 지정해줘야 한다. 우선 application.yml 설정 server: port: ${port:8080} Procfile 설정 - Procfile은 확장자 없이 만들어야한다. - 포트는 8080이나 원하는 걸로 지정해 주고 profile까지 작성해주고 나머지 depoly를 위한 내요을 작성한다. web: java -Dspring.se..

    Spring Boot에서 6.4 Elasticsearch 연결 및 간단 CRUD

    Elasticsearch를 Spring Boot에서 작업을 하는 간단한 정리를 해보자. 1. Library 추가Elasticsearch를 사용하기 위해서는 spring-data-elasticsearch 라이브러리가 추가되어야 한다. gradle에 추가해보자.1234567dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch' implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' compileOnly "o..

    생성한 Custom validation으로 에러메시지 출력하기

    바로 직전 https://wedul.tistory.com/562?category=595982 에서 Custom validation을 만들어서 입력된 값에 validation을 체크하는 방법을 알아봤다.그럼 이 validation체크를 통해서 front에 상황에 맞는 에러를 보내줄 수 있도록 조치를 취해보자.우선 @valid 처리를 했었던 컨트롤러에서 에러 메시지를 수집해야한다. 1. ControllerSpring에서 Validation 작업을 진행할 시 validation에 문제가 발생하면 에러 내용을 묶어서 BindingResult로 처리할 수 있도록 제공해준다. 이를 사용하기 위해서 parameter로 BindingResult값을 추가해준다.1234567891011121314/** * 회원가입 * *..

    스프링 부트에서 사용하는 JPA 기능 정리

    스프링 프레임워크에서 제공하는 JPA는 별도의 구현 클래스 없이 인터페이스만을 사용할 수 있도록 제공한다. 제공되는 인터페이스 JpaRepository는 실행시점에 자동으로 인터페이스 내용을 연결하는 엔티티에 맞게 자동으로 구현해준다. 만약 스프링 JPA 인터페이스에서 제공하지 않는 기능을 사용하고 싶을 때는 메서드명을 특정한 규칙대로 만들어서 사용하면 인터페이스가 알아서 그 이름에 맞는 JPQL을 만들어서 실행해준다. 스프링 JPA 인터페이스는 Mysql같은 RDBMS 뿐만 아니라 Mongodb, Redis와 같은 NoSQL에도 동일한 인터페이스를 사용해서 기능을 사용할 수 있도록 제공해준다. 공통으로 사용할 수 있기에 아주 편리하다. 우선 스프링 부트에 JPA를 사용하기 위해서 Gradle에 라이브러..

    JPA 영속성 컨테이너에서 엔티티 사용하기

    JPA에서 사용하는 영속성 컨테이너에서 사용되는 엔티티에 대해 정리해보자. 엔티티 생명주기영속성 컨테이너(Persistent Context)에서 존재하는 엔티티의 생명주기를 정리해보자. 엔티티는 4가지 상태가 존재한다. 이름 특징 비영속 영속성 컨텍스트와 전혀 관계가 없는 상태 (엔티티 객체가 생성만 되고 컨텍스트와 아무런 연관이 없는경우) 영속 영속성 컨텍스트에 저장된 상태 (엔티티 매니저를 통해서 영속성 컨텍스트에 저장되고 영속성 컨텍스트가 관리한다.) 준영속 영속성 컨텍스트에 저장되었다가 분리된 상태 (영속성 컨텍스트가 관리하던 영속 상태의 엔티티를 영속성 컨텍스트가 관리하지 않으면 준영속 상태가 된다. close(), clear(), detach() 메소드를 사용하면 준영속 상태가 된다. 삭제 삭..

    Spring Boot Cross Domain 처리

    웹 브라우저에서 같은 도메인을 사용하는 서비스에 대한 요청은 정상적으로 처리가 되나 도메인이 같지 않은 서비스에 요청을 할경우에 오류가 발생한다. 이는 동일 출처 정책(Same Origin Policy) 라는 정책을 두어 다른 도메인의 서버에 요청하는 것을 보안 문제로 간주하고 이를 차단하는 것 때문에 발생한다. Spring Boot에서 간단한 방식으로 해결할 수 있다. 1. 요청에 @CrossOrigin 애노테이션 붙히기12345@GetMapping("/greet")@CrossOriginpublic Greet greeting() { return new Greet("test");}Colored by Color Scriptercs 2. 특정 도메인에서 오는 요청만 받고 싶을 경우.-> 특정 도메인에서 오는..

    Fake SMTP로 메일 전송 테스트

    간단하게 rabbitMQ 코드 만들어보는 도중에 메일전송기능이 필요했다. 그런데 메일을 계속 보낼수도 없기 때문에 메일이 잘 전송되고 있는지 확인할 수 있는 프로그램이 있는지 찾아봤다. 그중에 Fake SMTP 라는 프로그램이 있어서 소개해본다.프로그램은 하단에 첨부된 링크에서 다운받을 수 있다. 실행방법은 다운받은 파일위치에서 java -jar fakeSMTP-2.0.jar 명령어로 실행시키면 GUI 화면이 나온다. 스프링 부트에서 JavaMailSender와 간단한 설정을 통해 메일 전송 여부를 테스트 할 수 있다. 1234567891011121314151617181920212223242526// application.propertiesspring.mail.host=localhostspring.mai..

    스프링 웹플럭스(spring webflux)를 활용한 간단한 리액티브 마이크로 서비스

    자바 리액티브 프로그래밍은 리액티브 스트림 명세를 바탕으로 하고 있다. 리액티브 스트림 명세에는 컴포넌트 사이의 비동기 스트림 처리나 이벤트 흐름을 Non Blocking 방식으로 처리하기 위한 문법을 정의한다. 일반적인 옵저버 패턴과 달리 리액티브 스트림에는 시퀀스의 처리, 완료 알림, 실패시 backpressure 적용 등이 추가된다. backpressure는 받는 컴포넌트에서 보내는 컴포넌트에게 얼마만큼의 데이터를 소화할 수 있다고 알려줄 수 있다. 그래서 받는 컴포넌트에서 처리될 준비가 됐을 때만 데이터를 받을 수 있다. 그래서 서로 속도가 다른 컴포넌트 사이의 통신을 할 때 유리하다. 스프링 프레임워크 5 web flux는 Reactor 리액티브 스트림 명세를 기반으로 되어있다. 간단한 Spri..

    리액티브 스트림의 이해

    리액티브 스트림은 총 4개의 인터페이스로 구성되어 있다. ㅁ 발행자(Publisher) - 데이터의 소스를 가지고 있으며 Subscriber의 요청이 오면 데이터를 발행한다. 구독자는 발행자에 대한 구독을 추가할 수 있다. Subscribe 메소드를 통해서 구독자를 추가할수 있다.123public interface Publisher { public void subscribe(Subscriber

    Facebook Javascript plugin과 spring security를 이용한 페이스북 로그인

    개인적으로 공부겸 만들고 있는 Wedul Pos에는 아이디와 패스워드를 사용해서 로그인하는 방식을 제공했다. 하지만 페이스북 로그인 방식을 추가해보고 싶어서 facebook 개발자 사이트에 가입하여 정보를 얻고 추가해봤다. 우선 페이스북 로그인 방식을 처리하는 방식은 Facebook Javascript plugin을 사용하여 spring security에서 인증을 하는 방식과 /sign/facebook 요청만 front에서 보내면 server에서 모든 처리를 진행하는 방식 두가지가 있다. 그 중에 첫번째 javascript plugin을 이용하는 방식을 사용해서 구현해보자. 1. facebook developer 사이트에서 javascript 내용 얻기 https://developers.facebook...

    Spring Boot application.properties 암호화 내역 복호화 방법

    Spring Boot에서는 여러 설정값을 application.properties에 입력하여 사용할 수 있다. Spring보다 편리하고 효율적이다. 하지만 DBMS 사용을 위해서 연결정보를 properties에 입력할 때 평문으로 그냥 삽입하면 정보 유출에 문제가 발생 할 수 있다. 이를 해결하기 위해서 application.properties에서 어떻게 사용하는지 확인해보자. 1. application.properties 내용 암호화하여 입력하기우선 application.properties에 있는 내용을 암호화 해서 삽입한다. 나는 AES256으로 암호화 하여 삽입하였다.12spring.datasource.username=K2amNtg+kL5xK23g7H3Znw==spring.datasource.pas..

    Spring Validation을 이용해서 요청 검증처리

    대게 개발을 진행할 때 front에서 validate를 체크하고 민감한 정보에 대해서는 한번더 체크를 진행하고 작업을 했었다. 하지만 클라이언트에서만 validation을 체크하게 되는 경우 브라우저에서 악의적인 행동에 대해서 대응하기 어려워질수 있기 때문에 백엔드에서도 Validation을 처리해야한다. 여기서 사용되는 @valid 어노테이션들을 알아보자. 1. DTO validation 선언 우선적으로 DTO에 각 속성에 필요한 @valid 옵션들을 추가한다.1234567891011121314151617181920212223242526272829303132package com.wedul.springboottest.rest.dto; import lombok.*; import javax.validatio..

    JSP가 포함된 Spring Boot에서 Jar 파일로 패키징 시 오류 해결방법

    Spring Boot를 통해 다양한 공부를 하던 도중에 View는 편하게 사용하던 JSP를 사용하였다. IDE 환경에서는 application.properties에서 다음과 같이 설정해주고 src/main/webapp/WEB-INF/ 밑에 jsp를 위치시키면 사용이 가능했다. #JSP spring.mvc.view.prefix=/WEB-INF/views/**/ spring.mvc.view.suffix=.jsp 그때 메이븐 wrapper인 mvnw를 이용해서 jar 파일로 패키징을 진행하였을 때 다음과 같이 오류가 발생합니다. 오류내용 [2018-07-01 23:02:04] [ERROR] [DirectJDKLog.java:182] Servlet.service() for servlet [jsp] threw e..

    Spring Boot 빌드 파일을 이미지로 만들어 컨테이너에 올리기.

    스프링 부트 애플리케이션을 Docker image로 빌드해서 컨테이너에 올리는 작업을 진행해 보겠다. 필요사항 JDK 1.8 later Maven 3.2 이상 STS Docker Pom.xml 수정을 먼저 진행해야한다. wedul 이라는 이름의 jar 파일이 생성된다. docker에서 실행하기 위한 Maven 설정이 들어있는 jar file이 만들어 진다. 만약 image prefix 값을 별도로 지정하지 않으면 artifact id가 명시된다. wedul com.spotify dockerfile-maven-plugin 1.3.6 ${docker.image.prefix}/${project.artifactId} target/${project.build.finalName}.jar 그리고 프로젝트 Root에 ..

    Spring boot maven 빌드 후 jar 파일 실행 시 Mybatis type Alias 에러 수정

    Spring Boot에서 Maven으로 빌드 후 생성된 jar 파일을 java -jar wedulpos.jar로 실행시키려 하였으나, 다음과 같은 오류가 발생하였다. 에러내용[ERROR] [SpringApplication.java:842] Application run failedorg.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'authProvider': Unsatisfied dependency expressed through field 'userService'; nested exception is org.springframework.beans.factory.UnsatisfiedDep..

    Spring boot에서 Spring security를 사용하여 로그인 하기

    스프링 부트를 공부하면서 스프링에서 제공하는 spring security를 통해 로그인 기능을 편리하게 구현할 수 있다는 것을 알았다. 기존에 회사에서는 interceptor 기능을 통해서 로그인 기능을 만들어서 사용했다. 둘다 좋은 방식이지만 spring security를 사용하면 csrf 공격도 막을 수 있어서 한번 사용해봐도 좋을 것 같다. 1. 라이브러리 pom.xml 1234 org.springframework.boot spring-boot-starter-securityColored by Color Scriptercs 2. SpringSecurityAdaptor -> 스프링 시큐리티에 필요한 내용을 정의하는 configuration을 생성해야한다. -> WebSecurityConfigurerAd..

    spring boot에 https 접속 적용하기

    구글에서 http에 대한 모든 접속을 보안 경고를 표시하게 되면서, 모든 접속에 https 접속이 필수가 되었다. 스프링 부트를 접해보면서 스프링에서는 조금 과정이 귀찮았던 https 접속을 적용하는게 얼마나 편해졌는지 알아보았다. 1. application.properties 설정 #ssl 설정 server.port=13443 server.ssl.key-store=classpath:keystore.jks server.ssl.key-store-password=test server.ssl.key-password=test 2. keystore 만들기 -> ssl을 적용하려면 자가 서명 키스토어가 필요하다. 만약 인증기관에서 인증서를 발급받은 경우 그냥 그 파일을 사용하면 된다. 위의 명령어를 사용하여 src..

    spring boot에서 jsp사용하기

    spring framework만 사용하다가 요근래 대다수에 회사에서 spring-boot를 사용하는 것을 확인하고 spring-boot에 대해 공부를 해보았다. 확실히 spring-boot를 사용하면 설정이 엄청 간단해서 개발자가 설정에 집중하는게 아니라 비즈니스 로직에만 딱 고민할 수 있도록 되어있어서 진짜 편한것 같다. 그래서 기존에 내가 하고 있는 wedulpos 프로젝트를 spring-boot로 마이그레이션 하는 작업을 거쳤는데 그 사이에 어려운 부분이 있었다. 스프링에서는 jsp를 사용하는 것이 어렵지 않았으나, 기본적으로 spring-boot에서는 jsp 사용이 기본이 아니다. 그래서 설정을 위해서는 몇가지 변경을 해주어야한다. 1. pom설정 - jstl 사용을 위한 라이브러리 추가 1234..

    spring boot 재시작 없이 frontend(html, js..) 변경내용 사용하기

    spring boot를 공부하면서 html요소가 자동으로 변경되지 않아서.. 계속 껏다켜야해서 너무 불편했다. 그래서 구글링 하던중 방법을 알게되어 적어본다. 1. pom.xml 추가 12345 org.springframework.boot spring-boot-devtools trueColored by Color Scriptercs 2. debug 모드로 실행 3. eclipse 설정 중 Build Automatically 설정 여부 확인 (기본으로 사용으로 설정되어 있음)