Spring 기술면접 예상질문 미리보기 <7>
쿠키/세션 차이, TCP/UDP 정의, HTTP/HTTPS 차이, DI/IoC에 대한 질문들. 뭐라고 답해야 할까?
Oct 10, 2024
스프링(Spring)은 네이버, 카카오, 쿠팡, 무신사 등 국내 기업에서 많이 쓰이는 Java 기반 백엔드 개발 프레임워크죠. 현재 스프링 기술 면접 준비를 하고 계시다면 이번 아티클에 주목해주세요. 많이 물어보시는 스프링 기술 면접 질문을 추렸습니다. 예상 질문부터 수강생의 답변과 멘토님의 피드백까지 한눈에 확인해보세요.
Q (1). 쿠키, 세션의 개념과 차이를 설명해보세요
핵심 키워드 : 핵심 키워드 : 저장 위치, 데이터 유지, 보안
수강생 답변
쿠키는 사용자의 브라우저에, 세션은 서버에 저장됩니다. 세션은 서버에 저장되므로 쿠키보다 상대적으로 보안성이 높습니다. 쿠키는 저장 용량에 제한이 있지만, 세션은 서버의 용량에 따라 다릅니다. 쿠키는 설정된 만료 시간까지 유지되지만, 세션은 일정 시간 활동이 없으면 만료됩니다. 간단히 말하면, 쿠키는 사용자의 브라우저에 저장되는 작은 정보 조각이며, 세션은 서버에서 사용자 정보를 관리하기 위한 방법입니다.
세션은 사용자의 정보를 지속적으로 받고 유지하기 위해서 세션을 사용합니다. 그런데 이러한 서버의 운용은 계속해서 사용자의 정보를 받아야 하므로 부하가 발생할 수 있습니다. 그래서 유저에 대한 정보를 쿠키에 저장해서 해당 쿠키에 대한 유효성만 검증하게끔 stateless 한 방식을 써서 서버의 부하를 줄일 수 있습니다.
멘토님 피드백
쿠키와 세션에 대해서 비교 설명을 잘하고 있고, stateless 관련 내용과 세션의 단점을 어떻게 극복할 방법까지 잘 설명하고 있는 답변입니다.
☑︎ 체크 포인트
- stateless 관련 내용과 세션의 단점 극복 방법을 설명하고 있는 부분
- "세션은 사용자의 정보를 지속적으로 받고 유지하기 위해서 세션을 사용합니다. 그런데 이러한 서버의 운용은 계속해서 사용자의 정보를 받아야 하므로 부하가 발생할 수 있습니다. 그래서 유저에 대한 정보를 쿠키에 저장해서 해당 쿠키에 대한 유효성만 검증하게끔 stateless 한 방식을 써서 서버의 부하를 줄일 수 있습니다.”
Q (2). TCP/UDP에 대해서 설명해주세요.
핵심 키워드 : 3 Way Handshake, 패킷, 프로토콜, OSI 7 Layer, 데이터 신뢰성, 무결성,
수강생 답변
TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)는 네트워크 통신에서 사용되는 두 가지 주요한 프로토콜입니다. 이 두 프로토콜은 데이터를 패킷으로 분할하고 전송하는 방식과 연결 관리, 오류 처리 등의 측면에서 차이가 있습니다. TCP는 연결을 설정하고 유지하며, 연결이 설정되면 데이터를 안정적으로 전송합니다. 이 연결은 클라이언트와 서버 간에 가상의 경로를 만드는 데 사용됩니다. TCP는 데이터의 전달을 보장하며, 데이터 손실이나 순서 뒤섞임을 방지하기 위해 재전송 및 흐름 제어 메커니즘을 제공합니다. 파일 전송, 이메일, 웹 브라우징 등과 같이 데이터 손실이나 오류를 용납할 수 없는 응용 프로그램에 적합합니다. 연결 설정 및 해제 오버헤드로 인해 상대적으로 느릴 수 있습니다.
UDP는 연결을 설정하지 않으며, 데이터 패킷을 무 신뢰적으로 전송합니다. 따라서 연결 설정 및 해제 단골 오버헤드가 없습니다. UDP는 데이터의 전달을 보장하지 않으며, 데이터 손실 또는 순서 뒤섞임이 발생할 수 있습니다. 오류 처리 또한 제한적입니다. 스트리밍 미디어, DNS 조회, IP 보이스토크, 온라인 게임 서버와 같이 데이터 손실이 발생해도 문제가 되지 않는 응용 프로그램에 적합합니다. 데이터 전송이 빠르고 경량화되어 오버헤드가 적습니다.
요약하면, TCP는 신뢰성과 연결 지향성이 중요한 애플리케이션에 적합하며, 데이터의 신뢰성과 순서를 보장하고자 할 때 사용됩니다. 반면에 UDP는 신뢰성이 떨어지더라도 빠른 데이터 전송과 상대적으로 적은 오버헤드가 필요한 애플리케이션에 적합합니다. 선택은 응용 프로그램의 요구 사항과 성능에 따라 다르며, 일부 응용 프로그램은 둘 다 사용하기도 합니다.
멘토님 피드백
TCP와 UDP에 대한 정의와 비교를 잘하고 있고 특히, TCP와 UDP의 중요한 차이점 중 하나를 나타내는 핵심 키워드 ‘신뢰성 체크 여부’를 잘 언급했습니다.
☑︎ 체크 포인트
- TCP와 UDP 차이를 잘 보여주는 ‘신뢰성 체크 여부’를 잘 설명한 점
- “TCP는 신뢰성을 체크합니다. 즉, 데이터 전송의 정확성과 순서를 보장하기 위해 여러 메커니즘을 사용합니다.”
- “UDP는 신뢰성을 체크하지 않습니다. 데이터를 빠르게 전송하는 데 중점을 두며, 데이터의 손실이나 순서 뒤섞임을 허용합니다.”
Q (3). http, https 차이점에 대해 설명해주세요
핵심 키워드 : SSL 인증, 인증서, 암호화와 복호화, 포트 번호
수강생 답변
HTTP(HTTP - Hypertext Transfer Protocol)와 HTTPS(HTTPS - Hypertext Transfer Protocol Secure)는 월드 와이드 웹(웹)에서 데이터를 전송하는 프로토콜입니다. 이 둘의 주요 차이점은 보안과 데이터 암호화에 관련이 있습니다. HTTP는 데이터 전송을 암호화하지 않기 때문에 보안 문제가 있습니다. 데이터는 평문(암호화되지 않은 텍스트)으로 전송되며, 중간자 공격 및 데이터 가로채기와 같은 위협에 노출될 수 있습니다.
HTTP는 기본적으로 80번 포트를 사용합니다. HTTPS는 HTTP의 보안 버전입니다. 데이터를 암호화하여 보호합니다. 이를 위해 SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security) 프로토콜을 사용하여 데이터를 암호화하고 안전하게 전송합니다. 따라서 데이터의 기밀성과 무결성을 제공하며 중간자 공격을 예방합니다. HTTPS는 기본적으로 443번 포트를 사용합니다.
HTTPS는 웹 사이트가 신뢰할 수 있는 것임을 인증기관(Certificate Authority)을 통해 증명합니다. 이는 사용자가 웹 사이트의 신원을 확인할 수 있고, 데이터를 제대로 암호화했음을 확인하는 데 도움이 됩니다. HTTPS를 사용하면 중요한 정보(예: 로그인 정보, 신용 카드 번호)를 전송할 때 더 높은 보안 수준을 제공합니다. 검색 엔진은 HTTPS를 사용하는 웹 사이트를 더 높은 순위로 보는 경향이 있습니다. 따라서 HTTPS를 사용하면 SEO(검색 엔진 최적화)에 도움이 될 수 있습니다. 브라우저들은 HTTPS를 적극적으로 지원하며, 사용자에게 안전한 웹 사이트를 나타내는 데 도움을 줍니다.
요약하면, HTTPS는 HTTP에 비해 높은 보안 수준을 제공하며, 중요한 정보를 안전하게 전송하는 데 사용됩니다. 많은 웹 사이트 및 웹 애플리케이션이 HTTPS를 통해 보안을 강화하고 사용자 데이터를 보호하고 있습니다.
멘토님 피드백
HTTP와 HTTPS의 정의를 잘 이야기하고 있고, 특히 HTTPS가 어떤 부분에서 보안적으로 안전하고 어떤 이점을 가졌는지 아주 잘 설명하고 있는 답변입니다.
☑︎ 체크 포인트
- HTTPS의 보안적 안전성과 이점을 잘 설명하는 부분
- 보안적 안전성
- "HTTPS는 HTTP의 보안 버전입니다. 데이터를 암호화하여 보호합니다."
- "SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security) 프로토콜을 사용하여 데이터를 암호화하고 안전하게 전송합니다."
- "데이터의 기밀성과 무결성을 제공하며 중간자 공격을 예방합니다."
- 이점
- "HTTPS는 웹 사이트가 신뢰할 수 있는 것임을 인증기관(Certificate Authority)을 통해 증명합니다."
- "사용자가 웹 사이트의 신원을 확인할 수 있고, 데이터를 제대로 암호화했음을 확인하는 데 도움이 됩니다."
- "중요한 정보(예: 로그인 정보, 신용 카드 번호)를 전송할 때 더 높은 보안 수준을 제공합니다."
- "검색 엔진은 HTTPS를 사용하는 웹 사이트를 더 높은 순위로 보는 경향이 있습니다. 따라서 HTTPS를 사용하면 SEO(검색 엔진 최적화)에 도움이 될 수 있습니다."
- "브라우저들은 HTTPS를 적극적으로 지원하며, 사용자에게 안전한 웹 사이트를 나타내는 데 도움을 줍니다."
Q (4). DI, IoC에 대해 설명해주세요.
핵심 키워드 : 의존성 주입, 컨테이너, 객체 지향, 위임, 결합
수강생 답변
DI는 dependency injection, 즉 의존성 주입으로, 객체 간의 의존 관계를 외부에서 설정하고 주입하는 것을 의미하며, 이는 객체들 간의 의존성을 낮추기 위한 방법중 하나입니다. 객체 내에서 필요한 객체를 new를 통하여 생성하게 되면 객체 간 의존성이 너무 높아지게 됩니다. 즉, 객체의 수정이 관련 없는 객체의 수정으로 이어질 수 있습니다. 따라서 이런 의존성을 낮추기 위하여 객체가 동작하기 위해서 필요한 다른 객체를 외부에서 생성하고 생성자나, 세터 메서드를 통하여 주입해 주는 것입니다.
객체 간의 의존관계를 미리 설정해 두면 스프링 컨테이너가 의존관계를 자동으로 연결해 줍니다. 이렇게 되면 직접 의존하는 객체를 생성하는 일이 없으므로, 이를 통해 객체 간의 결합도를 낮추고 유연성과 재사용성을 높일 수 있습니다. DI는 주로 생성자, 세터 메서드, 인터페이스를 통해 의존성을 주입하는 방식으로 구현됩니다. Spring에서 가장 권장하는 의존성 주입 방법은 생성자를 통한 주입 방법인데, 그 이유는 순환 참조를 방지하고, 불변성을 가지며 테스트에 용이하기 때문입니다.
IoC는 객체의 생성과 관리를 개발자가 아닌 프레임워크 또는 컨테이너가 담당하는 것을 의미합니다. 개발자는 객체의 생성과 의존성을 직접 관리하지 않고, 프레임워크나 컨테이너에게 위임하여 필요한 객체를 제공받습니다. 이를 통해 개발자는 비즈니스 로직에 집중할 수 있고, 객체의 생명주기와 의존성 관리에 대한 부담을 줄일 수 있습니다. IoC에 대하여 설명하기 위해서는 라이브러리와 프레임워크의 차이를 명확히 할 필요성이 있습니다. 라이브러리는 개발자에게 모든 제어 권한이 있어 개발자가 원하는 시점에 라이브러리를 콜해서 사용하게 되지만, 프레임워크는 개발자에게 제어 권한이 없고 프레임워크에 제어 권한이 있습니다. 따라서 개발자가 작성한 비즈니스 로직을 프레임워크가 원하는 적절한 타이밍에 콜하게 됩니다. 이것을 제어가 개발자에게서 프레임워크로 역전되었다고 해서 "Inversion of Control", IoC라 부릅니다.
DI와 IoC는 서로 밀접한 관련이 있으며, DI는 IoC의 구현 방법 중 하나입니다. DI를 통해 의존성을 주입하면 IoC 컨테이너가 객체를 생성하고 의존성을 주입하는 역할을 수행합니다. 따라서 DI와 IoC는 코드의 유연성과 확장성을 높이는 데 도움을 줄 수 있는 중요한 개념입니다.
멘토님 피드백
훌륭한 답변입니다. DI와 IoC의 각 기능과 특징을 명확히 설명했고, 특히 제어의 역전 개념에 대한 설명이 매우 좋습니다.
☑︎ 체크 포인트
- 역전의 제어에 대해서 설명한 부분
- "IoC에 대하여 설명하기 위해서는 라이브러리와 프레임워크의 차이를 명확히 할 필요성이 있습니다. 라이브러리는 개발자에게 모든 제어 권한이 있어 개발자가 원하는 시점에 라이브러리를 콜해서 사용하게 되는 반면에, 프레임워크는 개발자에게 제어 권한이 없고 프레임워크에 제어 권한이 있습니다. 따라서 개발자가 작성한 비즈니스 로직을 프레임워크가 원하는 적절한 타이밍에 콜하게 됩니다. 이것을 제어가 개발자에게서 프레임워크로 역전되었다고 해서 "Inversion of Control", IoC라 부릅니다.”
스프링(Spring) 기술 면접 질문, 도움이 되셨나요? 기술면접 대비는 현직 개발자의 시선에서 어떤 답변이 좋을 지를 파악할 수 있어서 취업 리부트 코스 수강생들의 만족도가 가장 높은 세션 중 하나 인데요. 앞으로도 React, Spring의 기술면접 Q&A를 꾸준히 발행할 예정이니, 관심이 있다면 항해99 블로그를 구독해주세요.
🚢 개발자 취업 준비 어떻게 시작해야 할지 모르겠나요? 취업으로 향하는 거친 항해에서 든든한 메이트가 되어 드리겠습니다.
취업 실패 시 교육비 0원. 반드시 취업까지 책임질 수 있다는 항해의 자신감입니다.
높은 수준의 개인 프로젝트 경험이 없는 개발 유관 전공자, 전반적인 학습이 부족한 부트캠프 수료생이라면 개발자 취업 리부트 코스에 합류하세요. 자료구조 공부, 프로젝트, 코테준비, 이력서와 면접 대비까지 취업 리부트 코스에서 한 번에 할 수 있습니다. 갈수록 높아지는 개발자 취업의 벽, 개발자 취업 리부트 코스로 11주 만에 취업의 문을 열어 보세요
CREDIT
글 | 송민영 팀스파르타 에디터
Share article
Subscribe to our newsletter