개요 백엔드 엔지니어로서 프로덕션 레벨에서 쓰레드 풀을 이용한 비동기 및 병렬 처리에 충분히 만족하고 있었기 때문에, 코루틴을 따로 공부하지 않고 않았는데 코루틴을 이용하려 병목 현상을 효과적으로 해소하는 지인을 보고 코루틴 공부를 시작하게 되었다. 코루틴에 대한 첫 인상은 완전히 새로 발명된 비장의 무기라는 느낌보다는 쓰레드 사용을 정말 쉽게 해준다는 것이었다. 의식적으로 콜백 지옥에서 해방된 느낌마저 받았다. 이번 글에서는 Kotlin/JVM을 이용한 서버 사이드 관점에서 Kotlin의 코루틴의 기본적인 사용법을 정리하였고 지속적으로 업데이트할 예정이다. build.gradle.kts 프로젝트 루트의 build.gradle.kts에 아래 내용을 추가한다. val kotlinCoroutinesVersi..
개요 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..
- Total
- Today
- Yesterday
- 알뜰폰
- CentOS
- Spring Boot
- spring
- jstl
- Kendo UI
- JavaScript
- 로드바이크
- 평속
- chrome
- bootstrap
- 구동계
- jpa
- Eclipse
- 로드 바이크
- kotlin
- java
- Kendo UI Web Grid
- maven
- Spring MVC 3
- node.js
- jsp
- 자전거
- MySQL
- 태그를 입력해 주세요.
- Tomcat
- graylog
- Docker
- JHipster
- DynamoDB
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |