일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- docker
- 스프링 이미지
- 예외 핸들링
- nestjs 예외
- 스프링오류
- 스프링
- JavaScript
- 동시성 문제
- 유난한 도전
- 스프링jpa
- Jenkins
- nginx
- nestjs
- 스프링기초
- connection reset by peer
- 동시성문제
- 예외 커스텀
- 자바
- nodejs
- 분산시스템
- 3WayHandshake
- 스프링Entity
- 트러블슈팅
- OS
- 예외필터
- Mysql이미지
- 토스팀
- 대규모 트래픽
- 동시성 제어
- 토스책
- Today
- Total
목록전체 글 (20)
삽질블로그
목차1. 프로젝트 개요1-1. 프로젝트 소개1-2. 문제 해결 전략1-3. 기술 스택1-4. 데이터베이스 ERD2. 성능 개선2-1. 비관적 락 vs 낙관적 락2-2. Redis를 이용한 분산락2-3. Redis 성능 향상2-4. 그래프3. 개선 사항 1. 프로젝트 개요1-1. 프로젝트 소개 선착순으로 치킨 쿠폰을 받을 수 있는 치킨 디도스 프로젝트입니다. 첫 번째 분산 시스템 프로젝트입니다. 프로젝트 요구사항쿠폰 발급 이벤트를 진행합니다.유저는 다음과 같은 종류의 쿠폰 중 하나를 선택하여 발급 받을 수 있습니다. - 쿠폰 A: 치킨 무료쿠폰, 선착순 300장, 쿠폰코드: A001, 할인율 100% - 쿠폰 B: 5천원 할인, 선착순 500장, 쿠폰코드: B001, 할인율 50% - 쿠폰 C: 1..
목차1. 프로젝트 개요1-1. 프로젝트 소개1-2. 문제 해결 전략1-3 기술 스택2. 개발 결과물2-1. 데이터베이스 ERD2-2. 백엔드 아키텍처2-3. 부하 테스트 3. 개선 사항3-1. 백엔드 아키텍처3-2. TPS, MTT 개선4. 후기 1. 프로젝트 개요1-1. 프로젝트 소개선착순으로 치킨 쿠폰을 받을 수 있는 치킨 디도스 프로젝트입니다. 첫 번째 분산 시스템 프로젝트입니다.프로젝트 요구사항쿠폰 발급 이벤트를 진행합니다.유저는 다음과 같은 종류의 쿠폰 중 하나를 선택하여 발급 받을 수 있습니다. - 쿠폰 A: 치킨 무료쿠폰, 선착순 300장, 쿠폰코드: A001, 할인율 100% - 쿠폰 B: 5천원 할인, 선착순 500장, 쿠폰코드: B001, 할인율 50% - 쿠폰 C: 1천원 할인,..
개인 프로젝트를 진행하면서 발생한 에러에 대해 공부하던 중 발생한 에러에 대해 공부한 내용입니다. 대규모 트래픽을 처리하는 개인 프로젝트를 진행하는 중 클라이언트에서 Connection reset by peer 에러가 계속해서 발생했습니다.그래서 원인을 찾던 중 서버에서 TCP연결을 재시도 하라는 RST패킷을 보낼 때TCP 연결이 즉시 끊기면서 발생하는 에러라는 것을 알았습니다.TCP통신은 데이터의 정확한 전송을 보장하기 위해서 상대방의 컴퓨터와 신뢰성을 수립하는 과정인3-way handshake과정을 가지게 됩니다.@Post('issue') async issueCoupon(@Body() body : IssueCouponDto) : Promise{ return await this.couponSer..
문제상황현재 진행하고 있는 분산 시스템 프로젝트에서 K6를 통해 10초 동안 1000명의 가상 유저로 스트레스 테스트를 진행하던 중클라이언트에서 connection reset by peer가 발생했다.서버에서는 에러 메시지가 뜨지 않았고 쿠폰도 정상적으로 발급이 되었다.코드와 에러는 다음과 같다. Nestjs를 이용한 백엔드 코드 ( 코드 수정 전)@Injectable()export class CouponService { constructor( @InjectRepository(Coupon) private readonly couponRepository: Repository, @InjectRepository(CouponWallet) private readonly couponWallet..
Algorithm Review 프로젝트를 끝내고 AWS에서 이것저것 테스트를 진행해볼까 하다가로컬에서 우선 이것저것 해보고 싶은 마음에 새로운 프로젝트를 진행하게 되었다.내가 가장 경험해보고 싶은 것은 1. 동시성 문제 해결2. 분산 시스템 구축 다음과 같은 경험을 하고 싶었다. 크게 read와 write로 나눴고 어떤 프로젝트를 하는게 좋을까 하다가쿠폰에 환장하는 나같은 사람들은 선착순 치킨 쿠폰 이벤트가 열리면 서버에 엄청난 트래픽을 주기 때문에그 트래픽이 마치 디도스 같아 프로젝트명을 치킨 디도스로 정했다ㅋ.ㅋ 그럼 차근차근 단계를 밟아보자. 프로젝트의 요구사항은 다음과 같다. 사용자는 다음 임의의 쿠폰 중 한 개를 선착순으로 발급받을 수 있다.중복 발급은 불가능하며, 쿠폰 종류는 3개가 존재한다...
Nodejs로 개발 스택을 바꾸면서 동시에 개인 프로젝트를 진행하게 되었는데,버전1부터 버전3까지 개발 과정을 거치면서 예외 처리를 어떻게 하는게 좋을까 하는 생각이 들곤했다.각 계층에 대한 예외처리를 하는게 맞지만, 한 계층에서 다른 계층의 에러를 핸들링을 하는게 맞을까 하는 고민이 있었다. 예를 들어 Express.js로 개발한 개인 프로젝트 버전 2에선 다음과 같은 예외 처리가 많았다. 다음 코드는 Service에서 던져진 에러를 Controller에서 식별해 http에러를 던지는 동작이다. 이는 서비스와 컨트롤러간의 결합도가 낮고 SRP원칙을 준수한다는 장점이 있지만 그 외엔 단점이 너무 많은 전략이다.// PostService.tspublic async getPost(postId : number..
🌟 Algorithm Review 프로젝트 이 개인 프로젝트는 알고리즘 복습을 하면서 내가 복습을 하고 싶은 날짜에 알림 설정을 통해 복습 알림을 받을 수 있게 만든 알고리즘 복습을 도와주는 웹 서비스이다.3월부터 시작했지만, 계속 버전이랑 기술스택도 바꾸고 중간 중간에 다른 프로젝트 때문에 지금에서야 완성했다. 평소에 백앤드 개발을 희망했지만 의도치않게 프론트개발만 해와서 이번 개인 프로젝트를 통해 드디어 백앤드 개발과 원하는 기술들을 사용해보았다. 아쉬운 점이 있다면 TDD로 개발을 하고 싶었지만 시간에 쫒겨 기능완성을 우선 했다. 그래서 작성해논 테스트 코드가 회원부분 밖에 없다. 비록 지향했던 TDD개발은 못했지만(?) 이제 남은 기능들에 대한 테스트 코드도 작성해보려고 한다. 이제 원하는 기능..
타입스크립트를 이용해 서버를 구축하면 실행할 때 JS로 변환해야 서버를 실행할 수 있습니다.이를 위해 tsconfig.json파일에서 많은 설정을 하는데요. "nodemon --exec ts-node src/app.ts" 위 명령어로 서버를 실행하면 안나던 오류가 "npx tsc && node dist/app.js" 위 명령어로 서버를 실행하면 at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15) at Function.Module._resolveFilename (/Users/jojunhui/Desktop/project/algorithm-project/server2.0/node_modules/module-alias..