코딩 공부/Spirngboot

[Spring,SpringBoot] 스프링과 스프링부트

sintory-04 2024. 12. 31. 15:07

1) 스프링이란?

- Spring Framework 는 자바에서 가장 많이 사용되는 프레임 워크이다.

- 의존성 주입과 제어역전, 관점지향프로그래밍이 가장 중요한 요소

위 요소들을 통해 느슨한 결합을 달성할 수 있음. Loose Coupling

> 느슨한 결합으로 개발한 어플리케이션은 단위테스트를 수행하기 용이함. > 재사용을 위함.

- Spring은 Java 기반의 애플리케이션 프레임워크

- 엔터프라이즈 애플리케이션을 효율적으로 개발할 수 있도록 돕는 다양한 기능을 제공

- 현재는 다양한 하위 프로젝트들이 존재하여, 웹 애플리케이션부터 배치 처리, 마이크로서비스, 클라우드 환경까지 지원하는 범용적인 프레임워크

 

(1) 주요 특징

Ioc Inversion of Control:

- spring의 핵심 개념 중 하나는 loC임. 

- IoC는 객체의 생성 및 관리 책임을 스피링 컨테이너에게 위임하는 개념

- 애플리케이션의 결합도를 낮추고 테스트와 유지보수를 쉽게해줌.

- DI Dependency Injection: 스프링은 객체들 간의 의존선을 의존선 주입(DI) 방식으로 관리함.

- 클래스 간에 필요한 의존 객체를 자동으로 주입해줌.

② AOP Aspect-Oriented Programming:

- AOP는 관점지향 프로그래밍으로, 공통적인 관심사를 분리하여 코드의 중복을 줄이고 유지보수 용이

- 로깅, 트랜잭션 관리, 보안 등을 AOP로 처리함.

③ 모듈화

- spring 은 다양한 모듈로 구성돼 필요한 기능만 선택적 사용 가능

- Spring Web, Spring Data, Spring security, Spring Boot 등

④ 트랜잭션 관리

- 스트링은 선언적 트랜잭션 관리를 지원, DB 트랜잭션을 효율적 관리 할수있음

- 트랜잭션의 시작, 커밋, 롤백 자동으로 처리 가능

 

+) Framework

- 소프트웨어 개발에서 특정 문제를 해결하는 데 필요한 기본적인 구조와 규칙을 제공하는 도구.

- 개발자가 애플리케이션을 만들 때, 프레임워크는 여러가지 기본적인 기능을 미리 구현해 두고, 개발자가 그 위에서 필요한 기능만 추가할 수 있도록 해줍니다.

- 쉽게 말해, 기반 또는 틀을 제공하여 개발자의 작업을 더 효율적이고 조직적으로 만들어주는 도구입니다.

 

2) 스프링 부트는?

- Spring Framework의 확장으로, 빠르게 애플리케이션을 개발하고 실행할 수 있도록 도와주는 도구

- 즉, Spring Boot는 Spring Framework를 더욱 간편하게 사용할 수 있게 해주는 프레임워크임.

 

 

3) 두개의 차이점

Spring Framework는 많은 설정과 구성이 필요하고, 개발자가 직접 설정을 관리해야 하는 경우가 많음.

반면, Spring Boot는 자동 설정(Auto Configuration)을 제공하여, 개발자가 최소한의 설정만으로 애플리케이션을 시작할 수 있게 도와줌.

Spring Boot는 설정에 관한 고민을 줄여주고 빠르게 실행 가능한 애플리케이션을 만드는 데 중점을 둡니다.

 

 (1) 설정 방식 (Configuration)

 ① Spring Framework

- Spring은 설정이 매우 유연하지만, 많은 경우 XML 파일이나 Java Config 클래스를 통해 다양한 설정을 수동으로 해야함.

- Spring MVC 웹 애플리케이션을 설정할 때 web.xml 파일과 여러 Java Config 클래스를 만들어야 함
- 설정이 복잡하고, 시간이 많이 걸림.
 ② Spring Boot
- Spring Boot는 자동 설정(Auto Configuration)을 제공
-기본적으로 Spring Boot는 애플리케이션을 실행할 때 필요한 설정을 자동으로 처리> 개발자는 설정에 신경 쓸 필요가 줄어듦.
-예를 들어, Spring Boot에서 웹 애플리케이션을 개발하려면 @SpringBootApplication 애노테이션만으로 애플리케이션을 설정하고 실행할 수 있음.


(2) 애플리케이션 실행 (Running Applications)
 ① Spring Framework:
-Spring으로 만든 애플리케이션은 기본적으로 외부 서버(Tomcat, Jetty 등)에 배포되어야 실행됨.
-애플리케이션을 실행하려면 WAR 파일을 만들어서 외부 서버에 배포하거나, Tomcat 서버를 직접 설정해야 함.
 ② Spring Boot:
- Spring Boot는 내장된 웹 서버(예: Tomcat, Jetty)를 제공
- Spring Boot 애플리케이션은 실행할 때 서버가 내장되어 있기 때문에, 애플리케이션을 독립형 JAR 파일로 실행할 수 있음.
- java -jar your-app.jar 명령으로 바로 실행 가능하며, 별도로 서버를 설정할 필요가 없음.

 

(3) 프로젝트 시작과 설정
 ①Spring Framework:
-Spring 애플리케이션을 처음 시작할 때, 기본적인 설정을 하나씩 수동으로 해야 함. 이때, 필요한 라이브러리나 의존성도 수동으로 추가해야 함.
-복잡한 설정 파일들이 많이 필요하고, 여러 의존성 라이브러리를 명시해야 할 수 있습니다.
 ②Spring Boot:
-Spring Boot는 스프링 스타터(Starter)라는 개념을 통해, 기본적인 의존성들을 미리 설정해 놓고, 선택만 하면 되게 만들어 주기 때문에 프로젝트 시작이 매우 간편.
-예를 들어, spring-boot-starter-web을 포함시키면, 웹 애플리케이션에 필요한 모든 설정을 자동으로 처리해줌.
- Spring Initializr를 통해 웹 브라우저에서 쉽게 프로젝트를 생성 가능.

 

(4) 배포 형태
 ① Spring Framework:
-Spring 애플리케이션은 보통 WAR 파일 형식으로 배포됨. 이 WAR 파일은 웹 서버에서 실행되며, 서버에 배포 후 서비스를 시작해야 함.
②Spring Boot:
- Spring Boot 애플리케이션은 JAR 파일 형식으로 배포. 내장 서버를 사용하기 때문에, JAR 파일 하나로 애플리케이션을 실행할 수 있음.
- java -jar your-app.jar 명령을 통해 독립적인 실행이 가능하고, 이를 클라우드 환경이나 컨테이너에서도 손쉽게 배포할 수 있음.

 

(5) 설정 파일 및 외부 파일 처리
① Spring Framework:
- Spring은 XML 파일을 통한 설정이나 Java Config 클래스를 많이 사용. 이러한 설정 파일들은 대부분 수동으로 관리됨.
- 또한, 외부 설정 파일(properties, yaml 등)을 읽어들이기 위한 코드가 필요.
② Spring Boot:
- Spring Boot는 application.properties 또는 application.yml 파일을 통해 간단한 설정만으로도 애플리케이션을 설정할 수 있게 도와줌.
- Spring Boot는 설정 파일을 자동으로 감지하고, 추가적인 코드 변경 없이 빠르게 설정을 변경할 수 있음.

(6) 기타 기능들
① Spring Framework:
- Spring은 다양한 하위 프로젝트들을 제공하며, 각 프로젝트가 독립적으로 발전.

- 예를 들어, Spring Security, Spring Data, Spring Batch 등은 별도로 설정하고 연동해야 함.
② Spring Boot:
- Spring Boot는 **"스타터"**라는 기능을 통해, Spring의 다양한 하위 프로젝트들을 자동으로 설정하고 사용할 수 있게 해줌.

- 예를 들어, spring-boot-starter-data-jpa를 추가하면, JPA와 관련된 설정을 자동으로 처리해줌.

 

특징 Spring Framework Spring Boot
설정 복잡하고 수동 설정 필요 자동설정 제공
애플리케이션 실행 외부서버(Tomcat 등)에서 실행 내장서버로 독립형 JAR 파일 실행
프로젝트 시작 설정 및 의존성 수동 추가 Spring Initializr로 빠르게 시작 가능
배포 형태 WAR 파일 배포 JAR 파일로 독립 실행 가능
기타 다양한 서버프로젝트에 대한 개별 설정 필요 스타터 기능으로 자동화된 다양한 하위 프로그램 연동

 

 

 

'코딩 공부 > Spirngboot' 카테고리의 다른 글

[Data조회과정과 생성과정]  (0) 2025.01.11
[JPA] 개념  (0) 2025.01.10
[DTO 실습]  (0) 2025.01.10
[MVC패턴] 기본 개념  (0) 2025.01.08
[spring initializr] 시작 세팅  (0) 2024.12.31