본문 바로가기

분류 전체보기50

분산환경 동시성 처리 2 - redis SETNX 사용 https://pius712.tistory.com/25 분산환경 동시성 처리 1 - db 사용동시성 이슈란 무엇인가?멀티 스레딩 환경에서는 동시성 이슈로 인해서 공유자원이 경쟁상태(race condition)에 놓이는 상황이 발생할 수 있다. JVM 진영에서는 객체의 상태 변수도 race condition 이 발pius712.tistory.com 위 포스팅에서는 database 기능을 통해서 동시성 처리 예제를 만들어 보았다.이번 포스팅에서는 redis 를 활용하여 동시성 제어를 해보려고한다.이번 포스팅에서는 redis 자체에 대해서는 깊게 다루지 않으려고 한다.선착순과는 다른점참고로, 이전 포스팅과 이번 포스팅의 사례는 선착순 시스템의 경우에는 적절하지 않을 수 있다.왜냐하면, 기본적으로 이전 포스팅에.. 2024. 5. 17.
분산환경 동시성 처리 1 - db 사용 동시성 이슈란 무엇인가?멀티 스레딩 환경에서는 동시성 이슈로 인해서 공유자원이 경쟁상태(race condition)에 놓이는 상황이 발생할 수 있다. JVM 진영에서는 객체의 상태 변수도 race condition 이 발생할 수 있는데, 이번에는 데이터베이스를 중점적으로 다뤄볼 예정이다.데이터베이스에서 발생하는 race condition 의 경우, JVM 언어가 아닌 nodejs 같은 싱글스레드 기반의 언어에서도 발생할 수 있다. 그 이유는 데이터베이스 자체가 멀티스레드로 동작하기 때문이다.동시성이 발생하는 이유는 하나의 공유 자원에 대해 여러 개의 연산이 원자적(atomic) 으로 동작하지 않기 때문이다.아래의 예시처럼 t1 스레드와 t2 스레드가 food 의 개수를 감소하는 로직을 다룬다고 했을 때,.. 2024. 5. 17.
redis lock 1부 (feat. Redlock) 분산 락이란?분산 락은 여러 개의 클라이언트가 특정 리소스에 접근할 때, 한번에 하나의 클라이언트만 접근(mutual exclusive) 할 수 있도록 하는 메커니즘이다.분산락의 조건분산 락은 최소한 아래의 조건을 만족시켜야한다.safety: 하나의 클라이언트만 리소스에 접근할 수 있어야한다. (mutual exclusive)deadlock free: 특정 클라이언트가 락 획득 후 죽는다고 해도, 결국에 다른 클라이언트가 락을 획득 할 수 있어야한다.fault tolerance: 일부 레디스 노드가 죽는다고해도, 대다수가 살아있다면 락 획득을 할 수 있어야한다.redlock 이전 라이브러리들의 문제?레디스 공식문서에 의하면, redlock 이전의 라이브러리들은 문제가 있었다고 한다.그것은 redis re.. 2024. 5. 3.
나는 테스트에서 @Transactional 붙이지 않겠다.. (feat. 동시성 삽질기) 재민님 유튜브: https://www.youtube.com/watch?v=PDhN6aiF7QQ 향로님 블로그: https://jojoldu.tistory.com/761토비님 페이스북 게시글: https://www.facebook.com/tobyilee/posts/pfbid037KmQz4TbwBfgkAXc8JjMjipMesF9iuTTWvMtUKirr3742cGfvVrq4Aft33CGmLWSl 로그인 또는 가입하여 보기Facebook에서 게시물, 사진 등을 확인하세요.www.facebook.com 한 때, 테스트에 @Transactional 을 붙일 것이냐 말 것이냐에 대한 논쟁이 개발자 커뮤니티에서 핫했었다.나는 별다른 생각이 없이, 회사에서 안 쓰기도하고 변경감지 관련해서 한번 실수한 이후로 그냥 안쓰고.. 2024. 5. 2.
mikro-orm auto increment issue 등록 후기 이슈등록: https://github.com/mikro-orm/mikro-orm/issues/5460 Mysql auto_increment_increment setting is not work. · Issue #5460 · mikro-orm/mikro-orm Describe the bug If you set mysql variable auto_increment_increment to 2, When saving multiple entities, pk should be incremented by 2. However, if you use the following code in the MySqlDriver fil... github.com [ 문제 상황 ] 사내에서 mikro-orm 을 Mysql 과 사용하고 있.. 2024. 4. 17.
AWS 네트워크 - VPC, ELB, Route53 1. VPC (Virtual Private Cloud)가상 네트워크로써 네트워크 환경을 논리적으로 격리시켜줌.환경을 분리(dev, live)보안, 트래픽 등을 분리하나의 VPC 안에는 여러 서브넷이 존재함.1.1 서브넷VPC 내에서 리소스를 그룹화 한 것을 서브넷이라고 함. 여기서 리소스라 함은, ec2 와 같은 것을 뜻함.서브넷은 퍼블릭 서브넷과 프라이빗 서브넷으로 나뉜다.퍼블릭 서브넷은 인터넷 게이트웨이를 통해 인터넷과 연결될 수 있는 서브넷이고, 프라이빗 서브넷은 VPC 내에서만 통신이 가능하다. (NAT 게이트웨이를 통하면 외부 통신 가능. 아래에서 추가 설명)1.2 라우팅 테이블라우팅 테이블은 네트워크의 라우팅 정보를 담는 테이블이다.VPC 생성시 라우팅 테이블이 생기고, 서브넷마다 라우팅 테이.. 2024. 3. 24.
jackson for kotlin part3. 삽질기 (feat. jacksonObjectMapper) https://pius712.tistory.com/19 jackson for kotlin part2. 커스터마이징 앞선 글에 이어서, 추가로 커스터마이징에 대해서 글을 쓰려고 한다. https://pius712.tistory.com/11 jackson for kotlin part1. 동작 원리 kotlin 을 사용하면, kotlin 용의 jackson library를 설치해야한다. implementation( pius712.tistory.com 위 글을 쓰면서, 잠깐 삽질을 했었다. 글을 쓰면서, 동작 확인차 테스트 코드를 만들어서 돌리는데 설정이 안먹히는 것이었다. 문제의 발단 serialize 를 설정해놓고 아래와 같이 테스트 코드를 돌렸다. 테스트 실패. // 설정 @Configuration cla.. 2024. 3. 10.
jackson for kotlin part2. 커스터마이징 앞선 글에 이어서, 추가로 커스터마이징에 대해서 글을 쓰려고 한다. https://pius712.tistory.com/11 jackson for kotlin part1. 동작 원리kotlin 을 사용하면, kotlin 용의 jackson library를 설치해야한다. implementation("com.fasterxml.jackson.module:jackson-module-kotlin") spring initializer 로 스프링 프로젝트를 구성하다보면, 자동으로 해당 라이브러리가pius712.tistory.com  Spring 부트에, JSON 형식의 요청을 하거나, 응답을 할 때는 ObjectMapper 인스턴스를 사용하게 된다.ObjectMapper 를 통해 marshalling, unmarsha.. 2024. 3. 10.
카프카 컨슈머 lock 삽질기 - 리밸런싱 3줄 선요약AWS 에는 스팟 인스턴스(Spot Instance)는 인스턴스가 죽을 수 있다.처리 도중 리밸런싱이 발생하면 오프셋 커밋을 하지 않아서 중복으로 메시지를 처리할 수 있다.컨슈머는 at least once 라는 것을 고려해서 개발해야한다.컨슈머 리밸런싱이란?카프카의 컨슈머 그룹내의 특정 컨슈머가 동작하지 않으면, 파티션을 다른 컨슈머에게 재할당하게 되는데, 이를 리밸런싱이라고 한다.리밸런싱은 크게 아래의 과정을 거치게 된다.트리거: 컨슈머 그룹에 변경 발생시 리밸런싱이 트리거 된다.파티션 재할당: 브로커는 그룹 코디네이터 역할을 하는데, 현재 컨슈머 그룹에 대해 파티션을 재할당한다.리밸런싱 진행프로세스 재게컨슈머를 추가하거나, 컨슈머가 장애가 나서 중단되는 경우에 리밸런싱이 일어나게 된다.일반.. 2024. 2. 26.