응집도와 결합도에 대해서 설명해 주세요.
·
백엔드 면접
응집도(Cohension)는 모듈에 포함된 내부 요소들이 연관되어 있는 정도를 나타냅니다. 결합도(Coupling)는 의존성의 정도를 나타내며, 다른 모듈에 대해 얼마나 많은 지식을 갖고 있는지를 포함합니다. 응집도와 결합도는 변경과 관련이 깊습니다. 일반적으로 좋은 설계란 높은 응집도와 낮은 결합도를 가진 모듈로 구성된 설계를 의미하는데요, 변경이 발생하는 경우 특정 모듈만 수정되면 응집도가 높다고 판단할 수 있습니다. 반면, 특정 모듈을 변경하는 경우에 다른 모듈도 변경해야 하는 상황에서는 결합도가 높다고 판단할 수 있습니다. 캡슐화의 정도가 응집도와 결합도에 영향을 미치게 됩니다. 캡슐화를 준수하면, 모듈 안의 응집도는 높아지고 모듈 사이의 결합도는 낮아집니다. 따라서 응집도와 결합도를 고려하기 전..
관계형 DB와 비 관계형 DB의 차이점은 무엇인가요?
·
백엔드 면접
관계형 데이터베이스는 고정된 로우와 컬럼으로 구성된 테이블에 데이터를 저장합니다. 그리고 SQL을 사용하여 여러 테이블에 존재하는 데이터와 관계에 따라서 조인하여 합칠 수도 있습니다. 관계형 데이터베이스는 데이터를 중복 없이 한 번만 저장하고, 데이터 무결성을 보장합니다. 또한 일반적으로 스케일 업을 사용하여 확장합니다.하지만 관계형 데이터베이스는 스키마를 유연하게 바꾸기 어렵다는 한계가 있습니다. 그리고 관계가 존재하기 때문에 비즈니스 요구사항이 복잡해짐에 따라 쿼리도 복잡해지게 됩니다. 반면 NoSQL이라고도 불리는 비 관계형 데이터베이스는 정해진 스키마가 존재하지 않아 자유롭게 데이터를 저장하고 조회할 수 있습니다. document, graph, key-value 등 다양한 유형이 존재합니다. 비 ..
HTTP/1.1과 HTTP/2.0에 대해서 설명해 주세요.
·
백엔드 면접
HTTP/1.0의 경우 매 요청과 응답마다 TCP 커넥션을 생성해서 사용했기 때문에 오버헤드가 발생했습니다. HTTP/1.1은 이러한 문제를 지속 커넥션이라는 지정한 타임아웃만큼 커넥션을 종료하지 않는 방식으로 해결합니다. 또한 특정 요청에 대한 응답이 수신되기 전에 다음 요청을 보낼 수 있는 파이프라이닝 기능으로 요청의 응답 지연을 감소합니다.HTTP/1.1은 1.0 버전에 비해 많이 개선되었지만, Head Of Line Blocking 문제가 존재했습니다. 만약 3개의 요청을 파이프라인을 통해 전송했을 때, 서버는 모든 요청을 순서에 맞춰서 응답해야 합니다. 이때 첫 번째 요청에 대한 응답이 너무 오래 걸리면 나머지 요청은 첫 번째 요청의 처리를 기다려야 합니다. 또한 1.1 버전은 매 요청마다 동일..
프로세스보다 스레드의 컨텍스트 스위칭이 더 빠른 이유는 무엇인가요?
·
백엔드 면접
같은 프로세스에 속한 스레드들 간에 컨텍스트 스위칭은 같은 프로세스에 속하기 때문에 메모리 영역을 공유합니다. 그래서 스위칭이 발생해도 메모리와 관련한 추가적인 작업이 발생하지 않습니다. 하지만 다른 프로세스에 속한 스레드들 간에 컨텍스트 스위칭의 경우 프로세스 간에 메모리 추소 체계가 다르기 때문에 메모리 주소 관련 처리를 추가적으로 수행해야 합니다. MMU가 새로운 프로세스의 주소 체계를 바라보도록 수정하고, TLB라는 페이지 테이블의 캐시 메모리를 비워줘야 합니다. 만약 TLB 캐시를 비워주지 않는 경우 이전에 작업했던 프로세스의 주소에 접근할 가능성이 있기 때문에 반드시 수행해야 합니다. 또한 프로세스 컨텍스트 스위칭이 일어날 경우, 다른 프로세스의 실행으로 인해 CPU가 새로운 명령어와 데이터를..
스케일 아웃과 스케일 업의 차이점을 설명해 주세요.
·
백엔드 면접
스케일 업은 기존의 서버를 더 높은 사양으로 업그레이드하는 것을 의미합니다. 예를 들어 AWS EC2 t2.micro에서 t2.small로 업그레이드하는 것입니다. 스케일 업은 상대적으로 간단하게 서버의 성능을 향상시킬 수 있습니다. 하지만 성능 향상에 한계가 있고, 성능 향상에 따른 비용 부담이 크며 서버 한 대가 부담하는 양이 많아서 서버에 문제가 생기면 큰 타격을 입게 됩니다. 또한 향후 사용량을 추정하여 미리 고사양의 서버를 확보하는 경우, 실제 필요한 서버의 사양보다 과한 사양의 장비를 확보할 수 있기 때문에 비용적인 손실이 있을 수 있습니다. 스케일 아웃은 비슷한 사양의 장비를 추가하여 수평으로 확장하는 방식입니다. 서버로 들어오는 많은 요청을 비슷한 사양의 서버 n대로 분산시켜 성능을 향상시..
ACID에 대해서 설명해 주세요.
·
백엔드 면접
ACID는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 속성을 의미합니다. 원자성(Atomicity)은 트랜잭션 내부 연산들이 부분적으로 실행되고 중단되지 않는 것을 보장합니다. 즉 트랜잭션은 전체 성공 또는 전체 실패 중 한 가지만 수행합니다. 일관성(Consistency)은 트랜잭션이 커밋되면 일관성 있는 데이터베이스 상태로 유지되는 것을 보장합니다. 제약조건과 같이 데이터베이스에 정의된 규칙을 특정 트랜잭션이 위반하는 경우에는 해당 트랜잭션은 롤백되어야 합니다. 격리성(Isolation)은 동시에 실행되는 여러 트랜잭션이 서로 독립적임을 보장합니다. 즉 트랜잭션이 수행될 때 다른 트랜잭션이 사이에 끼어들지 못하도록 보장합니다. 적절한 트랜잭션 격리 수준을 사용하여 높은 동시성 또는..
REST란 무엇인가요?
·
백엔드 면접
REST(Representational State Transfer)란 자원의 표현을 이용하여 상태를 주고받는 것을 의미합니다. HTTP URI를 통해 자원을 명시하고, HTTP Method를 통해 해당 자원에 대한 CRUD 연산을 적용합니다. 또한 최근에는 일반적으로 자원의 상태를 나타내기 위해 JSON 포맷을 사용합니다.REST의 장단점은 무엇인가요?REST는 서버와 클라이언트의 역할을 명확하게 분리해 주며, HTTP 프로토콜을 따르는 모든 플랫폼에서 사용할 수 있습니다. 또한 Curl, Postman 등을 사용하여 간단하게 테스트할 수 있으며, REST API가 의도하는 바를 명확하게 파악할 수 있습니다.하지만 단점으로는 특정 표준이 존재하지 않고, HTTP Method가 제한적이어서 HTTP Met..
캐싱 전략에 대해서 설명해주세요.
·
백엔드 면접
캐싱 전략은 크게 읽기 전략과 쓰기 전략으로 나눌 수 있습니다. 읽기 전략에는 Look Aside(Cache Aside), Read Through 전략이 있고, 쓰기 전략에는 Write Through, Write Around, Write Back(Write Behind) 전략이 있습니다.읽기 전략Look Aside(Cache Aside) 방식은 캐시는 독립적으로 존재하고, 애플리케이션이 캐시와 데이터베이스 모두 직접 통신합니다. 캐시와 데이터베이스 사이에는 직접적인 연결이 없으며, 모든 캐시 및 데이터베이스 작업은 애플리케이션에서 관리합니다. 동작 방식에 대해서 설명하자면, 1. 애플리케이션이 먼저 캐시를 확인합니다.2. 캐시 히트가 발생하면, 해당 데이터를 읽어서 바로 클라이언트에 반환합니다.3. 캐시..
동시성과 병렬성에 대해서 설명해 주세요.
·
백엔드 면접
동시성(Concurrency)이란 논리적으로 동시에 실행되는 것처럼 보이게 만드는 개념입니다. 단일 코어를 기준으로 시간 분할을 통해 여러 스레드를 번갈아 가며 작업을 수행함으로써, 마치 동시에 여러 작업이 처리되는 것처럼 보이게 합니다.사용자의 입력을 기다리거나 네트워크 요청, 파일 입출력 등의 I/O 작업 시에는 CPU가 유휴 상태로 대기하게 됩니다. 이때 CPU가 아무 일도 하지 않고 대기하는 대신, 컨텍스트 스위칭을 통해 다른 스레드의 작업을 처리할 수 있습니다. 덕분에 서버는 여러 클라이언트의 요청을 동시에 처리할 수 있어 효율적입니다. 다만 여러 스레드를 사용하면서 Deadlock, Race Condition, Starvation 등의 동시성 문제가 발생할 수 있기 때문에 동시성 환경을 고려해..
로드 밸런싱에 대해서 설명해 주세요.
·
백엔드 면접
로드 밸런싱은 트래픽의 고른 분배를 위해 사용되는 기술입니다. 로드 밸런싱은 로드 밸런서에 의해 수행되며, 일반적으로 클라이언트와 다중화된 서버 사이에 위치하여 클라이언트는 로드 밸런서에 요청을 보내고, 로드 밸런서는 해당 요청을 각 서버에 균등하게 분배합니다. 로드 밸런싱을 통해 애플리케이션의 가용성, 확장성, 보안 및 성능을 확보할 수 있습니다.로드 밸런싱 알고리즘은 무엇인가요?부하가 균등하게 분산되도록 부하 대상, 즉 서버를 선택하는 방법을 로드 밸런싱 알고리즘이라고 합니다.  라운드 로빈 방식은 모든 요청이 순서대로 처리되는 방식입니다. 예를 들어 A, B, C 서버 3대가 존재하면 요청은 ABCABC 순서대로 전달됩니다. 모든 서버의 처리 능력이 동등하고, 요청의 고른 분산이 중요한 경우 고려할..