목록전체 글 (45)
장난감 연구소

배달 서비스에 대한 클론코딩 프로젝트를 진행하면서, 음식점을 가까운 순으로 조회하는 기능을 개발하였습니다. 해당 과정에서 공간 인덱스를 사용하기 전후의 부하 테스트 결과를 정리하였습니다.배경프로젝트에서, 가게 목록 조회 기능을 개발하면서 나와 가까운 순으로 정렬하는 기능을 제공하였습니다. 나와 가게의 거리는 요청하는 회원에 따라 달라지기에 캐싱에 어려움이 있었습니다. 따라서 부하테스트의 대상으로 결정하고 테스트를 진행하였습니다.실제 AWS 배포한 서버의 경우 4만 개 정도의 가게를 등록하였는데, 부하테스트 중에는 공공 데이터인 전국음식점일반데이터를 이용하여 약 66만 행으로 데이터를 늘려 테스트를 진행하였습니다. 검색으로 나오기론 배달의 민족에 등록된 가맹점 수가 30만 개 이상이라는데 그 두 배 정도라..

데이터베이스 트랜잭션에 동시성 처리를 맡기면서, 데이터베이스가 없는 상황에서의 동기화 문제를 간과하고 있었습니다. 이를 계기로 운영체제 책과 인터넷 글들을 다시 읽으며, Java에서의 동기화 기법에 대해 내용을 정리해보았습니다. synchronized (Java Monitor)Java에서 동기화(Synchronization)는 공유 자원이나 임계 영역에, 한번에 하나의 스레드만 접근할 수 있도록 보장하여, 데이터 손상과 불일치를 예방한다.Java는 스레드 동기화를 위한 모니터(Monitor) 기법을 제공한다. 모니터는 락과 조건 변수를 함께 관리하여, 스레드 간 상호 배제를 보장하고 안전한 동기화를 지원하는 고수준 동기화 구조이다.두 가지 방식으로 synchronized 키워드를 사용하여 동기화를 구현할..

이번 글에서는 기존에 CRA(Create React App)를 사용하던 리액트 프로젝트를 Vite로 마이그레이션하면서 진행한 작업들을 개인적으로 정리해보았습니다.타입스크립트 관련 설정 등 제가 사용하지 않은 내용은 포함되어 있지 않으니, 해당 주제가 필요하신 분은 다른 참고 자료를 함께 보시는 것을 추천드립니다. Create React App is deprecated한동안 백엔드 관련 기술에 집중하느라 프론트엔드에 소홀했었는데, 어느새 Create React App(CRA)이 공식적으로 Depreceted 되었다. CRA는 리액트 빌드 도구로, 2025년 2월 14일부터 더 이상 권장되지 않는다.그 이유로는, Webpack 기반의 빌드 속도가 느리고, 라우팅/코드 스플리팅처럼 앱 개발에 필수적인 기능이 ..

스프링 부트 애플리케이션에 대규모 요청이 몰리게 되면 어떻게 될까?스프링 부트를 사용하지만, 앞단에서 요청이 어떻게 처리되는지 모르고 있었다. 스프링 부트에 대규모 요청이 몰리게 되면 어떻게 될까? 그런 물음을 받았을 때 내가 납득할 수 있는 대답을 낼 수 없었다. 일단 요청마다 다른 스레드가 처리한다는 건 알겠는데, 요청마다 새로운 스레드가 만들어지는지, 그렇다면 최대 몇 개까지 생성될 수 있는지, 또 처리할 수 없는 요청은 어떻게 되는지 의문이 생겼다.이번 글에서는 스프링 부트의 임베디드 톰캣과 관련된 설정을 정리하였다.관련 설정 요소커넥션 (Connections)HTTP 통신은 TCP 연결 위에서 이뤄진다. 클라이언트가 요청을 보내면 톰캣은 소켓을 열어 해당 연결을 유지한다. 이와 관련된 설정이 가..

본 게시글은 CS 지식 스터디에서 HTTP에 관해 발표하기 위해 'HTTP 완벽 가이드(인사이트)'의 4장 내용을 요약한 게시물입니다.학습 목표HTTP는 어떻게 TCP 커넥션을 사용하는가TCP 커넥션의 지연, 병목, 막힘병렬 커넥션, keep-alive 커넥션, 커넥션 파이프라인을 통한 HTTP 최적화TCP 커넥션HTTP 통신은 TCP/IP 프로토콜을 통해 이루어진다.TCPHTTP 커넥션은 몇몇 사용 규칙을 제외하고는 TCP 커넥션에 불과하다.TCP 커넥션은 인터넷을 안정적으로 연결해주는 신뢰할 수 있는 통신 방식을 제공한다. HTTP가 메시지를 전송하고자 할 경우 현재 연결된 TCP 커넥션을 통해 메시지 내용을 순서대로 보낸다.TCP는 세그먼트 단위로 데이터를 잘게 나누고, IP 패킷에 담아 전달한다...

본 게시글은 CS 지식 스터디에서 컨테이너 기술에 대해 발표하기 위해 정리한 내용입니다.기본 개념컨테이너란 무엇인가? 샌드박스화된 런타임 환경애플리케이션과 파일/런타임 등 실행 환경을 같이 패키징한 것애플리케이션 소프트웨어를 운영체제로부터 분리시켜 사용자에게 애플리케이션이 동작할 때 필요한 최소한의 실행 환경을 제공하는 것가상화 기술과 더불어 컨테이너 기술은 클라우드 컴퓨팅 서비스의 핵심으로 부각되고 있다.컨테이너로 패키징된 애플리케이션은 자신이 동작할 수 있는 환경을 포함하고 있기 때문에 쉽게 배포가 가능해진다. 장점이식성 : 컨테이너가 모든 종속성을 포함하여 어디서든 동일한 환경에서 실행 가능경량성 : VM(가상머신)보다 적은 리소스로 실행되며, OS를 공유하여 성능이 뛰어남빠른 배포와 롤백 : 이미..