일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- BFS
- @P0
- 처우산정
- 물채우기
- upper_bound
- 백준
- msSQL
- compose
- 소프티어
- 오퍼레터
- 파라메트릭
- boj #19237 #어른 상어
- Kafka
- 퇴사통보
- 연결요소
- softeer
- 백트래킹
- 기술면접
- 처우협의
- 경력
- dfs
- BOJ
- 성적평가
- 13908
- 매개변수탐색
- 6987
- Docker
- OFFSET
- incr
- 이분탐색
- Today
- Total
목록온라인강의/선착순이벤트 (9)
기술 블로그
try { couponRepository.save(new Coupon(userId)); } catch (Exception e) { logger.error("failed to create coupon:: " + userId); failedEventRepository.save(new FailedEvent(userId)); } Log를 남긴다. 쿠폰 발급 중에 오류가 발생하면, FailedEvent에 실패한 Event를 저장한다. 그리고, Log를 통해 확인하고 FailedEvent에 쌓인 데이터를 배치 프로그램 통해 읽어서(Read), 다시 재발급하면 된다.
활용 : 쿠폰 1인 당 1개만 발급가능 할 때, Redis Set 활용한다. PS C:\study\kafka> docker ps CONTAINER ID NAMES 972184460c21 myredis PS C:\study\kafka> docker exec -it 972184460c21 redis-cli 127.0.0.1:6379> sadd test 1 → set add key value (integer) 1 → 추가되었다면, 추가된 value의 개수를 return 127.0.0.1:6379> sadd test 1 (integer) 0 → 이미 test라는 key에 1이라는 value가 존재하므로, 0을 return
Redis의 Data 초기화 PS C:\Users\park7> docker exec -it [ContainerId] redis-cli 127.0.0.1:6379> flushall 해당 프로젝트를 위한 coupon_create 토픽 생성 PS C:\Users\park7> docker exec -it kafka kafka-topics.sh --bootstrap-server localhost:9092 --create --topic coupon_create WARNING: Due to limitations in metric names, topics with a period ('.') or underscore ('_') could collide. To avoid issues it is best to use eit..
Windows PowerShell 창 1 토픽 생성 PS C:\study\kafka> docker exec -it kafka kafka-topics.sh --bootstrap-server localhost:9092 --create --topic testTopic Created topic testTopic. 프로듀서 실행 PS C:\study\kafka> docker exec -it kafka kafka-console-producer.sh --topic testTopic --broker-list 0.0.0.0:9092 >hello → 창 2를 Open하고, 컨슈머 실행 명령어까지 실행 후 hello 입력하면, 창 2에서 hello가 출력됨. > Windows PowerShell 창 2 컨슈머 실행 PS C..
docker kafka를 사용하기 위해서는 compose가 설치되어 있어야 하는데, docker desktop이 설치되어 있다면, 자동으로 설치가 되어 있다. docker compose 설치 여부 PS C:\Users\park7> docker-compose -v docker-compose version 1.29.2, build 5becea4c docker compose 파일을 만들 폴더를 만들어야 한다. PS C:\Users\park7> cd C:\study PS C:\study> mkdir kafka PS C:\study> cd kafka PS C:\study\kafka> New-Item docker-compose.yml 그리고, docker-compose.yml 파일을 열어서, 아래 내용을 복사 붙여..
레이스 컨디션이 발생하는 곳 : 쿠폰 갯수를 가져오는 부분 하지만, 쿠폰 발급 전체를 싱글 스레드로 작업한다면, 성능이 좋지 않을 것이다. 먼저 요청한 사람의 쿠폰이 발급된 이후에 다른 사람들의 쿠폰 발급이 가능해지기 때문이다. 아래 예시를 보자. 예시) 10:01 1번 사용자 쿠폰 요청 10:03 1번 사용자 쿠폰 발급 → 2~N번 사용자는 10:03까지 기다려야 한다. synchronized : 하나의 서버에만 보장되고, 여러 서버에서는 보장되지 않는다. mySql redis를 활용한 Lock : 하지만, 우리가 원하는건 쿠폰 갯수에 대한 정합성인데 Lock을 활용하여 구현한다면, 발급된 쿠폰 갯수를 가져오는 것부터 쿠폰을 생성하는 것까지 Lock을 걸어야함. → 성능 저하. 위의 예시와 비슷함. t..
PS C:\Users\park7> docker ps CONTAINER ID IMAGE 972184460c21 redis ccdc10043dd3 mysql PS C:\Users\park7> docker exec -it 972184460c21 redis-cli 127.0.0.1:6379> incr coupon_count (integer) 1 127.0.0.1:6379> incr coupon_count (integer) 2 127.0.0.1:6379> incr key:value 구조로, value의 값을 1씩 증가시킨다. 최초의 key는 0이라고 생각하기 때문에 1을 증가시킨 1을 return한다. 64비트 부호 정수로 범위는 -9,223,372,036,854,775,808(263) ~ 9,223,372,03..
레이스 컨디션(Race Condition) 둘 이상의 프로세스나 스레드가 공유자원에 동시에 접근하여 작업하려고 할 때, 비정상적인 결과가 발생하는 것 레이스 컨디션으로 인해 발생할 수 있는 문제점과 해결방법 멀티 스레드 환경에서는 프로세스 내의 모든 자원을 공유할 수 있다는 점에서 동기화 문제 발생 해결방법 : 동시에 여러 스레드가 공유 자원에 접근할 수 없도록 함.(한 개의 자원에 한 스레드만 접근 할 수 있게 하는 것을 의미) 하지만, 위의 해결방법으로 아래와 같은 문제점이 발생 스레드가 자원을 독점적으로 사용하고 있어 다른 스레드가 자원에 접근하려고 락을 획득하기 위해 무한 대기할 수 있는 상황이 발생할 수 있음. → 교착상태(DeadLock, 데드락) 발생 교착상태는 둘 이상의 프로세스가 다른 프..