스프링과 스프링 부트의 차이
언제나 그렇지만 위의 링크에 잘 정리가 되어있다.
요약하자면, 스프링은 자바의 웹개발 프레임워크 중에서 가장 인기있고 많이 쓰이는 프레임워크이다.
특히 우리나라에서는 거의 압도적이라고 볼 수 있다.
내가 웹개발자로 취업하려고 했을 때도, 중소기업에서는 PHP, Javascript 를 쓰는 경우가 왕왕 있었지만,
결국 대기업은 95% 이상이 Java를 사용하고, 중견기업도 반이상은 Java를 사용하는 경우가 많다.
결국, 우리 기업도 불행인지 다행인지는 Java Spring을 많이 사용한다.
근데, 스프링 부트도 사용한다.
스프링도 잘 모르겠는데 부트는 또 뭐야?
간단하게 요약하자면, 스프링을 처음 시작하게 되면, 설정해줘야 하는 파일들이 굉장히 많은데,
스프링 부트는, 그걸 간단하게 요약한 것이라고 하면 될 것이다.
스프링에서 해줘야 하는 설정으로는,
Transaction Manager, Hibernate Datasource, Entity Manager, Session Factory 등이 있다. (아직 뭐가뭔지모름..)
스프링에서 해줘야 하는 설정은 일단,
web.xml 에 다음과 같은 설정들을 해줘야 한다. (servlet-mapping, servlet, beans 등..)
web.xml에 관한 내용은 너무 많아서 따로 하도록 하겠다. 이건 그냥 예시
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/views/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<mvc:resources mapping="/webjars/**" location="/webjars/"/>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/my-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Hibernate에서도, datasource, EntityManager 등을 세팅 해줘야 한다.
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="${db.driver}" />
<property name="jdbcUrl" value="${db.url}" />
<property name="user" value="${db.username}" />
<property name="password" value="${db.password}" />
</bean>
<jdbc:initialize-database data-source="dataSource">
<jdbc:script location="classpath:config/schema.sql" />
<jdbc:script location="classpath:config/data.sql" />
</jdbc:initialize-database>
<bean
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
id="entityManagerFactory">
<property name="persistenceUnitName" value="hsql_pu" />
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
스프링부트는, 이러한 설정들을 자동설정(Autoconfiguration)으로 해결하였다. 스프링의 jar파일이 class path에 있는 경우 Spring boot는 Dispatcher Servlet으로 자동 구성한다. 마찬가지로 Hibernate의 jar파일이 class path에 존재한다면 이를 datasource로 자동 설정하게 된다. 스프링부는 미리 설정된 스타터 프로젝트를 제공하게 된다.
웹 어플리케이션을 개발하는 동안, 여러가지의 Jar file을 포함해야 하는데, 스프링 부트에서는 starter project를 만들어서 이를 한번에 묶어서 내놓고 있다.
스프링의 의존성 관리
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.3</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.0.2.Final</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
이것들을 spring-boot-starter-data-jpa starter pack을 쓰면 스프링 부트에서는 짧게 가능하다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
다음은 여러가지 스타터 프로젝트 옵션들이다.
* spring-boot-starter-web-services : SOAP 웹 서비스
* spring-boot-starter-web : Web, RESTful 응용프로그램
* spring-boot-starter-test : Unit testing, Integration Testing
* spring-boot-starter-jdbc : 기본적인 JDBC
* spring-boot-starter-hateoas : HATEOAS 기능을 서비스에 추가
* spring-boot-starter-security : 스프링 시큐리티를 이용한 인증과 권한
* spring-boot-starter-data-jpa : Spring Data JPA with Hibernate
* spring-boot-starter-cache : 스프링 프레임워크에 캐싱 지원 가능
* spring-boot-starter-data-rest : Spring Data REST를 사용하여 간단한 REST 서비스 노출