덕토피아

1️⃣ 테스트 피라미드란 무엇인가?테스트 피라미드는테스트의 종류를 계층화하여 비율과 역할을 구분한 개념. 단위 테스트는 많고 빠르게,통합 테스트는 적절히E2E 테스트는 최소한으로 유지이렇게 밸런스를 맞추는 것이 테스트 피라미드의 핵심. 2️⃣ 구글의 테스트 피라미드구글은 테스트를 크기 기준으로 구분함.구분이름의미Small Test (소형 테스트)단일 클래스, 함수 단위 테스트빠름, 결정적, 외부 의존 XMedium Test (중형 테스트)여러 컴포넌트 간 연동 테스트DB, 네트워크 등 일부 의존Large Test (대형 테스트)시스템 전체 통합 테스트느림, 환경 의존, 복잡함 3️⃣ 테스트를 구분하는 두 가지 핵심 기준① 테스트가 결정적인가? (Deterministic)테스트는 언제 실행해도 결과가 같아..
1️⃣ 서비스란 무엇인가?스프링에서 흔히 말하는 "서비스 클래스"는 비즈니스 로직을 담는 계층으로 알려져 있지만,실제로는 역할에 따라 두 가지 종류로 나뉨.도메인 서비스: 비즈니스 규칙의 핵심 로직 담당애플리케이션 서비스: 로직을 조합하고 실행 흐름을 관리이 둘을 구분하지 않으면,서비스는 점점 비대해지고 결국 "모든 걸 하는 슈퍼 클래스"가 되어버림. 2️⃣ 도메인 (Domain) — “비즈니스의 중심 객체”도메인은 주문, 결제, 배송, 상품 같은비즈니스의 핵심 개념을 직접 표현하는 객체.즉, 실세계의 규칙과 제약이 녹아 있는 코드.@Entitypublic class Order { private OrderStatus status; private Money totalPrice; public..
1️⃣ 순환 참조란 무엇인가? 순환 참조란두 개 이상의 객체나 모듈이 서로를 직접 또는 간접적으로 참조하는 관계.class A { private B b;}class B { private A a;} 2️⃣ 순환 참조의 문제점 ⚠️ 1. 무한 루프서로가 서로를 호출하는 재귀적 구조가 생길 수 있음.특히 toString(), equals(), hashCode() 재정의 시 주의.public class A { private B b; public String toString() { return "A -> " + b; }}public class B { private A a; public String toString() { return "B -> " + a; }}// A.toStri..
· 이것저것
1️⃣ 객체의 종류를 구분하는 이유개발을 하다 보면 한 도메인을 표현하는 객체가 여러 계층을 오감. 예를 들어, "회원"이라는 개념만 해도 다음처럼 나뉨. 👇DB에서 데이터를 읽어오는 DAO데이터를 표현하는 Entity클라이언트에게 응답을 주는 DTO불변 값 자체를 표현하는 VO 2️⃣ DTO (Data Transfer Object) — “데이터 전달용 가방”DTO는 주로 Controller - Service - Client 사이에서데이터를 전달하기 위한 객체.public record UserResponseDto( Long id, String name, String email) {} ✅ 특징비즈니스 로직 없음직렬화 용이validation, swagger 문서화에 적합⚠️ 주의toEnti..
· 이것저것
1️⃣ 프로그래밍 패러다임의 흐름소프트웨어는 하드웨어처럼 진화하지는 않지만,"복잡성을 다루는 방식"은 꾸준히 진화해 옴.시대패러다임초점예시1970s순차지향명령의 순서GOTO, if, for1980s절차지향기능의 분리C, 함수 분리 구조1990s객체지향역할과 협력Java, C++, Kotlin 2️⃣ 순차지향 — “코드의 흐름”에 집중하던 시대순차지향은 말 그대로 명령어의 순서로 프로그램을 구성함.초창기 언어인 어셈블리, 베이직이 여기에 해당함.INPUT AINPUT BC = A + BPRINT C프로그램은 위에서 아래로 실행되고,데이터와 로직은 구분되지 않으며,컴퓨터가 수행할 순서를 사람이 직접 관리함. 3️⃣ 절차지향 — “기능 중심”으로 구조화하기절차지향은 순차지향의 한계를 극복하기 위해 등장함...
· DevOps
1️⃣ 동시 접근 제어란?멀티스레드 환경에서 여러 스레드가 동시에 같은 자원에 접근할 수 있음.문제는 동시에 읽기/쓰기가 일어나면 데이터 불일치나 경합이 발생한다는 것. 👉 이걸 막는 것이 바로 동시 접근 제어 2️⃣ 잠금을 이용한 접근 제어 (Lock-based Control) 🔒 Lock의 기본 개념Lock은 "자원에 대한 접근권을 잠그는 기법".한 스레드가 Lock을 획득하면, 다른 스레드는 그 Lock이 해제될 때까지 대기. Java에서는 synchronized 키워드나 ReentrantLock이 대표적인 방법.public class Counter { private int count = 0; private final ReentrantLock lock = new ReentrantL..
· DevOps
1️⃣ 메시징 시스템의 공통 목표서비스 간 결합도 낮추기트래픽 폭주를 흡수비동기 처리와 장애 복원력 확보신뢰성 있는 전달하지만 이 공통 목표를 어떤 방식으로 구현하느냐가 Kafka, RabbitMQ, Redis Pub/Sub의 근본적 차이. 2️⃣ Kafka — “로그 스트림 기반 이벤트 플랫폼” 🧠 개념 Kafka는 단순한 메시지 큐가 아니라 분산 로그 저장소.모든 메시지는 디스크에 Append-Only로 기록되고,Consumer Group이 각자 오프셋을 관리하며 읽음. ✅ 강점- 초고속 처리량- 리플레이 가능: retention 기간 동안 재소비 가능- 확장성: Broker + Partition 기반 선형 확장- Exactly-once 처리 지원 (Kafka Streams / Transacti..
· DevOps
1️⃣ 타임아웃 (Timeout)외부 서버가 느려지거나 응답하지 않으면,우리 서버의 스레드는 계속 대기하게 됨. 이런 요청이 쌓이면 스레드가 고갈되어 전체 서비스가 먹통이 됨. 이를 방지하기 위한 게 바로 타임아웃 설정. 타입설명Connection Timeout서버에 연결되는 데 걸리는 시간 제한Read Timeout연결은 됐지만 응답을 읽는 시간 제한Write Timeout요청 본문 전송에 걸리는 시간 제한 외부 API의 평균 응답 시간보다 2~3배 긴 타임아웃을 설정API마다 타임아웃 값을 다르게 설정 2️⃣ 재시도 (Retry)재시도는 일시적 실패를 자동으로 복구하기 위한 메커니즘.하지만 무턱대고 다시 시도하면오히려 중복 요청과 트래픽 폭증을 일으킬 수 있음. 지수적 백오프: 매번 대기 시간을 두 ..
· DevOps
1️⃣ CAP 정리란?분산 시스템에서는 Consistency, Availability, Partition Tolerance 세 가지를 동시에 만족할 수 없다 즉, 3개 중 2개만 선택할 수 있다는 것이 CAP의 핵심.항목의미C (Consistency, 일관성)모든 노드가 같은 데이터를 본다A (Availability, 가용성)모든 요청에 대해 응답을 반환한다 (성공 or 실패)P (Partition Tolerance, 분할 내성)네트워크 단절이 발생해도 시스템이 계속 동작한다 2️⃣ 각 개념 자세히 보기🧩 1. Consistency (일관성)모든 노드가 같은 데이터를 보고 있어야 한다는 뜻.즉, A 노드에 쓴 직후 B 노드에서 읽어도 동일한 값이 나와야 함. 예시: 은행 계좌 잔액이 여러 DB 노드에..
· DevOps
데이터베이스에 수십만, 수백만 건의 데이터가 쌓이면 검색 속도가 눈에 띄게 느려짐.SELECT * FROM user WHERE name = '영식'; 이 쿼리가 1초 이상 걸린다면, 문제는 단순히 CPU나 네트워크가 아님.대부분은 인덱스가 없거나 잘못 설정된 경우임. 1️⃣ 인덱스란?데이터베이스에서 인덱스는데이터를 빠르게 찾기 위한 별도의 자료 구조. 📖 책의 모든 페이지를 앞에서부터 한 장씩 넘기며 찾는 게 Full Scan 📚 목차를 보고 바로 해당 페이지로 가는 게 Index Scan 즉, 인덱스는 검색 성능을 높이기 위한 추가 데이터 구조(B-Tree, Hash 등)로,WHERE, JOIN, ORDER BY 등에 사용됨. 2️⃣ 인덱스가 없으면 어떤 일이 생길까?테이블에 인덱스가 없으면,..
둘기덕
'분류 전체보기' 카테고리의 글 목록