RabbitMQ를 이용해서 응답 시간을 반의 반의 반의 반으로 줄여보자

2024년 3월 22일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.RabbitMQ를 도입하게 된 배경현재 개발 중인 사이드 프로젝트에서 회원가입을 진행할 때 이메일 인증 기능이 사용된다. 인증번호를 담은 메일을 발송하는 API에 요청을 보내면, 응답시간이 상당히 길게 소요된다. 대충 얼마나 소요되냐면..정확하게 4.68초, 약 5초 정도 소요된다. 이메일 요청을 보내게 되면, 아래와 같은 로직을 수행하게 된다.이메일 정규식에 일치하는가?이미 서비스에 등록된 회원이 있는가?이전 이메일 인증 요청을 발송한 후 1분이 경과되었는가? (Redis 사용)새 이메일 인증 번호 생성이메일 인증 번호를 담은 템플릿 생성메일 발송이 과정을 수행해야 사용자가 입력한 메일로 인증..

Backend/Java

[Ubuntu] MariaDB 외부 접속 허용

2024년 3월 20일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf/etc/mysql/mariadb.conf.d/50-server.cnf 파일을 nano 편집기로 열어준다. 방향키를 이용하여 아래 내용을 찾아준다.# Instead of skip-networking the default is now to listen only on# localhost which is more compatible and is not less secure.bind-address = 127.0.0.1여기에서 bind-address 부분을 0.0.0.0 으로 변경해 주어 외부에서 ..

Backend/Linux

[오류 해결] SQL ERROR 1406: Data too long for column at row 1

2024년 3월 11일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.문제 상황GPT-4 응답 결과와 토큰 사용량에 대해 데이터베이스에 저장하려고 얼마 전에 코드를 수정했다. 수정 전에는 GPT-4에 대한 응답 결과를 따로 저장하지 않고 바로 응답 값을 출력하도록 해두었으나, 수정 후에 갑자기 500(Internal Server Error)가 발생한다는 소식에 확인을 시작했다.백엔드 코드를 확인해 보니 아래 오류가 발생한 것을 확인할 수 있었다.2024-03-10 10:49:04.949 ERROR 1 --- [nio-8080-exec-5] o.h.engine.jdbc.spi.SqlExceptionHelper : (conn=605) Data too long fo..

Backend/Java

Spring, 테스트 코드는 왜 작성할까?

2024년 3월 8일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.원래 필자는 PHP와 그 프레임워크인 Laravel을 이용하여 개발을 해왔다. 하지만, PHP의 인기도가 점점 낮아져가는 것도 사실이고, 다른 언어를 접해 보고자 PHP에서 Java와 Spring Boot로 주 개발 언어를 변경하였다. Spring Boot에 익숙해지고, 여러 커뮤니티를 보며 '테스트 코드'라는 게시글을 많이 접하게 되었다. 그래서 나도 원래는 테스트 코드를 작성하지 않았지만 사실 귀찮아서.. 테스트 코드를 작성하는 방법과 그 이유에 대해서는 꼭 알고 넘어가고 싶기에 이 글을 작성했다.테스트 코드를 왜 작성할까?1. 서버를 시작하여 직접 테스트하는 것 보다 시간을 단축시킬 수 있다..

Backend/Java

Spring Boot에서 ChatGPT 활용하기 #2: API로 GPT 응답 값 가져오기

2024년 2월 27일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.Spring Boot에서 ChatGPT 활용하기 #1: API 연결 테스트에 이어 이 글에서는 Spring Boot에서 만든 API 호출을 통해 GPT의 응답 값을 가져오는 코드를 작성해 볼 것이다.구조gptㄴ controller ㄴ GptController.javaㄴ service ㄴ Impl ㄴ GptServiceImpl.java GptService.java application.propertiesapplication.propertieshttps://platform.openai.com/api-keys 여기에서 발급받은 Secret Key는 저장소에 올라가거나 공유되면 안 되..

Backend/Java

Spring Boot에서 ChatGPT 활용하기 #1: API 연결 테스트

2024년 2월 20일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.들어가며OpenAI의 ChatGPT는 현재 전 세계에서 가장 주목받고 있는 기술이다. ChatGPT에 대한 이해가 깊어지면서, 이를 활용한 API 개발에 대한 생각이 점점 커졌다. 또한, 최근에 릴리즈된 Spring Boot 3.0을 아직 제대로 활용해보지 않았던 점을 고려하여, 이번 프로젝트는 Spring Boot 3.0 기반으로 진행하기로 결정했다.ChatGPT API 호출ChatGPT 공식 문서에 따라 Spring Boot에서 본격적으로 활용하기 전 Postman을 통해 API 호출을 먼저 해보았다. 이 글을 쓰는 오늘(2024년 2월 19일) 기준, GPT 모델에 따른 엔드포인트는 다음과..

Backend/Java

Spring Security: There is no PasswordEncoder mapped for the id "null" 오류 해결

2023년 1월 10일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.문제 상황비밀번호 재설정 API를 개발하는 도중, 변경할 새로운 비밀번호가 기존 비밀번호와 일치하면 변경할 수 없도록 예외 처리를 진행하는 과정에서 There is no PasswordEncoder mapped for the id "null" 에러를 맞닥뜨렸다. 오류가 지시하고 있는 곳은 SignServiceImpl에서의 passwordEncoder.matches() 해당 부분이었다.원인if(passwordEncoder.matches(user.get().getPassword(), resetPasswordRequestDto.getPassword())) { ...}기존 등록된 사용자가 있다면 해당 ..

Backend/Java

nGrinder 성능 테스트 #2 - 'Performance Test' 설정 속성 알아보기

2023년 12월 27일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.시작하기nGrinder 성능 테스트 #1에 이어, 이 글에서는 nGrinder 컨트롤러에서 Performance Test 기능의 설정에 대한 속성에 대해 알아보려고 한다. nGrinder 테스트를 실행하는 Script 작성에 관해서는 이 다음 글인 로컬 테스트 진행 때 다루려 하기에 이 글에는 추가하지 않았다.Performance Test 설정 속성 알아보기nGrinder Controller(http://localhost:8300/)에서 상단에 위치한 헤더 메뉴에서 Performance Test 메뉴를 눌러보면 위 사진과 같은 화면이 표시된다. 가이드라인 대로라면 Script를 작성하고, Te..

Backend

nGrinder 성능 테스트 #1 - 시작하기

2023년 12월 25일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.nGrinder란?nGrinder는 네이버에서 제공하는 서버 부하 테스트 프로그램이며, 오픈 소스 프로젝트이다. 애플리케이션을 개발하고 발생할 수 있는 가상 시나리오를 만들어 사용자가 급증하여 트래픽에 몰렸을 때 하드웨어에서 요청을 처리하는 성능을 측정할 수 있도록 도와준다.nGrinder 구조Controller : 테스트를 위한 스크립트를 생성할 수 있고 이 스크립트를 실행하고 성능을 측정할 수 있는 웹 인터페이스를 제공하며 테스트 결과를 수집해 통계를 보여준다.Agent : 컨트롤러의 명령을 받아 작업을 수행하며 프로세스 및 스레드를 실행시켜 테스트 타겟이 되는 애플리케이션에 부하를 발생시..

Backend

[AWS] RDS에서 외부 접속이 되지 않을 때 (Connection timed out)

2023년 10월 17일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.AWS에서 예전에 한 번 RDS를 사용해서 데이터베이스를 구축해 본 경험이 있었는데, 꽤 오래 전이였고 지금의 AWS는 너무 많이 업데이트가 진행되었다. 이번에 RDS를 다룰 일이 있어서 MariaDB 데이터베이스를 생성했는데, 외부 접속 연결이나 인바운드 설정을 모두 했음에도 불구하고 외부에서 연결이 되지 않아 애를 먹었다..외부 접속을 위해 확인해 본 것들외부 접속을 위해 아래 2가지를 먼저 확인해 보았다.Inbound(인바운드) 규칙 확인퍼블릭 엑세스 설정 확인Inbound(인바운드) 규칙 확인기본적으로 RDS에서 보안 규칙에 대해 아무것도 설정하지 않았다면, 내부에서 데이터베이스를 접근..

Backend/AWS

RabbitMQ를 이용해서 응답 시간을 반의 반의 반의 반으로 줄여보자

2024년 3월 22일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.RabbitMQ를 도입하게 된 배경현재 개발 중인 사이드 프로젝트에서 회원가입을 진행할 때 이메일 인증 기능이 사용된다. 인증번호를 담은 메일을 발송하는 API에 요청을 보내면, 응답시간이 상당히 길게 소요된다. 대충 얼마나 소요되냐면..정확하게 4.68초, 약 5초 정도 소요된다. 이메일 요청을 보내게 되면, 아래와 같은 로직을 수행하게 된다.이메일 정규식에 일치하는가?이미 서비스에 등록된 회원이 있는가?이전 이메일 인증 요청을 발송한 후 1분이 경과되었는가? (Redis 사용)새 이메일 인증 번호 생성이메일 인증 번호를 담은 템플릿 생성메일 발송이 과정을 수행해야 사용자가 입력한 메일로 인증..

Backend/Java

[Ubuntu] MariaDB 외부 접속 허용

2024년 3월 20일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf/etc/mysql/mariadb.conf.d/50-server.cnf 파일을 nano 편집기로 열어준다. 방향키를 이용하여 아래 내용을 찾아준다.# Instead of skip-networking the default is now to listen only on# localhost which is more compatible and is not less secure.bind-address = 127.0.0.1여기에서 bind-address 부분을 0.0.0.0 으로 변경해 주어 외부에서 ..

Backend/Linux

[오류 해결] SQL ERROR 1406: Data too long for column at row 1

2024년 3월 11일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.문제 상황GPT-4 응답 결과와 토큰 사용량에 대해 데이터베이스에 저장하려고 얼마 전에 코드를 수정했다. 수정 전에는 GPT-4에 대한 응답 결과를 따로 저장하지 않고 바로 응답 값을 출력하도록 해두었으나, 수정 후에 갑자기 500(Internal Server Error)가 발생한다는 소식에 확인을 시작했다.백엔드 코드를 확인해 보니 아래 오류가 발생한 것을 확인할 수 있었다.2024-03-10 10:49:04.949 ERROR 1 --- [nio-8080-exec-5] o.h.engine.jdbc.spi.SqlExceptionHelper : (conn=605) Data too long fo..

Backend/Java

Spring, 테스트 코드는 왜 작성할까?

2024년 3월 8일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.원래 필자는 PHP와 그 프레임워크인 Laravel을 이용하여 개발을 해왔다. 하지만, PHP의 인기도가 점점 낮아져가는 것도 사실이고, 다른 언어를 접해 보고자 PHP에서 Java와 Spring Boot로 주 개발 언어를 변경하였다. Spring Boot에 익숙해지고, 여러 커뮤니티를 보며 '테스트 코드'라는 게시글을 많이 접하게 되었다. 그래서 나도 원래는 테스트 코드를 작성하지 않았지만 사실 귀찮아서.. 테스트 코드를 작성하는 방법과 그 이유에 대해서는 꼭 알고 넘어가고 싶기에 이 글을 작성했다.테스트 코드를 왜 작성할까?1. 서버를 시작하여 직접 테스트하는 것 보다 시간을 단축시킬 수 있다..

Backend/Java

Spring Boot에서 ChatGPT 활용하기 #2: API로 GPT 응답 값 가져오기

2024년 2월 27일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.Spring Boot에서 ChatGPT 활용하기 #1: API 연결 테스트에 이어 이 글에서는 Spring Boot에서 만든 API 호출을 통해 GPT의 응답 값을 가져오는 코드를 작성해 볼 것이다.구조gptㄴ controller ㄴ GptController.javaㄴ service ㄴ Impl ㄴ GptServiceImpl.java GptService.java application.propertiesapplication.propertieshttps://platform.openai.com/api-keys 여기에서 발급받은 Secret Key는 저장소에 올라가거나 공유되면 안 되..

Backend/Java

Spring Boot에서 ChatGPT 활용하기 #1: API 연결 테스트

2024년 2월 20일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.들어가며OpenAI의 ChatGPT는 현재 전 세계에서 가장 주목받고 있는 기술이다. ChatGPT에 대한 이해가 깊어지면서, 이를 활용한 API 개발에 대한 생각이 점점 커졌다. 또한, 최근에 릴리즈된 Spring Boot 3.0을 아직 제대로 활용해보지 않았던 점을 고려하여, 이번 프로젝트는 Spring Boot 3.0 기반으로 진행하기로 결정했다.ChatGPT API 호출ChatGPT 공식 문서에 따라 Spring Boot에서 본격적으로 활용하기 전 Postman을 통해 API 호출을 먼저 해보았다. 이 글을 쓰는 오늘(2024년 2월 19일) 기준, GPT 모델에 따른 엔드포인트는 다음과..

Backend/Java

Spring Security: There is no PasswordEncoder mapped for the id "null" 오류 해결

2023년 1월 10일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.문제 상황비밀번호 재설정 API를 개발하는 도중, 변경할 새로운 비밀번호가 기존 비밀번호와 일치하면 변경할 수 없도록 예외 처리를 진행하는 과정에서 There is no PasswordEncoder mapped for the id "null" 에러를 맞닥뜨렸다. 오류가 지시하고 있는 곳은 SignServiceImpl에서의 passwordEncoder.matches() 해당 부분이었다.원인if(passwordEncoder.matches(user.get().getPassword(), resetPasswordRequestDto.getPassword())) { ...}기존 등록된 사용자가 있다면 해당 ..

Backend/Java

nGrinder 성능 테스트 #2 - 'Performance Test' 설정 속성 알아보기

2023년 12월 27일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.시작하기nGrinder 성능 테스트 #1에 이어, 이 글에서는 nGrinder 컨트롤러에서 Performance Test 기능의 설정에 대한 속성에 대해 알아보려고 한다. nGrinder 테스트를 실행하는 Script 작성에 관해서는 이 다음 글인 로컬 테스트 진행 때 다루려 하기에 이 글에는 추가하지 않았다.Performance Test 설정 속성 알아보기nGrinder Controller(http://localhost:8300/)에서 상단에 위치한 헤더 메뉴에서 Performance Test 메뉴를 눌러보면 위 사진과 같은 화면이 표시된다. 가이드라인 대로라면 Script를 작성하고, Te..

Backend

nGrinder 성능 테스트 #1 - 시작하기

2023년 12월 25일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.nGrinder란?nGrinder는 네이버에서 제공하는 서버 부하 테스트 프로그램이며, 오픈 소스 프로젝트이다. 애플리케이션을 개발하고 발생할 수 있는 가상 시나리오를 만들어 사용자가 급증하여 트래픽에 몰렸을 때 하드웨어에서 요청을 처리하는 성능을 측정할 수 있도록 도와준다.nGrinder 구조Controller : 테스트를 위한 스크립트를 생성할 수 있고 이 스크립트를 실행하고 성능을 측정할 수 있는 웹 인터페이스를 제공하며 테스트 결과를 수집해 통계를 보여준다.Agent : 컨트롤러의 명령을 받아 작업을 수행하며 프로세스 및 스레드를 실행시켜 테스트 타겟이 되는 애플리케이션에 부하를 발생시..

Backend

[AWS] RDS에서 외부 접속이 되지 않을 때 (Connection timed out)

2023년 10월 17일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.여기에서 원본을 확인할 수 있습니다.AWS에서 예전에 한 번 RDS를 사용해서 데이터베이스를 구축해 본 경험이 있었는데, 꽤 오래 전이였고 지금의 AWS는 너무 많이 업데이트가 진행되었다. 이번에 RDS를 다룰 일이 있어서 MariaDB 데이터베이스를 생성했는데, 외부 접속 연결이나 인바운드 설정을 모두 했음에도 불구하고 외부에서 연결이 되지 않아 애를 먹었다..외부 접속을 위해 확인해 본 것들외부 접속을 위해 아래 2가지를 먼저 확인해 보았다.Inbound(인바운드) 규칙 확인퍼블릭 엑세스 설정 확인Inbound(인바운드) 규칙 확인기본적으로 RDS에서 보안 규칙에 대해 아무것도 설정하지 않았다면, 내부에서 데이터베이스를 접근..

Backend/AWS