본문 바로가기
T.I.L. :: Today I Learned/항해99 14기 본과정

Day 32. 주특기주차까지 끝나버렸다.

by DaSsom 2023. 5. 4.

게더에서 소소한 재미.. ⭐ 귀여븐 사람들

 

어느덧 주특기 주차가 끝났다. 그러니까 내일부터는 프로젝트가 시작된다는 말이다. 나는 프로젝트를 진행할 수 있는 사람인가? 아직 과제 코드 없으면 시작도 못하는데? ㅠㅠ 아직 연습용 칼밖에 들지 않았는데 전장에 뛰어드는 느낌을 지울수가 없다. 그래도 프로젝트를 진행하면서 또 배우는 것이 많을테니, 그리고 또 피할 수 없으니 부딪혀보아야지

 

과제를 진행하면서 혼자 과제를 디벨롭 시켜보기 위해 이것저것 해본 것을 정리해보려한다.

 

https://github.com/mansooonuna/hhblogDevelop

 

GitHub - mansooonuna/hhblogDevelop

Contribute to mansooonuna/hhblogDevelop development by creating an account on GitHub.

github.com

 

  1. mysql을 연동해보자
  2. refreshToken을 사용해보자
  3. 페이징 처리를 해보자
  4. 회원탈퇴 기능을 추가해보자
  5. 키워드로 검색하는 기능을 추가해보자
  6. Redis를 사용하여 로그인/로그아웃 해보자
  7. 파일 업로드 기능도 추가해보자

이렇게 7가지를 진행했다. 우선 DB 연결은 큰 문제 없었다. 먼저 공부하면서 mysql 을 설치해놨었기 때문에 그냥 DB 연결만 하면 되는거였다. 다음으로 리프레시 토큰 적용. 토큰의 특성상 유지되는 시간이 길어질수록 보안에 취약해진다. 그래서 그것을 보완하기 위해 "Access Token"과 "Refresh Token"으로 나눈다. 리프레시 토큰은 보통 2주, 길게는 한 달정도의 시간동안 유효하고 엑세스 토큰은 30분 이내의 만료시간을 설정해둔다. 그래서 사용자는 액세스 토큰을 가지고 서비스에 접근하여 사용하고 토큰이 만료되었을 경우 리프레시 토큰이 있다면 새로운 액세스 토큰이 발급된다. 그렇게 하기 위해 사용자가 로그인을 하면 두 가지의 토큰을 발급해주는 로직과 토큰을 체크하는 필터를 설정해두었다.

 

다음으로 페이징 처리는 생각보다 쉬웠다. Page도 메소드로 제공하고 있어서 그것을 사용하면 간단히 적용할 수 있었다. 그리고 문제는 회원탈퇴. 이 기능을 위해 사용자와 각 객체들의 연관관계를 맺어주었는데 사용을 '지양'하는 OneToMany, 심지어는 리프레시 토큰과도 OneToOne 관계를 맺어주었다. ㅋㅋㅋ 나중에 듣고보니 이런 경우는 처음 본다고 ㅋㅋ 한참 고민을 했지만 결국 탈퇴를 하면 모든게 삭제가 잘되긴 했다. 어쨌든 성공?

 

키워드로 검색하기 역시 쿼리문만 수정하여 날리면 되는거라 쉬웠음. 다음 Redis를 사용해서 리프레시 토큰은 기존 DB에 저장해놓고 회원이 로그아웃을 요청했을 때 레디스 블랙리스트에 액세스 토큰을 넣어 관리해주는 방식으로 진행해보았는데 탈퇴 기능을 만들면서 너무나도 촘촘히 연관관계를 맺어놓았기 때문에 리프레시 토큰이 삭제되지 않는 불상사가 발생했다. ㅋㅋㅋ 시간도 촉박해서 일단은 어떻게 진행되는지 플로우를 파악했다는 것에 의의를 두고 넘어갔다. 

 

파일/이미지 파일 업로드 기능도 연습해보면 좋을 것 같아서 어디서 참고 코드를 긁어오긴 했다만 기능이 잘 되는지는 사실 모르겠고, 이미지 파일은 보통 AWS의 S3를 사용해서 관리한다고 했다. 그래서 이건 좀 나중에 AWS 인프라에 대해 공부해보고 적용해보는 것으로 했다. 

 

과제가 끝나고 일주일동안 다른 팀원들과 각자의 목표를 위해 멈추지 않고 함께 달렸다는 것이 뜻깊은 시간이었다. 혼자서 했다면 아마도 위의 기능중 절반도 못했을 것 같다. 무튼 내일부터는 프로젝트가 시작이 될텐데 또 어떤 일이 펼쳐질지 많은 기대가 된다. 또 다시 열심히 달려보자.