부트캠프 23일차 후기
오늘 CodeKata는 간만에 힘 써서 6문제를 풀었다. 예전에 다른 언어로 푼 문제가 섞여 있어서 그 문제의 풀이가 도움이 되어서 빠르게 풀 수 있었다. 첫 문제를 보았을 때, 처음으로 곧바로 답이 떠올리지 않아서 오늘은 고전할 것이란 예상은 훌륭히 빗나가버렸다. 이로써 CodeKata LV4를 마치고 내일부턴 LV5를 풀게 된다.
오늘 CodeKata를 풀며 알게 된 건 Kotlin엔 Queue가 없다는 사실이다. 처음에 Queue를 사용하려 했을 때, java.util 패키지가 import 되어서 많이 의아해서 구글링을 해서 나온 정보였다. 그렇기에 직접 구현하거나, Java에 있는 Queue를 사용해야한다. 혹시나 다른 방법이 없을까 찾아본 결과, Kotlin엔 Queue가 없지만 Deque가 있다는 사실을 알게 되었다. 바로 ArrayDeque란 자료형으로 앞과 뒤에 원소를 더하거나 뺄 수 있다. 이 자료형을 앞에서 빼고, 뒤에 추가하는 기능만을 사용해서 Queue처럼 사용할 수 있다. 그렇게 나는 자료구조를 써서 문제를 해결했고, 앞으로 필요하면 사용할 것 같은데 다소 걱정인 점은 이 Deque란 자료구조는 다른 자료구조에 비해 다소 비효율적이란 소리를 들은 적이 있어서, 이것 때문에 시간제한에 걸릴 것 같다는 것이다. 지금은 머리 아프니 나중에 이것 때문에 시간제한이 걸린 것 같을 때 고민해보도록하자.
드디어 오늘 로그인 / 회원가입 기능 구현을 마쳤다. 며칠 간 Spring Securiy와 씨름한 결과 드디어 성과를 얻었다.
정확히는 Swagger만을 사용하기 때문에, 로그인을 했을 때, Bearer Token을 발급하고 그것을 Response에 담어서 리턴하고. 리턴된 Response의 정보의 Token 값을 확인해서. Swagger에서 로그인하는 방식을 택하였다. 로그인 확인은 OncePerRequestFilter을 상속해서 override한 클래스가 확인하는데, 요청때마다 보내는 Request Header의 Authorization 필드에서 토큰을 추출한 다음, 토큰을 발급받은 유저를 확인하는 방식이다.
로그인/회원가입 기능을 마친 이후에, 다른 엔티티에서 String으로 처리한 writer를 로그인한 Member로 바꾸는 작업을 하였다. String을 @ManyToOne Member로 바꾸는 것이 예상보다 시간이 걸렸다. 중간에 상속을 활용할지, 아니면 member Id를 String타입인 username으로 할지 등등 고민을 했지만 결국 상속 활용은 내가 더 JPA에 익숙해졌을 때, 사용하고 username은 후에 바뀔 수도 있어서 Id는 username과 별개인 Long 타입으로 설정하였다.
평소보다 글의 양이 적은 것 같지만 평소보다 성과는 많은 날이였다. 드디어 Spring Security 지옥에서 벗어난 것 같아서 개운하다. 내일이야말로 과제를 마무리짓도록하자.