Spring 기술면접 예상질문 미리보기 <3>

Garbage Collector, Java Map, DI / IoC 그리고 MVC 모델. 뭐라고 답해야 할까?
May 03, 2024
Spring 기술면접 예상질문 미리보기 <3>
 
 
🗣️
Spring 스프링은 네이버, 카카오, 쿠팡, 무신사 등 국내 기업에서 많이 쓰이는 Java 기반 백엔드 개발 프레임워크죠. 현재 스프링 기술 면접 준비를 하고 계시다면 이번 아티클에 주목해주세요. 많이 물어보시는 스프링 기술 면접 질문을 추렸습니다. 예상 질문부터 수강생의 답변과 멘토님의 피드백까지 한눈에 확인해보세요.
 
 

Q (1). Garbage Collector의 역할, 원리, 알고리즘에 대해 아는 만큼 설명해주실 수 있을까요?

핵심 키워드 : JVM, heap, Stack, 메모리, 할당과 해제, Mark / Sweep / Compact 과정

🧑‍💻 수강생 답변

Garbage Collector는 자동 메모리 관리 시스템입니다. 프로그램에 의해 할당된 메모리가 더는 인스턴스를 참조하지 않아 가비지(garbage) 상태가 되면 자동으로 메모리를 초기화합니다. Garbage Collector가 동작은 자바에 의해 자동 실행되고, 어느 시점 어디서 시작할지에 따라 다릅니다.또한 Garbage Collector가 동작하면, 애플리케이션에 있는 모든 스레드들이 중단됩니다. Java에서는 개발자가 직접 메모리를 할당하거나 해제할 필요가 없고, GC가 자동으로 메모리를 관리합니다.
Garbage Collector의 원리는 첫 번째 어떤 객체가 다른 코드에서 참조할 수 있는지에 따라 결정되는 도달 가능성, 두 번째 도달 가능한 객체들을 특별 플래그로 표시하고, 그렇지 않은 객체들을 메모리에서 제거하는 표시 및 소거, 세 번째 메모리에서 객체가 제거되면 메모리 공간을 압축시켜 연속적인 블록을 만드는 즉 최적화시키는 압축,네 번째 객체를 세대로 분류하며, 새로 생성된 객체는 첫 번째 세대에 오래될수록 더 높은 곳에 이동하고 대부분 객체가 짧은 생성 주기를 가지기에 효율적인 Generational Garbage Collector가 있습니다.
Garbage Collector은 여러 알고리즘을 사용하여 필요하지 않은 객체를 제거합니다. 그 중 4가지를 소개하겠습니다. 첫 번째 Serial Garbage Collector입니다. Serial Garbage Collector은 단일 스레드에서 작동하며, GC 작업 중에 모든 애플리케이션 스레드를 일시 중지시킵니다. 즉, GC 작업이 실행되는 동안 애플리케이션이 멈추게 됩니다. 작은 규모의 애플리케이션 또는 단일 사용자 시스템에 적합합니다. 두 번째 Parallel Garbage Collector 입니다. Parallel Garbage Collector은 여러 스레드를 사용하여 GC 작업을 수행합니다. GC 작업 중에 애플리케이션 스레드는 짧은 일시 중지만 겪게 됩니다. 병렬 GC는 CPU 코어를 최대한 활용하여 빠르게 GC 작업을 처리합니다. 중간 규모의 다중 스레드 애플리케이션에 적합합니다. 세 번째 CMS Garbage Collector 입니다. CMS Garbage Collector는 GC 작업을 최대한 애플리케이션 스레드와 병렬로 실행하려고 시도합니다. 초기 마크 단계와 다시 마크 단계에서 멈춤이 발생하지만, 마지막 단계에서는 대부분의 GC 작업이 병렬로 이루어집니다. 대규모 다중 스레드 애플리케이션에서 짧은 GC 일시 중지 시간이 요구되는 경우에 적합합니다. 네 번째 G1 Garbage Collector 입니다. G1 Garbage Collector은 전체 힙 영역을 여러 개의 영역으로 분할하고, 각 영역에 대한 GC를 개별적으로 수행합니다. G1 GC는 다음에 수행할 영역을 동적으로 결정하여 최적화된 GC를 수행합니다. 대규모 애플리케이션에서 예측 가능한 GC 일시 중지 시간을 요구하는 경우에 적합합니다. 마지막으로 Garbage Collector 의 한계를 소개하겠습니다.어떤 방식을 사용하든 성능 하락을 피할 수는 없으며, 더는 접근이 불가능한 객체만 회수하기 때문에 메모리 누수는 발생할 수 있습니다.
 

🗣️멘토님 피드백

가비지 컬렉터의 기본 개념과 역할을 명확하게 설명했고, 동작 원리에 대해서도 잘 이해할 수 있게 설명했습니다. 그리고 가비지 컬렉터의 알고리즘을 4가지 방식으로 다양하게 설명한 것도 좋았습니다. 전반적으로 가비지 컬렉터를 충분히 이해하고 있는 것을 잘 보여준 훌륭한 답변입니다.
 

😄 좋은 부분

  • 가비지 컬렉터의 기본 개념과 역할 명확히 설명
    • “Garbage Collector는 자동 메모리 관리 시스템입니다. 프로그램에 의해 할당된 메모리가 더는 인스턴스를 참조하지 않아 가비지(garbage) 상태가 되면 자동으로 메모리를 초기화합니다.” ”Java에서는 개발자가 직접 메모리를 할당하거나 해제할 필요가 없고, GC가 자동으로 메모리를 관리합니다.“
       
  • 동작 원리 잘 이해할 수 있게 설명
    • 도달 가능성, 표시 제거, 압축, 세대 분리 이 4가지 키워드로 잘 설명
       
  • 알고리즘을 4가지 방식으로 다양하게 설명 1) Serial Garbage Collector 2) Parallel Garbage Collector 3) CMS Garbage Collector 4) G1 Garbage Collector
 
 

Q (2). Java Map의 내부 구현은 어떻게 이루어져 있을지 추측해보실 수 있을까요?

핵심 키워드 : key - value, hash / tree , 중복, 자료 구조

🧑‍💻 수강생 답변

HashMap은 Hash Table 을 이용하여 만들어졌습니다. Hash Table은 key 와 value를 저장하며, key를 이용하여 빠르게 데이터를 찾기 위한 자료구조를 가지고 있습니다. 특정 key는 해시 함수를 통하여 bucket에 접근할 수 있는 index로 변환합니다. index를 통하여 bucket에 접근하고, bucket에 맞는 index에 key와 value를 저장합니다. TreeMap은 Node들의 연결로 이루어져 있습니다. 루트라는 최상위 Node가 존재하고, 부모 Node 와 자식 Node 로 구성되어 있습니다. Node 마다 key 와 value 가 같이 저장되며, key 값을 기준으로 좌측 우측으로 구분하여 저장됩니다.
 

🗣️멘토님 피드백

Java의 대표적인 Map 구현체인 “HashMap”과 “TreeMap”의 내부 구현 방식을 핵심 키워드를 사용해서 잘 설명했습니다.
 

😄 좋은 부분

  • HashMap의 내부 구현 방식을 핵심 키워드 ‘해시 테이블’, ‘해시 함수’, ‘버켓’을 사용해서 잘 설명
    • “HashMap은 Hash Table 을 이용하여 만들어졌습니다.Hash Table은 key 와 value를 저장하며, key를 이용하여 빠르게 데이터를 찾기 위한 자료구조를 가지고 있습니다.특정 key는 해시 함수를 통하여 bucket에 접근할 수 있는 index로 변환합니다. index를 통하여 bucket에 접근하고, bucket에 맞는 index에 key와 value를 저장합니다.”
       
  • TreeMap의 내부 구현 방식을 핵심 키워드 ‘루트 노드’, ‘부모 노드’, ‘자식 노드’를 사용해서 잘 설명
    • “TreeMap은 Node들의 연결로 이루어져 있습니다. 루트라는 최상위 Node가 존재하고, 부모 Node 와 자식 Node 로 구성되어 있습니다. Node 마다 key 와 value 가 같이 저장되며, key 값을 기준으로 좌측 우측으로 구분하여 저장됩니다.”
       
       
       

Q (3). DI와 IoC에 대해 아는 만큼 설명해주실 수 있을까요?

핵심 키워드 : 의존성 주입, 컨테이너, 객체 지향, 위임, 결합

🧑‍💻 수강생 답변

DI (의존성 주입)은 객체지향 프로그래밍에서 의존성 주입은 특정한 클래스가 다른 클래스의 의존성을 외부에서 주입받는 기법을 말합니다. DI를 사용하면 클래스 내부에서 새로운 객체를 직접 생성하는 대신 외부에서 필요한 객체를 받아와서 사용할 수 있는데요. 이를 통해 모듈 간의 결합도를 낮추고, 코드의 재사용성과 테스트 용이성을 향상시킬 수 있습니다. 즉 DI는 객체의 특정 기능이나 서비스를 외부에서 받아와서 사용하는 방식입니다.
IoC (제어의 역전)은 IoC는 프로그램의 제어 흐름 구조가 전통적인 순차적 제어 흐름에서 벗어나 독립적인 모듈들이 중앙된 제어 코드 대신 사용자의 코드를 제어하게 되는 디자인 패턴을 의미합니다. 쉽게 말하면, 프로그램의 흐름을 직접 제어하는 것이 아니라 프레임워크나 라이브러리 등 외부 요소에게 제어를 위임하는 것입니다. 그리고 DI는 IoC의 한 형태로 볼 수 있으며 IoC의 핵심 목적은 모듈 간의 결합도를 낮추는 것이며, DI는 그 방법 중 하나입니다.
모듈간의 결합을 낮추는 이유 첫 번째는 유지 보수성 향상 결합도가 낮은 모듈은 다른 모듈의 변경에 덜 민감하므로 하나의 모듈을 수정할 때 다른 모듈에 영향을 주는 확률이 줄어드는데요. 이는 유지보수 과정을 간소화하고 비용을 절감하는 데 도움이 되기 때문입니다. 두 번째는 재사용성 향상결합도가 낮은 모듈은 다른 환경이나 다른 프로젝트에서도 쉽게 재사용될 수 있기 때문이죠. 이는 개발 비용과 시간을 절약하는 데 도움이 됩니다. 네 번째 유연성 결합도가 낮으면 기능의 변경이나 추가가 필요할 때 해당 모듈만 수정하거나 새로운 모듈을 추가하기 쉽기 때문인데요. 이는 시스템의 확장성과 유연성을 향상시킵니다. 다섯 번째는 이해하기 위운 각 모듈이 독립적으로 동작하고, 모듈 간의 의존성이 줄어들면서 시스템 전체를 이해하기 더 쉽기 때문입니다. 마지막으로 오류의 파급 효과를 감소하기 위함인데요. 한 모듈에서 발생하는 오류가 다른 모듈로 쉽게 전파되지 않게 되기 때문에 시스템의 안정성을 향상시키는 데 도움이 됩니다.
즉 DI는 객체의 의존성을 외부에서 주입받는 기법이며, IoC는 프로그램의 제어를 외부 요소에 위임하여 코드의 결합도를 낮추는 디자인 패턴입니다.
 

🗣️멘토님 피드백

DI와 IoC의 핵심 개념을 잘 설명했습니다. 특히 IoC가 낮은 결합도를 갖는 이유를 다각도로 분석한 부분이 좋았습니다. 하지만 “프레임워크나 라이브러리 등 외부 요소에 제어를 위임하는 것입니다.” 이 부분이 다소 모호하게 느껴집니다. 프레임워크나 라이브러리로 쓰지 말고 “Spring에게 제어를 위임한다”라고 표현하면 더 정확한 표현이 될 것입니다.
 

😄 좋은 부분

  • DI의 핵심 개념을 잘 설명
    • “DI를 사용하면 클래스 내부에서 새로운 객체를 직접 생성하는 대신 외부에서 필요한 객체를 받아와서 사용할 수 있는데요. 이를 통해 모듈 간의 결합도를 낮추고, 코드의 재사용성과 테스트 용이성을 향상시킬 수 있습니다.”
       
  • IoC의 핵심 개념을 잘 설명 ”IoC는 프로그램의 제어 흐름 구조가 전통적인 순차적 제어 흐름에서 벗어나 독립적인 모듈들이 중앙된 제어 코드 대신 사용자의 코드를 제어하게 되는 디자인 패턴을 의미합니다.”
 
  • IoC가 낮은 결합도를 갖는 이유를 다각도로 분석 1) 유지 보수성 향상 2) 사용성 향상 2) 유연성 향상 4) 이해도 향상 5) 오류 파급 효과 감소 6) 시스템 안정성 향상
 

🤔 아쉬운 부분

  • ”프레임워크나 라이브러리 등 외부 요소에게 제어를 위임하는 것입니다.” 수정 필요 ⇒ Spring에게 제어를 위임하는 것입니다.
 
 
 

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

핵심 키워드 : 디자인 패턴, 낮은 결합도, 유지 보수
 

🧑‍💻 수강생 답변

MVC 모델은 소프트웨어 디자인 패턴으로, 소프트웨어 애플리케이션을 구성하는 세 가지 핵심 요소로 구성됩니다. 첫 번째 Model (모델)은 데이터와 비즈니스 로직을 관리합니다. 두 번째 View (뷰)는 사용자에게 정보를 표시하고 모델의 데이터를 시각적으로 나타냅니다. 세 번째 Controller (컨트롤러)는 사용자 입력을 처리하고 모델과 뷰 사이의 상호 작용을 관리합니다.
MVC 모델은 다음과 같은 이점을 제공합니다. 첫 번째 느슨한 결합은 각 구성 요소가 서로 독립적으로 개발되므로 변경과 유지 보수가 쉽습니다. 두 번째 재사용성은 모델과 뷰는 다른 부분에서 재사용 가능하며, 컨트롤러도 다른 뷰와 모델과 조합하여 재사용할 수 있습니다. 세 번째 테스트 용이성은 각 컴포넌트를 독립적으로 테스트하기 쉽습니다. MVC 패턴은 복잡한 소프트웨어 애플리케이션을 구성하고 유지보수하는 데 도움이 되며, 모델, 뷰, 및 컨트롤러의 역할과 책임을 분명히 합니다.
 

🗣️멘토님 피드백

MVC 디자인 패턴에 대해서 장점 위주로 핵심 키워드인 모델, 뷰, 컨트롤러를 중심으로 잘 설명했고 이점도 핵심 키워드인 ‘느슨한 결합’, ‘재사용성’, ‘테스트 용이성’을 위주로 잘 설명했습니다. 면접 보러 가기 전날에 다시 참고해봐도 좋을 만큼 깔끔한 답변입니다.
 

😄 좋은 부분

  • MVC 디자인 패턴에 대해서 장점 위주로 핵심 키워드 위주로 잘 설명
    • 모델 “데이터와 비즈니스 로직을 관리합니다.”
      • “사용자에게 정보를 표시하고, 모델의 데이터를 시각적으로 나타냅니다.”
    • 컨트롤러
      • “사용자 입력을 처리하고 모델과 뷰 사이의 상호 작용을 관리합니다.”
         
  • MVC 모델의 이점을 핵심 키워드 위주로 잘 설명
    • 느슨한 결합
      • “각 구성 요소가 서로 독립적으로 개발되므로 변경과 유지보수가 용이합니다.”
    • 재 사용성
      • “모델과 뷰는 다른 부분에서 재사용 가능하며, 컨트롤러도 다른 뷰와 모델과 조합하여 재사용할 수 있습니다.”
    • 테스트 용이성
      • “각 컴포넌트를 독립적으로 테스트하기 쉽습니다. MVC 패턴은 복잡한 소프트웨어 애플리케이션을 구성하고 유지 보수하는 데 도움이 되며, 모델, 뷰, 및 컨트롤러의 역할과 책임을 분명히 합니다.”
 
 
 
스프링 (Spring) 기술 면접 질문, 도움이 되셨나요? 기술면접 대비는 현직 개발자의 시선에서 어떤 답변이 좋을 지를 파악할 수 있어서 취업 리부트 코스 수강생들의 만족도가 가장 높은 세션 중 하나 인데요. 앞으로도 React, Spring의 기술면접 Q&A를 꾸준히 발행할 예정이니, 관심이 있다면 항해99 블로그를 구독해주세요.
 
 
 

🚢 개발자 취업 준비 어떻게 시작해야 할지 모르겠나요? 취업으로 향하는 거친 항해에서 든든한 메이트가 되어 드리겠습니다.

취업 실패 시 교육비 0원. 반드시 취업까지 책임질 수 있다는 항해의 자신감입니다.
높은 수준의 개인 프로젝트 경험이 없는 개발 유관 전공자, 전반적인 학습이 부족한 부트캠프 수료생이라면 개발자 취업 리부트 코스에 합류하세요. 자료구조 공부, 프로젝트, 코테준비, 이력서와 면접 대비까지 취업 리부트 코스에서 한 번에 할 수 있습니다. 갈수록 높아지는 개발자 취업의 벽, 개발자 취업 리부트 코스로 11주 만에 취업의 문을 열어 보세요
 
 
 
CREDIT
글 | 송민영 팀스파르타 에디터
Share article
Subscribe to our newsletter
RSSPowered by inblog