일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- msSQL
- 파라메트릭
- 이분탐색
- 오퍼레터
- 물채우기
- 퇴사통보
- 백트래킹
- BFS
- compose
- boj #19237 #어른 상어
- @P0
- 6987
- dfs
- Docker
- upper_bound
- softeer
- 처우산정
- 소프티어
- incr
- 연결요소
- 백준
- 기술면접
- 경력
- BOJ
- Kafka
- 매개변수탐색
- OFFSET
- 성적평가
- 처우협의
- 13908
- Today
- Total
목록전체 글 (629)
기술 블로그
intelliJ로 구현하였다. 여러 블로그 참고하였음. 데이터 생성은 아래 주소 참고. (https://hsdevelopment.tistory.com/841) 근데 데이터를 약 7만 3천 건 정도만 생성하였고, 그냥 진행하였다. (100만 건도 잘 되겠지..?) 프로젝트 전체 구조는 아래와 같다.(맨 아래에 git 주소와 프로젝트 전체 소스도 첨부하였음) DbConfig.java package com.excel.exceldown.config; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; i..
대용량 데이터 엑셀 다운로드를 하기 위해 임시로 필요한 더미데이터를 생성하기 위해 아래 2가지 방법을 이용했다. 1. https://www.mockaroo.com/ 위 홈페이지에서 생성하기(비회원은 최대 1000개 행까지만 INSERT 쿼리문 생성 가능) 2. 프로시저 활용하기 아래에서 tempdb 는 database이고, person은 테이블명이다. DELIMITER $$ DROP PROCEDURE IF EXISTS insertLoop$$ CREATE PROCEDURE insertLoop() BEGIN DECLARE i INT DEFAULT 1; WHILE i
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..