본문 바로가기

전체 글

(194)
N+1 문제 해결을 통한 와인 목록 조회 성능 개선 1. 문제 상황 파악하기먼저 기존 코드에서 발생하는 N+1 문제를 정확히 파악했습니다. 로그 분석 결과, 다음과 같은 문제점이 확인되었습니다:와인 목록을 조회하는 초기 쿼리 1회각 와인마다 위시리스트 확인을 위한 쿼리 N회 (existsByUserIdAndWineId)각 와인마다 와인 타입 정보를 가져오기 위한 쿼리 N회 (wine.getWineType())2. 성능 측정을 위한 AOP 설정먼저 성능 측정을 위해 AOP를 설정하여 메서드 실행 시간과 SQL 쿼리 수를 측정했습니다.@Componentpublic class PerformanceAspect { private static final Logger log = LoggerFactory.getLogger(PerformanceAspect.class..
AOP와 Redis 캐싱을 활용한 OpenAI API 호출 성능 측정 및 최적화 사례 Spring AOP(Aspect-Oriented Programming)와 Redis 캐싱을 활용하여 OpenAI API 호출 성능을 측정하고 최적화한 경험을 공유하고자 합니다. 와인 추천 서비스에서 OpenAI API를 사용하여 유사 음식을 찾거나 와인 설명을 생성하는 과정에서 성능을 개선하기 위한 여정을 소개합니다.1. 문제 정의: OpenAI API 호출 시 성능 이슈우리 서비스에서는 사용자에게 맞춤형 와인을 추천하기 위해 다음과 같은 OpenAI API 호출을 사용합니다:유사 음식 검색: 사용자가 입력한 음식과 유사한 음식을 데이터베이스에서 찾기 위해 OpenAI의 텍스트 유사성 분석 사용와인 설명 생성: 추천된 와인에 대한 매력적인 설명문 생성이 과정에서 몇 가지 이슈가 발생했습니다:응답 시간 지..
한 리포지토리에서 Back, Front CI/CD 배포하기 (Feat. Gitlab, Jenkins, Docker, NginX, React, Springboot) 우선 EC2 인스턴스가 생성되있다고 가정을 하고 진행해보겠다. 만약 인스턴스가 없다면 AWS에 가입을 하고 인스턴스를 생성해야되는데 다음 글에 자세히 나와있다. https://velog.io/@kyj311/AWS-EC2-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0 [AWS] EC2 알아보기 + 인스턴스 생성하기AWS EC2 알아보기velog.io  또한 나는 기존에 AWS 해킹이 빈번하게 일어난다는 얘기를 들어서 다음 글을 보고 많이 참고하였다. https://www.lgcns.com/blog/cns-tech/aws-ambassador/56822/ 해킹과 과다 요금 발생을 방지하는 AWS 계정 보안 강화 노하우 - LG CNSIntro 최근 AWS Account 탈취로 인한 AWS ..
[JPA] Entity 설계 시 ID 값을 Integer 대신 Long 타입으로 지정하는 이유 JPA 공부 중 많은 코드들이 Entity 설계 시 ID 값을 Long 타입으로 지정해주는 것을 보았다. NULL값을 처리해주기 위해 원시 타입인  int, long 대신 wrapper 클래스를 사용하는것은 알고 있었지만 Integer 을 써도 될것같은데 굳이 Long을 쓰는 이유를 알아보았다. Long과 Integer의 주요 차이점값의 범위Integer: -2,147,483,648 ~ 2,147,483,647 (약 21억)Long: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (약 922경)ID 값으로 Long을 선호하는 이유:확장성: 데이터가 증가해도 ID 값이 부족할 걸정이 없음안정성: Integer 최대값 도달 시 오버플로우 발생 가능일관성: ..
데이터베이스 무결성과 키 개념 정리 데이터베이스 무결성 (Database Integrity)데이터베이스에서 데이터의 정확성과 일관성을 유지하기 위해 적용되는 규칙입니다. 주요 무결성 제약 조건은 다음과 같습니다.1. 개체 무결성 (Entity Integrity)조건 1: 기본 키(Primary Key)를 구성하는 속성은 NULL 값을 가질 수 없습니다.조건 2: 기본 키는 다른 레코드와 중복될 수 없습니다.예시: 회원 테이블에서 회원 아이디가 기본 키인 경우, 중복되거나 비어 있을 수 없습니다.2. 참조 무결성 (Referential Integrity)외래 키(Foreign Key)는 참조하는 테이블의 기본 키 값을 가져야 합니다.예시: 장바구니 테이블의 주문자 속성(외래 키)은 회원 테이블의 회원 아이디(기본 키)를 참조해야 하며, 존재..
Proxy Server 클라이언트에서 서버로 접속 시 직접적으로 접속하지 않고 중간에 대신 전달해주는 서버 1. 동작 원리요청 : 사용자가 웹 브라우저에서 도메인을 입력한다.전달 : 요청에 대하여 캐시 역할을 하는 프록시 서버로 전달한다.확인 : 프록시 서버 내에 도메인 홈페이지의 페이지를 가지고 있는지 체크한다.가지고 있는 경우 :홈페이지가 있는 서버에 자신이 가진 페이지가 최신 버전인지 체크필요한 경우 갱신할 부분만 가져옴가지고 있지 않을 경우 :홈페이지가 있는 서버와 연결하여 페이지를 가져온다.2. Proxy Server는 왜 필요할까?보안 : 요청과 응답의 필터링프록시 서버를 이용하지 않으면 서버의 주소가 쉽게 노출되고 다른 익명의 사용자가 서버로 접근하기 쉬워짐프록시 서버가 중간에 경유하게 되면 서버의 IP 숨기는 것..
SOAP SOAP(Simple Object Access Protocol)란?SOAP은 네트워크 상에서 XML 기반의 메시지를 교환하는 프로토콜입니다. 주로 HTTP, HTTPS, SMTP 등을 통해 데이터를 전달하며, 웹 서비스의 기본적인 메시지 전달 방식으로 사용됩니다. 하지만 최근 REST API가 등장하면서, SOAP의 사용은 점차 줄어들고 있습니다.SOAP의 특징플랫폼 및 언어 독립적: 다양한 환경에서 데이터 교환이 가능합니다.XML 기반 데이터 전송: REST API가 JSON 등 다양한 데이터 포맷을 지원하는 반면, SOAP은 XML만을 사용합니다.모든 요청이 하나의 URI로 전달: REST는 URI와 HTTP 메서드로 요청을 구분하지만, SOAP은 모든 요청을 한 URI로 보냅니다.주로 POST 요청..
[백준 JAVA] 1697번: 숨바꼭질 import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.LinkedList;import java.util.Queue;import java.util.StringTokenizer;//TIP 코드를 실행하려면 을(를) 누르거나// 에디터 여백에 있는 아이콘을 클릭하세요.public class Main { public static int N, K, ans; public static int[] visited = new int[100001]; public static void main(String[] args) throws IOException { B..