목록CS 지식/면접준비 (78)
개발놀이터
Q. Elasticsearch에 대해서 설명해주세요 A. Elasticsearch는 자바로 만들어진 오픈소스 검색엔진으로서 독단적으로 사용되지는 않고 ELK 스택이라고하는 기술로 묶어서 사용됩니다. Elasticsearch는 데이터의 검색을 담당하고 Logstash는 데이터 집계를 담당하고 Kibana는 데이터 시각화를 담당합니다.
Q. CAP 정리에 대해서 설명해주세요. A. CAP 정리는 분산시스템에서 Consistency, Availability, Partition tolerance 이 세가지 속성을 모두 만족시키는 데이터베이스는 없다는 정리입니다. Consistency는 같은 시간에 클라이언트가 같은 데이터를 봐야 한다는 정합성이고, Availability는 모든 노드가 요청에의한 응답을 할 수 있어야 한다는 가용성이고, Partition tolerance는 장애 상황에서도 애플이케이션이 작동해야 한다는 장애 허용입니다. Q. CAP정리에서 RDBMS는 어디에 속하나요? (충분히 물어볼 수 있음) A. RDBMS는 분산시스템이 아니고, CAP정리는 분산시스템을 기반으로한 정리이기 때문에 RDBMS를 CAP정리로 설명하는 것은..
Q. TCP와 UDP의 차이점에 대해서 설명해주세요 A. TCP는 연결 지향형 프로토콜이고 UDP는 데이터를 데이터그램 단위로 전송하는 프로토콜입니다. TCP는 연결형 서비스로 가상 회선 방식을 제공합니다. 따라서 전송이 양방향으로 동시에 일어날 수 있는 전이중 방식과 각 연결이 정확히 2개의 종단점을 가지고 있는 점대점 방식을 사용합니다. 또한 흐름 제어와 혼잡 제어와 같은 특징때문에 높은 신뢰성을 보장합니다. UDP는 데이터 수신 여부를 확인하지 않아 신뢰성이 낮지만 TCP보다 속도가 빠르고 1:1 & 1:N & N:N 통신이 가능합니다. 결론적으로 TCP는 파일전송과 같이 신뢰성이 중요한 서비스에 사용되고 UDP는 스트리밍과 같이 연속성이 더 중요한 서비스에서 사용됩니다. https://coding..
Q. www.google.com 을 검색하면 어떻게 되나요? A. 웹 브라우저는 캐싱된 DNS 기록들을 통해 해당 도메인주소와 대응하는 IP주소를 확인합니다. 이후 웹브라우저가 HTTP를 사용하여 DNS에게 입력된 도메인 주소를 요청합니다. DNS는 웹브라우저에게 찾는 사이트의 IP주소를 응답합니다. 이후 웹브라우저가 웹서버에게 IP주소를 이용하여 html문서를 요청합니다. 이후 WAS와 데이터베이스에서 우선 웹페이지 작업을 처리합니다. 해당 작업처리 결과를 웹서버로 전송합니다. 이후 웹서버는 웹브라우저에게 html 문서결과를 응답합니다. 웹브라우저는 화면에 웹페이지 내용물을 출력합니다. https://coding-review.tistory.com/237 www.google.com을 검색하면 일어나는 일..
Q. 데이터베이스 정규화란 무엇인가요? A. 정규화란 데이터의 중복방지, 무결성을 충족시키기 위해 데이터베이스를 설계하는 것입니다. 정규화에는 제 1 정규화, 제 2 정규화, 제 3 정규화, BCNF 정규화가 있습니다. 제 1 정규화는 테이블의 컬럼이 하나의 값을 갖도록 테이블을 분해하는 것입니다. 제 2 정규화는 제 1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것입니다. 완전 함수 종속이라는 것은 기본키의 부분집합이 결정자가 되어선 안된다는 것을 의미합니다. 제 3 정규화는 제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것입니다. 여기서 이행적 종속은 A -> B, B -> C 가 성립할때 A -> C 가 성립되는 것을 의미합니다. B..
Q. 트랜잭션의 격리수준에 대해 설명해주세요 A. 여러 트랜잭션이 처리될 때, 특정 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것입니다. 격리 수준으로는 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE 이렇게 네가지가 있습니다. Q. 각각에 대해 설명해주세요 (꼬리질문) A. READ UNCOMMITTED는 다른 트랜잭션에서 커밋되지 않은 내용도 참조할 수 있습니다. READ UNCOMMITTED에서는 한쪽에서 커밋을 하지 않고 롤백을 하더라도 다른 트랜잭션에서 이를 참조할 수 있기 때문에 가장 안전성이 낮은 격리수준으로 사용하지 않는 격리수준입니다. READ COMMITTED는 커밋된 내용만 참조할 ..
Q. 트랜잭션에 대해서 설명해주세요 A. 트랜잭션이란 데이터베이스의 상태를 변화시키는 논리적인 작업 단위라고 할 수 있으며, 트랜잭션에는 여러개의 연산이 수행될 수 있습니다. Q. 트랜잭션의 ACID에 대해서 설명해주세요 A. ACID는 각각 원자성, 일관성, 고립성, 내구성의 약자입니다. 각각의 뜻으로는 원자성은 트랜잭션의 모든 연산이 완벽히 수행되어야 하며, 한 연산이라도 실패하면 트랜잭션의 전체 연산은 실패하게 된다는 것입니다. 일관성은 트랜잭션이 진행되는 동안 데이터베이스가 변경되더라도 업데이트된 데이터베이스로 트랜잭션이 진행되는 것이 아니라 기존에 트랜잭션을 진행하던 데이터베이스로 진행해야 한다는 것입니다. 고립성은 서로 다른 트랜잭션이 동시에 실행될 경우 다른 트랜잭션에 의해 영향을 받지 않고..
Q. 데이터베이스에서 인덱스를 사용하는 이유는 무엇인가요? A. 데이터베이스에서 인덱스를 사용하는 이유는 검색 성능을 향상시키기 위함입니다. 하지만 검색 성능을 실질적으로 향상시키기 위해서는 해당 쿼리가 인덱스를 사용하는지, 카디널리티, Selectivity 같은 요소들이 고려된 인덱스인지 확인해야 합니다. Q. 데이터베이스에서 인덱스를 사용하면 좋은점과 나쁜점은 무엇인가요? A. 인덱스를 사용했을 때 장점으로는 빠른 검색 성능을 들 수 있습니다. 단점으로는 인덱스를 구성하는 비용 즉, INSERT, UPDATE, DELETE 연산시에 인덱스를 형성하기 위한 추가적인 연산이 수행됩니다. 또한, 인덱스를 관리하기 위해 데이터베이스의 10퍼센트에 해당하는 저장공간이 필요합니다. https://coding-r..
Q. N + 1 문제는 무엇이고 이것이 발생하는 이유와 해결 방법에 대해서 설명해주세요. A. 하위 엔티티들이 존재하는 경우 한 쿼리에서 모두 가져오는 것이 아닌, 필요한 곳에서 각각 쿼리가 발생하는 경우를 말합니다. N + 1 문제는 즉시로딩과 지연로딩 둘 다 발생할 수 있는데 즉시 로딩에서 발생하는 이유는 전체 조회를 했을 때, 영속성 컨텍스트가 아닌 데이터베이스에서 직접 데이터를 조회한 다음 즉시로딩 전략이 동작하기 때문입니다. 지연 로딩에서 발생하는 이유는 지연로딩 전략을 사용한 하위 엔티티를 로드할 때 해당 엔티티를 조회하기 위한 추가적인 쿼리가 실행되어 발생합니다. 해결 방법으로는 fetch join이라고 불리는 JPQL의 join fetch를 사용하는 방법이 있으며, 또 다른 방법으로는 @E..
Q. JPA를 사용하는 이유에 대해서 설명해주세요. A. JPA를 사용하는 이유는 객체지향 프레임워크이기 때문입니다. JPA를 사용하면 비즈니스 로직이 RDBMS에 의존하는 것이 아니라, 자바 코드로 표현될 수 있기 때문에 생산성이 올라갑니다. 또한, JPA는 JPQL로 SQL을 추상화하기 때문에 RDBMS에 관계없이 동일한 쿼리를 작성해서 같은 동작을 기대할 수 있다는 장점도 가지고 있습니다. 이는 Database Dialect를 지원하기 때문에 가지는 장점입니다. Q. 자바 코드로 표현했을 때 생산성이 높아지는 이유는 무엇인가요? A. 자바 컬렉션에 저장하듯이 JPA에게 저장할 객체를 전달하여 지루하고 반복적인 코드를 개발자가 직접 작성하지 않아도 되며, DDL 문도 자동으로 생성해주기 때문에 데이터..