참조(실습1의 블로그와 동일)
참조블로그와는 내용이 상이할수 있습니다. 버전도 다르고 제가 실습한 내용대로 내용이 추가되기 때문, 실제 오류가 나서 제방식대로 바꾼것들이 몇개있음.
실습1에서는 프로젝트를 생성하고, application.properties파일을 application.yml파일로 교체했습니다.
이번장에서는 서버를 구동하여 첫 JSP 페이지를 띄워보겠습니다.
실습1에서 생각해볼 것
1) application.yml을 사용하는 이유
2) 프로젝트 생성시 Artifect란?
Goal
- pom.xml 수정
- Mysql 데이터베이스 생성
- application.yml 작성
- JSP파일 생성 및 서버실행
1. pom.xml 수정

생성된 프로젝트의 pom.xml파일에 다음과 같은 두 의존성을 추가해 줍니다
- xml 파일도 계층 적으로 작성되어있기 때문에 가장 바깥쪽의 <dependencies>안에 붙여넣기하면 됩니다.
<dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency>
[추가한 의존성 설명]
- jstl
: The JavaServer Pages Standard Tag Library (JSTL)은 유용한 JSP 태그들의 모음입니다. JSP application에서 일상적으로 사용되는 핵심 기능들을 encapsulate하여 제공하고 있습니다.
- tomcat-embed-jasper
: SpringBoot에서는 JSP사용을 권장하지 않습니다. 따라서 SpringBoot에서 JSP파일을 컴파일하기 위해서는 tomcat-emebed-jasper를 의존성에 추가해야 합니다.
2. Mysql 데이터베이스 생성
- mysql workbench를 통해 프로젝트에 사용될 데이터베이스를 생성하겠습니다.
- 다음과 같은 SQL문을 작성한 뒤 데이터베이스를 생성해주세요
create database coronabook;
use coronabook;

데이터베이스 coronabook 생성완료
3. application.yml 작성
- application.yml에 port, context-path, view resolver, datasource를 설정하겠습니다.
- 다음의 사진과 같이 application.yml의 내용을 작성해주시면 됩니다. datasource의 username과 password는 mysql 사용자 id, 비밀번호를 기입해주시면 됩니다.

[application.yml 설정 설명]
- port : 9090
: 스프링 부트는 Tomcat 서버를 실행하기 위해 기본적으로 8080포트를 사용합니다. yml파일에서는 port번호를 설정할 수 있습니다.
이전프로젝트같은곳에서 톰캣서버는 항상 9090으로 저는 썼기때문에 9090으로 진행합니다.
- context-path
: URL에는 path가 있습니다. ( developer.mozilla.org/ko/docs/Learn/Common_questions/What_is_a_URL : URL이란?) context-path는 URL path의 prefix(path가 나눠진 구획에서 맨앞의 부분)를 의미합니다. ex) 로컬에서 우리의 프로젝트를 구동하면 위의 port와 context-path설정으로 인해 http://localhost:8000/coronabook이 기본 URL이 됩니다.
- spring.mvc.view.prefix & suffix
: 모든 MVC 프레임워크는 views단을 작동하게 하는 방법을 제공합니다. Spring 프레임워크는 view resolvers통해 그런 역할을 제공합니다. prefix와 suffix를 설정함으로서 views네임으로 지정한 String값을 실제 views로 mapping합니다. (이 부분은 현재 이해하기 어려울 수 있습니다. 추후에 Controller 코드를 작성하면서 다시한번 언급하겠습니다.)
- detasource
: datasource는 물리적 data source에 접근하기 위한 factory (factory 디자인 패턴을 참고하면 좋습니다)입니다. JDBC에서 작성했던 DriverManager facility의 대안으로 database connection을 생성하기 위해 URL과 고유식별 코드를 사용합니다.
- driver-class-name : MySQL Connector의 java.sql.Driver를 implements하는 클래스명을 입력합니다.
- url : database의 URL(데이터베이스의 위치)를 나타냅니다.
- username, password : mysql 사용자의 아이디와 비밀번호 입니다
4. JSP파일 및 컨트롤러 생성
1) JSP파일 생성
- 다음의 사진에서 노란색으로 하이라이트된 경로에 html파일과 jsp파일을 생성합니다.

[폴더 구조 설명]
- SpringBoot의 프로젝트 내 정적인 파일 (html, css 등)은 static 폴더에 저장합니다.
- JSP와 같은 views파일은 src/main/webapp/WEB-INF/views 안에 저장합니다.
* Spring MVC에서 View는 사용자가 보게 될 화면입니다. 이번 프로젝트는 View단을 JSP로 구성하겠습니다. (최종적으로는 react로 View단을 바꿔보는 작업을 진행할 예정입니다) ( JSP란? )
- JSP파일은 url을 통한 직접적인 접근을 하지 못하게 WEB-INF폴더 아래 위치하게 됩니다.
* WEB-INF 디렉토리는 외부에서 접근이 불가능합니다. Spring의 내부적인 동작방식을 통해 jsp파일에 접근할 수 있습니다. ( lhoris.tistory.com/32 )
2) Controller 생성
- 다음으로 com.coronabook.controller패키지를 생성한 뒤 HelloController.java파일을 만들어줍니다.
->여기서 필자는 오류가 발생했습니다. 블로그를 따라했지만 콘트롤러로직을 애플리케이션측에서 받질못해서 This application has no explicit mapping for /error, so you are seeing this as a fallback.
There was an unexpected error (type=Not Found, status=404).
No message available 이런오류가 떠서 2시간의 장정을통해.. 컨트롤럴가 애플리케이션 패키지랑 같이있으면 해결되는것을 확인하였고 실제로 구현을시켰습니다. 경로는 1)jsp생성 에 패키지경로를 참고하시면 됩니다.
또 WEB-INF 폴더를 webapp 폴더에 포함시켰어야했는데 별도로 폴더를 찢어놨어서 경로를 못찾는 그런 상황도 있었으니 저같은 실수를하셔서 시간을 낭비하지 마시기 바랍니다 ㅠㅠ
- HelloController.java의 내용은 다음 사진과 같이 작성합니다.

[HelloController 코드 설명]
- @Controller
: Spring의 Controller class는 @Controller으로 간단하게 어노테이션 될 수 있습니다. @Controller을 작성함으로써 classpath scanning으로 해당 클래스를 인식하게 되며, 특정한 interface나 다른 class를 상속하지 않아도 Controller의 기능으로 사용할 수 있습니다.
* Controller란?
: MVC패턴에서 Controller단에서는 사용자의 data를 받아, 유효성 검사를 하며 business로직의 기능들을 요청하고 요청에따른 결과값을 받아 다시 사용자에게 가공된 data를 리턴합니다.
- @GetMapping(value= "/")
: @GetMapping은 DispathcerServlet에게 URL에 "/" path로 들어온 GET방식의 요청을 받아 Hello 메서드를 실행시라고 말해줍니다. 즉, 사용자의 요청(request)와 controller의 method를 매핑해줍니다.
- model.addAttribute("message", "Hello World!");
: response할 페이지(index.jsp)에 model값을 제공합니다. model은 map자료형으로 Key와 Value를 갖습니다. "message"라는 이름에 "Hello World!"의 값이 들어고 해당 값은 response될 index.jsp페이지에서 ${message}와 같은 방식으로 사용할 수 있습니다.
- return "index";
: Hello 메서드는 String을 리턴하지만 여기서 리턴하는 index는 단순한 String값이 아닙니다. application.yml에서 설정한 prefix와 suffix가 index에 부착되어 결과적으로 Hello메서드는 view단인 index.jsp페이지를 리턴하게 됩니다.
3) index.jsp 작성
- index.jsp는 다음과 같이 작성해줍니다.
스프링스타트 프로젝트를 만들었는데 뭔진모르겠지만..
html하고 jsp 파일생성이 안되더라구요, 이건 아직조치를 못해서 일단 file로 생성해서 확장자명만 넣고 진행했습니다.

5. 서버 실행
- JSP파일 작성까지 완료됐으면 이제 SpringBoot Server를 실행합니다.
- src/main/java -> com.coronabook.springboot 패키지에 있는 CoronabookProjectSpringbootApplication.java 파일에서 오른쪽 마우스는 클릭하면 Run as를 선택할 수 있고 Run as에서 SpringBootApp을 실행하면 서버가 작동합니다.
- 서버가 작동한 뒤 브라우저를 열고 http://localhost:9090/coronabook를 주소창에 붙여 넣으면 다음 그림과 같이 Hello World와 테스트문구가 출력되는것을 확인할 수 있습니다.

MVC로 구현이 된것을 확인 하실수 있습니다.
'jsp spring' 카테고리의 다른 글
스프링부트(STS) 쇼핑몰 프로젝트 작업 (0) | 2023.12.14 |
---|---|
Spring Tool Suite을 이용해 웹사이트 만들기 / 3. DB설계, 화면설계 (0) | 2023.12.14 |
Spring Tool Suite로 웹사이트 구현하기 / 1. 개발환경 준비 및 프로젝트 생성 (스프링프레임워크/JSP) SPS (0) | 2023.12.14 |
스프링(SPRING)프레임워크 기초이론 정리요약! (0) | 2023.12.14 |
MVC패턴 모델2의 개념 / 간단예제를 통한 이해 (0) | 2023.12.14 |