목록SPRING (17)
꾸물꾸물 졔의 개발공부
Spring WebFlux란 ? Spring MVC는 기본적으로 Blocking이고 동기방식을 사용한다. 비동기 처리 기능이 스프링 프레임워크 3에서 추가되어 지원되긴 하지만, Servlet은 응답을 기다리는 동안 pool의 스레드들은 여전히 지연시킬 수 있기 때문에 전체 stack이 reactive 하지는 못하다. 이러한 요구사항에 맞추어 스프링 프레임워크 5에 도입된 대안적인 모듈 WebFlux는 웹 요청을 reactive하게 다루는 데에 초점이 맞추어져 있다. 기존의 Servlet 기반의 Spring Boot는 Tomcat을 기반으로 동작한다. 반면 Spring Boot WebFlux에서는 여러가지를 고를 수 있는데 Default로 Netty를 사용한다. Tomcat은 요청 당 하나의 스레드가 동작..
🔎 WebFlux란 ? Spring WebFlux는 Spring 5에서 새롭게 추가된 모듈이다. WebFlux는 client, server에서 reactive 스타일의 어플리케이션 개발을 도와주는 스프링 모듈이다. WebFlux는 spring reactive-stack web framework이며 non-blocking에 reactive stream을 지원한다. 장점 : 고성능, spring과 완벽한 통합, netty 지원, 비동기 non-blocking 메시지 처리 단점 : 오류처리가 다소 복잡하다. Spring 5는 Spring Boot 2에서 부터 도입됬으며, Spring Boot 2의 stack은 다음과 같이 Reactive Stack과 Servlet Stack이 있다. Spring MVC vs ..
Spring Framework 스프링 프레임워크(Spring Framework)는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 Spring이라고 불린다. 즉, 스프링은 자바 기반의 웹 애플리케이션을 만들 수 있는, 포괄적인 인프라를 지원해주는 프레임워크이다. Python을 이용한 Django, Javascript를 이용한 Node.js 기반의 웹 서버 개발과 같이 Java를 사용한 Spring 을 사용하여 웹 서비스를 만들 수 있는 것이다. Spring은 자바 객체와 라이브러리들을 관리해주며, Tomcat과 같은 WAS가 내장되어 있어 자바 웹 애플리케이션을 자체적으로 구동할 수 있다. 또한, 경량 컨테이너로서 자바 객체를 Spring 내에서 직접 관리하며, 객체의 생성 및 소멸과 같은 생명주..
JPA를 사용하는 이유 중 하나인, 객체지향과 관계형 데이터베이스 간의 패러다임 불일치 객체와 관계형 데이터베이스 객체지향 프로그래밍은 추상화, 캡슐화, 상속, 다형성 등 다양한 장점을 가지고 있지만 무언가를 저장할 때에 문제가 발생할 수 있다. 특정 객체를 저장하기 위해서는 단순히 메모리가 아닌 어떤 저장소에 '영구적' 으로 보관해야 하는데, 그 중 대표적인 것이 데이터베이스이다. 객체에는 속성과 기능, 즉 필드와 메소드가 있다. 또한 객체지향 프로그래밍은 추상화, 상속 등의 개념이 있다. 하지만 저장소인 데이터베이스에는 이러한 개념들이 없다. 서로가 지향하는 목적이 다르므로 둘의 기능과 표현 방법이 모두 다르다. 이것을 객체-관계형 데이터베이스의 패러다임 불일치 라고 한다. ✔️객체 지향 - 필드와 ..
JPA (Java Persistence API) JPA란 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스 모음이다. 즉, 실제적으로 구현된 것이 아니라 구현된 클래스와 매핑 해주기 위해 사용되는 프레임워크이다. JPA를 구현한 대표적인 오픈소스로는 Hibernate가 가장 대중적이다. ❔ORM Object Relational Mapping(객체-관계-매핑)의 약자로, 프로그래밍 언어의 객체와 관계형데이터베이스의 테이블을 자동으로 매핑(연결) 해주는 도구이다. 즉. 객체와 RDB테이블 사이의 중계자 역할을 하며 자동으로 데이터를 테이블에 영속화 해준다. ORM 사용 이유 객체지향 프로그래밍은 클래스를 이용하고, 관계형데이터베이스는 테이블을 이용하는데 ..
IoC (Inversion of Control) IOC는 SPRING 뿐만 아니라 모든 프로그래밍에서 사용될 수 있는 범용적인 개념이다. IoC는 Inversion of Control의 약자로 Inversion = 역전, Control = 제어. 즉, 제어의 역전을 말한다. 말 그대로 메소드나 객체의 호출작업을 개발자가 결정하고 제어하는 것이 아니라, 외부(스프링 컨테이너)에 제어권이 넘어가 외부에 의해 결정되는 것을 의미한다. public class A { private B b; public A(){ b = new B(); } } 위와 같은 경우에는 A클래스 내부에서 new 생성자를 통해 B를 직접 생성 하고 변수에 할당해줌으로써 'A가 B에게 의존하고 있음'을 개발자가 직접 표현해주고 있다. 즉, 개..
DI (Dependency Injection) DI란 스프링뿐만 아니라 객체지향 프로그래밍에서는 통용되는 개념의 의존 관계 주입 기능으로, 객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입 시켜주는 방식이다. 여기서 외부는 스프링 컨테이너를 의미한다. 의존이란, 예를 들어 A클래스 내부에서 B 클래스의 메소드를 활용한다고 가정해보자. 만약 B 클래스의 return 타입이 변경되거나, 매개변수가 추가되는 것과 같이 B내부의 변경이 발생한다면 A 클래스도 변경되어야 한다. 이러한 경우를 "A가 B에 의존한다" 라고 표현한다. Public class A { private B b = new B(); } 기존에는 의존하는 객체를 new 생성자를 통해 직접 생성했다면, 이는 강한 결합도를 가지는 구조이다...
스프링 컨테이너(Spring Container) 스프링 컨테이너는 스프링에서 자바 객체(Bean)를 관리하는 공간이다. 본래는 개발자가 객체를 생성하고 소멸시키지만 스프링에서는 컨테이너가 이 역할을 대신해준다. 또한, 객체 간의 의존 관계를 런타임 과정에서 알아서 만들어준다. 즉, 객체의 생명주기와 제어 흐름, 의존 관계를 관리하는 역할을 한다. 컨테이너의 종류 BeanFactory와 ApplicationContext 2가지. (1) BeanFactory 빈을 생성하고 관리하며 의존관계를 설정하는 기능을 담당하는 가장 기본적인 IoC 컨테이너, 클래스 (2) ApplicationContext ApplicationContext는 BeanFactory의 상속을 받았다. 정확하게는 빈을 관리하는 기능을 물려받..