Spring Boot 실습 환경 구성

Winsam·2024년 2월 26일

실습환경에 대해서 고민이 많았다. 욕심을 부리자면 내 입맛대로 지금부터 데이터(SQL) 부터 웹 디자인(CSS, HTML), AJAX 구성 (JavaScript, JAVA) 등등.. 해볼까? 도 생각은 해봤지만 너무 많은 시간이 걸릴거같다.. 지금하고있는 공부들이나 일정들을 따라가면서 블로그도 쓰는 것인데 무리하게 목표를 잡았다가 흐지부지 될 것 같아서 이번에는 학원에서 한 것들중에 중요하다고 생각되는 부분들만 그대로 옮겨가는 식으로 해봐야겠다. (그래도 기능들은 복붙하지 않고 직접 만들어갈 예정이다.)

Spring Boot 실습 환경 구성

일단 무슨 기능을 넣을지부터 고민했는데

  1. 회원 관리 부분
  • UserList
  • UserDetail
  • Login / Logout
  • CRUD
  1. Team 관리 부분
  • TeamList
  • TeamDetail
  • CRUD
  1. Board 관리 부분
  • BoardList
  • BoardDetail
  • CRUD

일단 이정도만 목표로 잡고 해보겠다. 원래 실습때는 Spring부터 천천히 배워나갔지만 나는 그냥 바로바로 AJAX나 Mybatis 등등 학원 후반부에 배운 내용들을 위주로 써가며 따라가겠다.

패키지 구성

먼저 학원에서 실습하고 있는 프로젝트의 패키지들을 살펴보자

내가 연습하고있는 프로젝트도 위와 같은 패키지가 모두 필요하다.

그리고 view 부분을 봐보자

이부분도 내가 연습하고 있는 프로젝트에서도 해당 경로들이 필요하다.

그래서 위 스크린샷과 같게 패키지와 경로폴더들을 생성해주겠다.

이미지들 정도만 복사 해오고 나머지는 그냥 생성해주었다.

디펜던시 추가

내가 만드려는 기능중에는 패스워드 시큐리티와 같은 추가 라이브러리가 필요한 부분들이 있다. 그래서 미리 다음 디펜던시를 추가해놓고 실습해보겠다.

코드를 입  <!-- *** JSP 사용을 위한 Tomcat JSP엔진 추가 -->
  <dependency>
     <groupId>org.apache.tomcat.embed</groupId>
     <artifactId>tomcat-embed-jasper</artifactId>
  </dependency>
  <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>jstl</artifactId>
  </dependency>

  <!-- *** JDBC : spring-boot-starter-jdbc 를 사용_MVC 와 다름  -->
  <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-jdbc</artifactId>
  </dependency>

  <!-- ** MySql **
        <https://mvnrepository.com/artifact/mysql/mysql-connector-java> -->
  <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.28</version>
  </dependency>

  <!-- *** Mybatis : Spring_Boot 의 Mybatis 설정 라이브러리  -->
  <dependency>
     <groupId>org.mybatis.spring.boot</groupId>
     <artifactId>mybatis-spring-boot-starter</artifactId>
     <version>1.1.1</version>
  </dependency>

  <!-- ** Spring Boot Security  -->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
  </dependency>

  <!-- ** REST API ~~~~~~~~~~~~~~~
       <https://mvnrepository.com/artifact/com.google.code.gson/gson>
        ->  gson : Java객체 -> JSON Type  &  JSON Type -> Java객체   -->
  <dependency>
     <groupId>com.google.code.gson</groupId>
     <artifactId>gson</artifactId>
     <version>2.8.5</version>
  </dependency>
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

  <!-- jackson-databind 라이브러리 :
     => 스프링부트 웹 스타터 킷- org.springframework.boot:spring-boot-starter-web
        에 기본적으로 포함된 jackson 라이브러리를 사용함.-->

  <!-- ** Json Lib4Spring -->
  <dependency>
     <groupId>net.sf.json-lib</groupId>
     <artifactId>json-lib-ext-spring</artifactId>
     <version>1.0.2</version>
  </dependency>
력하세요

pom.xml 을 열고

dependency 끝 부분에 해당 디펜던시들을 추가해줌

home 화면 띄우기

먼저 HomeController를 생성해주자

그리고 GetMapping으로 Home 요청을 받아주고 간단하게 현재시간을 스콥에 담아놓겠다.

이제 home.jsp 로 넘어가서 간단하게 타이틀을 적고 현재시간을 출력해보자

이렇게 하고 서버로 요청을 보내보면 요청을 찾지못하는 에러가 발생한다.

문제발생: /home 요청의 mapping이 되지 않음.

요청은 잘 들어갔으나 mapping이 되지 않는 듯하다.

원인파악: jsp가 작동하지 않음.

jsp의 위치를 어디있고 mapper의 위치가 어디있는지 SpringBoot에 알려준 적이 없기때문에 mapping을 못하는 문제가 발생한 듯하다.
그래서 SpringBoot의 설정을 모아놓는 곳인 application.properties를 들어가보면 아무것도 존재하지 않는다.

문제해결: jsp, mapper, mySQL 서버 등록

application.properties에 jsp의 위치, mapper의 위치, 사용할 mySQL의 정보를 등록해주겠다. 추가적으로 포트번호도 입력할 수 있는데 기본 8080이지만 실습을 위해서 8090으로 입력해주겠다.


server.port=8090

#JSP 설정
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

#DataSource 설정
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=DB비밀번호입력

#mybatis Mapper 위치
mybatis.mapper-locations=classpath:/mappers/*Mapper.xml

prefix나 suffix 같은 resolver 의 역할이나 mapper의 위치, DB 설정값들을 이곳에서 설정할 수 있다.
이제 jsp의 prefix, suffix 값을 설정했으니 /home 요청을 보냈을 때 home.jsp의 위치를 찾을 수 있을 것이다.

이제 위치를 잡을 수 있으니 home.jsp가 제대로 출력되는 모습

느낀점

솔직히 금방할 줄 알았다. 근데 생각보다 시간을 많이 잡아먹었다.. 딱히 문제해결에서 꼬인 것을 없었는데 반영이 늦게 됐고 내가 그걸 캐치하지 못한 듯 하다. 그리고 하다보니 config 설정파일은 Spring Boot 초반에나 한번 건들고 잘 들어가지 않아서 많이 까먹었는데 좋은 복습이 된 것 같다.

profile
Hello World! 안녕하세요

0개의 댓글