전체 글 94

경매 검색 기능 강화를 위해 AWS OpenSearch를 EC2와 연동하여 실행시키기

저번에는 퍼블릭 도메인을 생성하여 AWS OpenSearch를 진행했다면 이번에는 EC2와 연동하여 진행하는 OpenSearch를 해보기로 했다. 1. EC2 제작먼저, 연동하기 위한 EC2 인스턴스를 제작하기로 했다.▶ 주의 사항OpenSearch 도메인과 연결하기 위한 EC2 인스턴스를 제작할 때에는 주의해야할 것이 있었다.① 사용할 VPC가 연동할 OpenSearch 도메인과 같아야한다. 그리고 기본적인 외부 접속용(SSH, 8080)인 보안 그룹을 추가하여 인스턴스 제작을 완료했다. 2. OpenSearch 도메인 설정현 OpenSearch에는 EC2에서만 접근을 해야하기 때문에 보안 그룹을 수정하여 EC2의 보안 그룹 ID만 허용하도록 제작해야한다고 한다,그래서 OpenSearch용 보안그룹에 ..

최종 프로젝트 2025.04.27

AWS OpenSearch를 활용한 검색 기능 구축기

1. OpenSearch란?OpenSearch는 AWS에서 제공하는 Elasticsearch 기반의 오픈소스 검색 엔진으로, 대규모 텍스트 기반 검색과 로그 분석에 적합한 도구이번 프로젝트에서 OpenSearch를 활용하여 경매 검색 기능을 구축 2. AWS OpenSearch 도메인 생성하기우선, OpenSearch를 사용하기 위해서는 AWS OpenSearch 도메인을 생성해야한다. ● 도메인이란?OpenSearch에서 domain은 하나의 클러스터(서버 집합)를 의미하며, 여기에 인덱스를 저장하고 쿼리할 수 있다. 도메인을 생성하기 위해서 OpenSearch 서비스에 있는 도메인 생성을 통해서 생성하게 되었다. ○ 설정비용 절감을 위해서 많은 부분을 줄이게 되었다.▷ 버전 : OpenSearch 2..

최종 프로젝트 2025.04.25

QueryDSL vs 로컬 Elastic Search vs Open Search(AWS 퍼블릭)

▶ 테스트 방식10000건의 더미 데이터 생성 후 각 검색 기능 마다 검색 속도 비교@SpringBootTest@ActiveProfiles("test")public class AuctionSearchBenchmarkTest { @Autowired private AuctionRepository auctionRepository; @Autowired private AuctionSearchRepository auctionSearchRepository; @Autowired private ProductRepository productRepository; @Autowired private UserRepository userRepository; @Autowired ..

최종 프로젝트 2025.04.25

로컬 elastic search와 AWS에서 제공하는 Amazon OpenSearch Service를 사용한 elastic search의 차이점

▶ 현재 사용 중인 로컬 Elasticsearch의 특징항목설명설치 방식직접 설치(Docker or 바이너리)운영 책임본인이 직접 관리(리소스, 보안, 백업 등)가용성단일 노드(서버 중지 시 검색도 중지)확장성직접 수동 설정 필요보안기본 인증 or 설정 안 함모니터링/로그로그 직접 수집하거나 kibana 연동 필요백업수동 스냅샷 또는 외부 도구 필요▷ 분석 결과 개발/테스트 환경에는 충분하지만, 운영환경으로 쓰기엔 한계가 있다. ▶ AWS OpenSearch의 장점항목이점 설명완전관리형 서비스EC2에 직접 설치 X, AWS에서 자동으로 관리함고가용성 지원다중 AZ 구성 가능, 자동 장애 복구자동 백업 지원자동 스냅샷 기능 제공모니터링 제공CloudWatch, OpenSearch Dashboards 연동 ..

최종 프로젝트 2025.04.23

QueryDSL vs Elastic Search

MVP 개발에 제작한 QueryDSL을 사용한 검색 기능과 Elastic Search를 활용한 검색 기능의 성능 비교를 해보았다.▶ 조건10000건의 경매 검색@SpringBootTest@ActiveProfiles("test")public class AuctionSearchBenchmarkTest { @Autowired private AuctionRepository auctionRepository; @Autowired private AuctionSearchRepository auctionSearchRepository; @Autowired private ProductRepository productRepository; @Autowired private UserRe..

최종 프로젝트 2025.04.23

경매 서비스 성능 개선을 위한 Redis 활용

1. Redis란?● 인메모리 키-값 저장소로, 초고속 데이터 처리에 특화● 자료구조 지원 : String, List, Set, Sorted Set, Hash 등 ※ 경매 서비스 적용 포인트● 경매 목록 캐싱 → String 또는 Hash● 실시간 입찰 알림 → Pub/Sub● 최고가 갱신 Sorted Set 2. Redis vs RDBMS(MySQL 비교)특징RedisMySQL(RDBMS)저장 위치메모리(RAM)디스크(SSD/HDD)응답 속도마이크로초 단위밀리초 단위데이터 영속성설정에 따라 가능(AOF/RDB)기본 지원트랜잭션간단한 트랜잭션 지원ACID 완벽 지원쿼리 언어명령어 기반(GET/SET 등)SQL

최종 프로젝트 2025.04.14

플러스 주차 개인 과제 트러블 슈팅 TIL

1. QueryDSL 빈 처리● 개요코드 테스트를 하기 위해서 실행을 시켰을 때 오류가 발생하였다.- 오류문Parameter 0 of constructor in org.example.expert.domain.todo.repository.TodoRepositoryImpl required a bean of type 'com.querydsl.jpa.impl.JPAQueryFactory' that could not be found. ● 원인해당 오류문을 검색해보니JPAQueryFactory가 빈으로 등록되지 않아 발생한 문제라고 한다.@RequiredArgsConstructorpublic class TodoRepositoryImpl implements TodoRepositoryQuery{ private f..

TIL 2025.03.21

플러스 주차 개인 과제 TIL 7.

▶ LEVEL 3▷ 11. Transaction 심화● 문제의 요구사항1. 매니저 등록 요청을 기록하는 로그 테이블을 제작- DB테이블명: log2. 매니저 등록과는 별개로 로그 테이블에는 항상 요청 로그가 남아야한다.- 매니저 등록은 실패할 수 있지만, 로그는 반드시 저장되어야한다.- 로그 생성 기간은 반드시 필요하다.- 그 외 로그에 들어가는 내용은 원하는 정보를 자유롭게 넣어야한다. 먼저 로그 기록을 받기 위한 로그 엔티티를 제작하도록 하자@Entity@Getter@NoArgsConstructor@EntityListeners(AuditingEntityListener.class)@Table(name = "log")public class Log extends Timestamped { @Id ..

TIL 2025.03.18

플러스 주차 개인 과제 TIL 6.

▶ LEVEL 3▷ 10. QueryDSL을 사용하여 검색 기능 만들기● 문제의 요구사항1. 새로운 API로 제작2. 검색 조건 구성- 검색 키워드로 일정의 제목을 검색할 수 있다.(제목은 부분적으로 일치해도 검색이 가능)- 일정의 생성일 범위로 검색(일정을 생성일 최신순으로 정렬)- 담당자의 닉네임으로도 검색 가능(닉네임은 부분적으로 일치해도 검색 가능)3. 검색 결과에 해당하는 내용이 들어있어야 한다.- 일정에 대한 모든 정보가 아닌, 제목만 넣는다.- 해당 일정의 담당자 수를 넣는다.- 해당 일정의 총 댓글 개수를 넣는다.4. 검색 결과는 페이징 처리되어 반환한다. 우선 글로 요구사항을 해결해보자1. 새로운 API로 제작검색 기능을 작동할 새로운 API를 Conrollter클래스에서 제작한다.2. ..

TIL 2025.03.17