전체 글 526

NOT IN 쿼리를 사용할 때 발생할 수 있는 문제와 최적화 방법에 대해 설명해 주세요

아래와 같이 NOT IN을 사용한 쿼리는 직관적이고 사용하기 쉽지만, 대규모 데이터셋에서 심각한 성능 저하를 일으킬 수 있습니다.SELECT p FROM Post pWHERE p.id NOT IN :postIds문제점NOT IN은 부정 조건으로, 대부분의 DBMS에서 전체 테이블 스캔이나 인덱스 풀 스캔을 유발합니다. 전체 데이터나 테이블을 스캔한 후 조건에 맞지 않는 레코드를 필터링 해야하기 때문에 데이터베이스 옵티마이저가 효율적인 실행 계획을 세우기 어렵습니다.인덱스를 효과적으로 활용하지 못합니다. IN 절은 인덱스 Range Scan을 통해 빠르게 처리할 수 있지만, NOT IN은 인덱스 활용도가 현저히 떨어집니다.대량의 값을 IN 절에 넣으면 실행 계획 생성이 늘어나고, 파싱 및 최적화 단계에서 ..

관계형 데이터베이스와 비관계형 데이터베이스에 대해 설명해주세요.

관계형 데이터베이스는 데이터를 테이블 형식으로 저장하고 관리하는 데이터베이스입니다. 각 테이블은 고정된 스키마를 가지며, 행(Row)은 개별 레코드, 열(Column)은 속성을 나타냅니다. 각 테이블은 고유한 스키마를 가지고 있어, 데이터 타입과 구조가 엄격하게 정의되어 있습니다. 대표적인 예로는 MySQL, PostgreSQL, Oracle이 있습니다.관계형 데이터베이스는 정형화된 데이터를 다룰 때 특히 유용합니다. 미리 정의된 타입과 구조가 있기 때문에 이에 부합하는지 검증하여 데이터의 일관성을 유지하기 용이합니다. 또한, 데이터 간의 관계를 명확히 표현할 수 있는 것이 큰 장점입니다. 예를 들어 사용자와 주문 데이터를 각각 테이블로 만들고, 사용자 ID를 외래키로 설정해 두 테이블을 연결할 수 있습..

✅ 클라이언트 사이드 라우팅(Client-Side Routing) 동작 과정

1. 기본 동작 차단일반적으로 를 클릭하면 브라우저는 서버에 요청을 보내고, 전체 HTML을 다시 내려받습니다.React Router 같은 CSR 라우팅 라이브러리는 이 기본 동작을 막습니다(preventDefault).2. URL 변경 (History API 활용)라우터는 window.history.pushState() 또는 replaceState()를 사용해 브라우저 주소창의 URL만 변경합니다.이 과정에서 서버로 별도 요청은 가지 않고, 브라우저 히스토리에 기록만 남습니다.3. 라우팅 매칭 → 컴포넌트 렌더링라우터는 URL 변경을 감지한 뒤, 미리 정의된 라우팅 테이블에서 해당 경로와 매칭되는 컴포넌트를 찾습니다.예: /about → }>그 결과, 전체 HTML을 다시 받지 않고 현재 SPA 내에서..

최종적 일관성이란 무엇인가요?

최종적 일관성(Eventual Consistency) 이란 분산 시스템에서 고가용성을 유지하기 위해서 사용하는 일관성 모델입니다. 데이터가 수정되면, 그 변경 내용은 비동기적으로 다른 노드에 전파되기 때문에 일시적으로 각 노드의 데이터가 다를 수 있습니다. 하지만 시간이 지나면 모든 노드에 변경 사항이 전달되어 결국에는 모든 노드가 동일한 데이터를 가지게 되는 것을 의미합니다.만약, 사용자가 특정 노드에 데이터를 수정하면 다른 노드에 변경 사항이 복제되는 상황을 가정하겠습니다. 이미지 출처 : Google Cloud위 구성은 복제를 수행하고 있는 노드에 대해 조회 연산을 허용하여 높은 가용성을 유지할 수 있으며, 최종적으로는 모든 노드가 같은 데이터를 가지고 있는 최종적 일관성을 달성할 수 있습니다. 하..

JSON Schema에 대해 설명해주세요.

JSON Schema는 JSON 데이터의 형식을 기술하고 검증하기 위한 명세서입니다. 특정 JSON이 어떤 구조를 가져야 하는지를 명시할 수 있도록 해줍니다.예를 들어 회원 정보에 대한 명세를 다음과 같이 작성할 수 있습니다.{ "type": "object", "properties": { "username": { "type": "string", "minLength": 3 }, "email": { "type": "string", "format": "email" }, "password": { "type": "string", "minLength": 6 } }, "required": ["username", "email", "password"], "additionalProperties":..

SQL 인젝션에 대해 설명해 주세요.

SQL 인젝션(SQL Injection) 은 웹 애플리케이션에서 사용자의 입력값이 SQL 쿼리에 안전하게 처리되지 않을 때 발생하는 보안 취약점입니다. 공격자는 이 취약점을 이용해 쿼리를 조작하여 인증을 우회하거나, 데이터를 조작하거나, 테이블 자체를 삭제할 수도 있습니다.예를 들어, 로그인 검증 시 아래와 같은 코드를 사용한다고 가정해 보겠습니다.public boolean login(String username, String password) { String sql = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'"; try (Connection conn = DriverMana..

HTTP의 ETag에 대해서 설명해주세요.

ETag(Entity Tag)는 HTTP 프로토콜에서 사용되는 헤더로, 웹 리소스의 특정 버전을 식별하는 고유한 식별자입니다.서버가 클라이언트에게 리소스를 전송할 때 ETag 헤더를 포함시키고, 클라이언트는 이후 요청 시 If-None-Match 헤더에 이 값을 포함하여 조건부 요청을 보낼 수 있습니다.ETag의 주요 목적은 캐싱 효율성을 높이는 것입니다. 클라이언트가 이미 가지고 있는 리소스와 서버의 현재 버전이 동일한지 확인할 수 있어, 변경되지 않았다면 전체 콘텐츠를 다시 다운로드하지 않고 304 Not Modified 응답을 받습니다. 이를 통해 네트워크 트래픽과 서버 부하를 줄일 수 있습니다.Last-Modified 헤더와 비슷한 역할을 하지만, 타임스탬프 기반이 아닌 콘텐츠 기반으로 동작합니다..

테스트 격리란 무엇인가요?

테스트 격리(Test Isolation) 는 각 테스트가 서로 독립적으로 실행되도록 보장하는 것을 말합니다. 즉, 어떤 테스트가 실행되더라도 다른 테스트의 결과나 상태에 영향을 주거나 받지 않아야 한다는 의미입니다.테스트 격리가 중요한 이유는 격리가 제대로 이루어지지 않으면 비결정적 테스트가 발생할 수 있기 때문입니다. 비결정적(Non-deterministic) 테스트는 같은 테스트를 여러 번 실행했을 때 항상 같은 결과를 내지 않는 테스트를 말합니다. 예를 들어, 테스트가 데이터베이스와 같은 공유 자원에 의존할 경우 실행 순서나 다른 테스트의 실행 여부에 따라 성공 또는 실패 결과가 달라질 수 있습니다. 비결정적 테스트는 실패했을 때 실제 코드의 문제인지, 비결정적 요인 때문인지 판단하기 어려워집니다...

NoSQL 데이터베이스의 유형에는 어떤 것들이 있나요?

NoSQL 데이터베이스의 유형은 키-값, 문서 지향, 열 지향, 그래프, 시계열이 있습니다.키-값 데이터베이스(Key-value Database) 는 키를 고유한 식별자로 사용하는 키-값 쌍의 형태로 데이터를 저장합니다. 구조가 단순하고, 빠른 읽기 및 쓰기 성능을 제공합니다. Redis, Amazon DynamoDB가 대표적인 예시이고, 세션 저장, 캐시, 실시간 순위 등으로 사용할 수 있습니다.문서 지향 데이터베이스(Document-oriented Database) 는 JSON, BSON, XML 등의 형식으로 데이터를 저장합니다. 유연한 스키마를 가지고 있으며, 복잡한 데이터 구조를 쉽게 표현할 수 있습니다. MongoDB, CouchDB가 대표적인 예시이고, 콘텐츠 관리 시스템, 사용자 프로필 저..

OSI 7계층에 대해서 설명해주세요

OSI 7계층은 국제표준화기구(ISO)에서 제시한 국제 표준 규약으로, 네트워크 통신이 일어나는 과정을 7개의 계층으로 나누어 정의했습니다. 각 계층은 하위 계층의 기능만을 이용하며 상위 계층에게 기능을 제공합니다.1계층 물리 계층(Physical Layer)은 실제로 데이터를 전송하는 하드웨어적인 부분을 담당합니다. 데이터를 0과 1의 신호로 변환해 전기, 빛, 무선 주파수 등을 통해 전달하는 역할을 합니다. 흔히 볼 수 있는 케이블, 안테나 같은 장비가 물리 계층에서 동작합니다.2계층 데이터 링크 계층(Data Link Layer)은 신뢰성 있는 전송을 보장하기 위한 계층입니다. 물리 계층에서 전송된 데이터를 프레임 단위로 관리하고, 통신 오류를 감지 및 수정하는 역할을 수행합니다. 데이터 링크 계층..