본문 바로가기
728x90

[Spring]/Spring 기본23

스프링 컨테이너(IoC / DI 컨테이너), BeanDefinition 컨테이너(Container) 인스턴스의 생명주기(라이프 사이클)을 관리한다. 생성된 인스턴스에 추가적인 기능을 제공한다. 톰캣(WAS)은 Servlet 컨테이너를 통해 Servlet 요청을 해결한다. 스프링의 IoC / DI 컨테이너 스프링에서 객체를 생성하고 관리하며 객체 간 의존 관계를 연결해 준다. 의존 관계 주입에 포커스를 맞추어 최근에는 DI 컨테이너라고 부르는 경우도 많다. 혹은 어샘블러, 오브젝트 팩토리 등으로도 불린다. BeanFactory 스프링 컨테이너의 최상위 인터페이스이다. 스프링 빈을 관리하고 조회하는 역할을 담당한다. IoC/DI에 대한 기본 기능을 가지고 있다. ApplicationContext BeanFactory 기능을 모두 상속받아 제공한다. 보통 스프링 컨테이너라고하면 .. 2023. 2. 28.
스프링의 엔트리 포인트 클래스 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication // 1 public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); // 2 } } 엔트리포인트(Entrypoint) : 애플리케이션 시작점을 의미한다. 위 코드는 스프링을 생성하면 이미 작성되어있다. 1. @SpringBootApplication 자동 구성을 활성화한다. 애플리케이션 패키지 .. 2022. 11. 16.
스프링 부트(Spring Boot)란? 스프링 부트(Spring Boot) 스프링 프레임워크의 편리함과는 별개로 설정의 복잡함으로 인해 스프링 기반 애플리케이션 개발을 시작하기도 전에 어려움을 겪는 문제점을 해결하기 위해 생겨난 스프링 프로젝트 중 하나이다. 스프링 부트를 사용해야하는 이유 XML 기반의 복잡한 설계 방식 지양 의존 라이브러리 자동 관리 애플리케이션 설정의 자동 구성 프로덕션급 애플리케이션의 손쉬운 빌드 내장된 WAS를 통한 손쉬운 배포 WAS(Web Application Server) WAS는 구현된 코드를 빌드해서 나온 결과물을 실제 웹 애플리케이션으로 실행되게 해주는 서버이다. Java진영에서 사용되는 대표적인 WAS에는 Tomcat이 있다. Java 기반의 웹 애플리케이션을 배포하는 일방적인 방식은 개발자가 구현한 애플.. 2022. 10. 12.
아키텍처(Architecture)와 스프링 프레임워크 모듈(Spring Framework Module) 구성 아키텍처(Architecture) 건축 분야에서 유래된 용어로 요구사항을 만족하는 건축물을 짓는데 있어 청사진과 같은 역할을 한다. 소프트웨어 아키텍처(Software Architecture) 소프트웨어의 구성을 큰 그림으로 표현한 것이다. 애플리케이션(Application) 소프트웨어 종류의 하나로 좁게는 데스크탑이나 스마트폰에서 사용하는 응용 프로그램을 말하며, 넓게는 클라이언트의 요청을 처리하는 서버 애플리케이션을 뜻한다. 웹 개발을 위해 중점적으로 알고있어야 하는 아키텍처는 웹 상에서 동작하는 웹 애플리케이션을 위한 아키텍처이다. 계층형 웹 애플리케이션 아키텍처 API 계층(API Layer) 클라이언트의 요청을 받아들이는 계층으로 일반적으로 표현 계층(Presentation Layer)라고 불리.. 2022. 10. 12.
PSA(Portable Service Abstraction) PSA(Portable Service Abstraction, 일관된 서비스 추상화) 애플리케이션에서 특정 서비스를 이용할 때, 서비스의 기능을 접근하는 방식 자체를 일관되게 유지하면서 기술 자체를 유연하게 사용하는 것을 말한다. 객체지향 프로그래밍에서의 추상화 어떤 클래스의 본질적인 특성만을 추출해서 일반화하는 것을 추상화(Abstraction)라고 한다. 설계 관점에서는 추상화보다 일반화라는 표현이 더 적절한 표현일 수도 있다. 추상화된 상위 클래스를 일관되게 바로보며 하위 클래스의 기능을 사용하는 것이 일관된 서비스 추상화의 기본 개념이다. PSA가 필요한 이유 어떤 서비스를 이용하기 위한 접근 방식을 일관된 방식으로 유지함으로써 애플리케이션에서 사용하는 기술이 변경되더라도 최소한의 변경만으로 요구사.. 2022. 10. 12.
AOP(Aspect Oriented Programming) AOP(Aspect Oriented Programming, 관심 지향 프로그래밍) 애플리케이션의 핵심 업무 로직에서 로깅이나 보안, 트랜잭션 같은 공통 기능 로직들을 분리하는 것이다. 공통 관심 사항(Cross-cutting concern) : 애츨리케이션 전반에 걸쳐 공통적으로 사용되는 기능, 부가적인 관심사항이라고도 함 핵심 관심 사항(Core concern) : 애플리케이션의 주 목적을 달성하기 위한 비지니스 로직(핵심 로직)에 대한 관심사 AOP가 필요한 이유(핵심 로직에서 공통 기능을 분리하는 이유) 코드의 간결성 유지 객체 지향 설계 원칙에 맞는 코드 구현 코드의 재사용 2022. 10. 12.
IoC(Inversion of Control) & DI(Dependency Injection) IoC(Inversion of Control) 제어의 역전이라는 뜻으로 프로그램의 제어 흐름을 개발자가 아닌 외부에서 관리하는 것을 말한다. 애플리케이션 흐름의 주도권이 뒤바뀐 것으로 스프링이 주도권을 갖는다. DI(Dependency Injection) IoC 개념을 조금 구체화시킨 것으로 의존성을 주입하는 것을 뜻한다. DI는 객체 간의 관계를 느슨하게 해 준다. 의존성 주입의 예 A 클래스가 B 클래스의 기능을 사용할 때 'A클래스는 B클래스에 의존한다'라고 한다. -> 'A 클래스의 프로그래밍 로직에 B 클래스가 필요하다.' 즉, B 클래스에게 의지(의존)한다. 클래스 내부에서 다른 객체를 생성하게 되면 두 클래스 간에 의존 관계가 성립한다. 클래스 내부에서 new를 사용해 참조할 클래스의 객체를.. 2022. 10. 12.
Spring 삼각형 - POJO(Plain Old Java Object) POJO(Plain Old Java Object) Java로 생성하는 순수한 객체라는 뜻으로, POJO 프로그래밍이란 순수 자바 객체만을 사용하여 프로그래밍 코드를 작성하는 것을 말한다. POJO 프로그래밍을 위한 기본적인 규칙 Java나 Java의 스펙에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 한다. 특정 환경에 종속적이지 않아야 한다. POJO 프로그래밍이 필요한 이유 특정 환경이나 기술에 종속적이지 않으면 재사용이 가능하고, 확장 가능한 유연한 코드를 작성할 수 있다. 코드가 깔끔해지기 때문에 디버깅하기 쉬워진다. 특정 기술이나 환경에 종속적이지 않기 때문에 테스트도 단순해진다. 객체지향적인 설계를 제한없이 적용할 수 있다. 2022. 10. 11.
728x90