본문 바로가기

개인 Project/01. 꽃 관련 웹사이트 제작기

02. Servlet 에서 Spring Web MVC로 바꿔보자

기존 프로젝트에서의 기능과 DB 등을 분석하고자 했고, Path들을 맞추어서 웹 사이트를 탐색해보는 것이 목표였다.

프로젝트에서 제공하고자 하는 기능은 다음과 같았다.

 

- 꽃 검색 기능 ( 꽃말을 이용한 검색, 꽃 이름을 이용한 검색)

- 꽃 추천하기 (static file posting 형식)

- 심리 테스트 (static file)

- 로그인 및 회원가입

 

일단 문제점이 여럿 있었는데 그 중 몇개만 꼽자면

- .jsp 파일로 접근하고, 모두 드러나있다.

- Controller에 의존하기보다 각각의 jsp파일이 서로 연결되어 있는 형태가 강하다.

- 파일 구조 디렉토리에 문제가 많다.

이 중 꽃 검색 기능과 로그인 및 회원가입 파트를 맡아서 진행했었기도 하고, static file 정리하면서 지치는 것보다 재미있게 배운 것을 적용해보고자 했다. 또한 특별한 static resource를 사용하지 않고 최대한 독립적이라 이 부분 부터 고쳐나갔다.

 

로그인과 회원가입은 파면 팔수록 더 어려운 파트이지만, 빠르게 기본적인 구조를 만드는 것이 목적이기에 추후 고쳐나갈 예정이다.

 

1. 기존의 UserDTO를 추후 User Entity로 사용하기 위해 User로 변경했다.

2. 아직 DB를 연결하지 않았기 때문에 메모리에서 Map을 활용하여 Repository를 구현하였다.

3. Repository를 활용하여 기존의 UserDAO에서 DB와 연결하고 작업하던 로그인과 회원가입에 대해 구현했다. 예외처리에 대한 부분은 강의를 들으면서 차차 바꿔나가보자.

4. 각각에 대해 간단하게 unit Test를 구현하고 확인했다.

5. Controller를 통해 해당하는 view와 연결을 시켜주었다.

 

금방한다면 금방할 수도 있는 작업이였는데, 설정에 잠시 문제가 생겨 시간이 꽤나 걸렸다. 

더보기

문제보기

 

기본적으로 welcome page와 path를 맞춰주기 위해 몇가지 설정을 했다.

jsp를 돌릴 수 있도록 properties와 dependencies를 추가했고

application.properties에서 spring.mvc.view들의 suffix와 prefix를 맞춰주었다.

 

분명히 설정을 다 해주었다고 생각하고 돌렸을 때 계속해서 이상하게 thymeleaf rendering error가 발생했다.

알고 있기로 Internal View Resolver의 우선순위가 높은 것으로 알고 있었고 여기서 먼저 잡혀서 JSP가 돌 수 있다고 생각했는데, 왜인지 계속 타임리프 view resolver가 잡혔다.

 

jsp가 아닌 같은 폴더에 index.html을 잡아두어도 thymeleaf resolving error가 뜨는 것을 보고 설정된 파일이 아닌 다른 파일을 보고 있구나 라고 생각이 들면서 내가생각한 viewresolver가 잡히는게 아니라는 생각이 들었다.

log level을 trace로 두고 찍어 보았을 때 ContentNegotiatingViewResolver에서 정해진 selected 타입과 가능한 타입들을 탐색하면서 thymeleaf와 맞아서 먼저 설정되는게 문제였다.

 

thymeleaf resolver로 잡힌다

 

thymeleaf enable을 false로 하고 돌렸을 때 잘 잡혀서 나왔고 이 때는 view Resolver가 jstl View 로 내가생각한 resolver가 아니라 더 낮은 level에 있었다는 것을 추측할 수 있엇다.

 

jstl View로 잘 잡힌다.

 

viewResolver의 경우 직접 Configuration에서 사용하는 방법이 있지만, resource를 최대한 건드리지 않고 추후에 thymeleaf를 공부하면서 한번에 바꿀 예정이라 혼용하여 사용하지 않을 것 같기에 일단은 이렇게 두고 진행한다.

View Resolver 에 대한 학습이 더욱 필요할 것 같다.

또한 꽃 검색 파트의 경우 기존에는 DB에 모두 기록해두고 join하여 사용하는 방식으로 했었는데, DB가 없을 때 어떻게 해야할지 고민도 되고 JPA 강의를 차차 들으면서 진행해야 할 것 같다.