백엔드 16

CAP 정리에 대해서 알고 계신가요?

CAP 정리에 대해서 알고 계신가요?백엔드와 관련된 질문이에요.CAP 정리는 분산 데이터베이스 시스템이 CAP 중 2개의 속성만을 제공할 수 있다는 이론입니다. CAP 정리에 따르자면, 일관성(Consistency), 가용성(Availability), 분할 내성(Partition Tolerance) 등 3가지 속성을 모두 만족하는 분산 데이터베이스 시스템은 존재하지 않습니다.각 속성에 대해서 설명해주시겠어요? 🤔일관성(Consistency) 은 모든 클라이언트 요청은 어느 노드에 연결되어도 같은 데이터를 볼 수 있음을 의미합니다.가용성(Availability) 은 노드 일부에 문제가 발생하여도 시스템은 클라이언트의 모든 요청에 유효한 응답을 전해줄 수 있어야 함을 의미합니다.분할 내성(Partition..

캐시 스탬피드 현상에 대하여 설명해주세요.

캐시 스탬피드 현상에 대하여 설명해주세요.백엔드와 관련된 질문이에요.대규모 트래픽 환경에서 캐시를 운용하는데, Cache Aside(캐시 미스 발생 시 적재) 전략을 사용한다고 가정하겠습니다. 이때, 수많은 요청들이 동시에 캐시 미스를 확인하고 원본 저장소에서 데이터를 가져와 캐시에 적재하는 상황이 발생할 수 있는데요. 이를 캐시 스탬피드 현상 혹은 Thundering Herd 문제라고 표현합니다. 캐시 스탬피드 현상은 원본 데이터베이스와 캐시의 성능을 저하할 수도 있습니다.이 문제는 어떻게 풀어볼 수 있을까요? 🤓해당 방식은 크게 잠금, 외부 재계산, 확률적 조기 재계산 방식으로 풀어볼 수 있습니다.잠금(Locking) 방식 은 한 요청 처리 스레드가 해당 캐시 키에 대한 잠금을 획득합니다. 이로인해..

프로세스보다 스레드의 컨텍스트 스위칭이 더 빠른 이유는 무엇인가요?

프로세스보다 스레드의 컨텍스트 스위칭이 더 빠른 이유는 무엇인가요?백엔드와 관련된 질문이에요.컨텍스트 스위칭(Context Switching)이란?컨텍스트 스위칭은 CPU나 코어에서 실행 중이던 프로세스나 스레드가 다른 프로세스나 스레드로 교체되는 과정을 말합니다. 이는 멀티태스킹 시스템에서 여러 작업을 효율적으로 관리하기 위해 필수적인 메커니즘입니다.컨텍스트(Context)란?컨텍스트는 프로세스나 스레드의 현재 상태를 의미합니다. 여기에는 CPU의 레지스터 상태(프로그램 카운터, 스택 포인터 등)와 메모리 상태가 포함됩니다. 컨텍스트는 프로세스나 스레드가 실행을 중단하고 나중에 다시 시작할 때 필요한 모든 정보를 담고 있습니다.컨텍스트 스위칭이 필요한 이유멀티태스킹 시스템에서는 여러 프로세스나 스레드가..

스케일 아웃과 스케일 업의 차이점을 설명해주세요.

서버 확장의 두 가지 방법: 스케일 업 vs 스케일 아웃 🚀스케일 업(Scale-Up): 수직적 확장 ⬆️스케일 업은 기존 서버의 성능을 향상시키는 방식입니다. 쉽게 말해, 더 강력한 컴퓨터로 업그레이드하는 것이죠!장점 👍구현이 간단함 (기존 서버만 업그레이드)소프트웨어 아키텍처 변경이 필요 없음관리 포인트가 늘어나지 않음단점 👎하드웨어에 한계가 있음 (무한정 업그레이드 불가)비용 효율성이 낮을 수 있음 (미리 고사양 장비 확보)장애 발생 시 서비스 전체에 영향 (단일 실패 지점)예시 💡AWS EC2에서 t2.micro → t2.small → t2.medium → t2.large로 인스턴스 타입을 변경하는 것은 전형적인 스케일 업 방식입니다. 스케일 아웃(Scale-Out): 수평적 확장 ↔️스케..

ACID에 대해서 설명해주세요.

ACID에 대해서 설명해주세요.백엔드와 관련된 질문이에요.ACID는 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)의 약자이며, 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 의미합니다.각 속성은 어떤 의미를 가지나요? 🤔원자성(Atomicity) 은 트랜잭션 내부 연산들이 부분적으로 실행되고 중단되지 않는 것을 보장합니다. 쉽게 말하자면, 트랜잭션은 전체 성공과 전체 실패 중 한 가지만 수행한다는 것입니다. 예를 들면 계좌 이체 트랜잭션은 다음과 같은 연산으로 이루어져 있습니다. 이때 2번 과정에서 에러가 발생하면 1번 과정을 취소해야 합니다.1. A 계좌에 3000원 출금2. B 계좌에 3000원 입금 일관..

REST란 무엇인가요?

REST란 무엇인가요?백엔드와 관련된 질문이에요.REST(Representational State Transfer) 는 자원의 표현을 이용하여 상태를 주고받는 것을 의미합니다. 여기서 자원이란 소프트웨어가 관리하는 모든 것을 의미하며 자원의 표현은 자원을 나타내기 위한 이름을 의미합니다. 가령, 서버가 관리하는 주문 데이터는 order 라고 표현할 수 있습니다. 최근에는 일반적으로 자원의 상태를 나타내기 위해 JSON 포맷을 사용합니다. REST는 네트워크 상에서 클라이언트와 서버의 통신 방식 중 하나이며, HTTP 프로토콜을 사용합니다. 구체적으로는 HTTP URI를 활용하여 자원을 명시하고 HTTP METHOD를 통해 CRUD 연산을 적용하는 것을 의미합니다.API(Application Program..

캐싱 전략에 대해서 설명해주세요.

캐싱이 중요한 이유 🤔캐싱은 자주 접근하는 데이터를 빠르게 접근할 수 있는 임시 저장소에 보관하는 기술입니다. 데이터베이스 쿼리, API 호출, 파일 입출력 등 비용이 많이 드는 작업의 결과를 저장해두면⚡ 응답 시간 대폭 단축📉 데이터베이스 부하 감소💰 서버 비용 절약🌐 사용자 경험 향상자, 이제 다양한 캐싱 전략에 대해 알아볼까요?1. Cache Aside (Lazy Loading) 전략 😴가장 흔히 사용되는 캐싱 패턴입니다. "필요할 때만 캐시에 데이터를 로드한다"는 개념이죠.작동 방식:데이터가 필요할 때 먼저 캐시를 확인 🔍캐시에 있으면(캐시 히트) 바로 반환 ✅캐시에 없으면(캐시 미스) 데이터베이스에서 조회 🔄데이터베이스에서 가져온 데이터를 캐시에 저장하고 반환 💾🍦 비유: 냉장고..

동시성과 병렬성에 대해서 설명해주세요.

동시성(Concurrency)이란? 🔄동시성은 여러 작업이 겹치는 시간 간격 동안 실행되는 것을 말합니다. 실제로는 한 번에 하나의 작업만 처리하지만, 빠르게 번갈아가며 실행해 마치 동시에 진행되는 것처럼 보이게 하는 것이죠.🍔 쉬운 비유: 맥도날드 직원 한 명이 주문도 받고, 음식도 준비하고, 결제도 하는 것과 같아요. 한 번에 한 가지만 하지만 여러 고객을 번갈아가며 빠르게 응대하죠!동시성의 핵심 특징⏱️ 시분할(Time slicing) 방식으로 작업🔀 컨텍스트 스위칭으로 작업 전환💡 CPU 코어가 하나여도 구현 가능🧵 주로 I/O 바운드 작업에 유리// Node.js에서 동시성 예시 (비동기 콜백)function fetchUserData(userId) { // 데이터베이스 요청은 I/O ..

로드 밸런싱에 대해서 설명해주세요.

초보자를 위한 로드 밸런싱 알고리즘 완벽 가이드 💻안녕하세요! 오늘은 백엔드 개발에서 핵심적인 개념인 로드 밸런싱에 대해 알아보겠습니다. 데이터센터나 대규모 웹 서비스를 운영한다면 반드시 알아야 할 개념이죠! 😊로드 밸런싱이란? 🤔로드 밸런싱은 들어오는 네트워크 트래픽(요청)을 여러 서버에 균등하게 분산하는 기술입니다. 로드 밸런서는 서버 앞에 위치해 클라이언트 요청을 적절히 분배합니다.🚦 한줄 요약: 트래픽을 여러 서버에 똑똑하게 나눠주는 교통 경찰!로드 밸런싱 알고리즘 종류 📋1. 라운드 로빈 (Round Robin) 🔄서버에 순서대로 요청을 배분하는 가장 단순한 방식입니다.작동 방식:서버 A, B, C가 있다면 → A → B → C → A → B → C 순으로 요청 분배모든 서버가 동등한..

SOLID 원칙에 대해서 설명해 주세요.

SOLID 원칙에 대해서 설명해 주세요.백엔드와 관련된 질문이에요.SOLID 원칙은 객체지향 설계 5원칙이라고도 불리며, 각 원칙의 앞 글자를 따서 만들어졌습니다. 객체지향설계의 핵심 중 하나는 의존성을 관리하는 것인데요. 의존성을 잘 관리하기 위해서는 SOLID 원칙을 준수해야 합니다. 단일 책임 원칙(Single Responsibilty Principle) 은 클래스가 오직 하나의 목적이나 이유로만 변경되어야 한다는 것을 강조합니다. 여기서 “책임”이란 단순히 메서드의 개수를 뜻하지 않고, 특정 사용자나 기능 요구사항에 따라 소프트웨어의 변경 요청을 처리하는 역할을 의미합니다.즉, 클래스는 한 가지 변화의 이유만 가져야 하며, 이를 통해 변경이 발생했을 때 다른 기능에 영향을 덜 미치도록 설계됩니다...