분류 전체보기
-
WIL - 실무 중심의 대용량 데이터 읽기 최적화 전략 구현Develop/WIL 2025. 8. 17. 17:37
주간 학습 회고 (Weekly I Learned)이번 주에는 실무에서 자주 마주치는 대용량 데이터 읽기 성능 문제를 해결하기 위한 최적화 전략을 집중적으로 학습하고, 단순한 이론 학습을 넘어서 카디널리티 분석부터 캐시 전략 설계까지, 성능과 데이터 정합성 사이의 균형점을 찾는 데 집중한 의미 있는 한 주였습니다.🧠 이번 주 학습 성과- 데이터베이스 최적화 전략카디널리티 분석을 통한 인덱스 설계: 실제 데이터 분포를 분석하여 복합 인덱스의 컬럼 순서 결정반정규화를 통한 성능 개선: 조인 비용 vs 저장 공간 트레이드오프 분석 및 적용쿼리 실행 계획 분석: EXPLAIN을 활용한 병목 지점 식별과 개선- 성능 테스트 및 모니터링부하 테스트 시나리오 설계: K6를 활용한 다양한 트래픽 패턴 시뮬레이션메트릭 ..
-
좋은 서버 쓰면 되잖아? - 인덱스 성능 설계 및 분석 (1)Develop 2025. 8. 13. 15:25
TLDR;좋은 인덱스 설계 방법을 통해 성능을 개선할수 있다. 개요왜 DB 최적화가 필요한가? (why-optimization) 많은 개발자들이 서버 성능을 높이는 것(scale-up)으로 성능 문제를 해결하려 합니다. 하지만...서버 성능 업그레이드의 현실비용 효율성: 서버 성능 향상은 비용이 기하급수적으로 증가물리적 한계: 아무리 좋은 서버도 결국 한계 존재근본적 해결 아님: 비효율적인 쿼리는 여전히 비효율적확장성: 데이터 증가 시 문제는 더욱 심화 현재 상황 살펴보기상품 테이블 구조create table products( id bigint auto_increment primary key, name varchar(255) null, brand_id big..
-
WIL - 트랜잭션과 동시성 제어Develop 2025. 8. 10. 00:45
주간 학습 회고 (Weekly I Learned)이번 주에는 동시성 이슈 해결을 위한 데이터베이스 트랜잭션 및 락(Lock) 메커니즘을 심도 있게 학습했습니다. 특히 여러 사용자의 동시 주문 요청 시 발생할 수 있는 데이터 정합성 문제를 해결하고, 안정적인 서비스를 구축하는 데 집중한 한 주였습니다.🧠 이번 주 학습 성과- 트랜잭션과 격리 수준: 데이터베이스 트랜잭션의 동작 원리와 격리 수준(Isolation Level)에 대해 학습하며, 데이터 무결성을 보장하는 기본 원리를 이해했습니다. - 동시성 제어: 실제 시나리오에서 발생하는 동시성 문제를 해결하기 위해 비관적 락(Pessimistic Lock)과 낙관적 락(Optimistic Lock)을 학습하고 코드에 직접 적용했습니다. - 복합 도메인 트..
-
DB 락 전쟁의 서막: 쿠폰 시스템, 비관이냐 낙관이냐 그것이 문제로다Develop 2025. 8. 8. 08:44
상품 주문 시 쿠폰 사용, 어떤 락(Lock)이 현명한 선택일까?온라인 쇼핑몰에서 상품을 주문할 때, 많은 사용자들이 할인 쿠폰을 사용합니다. 만약 인기 있는 쿠폰이라 동시에 여러 사용자가 사용하려고 한다면 어떻게 될까요? 혹은 한정된 수량의 쿠폰이라면? 이때 동시성 문제가 발생할 수 있으며, 이를 해결하기 위해 데이터베이스 락(Lock)을 사용해야 합니다. 이번 글에서는 상품 주문 시 쿠폰 사용과 같이 동시성 제어가 중요한 상황에서 어떤 락 전략을 사용하는 것이 적절한지, **비관적 락(Pessimistic Lock)**과 **낙관적 락(Optimistic Lock)**을 중심으로 비교하고 분석해 보겠습니다.비관적 락 (Pessimistic Lock) 이란?비관적 락은 이름에서 알 수 있듯이, 동시에 ..
-
사용자가 '좋아요' 버튼을 두 번 누르면 어떻게 될까?Develop/Spring 2025. 7. 25. 13:51
TL;DR안전한 '좋아요' 기능을 위해, 토글(toggle) 방식의 API 대신 중복 요청에도 결과가 동일한 멱등성 설계(예: POST로 생성, DELETE로 삭제)를 적용해야 합니다.1. '좋아요' 기능, 왜 멱등성이 중요할까? 🤔'좋아요' 버튼을 누르는 간단한 동작 이면에는 네트워크 오류나 사용자의 중복 클릭과 같은 잠재적 위험이 존재합니다. 만약 API가 이러한 중복 요청을 제대로 처리하지 못하면, 사용자의 의도와 달리 '좋아요'가 즉시 취소되거나 데이터가 꼬이는 문제가 발생할 수 있습니다. 멱등성이란?동일한 요청을 여러 번 보내도 언제나 같은 결과를 만들어내는 성질입니다. 신뢰성 있는 API를 만들기 위해 멱등성 설계는 선택이 아닌 필수입니다. ✅ 멱등성이 보장되는 메서드: GET, PUT,..
-
TDD 기반 테스트 코드 도입기Develop/Spring 2025. 7. 18. 17:00
TL;DR소프트웨어의 안정성을 높이고, 유지보수를 용이하게 하며, 궁극적으로는 총 개발 비용과 시간을 줄이기 위해 테스트 코드를 도입합니다. 들어가며 테스트 코드를 작성 하는 이유 1. 안정성 확보새로운 기능 추가나 코드 수정 시, 기존 기능이 고장 나는 것을 방지하는 안전망 역할을 합니다. 이를 통해 언제든 자신감을 갖고 코드를 변경할 수 있습니다. 2. 자동화 된 테스트로 시간 절약 가능Postman을 이용한 수동 API 테스트는 매번 직접 API를 호출하고 결과를 눈으로 확인해야 합니다. 코드가 복잡해지고 수정이 잦아질수록, 모든 API를 일일이 테스트하는 것은 매우 비효율적입니다.테스트 코드를 작성하면 이 모든 과정을 자동화하여, 단 몇 초 만에 수백 개의 테스트를 실행할 수 있습니다.기능..
-
JWT 인증 방식Develop/Spring 2022. 11. 18. 11:13
JWT 란? JSON Web Token(JWT)의 약어로 인증에 필요한 정보들을 담은 JSON 형태의 토큰 클라이언트와 서버 사이 통신 시 권한 인가(Authorization)를 위해 사용 JSON 데이터를 Base64 URL Encode를 통해 인코딩하여 직렬화 JWT토큰(Access Token)을 HTTP 헤더에 담아서 서버가 클라이언트를 식별하기 때문에 민감 정보를 토큰 안에 넣게 된다면 위험 JWT의 구조 Header: 토큰의 타입(typ)이나, 알고리즘(alg)을 저장 Payload: 토큰에서 사용할 정보의 조각(Claim) 저장 (실제 JWT 를 통해서 알 수 있는 데이터) iat : 토큰 발급시간 exp: 토큰 만료 시간 Signature: 서버에서 해당 토큰이 유효한지 아닌지를 구분 할 수..
-
Wrapper 클래스 사용 시 주의 해야하는 이유?Develop/Java 2022. 9. 20. 11:51
1. wrapper 클래스 란? 기본타입의 데이터를 객체로 취급해야 하는 경우에 기본 타입의 데이터를 그대로 사용할 수 없다. 이때에는 기본 타입의 데이터를 먼저 객체로 변환한 후 작업을 수행해야 한다. 이렇게, 8개의 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스를 래퍼 클래스(Wrapper class)라고 한다. 2. 박싱(Boxing)과 언박싱(Unboxing) JDK 1.5부터는 기본형을 참조형으로 자동으로 변환해주는 박싱, 참조형을 기본형으로 자동변환해주는 언박싱을 지원해준다. 3. wrapper 클래스 사용 시 주의사항 3-1. == 사용시 문제 Integer a=1000, b=1000; System.out.println(a == b); //false Integer c=100, d=..