분류 전체보기 276

[1분 면접] 프로세스보다 스레드의 컨텍스트 스위칭이 더 빠른 이유

📌 면접 답변 프로세스 컨텍스트 스위칭 같은 경우 새로운 프로세스의 가상 메모리 주소를 설정 해야한다. 따라서 MMU에 새로운 주소 체계 설정, TLB와 메모리 저장된 캐시를 비우는 등의 메모리 작업을 해야한다.  하지만 스레드 컨텍스트 스위칭 같은 경우 위의 과정들이 한 프로세스 내에서 공유되기 때문에, CPU의 상태와 메모리 상태만 변경해주면 된다.   컨텍스트 스위칭CPU가 실행 중이던 프로세스나 스레드가 다른 프로세 스나 스레드로 교체되는 과정을 말한다.멀티태스킹 시스템에서 여러 작업을 효율적으로 관리하기 위해 필수적인 매커니즘이다. Context프로세스나 스레드의 현재 상태를 의미하고, CPU의 레지스터 상태(PC, SP 등)와 메모리 상태가 포함된다. 즉, Context는 프로세스나 스레드가..

[1분 면접] Redis가 싱글 스레드로 만들어진 이유

📌 면접 답변Redis는 싱글 스레드 기반으로 설계되어 구조를 단순화하고 성능을 극대화 할 수 있다. 1. Lock이나 동기화 처리를 하지 않아도 되므로, 경쟁 조건 없이 안정적이고 빠르게 작동 2. Redis의 대부분의 연산이 O(1) 또는 O(logN)처럼 매우 빠르기 때문에, 멀티스레드가 꼭 필요하지는 않음 3. IO Multiplexing을 통해 여러 클라이언트 요청을 비동기적으로 감지하고, 싱글 스레드 이벤트 루프로 빠르게 순차 처리하여 단순하지만 성능이 뛰어난 구조를 만들 수 있음  Redis는 Remote Dictionary Server를 의미캐싱, 세션 저장소, 실시간 데이터 저장소 등 다향한 용도로 사용 IO MultiPlexing IO MultiPlexing은 하나의 스레드가 여러개의..

SQL 개념 및 실제 쿼리 정리

SQLD 공부했다고 SQL의 쿼리를 잘 짤수는 없다.최근에 면접을 보았고 DB 관련된 내용 질문이 많았지만 한마디도 못했다. 내가 생각했던거 이상으로 백엔드에서 DB는 중요했다.  SQLD 공부가 무의미한 것은 아니다.단지 내가 이론적으로만 학습했기 때문에,외우기에만 급급했고 정말 실제 SQL 사용측면에서의 학습이 부족했다.   SQLD 필수 개념 요약 정리 / 벼락치기, 독학, 요약본SQL은 비절차적 언어로, 절차적 언어 (JAVE,C 등등)과는 다르다. SQLD에서 나오는 핵심 개념들은 요약정리 해보자 🐸(최소한 이것만은 외우고 가자는 마인드 !) 처음보는 용어이면, 익숙해지고한jerry-k.site 그래서 이번에 지난번에 SQLD 시험을 위해 정리했던 내용들을, 좀 더 실용성을 바탕으로 보충해보려..

⚙️ Backend/DB 2025.04.01

[1분 면접] 스케일 아웃과 스케일 업의 차이점

📌 면접 답변기존에 개발하고 있는 서비스의 서버가 한계에 도달했을 때, 스케일 아웃 또는 스케일 업을 고려할 수 있다.스케일 업기존의 서버를 더욱 높은 사양으로 업그레이드상대적으로 간단하게 서버의 성능 향상 하지만 무한정 업그레이드 불가능 사용 예시 단일 쓰레드 성능이 중요한 DB 서버가상화 기반 인프라 (가상 서버 하나에 많은 자원 필요)라이센스 기준이 "서버 수" 일 경우단일 서버에서만 동작해야하는 레거시 시스템대규모 트랜잭션 처리 시스템 스케일 아웃비슷한 사양의 장비를 추가하여 수평으로 확장서버로 들어오는 많은 요청을 서버 n대로 분산시켜 성능 향상그때 그대 필요한 만큼 서버 추가 상대적으로 스케일 업 방식보다 비용이 효율적특정 서버의 장애가 발생 상황에서 스케일 업 방식보다 가용성이 높음단점으로..

[1분 면접] 캐시 스탬피드 현상에 대하여 설명해주세요.

📌 면접 답변Cache Stampede (캐시 쇄도, 캐시 스탬피드) 여러 요청이 동시에 캐시가 만료된 데이터를 요청하면서, 모두가 DB에 몰리는 상황DB로 트래픽이 집중되어 서비스 장애가 발생할 위험이 있다.  stamped는 말이나 소 떼가 공포에 질려 한 방향으로 갑자기 달리는 것을 의미한다. cache Stampede도 마찬가지로 캐시가 비는 순간, 수많은 요청이 우르르 백엔드로 몰려드는 상황이 생긴다.  Cache Stampede 완화 방법1. Locking (잠금)한 요청 처리 스레드만 캐시 적재를 수행하고, 나머지 스레드는 대기캐시를 적재하면 TTL(Time-To-Live,만료 시간) 늘어남성능 저하 가능성잠금 스레드 실패 시 문제 발생잠금 생명 주기 및 데드락 고려 뭐만 하면 잠금하면 왠..

[1분 면접] ACID에 대해 설명해주세요.

📌 면접 답변 ACID는  Atomicity(원자성), Consistency(일관성), Isolation(격리성), Durability(지속성)의 약자로, 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 의미한다.   Atomicity (원자성)트랜잭션 내부 연산들이 부분적으로 실행되고 중단되지 않음을 보장트랜잭션은 전체 성공 또는 전체 실패 중 한가지만 가능   Consistency (일관성) 트랜잭션 성공 완료되면 일관성 있는 DB 상태 유지 보장DB 규칙 위반하는 트랜잭션의 경우 취소되어야 함   Isolation (격리성) 동시에 실행되는 여러 트랜잭션이 서로 독립적임을 보장 트랜잭션 밖에서 어떠한 연산도 중간 단계의 데이터 볼 수 없음  Durability (지속성) 성공..

[1분 면접] REST란 무엇인가 ?

📌 면접 답변REST는 자원을 URI로 표현하고, 자원에 대한 상태 전이를 HTTP 메서드를 통해서 처리하는 아키텍쳐 스타일   RESTful하기 위한 6가지 조건  1. Uniform Interface 일관된 인터페이스로 자원 표현 (가장 중요)2. Stateless서버는 클라이언트의 상태를 저장하지 않음매 요청에 필요한 모든 정보 포함3. Clinet-Server 구조 클라이언트는 UI, 서버는 자원처리4. Cacheable 응답에 캐시 여부 명시하여 성능 최적화5. Layered System중간 계층(프록시, 로드밸런서)  존재6. Code on Demand 서버가 클라이언트로 스크립트나 코드 전달 가능  REST는 결국 HTTP를 잘 활용하기 위한 원칙이다. URI와 HTTP 메서드를 사용해 자..

[1분 면접] 캐싱 전략에 대해서 설명해주세요.

📌면접 답변데이터를 무작정 캐싱하는 것이 아니라, 적절한 전략을 통해서 성능을 최적화 하는것이 캐싱 전략이다.   읽기 중심 캐싱 전략 - Cache Aside (Lazy Loading)캐시를 먼저 확인하고, 없으면 DB에서 가져와 저장하는 방식 (Lazy Loading)애플리케이션이 캐시를 직접 관리하는 방식캐시를 메인 저장소처럼 다루는 것이 아니라, 옆에( Aside) 둬서 활용캐시에 저장된 데이터가 오래되면 갱신 필요실제 요청된 데이터만 캐시에 저장되어 불필요한 데이터 캐싱 줄임초기에 대량의 캐시 미스르 인한 DB 부하 발생할 수 있음캐시 미스 발생 시 개발자가 직접 DB에서 데이터를 가져와 캐시에 저장  - Read Throgh애플리케이션이 캐시를 통해 (Through) 데이터를 가져옴애플리케이..

Java 기본 (객체 지향 프로그래밍)

해당 포스트는 김영한님의 Java 기본을 듣고, 나 스스로 복습을 하기 위해 정리해 놓았다. 시작하기에 앞서 인프런의 김영한님께서 항상 강조 하시는 말을 기억하며..."자바에서 대입은 항상 변수에 들어 있는 값을 복사해서 전달한다."  또한 객체지향의 4가지 특징을 기억하자."캡슐화, 상속, 다형성, 추상화" 여기에서 가장 중요한 것은 다형성이다 !  클래스와 데이터 / 기본형과 참조형 / 객체 지향 프로그래밍 / 생성자 / 패키지 / 접근 제어자 / 자바 메모리 구조와 static / final / 상속 / 다형성 클래스 구성 요소 클래스사용자 정의 타입을 만들수 있도록 하고, 이것에 대한 설계도설계도인 클래스를 사용해서 실제 메모리에 만들어진 객체 또는 인스턴스객체와 인스턴스 용어는 자주 혼용 됨 (..

🔖Java 2025.03.16

[1분 면접] 자료구조 스택에 대해서 설명해주세요.

📌 면접 답변Stack은 후입선출(LIFO, Last In First Out)의 개념을 가진 선형 자료구조스택에사 삭제는 가장 최상단에서만 이뤄짐활용 사례스택 메모리 브라우저 뒤로가기함수 호출 및 콜 스택 (Call Stack)인터럽트 처리 자바에서 스택 사용├── java.util.Vector ├── java.util.Stack 자바에서 Stack이라는 클래스를 사용 할 수 있음  java.util.Collection ├── java.util.Queue ├── java.util.Deque (인터페이스) ├── LinkedList (클래스, Deque 구현체) ├── ArrayDeque (클래스, Deque 구현체) 하지만 자바에서는 Deque 인터페..