취업 관련 준비

기술 면접 대비 예상 질문 모음 - 10/23 ~ 10/27

iksadnorth 2023. 10. 27. 10:22

21. RDBMS의 정규화에 대해 설명해주세요.

my)
데이터를 사용할 때, 데이터가 유일하지 않다면
수정, 삭제, 삽입 시 모든 데이터에 일괄 적용되지 않을 수 있습니다.
이것을 DB 이상 현상이라고 부르며 삽입 이상, 수정 이상, 삭제 이상가 이에 해당 합니다.
이런 이상 현상을 없애기 위해선 정규화라는 작업을 수행해야 하는데 주 목적은
데이터의 중복성을 향상시키는 것이라 볼 수 있습니다
정규화는 정말 다양한 것이 존재하지만 3가지의 정규화를 말씀드리겠습니다.
제 1 정규화는 List 형식의 데이터를 분해해 여러 개의 Tuple로 만드는 과정입니다.
예를 들어, 게시글 테이블의 속성 중 댓글들이라는 속성이 있다면
해당 열에는 댓글들의 목록이 할당될 것입니다. 이 때, 게시글 테이블과 댓글 테이블을 분리하고
댓글 테이블에 소속 게시글이라는 속성을 만들어서 List를 Tuple로 분해합니다.
제 2 정규화는 Primary Key에 대한 부분적 종속성을 제거하는 것 입니다.
예를 들어 댓글 테이블의 복합키를 ['작성자 ID', '게시글 ID', '게시일자']로 설정했다고 하고
속성 중에 '게시글명'이 있다고 가정해본다면 게시글명은 복합키 전체에 대한 종속성이 아니라
'게시글 ID'에 대한 종속성만 가지고 있기에 해당 속성을 게시글 테이블로 옮겨줘야 합니다.
제 3 정규화는 PK가 아닌 속성에 대한 종속성을 제거하는 것입니다.
예를 들어 게시글 테이블에 복합키가 ['게시글 ID']로 이뤄져 있고 속성 중 [... '게시글 작성자명', '게시글 작성자 ID' ...]가
존재할 때, '게시글 작성자명'은 '게시글 작성자 ID'에 종속되어 있으므로 작성자 테이블을 따로 만들어
해당 테이블에서 관리하게 만듭니다.

 

22. Primary Key, Foreign Key에 대해 설명해주세요.

my)
Primary Key는 기본키라고도 불리우며, 1개의 테이블의 여러 Tuple에서 하나의 Tuple을 유일하게 식별할 수 있는
값이라고 볼 수 있습니다. 특징은 Null 값을 가지면 안되며 Unique해야 합니다.

Foreign Key는 참조키라고도 불리우며, 정규화를 하는 과정 중 다른 테이블의 관계를 표현하기 위해
해당 테이블의 키값을 속성으로 사용할 때, 해당 값을 참조키라고 합니다.

 

23. HTTP 메서드에 대해 설명해주세요.

my)
HTTP 프로토콜로 자원을 주고 받을 때, 서버의 특정 자원을 어떤 방식으로 처리하겠다는
표현을 위해 HTTP Method를 활용합니다.
HTTP의 URI는 주로 서버의 자원 위치를 의미하며 해당 자원을 생성, 조회, 수정, 삭제를 할 때,
각각 POST, GET, PUT, DELETE라는 Method를 사용하곤 합니다.
총 9개의 Method가 있지만 주로 사용하는 Method는 POST, GET, PUT, PATCH, DELETE 총 5개가 있습니다.
POST는 주로 자원 생성 시 사용하는 Method로서 Body에 Json, Text, XML 등의 정보를 담아서 보냅니다.
GET은 주로 자원 조회 시 사용하는 Method로서 Query String을 이용해서 정보를 건네 줍니다.
GET의 경우, 캐싱된다는 특징이 있습니다.
PUT은 주로 자원 수정 시 사용하는 Method로서 Body에 수정에 적용될 정보를 담아서 보냅니다.
PATCH는 주로 자원 일부 수정 시 사용하는 Method로서 PUT과는 달리 수정하고 싶은 데이터만
전달하고 서버는 전달된 자원만 수정합니다.
DELETE는 주로 자원 삭제를 위하 사용하는 Method로서 Body에 데이터를 전달할 수 없습니다.

 

24. CORS(Cross Origin Resource Sharing)에 대해 설명해주세요.

my)
서버와 다른 Origin의 웹 페이지에서 해당 서버로 리소스 요구를 할 수 없도록 
브라우저 차원에서 수행하는 보안 장치를 Same-Origin Policy라고 합니다.
이는 피싱 사이트를 통해 해킹을 막기 위한 장치로서 신원 확인이 어려운 웹 페이지에서의
리소스 이용을 제한합니다. 보안적으로는 우수한 장치일 수 있지만
만약 외부 API를 이용하는 등 다른 서버와의 공조가 이뤄져야 할 때, 이 장치는 걸림돌에 불과하게 됩니다.
때문에 CORS라는 완화 정책을 만들었고 이를 통해 서버와 다른 Origin이어도
미리 지정해놓은 Origin이라면 리소스 이용을 허용할 수 있습니다.
총 3가지의 방법이 있지만 그 중 대표적인 방법인 방법이라 볼 수 있는 Prefilght 방법에 대해 설명해보겠습니다.
Prefilght란 리소스 사용을 위한 요청 이전에 보내는 확인 요청으로서 서버를 향해
OPTION 메서드로 CORS 확인 요청을 보냅니다. 해당 요청을 받은 서버는 브라우저에서 보낸 요청 중
사용하고 싶은 리소스와 Method 등등을 보고 그에 따른 허용 Origin을 응답으로 실어 보냅니다.
응답을 받은 브라우저는 허용 Origin을 보고 리소스 요청을 수행할지 하지 않을지를 결정합니다.

 

25. 브라우저의 작동방식에 대해서 설명해주세요.

my)
브라우저는 HTML, CSS, JavaScript 를 해석해서 화면에 보여주는 프로그램입니다.
브라우저에는 크롬, 파이어폭스, 엣지 등등이 존재합니다.
브라우저는 크게 UI, 브라우저 엔진, 렌더링 엔진, 자료 저장소로 구분지을 수 있으며
이 중 렌더링 엔진이 HTML, CSS, JS를 렌더링하는 역할을 맡고 있습니다.
우선, 서버로부터 HTML, CSS, JS를 응답으로 받습니다.
그러면 HTML 파서가 HTML을 읽고 DOM을 만듭니다.
동시에 CSS 파서가 CSS를 읽고 CSSOM을 만듭니다.
DOM과 CSSOM이 완성되면 이 2가지를 합쳐서 '렌더 트리'를 만듭니다.
완성된 렌더 트리를 이용해서 각 객체들의 위치와 크기를 결정합니다.
레이아웃이 결정되면 UI 백엔드가 동작해서 화면의 픽셀로서 표현합니다.

 

26. 쿠키, 세션의 개념과 차이를 설명해보세요

my)
쿠키는 브라우저 측에서 정보를 저장할 수 있는 데이터 조각입니다.
세션은 서버 측에서 클라이언트 정보를 임시적으로 저장할 수 있는 저장소입니다.
인증, 인가 과정 중 쿠키-세션을 활용하기도 하는데 인증 과정을 마치게 되면
서버는 세션에 해당 유저의 로그인 기록을 저장하고 해당 기록의 Key 값을
응답으로 전달합니다. 이 때, 세션 Key 값을 쿠키로 전달하게 되고 브라우저는 
전달받은 쿠키값을 브라우저에 저장하고 요청을 보낼 때마다
자동으로 요청에 쿠키값을 동봉해서 전달하게 됩니다.
쿠키는 세션과 달리 브라우저의 저장소에 저장된다는 특징이 있으며
때문에 보안 상 노출되면 안되는 개인 정보를 이곳에 보관하면 안됩니다.
세션은 쿠키와 달리 서버에 저장되며 어떠한 정보든지 저장해도 됩니다.
하지만 너무 많은 데이터가 저장되면 서버에 부하를 줄 수 있습니다.

 

27. TCP/UDP에 대해서 설명해주세요.

my)
TCP와 UDP는 OSI 4계층에 해당하는 프로토콜들입니다.
HTTP 프로토콜의 기저 계층으로서 연결 신뢰성에 대한 처리 방법에 관한 계층입니다.
TCP는 연결 지향 방식으로 패킷을 전송합니다.
실제 패킷을 전송할 때, 가상회선 패킷 교환 방식을 사용해서 미리 경로를 확정짓고 
모든 패킷을 순차적으로 전송합니다. 이것은 패킷 순서에 대한 보장이 되어 있다는 장점이 있지만
미리 설정된 경로 내에 장애가 생기면 다시 설정해야 한다는 단점이 있습니다.
뿐만 아니라 3 way handshake로 인해 서버가 요청을 처리할 수 있을지 여부를 확인하는 절차가 있기에
전송 속도는 확실히 비교적 느린 편입니다.
UDP는 TCP와 다르게 미리 경로를 설정해놓지 않아서 패킷들이 각각 다른 경로로 움직일 
경우도 배제하지 못합니다. 또한 패킷이 장애에 의해 전달되지 않아도 별다른 재요청을 보내지 않기 때문에
모든 패킷을 온전하게 받지 못한다는 단점이 있습니다. 하지만 Streaming 서비스와 같이 몇 픽셀이 
전달되지 않아도 괜찮고 오히려 빠른 전송이 필요한 서비스에서는 이러한 전송방식이 선호되기도 합니다.

 

28. http, https 차이점에 대해 설명해주세요

my)
HTTPS는 SSL/TLS 위에서 작동하는 HTTP라고 설명할 수 있을 것 같습니다.
SSL은 전송되는 패킷을 암호화해서 전송하는 방식으로서 중간에 패킷 탈취가 일어나도 
해당 패킷을 해독할 수 없도록 합니다. 이러한 보안을 이용해서 middle-in-the-man 공격을 막을 수 있습니다.
HTTP는 연결 수행 시, 3-way handshake만 수행하기 때문에 1RTT만 소비합니다.
하지만 HTTPS는 대칭키가 없는 상황이라면 3-way handshake에 더해 대칭키 교환을 위한
handshake를 추가로 수행해야 하기에 최대 3RTT까지 소비합니다.
때문에 보안성을 높이는 대신 속도는 일정 부분 포기해야 합니다.

 

29. DI, IoC에 대해 설명해주세요.

my)
DI, IoC 모두 Spring Framework에서의 클래스 간 의존성을 줄이기 위한 것들 입니다.
DI는 Dependency Injection의 줄임말로서 객체가 필요로하는 의존성을 소스 코드에 직접
기입하는 방식이 아닌 외부에서 주입받는 방식을 의미합니다.
이를 통해 특정 클래스의 구현체가 달라진다고 하여 해당 구현체를 사용하는 클래스의
소스 코드를 고칠 필요성이 사라진다는 이점이 생깁니다.
IoC는 Injection of Control의 줄임말로서 컴포넌트 사이의 의존성을
개발자가 직접 주입하는 것이 아닌 프로그램이 적절하게 주입해줌으로서 
마찬가지로 구현체가 변경되었다고 하여 개발자가 직접 해당 구현체를 사용하는 
클래스를 찾아 일일히 변경하는 것이 아닌 IoC Container가 변경함으로서
코드 유지보수성을 크게 늘린 것을 의미합니다.

 

30. 객체지향 프로그래밍이란 무엇이고 어떻게 활용할 수 있나요?

my)
객체지향 프로그래밍이란 소프트웹어 개발 패러다임 중 하나로
현실 세계의 개념과 객체를 소프트웹어 모델링에 적용해서 유지 보수성을 늘린 패러다임입니다.
객체지향 프로그래밍에는 4가지 특징이 있습니다.
첫 번째는 추상화 특징입니다.
추상화란 객체 사이의 공통점을 찾고 추출하는 특징입니다.
해당 특징으로 인해 세부적인 사항에 집중하지 않고도 목표를 달성하게 함으로서
유연한 코드를 작성토록 해줍니다.
두 번째는 상속이라는 특징입니다.
기존의 클래스를 재활용해서 일부만 수정해서 사용할 수 있도록 도와줍니다.
이는 코드 중복을 크게 줄여서 유지보수성을 크게 늘립니다.
세 번째는 다형성이라는 특징입니다.
같은 코드여도 상황이 달라지면 기능도 유연하게 달라질 수 있는 특성을 의미합니다.
예를 들어, 인터페이스를 구현한 구현체가 2개 이상이라면
특정 인터페이스의 메서드를 호출했을 뿐인데 인터페이스에 대입되는 구현체에 따라
다르게 작동할 것입니다. 이를 통해 코드를 수정하지 않고도 다른 기능을 수행할 수 있음을 알 수 있습니다.
네 번째는 캡슐화라는 특징입니다.
때론 객체의 내부 데이터가 함부러 변경되거나 삭제되면 해당 객체가 꼭 지켜야 하는 규칙에 위배되는 상황이
자주 발생하게 됩니다. OOP에서는 접근을 제한함으로서 객체가 원하는 규칙을 무조건 지킬 수 있게 만듭니다.
이러한 특징들을 이용한다면
코드를 모듈화할 수 있으며 모듈화를 통해 테스트도 용이해지고 코드 재사용성도 크게 늘릴 수도 있습니다.
뿐만 아니라 현실 세계의 규칙과 닮아 있기에 사람 사이의 소통도 용이해지고 이는 협업에 큰 도움이 됩니다.