티스토리 뷰

이번 글에서는 최근 진행한 사이드 프로젝트에 관해 써보려 한다 

게시글 관리를 위한 Restful API를 만드는 것이 목적이었다

최대한 빠르게 완성하는 게 목표였기에 공부 중이던 Vue.js는 사용하지 않고

이전에 사용해본 적이 있던 thymeleaf를 활용해 SSR로 빠르게 진행해보았다

 

굳이 ViewController를 쓴 이유는 완성해놓고 Postman으로 HTTP request를 날려

JSON 형태의 데이터만 받아보는 것뿐만 아니라

눈으로 보고 싶어서 화면을 만들었고, ViewController에서 WebClient를 통해 ApiController에 요청을 날리도록 만들었다

따라서 전체적인 흐름은 thymeleaf 화면 -> ViewController로 요청 -> ApiController로 요청으로 이루어진다

 

전체적인 구조와 흐름은 README.md에 적어두었으니 참고하려면 아래 깃허브에 들어가 보면 된다

 

GitHub - Ryu-JeongMoon/notice-service

Contribute to Ryu-JeongMoon/notice-service development by creating an account on GitHub.

github.com

 

 

이 프로젝트에서는 그동안 사용해보지 않은 기술들에 도전했다

옛날 옛적 Servlet을 이용해 웹페이지를 만든 프로젝트에서 파일 업로드 기능을 구현했었는데 

프로젝트 규모가 크지도 않았고 핵심 기능이 아니었기 때문에 이번에 학습 겸으로 재도전해봤다

Spring 환경에서는 써본 적이 없어서 다중 파일 업로드에 대한 기능을 중심으로 만들었다

multipart/form-data로 넘어오는 데이터를 받기 위해서는 어떻게 해야 하는지,

WebClient에서 multipart/form-data를 어떻게 보내야 하는지 등에 대해서 이해할 수 있었다

 

게시글을 수정하는 경우에 REST 형식을 위해서 PatchMapping을 쓰고 싶은데

multipart/form-data를 받기 위해 PostMapping을 써야 하는 상황에 놓여서 굉장히 고민을 많이 했다

v1부터 v4까지 험난한 여정을 지나왔고

결국엔 두 메서드 모두를 지원하고 application/json, multipart/form-data 형식의 데이터를 받을 수 있게 만들었다

설명은 험난한 것처럼 표현됐는데 결과적으로는

Patch, Post, application/json, multipart/form-data 다 열어놓으면 되는 것..

 

또한 MSA 구조에서 많이 쓰이는 RestTemplate 대신 Spring5부터 RestTemplate을 대체하는 WebClient도 사용했다

WebClient가 RestTemplate보다 기능이 뛰어나다는 점을 배제하고 단순히 안 써본 기술이라 선택했다

WebClient는 비동기 방식, RestTemplate은 동기 방식이라 성능이 뛰어나다고 한다

뭐든 비동기가 대세가 되는 시대가 오는 것 같다, 이미 온 건가?

 

WebClient를 통해 받아온 Response를 JSONObject로 변환해주는 등의

기술에 익숙하지 않아서 굉장한 하드코딩으로 이루어냈다

Vue.js를 썼으면 간단했을 텐데 하는 아쉬움도 있었지만 돌아가도 서울로만 오면 되니 결국 해내긴 했다

WebClient를 처음 사용해보면서 Mono, Flux도 접하였고 아직 뭐가 뭔지는 잘 모르는 상태이긴 한데 흥미가 생겼다

결론은 재밌어서 WebFlux도 공부해봐야겠다 

 

 

DB 접근 기술은 JPA, QueryDSL을 사용했고 DTO 형태로 바로 조회하기 위해

@QueryProjection을 사용하는 재밌는 경험도 했다

이 과정에서 QueryDSL에 대해서도 더 공부할 수 있는 기회가 되어 좋았다

인프런에서 김영한 님의 JPA 관련 강의를 전부 들었는데 이론으로 배워서 머리에 둥둥 떠다니던 것들이 

직접 부딪히고 깨져보니까 이해가 더 잘 되는 것 같다

 

thymeleaf도 1년도 채 되지 않았지만 한동안 안 쓰다가 쓰니까 많이 까먹어서 구글이 많이 도와줬다

디자인적 요소는 넣지 말까 하다가 너무 허접해 보여서 부트스트랩으로 대충 찍어냈다

빠르게 찍어낸 것 치고는 내 눈엔 그럴듯해 보이게 만들어졌다 부트스트랩은 정말 신이다

'Project' 카테고리의 다른 글

[OAuth2] Spring-Security OAuth2 구글 연동 - 2  (0) 2022.04.24
[OAuth2] Spring-Security OAuth2 구글 연동 - 1  (0) 2022.04.24
board-api  (0) 2021.10.25
product-api  (0) 2021.10.25
cart-api  (0) 2021.10.25
댓글
링크
글 보관함
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday