Spring과 Spring Boot 이해하고 넘어가기

SEUNGJUN·2024년 3월 14일
post-thumbnail

Spring과 Spring Boot는 둘 다 Java 기반의 웹 애플리케이션을 개발하는 데 사용되는 프레임워크이다. 그러나 두 프레임워크는 몇 가지 중요한 차이점이 있다.

1. 설정의 용이성

Spring: 강력한 기능을 제공하지만 설정이 상대적으로 복잡하다. XML, Java Config, Annotation을 사용하여 설정할 수 있다. 개발자가 더 많은 제어를 원한다면 Spring이 유용할수 있다.

예를들어, 데이터베이스 연결 설정을 XML 파일에 작성하는 경우 다음과 같이 작성해야 한다.

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/mydatabase" />
    <property name="username" value="username" />
    <property name="password" value="password" />
</bean>

Spring Boot: 프로젝트를 시작하기 위한 많은 설정을 자동으로 처리한다. 스프링 부트의 목표는 가능한 적은 설정으로 애플리케이션을 시작하는 것이다.

예를들어, 데이터베이스 연결을 위해 application.properties OR application.yml 파일에 속성만 설정하면 된다.

spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=username
spring.datasource.password=password

2. 의존성 관리

Spring: 프로젝트는 필요한 의존성을 직접 관리해야 한다. 이를 위해 Maven이나 Gradle과 같은 빌드 도구를 사용하여 의존성을 관리한다.

Spring Boot: 스타터 의존성이라는 개념을 도입하여 의존성 관리를 단순히 한다. 스타터 의존성은 특정 기술 스택을 사용하기 위해 필요한 모든 의존성을 하나의 의존성으로 묶어 제공한다.

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'		// JPA
	implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'	// OAUTH2
}

위처럼 Spring Boot에서는 스타터 팩을 이용해서 목적에 필요한 모든 라이브러리를 하나의 의존성으로 묶어서 제공을 해준다.

3. 내장 서버

Spring: 내장 서버를 제공하지 않는다. 따라서 애플리케이션을 배포할 때 별도의 서버(Ex: Apache Tomcat)를 사용해야 한다.

Spring Boot: 내장 서버를 제공한다. 이는 애플리케이션을 실행하기 위해 별도의 서버 설정이 필요하지 않음을 의미한다. 내장 서버로는 Tomcat, Jetty, Undertow 등이 있다.

3. 내장 서버

Spring: 내장 서버를 제공하지 않는다. 따라서 애플리케이션을 배포할 때 별도의 서버(Ex: Apache Tomcat)를 사용해야 한다.

Spring Boot: 내장 서버를 제공한다. 이는 애플리케이션을 실행하기 위해 별도의 서버 설정이 필요하지 않음을 의미한다. 내장 서버로는 Tomcat, Jetty, Undertow 등이 있다.

4. 배포 가능성

Spring: 애플리케이션은 보다 세밀한 제어를 원하는 경우에 유용하다. 대규모 애플리케이션 및 기업 환경에서 사용될수 있다.

Spring Boot: 빠르고 간편한 개발 및 프로토타이핑을 위해 사용된다. 간단한 마이크로서비스나 클라우드 기반 애플리케이션 개발에 적합하다.

Spring | Spring Boot 장단점

Spring 장점

1. 유연성: 매우 유연하며 다양한 기능과 모듈을 제공한다. 이는 개발자가 원하는 대부분의 요구 사항을 충족시킬 수 있도록 한다.

2. 커뮤니티 및 생태계: 매우 큰 커뮤니티와 활발한 생태계를 가지고 있다. 이는 다양한 문제에 대한 해결책을 찾을 수 있고, 유용한 라이브러리와 플러그인을 활용할 수 있도록 도와준다.

3. 세밀한 제어: 개발자에게 세밀한 제어를 제공한다. 설정 및 빈 구성을 세밀하게 조정하여 원하는대로 동작하도록 할 수 있다.

Spring 단점

1. 설정의 복잡성: 프로젝트는 설정이 상당히 복잡할 수 있다. 이는 초기 구성 및 프로젝트 시작에 시간이 더 소요될 수 있다.

2. 부품을 더 많이 구성해야 함: 종종 많은 양의 설정과 부품을 구성해야 할수 있다. 이는 프로젝트의 규모가 커질수록 관리하기가 어려워 진다.

Spring Boot 장점

1. 빠른 시작: 애플리케이션을 빠르게 시작할 수 있도록 도와준다. 자동 구성과 스타터의 의존성을 통해 개발자가 빠르게 프로젝트를 시작할 수 있다.

2. 간단한 배포: 내장 서버를 제공하여 애플리케이션을 쉽게 배포할 수 있다. 별도의 서버 설정이 필요하지 않으며, JAR 파일로 패키징 하여 실행할수 있다.

Spring Boot 단점

1. 너무 많은 마법: 자동 설정과 스타터 의존성은 프로젝트를 빠르게 시작하는 데 도움이 되지만, 때로는 너무 많은 마법으로 인해 프로젝트가 복잡해 질수 있다. 이를 통해 내부 동작을 이해하기 어려울 수 있다.

2. 설정의 제한: 간편한 개발을 위해 많은 기본 설정을 제공하지만, 때로는 개발자가 세밀한 조정이 필요할수 있다. 이런한 경우에 내장된 설정을 변경하거나 오버라이드 해야 할수 있다.

마법: 개발자가 명시적으로 코드를 작성하지 않아도 자동으로 동작하는것.

간단히 말해 Spring은 유연성과 세밀한 제어를 제공하지만 설정이 복잡하고, Spring Boot는 빠른 시작과 간단한 배포를 제공하지만, 너무 많은 마법으로 인해 내부 동작을 이해하기 어려울수 있다.

profile
RECORD DEVELOPER

0개의 댓글