일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- smart cast
- 유사코드
- 프로젝트
- 학점
- JVM
- 오라클
- auto configure
- K6
- MongoDB
- 백준 알고리즘
- 문법 정리
- resilience4j
- 운영체제
- spring
- dynamic query
- SQL
- 오라클 디비
- c#
- 자바 프로젝트
- 티스토리
- 파이썬
- 자바
- hyperledger
- oracle
- jsp
- gradle
- 파이썬 소스
- 알고리즘
- 리눅스
- 초대장
- Today
- Total
목록Programming/Spring (25)
모종닷컴
spring boot r2dbc와 flyway를 같이 사용하니 flyway가 실행되지 않았던 문제가 있었습니다. 이에 대한 해결법과 원인에 대해 간단하게 공유드립니다. r2dbc 반응형 프로그래밍을 통해 관계형 데이터베이스와 비동기적으로 통신하기 위한 스펙입니다. spring-boot-r2dbc는 이러한 r2dbc 스펙을 기반으로 만들어진 spring boot 프레임워크 모듈입니다. flyway Git이 코드 버전 관리 시스템이라면 flyway는 데이터베이스의 버전 관리 툴 정도로 보시면 될 것 같습니다. 좀 더 풀어서 설명하면 개발자가 애플리케이션에 변경과 관련된 SQL 스크립트를 만들어 배포하면 애플리케이션이 실행될 때 Flyway가 타깃 데이터베이스에 이 SQL을 대신 실행시킵니다. 이렇게 함으로써..
MySQL insert 실패 테스트해 보기 user 테이블 생성 CREATE TABLE `user` ( `id` bigint(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) Lock 테스트 세션 두 개를 열어서 테스트를 진행합니다. 세션 1에서 인덱스 레코드 락을 걸고, 세션 2에서 같은 인덱스로 insert를 실행시킬 겁니다. 이때 락은 얼마나 잡고 있을 건지는 innodb_lock_wait_timeout 설정값에 따라 다릅니다. SHOW VARIABLES LIKE 'innodb_lock_wait_timeout'; 쿼리를 이용해서 락 대기 시간이 몇 초인..
헥사고날 아키텍처 설계에 따라 프로젝트를 하다 보니 각 영역에 전달해 줄 때 데이터 매핑 작업이 필수가 되었습니다. 데이터 매핑을 할 때 쓰는 라이브러리나 함수들이 많은데 각각의 성능을 비교해보고자 합니다. 테스트에 사용할 클래스 생성 data class Food( var name: String = "", var price: Int = 0, var calories: Int = 0, var color: String = "NONE" ) data class FoodDto( var name: String = "", var price: Int = 0, var calories: Int = 0, var color: String = "NONE" ) ModelMapper implementation("org.modelma..
스프링 프레임워크 기반 프로젝트를 계속하다 보니 문득 내가 모르는 스프링 프로젝트가 또 있나 싶어서 확인하다 보니 Spring Shell 프로젝트를 발견하게 되었습니다. 최근 프로젝트 테스트를 위한 방법을 조금 고민하고 있었는데 어쩌면 좋은 방안이 될 수 있을 것 같아 한번 사용해봤습니다. Spring Shell ? 모든 애플리케이션에 멋진 사용자 인터페이스가 필요한 것은 아니며, 경우에 따라 대화형 터미널을 통해 응용 프로그램과 상호 작용하는 것이 적절한 방법이 될 수 있습니다. 스프링 쉘에는 고급 기능(구문 분석, 탭 완성, 출력 색상 지정, 입력 변환 및 유효성 검사)이 포함되어 있어 핵심 명령 로직에 집중할 수 있습니다. 스프링 쉘을 써보기로 결정한 이유? 저의 경우 스프링 기반으로 만든 프로젝트..
Spring에서 Redis을 사용할 때 동적인 데이터를 삽입해야 하는 경우가 있습니다. spring-data-redis 버전에 따라 살짝 다르긴 하지만 현재 사용 중인 2.2.13.RELEASE 버전을 기준으로 포스팅하도록 하겠습니다. 프로젝트 세팅 (gradle, kotlin, spring boot) 그레이들 스크립트 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("org.springframework.boot") version "2.2.13.RELEASE" id("io.spring.dependency-management") version "1.0.15.RELEASE" kotlin("jvm") version "1.6.21" kot..
혹시 AWS Simple Queue Service(SQS)를 활용하고 계신가요? 그리고 어떤 이유에 의해서 SQS에서 polling 해오는 부분을 임의로 중지 및 시작할 수 있도록 컨트롤하고 싶으신 적이 있으신가요? 그렇다면 이번 글이 도움이 될 수도 있을 것 같습니다. 저는 위와 같이 SQS를 임의로 중지하거나 시작하는 등의 컨트롤을 해야 하는 경우가 있었고 이 글이 저와 같은 고민을 하고 계신 분들께 도움이 될 수 있을 것 같아 이번 포스팅을 쓰게 되었습니다. 시작하기 전에 먼저 테스트 환경 및 코드를 먼저 맞춰보도록 하죠. 환경 세팅 IAM 사용자 생성 SQS를 사용할 수 있는 사용자 하나를 추가해보도록 하겠습니다. IAM 서비스에 들어가서 '액세스 관리'의 '사용자' 탭에 들어갑니다. 그러면 아래..
이전 포스팅(Circuit Breaker Pattern 그리고 이를 스프링에 적용해보기)에서 예고한 대로 Circuit Breaker의 상태 변화에 따른 이벤트 리스너 추가 및 서킷의 상태를 수동으로 변경하는 법 및 서킷브레이커를 리셋하는 방법을 쓰려고 합니다. 이벤트 리스너 추가 CircuitBreaker를 적용하고 나서 고민했던 포인트 중 하나는 서킷브레이커가 OPEN 상태가 되었을 때 개발자들도 인지를 했으면 좋겠다는 생각이었습니다. 처음에는 서킷브레이커 코드 중에서 상태를 변경하는 부분을 찾아내서 해당 부분을 커스텀하면 되지 않을까?라는 생각을 했었습니다. 서킷브레이커 코드를 조금 찾아보고 나니, 서킷에 이벤트 리스너가 있는 걸 알 수 있었습니다. 관련해서 계속 파고들어 가다 보니 CircuitB..
MySQL의 경우 flyway를 통해서 데이터 마이그레이션을 진행할 수 있는데 Mongodb의 경우는 데이터 마이그레이션을 하기 위해서는 어떤 라이브러리를 사용할 수 있을까? Mongock 페이지에서 소개하는 간단한 특징 몇 개만 짚어보자면 아래와 같다. 자바 기반 마이그레이션 도구 견고한 락 메커니즘을 이용하기 때문에 분산 환경에서 안정적으로 실행 가능하다. 코드로 마이그레이션 스크립트를 작성할 수 있다. MongoDB 마이그레이션이 가능하며 (자칭) 가장 안정적인 프로덕트 오픈 소스 정기적인 유지보수 Spring과 호환이 좋다. 노란줄만 보더라도 적합해 보이는 툴입니다. MongoDB 마이그레이션으로 가장 많은 스타를 받고 있는 mongobee의 경우 업데이트가 이제는 거의 없는 반면 Mongock은..
Circuit Breaker는 무엇이며 어떠한 상황에서 사용될까? circuit breaker는 이름에서 알 수 있듯이 회로를 차단하는 기능입니다. 주로 외부 콜에 의존하는 부분에 사용합니다. 예를 들어 A와 B 서버가 존재한다고 가정해보겠습니다. A서버에서는 B서버의 API에 의존하고 있는 형태일 때 만약 B서버에 과부하가 걸려 응답을 제시간에 못주게 되는 경우 A서버에서의 API 호출은 응답을 기다리다가 모두 실패하게 될 것입니다. 이렇게 B서버의 장애는 A서버 외에도 B서버를 사용하고 있는 모든 서버에 장애가 전파되게 됩니다. 이때 이런 생각을 해보게 됩니다. "어차피 지금 B서버의 요청은 모두 timeout이 나게 될텐데 A서버가 이 요청을 위해 리소스를 계속 낭비하고 있어야 할까?" 예를 들어 ..
개요 작업을 하다가 우연히 발견하게 된 것이 있습니다. MongoDB에 일괄로 저장하는 코드를 작성하고 @Transactional을 붙이면 이 작업이 트랜잭션 단위로 동작하기를 기대했는데 실제로는 전혀 동작이 되고 있지 않았기 때문입니다. 문서들을 찾아본 결과 MongoDB는 4.0 버전 이후부터 Transaction을 지원하기 시작했고, 사용하고 있는 Spring Data MongoDB는 2.1 버전 이후부터 MongoDB의 Transaction을 사용할 수 있다고 합니다. 제가 작업하는 환경은 모두 MongoDB의 Transaction을 사용할 수 있는 버전이었음에도 불구하고 동작이 되지 않았습니다. 그래서 이번 포스팅에서는 스프링 프레임워크에서 MongoDB의 Transaction을 사용하기 위한 ..