들어가며 일반적으로 Spring boot에서 Get방식(혹은 쿼리파라미터가 필요한) 요청을 받을 때 사용되는 어노테이션에는 @RequestParam, @PathVariable, @ModelAttribute가 있다. 파라미터의 개수가 적은 경우에는 앞의 두개 어노테이션으로 충분하지만 파라미터가 많아질 수록 객체로 요청을 받는게 가독성 측면에도 관리 측면에도 수월해지기 때문에 @ModelAttribute를 사용한다. 종종 @ModelAttribute를 사용하면서 헷갈리거나 잊어버리는 개념이 있어 이번 포스팅에서는 @ModelAttribute 어노테이션에 대해 공부해보고자 한다! @ModelAttribute 사용 이유 요청을 받을 때 다음과 같이 파라미터의 개수가 적다면 @RequestParam 어노테이션으로..
Study
들어가며 WebClient는 RestTemplate의 대안으로서 급부상된 WebFlux의 라이브러리이다. Spring MVC에서도 지원하는 WebClient는 RestTemplate과 비교했을 때 가장 큰 장점이 `비동기 통신을 지원한다`는 점이 아닐까 싶다. 물론 그 외에도 함수형 프로그래밍 스타일을 지원한다는 점, 다양한 설정과 에러처리를 지원한다는 점 등도 장점으로 꼽을 수 있겠다. WebClient의 최대 장점인 비동기 통신을 지금까지 사용하기 어렵고 쓸 데가 없다는 이유만으로 동기 방식을 고수해왔었는데 이번 회사 프로젝트를 하면서 비동기 통신이 필요해진 시점이 생겼다. 이번 기회에 WebClient의 비동기 통신을 구현해보았고 이번 포스팅의 주제로 삼아보고자 한다. 처음 비동기 통신을 구현해보았..
들어가며 이미 많은 개발자들이 알고, 사용해보고 있을 ChatGPT. Open AI에서 만든 ChatGPT는 API로도 사용이 가능하다. 모델마다 토큰 당 가격에 일부 차이가 있지만 단순한 프로젝트에 적용하기에는 부담되는 비용이 아니기 때문에 사이드프로젝트에 도입을 해보면 좋을 것 같다는 생각이 들어 간단하게 사용법을 작성해보고자 한다. 자세한 내용은 OpenAI의 ChatGPT API Docs를 참고하도록 하자 ChatGPT API Docs OpenAI Platform Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform. platform.openai.com..
들어가며 회사에서 개발 중인 서비스가 통신하기 위한 서버가 특정 서버에서만 접근 가능한 상황이었다. 백그라운드에서 동작하는 (유저가 접근하지 않아도 되는) 어플리케이션은 그 특정 서버에 서비스를 띄워서 서로 통신이 가능한 방식을 사용하고 있었지만 개발 중인 서비스가 동작 중인 서버는 별도의 서버로 분리가 되어있었고, 이 서버는 정책상 특정 서버에서 인바운드가 막혀있는 상태였다. 조금 복잡한데 아무튼 개발 중 서비스 -> 타겟 서버로의 직접 접근이 안된다는 말이다. 이 문제를 해결하기 위해서는 타겟 서버로의 접속을 우회하는 방식을 사용해야하는데 이걸 SSH 터널링이라고 한다. 이번에는 SSH 터널링의 개념과 필요성, 구현 예시에 대해 작성해보고자 한다. SSH (Secure Shell) 시큐어 셸(Secu..
들어가며 2023.08.25 - [Study/Spring boot] - [Spring boot] WebClient 사용해보기 2-1 이전글에서는 내가 어떻게 웹클라이언트를 사용하고 있는 지에 대해 간단하게 설명했다. 이번 글에서는 코드를 하나씩 보면서 내가 짠 코드가 어떻게 작동하는 지에 대해 설명해보고자 한다. 지난 글에서 위의 그림과 같이 메서드 체이닝 방식을 직접 구현했었다. 위의 그림 순서에 따라서 차근차근 코드를 보자. ApiWebClientBuilder @Component @RequiredArgsConstructor public class ApiWebClientBuilder { private final WebClient.Builder webClientBuilder; // 체이닝 시작점 publ..
들어가며 무려 1년도 더 된 이전글이 항상 내 블로그 인기글 1위인걸 볼 때마다 마음에 걸렸다. 막 개발 공부하기 시작했을 즈음 webClient에 대한 자료가 별로 없어서 정리할 겸 작성했던 글인데 관련 키워드로 검색하면 저 글이 뜨는 걸 보고... 새롭게 알게된 내용들을 조금 더 추가하고, 현재는 어떻게 사용하고 있는 지에 대해 정리를 해보고자 한다. 기본 개념이나 RestTemplate과의 차이점 등등은 공식문서나 구글에 검색하면 깔끔하게 정리된 자료가 많기에 넘어가기로 하고, 내가 사용하면서 알게 된 개념들만 적어내려가보겠다! WebClient 최종적으로 완성될 구조는 위와 같다. 각 step 이 뭐고 어떻게 사용하는 지는 천천히 설명하기로 하겠다. 이 구조를 사용하면 아래와 같이 코드를 사용할 ..
들어가며 개발을 하다보면 사진처럼 주석을 하이라이팅 하거나 한눈에 모아보고 싶은 경우가 있다. Intellij에서 제공하는 테마를 살짝 손봐서 주석 색상을 변경하는 방법도 있고, Javadoc 주석(/** content */)을 사용는 방법도 있 지만 Intellij 자체에서 주석을 모아보는 TODO 기능이 존재한다. 오늘은 Intellij에서 제공하는 TODO 코드 태그(Code Tag)기능을 알아보자! TODO 기능 사용하기 기본 사용법 TODO 기능의 사용방법은 간단하다. 주석 코드와 함께 대문자로 TODO를 입력하면 자동으로 주석이 하이라이팅이 된다. (!) 이때 TODO와 작성하고자하는 내용은 한칸의 공백(space)가 있어야 한다. 이렇게 멀티라인으로도 사용할 수 있다! 멀티라인 TODO는 T..
“사회적 교통약자도 편하게 식사하세요” 배슐랭은 사회적 교통 약자가 보다 쉽게 이용할 수 있는 배리어 프리 식당이나 카페 등 가게 정보를 알려주고 사용자 위치 맞춤 추천 서비스를 제공합니다. 사회적 교통 약자분들 위한 음식점 정보와 유저들의 생생한 방문 경험이 담긴 리뷰들로 편하게 방문해보세요! 배슐랭이 사회적 교통약자분들이 편하게 살아갈 수 있도록 한 걸음 나아가겠습니다. 👩🦼 배슐랭 바로가기 Background 배리어 프리 (Barrier-free)는 사회적 약자가 생활하기에 불편함을 주는 물리전, 제도적 장벽을 제거하자는 운동입니다. 생활공간에서 장애인과 비장애인 간의 장벽을 없애자는 움직임이 증가하고 있지만 아직도 사회적 교통약자는 행복을 추구할 기본적인 권리를 보장받지 못하고 있습니다. 배슐랭..
들어가며 프로젝트에 음식점 검색 기능을 구현해야했다. 초반에는 Elasticsearch를 이용해서 구현을 해보려고 목표를 잡아두었었는데, Elasticsearch의 러닝커브가 높고 리소스도 많이 드는 기술이기 때문에 다른 방법을 찾다가 FullText Search에 대해 알게 되었다. 오늘의 TIL은 Elasticsearch에 대해 간단하게 알아보고, MySQL에서 제공하는 FullText Search에 대해 정리하고자 한다. 검색 기능을 구현하기 위한 몇가지 방안 1. 검색 엔진 Elasticsearch Elasticsearch란? Elasticsearch는 루씬(Lucene)을 기반으로 텍스트, 숫자, 위치 기반 정보, 정형 및 비정형 데이터 등 모든 유형의 데이터를 위한 무료 검색 및 분석 엔진이다..
들어가며 지난 번 삽질로그에서 배포 후 cookie를 넘겨주는 문제를 해결했었다. 그런데 이번에는 그렇게 넘겨준 cookie가 삭제되지 않는 문제가 발생했다. 소셜 로그인 시 redirect_uri 등등 잠시 사용할 목적의 쿠키를 저장해두었다가 로그인 완료 후 token 발급 시에 해당 쿠키를 삭제하는 방식으로 구현이 되어있어 최종적으로 refresh_token만 쿠키 안에 담겨있어야하는데 필요없는 쿠키들이 삭제되고있지 않았다. 오늘의 TIL은 이 문제에 대한 트러블 슈팅을 해보고자 한다. 배포 후, cookie가 삭제되지 않는 문제 기존의 cookie 삭제 로직은 다음과 같다 public static void deleteCookie(HttpServletRequest request, HttpServlet..
반응형