Web/Spring Boot

Spring Boot 개념

Devwon99 2024. 3. 28. 03:57

 

 

[지금 무료] 스프링부트 개념정리(이론) 강의 - 인프런

스프링부트를 공부하며 헷갈리는 개념이 많았던 분 스프링부트에 대해 공부하고 싶었던 모든 분, 스프링부트의 핵심은확실한 개념으로부터! 스프링부트 너무 어려운데 어떻게 시작하지? 🥲 이

www.inflearn.com

 

스프링은 프레임워크이다.

- 프레임워크란 ?

일정한 틀에서 일하다는 뜻으로 소프트웨어를 개발하기 위해서 여러 기능을 가진 클래스와 라이브러리가 합쳐친 형태

 

스프링은 오픈소스이다.

- 오픈소스란 ?

소스코드가 누구나 접근하고 열람할 수 있도록 공개된 코드이고 내부를 확인할 수 있다. 무료로 사용할 수 있고 내부를 수정하여 본인이 필요한 동작을 하게끔 만들 수 있다.

 

스프링은 IoC컨테이너이다.

- IoC란 ?

Inversion of Control 제어의 역전으로, 소프트웨어의 설계 원칙 중 하나로 객체의 생성 및 관리 책임을 개발자가 아닌 프레임워크에 위임하는 디자인 원칙이다. 쉽게말해서 스프링에게 주도권을 뺏긴 것이다.

자바에서의 class(클래스)는 설계도이고, object(객체)는 실체화가 가능한 것이고, instance(인스턴스)는 실체화 된 것을 의미한다.

주도권이 스프링에 있다는 것은 개발자가 직접 object를 new를해서 heap(메모리 공간)에 올리게 된다면 해당 object의 주소는 object 선언시 사용된 함수에서 관리한다. 다수의 object를 생성시 중복되는 object 가 생길 수 있고 관리, 유지보수에 있어서 불리하다. 그래서 이 관리를 스프링에서 해준다는 의미이다.

 

스프링은 DI를 지원한다

- DI란 ?

Dependency Injection 의존성 주입으로 과거에는 개발자가 직접 object의 주소를 관리했지만, IoC로 인해서 스프링이 스캔을 하여 모든 object를 관리하게 되는데, 해당 object를 내가 원하는 모든 곳(모든 class의 method)에서 사용하게 하는것은 DI이다. 각각의 class에서 사용하는 object는 모두 동일한 object(싱글톤(하나의 객체만을 생성해서 모든 곳에서 사용할 수 있도록 하는 디자인 패턴))로 스캔시에는 해당 object는 메모리해 1번만 확인되고 공유해서 사용하는 방식이다.

 

스프링은 다수의 필터를 가지고 있다.

- 필터란 ?

권한에 따라 검열의 기능을 해주는 문지기와 같은 역할을 한다. 필터는 스프링의 자체 필터와 개발자가 생성할 수 있는 필터가 있다. 톰켓과 스프링 컨테이너는 각각의 필터가 있는데 톰켓에서 사용되는 필터는 web.xml이고 스프링 컨테이너에서 사용되는 필터는 인터셉터(AOP)이다.

 

스프링은 다수의 어노테이션을 가지고 있다.

- 어노테이션이란 ?

어노테이션은 주석인데 원래 주석이란 컴파일러가 무시하고 개발자의 소통의 수단으로 사용되는데, 어노테이션은 컴파일러에게 힌트를 주는 주석으로 컴파일러가 무시하지 않는다(컴파일체킹). 자바에서의 @override, @Inherited 등이 어노테이션에 해당한다. 스프링에서는 어노테이션을 통해 객체를 생성한다. 리플렉션은 특정 클래스가 메서드, 필드, 어노테이션을 갖고있는지 분석하는 기법이고 런타임때 일어난다.

 

스프링은 MessageConverter를 가지고 있다.

- MessageConverter이란 ?

본래 xml을 사용했지만 현재는 json을 사용한다. 파이썬 프로그램과 자바 프로그램 간의 요청, 응답시 각 언어가 아닌 json 데이터로 변환하여 송신, 수신하는 것이다. 이때 변환해 주는 것을 MessageConverter이라 한다.

 

스프링은 BufferedReader와 BufferedWriter를 쉽게 사용할 수 있다.

- BufferedReader란 ? 

입력되는 값에 대해서 메모리가 낭비되지 않게 하기 위해서 가변길이의 문자를 받을 수 있는 BufferedReader를 사용한다. 

스프링에서는 어노테이션 @ResponseBody, @RequestBody를 통해서 BufferedReader와 BufferedWriter을 쉽게 사용할 수 있다.