user-img
Computer Science 22
thumbnail
[DB] 인덱스 머지 (Index Merge)
0. 학습 목적인덱스 머지가 무엇인지 이해한다.인덱스 머지의 종류인 교집합, 합집합, 정렬 후 합집합을 이해한다.1. 인덱스 머지란?Index Merge 란 하나의 테이블에서 두 개 이상의 인덱스를 활용하여 데이터를 선별하고 그 결과를 병합하여 쿼리를 처리하는 최적화 전략이다.만약 해당 옵션을 켜두지 않았다면, 옵티마이저는 쿼리를 처리할 때, 하나의 테이블에서는 오로지 하나의 인덱스를 활용한다.2. 사용되는 조건쿼리에 사용된 각각의 조건이 하나의 테이블 내의 서로 다른 인덱스를 활용할 수 있다.하나의 인덱스로만 처리했을 경우 범위 필터링 효과가 미미하다.3. 종류intersection: 각기 다른 인덱스로 필터링한 데이터들 사이의 교집합만 반환union: 각기 다른 인덱스로 필터링한 데이터들 사이에 합집..
8주 전
Computer Science > 데이터베이스
thumbnail
[DB] 인덱스 확장 (Index Extension)
0. 학습 목적인덱스 확장이 무엇인지 이해한다.인덱스 확장 전략의 장점을 이해한다.1. 인덱스 확장 이란?Index Extension은 InnoDB를 사용하는 테이블에서 보조 인덱스를 활용할 때, 그 보조 인덱스에 자동 추가된 PK도 함께 활용할 수 있게 할지 말지를 정하는 옵션이다. 해당 옵션을 활성화하면, 보조인덱스를 (보조 인덱스, PK) 로 된 복합 인덱스를 활용하는 것처럼 사용할 수 있다.다음과 같이 테이블이 있다고 해보자.-- 테이블 생성CREATE TABLE dept_emp ( dept_no INT NOT NULL, emp_no CHAR(4) NOT NULL, salary INT, from_date DATE NOT NULL, PRIMARY KEY (dept_no, ..
8주 전
Computer Science > 데이터베이스
thumbnail
[데이터 베이스] Multi Range Read
0. 학습 목적MRR 옵션이 무엇인지, 작동 원리가 어떻게 되는지 이해한다.MRR과 BKA의 관계를 이해한다.BKA의 작동 원리에 대해 이해한다. 1. MRR (Multi-Range-Read) 이란?랜덤 I/O 접근을 순차 I/O 접근으로 변환하여 읽기 속도를 최적화하는 전략이다. 2. MRR 작동 원리-- 테이블 생성CREATE TABLE employees ( emp_no INT PRIMARY KEY, last_name VARCHAR(50), department VARCHAR(50), salary INT, hire_date DATE, INDEX idx_hire_date (hire_date))engine='innodb';-- 실행할 쿼리SELECT * FROM employ..
9주 전
Computer Science > 데이터베이스
thumbnail
[데이터 베이스] BNL 조인의 정의와 작동 방식
0. 학습 목적BNL 조인의 동작 과정에 대해 이해한다.BNL 조인이 왜 해시 조인이나 머지 소트 조인에 의해 밀려났는지 이해한다.BNL 조인과 BKA 조인의 차이점에 대해 이해한다.1. BNL 조인이란?조인 버퍼를 활용하여 드리븐 테이블 스캔 횟수를 줄이는 조인 방식.드라이빙 테이블의 유효한 레코드 하나 당, 드리븐 테이블 전체를 스캔해야 하는 NL 조인의 잦은 스캔 횟수를 줄이고자 나온 방식이다.2. BNL 조인의 동작 과정드라이빙 테이블에서 유효한 레코드를 발견하면, '조인에 필요한 컬럼만' 조인 버퍼에 저장조인 버퍼가 가득차거나, 드라이빙 테이블 읽기가 끝나면 다음 과정을 진행드리븐 테이블의 레코드를 순회하며 유효한 레코드를 만났을 경우, 조인 버퍼를 전체 순회한다.현재의 드리븐 레코드와 매칭되는..
9주 전
Computer Science > 데이터베이스
thumbnail
[데이터 베이스] BKA 조인의 정의와 작동방식데이터 베이스] BKA 조인의 정의와 작동방식
0. 학습 목적BKA 조인의 작동 원리를 이해한다. BNL 조인과의 차이점을 이해한다. 1. BKA (Batch-Key-Access) 조인이란?조인 버퍼와 MRR 인터페이스를 활용하여, Nested Loop Join에서 문제가 되던 너무 많은 랜덤 I/O 접근을 한 번의 순차 I/O로 전환하여 최적화하는 조인전략을 말한다.2. BKA 조인의 과정드라이빙 테이블 스캔 후 조인 버퍼 적재Key Build (조인버퍼 각 행의 (조인 컬럼, 조인 버퍼 속 위치 offset) 튜플을 추출해 랜덤 버퍼에 적재) MRR 인터페이스 호출 (드리븐 테이블의 조인 컬럼으로 이루어진 보조 인덱스 활용하여 PK 값 추출 및 정렬) MRR 인터페이스가 드리븐 본 테이블 (클러스터링 테이블)을 3번에서 정렬한 PK 값 순으로 순..
9주 전
Computer Science > 데이터베이스
thumbnail
[면접 질문] IoC(Inversion of Control) 이란 무엇이고, 스프링에서는 어떻게 구현했는지 설명해주세요.
1. 요약 답변✅KEY WORD: 제어권의 역전 DI, Spring에서의 IoC 동작 과정, Spring에서 DI 3가지 방법과 특징, Bean 등록 3가지 방법과 특징IoC란, '객체 생성과 관리 통제권을 개발자에서 프레임워크로 넘겨준다.' 라는 설계 원칙입니다.장점은 결합도를 낮추어 유지 보수성과 코드 재사용성을 높이고, 테스트에 용이하게 해준다는 점 입니다.Spring에서는 Spring IoC 컨테이너를 활용하여 이 원칙을 구현합니다. 구현 과정은 다음과 같습니다.개발자가 작성한 pom.xml 혹은 어노테이션 기반, 자바 코드 기반의 bean 등록 명세서를 SpringIoC 컨테이너가 읽습니다.읽은 내용을 토대로 Spring Ioc 컨테이너 내부에 bean 객체를 생성 후 등록 합니다.Busines..
10주 전
Computer Science > 모의면접
thumbnail
[면접 질문] Spring에서 Bean을 등록하는 대표적인 두 가지 방법의 차이점은 무엇인가요
1. 요약 답변✅KEY WORD: @Component = 클래스 기반, @Bean = 매서드 기반, 개발자가 직접 객체 생성에 관여해야 하는가의 차이2. 상세 설명 📚Bean 등록 어노테이션은 그 대상이 클래스인지, 매서드인지에 따라 나뉩니다.@Component: 클래스 대상, Bean 등록하고 싶은 클래스에 명시하면, 해당 클래스가 Bean으로 등록 됩니다.@Configuration 클래스의 매서드에 @Bean: 매서드 대상, 이 어노테이션이 적힌 매서드의 반환 객체가 Bean에 등록 됩니다.(외부 라이브러리 등 프레임워크가 온전히 스스로 객체를 만들 수 없는 클래스에 대하여, 미리 개발자가 필요한 환경 설정을 코드로 세팅해두는 방식입니다.)이후 Spring Application이 @CompnentS..
10주 전
Computer Science > 모의면접
thumbnail
[모의 면접] static 키워드는 왜 사용하며 단점은 무엇인가요
1. 요약 답변✅KEY WORD: 메모리 관리, 클래스 수준의 공유 자원, 객체 지향 위반, 숨겨진 의존성 문제, 단위 테스트가 어려움static 키워드를 사용한 변수 혹은 매서드는 컴파일시점에 딱 한번만 Method 영역에 할당된 뒤에, 프로그램 종료 시까지 유지됩니다.이러한 특성 덕에, 메모리 관리에 효율적이고, 클래스 수준의 공유 자원으로 사용되어야 하는 불변 상수나 Utill 함수를 구현할 때 사용됩니다. 하지만 static은 다음과 같은 심각한 부작용이 동반될 수 있으므로 사용 시 유의 해야 합니다.첫 번째로, 객체 지향 프로그래밍을 위반하는 키워드 입니다.static 멤버 변수를 활용하는 클래스의 객체는 자신의 상테를 스스로 완벽하게 제어하지 못하며, 타 객체나 서비스에 의해 자신의 상태가 ..
11주 전
Computer Science > 모의면접
thumbnail
[모의면접] Self-Invocation을 해결할 수 있는 방법에는 어떤 것들이 있나요?
1. 요약 답변✅KEY WORD: Bean 분리, 자가주입SELF-INVOCATION 을 해결하는 방법은 2가지 입니다.첫 번째 방법은 자가 호출된 매서드를 다른 클래스로 분리하여, 해당 매서드 호출 시에도 AOP 빈 프록시가 호출되게 하는 것입니다.두 번째 방법은 같은 객체 내의 매서드를 호출할 시, this. 키워드를 사용하는 대신 객체 이름. 으로 자기 자신을 한 번 더 주입하는 것입니다. Self-Invocation 발생 상황public class Test { public void methodAB (A a, B b) { saveA(a); saveB(b); } public void saveA (A a) { repository.save(A a);..
11주 전
Computer Science > 모의면접
thumbnail
[모의 면접] 정적 팩토리 매서드 패턴과 빌더 패턴에 대해서 설명해주세요.
1. 요약 답변✅KEY WORD: 생성자 숨기기, static 매서드로 팩토리 구현, Builder = 조립과정과 생성의 분리정적 팩토리 매서드 패턴은 팩토리 패턴의 구현체 중 하나 입니다.팩토리 패턴의 구성 요소는 다음과 같습니다.제품 인터페이스: 생성할 구현체에 대한 명세만 추상화 되어 있습니다.구체적인 상품: 명세에 맞게 객체를 어떻게 구체화시킬지 코드 로직이 있습니다.팩토리: 사용자의 요청에 맞게 구현체를 반환합니다.정적 팩토리 매서드 패턴은 팩토리 부분을 static method로 구현한 것입니다.정적 팩토리 매서드 패턴의 장점은 다음과 같습니다.생성 목적에 대한 표현이 매서드 이름으로 가능해진다.인스턴스에 대한 통제 및 관리가 가능해진다. -> 원하는 방향으로만 객체 생성을 한정할 수 있음, ..
11주 전
Computer Science > 모의면접
thumbnail
[DB] My.ini의 위치 찾아서 설정 값 바꾸기 (innodb_ft_min_token_size)
0. 작성 이유innodb_ft_min_token_size는 read-only variable이라서 mysql ide에서 바로 못 고친다. 따라서 이것을 고치는 방법을 설명한다.1. my.ini 위치 찾기my.ini는 보통 MySQL의 basedir 하위에 있다. show variables like %dir;만약 .msi로 설치했다면, %PROGRAMDATA% 디렉토리 하위에 위치한다. 명령 프롬프트에서 다음 명령어를 쳐서 %PROGRAMDATA% 의 위치를 확인한다.echo %PROGRAMDATA%만약 %PROGRAMDATA%에 my.ini이 있다면 이 설정 파일이 정말 우리가 쓰는 mySQL에 사용되고 있는지 확인해야 한다. 다음 명령어를 명령 프롬프트에서 처본다.mysql --help이후Defaul..
2025.06.07
Computer Science > 데이터베이스
thumbnail
[DB] 전문 검색 인덱스의 불용어 제외 기준
0. 학습 목적'불용어와 일치하거나, 불용어를 포함하는 토큰은 인덱스 등록에서 제외' 라는 뜻의 의미가 명확히 이해되지 않아 실습함.실습을 통해 입체적인 이해를 한다.1. 결론n-gram으로 분할 했을 시 분할된 토큰이 둘 중 하나라도 충족하면 (불용어와 일치 혹은 불용어를 포함) 인덱스 등록에서 제외됩니다.따라서 n-gram의 n이 클수록 전문 검색 인덱스의 성능이 저하됩니다. 2. 실습하기1. innodb 전체 토큰 설정을 2-gram에 맞춤세부 과정: [[MySQL에서 innodb_ft_min_token_size 바꾸기]]2. docs 테이블 생성create table docs ( id int auto_increment primary key, content text, fulltext..
2025.06.07
Computer Science > 데이터베이스
thumbnail
[DB] Hash Index 작동원리, 왜 안 쓰이는지
0. 학습 목적Hash Index의 작동원리를 수박 겉핥기식으로 안다.Hash Index의 장점과 단점을 안다.1. 동작 원리(1) 전개도출처: https://codingsight.com/hash-index-understanding-hash-indexes/구성요소Hash Function:식별 컬럼값을 해시값으로 반환하여 해당 인덱스 레코드가 저장될 버킷 위치를 특정한다.Bucket:구현은 배열로 되어 있다. CREATE INDEX idx_name ON members USING hash (name);(2) 데이터 저장 시Insert가 들어온다.Insert into members (name, ...) VALUES ( "John doe", ...)'John doe'란 이름의 일부 (ex - 'john')을 H..
2025.05.11
Computer Science > 데이터베이스
thumbnail
[DB] 인덱스에 대한 개괄적인 이해
0. 학습목적인덱스에 대한 개괄적인 이해 ( 아 이런 거구나~ 정도만 얻으면 OK)1. 인덱스란?원하는 데이터를 바로 찾아보기 위한 색인을 말한다.책의 목차나 책 말미에 존재하는 원하는 글 찾아보기와 같은 기능을 한다.2. 인덱스의 구조출처: 통계학 세상 - 489번째 포스팅 글에서계속 책의 관점과 비교해서 설명하겠다.위의 그림은 국어 사전의 맨 끝에 있는 원하는 단어의 뜻 찾아보기이다. (이하 색인이라 부르겠다.)해당 색인에서는 a. 원하는 단어 이름을 찾은 뒤, b. 그것이 가리키는 페이지로 가서 c. 책의 내용을 본다.DB의 INDEX 또한 해당 원리를 그대로 이어 나간다. 국어사전에서 원하는 단어 이름과 같이 개별 인덱스들을 식별할 수 있는 a. 식별 컬럼 값이 존재 하며, 그것마다 Pair 값..
2025.05.10
Computer Science > 데이터베이스
thumbnail
[DB] 랜덤 I/O는 왜 순차 I/O보다 느릴 수 밖에 없는가? (HDD, SSD, DB 서버 관점에서 분석)
Relevance Framing 🧩목적: 쿼리튜닝의 목표를 이해하기 위해서쿼리와 Disk I/O와의 관계쿼리를 사용하면 필연적으로 디스크 I/O 작업을 거쳐야 한다.해당 Disk I/O 작업은 다시 랜덤 I/O와 순차 I/O로 나뉘는데, 이는 디스크에 접근을 몇 번 하느냐에 따라 종류가 나뉜다.쿼리튜닝은,기존 쿼리와 동일한 데이터를 더 빠른 시간안에 사용자에게 전달할 수 있도록 쿼리를 개선하는 작업을 말한다.디스크에 접근하는 횟수가 적을수록 속도가 개선됨은 당연한 이야기 이므로,**쿼리 튜닝의 목표는 최대한 Disk I/O를 적게 하는 것에 있다. 0. 전제 상황디스크 I/O에 대한 개념을 명확히 이해하기 위해, OS 페이지 캐시와 InnoDB 버퍼 풀에 찾으려는 데이터가 100% 없는 상황이라고 가..
2025.05.09
Computer Science > 데이터베이스
thumbnail
[DB] 왜 HDD와 SSD의 성능 차이가 순차 I/O에서는 크지 않을까?
1. CPU, D-ram, SSD, HDD의 초당 연산 처리 속도 차이 비교세로축인 OPS는 초당 처리 속도이다.메모리(D-RAM)와 HDD는 10만 배 이상의 처리속도 차이를 보인다.메모리와 SSD는 1000배의 처리속도 차이를 보인다.2. SSD와 HDD의 순차 I/O, 랜덤 I/O 성능 비교(1) 순차 I/O 에서는 성능적 차이가 크게 없다.순차 읽기는 한 번에 연속된 많은 량의 데이터를 일괄적으로 읽는 것을 말한다.A. 순차 I/O에서는 HDD의 물리적인 접근 속도가 SSD의 전기적 접근 보다 '월등히' 느리진 않다.HDD에서 순차 I/O를 진행한다면 절차는 다음과 같다. (1)헤드를 읽어야 하는 데이터 시작점에 위치시키고, (2) 디스크를 회전시켜서 그냥 쭉 읽으면 된다. 즉 SEEK TIME과..
2025.05.04
Computer Science > 데이터베이스
thumbnail
[DB] HDD와 SSD의 구성요소 및 작동원리
0. 학습의도HDD와 SSD의 순차 I/O 시간은 거의 비슷하다는 말 자체가 이해가 되지 않았다. 전기적 접근이 이루어지는 SSD가 HDD보다 당연히 모든 면에서 월등해야 하는 것 아닌가?? 해당 물음에 답하기 위해 먼저 HDD와 SSD의 작동원리에 대하여 살펴보았다.1. HDD에 대하여(1) 구성요소Platter(플레터)데이터를 저장하는 원형 자기(magnetic) 디스크실제 데이터를 뜻하는 자성물질들로 외부가 코팅되어 있음.Spindle(스핀들)모든 플레터를 관통 및 고정하고 회전시키는 축플레터를 회전시켜서 arm이 사용자가 원했던 데이터가 있는 섹터를 읽을 수 있도록 하는 역할Track(트랙)플래터 위에 동심원 모양으로 배열된 데이터의 저장 단위하나의 플래터에 수천 ~ 수만 개의 트랙이 존재Sect..
2025.05.04
Computer Science > 데이터베이스
thumbnail
[네트워크] WEB-SOCKET 연결 과정에 대해 설명해주세요!
🧐 WEB-SOCKET 연결 과정에 대해 설명해주세요!KEY WORD: HTTP 1.1에서만 업그레이드 가능, STATE-LESS 에서 STATE-FULL 로, HEART-BEAT로 연결 지속!🙋🏻‍♂️ 면접 1분 대답 !WebSocket은 Http1.1에서만 업그레이드가 가능한 프로토콜로, 기존의 state-less한 http 요청 응답 패턴에서, heart-beat를 활용한 state-full 한 상태로 서버-클라이언트 연결을 변환합니다. 크게 다음의 3가지 과정으로 Web-Socket 연결이 이루어 집니다.클라이언트가 Header에 Upgrade: Websocket Attribute를 담아 연결을 요청합니다.서버가 Header에 Http/1.1 101 Switching Protocol을 보내,..
2025.03.23
Computer Science > 네크워크
thumbnail
VPC, Subnet, gateWay에 대하여
2
0. 들어가며오늘은 인프라를 이해하기 위한 제일 기본적인 CS 지식을 정리하겠다. 바로 VPC, Subnet, gateway, routing_table 이 그것이다. 필자는 해당 개념의 존재조차 잘 알지 못했으나, 이번에 인프라 팀과 대화를 하면서 스스로 네트워크에 대한 지식이 전무함을 느끼고, 다음 회의에서는 더 잘 이해하기 위하여 학습했다. 이제 학습한 내용을 정리해보겠다.1. VPC네트워크 공간은 서부 시대 황야 처럼 드넓고 횡하다. 이 드넓은 공간에서 사람들이 교류하고 의식주를 해결하기 위해서는 같이 모여 살 특정 공간을 지정하고 마을을 건설해야 할 것이다. 드넓은 황야가 네트워크라면, 마을에 해당하는 부분이 바로 VPC이다.VPC를 만든 나는 이제 이 새로운 도시의 시장이다. 서부 시대의 시장은..
2025.02.23
Computer Science > 네크워크
thumbnail
[OS] 선점형과 비선점형 스케줄링의 정의와 종류
1. CPU 스케줄링이란?복수의 프로세스 중 어떤 프로세스가 CPU를 가장 먼저 사용하고 얼마나 오래 사용할지를 결정하는 방식을 의미한다.이를 위해서 스케줄링 기법마다 다르게 프로세스들의 우선순위를 측정하고, CPU 사용시간을 산정한다.(1) 좋은 CPU 스케줄링이란?CPU란 단일 자원을 프로세스들에게 최대한 공평하게 배분하여 프로세스 처리율과 CPU 이용률을 높이고, 응답시간, CPU 과부화(오버 헤드), 프로세스들의 처리 대기시간을 줄이는 것이 좋은 스케줄링이다.공평성🆙 ➜ ( 프로세스 처리율⬆️, CPU 이용률⬆️ ) | (응답 시간 ⬇️, CPU 과부하 ⬇️, 프로세스 처리 대리시간 ⬇️)2. 선점형 스케줄링에 대하여현재 CPU를 활용하고 있는 프로세스를 A라고 하자. 이때 준비큐에서 A보다 처..
2025.02.07
Computer Science > 운영체제
thumbnail
[운영체제] 운영체제에서의 메모리 구조를 영역 지어 설명하세요.
1. 운영체제에서의 메모리 구조란?RAM(주 기억 장치)이란 물리적 메모리를 논리적(가상)으로 영역을 지어 나눈 것.(1) 하드웨어에서의 메모리 구조하드웨어 메모리 계층 구조├── 레지스터│ └─ CPU 내부에 위치 (가장 빠른 메모리)├── 캐시 (L1, L2, L3)│ └─ CPU와 RAM 사이에서 자주 사용되는 데이터를 저장├── 주기억장치 (RAM)│ ├── 사용자 영역 (User Space)│ │ │ │ │ │ │ │ │ └── 커널 영역 (Kernel Space)│ │ │ │ └── 보조기억장치 (HDD, SSD) ├── 스왑 공간 (Swap Space) └── 영구 데이터 저장소저장소라는 메모리의..
2025.01.14
Computer Science > 운영체제