Connection reset by peer에 대한 고찰
·
고찰 & 트러블슈팅
개인 프로젝트를 진행하면서 발생한 에러에 대해 공부하던 중 발생한 에러에 대해 공부한 내용입니다. 대규모 트래픽을 처리하는 개인 프로젝트를 진행하는 중 클라이언트에서 Connection reset by peer 에러가 계속해서 발생했습니다.그래서 원인을 찾던 중 서버에서 TCP연결을 재시도 하라는 RST패킷을 보낼 때TCP 연결이 즉시 끊기면서 발생하는 에러라는 것을 알았습니다.TCP통신은 데이터의 정확한 전송을 보장하기 위해서 상대방의 컴퓨터와 신뢰성을 수립하는 과정인3-way handshake과정을 가지게 됩니다.@Post('issue') async issueCoupon(@Body() body : IssueCouponDto) : Promise{ return await this.couponSer..
대규모 트래픽에서의 connection reset by peer 트러블 슈팅
·
고찰 & 트러블슈팅
문제상황현재 진행하고 있는 분산 시스템 프로젝트에서 K6를 통해 10초 동안 1000명의 가상 유저로 스트레스 테스트를 진행하던 중클라이언트에서 connection reset by peer가 발생했다.서버에서는 에러 메시지가 뜨지 않았고 쿠폰도 정상적으로 발급이 되었다.코드와 에러는 다음과 같다. Nestjs를 이용한 백엔드 코드 ( 코드 수정 전)@Injectable()export class CouponService { constructor( @InjectRepository(Coupon) private readonly couponRepository: Repository, @InjectRepository(CouponWallet) private readonly couponWallet..
치킨 디도스 프로젝트(1)
·
개발
Algorithm Review 프로젝트를 끝내고 AWS에서 이것저것 테스트를 진행해볼까 하다가로컬에서 우선 이것저것 해보고 싶은 마음에 새로운 프로젝트를 진행하게 되었다.내가 가장 경험해보고 싶은 것은 1. 동시성 문제 해결2. 분산 시스템 구축 다음과 같은 경험을 하고 싶었다. 크게 read와 write로 나눴고 어떤 프로젝트를 하는게 좋을까 하다가쿠폰에 환장하는 나같은 사람들은 선착순 치킨 쿠폰 이벤트가 열리면 서버에 엄청난 트래픽을 주기 때문에그 트래픽이 마치 디도스 같아 프로젝트명을 치킨 디도스로 정했다ㅋ.ㅋ 그럼 차근차근 단계를 밟아보자. 프로젝트의 요구사항은 다음과 같다. 사용자는 다음 임의의 쿠폰 중 한 개를 선착순으로 발급받을 수 있다.중복 발급은 불가능하며, 쿠폰 종류는 3개가 존재한다...
NestJS 예외 핸들링
·
개발
Nodejs로 개발 스택을 바꾸면서 동시에 개인 프로젝트를 진행하게 되었는데,버전1부터 버전3까지 개발 과정을 거치면서 예외 처리를 어떻게 하는게 좋을까 하는 생각이 들곤했다.각 계층에 대한 예외처리를 하는게 맞지만, 한 계층에서 다른 계층의 에러를 핸들링을 하는게 맞을까 하는 고민이 있었다. 예를 들어 Express.js로 개발한 개인 프로젝트 버전 2에선 다음과 같은 예외 처리가 많았다. 다음 코드는 Service에서 던져진 에러를 Controller에서 식별해 http에러를 던지는 동작이다. 이는 서비스와 컨트롤러간의 결합도가 낮고 SRP원칙을 준수한다는 장점이 있지만 그 외엔 단점이 너무 많은 전략이다.// PostService.tspublic async getPost(postId : number..
개인 프로젝트 후기
·
개발
🌟 Algorithm Review 프로젝트 이 개인 프로젝트는 알고리즘 복습을 하면서 내가 복습을 하고 싶은 날짜에 알림 설정을 통해 복습 알림을 받을 수 있게 만든 알고리즘 복습을 도와주는 웹 서비스이다.3월부터 시작했지만, 계속 버전이랑 기술스택도 바꾸고 중간 중간에 다른 프로젝트 때문에 지금에서야 완성했다. 평소에 백앤드 개발을 희망했지만 의도치않게 프론트개발만 해와서 이번 개인 프로젝트를 통해 드디어 백앤드 개발과 원하는 기술들을 사용해보았다. 아쉬운 점이 있다면 TDD로 개발을 하고 싶었지만 시간에 쫒겨 기능완성을 우선 했다. 그래서 작성해논 테스트 코드가 회원부분 밖에 없다. 비록 지향했던 TDD개발은 못했지만(?) 이제 남은 기능들에 대한 테스트 코드도 작성해보려고 한다. 이제 원하는 기능..