개요 API를 운영하다보면 가장 흔하게 발생하는 이슈가 아주 짧은 찰나에, 동일한 API 요청이 거의 동시에 들어오는 것이다. 가장 일반적인 원인은 대개 엔드 유저가 브라우저 상에서 특정 버튼을 아주 빠르게 연속으로 클릭하는 것이고, 크리티컬하게는 특정 엔티티의 상태 변화를 유발하는 아주 미세한 차이의 Race Condition이 발생하는 경우도 있다. API는 이런 상황에 대비하여 동일 요청에 대해 중복 실행을 방지하는 로직으로 대응할 필요가 있다. 이번 글에서는 Spring Boot 프로젝트에서 Redis를 이용한 중복 실행 방지 로직을 구현하고 사용하는 예를 설명하고자 한다. 운영체제 환경 변수 추가 Redis 연결을 위한 환경 변수를 아래와 같이 추가한다. (상황에 맞게 application.ya..
개요 Graylog는 기본적으로 적재될 로그의 각 필드 데이터 타입을 Dynamic Mapping으로 판단하여 인덱스 템플릿을 자동 생성한다. 장점은 손이 덜 가고 편리하다는 것인데, 단점으로는 문자열이 저장되어야할 필드를 숫자 타입으로 판단해버리면 로그 자체가 인덱스에 적재되지 못하고 유실될 수 있다. 운영 환경에서 로그 유실은 치명적일 수 있으므로 사전에 로그 필드의 데이터 타입을 지정하여 이러한 상황을 예방해야 한다. Graylog는 Custom Index Mapping를 통해 사전 데이터 타입 지정 기능을 제공한다. Graylog Custom Index Mapping 적용 방법 Custom Index Mapping 적용은 Graylog가 사용하는 Elasticsearch에 PUT /_templat..
개요 클라이언트-서버 관계에서 파일 업로드 구현시 파일의 최종 저장 위치가 Amazon S3일 경우, 서버는 클라이언트에게 제한된 시간을 가지는 업로드 전용의 Presigned URL을 제공하여 파일 업로드 처리를 서버가 직접 부담하지 않고 S3에게 전가할 수 있다. 이를 통해 서버 입장에서는 보안과 서버 자원 절약이라는 2마리 토끼를 모두 잡을 수 있다. 한가지 이슈는 Presigned URL로 업로드 가능한 최대 파일 크기가 5GB로 이 것을 초과하는 대용량 파일은 업로드가 불가능하다. AWS가 권장하는 해결책은 Multipart 기능으로 원본 대용량 파일을 복수개의 작은 단위로 쪼개어 업로드하는 것이다. 이번 글에서는 Spring Boot에서 Amazon S3의 Multipart 기능을 이용하여 클..
개요 2022-11-28 Spring Boot가 2.7에서 3.0으로 오랜만의 메이저 버전 업그레이드되었다. Java 17를 최소 버전으로 요구하는 등의 큰 변경점이 있었고, 업그레이드해보니 Break Changes가 있어 소스 코드에도 자잘한 수정이 요구된다. 최근 국내 대부분의 현업 프로젝트에서 Kotlin, Gradle, Spring Data JPA, Querydsl을 사용하고 있는 만큼 도움이 될까 해서 새로운 설정 방법을 정리했다. build.gradle.kts 수정 프로젝트 루트의 build.gradle.kts에 아래 내용을 추가하거나 변경한다. (Spring Boot 2.X.X와 Spring Boot 3.0.0 주석을 확인하여 Spring Boot 3.0.0 부분만 적용하면 된다.) buil..
- Total
- 3,039,872
- Today
- 48
- Yesterday
- 299
- JavaScript
- maven
- bootstrap
- 알뜰폰
- 로드 바이크
- 태그를 입력해 주세요.
- chrome
- CentOS
- 구동계
- java
- Spring Boot
- Eclipse
- 자전거
- 로드바이크
- DynamoDB
- JHipster
- jpa
- Tomcat
- Docker
- MySQL
- spring
- graylog
- Spring MVC 3
- Kendo UI
- jsp
- jstl
- Kendo UI Web Grid
- node.js
- 평속
- kotlin