YJ의 새벽
기술면접 정리 - 백엔드 본문
- 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 |
---|