개요 Spring Boot 기반의 웹 애플리케이션은 기본적으로 각 요청에 대해 동기 방식으로 로직을 실행한다. 하지만, 필요에 따라 비동기 방식으로 로직을 실행해야 하는 경우도 있다. 예를 들면 I/O 부하가 많이 발생하는 배치 작업을 싱글 쓰레드로 처리하면 CPU와 메모리는 남아도는데, 병목이 생겨 느려지기 쉽상이다. 이런 경우 적절히 n개의 멀티 쓰레드로 쪼개어 배치 작업을 실행하면 처리 시간을 경우에 따라 드라마틱하게 단축할 수 있다. 이번 글에서는 이러한 사례를 해결하기 위한 비동기 방식의 실행 방법에 대해서 설명하고자 한다. RejectedExecutionHandler 구현체 작성 ThreadTaskExecutor에 의해 관리되는 쓰레드 풀의 가용 쓰레드가 한계치에 도달할 경우, TaskReje..
개요 웹의 시대가 열린지는 오래되었지만 REST API가 본격적으로 유행한지는 얼마 되지 않았다. 안타깝게도 국내는 비즈니스 로직 구현에만 초점을 맞추어 GET, POST 메써드의 구분 없이 API 요청을 허용한다거나(심지어 POST 요청에 쿼리 스트링을 담기도 한다.) 상태 코드를 사용하지 않고 무조건 200 응답 후 바디에 독자적인 코드를 재정의하는 등 HTTP 스펙의 권고사항을 무시한 API 개발이 너무나도 흔한 상황이다. 그럼에도 REST는 가독성, 유지보수성 등을 고려했을 때 꼭 필요한 설계 철학이다.(세계 최대의 커뮤니티 reddit 또한 REST API를 제공한다.) 이번 글에서는 이러한 REST API를 이용(소비)하는 클라이언트로서 RestTemplate의 사용 예를 설명하고자 한다. 라..
먼저 읽어볼만한 글 IntelliJ IDEA에서 Spring Boot 웹 프로젝트 생성하기 Spring Boot 프로젝트에서 Profile 적용하기 라이브러리 종속성 추가 /build.gradle 파일에 아래 내용을 추가한다. dependencies { testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test' testCompile group: 'org.assertj', name: 'assertj-core', version: '3.12.2 } spring-boot-starter-test Starter POM의 추가 만으로 Spring Test, JUnit, Hamcrest, Mockito를 모두 사용하여 테스트 클래스를 ..
개요 Java 진영은 javax.imageio 패키지명으로 제공되는 Java Image I/O API를 이용하여 리사이즈, 크롭 등의 이미지 처리를 할 수 있다. 이를 이용하여 Java 6 이상의 경우 웹에서 가장 많이 사용되는 JPEG, PNG, GIF(BMP 포함) 이미지를 자유롭게 처리할 수 있다. 하지만 단순히 이미지에 대한 썸네일만 하고 싶다면? Image IO의 사용법은 너무 번거롭다. 이번 글에서는 블로그 글로 쓰기 민망할 정도로 사용법이 쉬운 이미지 썸네일 생성 라이브러리인 Thumbnailator를 소개하고자 한다. 라이브러리 의존성 추가 Gradle 빌드 환경이라면 /build.gradle 파일에 아래와 같이 Thumbnailator 라이브러리를 추가한다. dependencies { c..
- Total
- Today
- Yesterday
- 로드바이크
- CentOS
- JHipster
- DynamoDB
- Kendo UI Web Grid
- jstl
- 구동계
- Docker
- kotlin
- bootstrap
- maven
- JavaScript
- Tomcat
- 자전거
- graylog
- Spring MVC 3
- 태그를 입력해 주세요.
- 알뜰폰
- Eclipse
- MySQL
- java
- 평속
- chrome
- node.js
- 로드 바이크
- spring
- jsp
- Spring Boot
- Kendo UI
- jpa
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |