개요 Spring Boot, JPA 환경에서 개발하다보면 JPA의 멋진 철학에 매료되었다가 곧 현실과의 괴리를 느끼고, 끊임없는 내적 갈등에 휩싸이게 된다. 그런 상황을 유발하는 대표적인 예외가 바로 LazyInitializationException인데 이번 글에서는 해당 예외가 발생하는 이유와 해결책을 정리하였다. LazyInitializationException 예외가 발생하는 이유 일반적인 백엔드 프로젝트에서 로직의 대부분은 REST API에 해당하며 실행의 흐름은 @Controller, @Service, @Repository 순서가 된다. 서비스 레벨에서 @Transactional이 명시된 메써드가 종료되면 Hibernate의 Session도 함께 종료된다. FetchType.LAZY가 설정된 필..
개요 비지니스 로직을 아무리 명확하게 짜고 유닛 테스트를 촘촘하게 작성해도 실제 프로덕션 레벨에서는 유입량에 따라 예상하지 못한 수많은 데드락을 경험할 수 있다. 이번 글에서는 데드락을 최소화하는데 도움이 되는 READ-COMMITTED 트랜잭션 격리 레벨과 @Retryable 사용법을 설명하고자 한다. 앞서 읽어보면 좋은 글 MySQL/MariaDB, 트랜잭션과 격리 레벨 설명, 데드락 예방하기 Spring Boot, @Transactional 전파 레벨 정리 데드락 최소화 전략 트랜잭션 범위를 최대한 작게 조정한다. (공유 잠금 시간 최소화) 특히, @Controller 레벨에 명시된 @Transactional은 데드락을 유발할 가능성이 매우 크므로 제거한다. 모든 쿼리의 트랜잭션 격리 레벨을 REA..
개요 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..
개요 이번 글에서는 Kotlin, Spring Cloud Function을 이용하여 함수를 작성하고, AWS Lambda에 업로드하는 방법을 설명하고자 한다. Spring Boot 프로젝트 생성 Spring Initializr 웹사이트를 방문하여 아래 옵션으로 빠르게 시작점이 되는 빈 프로젝트를 생성할 수 있다. 브라우저에서 https://start.spring.io/ 접속 → Project: [Gradle Project] 선택 (기본값: Maven Project) → Language: [Kotlin] 선택 (기본값: Java) → Spring Boot: 2.X.X (Java 11을 지원하는 마지막 버전인 2.X.X를 선택) → Packaging: [Jar] 선택 → Java: [11] 선택 → [Gen..
- Total
- 3,039,872
- Today
- 48
- Yesterday
- 299
- kotlin
- jpa
- bootstrap
- 태그를 입력해 주세요.
- 평속
- graylog
- java
- spring
- Eclipse
- 구동계
- JHipster
- 로드바이크
- Tomcat
- JavaScript
- jstl
- Kendo UI
- Spring MVC 3
- DynamoDB
- chrome
- 알뜰폰
- node.js
- jsp
- MySQL
- CentOS
- 로드 바이크
- Docker
- maven
- Spring Boot
- Kendo UI Web Grid
- 자전거