본문 바로가기

TIL(Today I Learned)

TIL-230727(클론코딩-오늘의집(5))

📝오늘 공부한 것

  • '오늘의 집' 클론코딩 마무리(프로젝트 회고)

 

📌클론코딩- 오늘의 집

https://ohou.se/

 

라이프스타일 슈퍼앱, 오늘의집

감도높은 유저들의 일상 구경부터 제품 구매까지 한번에

ohou.se

● 배포링크

https://ohou-clone-fe.vercel.app/

 

React App

 

ohou-clone-fe.vercel.app

 

● Github 주소

https://github.com/OHOU-cloneCoding/backend

 

GitHub - OHOU-cloneCoding/backend

Contribute to OHOU-cloneCoding/backend development by creating an account on GitHub.

github.com

 

● 사용기술

 - SpringBoot, SpringData JPA, JDBC, Spring Security, JWT, Querydsl, Jsou

 - CICD : GithubActions, S3, Route 53, CodeDeploy, EC2, RDS

 - Other Tools : Git, Github, notion

 

● 새롭게 도전한 기술

 - 상품 정보 크롤링 : 오늘의 집 상품 크롤링 시도 > 동적 페이지로 크롤링이 어려워 정적 페이지의 비슷한 정보를 가진 페이지에서 상품 크롤링

 - 검색 기능 (Querydsl 사용하여 동적 쿼리를 생성)

 - Refresh Token, Access Token 

 

● 시간이 있었다면 시도해보고 싶었던 것들

 - 스크래핑이 아닌 Selenium, BeautifulSoup을 이용한 크롤링

- 실시간 인기 검색어

 - 책갈피 기능

 - 채팅 기능을 이용한 고객센터 문의

 - EC2 swap memory 설정

 - 소셜 로그인 기능

 

● 트러블 슈팅

발생한 문제 : 검색기능 & 필터링 & 정렬을 하기 위한 동적 쿼리 작성 다양한 검색 조건이 주어졌을 때, 이를 JQPL에서 다루기가 매우 힘듦.

해결 방안 :

Querydsl을 사용하여 해결.

- JPQL을 이용하게 되면, compile 시점에서 오류를 못잡고, 해당 메서드가 호출되는 시점에서 RuntimeException이 발생한다. 하지만, Querydsl은 자바 언어로 코드를 작성하기 때문에 compile오류를 발생 시킨다.

- 조건문을 만들기 위해 사용한 메서드를 재사용이 가능하다.

- Querydsl은 모든 조건에 대한 메서드를 만들고 해당 메서드가 null 이 아니면 조건문이 실행된다.

 

발생한 문제 : JWT Access Token을 사용하는데 보안적인 측면에서 문제가 있음.

해결 방안 : Refresh Token 적용.

-Refresh Token을 적용하게 되면 Access Token의 유효 기간을 짧게 설정하고, Refresh Token의 유효기간을 길게 설정하여 사용자는 Access Token이 만료되면 Refresh Token을 통해 새로운 Access Token을 발급받는다. 이로 인해 Access Token이 탈취 되더라도 짧은 Access Token의 유효 기간으로 금방 만료 되어서 탈취자는 해당 토큰을 사용할 수 없다.

 

● 총평

 저번 협업을 경험으로 이번 클론코딩에서는 프론트엔드와 소통이 원활하게 진행되었다고 생각한다. 그럼에도 불구하고 API 명세서의 수정이 잦아 프론트엔드 쪽에서 혼란이 있었다. 명세서 수정 부분에서는 더욱더 소통이 중요하다는 것을 느꼈다. 그리고 클론코딩을 진행하면서 첫 협업 프로젝트에서는 구현하지 못했던 기능들을 도전해볼 수 있어 많은 것을 배웠다.

 

● 프로젝트 피드백

- IllegalException 에러 밖에 없음. 나머지 에러처리도 할 것.

- log 찍는 법, test코드 작성법, @Transactional, redis 에 대해서 공부해보기

- refresh token 에서 너무 많은 것을 사용하고 있음. 분리해서 사용할 것.

- post entity에서 nickname이 꼭 필요한지 생각해보기

 

(중간 피드백)

- Entity에서 @NoArgsConstructor를 왜 넣었는지 다시 생각해보기

- comment entity안에 comment field가 있음. entity에서 dto사용 하지 않기.

- commentlike entity에서 post가 필요하지 않아보임. 연관관계 잘 생각해보기

- Security 부분에 대해서는 크게 생각하지 않아도 됨.