Heestory

신입 스프링 기술 면접 List 본문

개발(~국비)/기술면접

신입 스프링 기술 면접 List

까만밀가루 2022. 11. 15. 22:48

 

1.프레임워크란

원하는 기능 구현이 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 골격,뼈대

소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화 된 형태로 클래스를 제공

재사용이 가능하여 유지보수에 안정적이며 시간과 비용면에서 효율적

코드를 습득하고 이해하는데 오랜 시간이 걸리며 설계한 구조를 유지해야하므로 개발시 제약 사항이 있다.

제어의 흐름을 프레임워크가 가지고 있음

+라이브러리 : 자주 사용되는 로직을 재사용하기 편리하도록 잘 정리한 일련의 코드들의 집합

사용자는 애플리케이션의 코드의 흐름을 직접 제어

)HTML의 클라이언트 사이드 조작을 단순화하는 JQuery, Node.js에서 npm으로 설치한 모듈

 

 

2.스프링 프레임 워크

자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크

 

 

3.스프링 특징

제어의 역행(IoC:Inversion of Control)

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

객체의 생성부터 모든 생명 주기의 관리까지 프레임워크가 주도하고 있음

의존성 주입(DI:Depedency Injection)

:각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜줌

설정 파일이나 어노테이션을 통해 객체간의 의존 관계를 설정하여 개발자가 직접 의존하는 객체를 생성할 필요없음

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

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

애플리케이션의 핵심적인 기능과 부가적인 기능을 분리해 Aspect라는 모듈로 만들어 설계하고 개발

공통적으로 반복되는 중복코드가 발생하는데 이를 해결할 수 있도록 실행시 비즈니스 로직의 앞과 뒤에서 원하는 지점에 해당 공통 관심사를 수행할 수 있게 한다.

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

:각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻음

POJO(Plain Old Java Object) 방식의 프레임워크

:일반적인 J2EE 프레임워크에 비해 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍다. 개발이 쉽다

 

 

4.DI?

:의존성 주입의 약자로, 객체들 간의 의존성을 줄이기 위해 사용되는 스프링의 IoC 컨테이너의 구체적 구현 방식

생성자 주입, setter 주입, 필드 주입,일반 메서드 주입

DI 장점

- 객체 상호 간 의존성 관계를 줄여주고, 코드 재사용과 조합이 용이, 코드들이 분리되어 있어 가독성이 뛰엄

 

 

5. Spring BootSpring Framework의 차이점을 설명해주세요.

가장 큰 차이점은 Auto Configuration의 차이인 것 같습니다. Spring은 프로젝트 초기에 다양한 환경설정을 해야 하지만,Spring Boot는 설정의 많은 부분을 자동화하여 사용자가 편하게 스프링을 활용할 수 있도록 돕습니다.

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

 

 

6. Spring AOP?

AOP(Aspect Orinted Programming)은 관점 지향 프로그래밍이다.

핵심 비즈니스 로직과 공통 로직을 분리해서 응집도가 높게 개발할 수 있도록 지원한다.

공통으로 사용하는 기능들을 외부로 독립된 클래스로 분리한다.

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

 

 

7.컨테이너란?

보통 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 하는것

내가 작성한 코드의 처리과정을 컨테이너에서 수행

스프링 컨테이너는 DI를 통해 애플리케이션을 구성하는 컴포넌트들을 관리

스프링에서 자바 객체들을 관리하는 공간

스프링이 각 객체 간 의존관계를 관리

-종류

ApplicationContext(주 사용)

: Bean Factory보다 더 많은 기능을 제공, 미리 빈을 생성해놓아 빈이 필요할 때 즉시 사용할 수 있도록 보장

이벤트 발행 및 구독 모델 지원 및 리소스 조회 편의성 제공, 환경변수를 구분해주는 기능 및 언어 국제화를 지원

Bean Factory

: DI의 기본사항을 제공하는 컨테이너. Bean을 생성하고 분배하는 작업.

getBean()이 호출된 시점에서야 해당 빈을 생성

 

 

8.빈이란?

Spring LoC 컨테이너가 관리하는 자바 객체, 스프링 컨테이너가 생성한 객체들 / 스프링에서의 자바 객체

- 빈을 등록하는 방법

xml 설정 파일을 이용

@Annotaion : Component Scan 필요 Spring Boot 이용시 Component Scan 자동

@Confiuration , @Bean

 

 

9.xml을 이용한 bean관리와 어노테이션을 이용한 bean관리의 장단점

xml을 이용한 bean 관리

단점

- 빈의 성격구분을 하기 힘들다.

- 어플리케이션의 크기가 커질수록 xml파일에 작성되는 빈의 양이 커진다.

어노테이션을 이용한 bean 관리

장점

- 개발자가 특별한 선언을 하지 않아도 Component 관련 애노테이션만을 붙여주면 auto-scan되어 빈이 등록되게 된다.

 

 

10.Spirng BeanScope에 대해 설명하시오.

Bean Scope는 빈이 존재할 수 있는 범위를 뜻하며 싱글톤, 프로토타입, request, session, application 등이 있다.

 

 

11.Spring에서 CORS 에러를 해결하기 위한 방법은?

Servlet Filter를 사용하여 커스텀한 CORS 설정을 한다.

WebMvcConfiguer를 구현한 Configuration 클래스를 만들어서 addCorsMappings()를 재정의 한다.

Spring Security에서 CorsConfigurationSourceBean으로 등록하고 config에 추가한다.

 

 

12.메이븐

Apache Maven은 자바용 프로젝트 관리도구로 Apache Ant의 대안으로 만들어졌다.

Apache License로 배포되는 오픈 소스 소프트웨어이다.

 

 

13.메이븐의 장점

- 라이브러리의 관리를 매우 용이하게 해준다.

- 프로젝트의 작성부터 컴파일, 페트스 등 프로젝트 라이프사이클에 포함되는 각 테스트를 지원해준다.

 

 

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

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

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

View는 비즈니스 로직의 처리 결과를 통해 유저 인터페이스가 표현되는 구간입니다. (html, jsp, tymeleaf, mustache 등 화면을 구성하기도 하고, Rest API로 서버가 구현된다면 json 응답으로 구성되기도 한다.)

Controller는 사용자의 요청을 처리하고 ModelView를 중개하는 역할을 합니다. ModelView는 서로 연결되어 있지 않기 때문에 Controller가 사이에서 통신 매체가 되어줍니다.

 

 

15.Model1Model2

Model1 : 비즈니스 로직 영역(Controller)에 뷰 영역을 같이 구현하는 방식이다.

 

사용자의 요청을 JSP(View)가 전부 다 처리한다. 요청 받은 JSP는 자바빈이나 서비스 클래스를 사용하여 웹 브라우저가 요청한 작업을 처리하고 그 결과를 출력한다.

 

코딩을 매우 직관적으로 한 페이지에서 일어나는 내용이 하나의 소스코드 페이지에 모두 담겨있다.

코딩은 매우 쉽지만 여러 중복코드가 반복되어 유지 보수가 어렵다

html 태그와 <%%>안의 자바 코드의 혼용으로 인해 일명 스파게티 코드로 불리우는 읽기 껄끄러운 코드 가능성 있다.

현재 백엔드, 프론트 엔드 구분이 어렵다

 

Model2 : MVC패턴을 웹에 적용한 케이스

웹 브라우저 사용자의 요청을 서블릿이 받는다. 서블릿은 요청을 뷰로 보여줄지 모델로 보여줄지 정하여 전송하고 여기서 View페이지는 사용자에게 보여주는 역할만 담당하고 실질적인 기능 부분은 Model에서 담당한다.

 

비즈니스 로직과 출력 로직을 분리하여 개발 -> 뷰로직/데이터 처리 로직 분업 개발 가능->유지 보수 가능

서블릿을 통해 알맞은 JSP 페이지를 호출하여 특정 데이터를 넘겨 보낼 수 있는 구조

설계에서 어려움을 겪을 수 있고, 개발 난이도가 높다는 단점을 가지고 있다.

코드의 재사용 / 확장성(추가적인 업데이트 부분이나 기능 확장에 대비하여 유연함 가능) / 요소에 집중 가능

 

 

16.스프링 MVC 흐름

DispatcherServlet : 클라이언트에게 요청을 받아 응답까지 MVC처리과정을 통제한다.

HadlerMapping : 클라이언트의 요청 URL을 어떤 Controller 가 처리할지 결정한다.

HandlerAdapter : HandlerMapping에서 결정된 핸들러 정보로 해당 메소드를 직접 호출해주는 역할을 한다.

ViewResolver : Controller의 처리 결과(데이터)를 생성할 view를 결정한다.

 

클라이언트는 URL 요청을 전송

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

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

핸들러 어댑터는 해당 컨트롤러에게 요청을 전달한다.(김영한 -> 실제 핸들러 = 컨트롤러)

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

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

디스패처 서블릿은 컨트롤러에서 뷰에 전달한 데이터를 추가한다.

데이터가 추가된 뷰를 반환한다.

 

 

17.스프링 빈의 라이프사이클은 어떻게 관리되는지 설명해주세요.

먼저 스프링 BeanLifeCycle은 다음과 같습니다.

스프링 IoC 컨테이너 생성 스프링 빈 생성 의존관계 주입 초기화 콜백 메소드 호출 사용 소멸 전 콜백 메소드 호출 스프링 종료

스프링은 크게 3가지 방법으로 빈 생명주기 콜백을 관리합니다.

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

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

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

 

18. Lombok 라이브러리에 대해 알고 있나요? 알고 있다면 롬복이 만드는 메소드들이 생성되는 시점은 언제인가요?

Lombok은 메소드를 컴파일 하는 과정에 개입해서 추가적인 코드를 만들어냅니다. 이것을 어노테이션 프로세싱이라고 하는데,어노테이션 프로세싱은 자바 컴파일러가 컴파일 단계에서 어노테이션을 분석하고 처리하는 기법을 말합니다.

 

 

19. VOBO, 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) 실제 데이터만을 저장하는 객체를 말합니다.

 

 

20.Spring의 싱글톤 패턴에 대해 설명해주세요.

스프링에서 bean 생성시 별다른 설정이 없으면 default로 싱글톤이 적용됩니다.

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

요청이 들어올 때마다 매번 객체를 생성하지 않고, 이미 만들어진 객체를 공유하기 때문에 효율적인 사용이 가능합니다.이를 통해 다음과 같은 장점을 얻을 수 있습니다.

static 메소드나 private 생성자 등을 사용하지 않아 객체지향적 개발을 할 수 있다.

테스트하기 편리하다.

 

 

21.Spring의 스코프 프로토 타입 빈에 대해 설명해주세요.

프로토타입 빈은 싱글톤(default bean) 빈과는 달리 컨테이너에게 빈을 요청할 때마다 매번 새로운 객체를 생성하여 반환해줍니다.이렇게 빈의 scope를 간단하게 관리해줄 수 있는 것이 spring의 장점입니다.

빈의 scope 설정은 @Scope 어노테이션으로 설정하며, 프로토타입 scope로 설정하려면 @Scope(”prototype”)와 같이 문자열로 지정해줍니다.

 

 

22.@Transactional의 동작 원리에 대해 설명해주세요.

@Transactional을 메소드 또는 클래스에 명시하면, AOP를 통해 Target이 상속하고 있는 인터페이스 또는 Target 객체를 상속한 Proxy 객체가 생성되며, Proxy 객체의 메소드를 호출하면 Target 메소드 전 후로 트랜잭션 처리를 수행합니다.

 

 

23.WEB / WAS(Web Application Service)

WEB

- HTML 문서같은 정적 컨텐츠를 처리하는 것

- Http 프로토콜을 기반으로, 클라이언트의 요청을 서비스하는 기능

- 정적 컨텐츠 제공 : WAS를 거치지 않고 바로 제공

- 동적 컨텐츠 제공을 위한 요청 전달 : 클라이언트 요청을 WAS에 보내고, WAS에서 처리한 결과를 클라이언트에게 전달

- Apache

WAS

- DB조회 및 다양한 로직 처리 요구시 동적인 컨텐츠를 제공하기 위해 만들어진 애플리케이션 서버

- HTTP 통해 애플리케이션을 수행해주는 미들웨어

- 웹 서버 + 웹 컨테이너(JSP, Servlet을 실행시킬 수 있는 소프트웨어)

- 웹 서버 기능들을 구조적으로 분리하여 처리

- 프로그램 실행 환경 및 DB 접속 기능 제공, 여러 트랜잭션 관리 기능, 업무 처리하는 비즈니스 로직 수행

- Tomcat

 

 

24. @RequestBody, @RequestParam, @ModelAttribute의 차이를 설명해주세요.

@RequestBody 는 클라이언트가 전송하는 JSON 형태의 HTTP Body 내용을 MessageConverter를 통해 Java Object로 변환시켜주는 역할을 합니다.값을 주입하지 않고 값을 변환 시키므로(Reflection을 사용해 할당), 변수들의 생성자, Getter,Setter가 없어도 정상적으로 할당된다.

@RequestParam 1개의 HTTP 요청 파라미터를 받기 위해 사용합니다. @RequestParam은 필수 여부가 true이기 때문에,기본적으로 반드시 해당 파라미터가 전송되어야 합니다. 전송되지 않으면 400Error를 유발할 수 있으며,

반드시 필요한 변수가 아니라면 required의 값을 false로 설정해줘야 합니다.

@ModelAttribute HTTP Body 내용과 HTTP 파라미터의 값들을 생성자,Getter,Setter를 통해 주입하기 위해 사용합니다.값 변환이 아닌 값을 주입시키므로 변수들의 생성자나 Getter,Setter가 없으면 변수들이 저장되지 않는다.

 

 

25.인터셉터와 필터의 차이점

-공통점 : 컨트롤러가 호출되기 전에 실행

-인터셉터 : 디스패처가 호출된 후 호출, 클라이언트 요청에 따른 인증, 권한 등의 디테일한 처리시

-필터 : 디스패처 호출 전에 호출, 인코딩이나 보안 같은 web app에 전역적으로 처리하는 로직 담당

 

'개발(~국비) > 기술면접' 카테고리의 다른 글

신입 자바 기술 면접 List  (1) 2022.11.15
18.스프링②  (0) 2022.11.10
17.WEB/WAS  (0) 2022.11.10
16.스프링①  (0) 2022.11.02
15.JSP와 Servlet  (0) 2022.11.01