Heestory

16.스프링① 본문

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

16.스프링①

까만밀가루 2022. 11. 2. 21:21

 

1.프레임워크란

  • 원하는 기능 구현이 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 골격,뼈대
  • 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화 된 형태로 클래스를 제공
  • 재사용이 가능하여 유지보수에 안정적이며 시간과 비용면에서 효율적
  • 코드를 습득하고 이해하는데 오랜 시간이 걸리며 설계한 구조를 유지해야하므로 개발시 제약 사항이 있다.
라이브러리 VS 프레임워크
-라이브러리 : 자주 사용되는 로직을 재사용하기 편리하도록 잘 정리한 일련의 코드들의 집합
사용자는 애플리케이션의 코드의 흐름을 직접 제어
예)HTML의 클라이언트 사이드 조작을 단순화하는 JQuery, Node.js에서 npm으로 설치한 모듈

-프레임워크 : 원하는 기능 구현이 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 골격,뼈대
제어의 흐름을 프레임워크가 가지고 있음
예)자바 서버 개발에 사용되는 스프링, 웹 개발에 사용되는 Vue.js 

 

2.스프링 프레임 워크 

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

 

3.스프링 특징

  1. 제어의 역행(IoC:Inversion of Control) 
    :컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어 필요에 따라 스프링에서 사용자의 코드를 호출
    객체의 생성부터 모든 생명 주기의 관리까지 프레임워크가 주도하고 있음
  2. 의존성 주입(DI:Depedency Injection)
    :각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜줌
    설정 파일이나 어노테이션을 통해 객체간의 의존 관계를 설정하여 개발자가 직접 의존하는 객체를 생성할 필요없음
  3. 관점 지향 프로그래밍(AOP:Aspect-Oriented Programming)
    :트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리
    애플리케이션의 핵심적인 기능과 부가적인 기능을 분리해 Aspect라는 모듈로 만들어 설계하고 개발
    공통적으로 반복되는 중복코드가 발생하는데 이를 해결할 수 있도록 실행시 비즈니스 로직의 앞과 뒤에서 원하는 지점에 해당 공통 관심사를 수행할 수 있게 한다.
  4. 경량 컨테이너로서 자바 객체를 직접 관리
    :각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻음
  5. POJO(Plain Old Java Object) 방식의 프레임워크
    :일반적인 J2EE 프레임워크에 비해 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍다. 개발이 쉽다

 

4.DI란?

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

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

 

생성자 주입

  • 생성자 호출 시점에 딱 1번만 호출되는 것이 보장
  • 불변,필수 의존관계에 사용
    - 불변 : setter를 사용하기 되면 매개변수에 의해 값이 변경 될 수 있음
    - 필수 : 필드 값에 final을 넣기 때문에 무조건 값이 있어야 하며, 생성자에 들어오는 값이 있어야 한다
               → 생성자가 필수 값이기 때문에 빈 + 의존관계가 동시에 진행된다.
  • 생성자가 딱 1개만 있으면 @Autowired를 생략해도 자동 주입 된다.(스프링 빈 내에서만)
  • 생성자 주입에서만 final 키워드를 쓸 수 있다 → 컴파일 오류를 찾아준다

수정자 주입(setter 주입)

  • setter 라 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방법
  • 선택, 변경 가능성이 있는 의존 관계에 사용
  • final 존재시 setter가 안되기 때문에 필드 선언에서 final를 제외시켜야 한다.
  • 주입할 대상이 없다면 @Autowired(required = false) 로 지정한다
  • 자바빈 프로미터 규약의 수정자 메서드 방식을 사용하는 방식이다

필드 주입

  • 필드 선언에서 바로 @Autowired를 선언해 주입하는 방식이다
  • 외부에서 변경이 불가능해서 테스트가 힘들다는 단점과 DI프레임 워크가 없으면 아무것도 할 수 없다
  • 애플리케이션의 실제 코드와 관계가 없거나 @Configuration 같은 곳에서만 사용한다

일반 메서드 주입

  • 한번에 여러 필드를 주입 받을 수 있다

 

5.컨테이너란?

  • 보통 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 하는것
  • 내가 작성한 코드의 처리과정을 컨테이너에서 수행
  • 스프링 컨테이너는 DI를 통해 애플리케이션을 구성하는 컴포넌트들을 관리
  • 스프링에서 자바 객체들을 관리하는 공간
  • 스프링이 각 객체 간 의존관계를 관리

종류

  • ApplicationContext(주 사용)
    : Bean Factory보다 더 많은 기능을 제공, 미리 빈을 생성해놓아 빈이 필요할 때 즉시 사용할 수 있도록 보장
    이벤트 발행 및 구독 모델 지원 및 리소스 조회 편의성 제공, 환경변수를 구분해주는 기능 및 언어 국제화를 지원
  • Bean Factory
    : DI의 기본사항을 제공하는 컨테이너. Bean을 생성하고 분배하는 작업. 
    getBean()이 호출된 시점에서야 해당 빈을 생성

 

 

6.Bean이란? 또한, Bean 등록 방법은 무엇이 있는가?

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

스프링에서의 자바 객체 

 

빈을 등록하는 방법

  • xml 설정 파일을 이용
  • @Annotaion : Component Scan 필요 →Spring Boot 이용시 Component Scan 자동 
  • @Confiuration , @Bean

 

 

7.MVC 패턴이란

:클라이언트(사용자의 행위)가 필요한 기능을 Controller에 요청하면 Controller에 알맞은 Model에게 안내해주고 비즈니스 로직을 수행한 후, View를 찾고 결과에 맞는 데이터를 View에 전달하여 화면에 구성하도록 하는 패턴

 

구성 요소

1.Model : 백그라운드에서 동작하는 로직을 처리한다. 데이터를 가진 객체, 파라미터로 주로 쓰인다. 

Controller가 호출할 때, 요청에 맞은 역할을 수행한다. 비즈니스 로직을 구현하는 영역에서 응용 프로그램에서 데이터를 처리하는 부분이다. 비즈니스 로직이란 업무에 필요한 데이터 처리를 수행하는 응용프로그램의 일부라고 할 수 있다. DB에 연결하고 데이터를 추출하거나 저장, 삭제, 업데이트, 변환 등의 작업을 수행한다. 상태가 변화가 있을 땐 컨트롤러와 뷰에 통보해 후속 조치 명력을 받을 수 있게 한다.

2.View:컨트롤러로부터 받은 모델의 결과값을 가지고 사용자에게 출력할 화면을 만드는 일을 한다. 만들어진 화면을 웹브러우저에 전송하여 웹브라우저가 출력하게 하는 것이다. 화면에 표시되는 부분으로 추출한 데이터나 일반적인 텍스트 테이터를 표시하거나 입력폼 또는 사용자와의 상호작용을 위한 인터페이스를 표시하는 방법이다.

3.Controller:사용자의 입력처리와 흐름 제어를 담당한다.

클라이언트 요청을 받았을 때, 그 요청에 대한 실제 업무를 수행하는 모델 컴포넌트를 호출한다. 클라이언트가 보낸 데이터가 있다면 모델에 전달하기 쉽게 데이터를 가공하고, 모델이 업무를 마치면 그 결과를 뷰에게 전달한다.

 

 

8.Model1과 Model2

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

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

  • 코딩을 매우 직관적으로 한 페이지에서 일어나는 내용이 하나의 소스코드 페이지에 모두 담겨있다.
  • 코딩은 매우 쉽지만 여러 중복코드가 반복되어 유지 보수가 어렵다
  • html 태그와 <%%>안의 자바 코드의 혼용으로 인해 일명 스파게티 코드로 불리우는 읽기 껄끄러운 코드 가능성 있다.
  • 현재 백엔드, 프론트 엔드 구분이 어렵다

 

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

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

  • 비즈니스 로직과 출력 로직을 분리하여 개발 -> 뷰로직/데이터 처리 로직 분업 개발 가능->유지 보수 가능
  • 서블릿을 통해 알맞은 JSP 페이지를 호출하여 특정 데이터를 넘겨 보낼 수 있는 구조
  • 설계에서 어려움을 겪을 수 있고, 개발 난이도가 높다는 단점을 가지고 있다.
  • 코드의 재사용 / 확장성(추가적인 업데이트 부분이나 기능 확장에 대비하여 유연함 가능) / 요소에 집중 가능

2022.11.01 - [개발/Spring] - 02.Spring MVC)서블릿,JSP,MVC 패턴

(내가 작성 한 것 중에 참고하면 좋을 수업 내용)

 

 

9.스프링 MVC 흐름

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

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

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

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

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

참고 

2022.11.04 - [개발/Spring] - 04.Spring-MVC)MVC 구조의 이해

 

 

 

 

 


https://geminihoroscope.tistory.com/90

 

[기술면접] 신입이 준비하는 Spring 기술 면접

1. Framework란? 특정 형태의 소프트웨어 문제를 해결하기 위해 상호 협력하는 클래스 프레임과 인터페이스 프레임의 집합. 특정한 틀을 만들어 놓고 거기에 살을 붙여 놓음으로써 프로그램을 만들

geminihoroscope.tistory.com

https://mkil.tistory.com/532

 

웹개발자 기술면접 정리 _ Spring 관련 질문 취합

* 여러 블로그를 및 서적을 참고하여 개인적으로 정리했던 문서라 출처를 적지 못해 문제가 생기는 부분이 있다면, 문서를 비공개 또는 삭제하도록 하겠습니다. 스프링이란 무엇입니까? Spring은

mkil.tistory.com

https://wooaoe.tistory.com/15

 

[개발자 면접 대비] MVC 패턴 이란? (Model 1, Model 2)

MVC 패턴 파헤치기 https://coding-factory.tistory.com/69 참고 👩‍💻 MVC 패턴이란? MVC - Model, View, Controller의 합성어로 소프트웨어 공학에서 사용되는 소프트웨어 *디자인 패턴이다. *디자인 패턴이란? :

wooaoe.tistory.com

 

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

18.스프링②  (0) 2022.11.10
17.WEB/WAS  (0) 2022.11.10
15.JSP와 Servlet  (0) 2022.11.01
14.쿠키와 세션  (0) 2022.11.01
Section01. 문자 관련 문법 정리1  (0) 2022.10.26