[SpringBoot] POJO, IoC, DI, AOP, MVC패턴

임유빈·2022년 7월 27일
0

SpringBoot

목록 보기
6/10
post-thumbnail

1. AOP (Dependency Injection)

  • Aspect Oriented Programming로 비즈니스, DB연결, 파일송수신, 로깅 part 관점을 나눠서 모듈화하는 것이다.

(OOP를 극강의 OOP로 만든게 AOP => 완전 OOP이다.)
실제 비즈니스 로직과 공통적으로 처리할 로직을 분리해놨다가 필요한때에 적시적기에 사용할 수 있도록 하는 것으로, 트랜잭션, 로깅, 보안 등 여러 모듈, 여러 계층에서 적용되는데, 이런 코드들을 실제 비지니스 로직과 분리한다.한때, AOP가 OOP(Object Oriented Programming)를 대체하는 기술로 생각되기도 했지만, 실제로 AOP는 OOP를 더욱 OOP스럽게 보완해 주는 기술이다.

2. IoC (Inversion of Control)

  • 객체를 담는 용기인 컨테이너가 객체를 관리하는 것이다.

컨트롤의 제어권이 개발자가 아니라 프레임워크에 있으며, 객체의 생성부터 모든 생명주기의 관리까지 객체의 제어권이 바뀐 것을 의미한다. 객체를 생성하고, 직접 호출하는 자바프로그램이 아니라, 만들어둔 자원을 프레임워크에서 호출해서 사용한다.

3. DI (Dependency Injection)

  • new 연산자 없이 외부에서 객체를 주입하는 방식이다.

이는 객체간의 의존관계를 관리하는 기술로, 어떤 객체가 필요로 하는 객체를 자기 자신이 직접 생성하는 것이 아니라, 외부에 있는 다른곳에서 자신이 필요로 하는 객체를 주입받는 것이다.

4. POJO (Plain Old Java Object) - 중요!

  • 특정 객체에 종속되지 않는 필요에 따라 재활용 될 수 있는 방식의 설계이다.

일반적인 J2EE 프레임워크에 비해 특정 라이브러리를 사용할 필요가 없어서 개발이 쉬우며, 기존 라이브러리의 지원이 용이하다.

5. MVC 패턴

소프트웨어 디자인 패턴 중 하나. Model, View, Controller의 약자로 하나의 애플리케이션, 프로젝트를 구성할 때 요소를 세가지의 역할로 구분한 패턴이다.

  • Model
    애플리케이션의 정보/데이터를 나타내며 정보/데이터 가공을 책임지는 컴포넌트
  • View
    사용자 인터페이스 요소(사용자가 볼 수 있는 화면)
    데이터 및 객체의 입력, 출력을 담당
  • Controller
    데이터와 비즈니스 로직 사이의 상호 동작을 관리(Model과 View통제)
    프로그램의 작동 순서, 방식을 제어

1. MVC1

  • JSP로 구현한 기존 웹 어플리케이션은 MVC 모델 1 구조
  • JSP가 Controller, View 기능을 모두 담당
  • Model은 jdbc 인터페이스로 DB 조작하면서 class를 정의
  • JSP에 비지니스 로직을 처리하기 위한 코드(Java)와 웹 브라우저에 결과를 보여주기 위한 출력 관리 코드(HTML)가 섞임

설계가 간단하여 작은 프로젝트에 적합하며 개발 속도가 빠른 대신 코드가 복잡해져 유지 보수가 어렵다.

2. MVC2

  • 클라이언트의 요청, 응답, 비니지스 로직 처리 부분을 모듈화 시킨 구조
  • Controller는 요청에 대한 로직 처리를 model로 보내고 Model은 결과를 View로 보내 응답
  • 클라이언트 요청을 Servlet이 받음(Controller)
  • View는 JSP로 구성(JSTL을 사용해 결과 표현)

비교적 큰 프로젝트에 적합하고 설계 단계에서 비용이 많이 들어 개발 속도가 느린 단점이 있지만 확장에 용이하고 유지보수가 수월

3. Spring MVC

MVC2의 발전된 형태
1. 클라이언트의 요청을 FrontController인 DispatcherServlet이 받는다.
2. HanlderMapping을 통해 요청에 해당하는 Controller를 실행한다.
3. Controller는 적절한 서비스 객체 호출
4. Service는 DB 처리를 위해 DAO를 이용하여 데이터 요청
5. DAO는 mybatis를 이용하는 Mapper를 통해 작업 처리
6. 처리된 결과가 Controller로 전달
7. View Resolver를 통해 결과를 받을 View를 찾아서 전달
8. View는 전달 받은 결과를 다시 DispatcherServlet에게 전달
9. DispatcherServlet은 클라이언트에게 전달

4. Spring Boot

  • SpringMVC 사용 시 Component Scan, DispatcherServelt, View Resolver, jar등 복잡한 설정을 간단하게 만들어 준 것

  • 스프링 프레임워크를 사용하기 위한 설정의 많은 부분을 자동화하여 사용자가 정말 편하게 스프링을 활용할 수 있도록 한다.

  • Spring Boot Starter Dependency만 추가해주면 바로 API를 정의하고 내장된 톰캣이나 제티로 웹 애플리케이션 서버를 실행할 수 있음

  • Embed Tomcat을 사용 : Tomcat 별도 설치, 버전 관리 수고 X

  • starter을 통한 dependency 자동화 : 과거에는 각 dependency들의 호환되는 버전을 직접 맞추고 관리했어야했으나 이제는 start가 대부분의 dependency를 관리

  • XML 설정 X

  • jar file을 이용해 자바 옵션만으로 손쉽게 배포 가능

    • starter란?
      • 특정 목적을 달성하기 위한 의존성 그룹.
      • starter는 npm처럼 간편하게 dependency를 제공
      • 예를 들어 JPA가 필요하다면 prom.xml(메이븐)이나 build.gradle(그레이들)에 'spring-boot-starter-data-jpa'만 추가해주면 spring boot가 그에 필요한 라이브러리들을 알아서 받아온다.
        spring-boot-starter-* // starter 명명 규칙

0개의 댓글