Weekly I Learned 6주차

2022. 10. 30. 23:58Weekly I Learned (WIL)

728x90
SMALL

[기간]

- 10월 24일 ~ 10월 29일

 

 

[Weekly I Learned ( 6주차)]

지난주 5주차에 맛보기로 진행했던 프론트와의 협업 팀 프로젝트를 진행하고, 이번 주차는 현재 실제로 운영되고 있는 사이트를 클론하여 프로젝트를 만들어보는 클론 프로젝트를 진행하게 되었다.

 

우리 팀의 주제는 '번개장터' 를 모티브로 한 클론 프로젝트로 하기로 했다.

다른 팀은 인스타그램, 채팅서버를 이용한 유사 카카오톡 등등 우리가 항해를 진행하면서 접해보지 못했던 프로젝트를 진행하는 반면에 우리 팀은 이때까지 배웠던 기술들을 토대로 CRUD 가 메인인 번개장터 클론 프로젝트라 걱정이 많이 되었다.

 

왜냐? 남들과는 다른 무기가 없다고 느껴졌었기 때문이다.

하지만, 지난주 경험을 되돌아보았을떄, 너무 과한 욕심을 가지고 구현 기능량을 너무 많이 가져간다든지, 새로운 기술을 갑자기 도입해서 해본다던지 하게 되었을때 프로젝트의 마감일을 지키지 못하고 미완성된 프로젝트를 제출해버렸기 때문에 이번에는 과한 욕심은 우선 접어두고 현재 우리가 기본적으로 만들 수 있는 기능 부터 만들기로 초기 목표를 잡고 시작했다.

다른 팀들과 차별점이 있는 무기는 그 이후에 만들어도 상관없으리라.

 

나는 우선 게시글 작성을 담당하였다.

기본적으로 프로젝트의 메인이라고 부를 수 있는 파트인 것 같기도 하고, 여러 추가 기술들을 적용시키기에 좋은 파트라고 생각했기 때문에 맡게 되었다.

 

게시글에는 작성, 수정, 삭제, 조회, 전체 목록 조회로 크게 나눠진다.

작성, 수정, 삭제는 로그인한 인증받은 유저만이 사용할 수 있는 기능이기에 나중에 기능들이 완벽하게 합쳐진다면 인증값을 받을 수 있게 수정할 생각으로 현재로써는 회원이든 비회원이든 다 가능하게 구현해두었다.

 

간단한 게시글 작성과는 다르게 이번에는 미디어 파일들도 같이 업로드 될 수 있게끔 해야한다.

번개장터 같은 중고거래 사이트의 특성상 사진은 필수불가결한 내용이기 때문이다.

이 이미지 파일을 그냥 DB에만 url을 저장하는 형식이 아닌 아마존에서 제공해주는 S3를 활용하여 구현해보고자 했다.

 

처음에 게시글 작성내용을 요청할 때는 json 형식의 데이터를 넣지만, 미디어 파일을 multipartfile 이라는 형식으로 요청을 할 수 밖에 없었는데, 아무리 컨트롤러에서 Request 관련 어노테이션으로 매핑 시켜주어도 동시에 받아와지지 않았다.

알아보니 데이터 형식은 하나로 일관되게 받아야 한다고 나왔다.

그래서 방법을 찾던 와중 프론트에서 넘겨받을 때 formData 에 json 형식 데이터와 multipartfile 형식의 데이터를 모두 담아 한번에 받아와서 매핑시켜주는 방법을 생각했고, 포스트맨에서 확인했을 정상적으로 수집된 것을 확인할 수 있었다

수정도 마찬가지로 formData 형식으로 모두 받아온 다음 매핑시켜서 게시글 내용을 수정시켜주었다.

 

그리고 이번에 기능을 구현할 때는 일반적인 jpa를 사용하는 것이 아닌 QueryDSL 을 사용하여 DB에 대한 작업내용을 변화시켜주었다.

QueryDSL은 내가 이전에 Mysql 을 많이 사용해본 경험이 있기 때문에 별로 어렵지않고 재밌었다.

jpa는 비교적 조건을 걸기가 어렵고 어려운 조건의 데이터를 추출할 때 jpa 를 커스텀해야하게 되는데 그때 커스텀 명칭이 매우 길어질 수도 있어서 이제는 잘 사용하지 않을 것 같다.

단, save() 는 예외인 것 같다.

insert문을 사용하면 save()도 사용하지 않아도 될 것이지만, save() 하나만 치면 저장이 되기 때문에 잘 사용할 것 같다.

 

이렇게 해서 작성, 수정, 삭제, 조회까지 기능 구현은 끝냈고, 전체 목록 조회에는 이전과는 다르게 PostResponseDto를 사용하지 않고 hashmap 을 사용하여 원하는 정보들만 추출되어 보여질 수 있게끔 만들어보았다.

PostResponseDto를 사용하게 된다면 출력을 원하지 않는 데이터들도 null 값으로 찍혀서 보여지기 때문에 더러워보여서 hashmap을 이용해서 사용해 보았다.

결과는 역시 만족할 만하다.

다만, 페이징 처리를 진행해야할 것 같은데 페이징 처리는 아직 pageable을 통한 jpa 에서밖에 사용해보지 못하여 어떻게 구현할지 현재로썬 고민되는 것 같다.

 

카카오 지역 APi를 활용하여 지역을 입력시 입력 값을 일정하게 넣을 수 있게끔 만들기도 했는데 아직은 좀 더 손을 봐야할 것 같다.

다음 주 월요일부터는 추가적으로 내가 만들어보고 싶은 기술들을 찾아서 접목시켜볼 예정이다.

 

 

[보완점]

(1) 가끔 S3 키 노출로 인해 권한이 제한될 때가 있다... 다시 새로 생성하면 되지만 합칠 때 gitignore를 반드시 활용하자....

 

728x90
반응형
LIST

'Weekly I Learned (WIL)' 카테고리의 다른 글

Weekly I Learned 9주차  (0) 2022.11.22
Weekly I Learned 8주차  (0) 2022.11.15
Weekly I Learned 5주차  (0) 2022.10.23
Weekly I Learned 4주차  (0) 2022.10.17
Weekly I Learned 3주차  (0) 2022.10.03