[PostgreSQL] 2. PostgreSQL Index 알아보기 (Index Type, Index Scan)
·
DB
0. 들어가기 전이전 챕터에서 PostgreSQL의 Internal, 내부 구조에 대해서 간략하게 살펴봤습니다. 이번에는 PostgreSQL에는 어떤 Index Type이 있는지, Index Scan은 어떤 것이 있는지 살펴보겠습니다.Index는 깊게 들어가면 너무나 어려운 내용이라서 간략하게만 다뤄보도록 하겠습니다 :(('PostgreSQL'의 Index에 대해서 알아보는 것이기 때문에, 기본 Index에 관한 개념은 알고 있다고 가정하고 다루지 않겠습니다!) PostgreSQL의 Index를 공부하면서 목표로 한 점은 다음과 같습니다.여러 PostgreSQL Index Type의 동작방식, 내부 원리를 설명할 수 있다.여러 PostgreSQL 타입, 상황에 대해 어떤 Index를 적용할지 떠올릴 수 ..
[PostgreSQL] 1. PostgreSQL 내부 구조 알아보기 (feat. 쿼리 처리 과정)
·
DB
0. 들어가기 전저는 이전까지 DB 벤더 중에서 학습용으로 MySQL만 사용해왔었습니다.그러나 이번 실무에서 PostgreSQL을 사용하게 되면서 PostgreSQL에 대해서 알아보고자 글을 작성하게 되었습니다. PostgreSQL의 모든 내용을 다루기에는 너무나 방대한 양이기에 제가 궁금한 부분, 중요한 부분들만 다뤄보도록 하겠습니다.하나의 주제를 잡아서 주제별로 PostgreSQL의 공식문서를 보고 글을 작성해보겠습니다. 처음은 PostgreSQL에서 커넥션을 맺고 쿼리를 어떻게 처리하는지 PostgreSQL의 내부 구조를 간략하게 추상적으로 살펴보도록 하겠습니다.https://www.postgresql.org/docs/17/overview.html Chapter 50. Overview of Pos..
[DB] DB PK 생성 전략 알아보기 (feat. Auto Increment, UUID, ULID, Snowflake ID, TSID)
·
DB
0. 들어가기 전이전까지 저는 모든 프로젝트에서 관성적으로 다음과 같이 Auto_Increment 전략을 사용해서 DB PK를 생성했습니다.public class XxxEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; ...} 이번에 프로젝트 코드 분석을 하는 도중에 JPA Entity에 다음과 같이 PK 생성을 하는 것을 보게 되었습니다.public class XxxEntity { @Id @Tsid private String id; ...} 관련해서 검색해보니, TSID라는 생성 전략이 있는 것을 확인했습니다.해당 TSID 외에도 다른 PK 생성 전략에 대해 무지했기 때문에 다른 ..
2022~2024 머글이 신입 백엔드 개발자로 전직하기까지의 회고
·
심심한 회고
0. 서론최근에 Big Event가 발생했다.바로 나의 취업.... 직장인으로 전직했다 😁사실 입사한지는 이제 거의 한달 차가 다 되어 가는데, 입사하고 나서는 정신없어서 이런 회고 글조차 작성할 겨를이 없었다. 추석 연휴가 되고 나서 과거를 돌아보니 너무 추억 돋아서 이럴거면 회고 글을 하나 작성해보자! 하고 작성을 시작한다 ㅎ__ㅎ최근(거의 모든 ㅋㅋㅋ) 글이 모두 기술 정보 글인데, 그 사이 한 줄기 감성회고 글이 될 것 같다! :) 개발자의 길을 걷기로 결심한 2022년부터 어찌저찌 신입 개발자가 되어버린 나의 회고를 연도별로 정리해보려고 한다!1. 2021년 말, 진로 마시다가 진로 고민... 🍺나는 성적따라 건축공학과에 진학해서 2021년 말 전까지 미래 고민 없이 충분히 현재를 즐기며..
[DB] AWS DynamoDB 알아보기
·
DB
0. 들어가기 전이번에 AWS의 DynamoDB를 사용할 기회가 생기게 되었습니다.이전에 사용해보지 못했던 기술이기 때문에 DynamoDB에 대한 이해가 선행되어야 했습니다.이번 글에서는 DynamoDB의 적용보다는 DynamoDB의 개념에 대해 알아보고 DynamoDB를 이루는 구성 요소들을 이해하고자 합니다.그래서 다음과 같은 AWS DynamoDB의 공식문서를 참고하여 글을 작성하면서 DynamoDB를 이해해보겠습니다.https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/Introduction.html What is Amazon DynamoDB? - Amazon DynamoDB이 페이지에 작업이 필요하다는 점을 알려 주셔서 감..
[Redis] Redis의 다양한 자료구조와 활용 예시 알아보기
·
DB/Redis
0. 들어가기 전이전에 Redis에 대해서 간단하게 정리해봤었습니다.https://ksh-coding.tistory.com/127 [DB] Redis란?여러 프로젝트를 살펴보니, 인메모리 저장소로 Redis를 사용하는 것을 많이 볼 수 있었습니다.Redis가 무엇이고, 어떤 장점이 있길래 많이 사용하는 걸까요?프로젝트에 적용하기 전에 간략하게 Rediksh-coding.tistory.com 해당 글 이후에 여러 기능에서 Redis를 사용했고, 잘 동작하는 것을 확인할 수 있었습니다.그러나, Redis를 사용할 때 추상화된 Spring Data Redis를 사용하면서 어떤 자료구조로 저장되는지,어떤 자료구조가 해당 기능, 데이터에 적합한지, Redis에 어떤 자료 구조들이 존재하는지에 대해 모르고 사용했었..
[JPA] JPA, Spring Data JPA의 내부 동작 원리 알아보기
·
Spring/JPA
0. 들어가기 전이전에 대부분의 프로젝트에서 JPA를 사용해서 SQL을 작성하지 않고추상화된 메소드를 사용하여 영속화 계층에 접근하고, DB에 SQL을 반영했습니다. 이번에 개인적으로 JPA를 사용할 때 내부 동작 원리를 이해하지 않고 추상화된 메소드를 사용하기만 한다는 것을 깨닫게 되었습니다. 따라서, JPA에서 추상화된 메소드들이 어떻게 내부적으로 동작해서 쿼리가 생성되는지 알아보도록 하겠습니다.더 나아가서, Spring Data JPA은 어떻게 JPA를 추상화했는지도 살펴보도록 하겠습니다. 이번 포스팅은 JPA의 기본 개념, 동작들을 이미 안 상태에서 원리를 알아보는 것이므로기본적인 JPA의 개념이나 동작 설명들은 생략하고 가도록 하겠습니다!1. JPA의 기본 동작 원리먼저, JPA가 어떻게 객체와..
[이슈] JPA N+1 문제 해결 및 성능 비교 (feat. Batch Size)
·
이슈 & 트러블 슈팅
0. 들어가기 전현재 진행중인 프로젝트에서 쿼리를 카운트해본 결과, JPA의 N+1 문제가 발생하고 있었습니다. N+1 문제에 대한 소개, 고찰은 이전에 포스팅했었기 때문에 링크만 남기고 넘어가도록 하겠습니다!https://ksh-coding.tistory.com/146 [JPA] JPA N+1 문제 및 근본적인 원인에 대한 개인적인 고찰0. 들어가기 전 JPA를 사용하면서 발생하는 N+1 문제는 널리 알려져 있고, JPA를 사용하다보면 제법 자주 만나게 됩니다. 그래서 N+1 문제를 다룬 블로그나 다른 레퍼런스들이 상당히 많습니다. 저ksh-coding.tistory.com 그래서 이번에는 N+1 문제를 해결한 과정과 전후 성능 비교를 포스팅해보도록 하겠습니다!1. N+1 발생 배경먼저 어떤 엔티티에서..
[이슈] Redis 캐싱을 통해 조회 성능 개선하기
·
이슈 & 트러블 슈팅
0. 들어가기 전현재 프로젝트에서 자주 호출하는 '동선 기간 조회' API의 조회 성능을 높이기 위해 캐싱을 도입하기로 했습니다. 위의 페이지에서 다음과 같이 '동선 기간 조회' API 호출이 발생합니다.달력 페이지에서 동선 기간 조회 1달 간격으로 조회동선 보관함에서 월별 필터로 조회 해당 페이지들은 서비스에서 핵심적인 페이지들로 사용자들이 자주 사용할 것이라고 판단됐기 때문에,해당 페이지에서 호출되는 '동선 기간 조회' API의 조회 성능을 높이기 위해 '캐싱'을 도입했습니다. 이번 포스팅에서는 프로젝트에 캐싱을 적용한 과정을 담아보겠습니다!1. 캐싱이란?일반적인 CS 관점에서의 캐싱은 다음과 같이 말할 수 있습니다.캐시는 CPU와 RAM과 같이 느린 장치와 빠른 장치의 속도 차이로 인한 병목 현상을..
[이슈 & 트러블 슈팅] 동시성 보장하기 (feat. 비관적 락, Redis 분산 락)
·
이슈 & 트러블 슈팅
0. 들어가기 전현재 진행하고 있는 동선을 만드는 프로젝트에서 다음과 같은 요구사항이 존재했습니다.(동선 생성 시 선택한 태그의 태그 선택 횟수가 1씩 증가하는 로직 존재하는 상황)여러 사용자의 동선 생성 동시 요청 시에 태그 선택 횟수가 순차적으로 증가해야 한다. 위의 사진처럼 태그별로 선택 횟수가 표시되었습니다.해당 태그는 사용자들이 동선을 생성할 때 태그를 지정하면 선택 횟수가 1씩 증가하는 로직을 가지고 있습니다. 이러한 상황에서, 여러 사용자가 동시에 요청을 보내게 되면 현재 상황에서는 데이터 정합성이 보장되지 않은 상황이었습니다.멀티 스레드 테스트를 통해 테스트해봤을 때, 다음과 같이 테스트가 실패하는 것을 확인할 수 있었습니다.  그래서 이러한 동시성을 보장하기 위해서 여러 방법들을 생각해보..
BE_성하
성장하는 성하 Blog