본문 바로가기

⚡️CS자문자답!⚡️

[1주에 1번 자문자답] VLDB 기술, 힙, 인터럽트, 추상클래스 인터페이스, 서블릿

✋🏻 데이터베이스 복제에 대해 설명

데이터베이스를 마스터와 슬레이브로 나눠 마스터의 내용을 슬레이브에 복제합니다. 동일한 데이터베이스의 내용을 가지므로 조회에 대한 부하를 분산시킬 수 있습니다. 

하지만, 생성, 수정, 삭제 요청 시에는 마스터가 이를 받아 바이너리로그를 생성하여 슬레이브로 넘깁니다.

 

✋🏻 데이터베이스 파티셔닝이 무엇이고 장/단점이 무엇인가요?

테이블을 파티션이라는 더 작은 단위로 나누어 관리하는 기법입니다. DB에 저장하는 데이터가 커지면 성능저하 문제가 발생합니다.

이때 인덱스를 달아도 B-Tree depth가 깊어져 비교회수가 증가하기 때문에 성능 향상에 한계가 있습니다.

그렇기 때문에 테이블을 더 작은 단위로 분할하면 필요한 파티션만 접근하기 때문에 성능 향상의 효과를 볼수 있습니다.

 

단점으로는 테이블 간 조인 비용이 증가하는 점이 있습니다.

 

✋🏻 파티셔닝과 샤딩의 차이는 무엇인가요?

샤딩은 여러 개의 데이터베이스에 나눠서 데이터를 저장하는 기법입니다. 수평 파티셔닝이라고도 부릅니다.

파티셔닝과 다른 점은 파티셔닝은 하나의 데이터베이스 안에서 나누어 관리하는 것을 지칭합니다.

 

또한, 파티셔닝은 많이 쪼갤수록 계속해서 성능이 좋아지지 않지만 샤딩은 계속해서 쓰기 성능이 좋아질 수 있습니다. (샤드 별 분산 저장 속도가 빨리지므로)

✋🏻 힙 정렬에 대해 설명해주세요.

'힙'은 완전이진트리의 일종으로 최댓값과 최솟값을 빠르게 찾기위해 만들어진 자료구조입니다.

또한 힙은 부모 노드의 키 값이 자식 노드의 키 값보다 항상 큰 이진 트리이며 반정렬 상태를 유지합니다. (최대 힙 기준)

 

시간 복잡도는 O(nlogn)이며 전체 자료 정렬이 아닌 최대,최소값이 필요할 때 사용합니다.

 

✋🏻 인터럽트에 대해 설명해주세요.

프로그램 실행 중 CPU의 현재 처리를 중단한 후 다른 동작을 수행하도록 요구하는 기능입니다.

인터럽트에 걸리면 현재 수행중인 작업의 정보를 저장한 후 "인터럽트 벡터 테이블"을 참고해 "인터럽트 서비스 루틴"을 수행합니다.

인터럽트 처리를 마치면 이전에 수행하던 작업을 다시 진행합니다.

 

✋🏻 폴링과 인터럽트의 차이

폴링은 감시 대상을 주기적으로 체크하여 상황이 발생하면 처리 루틴을 실행하는 것이고

인터럽트는 시그널을 보내 해당 상황을 바로 처리하도록 요청합니다. 

 

✋🏻 인터럽트 발생 시 또 다른 인터럽트가 발생하면 어떻게 해야 하나요?

1. Sequential interrupt processing

첫번째 방법은 CPU가 "인터럽트 서비스 루틴"을 처리하는 중에 새로운 인터럽트가 들어오더라도 수행중인 루틴이 끝날 때 까지 새로운 인터럽트 루틴을 처리하지 않는 것입니다.

 

2. Nested interrupt processing

두번째 방법은 인터럽트 간 우선순위를 정해 낮은 인터럽트를 처리하는 도중에 더 높은 인터럽트가 발생한다면, 현재 인터럽트를 잠시 멈추고 새로운 인터럽트를 먼저 처리하는 것입니다.

 

✋🏻 인터페이스와 추상클래스의 정의와 차이에 대해 설명해주세요.

추상클래스는 인터페이스와 다르게 일반 변수와 일반메서드를 가질수 있습니다. 둘 다 인스턴스화가 불가능합니다.

 

추상클래스는 같은 종류나 행동들을 구현할 게 많고 계층구조를 표현할 때 효과적입니다. 또한 아직 구현하지 않아도 되는 메서드를 내버려 둘 수 있습니다.

 

인터페이스는 인터페이스를 구현하는 클래스가 모든 메서드를 구현해야만 합니다. 그렇기 때문에 함수의 껍데기만으로 그 함수의 구현을 강제할 수 있습니다. 이는 구현 객체들의 동일한 동작을 보장합니다. 

이를 통해 인터페이스의 메서드 형태 공유로 동시 개발이 가능해져 개발 시간을 단축할 수 있습니다. 또한 변경 대처에도 유연합니다.

 

✋🏻 서블릿과 JSP에 대해 설명해주세요.

서블릿

서블릿은 클라이언트의 요청을 처리하고 그 결과를 반환하는 자바 웹 프로그래밍 기술 입니다.

서블릿은 웹서버가 동적인 페이지를 생성할 수 있도록 도와주는 어플리케이션입니다.

 

서블릿 컨테이너는 서블릿의 생명주기를 관리하고 요청에 따른 쓰레드를 생성해줍니다. 또한, 요청을 받고 응답을 보낼 수 있게 웹 서버와 소켓을 만들어 통신을 합니다. 

ex) 톰캣 (웹 서버와 연동하여 실행 가능한 자바 환경을 제공하여 JSP와 자바 서블릿이 실행할 수 있는 환경을 제공한다)

JSP

HTML 코드에 자바 코드를 넣어 동적 웹페이지를 생성하는 웹 어플리케이션 도구입니다.

웹 프로그래머는 소스코드 수정 시 디자인 부분을 제외하고 오직 자바 소스코드만 수정하면 되기 때문에 효율성을 높일 수 있습니다.