개요 MySQL/MariaDB는 전통적으로 특정 테이블에 대한 ALTER 명령 실행시, 작업이 완료될 때까지 해당 테이블 전체에 락을 걸어 읽기, 쓰기 작업이 불가능했다. MySQL 5.6(MariaDB 10.0)부터 InnoDB 테이블에 Online DDL 기능이 추가되어 테이블 락을 최소화한 테이블 수정이 가능해졌다. 사용자는 ALTER 명령 실행시 ALGORITHM, LOCK 2개 옵션을 추가로 명시해주면 테이블 락을 최소화하여 테이블 스키마를 수정하는 작업을 수행할 수 있게 되었다. ALTER TABLE foobar ADD COLUMN is_foobar TINYINT(1) NULL DEFAULT 0 COMMENT 'foobar 여부', ALGORITHM=INSTANT; ALTER TABLE foo..
개요 Spring Boot 기반의 REST API를 설계할 경우, 예외 상황에 대한 응답 구조 설계에 있어 신중한 접근이 요구된다. 프로젝트 초기에 충분한 고민 없이 무작정 오류 응답을 처리하게 되면, 참여 개발자가 늘어날수록 자기 입맛에 따라 그 때 그 때 다른 구조로 응답하여 예외를 통제하기가 매우 힘들어진다.(나는 이런 사례를 Exception Hell이라고 부른다.) 이번 글에서는 철저히 통제된 예외 응답 구조를 설계하는 방법을 설명하고자 한다. Spring Boot의 기본 에러 응답 Spring Boot의 요청 처리 과정에서 어떠한 설정도 하지 않은채 예외가 발생하면 아래 형식으로 오류를 응답한다. # 400 BAD_REQUEST { "timestamp": 1500597044204, "statu..
개요 Spring Boot, JPA 환경에서 개발자를 당황시키는 AssertionFailure 예외가 발생하는 이유와 해결책을 정리하였다. org.hibernate.AssertionFailure: null id in com.jsonobject.domain.Foo entry (don't flush the Session after an exception occurs) AssertionFailure 예외가 발생하는 이유 AssertionFailure 예외를 발생시킨 지점은 실제 범인이 아닐 가능성이 높다. 같은 트랜잭션(세션) 범위 내에서 앞서 실행된 어떤 쿼리가 영향을 미쳤을 확률이 높다. AssertionFailure 예외는 @Transactional이 명시된 세션 내의 복수개의 쿼리가 연속적으로 실행되는..
개요 NGINX는 오랜 역사와 뛰어난 성능을 자랑하는 오픈 소스 리버스 프록시 소프트웨어이다. 일반적으로는 고정된 특정 목적지에 대한 리버스 프록시이자 로드 밸런서로 구성하는데 사용되는데, 이번 글에서는 요청 정보에 포함된 목적지 주소를 인식하여 다이나믹 리버스 프록시로 셋업하는 방법을 간단히 소개하고자 한다. (NGINX에 대한 자세한 사용법은 본 블로그의 이 글을 참고한다.) Dockerfile Dockerfile을 아래와 같이 작성한다. 직접 작성한 NGINX 설정 파일을 복사하는 과정을 추가했다. FROM public.ecr.aws/nginx/nginx:latest EXPOSE 80 COPY default.conf /etc/nginx/conf.d/default.conf default.conf NG..
- Total
- 2,773,076
- Today
- 214
- Yesterday
- 1,287
- jstl
- java
- JavaScript
- MySQL
- DynamoDB
- Kendo UI
- Spring Boot
- 로드바이크
- 평속
- jpa
- node.js
- Eclipse
- jsp
- CentOS
- 태그를 입력해 주세요.
- JHipster
- chrome
- Kendo UI Web Grid
- jQuery
- graylog
- 로드 바이크
- 자전거
- Spring MVC 3
- Docker
- kotlin
- maven
- bootstrap
- spring
- 알뜰폰
- 구동계