Spring과 Spring Boot란? 두개의 차이는 뭔가?
결론 부터 이야기 하자면 Spring은 엔터프라이즈 어플리케이션을 위한 개발 환경(틀)을 제공해 주는 것이고
Spring Boot는 Spring의 단점을 보안해 개발자가 조금더 비즈니스 로직 개발에만 집중할 수 있게 해주는 것 이다.
❓엔터프라이즈 애플리케이션 ▶️ 대규모의 복잡한 데이터를 관리하는 애플리케이션
소프트웨어 분야가 발전하면서 엔트라이즈 애플리케이션은 점점 복잡해졌고
개발자들은 점점 사용자의 요청을 동시에 처리해야하는 등의 서비스 안정성, 보안, 성능 등을 고려하게 되었다.
점차 기능 개발에만 집중하기 힘들어졌고 이때 2003년에 스프링 프레임워크가 나왔다.
스프링 프레임워크는 서버 성능, 안정성, 보안을 매우 높은 수준으로 제공하는 도구로 스프링 덕분에 개발자들은 기능 개발에 좀더 집중 할 수 있게 되었다.
💡 IoC & DI와 싱글톤의 관계
1️⃣ Spring은 개발자가 생성한 객체를 직접 메모리에 관리하고, 이를IoC
라고 한다.
2️⃣ 이 객체를 개발자는 어느곳에서나 가져와서 사용한다. 이를DI
라고 한다.
3️⃣ DI를 통해 개발자가 객체를 가져다가 쓸때 항상 새로운 객체가 아닌 동일한 객체를 사용하게 되는데 이 이유는싱글톤
으로 관리되기 때문이다.
@Component
@Bean
@Controller
@Service
@Autowired
등...💡 IoC & DI & Annotation
Spring은 IoC와 DI를 Annotation 기법을 사용해 제공한다.
1️⃣ Spring이 @Component @Controller 등 특정 Annotation이 붙은 Class를 스캔해 메모리에 객체를 생성하고 이것을 IoC라고 한다.
2️⃣ Spring이 특정 Class를 리플렉션(클래스 스캔시 내부 분석 -메소드, 매개변수, 어노테이션 등을 체크 및 추가 설정 수행-)한 후 @Autowired가 존재하면 IoC 컨테이너에 해당 타입의 객체를 주입한다. 이것을 DI라고 한다.
java Object -> Json -> python Object
로 변환하는 과정을 거친다.@RequestBody
@ResponseBody
Annotation을 통해 쉽세 사용할 수 있다.@RequestBody
: BufferdReader가 동작@ResponseBody
: BufferdWriter가 동작✚ 통신 단위 변천사
1️⃣ 통신은 기본적으로 전기선(전류)로 bit 단위(0,1)이다.
2️⃣ 영어권에서 통신이 발전하면서 전류단위는 사람이 이해하기 힘드니 영어 1문자 단위로 통신할 수 있는 8bit(1byte) 단위가 개발되었다. ▶️ 이후 1byte가 통신 단위로 정해짐
3️⃣ 그러나 8bit로는 전 세계 언어 통신이 불가능하다. ▶️ 이 문제를 해결하기 위해, 유니코드에서 UTF-8(3byte) 통신을 제공하기 시작했다.
1️⃣ Byte Stream(1byte)를 전송하면 자바 프로그램에서는 InputStream으로 읽는다.
▶️ 1byte 단위로 읽은 후 char로 캐스팅하는데 복잡하다..
2️⃣ 1번을 해결하기 위해 InputStreamReader가 나왔다. ▶️ 문자를 배열로 받아서 읽는다. 이때 문제는 배열은 size가 정해져 있어야하니.. 메모리 낭비가 심했다.
3️⃣ 2번을 해결하기 위해 BufferdReader가 나왔다. ▶️ 가변길이 문자열을 받아서 읽는다.
💡 개발시 문자열 읽고 쓸때는 BufferdReader/Writer를 사용하자!!
관점 지향 프로그래밍은 AOP(Aspect Oriented Programming)로
프로그래밍에 대한 관심을 핵심 관점, 부가 관점으로 나누어서 관심 기준으로 모듈화 하는 것을 의미한다.
이식 가능한 서비스 추상화는 PSA(Portable Service Abstraction)로
스프링은 다양한 기술들을 추상화해 인터페이스로 제공하고 개발자는 이를 쉽세 사용할 수 있게 해준다.
아래는 대표적인 예이다.
스프링은 위 내용처럼 장점이 많지만 설정이 매우 복잡하다는 단점이 있다.
이로 인해 스프링 개발팀에서도 이런 단점을 인식하고 보안하고자 출시한 것이 Spring Boot이다.
2013년에 첫 공개되었으며 스프링 부트는 스트링 프레임워크를 더 쉽고 빠르게 이용할 수 있도록 만들어주는 도구로서
개발자가 조금 더 비즈니스 로직 개발에만 집중할 수 있도록 만들어준다.
⭐️ spring boot는 spring에 속한 도구이다.
차이점 | Spring | Spring boot |
---|---|---|
목적 | Application 개발을 더 쉽게 하기 위함 | Spring 개발을 더 빠르고 쉽게 하기 위함 |
설정 파일 | 개발자가 수동으로 구성 | 자동 구성 (Spring의 Core와 MVC 모든 기능을 자동으로 load) |
XML | 일부 파일은 XML로 직접 생성하고 관리함 | 사용하지 않음 (JAVA 코드로 모든 설정 가능) |
인메모리 DB | 지원하지 않음 | 자동 설정 지원 |
WAS 내장 | 없음 (톰켓 등 WAS 서버를 별도로 수동 설정 해야함) | 내장되어 있음 (자체적으로 가지고 있음) |