Hyun
Preview Image

단일 요청에서 스트리밍으로: SSE를 활용한 AI 서비스 UX 개선기

AI를 활용한 유저 인터뷰 및 텍스트 생성 서비스를 개발하면서, 전체 결과가 생성될 때까지 클라이언트가 계속 대기해야 하는 기존의 통신 방식이 만들어낸 UX 문제와 마주하게 되었다. AI 모델의 응답을 기다리는 동안 사용자는 10~20초간 로딩 스피너만 바라봐야 했다. 그렇다고 AI가 응답을 빠르게 할 수는 없었다. 서비스에 맞는 올바른 응답과 퀄리티...

Preview Image

소셜로그인 기능을 직접 만들어보자 (with Spring Oauth 2.0 Client)

이제는 소셜로그인을 지원하지 않는 서비스를 찾는 것이 더 어려워졌다. 어찌보면 당연한 현상이다. 서비스별로 아이디와 암호를 모두 외우는 대신 계정 하나의 아이디와 암호만 외우는 게 이용자로 하여금 훨씬 쉽기 때문에 그만큼 빠르게 보급되었다. 이 소셜로그인은 바로 지난 포스트에서 알아본 OAuth와 OIDC(OpenID Connect)를 통해서 구현되는...

Preview Image

OAuth에 이어, OIDC에 대해 알아보자

개발자 입장에서 로그인이나 회원 가입 등 사용자 정보를 직접 관리하는 것은 어찌 보면 당연한 일이지만, 동시에 굉장히 부담스러운 일이기도 하다. 최근 발생하는 다양한 보안 이슈만 보더라도, 이 작업이 얼마나 어려운 일인지 알 수 있다.시간이 지날수록 우리가 사용하는 서비스의 종류는 점점 늘어나고 있다. 이는 사용자에게도 부담스러운 일이다. 내 정보를 ...

Preview Image

OAuth 개념과 동작 원리를 정리해보자

요즘 다양한 서비스에서 소셜로그인을 기본적으로 지원하는 모습을 쉽게 볼 수 있다. 이 소셜로그인은 사용자가 별도의 회원가입 없이 구글, 카카오, 네이버 등 외부 플랫폼 계정으로 간편하게 로그인할 수 있게 해주는데, 그 동작 원리는 바로 OAuth 2.0 프로토콜에 기반한다. 소셜로그인의 핵심 동작 원리는 OAuth 2.0 권한 부여 프로토콜을 활용해...

Preview Image

[Spring Boot에서 캐시(Cache) 활용하기] - 글로벌 캐시 사용하기

지난 포스트에서는 Spring Boot 애플리케이션에 로컬 캐시(Caffeine Cache)를 적용하는 방법과 그 효과에 대해 살펴보았다. 이번 포스트에서는 저번 포스트에서 사용한 책 정보 서비스에 글로벌 캐시(Redis)를 적용과 관련하여 알아보자. 도입 배경 로컬 캐시의 한계 로컬 캐시는 애플리케이션 인스턴스의 메모리에 직접 데이터를 저장하여...

Preview Image

[Spring Boot에서 캐시(Cache) 활용하기] - 캐시 적용해보기

지난 포스트에서는 캐시의 기본 개념과 Spring에서 제공하는 캐시 추상화에 대해 알아보았다. 이번 포스트에서는 간단한 서비스를 직접 구현한 뒤, 여기에 로컬(Caffeine Cache) 캐시를 적용해보고 실제로 어떤 변화가 있는지 살펴보겠다. 캐시를 적용하기 전후의 성능 차이를 비교하면서, 캐시가 서비스에 어떤 장점을 가져다주는지 구체적으로 확인해보...

Preview Image

[Spring Boot에서 캐시(Cache) 활용하기] - 캐시 개념과 기본 사용법

단순한 조회 작업마다 매번 데이터베이스를 호출하는 것은 비효율적일 수 있다. 서비스의 규모가 커지고 트래픽이 증가할수록 이러한 비효율은 더욱 두드러진다. 이럴 때 캐시는 문제를 해결할 수 있는 효과적인 방법 중 하나다. 자주 접근하는 데이터를 미리 저장해두고 필요할 때 빠르게 제공함으로써 데이터베이스 부하를 줄이고, 응답 시간을 단축시킬 수 있다. ...

Preview Image

NoSQL 데이터베이스 가이드: 언제, 어떤 모델을 선택해야 할까

레디스(Redis)에 대해 찾아보던 중, 자연스럽게 NoSQL 데이터베이스 전반에 대한 궁금증이 생기게 되었다. 레디스도 엄연히 NoSQL이기 때문에, 이를 제대로 알기 위해서는 NoSQL에 대해서 먼저 알아둘 필요가 있다고 생각했다. NoSQL에는 어떤 특징과 차이점이 있는지 한 번쯤 정리해두면 좋을 것 같았다. 이번 포스트에서는 NoSQL의 정의...

Preview Image

Controller에서는 어떻게 파라미터를 받을까?

Spring에서 Controller는 사용자의 요청을 받아서 처리하고, 그 결과를 클라이언트에 반환하는 역할을 한다. 요청 데이터를 컨트롤러 메소드에 전달하는 방법에는 여러 가지가 있다. @RequestParam 애노테이션을 사용하여 요청 파라미터(즉, 쿼리 파라미터나 폼 데이터)를 컨트롤러의 메서드 매개변수에 바인딩할 수 있다. @RequestBo...