스터디 질문 정리

Ada·2022년 12월 27일

Jr.Dev Study

목록 보기
3/6

용문님

시간복잡도와 공간복잡도가 무엇인지 설명해주실 수 있을까요?

시간 복잡도는 프로그램이 얼마나 빠르게 실행되는지, 공간 복잡도는 프로그램을 실행 및 완료하는 데 얼마나 많은 저장 공간이 필요한지를 나타내는 알고리즘 계산 복잡도의 척도입니다. 이 둘은 반비례적 경향이 있어 두가지 모두 만족시키기는 어려우며 최근 대용량 시스템이 보편화 되면서 공간 복잡도 보다는 시간 복잡도가 우선적으로 중요시 되고 있습니다. 시간 복잡도의 표기법은 알고리즘 최악의 실행 시간을 표기하는 빅오 표기법이 가장 많이 사용됩니다. 이는 입력 N에 따라 몇 번 실행이 되는지를 계산하는 복잡도 함수입니다.

JPA는 언제 필요하고 언제 필요하지 않은지 설명해주실 수 있을까요?

데이터베이스가 바뀔 가능성이 있는 경우 JPA를 권장합니다. JPA는 추상화한 데이터 접근 계층을 제공하기 때문에 설정 파일에 사용할 데이터베이스를 등록하기만 하면 얼마든 데이터베이스를 변경할 수 있습니다. 그러나 통계 처리 같은 복잡한 쿼리가 필요한 경우에는 JPA 보다는 SQL문이 오히려 나을 수도 있습니다. JPA에서 Native SQL Query를 사용할 수 있지만 특정 데이터베이스에 종속 된다는 문제가 있습니다. 이를 보완하기 위해 JPA에서는 SQL과 유사한 기술인 JPQL을 지원합니다. 그리고 JPA에 대한 이해가 부족해 잘못된 매핑으로 설계하는 경우 N+1 문제로 성능 저하가 발생할 수 있습니다.

보경님

복합 인덱스란 무엇인지 원리를 설명해주실 수 있을까요?

복합 인덱스란 두 개 이상의 컬럼을 합쳐서 인덱스를 만드는 것을 말합니다. 주로 단일 컬럼으로는 나쁜 분포도를 가지지만 여러 개의 컬럼을 합친다면 좋은 분포도를 가지고, Where절에서 AND 조건에 많이 사용되는 컬럼들을 복합 인덱스로 구성합니다. 인덱스는 검색키와 주소의 쌍으로 구분되며 이를 인덱스 엔트리(Index Entry)라 부르는데, 복합인덱스는 검색키 N개와 주소의 쌍이 인덱스 엔트리가 됩니다. 첫 번째 검색키에 대하여 두 번째 검색키를 정렬하는 방식으로 구성되어 필드 순서에 따라 인덱스 효과가 달라집니다. 따라서 카디널리티가 높은 컬럼을 높은 순서대로 결합 인덱스를 생성해야 합니다.

정규화란 무엇이고 대표적인 장점과 단점은 무엇이 있을까요?

정규화란 데이터 중복으로 인한 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하는 과정입니다. 기본 목표는 관련이 없는 함수 종속성은 별개의 릴레이션으로 분리하는 것입니다. 이로 인한 장점은 이상 현상의 발생가능성 저하가 있고, 단점으로는 연산시간이 증가한다는 것이 있습니다. 예외로 조인이 많이 발생하여 성능 저하가 일어나는 테이블이 있을 시, 반정규화를 통하여 연산시간을 단축시키는 사례도 있습니다.

꼬리질문 - 반정규화는 무엇인가요?

유성님

HTTP에 비해 HTTPS가 더 안전한 원리를 설명해주실 수 있을까요?

HTTP란 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜입니다. 이 HTTP에는 3가지 문제가 있습니다. 첫 번째 HTTP 는 평문 통신이기 때문에 도청이 가능하다. 두 번째 통신 상대를 확인하지 않기 때문에 위장이 가능하다. 세 번째 완전성을 증명할 수 없기 때문에 변조가 가능하다. 이 3가지 문제를 해결하기 위해 HTTPS는 SSL(Secure Socket Layer) or TLS(Transport Layer Security)와 같은 프로토콜을 사용하여 공개키/개인키 기반으로 데이터를 암호화하고 있습니다. 데이터는 암호화되어 전송되기 때문에 임의의 사용자가 데이터를 조회하여도 원본의 데이터를 보는 것은 불가능하고, 완정성 또한 증명할 수 있습니다.

or

HTTP는 기본적으로 평문 데이터 전송을 원칙으로 하기 때문에 네트워크에서 신호를 가로채어 내부를 들여다 보면 내용이 노출된다는 위험이 있습니다. 이러한 보안상 문제를 해결해 주는 프로토콜이 HTTPS 입니다. HTTPS는 HTTP Secure의 약자로 기존 HTTP에 암호화나 인증 구조를 더한 것을 말합니다. HTTPS는 인터넷 상에서 정보를 암호화 하는 Secure Socket Layer(SSL) 프로토콜을 이용해 클라이언트와 서버가 데이터를 주고받는 통신 규약이기 때문에 민감한 정보가 도난 당하는 것을 방지해 주는 역할을 합니다.

병범님

동기와 비동기를 비교하여 설명해주실 수 있을까요?

동기는 데이터의 요청과 결과가 한 자리에서 동시에 일어나는것을 말합니다. 사용자가 데이터를 서버에게 요청한다면 그 서버가 데이터 요청에 따른 응답을 사용자에게 다시 리턴해주기 전까지 사용자는 다른 활동을 할 수 없으며 기다려야만합니다. 비동기는 동시에 일어나지 않는다는 의미입니다. 서버에게 데이터를 요청한 후 요청에 따른 응답을 계속 기다리지 않아도되며 다른 외부 활동을 수행하여도되고 서버에게 다른 요청사항을 보내도 상관없습니다.

Spring Security의 구조와 JWT 발급 과정에 대해 설명해주실 수 있을까요?

Spring Security란 Spring 기반의 어플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크 입니다. Spring Security는 '인증'과 '권한'에 대한 부분을 Filter 흐름에 따라 처리 하고 있습니다. Filter는 Dispatcher Servlet으로 가기 전에 적용되므로 가장 먼저 URL 요청을 받지만, Interceptor는 Dispatcher와 Controller 사이에 위치한다는 점에서 적용 시기의 차이가 있습니다. JWT가 발행되면, 발급된 JWT의 구성은 header에는 토큰타입,해시 암호화 알고리즘을 담고 Paylaod는 토큰의 정보를 담 고, Signature에는 시크릿 키를 담습니다. 사용자가 요청에 JWT를 보내면 서버에서 시크릿키 만을 활용해서 JWT 토큰의 유효성을 체크하고, 유효한 토큰이라면 사용자인증을 거칩니다. 이후 토큰의 만료기간을 체크하고, 토큰의 권한을 체크 합니다.

MVC 모델이란 무엇인지 설명해주실 수 있을까요?

MVC는 Model, View, Controller의 약자이며, 각 레이어 간 기능을 구분하는데 중점을 둔 개발 방법론 중 하나입니다.
Model은 데이터 관리 및 비즈니스 로직을 처리하는 부분이며, View는 비즈니스 로직의 처리 결과를 통해 유저 인터페이스가 표현되는 구간입니다.
Controller는 사용자의 요청을 처리하고 Model과 View를 중개하는 역할을 합니다. Model과 View는 서로 연결되어 있지 않기 때문에 Controller가 사이에서 통신 매체가 되어줍니다.

트랜잭션이란 무엇이고 원자성, 일관성, 고립성, 지속성이란 무엇인지 설명해주실 수 있을까요?

트랜잭션이란 데이터베이스의 상태를 변환시키는 하나의 논리적인 작업 단위를 구성하는 연산들의 집합입니다.
원자성이란 영어로 말하면 all or nothing 입니다. 즉, 트랜잭션의 모든 연산들은 정상적으로 수행 완료되거나 아니면 전혀 어떠한 연산도 수행되지 않은 상태를 보장해야 한다는 것을 말합니다.
일관성이란 트랜잭션은 완료 후에도 데이터베이스가 일관된 상태로 유지되어야 한다는 것을 말합니다.
고립성이란 하나의 트랜잭션이 실행하는 도중에 변경한 데이터는 이 트랜잭션이 완료될 때 까지 다른 트랜잭션이 참조하지 못하는 것을 말합니다.
지속성이란 성공적으로 수행 된 트랜잭션은 영원히 반영되어야 하는 것을 말합니다.

profile
백엔드 프로그래머

0개의 댓글