인덱스 설계와 카디널리티
·
개발이야기/개발로그
상품 목록 조회에 숨어있는 인덱스 설계 이야기1. 상품 목록 조회, 뭐가 문제인데?우리는 쇼핑몰에서 당연하듯이 "좋아요 순 정렬", "브랜드 필터" 같은 조회 기능을 사용한다. 겉으로 보기엔 단순한 기능이지만, 데이터가 10만 건을 넘어가는 순간 쿼리 한 줄의 차이가 응답 시간을 수십 배까지 벌려놓는다. 이번 과제에서 상품 목록 API의 조회 조건은 크게 세 가지였다. 브랜드 필터링 (brand_id) 좋아요 순 정렬 (like_count DESC) Soft Delete 필터 (deleted_at IS NULL) 인덱스 없이 이 조건들을 조합하면 MySQL은 매번 테이블 전체를 훑으면서 조건에 맞는 행을 찾고, 그 결과를 메모리에서 정렬한다. 10만 건 정도면 사용자가 체감할 수준의 지연이 발생할 수 있..
주문 기능에 숨어있는 트랜잭션 설계 이야기
·
개발이야기/개발로그
들어가며우리는 쿠팡, 네이버 쇼핑 등에서 쉽게 주문을 접한다. 쉽게 쿠폰을 적용하고 주문을 하고, 결제를 하고(또는 마음이 변해서 결제를 취소하고), 상품을 배송받는다.이러한 서비스 기술들을 우리는 쉽게 접하고, 나와 같은 주니어 개발자들은 프로젝트에서 쉽게 쇼핑몰 프로젝트를 고르곤 한다. 우리는 생각보다 쇼핑몰의 결제에 대해 쉽게 생각할 수 있지만, 서비스의 안정성과 데이터 정합성 등을 고려한다면 아주 어려운 주제가 될 수 있다. 예를들어.. 주문이 두 개가 들어갔는데 재고는 하나밖에 안 남았다면? 쿠폰은 선착순 100개였는데 왜 110개가 발급되어 있지? 보통 소규모 프로젝트에서는 의도하지 않으면 겪기 힘든 동시성 문제들이 존재한다. 이러한 데이터 정합성을 보장하기 위해 트랜잭션과 DB 락에 대해..
wil 10주간의 개발공부 week2
·
카테고리 없음
이번 주에는 시스템 설계 문서 작성에 대해 공부하게 되었다. 이번 한 주를 시작하면서 건강상의 이유로 병원도 자주 가고 컨디션 관리가 잘 안 되어서 많은 어려움이 있었다. 하지만 그만큼 이번 주의 주제에서 필요한 것들만큼은 꼭 가져가자는 느낌으로 보낸 한 주였다.이번 주의 메인 주제는 개발 요구사항 문서, 시퀀스 다이어그램, 클래스 다이어그램, ERD 문서 4가지였다.이번 주를 진행하면서 일전에 다니던 회사의 문서 체계에 대해 생각해보게 되었다. 기존에는 Notion에 개발 관련 요구사항을 작성하고, 해당 요구사항이 릴리즈에 반영되었는지, 그리고 각각의 API 문서만 존재하던 상황이었다.https://truthful-gallium-f2b.notion.site/2f6fdb9bd2ee80198e18dad2e..
설계가 곧 완성도다. Software-Design 문서화에 대해
·
개발이야기
이번엔 소프트웨어 설계를 위한 개발 요구사항 문서, 시퀀스 다이어그램, 클래스 다이어그램, ERD 문서 4가지를 작성해보는 시간을 가져보았다. 설계 문서는 유비쿼터스 언어로 작성해야 한다는데, 실제로 업무 내의 모든 협업자가 동일한 언어로 도메인을 이해하고 소통하기 위해 동일한 언어 체계를 사용하는 것이 중요하다.실제로 이전 회사 업무 체계에서 언어 체계가 달라 자주 혼동이 있었던 부분이 있는데, AI 검수, 실제 데이터 검수 등을 OCR, AI 프로세스 등으로 혼재해서 사용하는 것 때문에 중복 작업 등의 문제가 있었던 적이 있었다. 이번에 설계 문서를 작성하면서 앞으로의 개발을 위한 표준 언어를 정해놓고 작성하도록 노력하였다. 고려사항 1. Soft-delete vs Hard-delete ERD 문서 ..
귀찮지만 든든해.. TDD(테스트 주도 개발) 에 대해서
·
개발이야기/개발로그
올해로 개발 4년 차이지만 TDD에 대한 경험은 부끄럽게도 처음이다. 보통 내가 근무해왔던 서비스 환경은 빠르게 기능 개발을 하고 배포해야 했었기에 내가 경험한 개발 플로우는 아래와 같았다.기능 (controller / service 등 end to end 일괄) 작업 -> swagger-ui를 통해서 api 기능 검증 -> DB 데이터 확인 및 예외 케이스 테스트 -> 개발 브랜치에 반영 -> 프론트엔드에서 제공된 개발 서버 api 확인 및 적용 -> fix/release이었다. 보통 이러한 개발 방식은 빠르게 기능을 개발하고 수정할 수 있지만, 거기에 따른 트레이드오프로써 코드 품질과 서비스의 안정성을 보장할 수 없게 된다. 그래서 내가 공부하면서 처음 이해한 TDD란TDD(테스트 주도 개발) 이란실..
개략적인 규모 추정(응답지연 값 단위 분석)
·
TechKnowledge/CS관련지식
Chapter 2 · 개략적인 규모 추정 모든 프로그래머가 알아야 하는응답 지연값(Latency) Jeff Dean의 Numbers Every Engineer Should Know | 시스템 설계의 직관적 기준 📋 목차 응답 지연값이란? 왜 중요한가 핵심 지연 시간 수치 표 (Jeff Dean) 시각화: 지연 시간 비교 바 차트 시스템 설계에서 얻는 인사이트 메모리 vs 디스크 vs 네트워크 비교 1 응답 지연값이란? 왜 중요한가 시스템을 설계할 때 "이 작업이 얼마나 빠른가?"에 대한 감각이 필요합니다. 메모리 접근은 얼마나 빠른지, 디스크 읽기는 얼마나 느린지, 네트워크 왕복은 어느 정도인지 ..
대규모 시스템 설계 기초 학습용 ch2
·
TechKnowledge/CS관련지식
Chapter 2 · 개략적인 규모 추정 2의 제곱수와 데이터 용량 단위완벽 정리 가상면접 사례로 배우는 대규모 시스템 설계 기초 | Back-of-the-envelope Estimation 📋 목차 왜 2의 제곱수인가? 2의 제곱수 핵심 표 실무 데이터 용량 감각 익히기 면접에서 쓰는 빠른 계산 팁 1 왜 2의 제곱수인가? 컴퓨터는 모든 데이터를 비트(bit) 단위로 처리합니다. 비트는 0 또는 1만 가질 수 있고, 이 때문에 컴퓨터의 모든 용량 단위는 2의 제곱수를 기반으로 합니다. 💡 핵심 개념 시스템 설계 면접에서 "대략 몇 TB의 스토리지가 필요한가?" 같은 질문에 답하..
React 입문: 컴포넌트, Props, CSS 스타일링 완전 정복
·
Stack/JavaScript
React를 처음 시작할 때 가장 헷갈리는 것들 — 프로젝트 세팅부터 컴포넌트 생성, Props 전달, 스타일 적용까지 핵심만 뽑아 정리했습니다. Vite 기반 React 프로젝트를 기준으로 설명합니다.🛠 개발 환경 준비React 개발을 시작하기 전에 아래 도구들이 설치되어 있어야 합니다.STEP 01VS Code코드 에디터. ES7+ React 스니펫 확장도 함께 설치합니다.STEP 02Node.js & npmJS를 서버에서 실행할 수 있게 해주는 런타임. npm으로 패키지를 관리합니다.STEP 03VS Code 확장ES7+ React/Redux/React-Native snippets — 단축키로 컴포넌트 틀을 자동 생성합니다.⌨ 유용한 스니펫 단축키rfc → React Function Compone..
Spring AOP로 API 성능 측정하기 - 프로젝트 예제와 함께
·
Stack/Spring
들어가며프로젝트를 운영하다 보면 "이 API는 왜 이렇게 느릴까?"라는 의문이 들 때가 있다. 하나하나 메서드마다 시간 측정 코드를 넣자니 번거롭고, 그렇다고 방치하자니 불안하다. 이럴 때 Spring AOP를 사용하면 코드 수정 없이 모든 API의 성능을 측정할 수 있다.이번 글에서는 Spring AOP가 무엇인지, 그리고 실제 프로젝트에 어떻게 적용하는지 정리해보았다.AOP란?**AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)**은 여러 곳에서 반복되는 공통 기능을 분리해서 관리하는 프로그래밍 기법이다.예를 들어 로깅, 성능 측정, 트랜잭션 관리 같은 기능은 비즈니스 로직과는 별개지만 여러 곳에서 필요하다. 이런 걸 **횡단 관심사(Cross-Cutting Conce..