YJ의 새벽

기술면접 정리 - 백엔드 본문

기술면접대비

기술면접 정리 - 백엔드

YJDawn 2023. 7. 12. 00:54

 


  • WAS ( Web Application Server) 와 WS (Web Server) 차이를 설명해라.

WAS (Web Application Server)  :   

    - 애플리케이션을 수행해주는 미들웨어 , 동적컨텐츠를 수행하는것으로 WS와 구분. 

    - 주로 데이터베이스 서버와 같이 수행.

    - 비즈니스로직을 넣을수 있음.

    - Tomcat , PHP , ASP , .NET 등 

 

WS (Web Server)

    - 클라이언트가 웹 브라우저에서 어떠한 요청을 하면 요청을 받아들여 정적컨텐츠를 제공하는 서버.

    - 비즈니스로직을 넣을수 없음.

    - Nginx , Apache 등

 

 


  • Spring Framework 에 대해 설명해라.

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

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

    ( 객체 생성, 소멸과 같은 라이프사이클을 관리하며, 스프링으로부터 필요한 객체를 얻어올수 있다. )

-- 제어의역전 (IOC) 을 통해 애플리케이션의 결합을 도모

    ( 컨트롤의 제어권이 사용자가 아닌 프레임워크에 있다. 필요에따라 스프링에서 사용자의코드를 호출 )

-- 의존성주입 (DI , Dependency Injection )

    ( 계층이나 서비스 간 의존성을 프레임워크가 서로 연결시켜준다.)

-- 관점지향 프로그래밍 (AOP , Aspect Oriented Programming) 

    ( 트랜잭션 , 로깅 ,보안 등 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당기능을 분리하여 관리)

 

 

 


  • @RequestBody , @RequestParam , @ModelAttribute 의 차이점을 설명해라.

@RequestBody :  클라이언트가 전송하는 JSON 형태의 HTTP Body 내용을 MessageConverter 를 통해

                             JavaObject로 변환시켜주는 역할.

                          -값을 주입하지않고 값을 변환시키므로  , 변수들의 생성자, 게터세터 없어도 정상적으로 할당

@RequestParam :  1개의 HTTP 요청 파라미터를 받기위해 사용.  필수여부가 true 이기에 404Error 유발.

                                required = false 로 에러를 방지.

@ModelAttribute :  HTTP Body 내용과 HTTP 파라미터의 값들을 생성자, Getter,Setter 를 통해 주입하기 위해 사용.

 

 

 


  • Spring Boot와 Spring Framework 의 차이점을 설명해라.

-- 큰 차이점은 Auto Configuration 의 차이 이다. Spring 은 프로젝트 초기에 다양한 환경설정을 해야하지만,

   Spring Boot 는 설정의 많은 부분을 자동화하여 사용자가 편하게 스프링을 활용할수 있도록 돕는다.

   dependency 만 추가해주면 설정이 끝나고, 내장된 톰캣을 제공해 서버를 바로 실행할수 있다.

 


  • Spring MVC 설명해라.

-- Model , View , Controller 의 약자이며, 각 레이어간 기능을 구분하는데 중점을 둔 디자인 패턴.

-- Model  :  데이터관리 및 비즈니스 로직을 처리하는 부분 ( DAO, DTO, Service 등)

-- View  :  비즈니스 로직의 처리 결과를 통해 유저 인터페이스가 표현되는 구간, ( 화면 )

-- Controller  :  사용자의 요청을 처리하고, Model 과 View 를 중개하는 역할을 한다.

                        Model 과 View 는 서로 연결되어있지 않기 때문에 Controller가 사이에서 매체가 되어준다.

 

-- DispatcherServlet  :  클라이언트에게 요청(request) 받아, 컨트롤러가 리턴한값을 View에 전달, 

                                     알맞은 응답 (response) 생성.

-- HandlerMapping  :  클라이언트의 요청URL을 어떤 컨트롤러가 처리할지 배정

-- ViewResolver  :  Controller의 처리결과를 생성할 View를 결정.

 

1.  클라이언트는 URL을 통해 요청을 전송.

2.  디스패쳐서블릿은 핸들러맵핑을 통해 해당요청이 어느 컨트롤러에게 온 요청인지 찾는다.

3.  디스패쳐서블릿은 핸들러 어댑터에게 요청의 전달을 맡긴다.

4.  핸들러 어댑터는 해당 컨트롤러에 요청을 전달.

5.  컨트롤러는 비즈니스 로직을 처리한 후 반환할 뷰의 이름을 반환.

6.  디스패쳐서블릿은 뷰리졸버를 통해 반환할 뷰를 찾는다.

7.  디스패쳐서블릿은 컨트롤러에서 뷰에 전달할 데이터를 추가.

8.  데이터가 추가된 뷰 봔환.

 

 


  • 제어의 역전 (Ioc , Inversion of Control ) 설명해라.

-- 제어의역전 이란 ? 

-- 모든 객체에 대한 (생성,라이프사이클) 제어권은 개발자가 아닌 Ioc 컨테이너, 스프링에게 있다 !

-- 스프링에서는 IoC 컨테이너에 객체들을 생성하면 객체끼리 의존성주입(DI)하는 역할을 하고,

   컨테이너에 등록한 객체들을 빈 이라고 한다 .!!

 


  • 의존성 주입 (DI, Dependency Injection)에 대해  설명해라.

-- 필요한 객체를 직접 생성하는 것이 아닌 외부로부터 객체를 받아서 사용하는 것 !! 

-- 객체간 결합도를 줄이고, 코드의 재사용성을 높일수 있다.

 

-- 생성자 주입, 필드주입 , 세터주입 3가지 방법이 있고.

    Spring 에서 생성자주입 방법을 권장한다.

    그 이유는 ? 

    순환 참조를 방지,   불변성을 가짐 ,   테스트에 용이.

 

 


  • 스프링 빈(Bean) 등록하는 방법 설명해라.

-- 1. @Component 어노테이션을 사용하는것. 

        Controller, Service , Repository 모두 @Component를 포함한다.

 

-- 2. 설정클래스를 따로 만들어 @Configuration 어노테이션을 붙이고,

       해당 클래스 안에서 빈으로 등록할 메소드를 만들어 @Bean 어노테이션을 붙여주면 자동으로 빈  등록 ! 

 

 


  • 스프링 빈(Bean) 의 라이프사이클 설명해라.

스프링 IoC 컨테이너 생성 --> 스프링 빈 생성 --> 의존관계 주입 --> 초기화 콜백 메소드 호출 -- > 

            사용 --> 소멸전 콜백 메소드 호출 --> 스프링 종료

 

-- 스프링은 3가지 방법으로 빈 생명주기 콜백을 관리한다.

  1. 인터페이스  ( InitializingBean, DisposableBean )

  2. 설정 정보에 초기화 메소드, 종료 메소드 지정

  3. @PostConstruct , @PreDestroy 어노테이션 지원

 


  • Spring Filter ,  Interceptor 설명해라.

-- Filter  :  요청과 응답을 거른 뒤 정제하는 역할. 

             :  스프링컨테이너가 아닌 톰캣과 같은 웹 컨테이너에 의해 관리가 되는것이고, 스프링 범위 밖에서 처리.

             :   Dispatcher Servlet 에 요청이 전달되기 전/후 에 

                 url 패턴에 맞는 모든 요청에 대해 부가 작업을 처리할 수 있는 기능을 제공.

  Filter사례  :  보안 및 인증/인가 관련작업

                   :  모든 요청에 대한 로깅 또는 검사

                   :  이미지/데이터 압축 및 문자열 인코딩

                   :  Spring과 분리되어야 하는 기능.

 

-- Interceptor  :  요청에 대한 작업 전/후 로 가로채 요청과 응답을 참조하거나 가공하는 역할.

                      : 웹컨테이너에서 동작하는 필터와는 달리 Interceptor는 스프링컨텍스트 에서 동작.

                      : Dispatcher Servlet 이 Controller 를 호출하기 전/후 에

                        인터셉터가 끼어들어 요청과 응답을 참조하거나 가공할 수 있는 기능 제공.

 Interceptor 사례  :  세부적인 보안 및 인증/인가 공통작업

                            :  API 호출에 대한 로깅 또는 검사

                            :  Controller 로 넘겨주는 정보(데이터) 의 가공.

 

 


  • 관점지향 프로그래밍 (AOP , Aspect Oriented Programming ) 설명해라.

-- AOP 는 핵심 비즈니스 로직에 있는 공통 관심사항을 분리하여 각각을 모듈화 하는것 .

   골통 모듈인 인증, 로깅, 트랜잭션 처리에 용이.

-- 핵심 비즈니스 로직에 부가기능을 하는 모듈이 중복되어 분포되어 있을 경우 사용할수 있다.

-- 중복 코드 제거, 재활용성의 극대화 , 변화수용의 용이성이 좋음.

 

 


  • Lombok 라이브러리 설명해라.

-- Lombok 은 메소드를 컴파일하는 과정에 개입해서 추가적인 코드를 만들어낸다.

   이것을 어노테이션 프로세싱 이라고 하고, 

   어노테이션 프로세싱은 자바 컴파일러가 컴파일 단계에서 어노테이션을 분석하고 처리하는 기법이다.

 

 

 


  • 서블릿 (Servlet )설명해라.

-- 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹프로그래밍기술

-- Spring MVC 에서 Controller 로 이용되며, 사용자의 요청을 받아 처리한 후 결과를 반환.

 

1. 사용자가 URL 을 입력하면 HTTP Request가 Servlet Container로 전송 .

2. 요청받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체 생성.

3. web.xml 을 기반으로 사용자가 요청한 URL 이 어느 서블릿에 대한 요청인지 찾는다.

4. 해당 서블릿에서 service 메소드를 호출한 후, GET,POST 여부에 따라 doGet() , doPost() 호출.

5. doGet(), doPost() 메소드는 동적페이지를 생성한 후 HttpServletResponse 객체에 응답을 보냄.

6. 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸.

 

 


  • DTO, BO, DAO, VO 설명해라.

--  DTO ( Data Transfer Object ) : 각 계층간 데이터 교환을 위한 객체.  

                Controller , View 

--  BO  ( Business Object )  :  여러 DAO 를 활용해 비즈니스 로직을 처리하는 객체 

                Service

--  DAO ( Data Access Object )  :  DB의 데이터에 접근을 위한 객체. 

                Repository , Mapper

--  VO  ( Value Object )  :  데이터를 저장하는 객체. 

 

 


  • 대용량 트래픽에서 장애가 난다면 ??

-- 스케일업을 통해 하드웨어 스펙을 향상    /   스케일아웃을 통해 서버를 여러대 추가해 시스템을 증가.

 

-- 스케일업 ??

   -기존 서버의 사향을 업그레이드해 시스템을 확장하는것.

   -CPU  , RAM 등을 추가

-- 스케일아웃 ??

   -서버를 여러 대 추가하여 시스템을 확장하는것.

   -서버가 여러대로 나뉘기때문에, 서버에 걸리는 부하를 균등하게 해주는 '로드밸런싱'이 필수적으로 동반

 

 


  • Spring 싱글톤 패턴 설명해라.

-- 스프링 Bean 설정시 별다른설정이 없으면 default로 싱글톤이 적용.

-- 스프링은 컨테이너를 통해 직접 싱글톤 객체를 생성하고 관리,

-- 요청이 들어올때마다 매번 객체를 생성하지 않고,

    이미 만들어진 객체를 공유하기때문에 효율적인 사용이 가능.

-- static , private 생성자를 사용하지않아 객체지향적 개발을 할수있다. ( 테스트하기 편하다 )

 

 


  • Spring의 스코프 프로토 타입 빈에 대해 설명해라.

-- 프로토타입빈은 싱글톤과 달리 컨테이너에게 빈을 요청할때마다 매번 새로운 객체를 생성하여 반환.

-- 빈의 scope를 간단하게 관리해줄수있는것이 Spring 의 장점.

-- @Scope 어노테이션으로 설정하며

    ex ) @Scope("prototype")

 

 


  • @Transactional 의 동작원리 에 대해 설명해라.

-- @Transactional 을 메소드 또는 클래스에 명시하면, 

   AOP 를 통해 Target 이 상속하고 있는 인터페이스 또는 Target 객체를 상속한 Proxy 객체가 생성되며,

  Proxy 객체의 메소드를 호출하면 Target 메소드 전 후로 트랜잭션 처리를 수행.

 

 

 

 

'기술면접대비' 카테고리의 다른 글

기술면접 정리 - JAVA  (0) 2023.07.13
Comments