개요 Spring Boot 기반의 REST API를 설계할 경우, 예외 상황에 대한 응답 구조 설계에 있어 신중한 접근이 요구된다. 프로젝트 초기에 충분한 고민 없이 무작정 오류 응답을 처리하게 되면, 참여 개발자가 늘어날수록 자기 입맛에 따라 그 때 그 때 다른 구조로 응답하여 예외를 통제하기가 매우 힘들어진다. (나는 이런 사례를 Exception Hell이라고 부른다.) 이번 글에서는 철저히 통제된 예외 응답 구조를 설계하는 방법을 설명하고자 한다. Spring Boot의 기본 에러 응답 Spring Boot의 요청 처리 과정에서 어떠한 설정도 하지 않은채 예외가 발생하면 아래 형식으로 오류를 응답한다. # 400 BAD_REQUEST { "timestamp": 1500597044204, "stat..
개요 현재 내가 몸 담고 있는 프로젝트는 세금 계산과 관련되어 한 번에 수십에서 수백만의 엔티티 생성이 발생하는 비지니스 로직이 존재하며, 레코드 생성의 속도가 곧 경쟁력이 되기에 최적화에 있어 아주 중요한 요소이다. 이번 글에서는 기존에 대량의 엔티티가 단건으로 저장되던 것을 Buik Insert로 개선하는 과정을 정리하였다. MySQL 커넥션 스트링 추가 MySQL은 반다시 rewriteBatchedStatements=true 옵션을 커넥션 스트링에 추가해야 Bulk Insert가 활성화된다. Hikari Pool을 이용하여DataSource를 생성할 경우 아래와 같이 옵션을 추가하면 된다. val config = HikariConfig().apply { ... addDataSourceProperty..
AWS DMS AWS DMS는 아마존이 제공하는 서버리스 데이터 마이그레이션 서비스 상품이다. 이번 글에서는 운영 환경의 OLTP 데이터베이스에 대한 통계 지표 산출을 위해 ETL을 목적으로, 원본 데이터베이스의 데이터를 S3 버킷에 Parquet 형태로 복제하는 방법을 정리하였다. 복제 인스턴스 생성 가장 먼저 복제 인스턴스를 아래와 같이 생성한다. AWS DMS 콘솔 접속 → [복제 인스턴스] → [복제 인스턴스 생성] # 복제 인스턴스 구성 → 이름: foo-aurora-mysql-prod-replication-instance (입력) → 설명: foo-aurora-mysql-prod-replication-instance (입력) → 인스턴스 클래스: [dms.t3.medium] 선택 → 엔진 버전..
개요 JobRunr는 Fire and Forget 성격의 특정 작업을 즉시 또는 예약된 시각에 분산 실행할 수 있는 오픈 소스 Java 라이브러리이다. 앞서 본 블로그의 이 글에서 소개한 적이 있는데, Spring Boot 기반 프로젝트에서 @Schedule로 시간이 오래 걸리는 배치 작업을 적극적으로 사용하는 개발자라면 훨씬 고도화되고 편리한 개념이 많아 무료 커뮤니티 버전의 사용을 추천한다. (최근에는 제작자에게 제보하여 JVM 17 환경에서 구동되지 않는 버그가 수정되기 했는데 제보에 빠르게 반응하는 편이다.)JobRunr의 유료 엔터프라이즈 버전인 PRO 버전을 구매하면 추가 기능을 이용할 수 있는데 대표적으로 해당 작업을 특정 인스턴스에서만 선택적으로 실행할 수 있는 서버 태그 기능이 있다. 현..
- Total
- Today
- Yesterday
- chrome
- JHipster
- 자전거
- bootstrap
- kotlin
- 로드 바이크
- graylog
- java
- 평속
- jstl
- 알뜰폰
- MySQL
- 태그를 입력해 주세요.
- CentOS
- 로드바이크
- Kendo UI Web Grid
- Tomcat
- Docker
- Kendo UI
- Spring Boot
- DynamoDB
- 구동계
- jsp
- Spring MVC 3
- Eclipse
- node.js
- maven
- JavaScript
- spring
- 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 |