글또를 정리하며
·
회고록/회고
글또 10기를 마무리하며1. 글또와의 첫 만남개발자로서 기술 블로그의 필요성을 느낀 계기나이가 들어갈수록, 그리고 나라는 사람에 대해 알아갈수록 명확하게 느껴졌던 것이 있다.나는 그렇게 명석하지 않다는 것. 남들이 한 번에 이해하고 넘어가는 것도, 나는 두 배, 세 배의 시간을 들여야 겨우 따라갈 수 있었다.많은 사람들이 글쓰기를 리마인드나 공유의 목적으로 한다고 말한다. 하지만 나는 그렇지 않았다.개발을 처음 시작했을 즈음, 남들이 작성한 글이나 문서를 읽을 때 쉽게 이해하지 못하는 경우가 많았다.누군가는 자연스럽게 유추할 수 있는 중간 히스토리를 나는 파악하지 못했고, 헤매는 경우가 잦았다.그래서 나는 그 모든 과정을, 한 순간도 빼놓지 않는 나를 위한 글을 작성했다.내가 작성한 글들을 보면 굳이 작..
Vercel Speed Insight와 함께하는 RES 성능 개선기
·
회고록/업무 기록
Vercel Speed Insight와 함께하는 RES 성능 개선기Vercel를 통하여 새로운 서비스가 배포되면서, Speed Insights Tabs을 통하여 P75, P90, P95, P99라는 지표들을 처음 접하게 되었다. 이는 전체 사용자의 75%, 90%, 95%, 99%가 경험하는 성능 구간을 뜻하며, 우리가 제공하는 Real Experience Score(RES)가 전 세계적으로 어떤 분포를 보이는지 쉽게 확인할 수 있도록 도와준다.또한 Vercel에서는 Virtual Experience Score, Core Web Vitals도 지표로 사용하고 있으며, 이를 점수에 맞춰 색상별로 사용자에게 결과값을 나타내고 있다.Real Experience Score(RES)사용자 기기에서 수집한 실제 데..
데이터베이스 성능 최적화 기록
·
회고록/업무 기록
서비스 DB CPU 사용률 확인현재 외주로 일하고 있는 서비스의 DB를 모니터링하던 중, CPU 사용률이 굉장히 높다는 사실을 확인하게 되었다. CPU 사용량이 높아질 경우에는 성능이 저하되거나, 타임 아웃 및 연결 실패, 리소스 병목등 다양한 문제를 발생하며 결국 서비스 장애로까지 이어질 수 있다.이를 해결하기 위해 스케일 업/아웃, 인덱스 최적화, 캐싱 도입, 쿼리 최적화 등 여러 방법을 고려할 수 있으나, 이번 경우에는 데이터베이스의 사양이 서비스 규모에 비해 충분히 높다고 판단되어, 우선 쿼리 최적화와 인덱스 최적화를 통해 문제를 해결해 보기로 했다.문제 분석 및 개선 과정인덱싱DB에 부하가 집중되는 시간대에 서버 로그를 확인해 보니, 해당 시간에 자주 호출되는 로직이 있었음을 확인할 수 있었다...
자바스크립트 이벤트 루프의 이해 (JavaScript Eventloop)
·
Server/Node
정의자바스크립트 이벤트 루프는 코드 실행 관리, 이벤트 수집 및 처리, 대기 중인 작업 실행을 핵심적으로 담당한다.자바스크립트는 단일 스레드 환경에서 작동하므로 한 번에 하나의 코드만 실행되며, 이벤트 루프는 이러한 실행 순서를 관리하여 비동기 프로그래밍을 가능하게 한다.예를 들어, 네트워크 요청, 파일 읽기, 타이머 등 다양한 비동기 작업이 올바른 순서로 처리되도록 도와준다.이벤트 루프 구성 요소Call Stack(콜스택) : 현재 실행 중인 함수(또는 스크립트)가 쌓이는 스택 구조Event/Task Queue(매크로 태스크 큐): setTimeout, setInterval, I/O 콜백, DOM 이벤트, 그리고 requestAnimationFrame 등의 콜백이 대기하는 큐Microtask Queue..
Javascript Promise에 대하여
·
Server/Node
Promise의 탄생 배경초기 자바스크립트에서는 비동기 처리를 위해 콜백 패턴을 사용했는데, 심각한 문제들이 발생하며 이를 해결하기 위한 과정에서 Promise가 등장하게 되었다.1. 콜백 지옥 (Callback Hell)// 콜백 지옥의 예시getUserData(userId, function(user) { getPosts(user.id, function(posts) { getComments(posts[0].id, function(comments) { getAuthor(comments[0].authorId, function(author) { // 들여쓰기가 계속 깊어지고 코드가 복잡해짐 }); }); });});// Promise를 사용한 개선된 코드getUs..
주니어 개발자로서 적어보는 2024년 직무 회고
·
회고록/회고
2024년 돌아보기벌써 2024년이 며칠 남지 않게 되었다. 작년 이맘때쯤 차가운 한강이 보이던 잠실철교를 지나 광진구로 넘어가던 겨울을 보냈었는데, 지금은 눈 쌓인 빌딩 숲을 지나 영등포로 넘어가고 있다.그렇다. 2023년 5월, 개발자로 시작했던 첫 회사를 떠나 2024년 6월 새로운 회사로 이직하게 되었다.지난 퇴사 회고에서도 남겼듯 많은 것을 배웠던 회사였지만, 돌아보면서 너무 서투르게 작업을 했다는 것을 느꼈다.조금 더 경험이 많았다면, 나뿐만 아니라 회사에도 더 좋은 영향과 성과를 낼 수 있었을 것이라는 생각이 든다. 지난 일을 돌아보면서 잘했던 것, 못했던 것 그리고 앞으로 잘하기 위해 어떤 것들을 준비해야 할지 생각해 보고 정리해 보려 한다.2년 차 주니어 개발자로서, 어떻게 발전하고 성장..
웹 API 설계 원칙을 통한 REST API 설계 패턴과 실전 사례
·
Server/ETC.
REST API 설계에 대해 고민하게 된 배경첫 개발자로서 취업 후, "API Path만 보고도 어떤 기능을 하는지 알 수 있도록 설계해야 한다."라는 말을 들었다.이를 위해 좋은 API 설계 원칙을 고민하며 여러 책을 찾아보게 되었다.그중 제임스 히긴보텀이 작성한 "웹 API 설계 원칙"이라는 책을 읽게 되어, 해당 내용을 기반으로 정리하게 되었다.후반부에 들어서며 RPC, 이벤트, 마이크로서비스에 어울리는 API 설계에 대한 내용이 작성되어 있지만,전반부에 작성된 REST API에 대한 내용만 정리하였다.API란 무엇일까?API(Application Programming Interface)의 맥락에서 애플리케이션이라는 단어는 고유한 기능을 가진 모든 소프트웨어를 나타낸다.인터페이스는 두 애플리케이션 ..
tRPC에서의 쿠키 설정 및 안전한 클라이언트-서버 간 쿠키 관리 방법
·
Server/Node
tRPC에서 Cookie를 설정하게 된 배경최근 회사 서비스에서 국제화(i18n) 기능을 추가하게 되었다.서버 사이드에서 언어를 처리하기로 협의가 이뤄졌고, 이를 위해 서버 단에서 Redux를 사용하여 언어에 맞는 번역 데이터를 제공하는 방법을 선택하였다.이때, 서버는 사용자가 어떤 언어를 사용하고 있는지 알아야 하므로, 사용자의 언어를 판단하는 과정을 고민하게 되었다.사용자 언어 판단 방법먼저, 로그인한 유저인지 아닌지를 판단하기로 했다.로그인한 유저라면, 유저 DB에 존재하는 locale 정보를 가져와 언어를 판단하기로 했다.로그인하지 않은 유저를 위해서는 다양한 방법을 준비했다.이미 우리 서비스를 사용한 유저일 수 있으므로, 저장된 쿠키를 확인하기로 했다.쿠키가 존재하지 않는다면, HTTP 헤더에 ..
코드플리
코드 플레이 리스트