dearbeany
[SpringBoot] Spring과의 차이 | SpringBoot 프로젝트 Generate-Import-Run-View 본문
[SpringBoot] Spring과의 차이 | SpringBoot 프로젝트 Generate-Import-Run-View
dearbeany 2022. 10. 26. 10:11SpringBoot 의 장점 (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 의 스프링 설정들을 편리하게 바꿀 수 있다.
metadata : 정보를 위한 정보
Artifact : 어떤 패키지로 구분할 것인지
Spring Boot Dev Tools : 코드 수정 시 알아서 서버를 껐다 킨다.
Lombok : DTO상에서 getter setter 생성자를 만들었어야 했으나, 이러한 것들을 만들지 않고 @data를 쓰면 알아서 만들어서 넣어주는 라이브러리. 단, 프로젝트를 다른 사람이 열어볼 때 상대 컴퓨터가 Lombok깔지 않았다면 사용할 수 없음.
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으로 등록 해버린다.
- 따라서 이 클래스를 패키지 가장 최상단에 두어서 관리하자!
https://dearbeany.tistory.com/62
[Tomcat] starting tomcat v9.0 server at localhost has encountered a problem in mac
STS 사용 중에 갑자기 톰캣 오류가 발생했다. 서버를 내렸는데도 8080번을 이미 사용하고 있다고 뜨는 것! 8080번을 사용 중인 프로세스를 죽이면 바로 해결된다! Port 8080 required by Tomcat v9.0 Server at lo
dearbeany.tistory.com
참고로 8080이 이미 사용 중이라는 에러가 발생해서 이걸로 해결했다!
6. 뷰 확인해보기
- src > main 에 resource folder로 webapp 생성 (왜냐하면 스프링은 기본적으로 webapp에서 찾아서 실행한다.) > index.html 생성해 테스트 코드 작성 > 서버 다시 시작 > Boot DashBoard > 지구본 클릭
- 스프링에서 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>
'Spring' 카테고리의 다른 글
[SpringBoot] KeyProperty과 useGeneratedKeys | resultType과 resultMap (Product 실습 에러 해결) (0) | 2022.10.28 |
---|---|
[SpringBoot] Spring 프로젝트를 SpringBoot로 전환하기 (SpringBootBoard 실습) CORS Error해결부터 Swagger등록까지! (0) | 2022.10.27 |
[Spring] Spring ~ REST 과목평가 예상문제 (1) | 2022.10.25 |
[REST] REST API @Annotation별 실습 (0) | 2022.10.24 |
[MyBatis] Spring 과 MyBatis 연동 및 세팅 | 게시판 CRUD 실습 (0) | 2022.10.21 |