우아한테크캠프
-
주문 시스템 성능 개선기개발 2024. 9. 3. 18:45
개요우아한 테크 캠프 팀 프로젝트로 배달의 민족(일반 커머스에 가까운) 서비스 중 메뉴를 담고 장바구니에 등록한 뒤 주문하는 기능을 만들었습니다.저희는 고도화 과정을 통해 성능을 개선하려고 했는데요, 저는 대규모 시스템에서 안정적이고 빠른 주문 시스템을 만드는 작업을 했습니다.접근 방식저희는 클라우드 자원으로 ec2 t3.small과 rds t3.micro를 지원받았습니다. 그렇기 때문에 한정된 자원에서 성능향상을 이루기 위해서 현재 가장 부하가 많은 곳을 개선하려고 노력했습니다.서버에서 가장 많은 병목이 발생하는 부분은 DB라고 생각했기 떄문에 DB 락을 중심으로 문제를 접근했습니다.우리가 시도한 방법들비관락처음으로 적용한 방식은 비관락입니다. 적용한이유는 가장 간단히 적용할 수 있었기 때문이었습니다...
-
ServerSocket의 내부 동작 살펴보기: TCP 연결 설정의 로우레벨 이해개발 2024. 7. 8. 20:21
들어가며WAS 미션을 진행하며 생긴 ServerSocket의 동작 원리에 대한 궁금증을 해결하기 위해 내부 구조를 확인해보았습니다. 궁금증HTTP 요청을 처리하는 중 /index.html을 접속했을 때 멀티 스레딩을 구현하지 않아도 다수의 요청이 동시에 들어오는 것을 모두 처리하는 것에 의문이 들었습니다. SeverSocket을 생성하면 발생하는 일new ServerSocket(port)를 하면 먼저 해당 port에 서버소켓을 바인드 시스템 콜을 호출합니다. 그 다음 백로그에 크기만 큼 SYN와 accept 큐의 합계를 제한합니다. 클라이언트가 서버에 요청을 보내면 SYN 큐로 들어가고 3-way handshaking 가 완료되면 accept 큐에 들어가 서버의 accept를 기다립니다.accept() ..
-
Buffered I/O Steram vs I/O Stream: 커널 영역 접근과 성능 비교개발 2024. 7. 8. 19:58
들어가며저번 주 우아한테크캠프 미션을 진행하면서 WAS를 구현하고 있는데, 그룹 리뷰에서 I/O Stream 보다 Buffered I/O Stream 을 사용하는 게 더 좋다는 피드백을 받아서 Buffered I/O Stream과 일반 I/O Stream의 차이점이 궁금해졌습니다. Buffered I/O Steram vs I/O Stream여러분은 Java에서 파일을 읽고 쓸 때 어떤 방식을 사용하시나요? 저는 InputStream 은 BufferedInputStream 으로 OutputStream은 그냥 OutputStream으로 구현했습니다. 이유는 InputStream은 BufferedInputStream을 사용해서 받는 경우를 많이 봤지만 OutputStream은 잘 못봤기 때문이었습니다. 하지만..