면접 준비하며 공부하는 Spring

면접 준비하며 공부하는 Spring

▶ 모델1 방식이란?

JSP에 비즈니스 로직과 화면영역을 함께 구현하는 방식. (비즈니스 로직과 화면을 분리하지 않은 방식)

비즈니스 로직이 복잡하지 않거나 소규모 프로젝트일 경우 빠르고 쉽게 개발할 수 있다는 장점이 있지만, 출력을 위한 뷰 코드와 로직처리를 위한 자바 코드가 함께 섞여있기 때문에 JSP코드 자체가 복잡하고, 분업에 용이하지 않으며 유지보수가 어렵다.

▶ 모델2 방식이란?

화면과 비즈니스 로직이 분리되어있는 방식.

화면출력을 위한 뷰 코드는 JSP에서, 로직 처리를 위한 자바코드는 Servlet에서 처리하도록 분리하기 때문에 분업이 용이하고 유지보수가 쉽다.

▶ MVC패턴이란?

데이터를 의미하는 Model, JSP와 같이 실질적으로 보여지는 페이지의 View, 그리고 클라이언트의 Request를 처리하고 View와 Model사이의 중간 통신 역할을 하는 Controller의 3가지 형태로 구분하여 소프트웨어를 개발하는 방법론.

모델2 방식은 MVC패턴을 따른 것이다.

▶ 스프링이란?

Java 기반의 엔터프라이즈 Application 개발을 빠르고 편하게 할 수 있도록 도와주는 경량 프레임워크.

왜 '경량' 프레임워크인가?

초기 서버사이드 처리는 직접 쓰레드, 소켓연결 등을 개발자들이 직접 처리했고, 개발자 마다 구현하는 방법이 다 달라 협업에 불편함이 많았다.

이런 개발 표준을 잡은것이 Java Enterprise Edition. 그리고 그 안에 많은 스펙들을 담았고, 개발자들은 그 스펙들을 구현하는 방법을 사용하기 시작했다. Servlet/JSP도 그 중 하나이다.

그러나 이 구현방법 또한 여러가지 방법으로 나뉘게 되고, 개발자들은 또 정형화, 표준화 된 방법을 찾기 시작했다.

그래서 등장한 것이 Framework이다.

많은 종류의 Framework이 등장하고 자바 진영에서는 대표적으로 EJB가 나왔지만 분산환경 처리에 특화된 EJB는 너무 무거운데다 불편한 점이 많았고, 이런 EJB에 반기를 들고 탄생한 '경량화'된 Java 엔터프라이즈용 Framework이 Spring인 것이다.

왜 스프링을 사용하는가?

스프링은 Framework이고, Framework은 개발자들이 좀 더 쉽고 편리하게 애플리케이션을 개발할 수 있도록 미리 갖춰진 구조를 말한다. Framework이 없었다면 개발자들은 처음부터 끝까지 직접 모든 구조를 만들어내야 할 것이다.

즉, 만들어진 프로그램의 성능은 개발자의 역량에 따라 극명히 갈리게 된다.

스프링은 Application 개발에 필요한 하부 구조를 포괄적으로 제공함에 따라 개발자들의 실력의 간극을 메꿔줄 수 있는 데다가 올바른 형태의 코드만 넣어준다면 일정 수준의 성능과 안정성을 보장해 줄 수 있다. 그 틀과 구조 위에서 개발자들은 핵심 비즈니스 로직에만 집중할 수 있어서 생산성 또한 향상된다.

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

객체에 대한 제어권이 개발자에게 있는 것이 아닌, 스프링 컨테이너에게 있는 것. 인스턴스의 생성부터 소멸까지의 라이프싸이클 관리 등을 컨테이너가 대신 해준다.

일반적으로 프로그램의 흐름은 main()메서드처럼 프로그램이 시작되는 지점에서 다음에 사용할 오브젝트를 결정하고, 생성하고, 오브젝트의 메서드를 호출하고, 그 메서드 안에서 다음에 사용할 것을 결정하는 식의 작업이 반복되는데, 이런 구조는 모든 종류의 작업을 '사용하는 쪽'에서 제어하는 구조다. 이런 구조가 역전된 것이 IoC이고, IoC에서는 오브젝트가 모든 제어 권한을 자신이 아닌 다른 대상에게 위임한다.

스프링프레임워크에서는 애플리케이션 코드가 프레임워크에 의해 사용되어지는 구조인데, 프레임워크 위에 개발한 클래스를 등록해 두고, 프레임워크가 흐름을 주도하는 중에 개발자가 만든 애플리케이션 코드를 사용하는 방식으로, 애플리케이션 코드는 프레임워크가 짜놓은 틀 안에서 수동적으로 동작한다고 볼 수 있다.

즉, 코드가 직접 능동적으로 동작하는 방식이 아닌, 그 제어의 권한을 프레임워크에게 위임한 방식이라고 할 수 있다.

스프링에서는 애플리케이션 컨텍스트가 빈의 생성과 관계설정 같은 제어를 담당한다.

▶ DI란?(Dependency Injection : 의존성 주입)

제어의 역행(IOC)으로 특정 객체에 필요한 다른 객체를 외부에서 결정해서 연결시키는 것.

'이건 스프링이 관리해야할 오브젝트(빈)야!' 라고 설정정보에 설정만 해준다면(applicationContext.xml) 스프링은 그 설정 정보를 참고해서 객체를 생성,관리하고 그 관계를 맺어준다.

핵심은 개발자가 new 연산자 등을 통해 객체를 생성할 필요가 없다는 것이다(제어의 역행-IoC). 개발자 입장에서는 스프링 컨테이너에게 그 참조변수만 일러준다면(@Autowired나 setter주입 등) 스프링이 알아서 객체를 생성해주고, 관계를 맺어준다. 이를 의존성 주입(DI : dependency Injection)이라고 하며 개발자는 자신의 코드에 필요한 객체를 스프링을 통해 주입받는 구조로 코드를 작성한다.

▶ Spring Container란?

제어의 역행(IOC)으로 특정 객체에 필요한 다른 객체를 외부에서 결정해서 연결시키는 것.

IoC방식으로 빈을 관리한다는 의미에서 Application Context나 Bean Factory를 컨테이너라고 부른다.

Application Context는 그 자체로 ApplicationContext 인터페이스를 구현한 오브젝트를 가리키기도 하는데, 그러한 오브젝트는 하나의 애플리케이션에서 보통 여러 개가 마들어져 사용되고, 이를 통틀어서 스프링 컨테이너라고 볼 수 있다.

from http://dreamingdreamer.tistory.com/125 by ccl(A) rewrite - 2020-03-11 15:20:27

댓글

이 블로그의 인기 게시물

데이터 바인딩 추상화 - propertyEditor

[샤니마스 SPRING PARTY2020] THE IDOLM @ STER SHINY COLORS SPRING...

Spring Web Form