Spring Framework 6, Spring Boot 3 등 2022년 11월 새로운 Major 버전이 릴리즈가 됐다. Java version 17 이상을 기본으로 사용하면 Spring Native 를 공식적으로 지원한다. 이와 더불어 Spring Batch 도 5 Version 이 출시 됐다. 오늘 Spring Batch 5를 이용한 간단한 샘플코드와 새로운 부분을 알아 보겠다. Required Java 17+ 스프링 6 부터 Java 최소 사양이 최신 LTS Version 인 17이다. 그에 따라서 Spring Batch 5 역시 Java 17 이상이 필요하다. 지난 포스팅(https://warpgate3.tistory.com/entry/Java-8-to-17) 에 언급 했던 것 처럼 자바의 개선..
Spring Framework는 손쉽게 애플리케이션을 작성하게 도와준다. Spring Boot 에 와서는 웹 애플리케이션을 작성할 경우 웹컨테이너를 포함하고 있어 동작하는 웹서버를 만드는데 5분 조차 안 걸린다. 그렇게 웹애플리케이션 만들 수 있게 도와주는 스프링이지만 보안을 담당하는 스프링 시큐리티는 볼때마다 이렇게 복잡해야 돼!? 라는 생각이 자주 든다. 조금 이해를 돕기 위해 기본적인 스프링 시큐리티 클래스 다이어그램을 작성해봤다. 요즘 스프링 시큐리티 관련된 좋은 도서를 찾아 공부 중인데 해당 관련해서도 포스팅을 해봐야겠다.
파일을 읽어서 표준 출력을 하는 Spring 배치 프로그램을 작성해보겠다. 파일 처리는 가장 흔한 배치 형태 중 하나이지 않을까 생각한다. 준비 H2 DB (Memory -> File) 이전 글에서 우선 실행만을 테스트 하기 위해 H2 DB 를 메모리 상태로 띄운 형태를 파일 형태로 변경하겠다. 배치 프로그램은 실행 처리가 끝나면 종료되기 때문에 배치 종료후 사라지는 메모리 형태의 DB는 테스트 결과를 확인하기 어렵다. application.yml의 H2 DB 설정 내용을 아래와 같이 변경하자. 또한 최초 기동시 스프링 배치 내부 메타 테이블을 위한 설정 정보도 추가했다. spring: datasource: url: jdbc:h2:file:~/batchdb #file db 로 변경 username: sa..
몇 년 전 N사에서 프로젝트 중에 스프링 배치를 처음 접했다. 그 당시에는 스프링 배치에 대한 한글 서적이나(글을 쓰는 이시점에도 1권정도 있음) 블로그등 레퍼런스도 많이 없던 시절인데 어떻게 꾸역꾸역 했었던거 같다. 그 후 4-5 년이 시간이 흘러 다시 스프링 배치를 사용해 2개의 프로젝트를 수행했고 몇 년전의 나보다는 스프링 배치에 대한 지식이 조금은 나아졌다고 생각이 든다. 해당 경험으로 쉬운 예제 프로그램을 작성하면서 스프링 배치에 대한 내용을 알아보겠다. Batch 배치라는 용어는 범용적으로 많이 사용된다. 내가 생각하는 배치 프로세싱의 간단한 정의는 시작과 종료가 있고 특정 시간에 일련의 작업들이 순서대로 진행되는 프로그램이다. Daemon 이랑 대비 된다고 볼 수있다. Daemon 은 우리가..
요즘 가장 핫한 패러다임인 Reactive 한 애플리케이션을 만들기 위해서 Spring Web Flux를 이용해 웹 애플리케이션을 만들어도 DB가 Reactive를 지원하지 않으면 DB에서 Blocking되기 때문에 의미가 없다. Redis 같은 cache 나 Mongodb , 카산드라같은 NoSQL 은 조금 일찍 지원하고 있었으나 RDBMS 는 최근에서 1.x 버전이 공식 릴리즈 됐다. 오늘은 R2DBC(Reactive Relational Database Connectivity)를 이용해 Postgresql 을 저장소로 하는 간단한 테스트를 해보겠다. Spring Boot 2.3.0.M2 이 글을 작성된 날(20.04.02) 기준 Spring Boot 최신 버전은 2.2.6 이다. Spring Boot..
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..
지난번 처럼 메모리를 이용한 사용자 정보 저장은 Demo 등 인트라넷 내에서 운영하는 간단한 시스템일 경우 사용하고 대부분에 경우 사용하지 않는다. 오늘은 DB를 이용해 사용자를 로그인 처리하겠다. H2 database 스프링부트에 embded되어 있는 H2 database 를 사용하겠다. 이런 간단한 예제 애플리케이션을 만들거나 할때 사용하기 간편하다. pom.xml pom.xml 파일에 dependency 를 추가한다. com.zaxxer HikariCP com.h2database h2 1.3.148 org.springframework.boot spring-boot-starter-jdbc S1SecurityConfiguration 두 라인은 h2 Db사용에 있어서 필수적인 부분이다. http.csrf..
- Total
- Today
- Yesterday