학습 배경우아한테크코스 6기 레벨4 미션 중, 톰캣의 커넥션과 스레드 풀 설정을 수정했을 때 동시에 여러 요청을 보낼 경우 톰캣이 어떻게 동작하는지 궁금했다. 톰캣 설정을 케이스별로 수정해보며 차이를 비교해보자. 코드는 우아한테크코스 tomcat 미션의 학습 테스트에서 확인할 수 있다. 이 글을 쓰면서 우아한테크코스 선배인 hudi님의 글에 많은 도움을 받았다. hudi 블로그의 링크에 들어가서 전체 구조 다이어그램을 보면 이해하기 쉽다. 초기 설정클라이언트는 10개의 요청을 동시에 보낸다. 처음 서버 설정 정보는 다음과 같다.server: tomcat: connection-timeout: 60s # tomcat default accept-count: 10 max-connections..
서비스의 진입점은 사용자 요청의 시작점을 의미한다. 진입점에서 응답 속도가 느리면 사용자 경험에 부정적인 영향을 미칠 수 있다. 예를 들어, 로그인 페이지의 응답이 느리거나 페이지 로딩 시간이 길어지면, 사용자는 불편을 느끼고 서비스 이탈할 가능성이 높아진다. 진입점의 응답이 지연되는 문제올클 서비스의 진입점은 로그인 API다. 종종 운영 중인 서비스에 로그인하면 평균 3초를 기다리는 상황이 발생했다. 특히, 서버 배포하거나, 일정 시간 동안 사용자가 없었던 유휴 상태에서의 첫 번째 요청에서만 이 현상이 발생했다. 3초의 시간을 기다리는 동안 머릿 속에 여러 생각이 들었다. '서버가 꺼졌나?', 'DB에 문제가 생겼나?' 개발자인 나조차 문제가 생긴 게 아닌지 의심하게 된다. 이러한 로그인 API의 ..
올클 서비스는 학교 API를 사용하여 사용자가 학교 구성원임을 인증받는다. 사용자가 처음 서비스에 진입하여 로그인 API를 호출하면 올클 서버는 학교 API에 요청을 보낸다. 사용자에게 서비스를 보이는 첫인상인 만큼 로그인 API를 빠른 응답 속도로 제공하고 싶다. 가장 효과적으로 응답 시간을 줄이는 방법은 외부 API의 응답 시간을 줄이는 것이다. 외부 API를 호출하면 가장 긴 시간이 걸리는 부분은 어디일까? 외부 API 호출에서 응답 시간 분석외부 API를 직접 호출해 보았다. 테스트에는 curl 명령어와 --verbose 옵션을 사용하여 상세한 응답 시간을 분석했다. 민감한 정보는 모두 가렸다. ➜ curl -v -o /dev/null -s -w "HTTP Status: %{http_code..
보호되어 있는 글입니다.
우아한테크코스6기 동동-개문탐의 11주차 활동으로 『코드 리뷰는 스포츠다』를 읽고 정리한 내용입니다. 코드 리뷰로 얻는 이점코드 베이스의 품질을 일정 수준 이상으로 유지할 수 있다.코드 작성 단계에서 놓친 버그를 찾을 수 있다.코드 리뷰가 불편할 수 있는 이유자신의 코드가 비판 받는 것을 두려워한다.타인의 코드를 비판하는 것을 두려워한다.코드 리뷰에 드는 비용이 크다.코드 리뷰에 몰입할 수 있는 장치스포츠: 펜싱득점으로 경쟁한다. 득점은 코드의 헛점을 찾아 내는 것이다.공격: 리뷰어태도친절하고 예의를 갖추며 텐션을 높이기 위해 의도적으로 노력해야 한다.칭찬 꼭 남기기, 텍스트로 활기찬 척하기최소한의 힘만으로 약점만 정확하게 타격해야 한다.개인이 강점을 살리면서 기여할 수 있는 부분을 고민해야 한다.내가..
새로운 기능을 추가하고 배포한지 일주일이 지났습니다. 문득, 새로 추가한 기능을 사용자가 잘 사용하는지 궁금했습니다. 이에 대한 기준은 새로 추가한 API 호출이 빈번하게 일어나는가 입니다. API 별 호출 횟수를 바탕으로 쉽게 파악할 수 있습니다. API 별 호출 회수는 모니터링하고 있지 않았습니다. Spring Actuator는 사용하고 있었기에 메모리 상에 데이터는 존재할 거란 희망을 품었습니다. 메모리 상 어딘가에 존재하는 이진수를 찾기 위해 jxm을 공부했지만 러닝 커브가 높았습니다. 공부하던 중에 서버가 내려간다면 영영 찾을 수 없게 됩니다. 메모리를 통째로 덤프 떠서 분석할까 고민했지만, 문득 좋은 방법이 떠올랐습니다. Nginx 로그 파일 발견EC2 내에서 Nginx로 API 서버에 리..
이전 블로그에 작성했던 글을 옮깁니다. 본 작성일은 2023.12.06 입니다. 개요오랜만에 코딩테스트를 응시했습니다. 알고리즘 공부를 관둔 지 1년 정도 흘렀는데요, 하루하루 실력에 하락을 느끼고 있었습니다. 그래서 어려운 코테로 분류되는 카카오 코테를 응시하고 실력을 가늠하고 싶었습니다. 결과는 5솔로 모두 해결했습니다. 주관적으로 이번 코딩테스트는 쉬웠습니다. 이전에 카카오 공채 코테를 응시한 적이 있는데, 구현 난이도가 어려운 문제가 다수 출제됐습니다. 그때는 7개의 문제로 구성되어 있었는데, 이번엔 5개로 시간도 널널했습니다. 다만, 해결하는 과정에서 이전보다 실력이 떨어졌다는 생각이 여러 번 들었습니다. 응시 환경에서는 아무래도 긴장할 수밖에 없지만,, 사실 긴장하지 않았습니다. 그럼에도 1..
저는 불과 어제, 빼앗겼습니다. 작은 서비스를 운영하고 있습니다. 올클이라는 서비스로 수강 신청을 연습할 수 있는 서비스입니다. 교내 학우들을 대상으로 서비스합니다. 일 최대 6000명의 사용자가 있었고, 가입자 수는 3천 명 정도입니다. 올클의 탄생부터 지금까지작년, 학교 서버 해킹 사태로 수강 신청 시스템 보완이 강화되었습니다. 강화된 만큼 수강 신청 절차는 복잡해졌고, 이 페인 포인트를 직접 겪은 저는 수강 신청을 연습하고자 서비스를 만들었습니다. 당시 개발 경험이 없었습니다. Spring Boot와 Thymeleaf, 그리고 약간의 자바스크립트를 곁들여 정적인 페이지를 서비스했습니다. 굉장히 부족한 서비스였죠. 서비스라고 하기에도 부끄러웠습니다. 그래도 개발 처음 시작한 사람이 어떻게든 만..
Real MySQL 8.0을 읽고 저의 뇌구조에 맞게 정리한 내용입니다. 목차언두 로그가 어떻게 사용되는지언두 테이블스페이스 관리언두 로그로 발생할 수 있는 문제발생하는 문제를 MySQL 8.0 버전에서 해결언두 로그 모니터링하기읽으면서 생긴 질문 언두 로그가 어떻게 사용되는지DML(INSERT, UPDATE, DELETE) 실행으로 데이터가 변경되기 전에 이전 버전 데이터를 백업한다. 백업된 데이터를 언두 로그라고 한다. 트랜잭션 보장트랜잭션이 롤백되면 트랜잭션 도중 변경된 데이터를 변경 전 데이터로 복구해야 한다.이때 언두 로그에 백업해둔 이전 버전의 데이터를 이용해 복구한다. 격리 수준 보장특정 커넥션에서 데이터를 변경하는 도중 다른 커넥션에서 데이터를 조회하는 경우에, 트랜잭션 격리 수준에..
보호되어 있는 글입니다.