Monew 프로젝트: 뉴스기사 목록조회 PostgreSQL 복합 인덱스로 뉴스 목록 조회 성능 개선
·
트러블 슈팅
저번에 조회 쿼리 구조 개선 이후 NAVER 뉴스기사 45,000건에 대해 실행 시간은 약 20ms 수준까지 감소했다.단순 API 응답 속도만 보면 충분히 빠른 수준이라고 볼 수 있다. Seq Scan on news_articles→ Sort→ Limit 11하지만 실행 계획을 보면 최종적으로는 11개의 기사만 필요하지만 DB는 여전히 news_artilces 전체를 스캔한 뒤 정렬을 수행하고 있다.특히 메인 화면 뉴스 목록 조회는 서비스에서 가장 자주 호출될 가능성이 높은 API였기때문에 단일 요청의 실행 시간뿐 아니라 반복적인 DB 부하까지 함께 고려할 필요가 있었다. 따라서 전체 스캔 자체를 줄이고, 정렬 비용을 제거하고 limit 11개를 더 효율적으로 가져오기위해"복합 인덱스"를 추가했다.Red..
Monew 프로젝트: 뉴스기사 목록 조회 인덱스 없이 구조 개선으로 약 30배 성능 개선
·
트러블 슈팅
문제상황Monew 프로젝트 메인 화면에서는 뉴스기사 목록을 조회한다. 이 화면은 사용자가 자주 접근할 가능성이 높은 진입 지점이라고 생각했고, 목록 조회 성능이 전체 사용자 경험에 직접적인 영향을 줄 수 있다고 판단했다. 메일화면의 기본 조회조건은 화면에서 볼 수 있듯이 다음과 같다.정렬기준: published_at정렬 방향: DESC출처: NAVER조회 개수: 10개 + hasNext 확인용 1개WHERE na.is_deleted = false AND na.source = 'NAVER'ORDER BY na.published_at DESC, na.created_at DESCFETCH FIRST 11 ROWS ONLY기존 조회 구조LEFT JOIN article_interests ai ON..
GitHub Actions Trigger 유형과 CI/CD 활용 시나리오
·
위클리페이퍼
GitHub Actions에서 Trigger는 "언제 워크 플로우를 실행할 것인가"를 결정하는 조건입니다. 워크플로우 파일에서는 on 키워드로 정의합니다.name: CIon: push: branches: [main]main 브랜치에 push 할때 워크 플로우를 실행하고싶을때는 위와같이 나타냅니다. GitHub 공식 문서 기준으로 워크플로우는 GitHub 이벤트, 예약시간, 수동 실행등에 의해 실행될 수 있고 다양한 이벤트 기반 트리거를 제공합니다.1. push: 코드가 브랜치나 태그에 push 될때 실행됩니다.on: push: branches: - main - developdevelop 브랜치에 push 되면 테스트 실행main 브랜치에 merge되면 빌드 후 배포v1.0..
Spring Security에서 왜 Member 대신 UserDetails를 사용하나?
·
코드잇 스프린트/Spring 이론
Spring Security를 처음 학습할때 가장 헷갈렸던 부분 중 하나는 다음이었다."DB에는 Member 엔티티가 있는데, 왜 Spring Security는 갑자기 UserDetails를 사용하지?" 실제로 사용자 정보는 Member 엔티티에 저장되어 있는데, 인증과정에서는 UserDetails라는 객체가 등장한다. 이번 글에서 Spring Security 인증 구조에서 UserDetails가 왜 필요한지,그리고 Member 엔티티와 어떤 역할 차이가 있는지 정리해보려고 한다. 결론Member는 비즈니스 도메인 엔티티이고,UserDetails는 Spring Security가 사용하는 로그인 사용자 표준 객체이다.Spring Security 인증 흐름로그인 요청 ↓AuthenticationProv..
AWS RDS를 활용하는 이점과 EC2에 직접 DB 설치 비교
·
위클리페이퍼
백엔드 서비스를 운영하다 보면 데이터베이스를 어떤 방식으로 운영할지 고민하게 된다.AWS 환경에서는 대표적으로 두가지 선택지가 있다.Amazon RDS 사용Amazon EC2에 직접 데이터베이스 설치 및 운영이번 글에서는 RDS의 주요 장점과 EC2 직접 구축 방식과의 차이점을 비교하고, 반대로 RDS가 적합하지 않을 수 있는 상황까지 정리해보려고 한다.RDS란?RDS(Relational Database Service)는 AWS에서 제공하는 관리형 광계형 데이터베이스 서비스이다. 사용자는 데이터베이스를 직접 설치하거나 운영환경을 구성하지 않아도 되고, AWS가 데이터베이스 운영에 필요한 여러 작업을 대신 관리해준다. 대표적으로 이런 DB 엔진을 지원한다.EC2에 직접 DB를 설치하는 방식EC2에 직접 D..
Monew 프로젝트 개선: 뉴스기사 목록 조회 성능 개선 - 복합 인덱스 적용기
·
코드잇 스프린트/실습
[Monew 프로젝트 메인 페이지]현재 모뉴 프로젝트의 메인페이지는 뉴스기사 목록 페이지이며, 기본적으로 목록조회로 뉴스기사들이 나타난다. WHERE is_deleted = false AND source = 'NAVER'ORDER BY published_at DESC, created_at DESCLIMIT 11기본적으로 뉴스기사 목록 조회 API는 위의 조건을 기본으로 사용하고있다. 또한, 목록조회시 아래와 같은 기능이 함께 포함되어 있다. 댓글 수 조회사용자별 조회 여부(viewedByMe)관심사 기반 필터링커서 페이지네이션[실제 QueryDSL 기반 조회 쿼리]select na1_0.id, na1_0.source, na1_0.original_link, na1_0.title, ..