개발지식 먹는 하마 님의 블로그
[내일배움캠프] 모의 면접 (입문) 복기 본문
내일 배움 캠프에서 2차 모의 면접을 진행하였다.
나는 업무를 하다가 1차 신청을 놓쳤기 때문에 2차 모의 면접을 입문 단계로 신청했다.
주어진 사전 질문은 4개이다.
1. 객체지향 프로그래밍의 4가지 특징을 설명해 주세요.
캡슐화는 객체의 속성을 보호하기 위해 다른 객체와 소통할 때 필요한 정보만을 추상적으로 노출시킵니다.
추상화는 다른 객체와의 상호작용에 꼭 필요한 핵심 기능이나 공통된 기능들을 모아 상위 타입으로 만듭니다.
상속은 이러한 추상화된 상위 타입을 기반으로, 기능을 추가하거나 재정의하여 새로운 클래스를 정의합니다.
마지막으로 다형성은 공통된 인터페이스를 상속받은 객체의 기능이 여러 타입으로 표현될 수 있는 성질을 말합니다.
1-1) 4가지 원칙을 준수해서 프로젝트에 적용하거나 리팩터링 한 경험이 있나요?
(임기응변)
직접 구현한 것은 많지 않고, Repository를 구현할 때 추상화 개념을 많이 사용한 것 같습니다.
지금까지 해온 게 많은데 생각해 놓은 게 없어서 설명하기 좋은 예시 딱 하나를 골라 말하기가 어려웠다.
1-2) Spring 프레임워크에서 캡슐화나 상속이 적용되어 있는 것 같다고 떠오르는 부분
지금 당장 떠오르는 건 예외 코드입니다.
RuntimeException을 부모로 하고 이를 상속받아 다양한 세부적인 예외 처리하는 방식이
상속과 다형성 부분에 해당하는 것 같습니다.
2) 조합에 대해서 들어보았는가
처음 들어봤습니다.
진짜 처음 들어봤다. (공부할 거 +1)
💡피드백
객체지향 프로그래밍의 여러 원칙이나 방법론적인 관점에 대해 좀 더 복습하는게 좋을 것 같다.
2. Get 메서드와 Post 메서드의 차이
GET은 정보를 요청할 때 사용하는 메서드이고
POST는 정보를 생성하기 위해 서버에 데이터를 보내는 데 사용하는 메서드입니다.
POST는 정보 생성을 위한 내용을 Body에 데이터를 담아 보내지만,
Get은 Body를 사용하지 않고 쿼리 스트링에 필요한 정보를 담는다는 차이가 있습니다.
따라서 Get을 사용할 때는 쿼리 스트링에 담긴 내용이 노출되기 때문에 민감한 데이터를 넘길 때 주의가 필요합니다.
1) 2가지 방식을 어떤 식으로 적절하게 분류해서 사용할 수 있을까요?
이미 GET으로는 데이터를 조회하고, POST로는 데이터를 생성할 때 사용한다고 설명한 것 같은데 또 분류를 하라고 하시니까
질문이 이해가 잘 되지 않았다.
정중하게 분류에 대해 이해가 잘 되지 않는다고 추가 설명을 요청드렸다.
방금 전의 답변은 RestAPI와 혼용된 설명,
일반적인 HTTP 통신 방식 기반으로 api를 만든다고 할 때,
어떤 식으로 이 두 방식을 나눠서 구현할 수 있을까?
HTTP 통신 방식 기반에서 뭐가 다른지 여전히 모르겠어서 아는 것에 대해 설명하고 넘어갔다.
💡피드백
현재 답변이 80% 정도 부합하는데 HTTP 기반으로 좀 더 공부해서 나머지 부분을 보충하면 좋을 것 같다.
3. 인증에서 세션과 토큰 방식의 장단점은 무엇인가
세션 인증 방식은 인증에 필요한 정보를 세션 저장소에 저장하고, 세션 ID를 쿠키 형태로 클라이언트에게 전달합니다.
세션 ID가 탈취되어도 중요한 정보가 담겨있지 않기 때문에 보안에 뛰어나다는 장점이 있지만, 메모리를 사용하기 때문에 사용자가 많아질수록 메모리 리소스 부족으로 인한 장애가 발생할 수 있다는 단점이 있습니다.
토큰 인증 방식은 세션과는 다르게 인증에 필요한 정보가 페이로드에 담기고 이를 클라이언트가 관리하기 때문에 서버의 부담이 감소합니다. 또한 고유 시크릿 키를 통해 위조 여부를 쉽게 알 수 있다는 장점이 있습니다.
하지만, 페이로드는 암호화된 것이 아니기 때문에 민감한 정보를 다루지 못하고 탈취 시 대처가 어려우며,
토큰 크기가 커질수록 트래픽 부하가 증가한다는 단점이 있습니다.
1) 세션이 담긴 쿠키 탈취 시, 토큰 탈취와 같은 위험성이 있는 것 아닌가?
그러게요? 생각해 보니 그렇네요? (실제로 이렇게 대답한 것은 아니고 공부를 더 해오겠다고 답변했다.)
그렇지만 관리자가 해당 세션을 무효화시켜서 접근을 차단할 수 있다!
라고 얘기했어야 하는데 답변을 못했다.
(배웠던 거 까먹는 게 젤 억울해)
2) 어떤 인증 방식이 어떤 서비스에 더 적절한가?
단일 IP에서의 로그인을 지원하거나 관리자 로그인이 필요한 서비스라면 세션 방식이 더 적합하고,
다중 IP로 여러 번 로그인이 가능한 서비스라면 토큰 방식이 더 적합합니다.
3) 단일 서버에서 다중 서버 사용으로 변경되는 경우 발생하는 문제와 해결 방법
단일 서버에서 다중 서버로 사용하게 되면 세션 저장소가 공유되지 않아
기존에 세션 ID를 발급한 서버와 다른 서버로 인증을 시도하게 되면 기존에 발급 받은
세션 ID에 해당하는 정보를 찾을 수 없게 됩니다.
따라서, 이런 경우 외부 저장소를 사용하여 여러 서버가 동일한 저장소를 사용하도록 해야합니다.
💡피드백
현업에서는 세션을 사용하거나 세션과 토큰을 혼용하는 방식을 주로 사용하고 있기 때문에
세션 클러스터링 같은 방식을 좀 더 찾아보면 좋을 것 같다.
4. "http://www.naver.com"에 접속할 때 생기는 과정을 단계별로 설명
사용자가 브라우저에 도메인 주소를 입력하면 DNS(도메인 네임 시스템)를 통해 도메인 이름을 IP 주소로 변환합니다.
브라우저는 변환된 IP 주소를 가진 서버에 TCP 연결을 시도합니다.
이때 3-way handshake 과정을 통해서 사용자와 네이버가 안정적으로 연결됩니다.
연결이 완료되면 브라우저가 네이버 서버에 HTTP 요청을 보내고
네이버 서버는 사용자 요청에 따라 필요한 리소스를 응답으로 전송합니다.
마지막으로 브라우저는 응답받은 HTML을 파싱 한 후 렌더링하여 보여줍니다.
1) 도메인 주소가 IP 주소로 변환될 때의 과정을 자세히 설명해 주세요
더 자세하게는 모르겠다.
2) HTTP와 HTTPS의 차이
HTTPS는 SSL/TSL 암호화 방식을 적용하여 HTTP보다 보안이 더 강화되었다는 차이가 있습니다.
💡피드백
HTTP의 기본적인 특징과, 암호화 방식에 대해 자세히 알면 좋을 것 같다.
도메인 주소가 IP로 변환될 때의 과정을 네트워크 기기나 7계층 레이어와 함께 설명하면 좋을 것 같다.
💡전체적인 피드백
목소리 톤이 일관된 답변으로 침착해보여서 좋았다.
면접관에 따라 다르겠지만 좀 더 강약 조절을 주어 중요한 내용을 말할 때 포인트를 주면 인상이 강하게 남을 것 같다.
아는 것 내에서 답변을 하려는 모습이 좋았다.
후기
면접 스크립트를 많이 작성해야 겠다는 생각을 했다.
아는 내용임에도 머릿속으로 내용을 한 번 정리한 적이 없으니까
답변을 횡설수설하게 하는 부분이 있었던 것 같다.
말의 끝맺음을 자꾸 ~로 알고 있습니다. ~같습니다. 라는 식으로 습관적인 마무리를 하는데
이를 자제하면서 말을 끝맺기 위한 적절한 어휘를 고르다가 더듬는 부분이 있다고 스스로 느꼈다.
면접 스크립트를 작성하면서 말하는 연습도 함께 병행해야겠다고 느꼈다.
'내일배움캠프 (CS25)' 카테고리의 다른 글
[내일배움캠프 82일차] AWS SES 서버 기반 메일 발송 (0) | 2025.06.19 |
---|---|
[내일배움캠프 80일차] 2차 리팩토링 - 멀티모듈, 쿼리 노출 보안 (0) | 2025.06.17 |
[내일배움캠프 79일차] 트러블 슈팅 Throttle 예외 - RateLimiter 적용 (0) | 2025.06.16 |
[내일배움캠프 78일차] 이메일 발송 흐름 성능 개선(비동기) (0) | 2025.06.13 |
[내일배움캠프 77일차] 이메일 발송 흐름 리팩토링 (0) | 2025.06.13 |