Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

dearbeany

[SpringBoot] Spring과의 차이 | SpringBoot 프로젝트 Generate-Import-Run-View 본문

Spring

[SpringBoot] Spring과의 차이 | SpringBoot 프로젝트 Generate-Import-Run-View

dearbeany 2022. 10. 26. 10:11

SpringBoot 의 장점 (vs Spring)

① Embedded Tomcat  

- SpringBoot 내부에 Tomcat을 가지고 있기에 따로 설치하거나 매번 버전관리의 수고로움 덜어줌

- 구조적으로 환경 영향을 덜 받기에 운영, 배포가 편함

② starter를 통한 dependency 자동화

- 과거 Spring에선 각각의 dependency들의 호환되는 버전을 일일히 맞춰야 했고, 하나의 버전을 올리고자 하면 다른 dependency에까지 영향 미쳐 버전관리 어려움

- But, SpringBoot 통해 starter가 대부분의 dependency를 관리

③ XML설정 하지 않아도 됨

④ Jar file을 이용해 자바 옵션만으로 손쉽게 배포 가능

 

 

더보기

Spring Framework

- 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크

- 동적인 웹사이트 개발위한 여러 서비스를 제공

 

장점

① 경량컨테이너

② IoC (Inversion of Control, 제어 역행)

- 컨트롤의 제어권이 개발자에게 있는 게 아닌 프레임워크가 대신해서 해줌

- Servlet, Bean 코드를 개발자가 직접 작성하지 않고, 프레임워크가 대신 수행

- 기존에는 자바 코드 작성 시 개발자가 객체 생성, 의존관계 설정을 했으나, 이제는 프레임워크가 대신!

③ DI(Dependency Injection, 의존성 주입)

- 개발자가 Spring에 의존성을 주입하며 객체 간 결합을 느슨하게 함.

- 객체 간 결합이 느슨하면 코드의 재사용성 증가, 단위테스트 용이

④ AOP(관점지향 프로그래밍) 

단점

- 기능이 많은만큼 환경설정이 복잡한 편. 이에 따라 설정의 많은 부분을 자동화한 SpringBoot의 등장!

 

참고: https://programforlife.tistory.com/68 

https://velog.io/@courage331/Spring-%EA%B3%BC-Spring-Boot-%EC%B0%A8%EC%9D%B4

 

1. SpringBoot의 등장

J2EE: Entrerprise급 설계할 때 사용하던 것으로, 설정할 게 많고 무거웠음

php, ruby

Struts

Spring : 스프링MVC를 주로 씀. WAS가 필요하여 VM, Tomcat이 필요했음.

Ruby on Rails

SpringBoot로 설정을 줄이고 빠르게 내장시켜 동작 가능. 자체적으로 WAS가지기에 별도로 필요없음.

 

2. 프로젝트 생성

web.xml root-context.xml servlet-context.xml 의 스프링 설정들을 편리하게 바꿀 수 있다.

https://start.spring.io/ 

metadata : 정보를 위한 정보

Artifact : 어떤 패키지로 구분할 것인지

Spring Boot Dev Tools : 코드 수정 시 알아서 서버를 껐다 킨다.

Lombok : DTO상에서 getter setter 생성자를 만들었어야 했으나, 이러한 것들을 만들지 않고 @data를 쓰면 알아서 만들어서 넣어주는 라이브러리. 단, 프로젝트를 다른 사람이 열어볼 때 상대 컴퓨터가 Lombok깔지 않았다면 사용할 수 없음.

 

Generate 클릭 > 프로젝트 알집파일 다운로드 > 압축해제

 

3. Import

- STS > File > import > Maven > Existing Maven Project > HelloSpringBoot 선택

 

번외) STS에서 직접 SpringBoot프로젝트를 생성할 수 도 있다!

New > SpringBoot Start Project

Base Url : 서비스 url에 starter.zip이라는 요청을 날리겠다. 결국 위에 프로젝트를 생성했던 사이트에 요청을 해서 받아오는 것!

 

 

4. Project 구조 및 주요 구성 폴더/파일

- static : css, js, img 등 정적 resource directory

- templates : SpringBoot에서 사용 가능한 여러가지 View Templates. 화면 구성을 하기 위한 다양한 기능이 있는데, 이번 실습에서는 이를 사용하지 않고 jsp로 보여줄 것인.

- application.properties : application 및 스프링 설정 등에서 사용할 여러 property를 정의한 파일

 

 

5. Run

- HelloSpringBootApplication에 main 메소드 있으므로 Run > SpringBoot App 

- 자체적으로 WAS 내장되어 돌리기에 context root 없으므로 http://localhost:8080/'바로 사용 가능'

 

@SpringBootApplication

package com.ssafy.HelloSpringBoot;

@SpringBootApplication
public class HelloSpringBootApplication {
	public static void main(String[] args) {
		ApplicationContext context = SpringApplication.run(HelloSpringBootApplication.class, args);
		String[] names = context.getBeanDefinitionNames(); // 정의 돼있는 이름들
		for (String name : names) { // 스프링컨테이너에 등록된 bean들을 조회해보자
			System.out.println(name); // 스프링부트를 실행만 했을 때 가지고 있는 bean들
		}
	}
}

- @SpringBootApplication 안에는 @ComponentScan이 있기 때문에 현재 HelloSpringBootApplication 의 패키지인

com.ssafy.HelloSpringBoot 내에 @Component 달려있으면 모두 bean으로 등록 해버린다.

- 따라서 이 클래스를 패키지 가장 최상단에 두어서 관리하자!

 

이미 스프링컨테이너에 등록돼있는 bean들의 이름을 출력해보았다.

 

 

6. 뷰 확인해보기

- src > main 에 resource folder로 webapp 생성 (왜냐하면 스프링은 기본적으로 webapp에서 찾아서 실행한다.) > index.html 생성해 테스트 코드 작성 > 서버 다시 시작 > Boot DashBoard > 지구본 클릭

index.html

 

- 스프링에서 jsp 사용시 ViewResolver를 썼을 때 prefix, suffix 사용했었다.

- 스프링부트 WEB-INF/views/hello.jsp 생성

 

- application.properties file에 추가

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

- pom.xml에 dependency 추가 (jsp는 SpringBoot가 직접적으로 제공하지 않기 때문에)

https://mvnrepository.com/artifact/javax.servlet/jstl/1.2

https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper

<!-- pom.xml -->
		<dependency>
		    <groupId>javax.servlet</groupId>
		    <artifactId>jstl</artifactId>
		    <version>1.2</version>
		</dependency>
		<dependency>
		    <groupId>org.apache.tomcat.embed</groupId>
		    <artifactId>tomcat-embed-jasper</artifactId>
		    <version>10.1.1</version>
		</dependency>