국비교육(22-23)

64일차(1)/Spring Boot(13) : static 폴더 활용하기

서리/Seori 2023. 1. 6. 16:27

64일차(1)/Spring Boot(13) : static 폴더 활용하기

 

- webapp-resources 폴더 대신 static 폴더를 사용하는 구조로 전환하기

 

 

STS Boot07_Final에 추가하기

- feature/upload_download 브랜치로 이동

 

 

- src-main-webapp 이 있는 구조. 직접 webapp 폴더를 만들어주고 그 안에 jsp를 위치시켜주었다.

- 정적인 자원은 resources 폴더를 만들어주었다. Spring Boot가 jsp 친화적이지 않아서!

- 하지만 Spring Boot 프로젝트에서는 jsp(webapp폴더 포함)를 아예 만들지 않을 때도 있다.

 

- 지금 EL, c:choose 등 jstl을 다양하게 사용하고 있는데, jsp 없이 어떻게 작성할 수 있을까?

thymeleaf 로 html 파일을 만들어서 동적인 페이지를 서버사이드 렌더링하는 방법이 있다.

(내가 듣는 과정에서는 thymeleaf는 배우지 않는다)

 

- thymeleaf 는 이 src/main/resource 안에 있는 template 폴더 안에 만든다.

- html을 활용해서 서버 사이드 렌더링을 한다.

 

 

- 그러면 정적인 자원들은? 같은 위치의 static 폴더 안에 넣는다. css, js 등을 넣어 사용할 수 있다.

- thymeleaf 를 사용하면 jsp 없이도 가능하다.

 

- 이런 구조는 파이썬의 장고 프레임워크와 비슷하다.

- jsp없이 html 템플릿을 사용해서 페이지를 구현한다.

- thymeleaf 만의 if문, 반복문 등 별도의 문법이 있어서 그것을 익혀서 사용하면 된다.

 

- 그러면 SmartEditor는 어떻게 사용하면 될까?

- SmartEditor 폴더 안에는 스마트에디터가 동작하기 위한 jsp페이지가 있다.

- 이것은 webapp을 만들지않으면 쓸 수가 없다.

 

→ Spring boot 용으로 사용할 수 있는 SmartEditor 로 바꿔서 사용하면 된다.

  (SmartEditor 안에 있는 jsp 페이지의 기능을 다른 파일로 옮긴다)

 

- 바꿔놓은 파일을 보면 안에 이렇게 있는데, 이 안에는 더이상 jsp 페이지가 없다.

 

- jsp가 없다.

 

- jsp에서 하던 작업은 이 controller에서 전부 해준다!

 

- SmartEditor 는 이미지도 같이 저장해서 글에 같이 쓸 수 있다는 장점이 있는데,

  그것을 controller 안에 통합시킨 것이다.

 

- 이전에는 이미지를 webapp/resources/ 안에 넣고 썼는데 resources 폴더를 아예 제거해보려고 하는 것!

 

- 현재 사용하는 방식은 이렇게 되어 있다.

- html에서 보면 업로드된 이미지 경로가 저장된다. 그래서 에디터 안에 이미지를 넣을 수 있는 것

 

- 이것을 c:/data에 업로드 되도록 바꿀 것이다.

- custom.properties 를 보면 업로드폴더를 data로 지정한상태. 여기에 다 넣을 예정!

 

 

- smart editor 폴더는 이제 정적인 자원이므로 static 안에 넣어주면 된다.

- 저 폴더 안에 있는 내용은 컨트롤러를 거치지 않고 출력해준다. 단 jsp는 static에서 사용 불가능하다.

 

- controller는 boot07 패키지 안에!

- 업로드된 서버 경로를 읽어와서 업로드, 이미지 출력시 이 경로를 활용한다.

- 이미지 저장시 fileLocation 을 사용한다.

 

- 이 경로로 알아서 받아서 사용한다.

- 컨트롤러에서는 이 경로로 받아서 응답할 준비도 해야 한다.

- 이미지의 이름은 그때그때 다르므로, 동적으로 처리해야 한다.

 

- 이 경로 변수를 사용하기! 이제는 /editor/ 라는 폴더안에 들어가게 할 것이다.

 

- 동적인 어떤 이름으로 들어오는 data/editor/ 하위의 이미지

- FileLocation에서 해당 이미지를 찾아서 응답하도록 하는 내용이다.

 

- SmartEditor 안에 들어오는 사진을 컨트롤러에서 처리하는 것으로 바꾸고, jsp 페이지를 삭제해버린 것이다.

 

 

- 기존 insertform.jsp에 /views/cafe/ 에 있는 insertform 파일을 덮어쓰기 해주기

 

- context 경로가 static 폴더라고 생각하면 된다.

- 이것의 루트 위치는 /resources/static/ 이다. 이 안에 js를 넣어 사용하는 것!

- 스킨 역할을 하는 html 페이지도 들어있어서 여기서 불러다가 사용하는 것이다.

 

- 수정한 후에는 기존의 smarteditor, upload 폴더는 삭제해주기

 

- 이렇게 하면 사진 경로가 editor로 잡힌다.

- 파일은 c:/data 로 들어간 것이고, controller가 이것을 읽어서 출력해주는 것이다.

 

- 이 기본 context 경로가 static이라는 것을 인식하기!!!

 

 

cafe/updateform.jsp

- updateform (카페 글 수정 폼) 도 똑같이 경로를 수정해야 한다.

 


 

- resources 폴더에 들어있는 나머지 자원(javascript)도 static으로 옮겨주기

 (정적인 자원이므로)

- webapp에 jsp 페이지를 만들지 않아도 사용할 수 있도록 대비하는 것..

- webapp의 resources 폴더에 대한 의존성을 없애기 위한 것이다.

 

 

- 이 javascript는 gallery/ajaxform에서 사용한다. 수정해주기

- 여기가 static 폴더이다!

- resource 경로를 사용했던 부분을 수정해주기

 

 

cafe/detail 수정

- 똑같이 수정.

 

users/updateform에서 수정

- resources 폴더를 boot에서는 static으로 사용한다고 생각하면 된다.

 

마지막으로 빈 resources 폴더를 삭제해주기

 

WebConfig 수정

 

- resources 폴더에 자원을 넣어놓기 위해 했던 설정이므로, 이 부분도 삭제해도 된다.

 


 

- Spring Boot 수업은 여기까지!!


- 추가로 Spring Boot를 공부하고 싶다면,
 webapp폴더를 완전히 없애버리고도 thymeleaf를 사용해서 동작하도록 만들어보기

 그러면 완벽히 spring boot로 변환하는 것이다!

- 아직 실무에서는 jsp가 있는 쪽을 더 많이 사용한다.

 

- thymeleaf를 사용하면 이 설정이 필요없다. webapp폴더를 사용하지 않으므로!

- thymeleaf 가 가지고 있는 문법을 익혀서 사용하면 된다.

 

* Thymeleaf 문법 참고: 링크