기타

(오답노트)모의 기술 면접

서영환 2024. 8. 8. 18:47

면접 질문
[1] TCP와 UDP의 차이점을 YOUTUBE를 통하여 설명 해주세요?

TCP의 경우 연결지향 점으로 된 부분이라 로그인 및 실시간 채팅에 사용 됩니다. 즉 신뢰성이 필요한 전송일 경우 TCP를 사용합니다
UDP의 경우 비연결 지향적이라 동영상 전송같이 신뢰성이 그다지 필요 없고 빠른 데이터 전송이 필요할 때 사용합니다.

[2] HTTP와 HTTPS란 무엇이고 그 차이는 무엇인가요?

HTTP의 경우 서버/클라이언트 간의 전송때 사용하는 프로토콜로
v1.0 - v1.1 - v2.0 - v3.0 의 버전으로 구분 됩니다.
초창기 모델인 v1.0의 경우 전송이 필요할 때 마다 연결이 필요한 방식으로 내가 필요한 요청이 있을 때마다 계속 연결 요청을 따로 해야되는 번거로움이 있었습니다.
그래서 이를 해결하기 위하여 v1.1 버전이 나왔습니다.
v1.1의 경우 timeout이라는 시간을 주어 timeout 시간 동안에 요청이 있으면 따로 연결없이 요청 사항을 전송해 줄 수 있게 되었습니다.
v2.0의 경우 v1 대에 발생하는 병렬 처리 방식의 전송을 해결 하기 위하여 만들어진 모델로
기존 에 요청이 있으면 요청을 모아서 한번에 처리하고 전송하였는데 v2.0의 경우 요청이 있을 때마다 그 요청을 처리하여 전송해 줄 수 있게 되었습니다.
v3.0은 좀 더 빠른 전송을 위해 기존 HTTP는 TCP 방식임에 반해 V3.0은 UDP 방식을 채택하였습니다.

HTTPS의 경우 기존 HTTP에서 데이터 전송시 암호화 되지 않은 평문을 전송하여 다른 임의 사용자(해커)가 패킷을 열어 봤을때 데이터가 그대로 노출 되어 정보유출의 위험이 있었는데 이를 해결하기 위하여 평문을 암호화여 전송하는 방식을 말합니다.


[3] 암호화의 대칭키와 비대칭키를 설명해주세요.

암호화에는 대칭키 기반의 암호화와 비대칭키 기반의 암호화가 있습니다.
대칭키 기반의 암호화는 평문을 암호화 하는 키와 암호화된 암호문을 복호화 하는 키가 동일한 방식을 말합니다. 키가 동일하여 키관리가 용이하다는 장점이 있지만 암호화키를 사용자에게 안전하게 전달하기 어렵다는 단점이 있습니다
비대칭키 기반의 암호화는 평문을 암호화는 기와 암호화된 암호문을 복호화 하는 키가 서로 다른 방식을 말합니다. 즉 암호화때 사용한 키는 해당 암호화를 복호화 하지 못합니다. 키관리가 어렵다는 단점이 있지만 키를 사용자에게 전달하기 쉽다는 장점이 있습니다.


[4] TLS와 SSL의 차이점은 무엇인가?

내가 말한 답변 : TLS와 SSL의 제가 생각하는 큰 차이점은 어디서 암호화 하는 지의 차이점이라고 생각이 됩니다. SSL의 경우에는 어플리케이션 단에서 평문을 암호화 하지만 TLS는 전송단에서 암호화를 수행합니다.


오답 노트 : TLS는 기존 SSL에 문제가 있는 부분을 수정하여 좀 더 향상된 버전입니다. SSL은 보안 취약점이 알려진 이전 알고리즘을 지원하는 방면 TLS는 고급 암호화 알고리즘을 사용하고 있습니다. 또한 메시지 인증시 SSL은 MAC을 사용하지만 TLS HMAC(암호화 해시 함수와 기밀 암호화 키를 수반하는 특정한 유형의 메시지 인증 코드)을 사용하고 있습니다. 또한 SSL은 더 이상 사용하지 않고 있으며 TLS로 대체 되었습니다.


[5] 객체지향 프로그래밍 무엇인가? 

오답 노트
컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것
각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다
프로그램을 유연하고 변경이 쉽게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용
프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점
대표 언어로 Java가 있다

[6] 절차지향 프로그래밍은 무엇인가?

오답 노트
수차적인 처리를 중요시 여기며 프로개름 전체가 유기적으로 연결되도록 만든 프로그래밍 기법
모듈 구성이 용이하며 구조적인 프로그램이 가능
컴퓨터의 처리구조와 유사해 실행 속도가 빠르다
유지보가 어렵고 정해진 순서대로 입력을 해야하므로 순서를 바꾸면 결과값을 보장할 수 없다.(사칙연산을 생각하면 쉽다)
코드가 길어지면 가독성이 무척 떨어지며 이해하기가 어려워진다.(스파게티코드)
대표 언어로 C가 있다


면접관에게 질문이 왔을 경우 단답으로 대답하기 보다는 진행한 프로젝트 경험을 토대로 예시를 들며 답변 하였을 때 질문의 수를 줄이면 내가 알고 있는 지식으로 유도할 수 있게 된다. 

단순히 이론만으로 답변하였을 경우 면접관의 눈에 들기는 어렵지만, 경험을 토대로한 예시를 들었을 경우 면접관의 관심을 받기가 좀더 용이하며 만약 프로젝트를 이야기 하였을 경우 해당 프로젝트 쪽으로 이야기의 흐름을 바꿀 수 있고, 내가 진행 프로젝트의 경우 참여를 하였다면 해당 프로젝트에 대한 기술적 내용이나 담당했던 기능등을 좀 더 자신감있게 설명도 할 수 있어 면접에 도움이 될 수 있다고 팁을 받게 되었다.

HTTP와 HTTPS의 차이점을 이야기하면서 전공이야기 나와서 이번에 보내주신 면접 내용과는 점점 다른 질문이 나왔던 것을 보면 팁을 활용하는 편이 좀더 좋은 거 같다. 보안 전공에 졸업 프로젝트를 카카오톡 메시지 자동 암호화를 하기 위해 노력했지만 프로젝트 진행 중 TLS로 변경되면서 해당 프로젝트가 다른 사용 암&복호화 프로그램과 유사하게 변경되어 아쉬웠다는 내용을 말 하니 다음 질문이 암호화 기법의 질문과 SSL과 TLS의 차이점에 대한 질문이 오게 되었다.

이후에는 다시 개념적으로 된 질문이 왔는데 이 때에도 객체지향 프로그래밍을 설명하면서 그 반대되는 개념이 절차지향 프로그래밍을 언급하는게 조금더 좋고 각각의 언어로 진행했던 프로젝트가 있으면 같이 언급하는게 좋다는 말씀을 들었다.