🤗 모든 질문은 '아는대로 설명해주세요'가 베이스~!
🔔 데이터베이스의 특징에 대해 설명해주세요.
- 실시간 접근성(Real-Time Accessibility) : 비정형적인 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능해야 하며,
- 지속적인 변화(Continuous Evloution) : 데이터베이스의 상태는 동적입니다. 즉 새로운 데이터의 삽입(Insert), 삭제(Delete), 갱신(Update)으로 항상 최신의 데이터를 유지해야 합니다.
- 동시 공유(Concurrent Sharing) : 데이터베이스는 서로 다른 목적을 가진 여러 응용자들을 위한 것이므로 다수의 사용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 합니다.
- 내용에 의한 참조(Content Reference) : 데이터베이스에 있는 데이터를 참조할 때 데이터 레코드의 주소나 위치에 의해서가 아니라 사용자가 요구하는 데이터 내용으로 찾습니다.
🔔 데이터베이스 언어(DDL, DML, DCL)에 대해 설명해주세요.
- DDL (정의어 : Data Definition Language) : 데이터베이스 구조를 정의, 수정, 삭제하는 언어 ( alter, create, drop )
- DML (조작어 : Data Manipulation Language) : 데이터베이스내의 자료 검색, 삽입, 갱신, 삭제를 위한 언어 ( select, insert, update, delete )
- DCL (제어어 : Data Control Language) : 데이터에 대해 무결성 유지, 병행 수행 제어, 보호와 관리를 위한 언어 ( commit, rollback, grant, revoke )
🔔 SELECT 쿼리의 수행 순서를 알려주세요.
FROM, ON, JOIN > WHERE, GROUP BY, HAVING > SELECT > DISTINCT > ORDER BY > LIMIT
FROM : 조회 테이블 확인
ON : 조인 조건 확인
JOIN : 테이블 조인 (병합)
WHERE : 데이터 추출 조건 확인
GROUP BY : 특정 컬럼 그룹화
HAVING : 그룹화 이후 데이터 추출 조건
SELECT : 데이터 추출
DISTINCT : 중복 제거
ORDER BY : 데이터 순서 정렬
LIMIT : LIMIT에서 벗어나는 행들은 제외되어 출력
🔔 트리거(Trigger)에 대해 설명해주세요.
- 트리거는 특정 테이블에 대한 이벤트에 반응해 INSERT, DELETE, UPDATE 같은 DML 문이 수행되었을 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램입니다.
- 사용자가 직접 호출하는 것이 아닌, 데이터베이스에서 자동적으로 호출한다는 것이 가장 큰 특징입니다.
🔔 Index에 대해 설명해주시고, 장/단점에 대해 아는대로 말해주세요.
- Index란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다.
- 데이터베이스에서도 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기 때문에 데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회할 수 있도록 돕고 있다.
- DBMS는 index를 항상 최신의 정렬된 상태로 유지해야 원하는 값을 빠르게 탐색할 수 있다.
그렇기 때문에 인덱스가 적용된 컬럼에 INSERT, UPDATE, DELETE가 수행된다면 각각 다음과 같은 연산을 추가적으로 해주어야 하며 그에 따른 오버헤드가 발생한다.- INSERT: 새로운 데이터에 대한 인덱스를 추가함
- DELETE: 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행함
- UPDATE: 기존의 인덱스를 사용하지 않음 처리하고, 갱신된 데이터에 대해 인덱스를 추가함
- 장점
- 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있다.
- 전반적인 시스템의 부하를 줄일 수 있다.
- 단점
- 인덱스를 관리하기 위해 DB의 약 10%에 해당하는 저장공간이 필요하다.
- 인덱스를 관리하기 위해 추가 작업이 필요하다.
- 인덱스를 잘못 사용할 경우 오히려 성능이 저하되는 역효과가 발생할 수 있다.
- 인덱스를 사용하면 좋은 경우
- 규모가 작지 않은 테이블
- INSERT, UPDATE, DELETE가 자주 발생하지 않는 컬럼
- JOIN이나 WHERE 또는 ORDER BY에 자주 사용되는 컬럼
- 데이터의 중복도가 낮은 컬럼
🔔 그렇다면 DBMS는 Index를 어떻게 관리하고 있나요? (Index 자료구조)
- B+Tree 인덱스 자료구조
- 자식 노드가 2개 이상인 B-Tree를 개선시킨 자료구조이며,
- BTree 리프노드들을 LinkedList로 연결하여 순차 검색을 용이하게 합니다. 해시 테이블보다 나쁜 O(log2N)의 시간복잡도를 갖지만 일반적으로 사용되는 자료구조입니다.
- 해시 테이블
- 컬럼의 값으로 생성된 해시를 기반으로 인덱스를 구현합니다.
- 시간복잡도가 O(1)이라 검색이 매우 빠릅니다.
- 부등호(<,>)와 같은 연속적인 데이터를 위한 순차 검색이 불가능하기 때문에 사용에 적합하지 않습니다.
B+Tree 설명 잘 되어 있는 블로그 https://jie0025.tistory.com/513
🔔 정규화에 대해 설명해주세요.
하나의 릴레이션에 하나의 의미만 존재하도록 릴레이션을 분해하는 과정이며, 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법입니다.
- 제1 정규형 : 테이블의 컬럼이 원자 값(Atomic Value; 하나의 값)을 갖도록 분해합니다.
- 제2 정규형: 제1 정규형을 만족하고, 기본키가 아닌 속성이 기본키에 완전 함수 종속이도록 분해합니다.
- ※ 여기서 완전 함수 종속이란 기본키의 부분집합이 다른 값을 결정하지 않는 것을 의미
- 제3 정규형 : 제2 정규형을 만족하고, 이행적 함수 종속을 없애도록 분해합니다.
- ※ 여기서 이행적 종속이란 A → B, B → C가 성립할 때 A → C가 성립되는 것을 의미
- BCNF 정규형 : 제3 정규형을 만족하고, 함수 종속성 X → Y가 성립할 때 모든 결정자 X가 후보키가 되도록 분해합니다.
잘 정리된 내용 https://mangkyu.tistory.com/110
🔔 정규화에는 어떤 장점이 있고 어떤 단점이 있는지 아는대로 설명해주세요.
장점
- 데이터베이스 변경 시 이상현상이 발생하는 문제점을 해결할 수 있습니다.
- 데이터베이스 구조 확장 시 정규화된 데이터베이스는 그 구조를 변경하지 않아도 되거나 일부만 변경해도 됩니다.
단점
- 릴레이션의 분해로 인해 릴레이션 간의 연산(JOIN 연산)이 많아진다. 이로인해 질의에 대한 응답 시간이 느려질 수 있습니다.
🔔 역정규화를 하는 이유에 대해 아는대로 설명해주세요.
- 정규화를 거치면 릴레이션 간의 연산(JOIN 연산)이 많아지는데, 이로인해 성능이 저하될 우려가 있습니다.
- 성능 향상과 개발 운영의 단순화를 위해 수행합니다.
🔔 이상 현상의 종류에 대해 설명해주세요.
- 이상 현상은 테이블을 설계할 때 잘못 설계하여 데이터를 삽입,삭제,수정할 때 생기는 논리적 오류를 말합니다.
- 삽입 이상 : 자료를 삽입할 때 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상
- 갱신 이상 : 중복된 데이터 중 일부만 수정되어 데이터 모순이 일어나는 현상
- 삭제 이상 : 어떤 정보를 삭제하면, 의도하지 않은 다른 정보까지 삭제되어버리는 현상
- 이러한 이상 현상을 예방하고 효과적인 연산을 하기 위해 데이터 정규화를 합니다.
🔔 SQL Injection이 무엇인지 설명해주세요.
- SQL Injection이란 공격자가 악의적인 의도를 갖는 SQL 구문을 삽입하여 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 기법입니다.
🔔 SQL Injection을 방어 및 방지하기 위한 방법에 대해 알고 있다면 설명해주세요.
- 입력값을 검증하여 사용자의 입력이 쿼리에 동적으로 영향을 주는 경우 입력된 값이 개발자가 의도한 값(유효값) 인지 검증합니다.
- 저장 프로시저를 사용합니다.
※ 저장 프로시저란 사용하고자 하는 Query에 미리 형식을 지정하는 것을 말한다. 지정된 형식의 데이터가 아니면 Query가 실행되지 않기 때문에 보안성이 크게 향상한다.
🔔 RDBMS와 NoSQL의 차이에 대해 설명해주세요.
RDBMS는 모든 데이터를 2차원 테이블 형태로 표현합니다.
- 장점 : 스키마에 맞춰 데이터를 관리하기 때문에 데이터의 정합성을 보장할 수 있다.
- 단점 : 시스템이 커질 수록 쿼리가 복잡해지고 성능이 저하되며 Scale-out이 어렵다(Scale-up만 가능)
NoSQL(Not Only SQL)은 RDBMS와 반대로 데이터간의 관계를 정의하지 않고, 스키마가 없어 좀 더 자유롭게 데이터를 관리할 수 있으며, 컬렉션이라는 형태로 데이터를 관리합니다.
- 장점
- 스키마 없이 Key-Value 형태로 데이터를 관리해 자유롭게 데이터를 관리할 수 있다.
- 데이터 분산이 용이하여 성능 향상을 위한 scale-up 뿐만아닌 scale-out 또한 가능하다.
- 단점
- 데이터 중복이 발생할 수 있고, 중복된 데이터가 변경될 경우 수정을 모든 컬렉션에서 수행해야 한다.
- 스키마가 존재하지 않기에 명확한 데이터 구조를 보장하지 않아 데이터 구조 결정이 어려울 수 있다.
🔔 그렇다면 RDBMS와 NoSQL은 어느 경우에 적합한가요?
- RDBMS는 데이터 구조가 명확하고, 변경 될 여지가 없으며 스키마가 중요한 경우 사용하는 것이 좋습니다. 또한 중복된 데이터가 없어(데이터 무결성) 변경이 용이하기 때문에 관계를 맺고 있는 데이터가 자주 변경이 이루어지는 시스템에 적합합니다.
- NoSQL은 정확한 데이터 구조를 알 수 없고 데이터가 변경/확장 될 수 있는 경우 사용하는 것이 좋습니다. 또한 단점에서도 명확하듯 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경될 시 모든 컬렉션에서 수정해야 하기 때문에 Update가 많이 이루어지지 않는 시스템에 좋으며, Scale-out이 가능하다는 장점을 활용해 막대한 데이터를 저장해야 해서 DB를 Scale-out 해야 되는 시스템에 적합합니다.
🔔 트랜잭션이란 무엇인지 설명해주세요.
- 트랜잭션은 작업의 완전성을 보장해줍니다.
- 즉, 작업들을 모두 처리하거나 처리하지 못할 경우 이전 상태로 복구하여 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능입니다.
- 하나의 트랜잭션은 Commit(작업완료)되거나 Rollback(취소)됩니다.
🔔 트랜잭션의 특성(ACID)에 대해 설명해주세요.
1. 원자성(Atomicity) 작업이 모두 반영되던지 아니면 전혀 반영되지 않아야 한다.
2. 일관성(Consistency) 실행이 완료되면 언제나 일관성 있는 상태를 유지해야 한다.
3. 독립성(Isolation) 둘 이상 트랜잭션이 동시에 실행될 경우 서로의 연산에 끼어들 수 없다.
4. 영속성(Durability) 완료된 결과는 영구적으로 반영되어야 한다.
🔔 DB 락에 대해 설명해주세요.
- DB Lock은 트랜잭션 처리의 순차성을 보장하기 위한 방법입니다.
- 공유락(LS, Shared Lock) Read Lock라고도 하는 공유락은 트랜잭션이 읽기를 할 때 사용하는 락이며, 데이터를 읽기만하기 때문에 같은 공유락 끼리는 동시에 접근이 가능합니다.
- 베타락(LX, Exclusive Lock) Write Lock라고도 하는 베타락은 데이터를 변경할 때 사용하는 락입니다. 트랜잭션이 완료될 때까지 유지되며, 베타락이 끝나기 전까지 어떠한 접근도 허용하지 않습니다.
🔔 Elastic Search의 키워드 검색과 RDBMS의 LIKE 검색의 차이에 대해 설명해주세요.
- RDBMS는 단순 텍스트매칭에 대한 검색만을 제공해 동의어나 유의어 같은 검색은 불가능합니다.
- (MySQL 최신 버전에서 n-gram 기반의 Full-Text 검색을 지원하긴 하지만, 한글 검색의 경우 아직 많이 빈약한 감이 있습니다.)
- 하지만 엘라스틱 서치는 동의어나 유의어를 활용한 검색이 가능하며, 비정형 데이터의 색인과 검색이 가능하고, 역색인 지원으로 매우 빠른 검색이 가능합니다.
※ Full-Text : 이미지, CSS, 글 등의 복합적으로 이뤄진 컨텐츠에서 순수하게 텍스트만 추출한 데이터를 의미. 이 과정을 보통 크롤링으로 구현함 ( 엘라스틱 서치의 검색엔진엔 크롤러가 빠져있어 별도로 구축해야함)
Elastic Search 관련 내용 https://sihyung92.oopy.io/database/elasticsearch/1
🔔 옵티마이저(Optimizer)에 대해 아는대로 말해주세요.
- 옵티마이저는 SQL을 가장 빠르고 효율적으로 수행할 최적의 처리 경로를 생성해주는 DBMS 내부의 핵심 엔진입니다.
- 규칙 기반 옵티마이저
- 오라클8 이하의 버전에서 기본으로 설정된 옵티마이저
- 실행 속도가 빠른 순으로 규칙을 먼저 세워두고 우선순위가 앞서는 방법을 채택하는 것입니다.
- 비용 기반 옵티마이저
- 최근에 많이 사용하고 있는 옵티마이저 방식이며 오라클 10 이후 버전부터는 공식적으로 비용 기반 옵티마이저만 사용을 하고 있습니다.
- 옵티마이저에서 실행 계획을 세운 뒤(최대 2천개까지) 비용이 최소한으로 나온 실행 계획을 수행합니다.
- Parser : SQL문장을 분석하여 문법 검사와 구성요소를 파악하고 이를 파싱 해서 파싱 트리를 만듭니다.
- Query Transformer : 파싱된 SQL을 보고 같은 결과를 도출하되, 좀 더 나은 실행 계획을 갖는 SQL로 변환이 가능한지를 판단하여 변환 작업을 수행합니다.
- Estimator : 시스템 통계정보를 딕셔너리로부터 수집하여 SQL을 실행할 때 소요되는 총비용을 계산합니다.
- Plan Generator : Estimator를 통해 계산된 값들을 토대로 후보군이 되는 실행계획을 도출합니다.
- Row-Source Generator : 옵티마이저가 생성한 실행계획을 SQL 엔진이 실제 실행할 수 있는 코드나 프로시저 형태로 포맷팅 합니다.
- SQL Engine : SQL을 실행합니다.
🔔 DB 튜닝(Tuning)이 무엇인지 그리고 튜닝의 3단계에 대해 설명해주세요.
- DB 튜닝이란 DB의 구조나, DB 자체, 운영체제 등을 조정하여 DB 시스템의 전체적인 성능을 개선하는 작업을 말합니다.
- 튜닝은 DB 설계 튜닝 → DBMS 튜닝 → SQL 튜닝 단계로 진행할 수 있습니다.
- 1단계 - DB 설계 튜닝(모델링 관점)
- DB 설계 단계에서 성능을 고려하여 설계
- 데이터 모델링, 인덱스 설계
- 데이터파일, 테이블 스페이스 설계
- 데이터베이스 용량 산정
- 튜닝 사례 - 반정규화, 분산파일배치
- 2단계 - DBMS 튜닝(환경 관점)
- 성능을 고려하여 메모리나 블록 크기 지정
- CPU, 메모리 I/O에 관한 관점
- 튜닝 사례 - Buffer 크기, Cache 크기
- 3단계 - SQL 튜닝(App 관점)
- SQL 작성 시 성능 고려
- Join, Indexing, SQL Execution Plan
- 튜닝 사례 - Hash / Join
🔔 inner join과 outer join의 차이를 설명해주세요.
- inner join 은 서로 연관된 내용만 검색하는 조인 방법입니다.
A와 B에 대해 수행하는 것은, A와 B의 교집합을 말합니다. 벤다이어그램으로 그렸을 때 교차되는 부분입니다.
- outer join 은 한 쪽에는 데이터가 있고 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽의 내용을 전부 출력하는 방법입니다.
- A와 B에 대해 수행하는 것은, A와 B의 합집합을 말합니다. 벤다이어그램으로 그렸을 때 합집합 부분입니다.
- outer join에는 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN이 있습니다.
🔔 group by의 역할에 대해 설명해주세요.
- GROUP BY 는 GROUP BY 명령어를 통해 특정 컬럼을 기준으로 연산한 결과를 집계 키로 정의하여 그룹을 짓는 역할을 합니다.
- 집합 연산자는 COUNT, SUM, AVG, MAX, MIN 등이 있고, DISTINCT와 같이 중복 데이터를 제거하는 특징이 있습니다.
🔔 DELETE, TRUNCATE, DROP의 차이를 설명해주세요.
- DELETE는 데이터는 지우지만 테이블 용량은 줄어들지 않고 원하는 데이터만 골라서 지울 수 있습니다. 삭제 후 되돌릴 수 있습니다.
- TRUNCATE는 전체 데이터를 한번에 삭제하는 방식입니다. 테이블 용량이 줄어들고 인덱스 등도 삭제되지만 테이블은 삭제할 수 없고, 삭제 후 되돌릴 수 없습니다.
- DROP은 테이블 자체를 완전히 삭제하는 방식(공간, 인덱스, 객체 모두 삭제)입니다. 삭제 후 되돌릴 수 없습니다.
🔔 데이터베이스 클러스터링과 리플리케이션의 차이에 대해 설명해주세요.
- 클러스터링
- 여러 개의 DB를 수평적인 구조로 구축하는 방식입니다. 동기 방식으로 사용되며, 다음과 같은 장단점이 있습니다.
- 장점 :
- DB 간의 데이터를 동기화하여 항상 일관성있는 데이터를 얻을 수 있다.
- 1개의 DB가 죽어도 다른 DB가 살아 있어 시스템을 장애없이 운영할 수 있다. (높은 가용성)
- 기존에 하나의 DB서버에 몰리던 부하를 여러 곳으로 분산시킬 수 있다. (로드밸런싱)
- 단점 :
- 저장소 하나를 공유하면 병목현상이 발생할 수 있다.
- ※ 병목현상 : 전체 시스템이 성능이나 용량이 하나의 구성요소로 인해 제한을 받는 현상이다.
- 서버를 동시에 운영하기 위한 비용이 많이 든다.
- 리플리케이션
- DB를 복제해서 여러대의 DB서버에 저장하는 방식
- 장점
- DB 요청의 60~80% 정도가 읽기 작업이기 때문에 Replication만으로도 충분히 성능을 높일 수 있다.
- 비동기 방식으로 운영되어 지연 시간이 거의 없다.
- 장애 복구 -> 주 서버에 장애가 발생한 경우에도 복제된 서버를 사용하여 데이터를 제공할 수 있으므로, 장애 복구 및 복구 시간을 단축시킬 수 있다.
- 단점 :
- 노드들 간 데이터 동기화가 보장되지 않아 일관성있는 데이터를 얻지 못할 수 있다.
- Master DB가 다운되면 복구 및 대처가 까다롭다.
- 복제 지연
🔔 HAVING과 WHERE의 차이를 설명해주세요.
- having은 그룹화 또는 집계가 발생한 후 필터링하는데 사용되고,
- where은 그룹화 또는 집계가 발생하기 전에 필터링하는데 사용됩니다.
🔔 JOIN에서 ON과 WHERE의 차이를 설명해주세요.
- ON 이 WHERE 보다 먼저 실행되어 JOIN 을 하기 전에 필터링을 하고
(=ON 조건으로 필터링이 된 레코들간 JOIN이 이뤄진다) - WHERE은 JOIN 을 한 후에 필터링을 합니다. (=JOIN을 한 결과에서 WHERE 조건절로 필터링이 이뤄진다)
🔔 char / varchar / varchar2 차이를 설명해주세요.
- CHAR 타입은 최대길이 2000byte를 가지는 고정길이 문자열 데이터 타입
- VARCHAR2와 VARCHAR는 최대길이 4000byte를 가지는 가변길이 문자열 데이터 타입
- VARCHAR2와 VARCHAR의 차이는 없다.
다만 varchar는 나중에 다른 방식의 데이터 타입으로 변경될 예정이라고 하니 VARCHAR2를 사용하는 게 옳다.
🔔 oralce / mysql 차이를 설명해주세요.
오라클 | MYSQL | |
구조적 차이 | DB 서버가 통합된 하나의 스토리지를 공유하는 방식 | DB 서버마다 독립적인 스토리지를 할당하는 방식 |
확장성의 차이 | 별도의 DBMS을 설치해 사용할 수 없음 | 별도의 DBMS을 설치해 사용할 수 있음 |
메모리 사용율의 차이 | 메모리 사용율이 커서 최소 수백MB 이상이 되어야 설치 가능함 |
메모리 사용율이 낮아서 1MB 환경에서도 설치가 가능함 |
힌트 방식 | 힌트(지시구문)에 문법적 오류가 있으면 힌트를 무시하고 쿼리를 수행한다 |
힌트에 문법적 오류가 있으면 오류를 발생시킨다 |
🔔 인덱스를 매 필드마다 설정하는 것이 좋을까요
- 먼저 인덱스는 두 번 탐색을 강요합니다. 인덱스 리스트, 그 다음 컬렉션 이렇게 두 번을 탐색하기 때문이며 읽기 관련 비용이 더 들게 됩니다. 그렇기 때문에 매 필드마다 설정하는 것은 고찰해봐야 합니다.
- 또한 테이블이 수정되면 인덱스도 수정되어야 합니다. 책의 본문이 수정되면 목차나 찾아보기도 수정해야 하듯이 말이죠. 그리고 인덱스를 수정하는 것은 a = 1을 a = 2 처럼 값만 수정하는 것보다 쉽지도 않습니다.
B-트리 구조를 사용하기 때문에 트리의 높이를 균형 있게 조절하는 비용도 들고 데이터를 분산시켜서 효율적으로 조회할 수 있도록 구축하는 비용도 듭니다. - 컬렉션에서 가져와야 하는 양이 많을 수록 인덱스를 사용하는 것은 비효율적입니다.
🔔 1.1 MongoDB의 특징은 무엇인가요
- NoSQL로 사용할 수 있는 DB이며 3.2버전 이상부터는 와이어드타이거 엔진을 쓰며 읽기, 쓰기 기능을 향상시켰습니다.
- aggregate 등이 되며 document를 만들 때 12바이트의 유니크한 아이디가 생성되는 것이 특징입니다.
🔔 1.2 MongoDB는 ObjectID라는 기본키가 주어지는 것이 특징이죠
그렇다면 이 아이디는 몇 바이트로 이루어져 있고, 어떻게 구성되어 있나요
- 12바이트의 유니크한 아이디이며 4바이트의 타임 값, 5바이트의 랜덤 값, 3바이트의 랜덤 값으로부터 증가되는 카운트 값으로 구성되어 있습니다.
🔔 1.3 MongoDB로 리플리카셋을 구축한다고 했을 때, 서버가 몇 대 이상 필요한가요
- MongoDB에서 리플리카셋을 구축할 때 보통 세 개 이상의 서버로 하는 것이 일반적입니다. 한 개의 마스터 노드, 두 개의 세컨더리 노드로 쓰니까요. 이때 서버 개수가 부족할 때 서버 1대를 2대처럼 만드는 것이 있는데, 이는 좋지 않습니다. 왜냐하면 MongoDB의 메모리 버퍼 풀 같은 경우 서버 내의 메모리 50%를 차지하기 때문에 2대로 만들면 부하가 발생했을 때 대응을 못할 확률이 높기 때문입니다
- 만약 2대의 서버와 스펙이 낮은 서버 1대가 있다면 아비터 노드도 고려해볼 만합니다. 아비터는 별도로 사용자의 데이터를 보관하거나 처리하지 않아 높은 사양의 하드웨어를 필요로 하지 않기 때문에 비용이 낮습니다. 스펙이 낮은 서버 하나를 아비터 노드로 만들고 이를 통해 프라이머리 선출에 참여하는 용도로만 쓰면 됩니다.
🔔 2.1 ESM과 CJS 모듈 방법에 대해 설명해주세요
- ESM은 ECMA script 모듈 방식이자 ES6 모듈 방식이라고도 합니다. 이는 import와 export 키워드를 통해 모듈을 가져오거나 내보내는 방식입니다.
- CJS는 CommonJS 방식이며, require와 exports 키워드를 통해 모듈을 가져오거나 내보내는 방식을 의미합니다.
참고
https://dev-coco.tistory.com/164 [슬기로운 개발생활:티스토리]
'취준 > 면접' 카테고리의 다른 글
[면접 준비] - 벡엔드 (0) | 2024.05.20 |
---|---|
[면접 준비] - 운영체제 (0) | 2024.05.20 |
[면접 준비] - 네트워크 (0) | 2024.05.20 |
[면접 준비] - 자료구조 (0) | 2024.05.20 |
[면접 준비] - 자바 (0) | 2024.05.20 |