배경행동대장 서비스에 영수증 이미지를 최적화하면서 궁금한 점이 생겼다. 행동대장 서비스에서 사용자는 CloudFront를 통해 S3에 저장된 이미지를 조회한다. 용량이 큰 이미지를 여러 장 조회하면 응답 시간이 얼마나 느릴까? 이미지를 최적화하면서 응답 시간의 차이를 느껴보자. 추측사용자가 크롬 브라우저를 사용한다고 가정하자. 크롬 브라우저가 생성하는 기본 최대 커넥션 수는 6개다. 행동대장 서비스에 업로드할 수 있는 이미지의 최대 사이즈는 5mb이고 한 행사에 첨부되는 영수증은 평균 10개다. 사용자가 행사의 모든 영수증을 조회하면 5mb*10개 = 50mb 이미지를 한 번에 요청한다. 이것이 실제로 어떻게 요청될까? 6개의 커넥션을 사용해서 받아올 거라 예상한다. 유후 상태의 6개의 커넥션을 사용..
들어가기 앞서서..행동대장 팀에서 협업하며 레벨 3과 레벨 4에 걸쳐 한 달간 갈등 상황이 있었습니다. 갈등 속에서 제가 문제를 어떻게 정의하고, 해결하고자 어떤 노력을 했는지 그리고 이 과정에서 배운 점을 정리합니다. 갈등이 발생하기까지레벨 4를 시작하고, 하루가 지나 이틀 차가 되던 날이었다. 아침 데일리 미팅을 하기 위해 모두 자리에 앉았다. 행동대장 팀의 루틴인 눈 운동과 스트레칭을 진행했다. 시간이 지날수록 허례허식 같이 느껴지는 스트레칭이었다. 다음으로 어제 무엇을 했는지, 오늘 무엇을 할 건지 공유하는 시간을 가졌다. 각 분야의 미션의 일정과 미션을 어떻게 진행할지에 대한 이야기만 주고받았다. 프로젝트와 관련된 논의는 전혀 찾아볼 수 없었다. '프로젝트를 하기 위해 모인 팀이 프로젝트 ..
학습 배경우아한테크코스 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 서버에 리..