어? 이제 RestTemplate은 Spring에서 권장하지 않는다구?

2026년 7월 15일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.들어가며얼마 전에 Spring Boot 프로젝트에서 외부 API를 RestTemplate 방식으로 쓰려고 찾아보다가 Spring 공식 문서에서 아래 내용을 발견했다.As of Spring Framework 7.0, RestTemplate is deprecated in favor of RestClient and will be removed in a future version, please use the "Migrating to RestClient" guide. For asynchronous and streaming scenarios, consider the reactive WebClient.→ S..

Backend/Java

서비스에 AI 붙이기: Spring AI + Ollama + Function Calling

2026년 3월 15일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.프로젝트를 만드는 데에 AI 사용은 이제 선택이 아닌 필수라고 생각한다. 그래서 프로젝트에 AI를 어디에 사용할 것인지에 대해서는 생각해둔 부분은 많지만 막상 구현을 해보려니 어디서부터 시작해야 할지 방향이 잡히지 않는 부분이 많아 프로젝트에 사용하기 전에 공부를 해보기로 생각했다.원래 생각했던 방식공부를 하기 전, 원래 생각했던 방식은 아래와 같다.GPT-4, GPT-5 등과 같은 모델을 사용할 수 있는 OpenAI API 사용하기Spring Boot에서 API 요청이 때, 서비스에 맞는 프롬프트와 데이터를 텍스트 형식으로 제공생성된 답변을 ResponseAI를 사용할 수 있는 방식들검색 증강..

Backend/Java

(Spring Boot) Elasticsearch를 활용해 1,000만 개 데이터에서의 검색 속도 개선해보기

2026년 1월 3일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.들어가며이 글에서는 Spring Boot, MariaDB, Elasticsearch를 활용해 1,000만 건의 데이터를 검색하는 과정을 다룰 예정이다. 기존 JPA LIKE 검색 방식과 ES를 도입한 방식을 비교하며 대규모 데이터의 검색 속도를 개선하는 방법에 대해 살펴보겠다.Elasticsearch란?Elasticsearch는 Apache Lucene 기반의 오픈소스, 분산, RESTful 검색 엔진이다. 대량의 데이터를 실시간에 가까운 속도로 검색하고 분석할 수 있다.특징Inverted Index“The quick brown fox jumps over the” 라는 문장을 하나의 열로 저장하는..

Backend/Java

AWS 탈탈 털리고, Amazon Lightsail을 이용해 안전하게 파일 업로드 해보기 (Spring Boot)

2025년 12월 24일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.얼마 전, AWS에서 보내주는 경고 이메일을 열심히 무시하다가 계정이 잠겼다는 이메일을 보고 후다닥 AWS Console로 들어가 보았는데, 엄청난 과금이 되고 있다는 것을 발견했다.. 계정 자체가 털린 것은 아니지만, 프로젝트를 배포하는 과정에서 흘린 콘솔 액세스 키가 탈취되어 액세스 키를 활용해 다른 사람이 계정의 모든 지역에 (고가의) 인스턴스를 무작위로 생성해 과금을 유발하고 있었던 것이였다.. (다행히 킹왕짱 AWS 측에서 요금 조정을 해줌)액세스 키를 왜 발급했었냐면,,단지, 프로젝트의 기능 중 하나인 프로필 사진 업로드 기능을 구현하는데, Amazon S3 서비스를 이용하려고 액세..

Backend/Java

Java Spring Boot에서 템플릿을 설정하고 이메일 발송하기

2025년 11월 27일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.Gmail 설정하기만약 이미 2단게 인증 설정을 완료했고, 앱 비밀번호를 발급 받았다면 3단계로 건너뛰면 된다.1. 2단계 인증 설정Gmail을 통해 메일을 발송하려면, 계정의 2단계 인증이 활성화 상태여야 한다. Google 계정 페이지의 좌측 사이드 바에서 보안 및 로그인 메뉴를 탭하고, 하단 2단계 인증을 활성화 시켜준다.2. 앱 비밀번호 설정Google 계정 앱 비밀번호 페이지에서 앱 비밀번호를 설정해준다.위 스크린샷 화면에서 아래 앱 이름 입력 란에 앱 이름을 입력해준다. 이후, 만들기 버튼이 활성화되면 클릭한다.앱 비밀번호를 생성하면 위 화면과 같이 생성된 앱 비밀번호 Modal이 ..

Backend/Java

값이 반드시 유효해야 할 때: Spring Boot에서 Validation 처리하기

2025년 11월 4일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.왜 Validation을 추가해야 했을까?현재 개발 중인 앱에 피드백 기능이 있는데, 프론트엔드에서는 300자로 글자 수 제한을 두고 있지만, API를 이용해 직접 요청을 보내면, 글자 수 제한 없이 요청이 가능한 것을 확인했다. 이는 앱을 사용하는 사용자가 비정상적으로 요청을 보내게 되면 백엔드에서는 무한정으로 보낼 수 있기 때문에 혹시나 하는 상황을 대비해 백엔드에서도 이를 처리할 수단이 필요하다 생각되었다. 프론트엔드에서만 글자 수 제한을 둬서 막아도, 백엔드에서는 무한정 받을 수 있기 때문이다.Spring Boot Validation 설정하기Spring Boot Validation 을 사..

Backend/Java

[Spring Boot / JPA] @CreationTimestamp / @UpdateTimeStamp

2025년 5월 31일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.들어가며Spring Boot로 API를 만들 때 최초 업로드 된 Timestamp와 해당 Entity를 업데이트 했을 때의 Timestamp를 서비스 단에서 LocalDateTime.now() 로 직접 수정하였다. 코드로 예를 들면 아래와 같다....@Entityclass Project( ... @Column(nullable = false) var uploadedAt: LocalDateTime? = LocalDateTime.now(), @Column(nullable = false) var updatedAt: LocalDateTime? = LocalDateTime.now(), ...)...@..

Backend/Java

Spring Boot와 ELK를 활용한 서비스 로그 수집 및 모니터링

2025년 3월 6일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.ELK Stack정의ELK Stack은 Elasticsearch, Logstash, Kibana Stack의 줄임말로, 모든 시스템과 애플리케이션에서 로그를 집계, 분석하며 분석된 정보를 시각적으로 나타냄을 도와준다.작동 방식App & Log: 어플리케이션 또는 서비스에서 생성된 로그를 Logstash 로 전송한다.Logstash: 데이터를 수집 후 변환해 Elasticsearch 로 전송한다.Elasticsearch: 수집된(전송 받은) 데이터 또는 로그를 인덱싱, 분석하고 탐색한다.Kibana: 분석 결과를 시각화한다.Spring Boot 프로젝트 세팅1. 의존성(logstash-logback..

Backend/Java

S3 이미지 업로드 후 URL로 접근 시 Access Denied

2024년 12월 20일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.무슨 오류가 발생했을까?This XML file does not appear to have any style information associated with it. The document tree is shown below.AccessDeniedAccess DeniedM11MQ3732XTKGZ66Uxd4UBF7vXDz9KpS6HCofiDuD+Tqid3l0GVkHsfD+J5rSjmb4j35G5IsUOoiouWD3xM8UY0F1gw=Amazon S3에 파일(이미지)을 업로드 후, URL로 파일에 접근하면 위와 같은 오류가 발생한다. S3 버킷을 처음에 생성할 때 권한을 public으로 설정했음에..

Backend/AWS

Spring Boot에서 CORS 설정 시 addCorsMappings 에러

2024년 9월 28일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.무슨 오류가 발생했을까?Spring Boot에서 CORS 설정을 하는 도중 다음과 같은 에러가 발생했다.java.lang.IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header. To allow credentials to a set of origins, list them explicitly or consider using..

Backend/Java

어? 이제 RestTemplate은 Spring에서 권장하지 않는다구?

2026년 7월 15일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.들어가며얼마 전에 Spring Boot 프로젝트에서 외부 API를 RestTemplate 방식으로 쓰려고 찾아보다가 Spring 공식 문서에서 아래 내용을 발견했다.As of Spring Framework 7.0, RestTemplate is deprecated in favor of RestClient and will be removed in a future version, please use the "Migrating to RestClient" guide. For asynchronous and streaming scenarios, consider the reactive WebClient.→ S..

Backend/Java

서비스에 AI 붙이기: Spring AI + Ollama + Function Calling

2026년 3월 15일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.프로젝트를 만드는 데에 AI 사용은 이제 선택이 아닌 필수라고 생각한다. 그래서 프로젝트에 AI를 어디에 사용할 것인지에 대해서는 생각해둔 부분은 많지만 막상 구현을 해보려니 어디서부터 시작해야 할지 방향이 잡히지 않는 부분이 많아 프로젝트에 사용하기 전에 공부를 해보기로 생각했다.원래 생각했던 방식공부를 하기 전, 원래 생각했던 방식은 아래와 같다.GPT-4, GPT-5 등과 같은 모델을 사용할 수 있는 OpenAI API 사용하기Spring Boot에서 API 요청이 때, 서비스에 맞는 프롬프트와 데이터를 텍스트 형식으로 제공생성된 답변을 ResponseAI를 사용할 수 있는 방식들검색 증강..

Backend/Java

(Spring Boot) Elasticsearch를 활용해 1,000만 개 데이터에서의 검색 속도 개선해보기

2026년 1월 3일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.들어가며이 글에서는 Spring Boot, MariaDB, Elasticsearch를 활용해 1,000만 건의 데이터를 검색하는 과정을 다룰 예정이다. 기존 JPA LIKE 검색 방식과 ES를 도입한 방식을 비교하며 대규모 데이터의 검색 속도를 개선하는 방법에 대해 살펴보겠다.Elasticsearch란?Elasticsearch는 Apache Lucene 기반의 오픈소스, 분산, RESTful 검색 엔진이다. 대량의 데이터를 실시간에 가까운 속도로 검색하고 분석할 수 있다.특징Inverted Index“The quick brown fox jumps over the” 라는 문장을 하나의 열로 저장하는..

Backend/Java

AWS 탈탈 털리고, Amazon Lightsail을 이용해 안전하게 파일 업로드 해보기 (Spring Boot)

2025년 12월 24일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.얼마 전, AWS에서 보내주는 경고 이메일을 열심히 무시하다가 계정이 잠겼다는 이메일을 보고 후다닥 AWS Console로 들어가 보았는데, 엄청난 과금이 되고 있다는 것을 발견했다.. 계정 자체가 털린 것은 아니지만, 프로젝트를 배포하는 과정에서 흘린 콘솔 액세스 키가 탈취되어 액세스 키를 활용해 다른 사람이 계정의 모든 지역에 (고가의) 인스턴스를 무작위로 생성해 과금을 유발하고 있었던 것이였다.. (다행히 킹왕짱 AWS 측에서 요금 조정을 해줌)액세스 키를 왜 발급했었냐면,,단지, 프로젝트의 기능 중 하나인 프로필 사진 업로드 기능을 구현하는데, Amazon S3 서비스를 이용하려고 액세..

Backend/Java

Java Spring Boot에서 템플릿을 설정하고 이메일 발송하기

2025년 11월 27일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.Gmail 설정하기만약 이미 2단게 인증 설정을 완료했고, 앱 비밀번호를 발급 받았다면 3단계로 건너뛰면 된다.1. 2단계 인증 설정Gmail을 통해 메일을 발송하려면, 계정의 2단계 인증이 활성화 상태여야 한다. Google 계정 페이지의 좌측 사이드 바에서 보안 및 로그인 메뉴를 탭하고, 하단 2단계 인증을 활성화 시켜준다.2. 앱 비밀번호 설정Google 계정 앱 비밀번호 페이지에서 앱 비밀번호를 설정해준다.위 스크린샷 화면에서 아래 앱 이름 입력 란에 앱 이름을 입력해준다. 이후, 만들기 버튼이 활성화되면 클릭한다.앱 비밀번호를 생성하면 위 화면과 같이 생성된 앱 비밀번호 Modal이 ..

Backend/Java

값이 반드시 유효해야 할 때: Spring Boot에서 Validation 처리하기

2025년 11월 4일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.왜 Validation을 추가해야 했을까?현재 개발 중인 앱에 피드백 기능이 있는데, 프론트엔드에서는 300자로 글자 수 제한을 두고 있지만, API를 이용해 직접 요청을 보내면, 글자 수 제한 없이 요청이 가능한 것을 확인했다. 이는 앱을 사용하는 사용자가 비정상적으로 요청을 보내게 되면 백엔드에서는 무한정으로 보낼 수 있기 때문에 혹시나 하는 상황을 대비해 백엔드에서도 이를 처리할 수단이 필요하다 생각되었다. 프론트엔드에서만 글자 수 제한을 둬서 막아도, 백엔드에서는 무한정 받을 수 있기 때문이다.Spring Boot Validation 설정하기Spring Boot Validation 을 사..

Backend/Java

[Spring Boot / JPA] @CreationTimestamp / @UpdateTimeStamp

2025년 5월 31일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.들어가며Spring Boot로 API를 만들 때 최초 업로드 된 Timestamp와 해당 Entity를 업데이트 했을 때의 Timestamp를 서비스 단에서 LocalDateTime.now() 로 직접 수정하였다. 코드로 예를 들면 아래와 같다....@Entityclass Project( ... @Column(nullable = false) var uploadedAt: LocalDateTime? = LocalDateTime.now(), @Column(nullable = false) var updatedAt: LocalDateTime? = LocalDateTime.now(), ...)...@..

Backend/Java

Spring Boot와 ELK를 활용한 서비스 로그 수집 및 모니터링

2025년 3월 6일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.ELK Stack정의ELK Stack은 Elasticsearch, Logstash, Kibana Stack의 줄임말로, 모든 시스템과 애플리케이션에서 로그를 집계, 분석하며 분석된 정보를 시각적으로 나타냄을 도와준다.작동 방식App & Log: 어플리케이션 또는 서비스에서 생성된 로그를 Logstash 로 전송한다.Logstash: 데이터를 수집 후 변환해 Elasticsearch 로 전송한다.Elasticsearch: 수집된(전송 받은) 데이터 또는 로그를 인덱싱, 분석하고 탐색한다.Kibana: 분석 결과를 시각화한다.Spring Boot 프로젝트 세팅1. 의존성(logstash-logback..

Backend/Java

S3 이미지 업로드 후 URL로 접근 시 Access Denied

2024년 12월 20일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.무슨 오류가 발생했을까?This XML file does not appear to have any style information associated with it. The document tree is shown below.AccessDeniedAccess DeniedM11MQ3732XTKGZ66Uxd4UBF7vXDz9KpS6HCofiDuD+Tqid3l0GVkHsfD+J5rSjmb4j35G5IsUOoiouWD3xM8UY0F1gw=Amazon S3에 파일(이미지)을 업로드 후, URL로 파일에 접근하면 위와 같은 오류가 발생한다. S3 버킷을 처음에 생성할 때 권한을 public으로 설정했음에..

Backend/AWS

Spring Boot에서 CORS 설정 시 addCorsMappings 에러

2024년 9월 28일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.무슨 오류가 발생했을까?Spring Boot에서 CORS 설정을 하는 도중 다음과 같은 에러가 발생했다.java.lang.IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header. To allow credentials to a set of origins, list them explicitly or consider using..

Backend/Java