본문 바로가기

공부/TIL

23.12.14

오늘부터 시작되는 개인 프로젝트!

나만의 음악 게시판 만들기. 이번 프로젝트의 목표는 기존 코드를 복붙 금지. 내가 직접 처음부터 할 수 있는 최대한 직접 짜기. 어려울 것 같은 부분(인증/인가파트)가 있지만, 그래도 내가 자주 해왔던 작업이니까 할 수 있다고 믿고 해보련다. 이렇게 해야 내가 지금까지 공부했던 것 중에서 뭐를 아는지? 뭘 모르는지 알 수 있겠다 싶었다. 그냥 인터넷에 있는 코드들을 긁어와서 사용하는 것도 방법이겠지만, 그건 이제 내가 내손으로 모두 할 수 있을 때 내 입맛대로 커스텀 할 수 있을거라 생각한다.

오늘 구현한 기능들은 다음과 같다. 

첫번째로 회원가입 기능. 지금은 내가 혼자 쓰는 게시판이지만, 언젠가 배포할 날을 기대하며!

  • [ ] 닉네임, 비밀번호, 비밀번호 확인을 request에서 전달받기
  • [ ] 닉네임은 최소 3자 이상, 알파벳 대소문자(a~z, A~Z), 숫자(0~9)로 구성하기
  • [ ] 비밀번호는 최소 4자 이상이며, 닉네임과 같은 값이 포함된 경우 회원가입에 실패로 만들기
  • [ ] 비밀번호 확인은 비밀번호와 정확하게 일치하기
  • [ ] 데이터베이스에 존재하는 닉네임을 입력한 채 회원가입 버튼을 누른 경우 "중복된 닉네임입니다." 라는 에러메세지를 response에 포함하기
  • [ ] 회원 가입 버튼을 누르기 전, 같은 닉네임이 존재하는지 "확인" 버튼을 눌러 먼저 유효성 검증부터 할 수 있도록 해보기
  • [ ] (챌린지 과제) 데이터베이스에 비밀번호를 평문으로 저장하는 것이 아닌, 단방향 암호화 알고리즘을 이용하여 암호화 해서 저장하도록 하기

오늘의 공부중 가장 인상깊은 것은 AOP를 사용한 글로벌 예외처리. 정말 간단하더라. 그냥 예외가 발생하면 모두 던진다. 그리고 ControllerAdvice 어노테이션이 달려있는 클래스에 각 예외를 어떻게 던질지 말해주면 알아서 던져준다. 나는 모두 ResponseEntity의 바디에 어떤 예외가 터졌는지 메세지를 넣고, status값을 넣어줬다. 여기서 내가 더 확장시킬 수 있는 부분은 예외 커스텀이다. 아직 enum을 이용한 예외커스텀이 쉽게 이해가 되지 않아서 못하고 있다. IllegerArgumentException만 거의 던지는 중.. 그래도 작동에는 이상이 없으니 우선 이정도로 하고 넘어갔다. 또 valid를 이용해 정규표현식을 지정했다. 회원가입, 로그인시 정규표현식에 맞게 데이터를 입력하지 않으면 예외를 던진다. 이때 조금 예외를 처리하는 부분에 애를 먹었다. 하지만, 절대 코드를 복사하지 않는다. 내가 이해하고 내가 직접 코드를 썼다. 이러다보니 BindingResult라는 사기적인 클래스를 사용할 수 있게 됐다. 이 클래스는 예외가 발생하여 던져지면 그걸 모두 set 혹은 map에 던진다. 그럼 내가 나중에 모든 서비스가 끝난 후, 자료구조에 담겨져 있는 모든 예외를 다 응답할 수 있게 된다.

내가 그전에는 BindingResult에 대한 이해도가 없어서 한개의 예외만 던졌는데, 이제는 모든 예외를 던질 수 있더라. 이게 앞으로 예외를 처리할 때 자주 쓸 것 같음!!

 

그리고 마지막으로 오늘 인증/인가 파트를 조금 들어가봤다. 기존에 사용하던 Header에 값을 넣는 게 아닌, 쿠키에 jwt토큰을 넣어서 던질 것. 조금 험난하겠지만 이젠 이렇게 할 때가 됐다고 생각한다. 두번의 프로젝트 동안 내가 인증 파트를 맡앗지만, 너무 쉬운 길을 통해서 갔다. 근데 물론 처음부터 쉽지 않더라.. secretKey는 어떻게 생성하지?부터 시작해서 이 방대한 내용을 내가 소화할 수 있을지 걱정이지만 그래도 최대한 내손으로 해볼생각!  

'공부 > TIL' 카테고리의 다른 글

23.12.18  (0) 2023.12.18
23.12.15  (0) 2023.12.15
23.12.13  (0) 2023.12.13
23.12.12  (0) 2023.12.12
23.12.11  (1) 2023.12.11