34일차(spring Framework의 특징)

Rina's·2023년 5월 30일

코드스테이츠

목록 보기
34/96

🌸Spring Framework

🌿Spring Boot 프로젝트 생성

https://start.spring.io/

Spring Initializr

  • add Lombok, Spring Web


main 실행 후 Started Section2Week3Application 출력 확인

🌿Library

  • 애플리케이션을 개발하는 데 사용되는 일련의 데이터 및 프로그래밍 코드
  • 필요하면 골라 사용하는 부품과 같은 것
  • Library는 애플리케이션 흐름의 주도권이 개발자에게 있는 반면,
  • Framework은 애플리케이션 흐름의 주도권이 Framework에 있다

Spring Boot > Spring MVC > Java Servlet

🌿서블릿

서블릿 클래스를 구현하는 서버 프로그램. 웹페이지를 동적으로 생성
서블릿 클래스는 클라이언트 요청을 처리하여 리턴하는 자바 클래스

🌿서블릿 컨테이너

서블릿의 생명주기를 관리하고 클라이언트의 HTTP 요청을 받아 해당 요청을 처리하는 서블릿을 호출하는 프로그램. 또한 서블릿과 관련된 기능들을 제공하여 개발자가 웹 애플리케이션을 구축할 수 있도록 함

아파치 톰캣
서블릿 컨테이너만 있는 웹 애플리케이션 서버, 서블릿 컨테이너를 제공

🍀POJO(Plain Old Java Object)

자바에서 일반적인 OOP의 원칙을 따른 간단한 자바 객체를 의미
특정한 프레임워크나 라이브러리에 종속되지 않으며,
순수한 자바 클래스로서 비즈니스 로직을 담는다
가벼우며 유연하고 재사용 가능한 객체를 만들기 위한 목적으로 사용

객체지향 설계를 위한 SOLID

  • SRP(Single Responsibility Principle)
    단일 책임의 원칙, 각 기능들은 하나의 책임을 수행하는데 집중해야 한다

  • OCP(Open Close Principle)
    개방폐쇄의 원칙, 확장에는 열려있고, 변경에는 닫혀 있어야 한다

  • LSP(The Liskov Substitution Principle)
    리스코브 치환의 원칙, subclass의 객체는 superclass의 참조 변수에 대입해서 superclass의 역할을 수행하는데 문제가 없어야 한다

  • ISP(Interface Segregation Principle)
    인터페이스 분리의 원칙, 하나의 인터페이스를 조금 더 구체적인 인터페이스로 쪼개는것이 낫다

  • DIP(Dependency Inversion Principle)
    의존성 역전의 원칙, 자주 변경되는 구체 클래스에 의존하지 않고, 추상화(일반화) 된 클래스에 의존하라

POJO를 위한 Spring의 기술 지원
IoC/DI(Inversion Of Control/Dependency Injection)
AOP(Aspect Oriented Programming)
PSA(Portable Service Abstraction)

🍀IoC/DI

IoC(제어의 역전)

애플리케이션 흐름의 주도권 역전, 사용자에게 있지 않고 프레임워크나 서블릿 컨테이너 등 외부에 있는것

서블릿 컨테이너는 main()메서드(엔트리 포인트)가 아닌 서블릿 컨테이너 내의 service()메서드가 서블릿을 실행시킨다
애플리케이션의 주도권이 컨테이너에 있다 -> IoC(제어의 역전)
SpringApplication.run → Tomcat(서블릿 컨테이너) 실행 → service()로 요청 처리

DI(의존성 주입)

IoC의 구현방식 중 하나, 외부에서 의존성을 생성하여 주입하여 사용
이를 통해 객체 간의 결합도를 낮춘다
간단하게 객체를 파라미터로 생성자에 전달하는 것

클래스 내부에서 new를 사용해 직접 생성한다면 결합도를 높히게 된다
이를 바꿔 스프링에게 제어권을 위임하여 스프링이 만들어 놓은 객체 주입

* '의존한다'라는 말이 햇갈린다면 '사용한다'로 볼 것
A클래스가 의존(사용)하는 B객체를 따로 선언하지 않고 IoC컨테이너가 제공(주입)
개발자(수동)와 프레임워크의 관계 역전

Spring 프레임워크에서는 IoC 컨테이너를 통해 의존성 주입을 관리해 준다

🍀AOP(관심 지향 프로그래밍)

애플리케이션의 핵심업무 로직에서 (로깅이나 보안, 트랜잭션 같은)공통기능 로직들을 분리해 쉽게 적용할 수 있도록 도움. 코드를 간결하게 하고 객체 지향적인 코드를 구현

🍀PSA(일관된 서비스 추상화)

서비스 추상화를 통해 환경의 변화와 관계없이 일관된 접근방식을 가능하게 함. (쉽게 말해 잘 만든 인터페이스)
Spring에서 트랜잭션 서비스, 메일 서비스, Spring Data 서비스 등에 PSA를 적용한다

profile
갭린이 리나

0개의 댓글