기술면접-백엔드

최현석·2023년 2월 12일
0

기술면접

목록 보기
2/2

🧩 WAS(Web Application Server)와 WS(Web Server)의 차이를 설명해주세요.

  • WAS(Web Application Server)

    • 비즈니스 로직을 넣을 수 있음
    • Tomcat, PHP, ASP, .NET 등
  • WS(Web Server)

    • 비즈니스 로직을 넣을 수 없음
    • Nginx, Apache 등

🧩Spring Framework에 대해 설명해주세요

  • 스프링 프레임워크는 자바 개발을 편리하게 해주는 오픈소스 프레임워크입니다.

  • 경량 컨테이너로서 자바 객체를 직접관리

    • 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.
  • 제어의 역전(IOC)이라는 기술을 통해 어플리케이션의 느슨한 결합을 도모

    • 컨트롤의 제어권이 사용자가 아닌 프레임워크에 있어서 필요에 다라 스프링에서 사용자의 코드를 호출한다.
  • 의존성 주입(DI)을 지원

    • 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
  • 관점 지향 프로그래밍(AOP)을 지원

    • 트랜잭션이나 로깅 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.\

🧩 Spring Boot와 Spring Framework의 차이점을 설명해주세요.

  • 가장 큰 차이점은 Auto Configuration의 차이인 것 같습니다. Spring은 프로젝트 초기에 다양한 환경설정을 해야 하지만,
    Spring Boot는 설정의 많은 부분을 자동화하여 사용자가 편하게 스프링을 활용할 수 있도록 돕습니다.
    spring boot starter dependency만 추가해주면 설정은 끝나고, 내장된 톰캣을 제공해 서버를 바로 실행할 수 있습니다.

🧩Spring MVC에 대해 설명해주세요.

  • MVC는 Model, View, Controller의 약자이며, 각 레이어간 기능을 구분하는데 중점을 둔 디자인 패턴입니다
  • Model은 데이터 관리 및 비즈니스 로직을 처리하는 부분이며, (DAO, DTO, Service 등)
  • View는 비즈니스 로직의 처리 결과를 통해 유저 인터페이스가 표현되는 구간입니다. (html, jsp, tymeleaf, mustache 등 화면을 구성하기도 하고, Rest API로 서버가 구현된다면 json 응답으로 구성되기도 한다.)
  • Controller는 사용자의 요청을 처리하고 Model과 View를 중개하는 역할을 합니다. Model과 View는 서로 연결되어 있지 않기 때문에 Controller가 사이에서 통신 매체가 되어줍니다.

🧩 MVC는 어떠한 흐름으로 요청을 처리하는지 설명해주세요.


DispatcherServlet : 클라이언트에게 요청을 받아 응답까지의 MVC 처리과정을 통제한다.
HandlerMapping : 클라이언트의 요청 URL을 어떤 Controller가 처리할지 결정한다.
HandlerAdapter : HandlerMapping에서 결정된 핸들러 정보로 해당 메소드를 직접 호출해주는 역할을 한다.
ViewResolver : Controller의 처리 결과(데이터)를 생성할 view를 결정한다.

  1. 클라이언트는 URL을 통해 요청을 전송한다.
  2. 디스패처 서블릿은 핸들러 매핑을 통해 해당 요청이 어느 컨트롤러에게 온 요청인지 찾는다.
  3. 디스패처 서블릿은 핸들러 어댑터에게 요청의 전달을 맡긴다.
  4. 핸들러 어댑터는 해당 컨트롤러에 요청을 전달한다.
  5. 컨트롤러는 비즈니스 로직을 처리한 후에 반환할 뷰의 이름을 반환한다.
  6. 디스패처 서블릿은 뷰 리졸버를 통해 반환할 뷰를 찾는다.
  7. 디스패처 서블릿은 컨트롤러에서 뷰에 전달할 데이터를 추가한다.
  8. 데이터가 추가된 뷰를 반환한다.

🧩제어의 역전(IoC, Inversion of Control)에 대해 아는대로 설명해주세요.

  • 제어의 역전(IoC)란 모든 객체에 대한(생성, 라이프사이클 등) 제어권을 개발자가 아닌 IoC 컨테이너에게 넘긴 것을 말합니다.
    스프링에서는 IoC 컨테이너에 객체들을 생성하면 객체끼리 의존성을 주입(DI, Dependency Injection)하는 역할을 하고
    컨테이너에 등록한 객체들을 '빈'이라고 합니다.

🧩의존성 주입(DI, Dependency Injection)에 대해 설명해주세요.

  • 의존성 주입은 필요한 객체를 직접 생성하는 것이 아닌 외부로부터 객체를 받아서 사용하는 것입니다.
    이를 통해 객체간의 결합도를 줄이고 코드의 재사용성을 높일 수 있습니다.

  • 의존성 주입은 생성자 주입, 필드 주입, 세터 주입의 3 가지 방법이 있습니다.
    이 중 Spring에서 가장 권장하는 의존성 주입 방법은 생성자를 통한 주입 방법입니다.
    그 이유는 1. 순환 참조를 방지 2. 불변성을 가짐 3. 테스트에 용이하기 때문입니다.

🧩Spring Filter와 Interceptor에 대해 설명하고, 사용 예시를 설명해주세요.

  • 필터는 말 그대로 요청과 응답을 거른뒤 정제하는 역할을 합니다.
    스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너에 의해 관리가 되는 것이고, 스프링 범위 밖에서 처리됩니다.
    Dispatcher Servlet에 요청이 전달되기 전 / 후에 url 패턴에 맞는 모든 요청에 대해 부가 작업을 처리할 수 있는 기능을 제공합니다.

    • 사용 사례 :
      보안 및 인증/인가 관련 작업
      모든 요청에 대한 로깅 또는 검사
      이미지/데이터 압축 및 문자열 인코딩
      Spring과 분리되어야 하는 기능
  • 인터셉터는 요청에 대한 작업 전 / 후로 가로채 요청과 응답을 참조하거나 가공하는 역할을 합니다.
    웹 컨테이너에서 동작하는 필터와 달리 인터셉터는 스프링 컨텍스트에서 동작합니다.
    Dispatcher Servlet이 Controller를 호출하기 전 / 후에 인터셉터가 끼어들어 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공

    • 사용 사례 :
      세부적인 보안 및 인증/인가 공통 작업
      API 호출에 대한 로깅 또는 검사
      Controller로 넘겨주는 정보(데이터)의 가공

🧩 관점지향 프로그래밍(AOP, Aspect Oriented Programming)는 무엇이고, 언제 사용할 수 있을까요?

  • AOP는 핵심 비즈니스 로직에 있는 공통 관심사항을 분리하여 각각을 모듈화 하는 것을 의미하며
    공통 모듈인 인증, 로깅, 트랜잭션 처리에 용이합니다.
  • 핵심 비즈니스 로직에 부가기능을 하는 모듈이 중복되어 분포되어 있을 경우 사용할 수 있습니다.
  • AOP의 가장 큰 특징이자 장점은 중복 코드 제거, 재활용성의 극대화, 변화수용의 용이성이 좋다는 점입니다.

🧩 서블릿(Servlet)에 대해 설명해주세요.

  • 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술입니다.
  • Spring MVC에서 Controller로 이용되며, 사용자의 요청을 받아 처리한 후에 결과를 반환합니다.
    간단히 - 자바를 사용해 웹을 만들기 위해 필요한 기술
  1. 사용자(Client)가 URL을 입력하면 HTTP Request가 Servlet Container로 전송됩니다.
  2. 요청 받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체를 생성합니다.
  3. web.xml을 기반으로 사용자가 요청한 URL이 어느 서블릿에 대한 요청인지 찾습니다.
  4. 해당 서블릿에서 service메소드를 호출한 후 GET, POST여부에 따라 doGet() 또는 doPost()를 호출합니다.
  5. doGet() or doPost() 메소드는 동적 페이지를 생성한 후 HttpServletResponse객체에 응답을 보냅니다.
  6. 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킵니다.

🧩 VO와 BO, DAO, DTO에 대해 설명해주세요.

  • DAO(Data Access Object) DB의 데이터에 접근을 위한 객체를 말합니다. (Repository 또는 Mapper에 해당)
  • BO(Business Object) 여러 DAO를 활용해 비즈니스 로직을 처리하는 객체를 말합니다. (Service에 해당)
  • DTO(Data Transfer Object) 각 계층간의 데이터 교환을 위한 객체를 말합니다. (여기서 말하는 계층은 Controller, View, Business Layer, Persistent Layer)
  • VO (Value Object) 실제 데이터만을 저장하는 객체를 말합니다.

0개의 댓글