들어가며 프로젝트에 음식점 검색 기능을 구현해야했다. 초반에는 Elasticsearch를 이용해서 구현을 해보려고 목표를 잡아두었었는데, Elasticsearch의 러닝커브가 높고 리소스도 많이 드는 기술이기 때문에 다른 방법을 찾다가 FullText Search에 대해 알게 되었다. 오늘의 TIL은 Elasticsearch에 대해 간단하게 알아보고, MySQL에서 제공하는 FullText Search에 대해 정리하고자 한다. 검색 기능을 구현하기 위한 몇가지 방안 1. 검색 엔진 Elasticsearch Elasticsearch란? Elasticsearch는 루씬(Lucene)을 기반으로 텍스트, 숫자, 위치 기반 정보, 정형 및 비정형 데이터 등 모든 유형의 데이터를 위한 무료 검색 및 분석 엔진이다..
til
들어가며 지난 번 삽질로그에서 배포 후 cookie를 넘겨주는 문제를 해결했었다. 그런데 이번에는 그렇게 넘겨준 cookie가 삭제되지 않는 문제가 발생했다. 소셜 로그인 시 redirect_uri 등등 잠시 사용할 목적의 쿠키를 저장해두었다가 로그인 완료 후 token 발급 시에 해당 쿠키를 삭제하는 방식으로 구현이 되어있어 최종적으로 refresh_token만 쿠키 안에 담겨있어야하는데 필요없는 쿠키들이 삭제되고있지 않았다. 오늘의 TIL은 이 문제에 대한 트러블 슈팅을 해보고자 한다. 배포 후, cookie가 삭제되지 않는 문제 기존의 cookie 삭제 로직은 다음과 같다 public static void deleteCookie(HttpServletRequest request, HttpServlet..
들어가며 JWT를 구현하고 있는데, 이번에는 에러 처리가 문제이다! 자꾸 토큰이 유효하지 않은데도 권한 에러인 401이 아니라 500 NullPointerException을 던져준다. 원인은 JWT의 플로우를 제대로 이해하지 못하고 있어서였다. 따라서 오늘의 TIL은 이 문제에 대한 트러블슈팅을 하고자 한다. JWT 401에러 보내기 우선 예외가 발생하는 클래스를 디버깅으로 찾아보았다. 원인은 AuthToken 클래스에서 Claim을 가져오는 메소드가 문제였다. 지금까지는 AuthToken 클래스에서 Claim을 가져올 때 예외가 발생하면 try-catch 문으로 예외처리를 해주고 있었다. AuthToken.java public Claims getTokenClaims() { try { return Jwt..
들어가며 Postman은 ui도 깔끔하고, 잘 사용할 줄만 안다면 최강의 시너지를 발휘하는 프로그램이다. 잘 사용하지 못하면 이번처럼 삽질도 하겠지만... 오늘의 TIL은 postman을 사용하면서 새롭게 알게된 postman에서 cookie를 사용하는 방법을 정리한 글을 첨부하는 걸로 간단하게 끝내고자 한다. Postman cookie 설정 [Postman] postman에서 cookie 설정 [Postman] postman에서 cookie 설정 들어가며 소셜로그인을 구현하면서 postman으로는 소셜 로그인창으로는 redirect가 되지 않아 브라우저에서 로그인을 진행하고, refresh token을 쿠키로 받아왔다. 그리고나서 refresh token을 cookie에서 뽑 annajin.tistor..
들어가며 spring security + jwt + OAuth2.0 조합은 정말 쉽지가 않다. 특히 security랑 jwt가 가장 어렵다..!! 오늘의 TIL은 소셜 로그인을 구현하면서 겪었던 트러블 슈팅을 작성해보고자 한다! 트러블 슈팅 문제 - 카카오 로그인에서 이메일이 넘어오지 않는 문제 카카오로 로그인을 시도했을 때, 이메일이 넘어오지 않아 DB에 default 값인 NO_EMAIL이 들어오고 있었다. 디버깅을 돌려보니 kakaoOAuth2UserInfo클래스에서 getEmail() 메소드로 이메일을 불러올 때 이메일을 받아오고 있지 못해서 생기는 문제였는데, 해당 메소드의 코드를 보면 key값이 kakao가 제공하는 response의 key값과 다르다. 문제의 코드 @Override publi..
들어가며 실전프로젝트 D-1 아직도 주특기 주차 과제에서 해결하지 못한 부분이 많다는걸 뒤늦게야 깨달아서 마음이 조급해졌다. 빨리 서버를 만들어서 프론트와 연결해야한다는 생각에 사로잡히는 바람에 문제점들을 제대로 짚어내지 못한게 화근이었다. 당장 실전 프로젝트때 적용해야하는 부분들이기 때문에 미리 알아두었어야 하는 부분들인데... 아쉬움이 크게 남는다. 오늘의 TIL은 주특기 주차동안 해결하지 못했던 부분, 아쉬웠던 부분을 실전프로젝트 때 적용할 수 있도록 정리하고자 한다. 해결하지 못한 부분 테스트 코드 작성 개발의 기본이 되는 테스트 코드 작성. 중요한 부분이지만 다른 부분을 잡느라고 작성하지 못했다. 뒤늦게 테스트 코드를 잡으려고 하니 시간이 부족한 사태가 벌어졌다. 실전이 들어가기 전에 테스트 코..
들어가며 드디어 벼르고 벼르던 프록시와 지연/즉시 로딩의 정리가 끝이 났다. 하이버네이트를 선행하거나 JPA를 확실히 공부한게 아니라 Spring Data JPA를 이용해서 바로 활용단계로 넘어간 탓인지 이 개념에 대해 이해하고 내 언어로 정리하기가 상당히 어려웠다. 또, 이 개념을 알기 위해서는 선행에 선행해야하는 지식들이 꽤 있어서 그것들 먼저 정리하고 나중에 와서 정리해야지! 라고 생각하고 있었더니 더 막막해져서 다른 일을 우선순위로 두는 바람에 많이 늦어졌다. 그래도 시간을 들여서 이렇게 정리하고 나니까 확실히 전보다는 JPA에 한걸음 가까워진 기분이 든다. 역시 공부하는 건 재밌어! 오늘의 TIL은 열심히 정리한 프록시와 지연 로딩, 즉시 로딩에 관한 포스팅을 첨부하는 것으로 간단하게 끝내고자 ..
들어가며 실전프로젝트까지 얼마 남지 않은 시점에서 그 무엇보다 JPA의 개념을 가져가는게 더 중요할 거라고 생각했기에 체력 관리와 개념 공부에 힘쓴 날이다. 오늘의 TIL은 오늘 정리한 JPA의 영속성 컨텍스트의 포스팅을 링크거는 걸로 마무리하도록 하겠다! 영속성 관리 [JPA] 영속성 관리 [JPA] 영속성 관리 들어가며 이 포스팅은 김영한 강사님의 자바 ORM 표준 JPA 프로그래밍 강의와 저서를 주로 참고하여 작성하였음을 미리 밝힌다. Spring data JPA를 사용하여 개발을 진행하기 전에 JPA와 하이버네이트 annajin.tistory.com 마치며 오늘은 신나는 맥주파티 하는 날~! 일요일의 연장으로 소소하게 즐기는 시간을 갖기로 했다.
들어가며 처음 프론트와 협업을 해보면서 지금껏 마주보지 못했던 수많은 에러를 마주했다. 그 중 하나가 계속 과제에서 강조했던 CORS 정책 위반이었는데, 처리를 해두었다고 생각했음에도 같은 에러가 났다. 그러므로 오늘의 TIL은 CORS에 대해 알아보고 이를 어떻게 잡을 지 알아보고, 오늘 만난 에러에 대한 트러블 슈팅 또한 해보고자 한다. CORS(Cross-Origin Resource Sharing) 교차 출처 리소스 공유(CORS, Corss-Origin Resource Sharing)는 일반적으로 개발을 배우기 시작하는 단계쯔음 클라이언트 - 서버 간의 통신을 시도할 때, CORS 정책 위반 에러로 처음 접하게 된다고 한다. 이 CORS는 무엇이고 뭐 때문에 우리에게 에러를 던져줄까? CORS는 ..
들어가며 과제 제출을 위해 Readme.md를 작성해야할 일이 생겼다. 깃허브 Readme는 기본적으로 마크다운 문법을 사용하기 때문에 깔끔한 Readme를 위해서는 이 문법을 대강이라도 숙지하고 있어야한다. Notion도 기본적으로는 마크다운 문법을 사용하고 있고, 여러모로 쓸 일이 많은 문법인데 헷갈릴 때마다 구글링하기 번거로우므로 오늘의 TIL은 깃허브 Readme 작성을 위한 마크다운 문법을 간단하게 정리해보고자 한다! 마크다운 문법 제목 # 제목1 ## 제목2 ### 제목3 #### 제목4 ##### 제목5 ###### 제목6 제목1(#)과 제목2(##)은 Header로 취급되기 때문에 수평선이 자동으로 생긴다. 인용 > 인용1 >> 인용2 >>> 인용3 목록 숫자 목록 1. 숫자 목록 2. 숫..
반응형