Day1. Springboot + Postgres

2ㅣ2ㅣ·2024년 9월 19일

Project

목록 보기
1/13

개요

프롬프팅을 기반으로 음악을 추천하는 간단한 웹 애플리케이션을 구현해보려고 한다.

  • 프레임워크 : Spring boot, FastAPI, React
  • Model : 3.5-Turbo

⏳ AS-IS

개발 초기에는 메인 DB로 MySQL을 사용하려 했었다. MySQL은 사용하기 쉽고 읽기 성능이 빠르다. 또한, 대규모 커뮤니티이기 때문에 버그나 문제 발생 시 상대적으로 해결 방법을 찾기 수월하다고 생각했다.

⌛️ TO-BE

Postgres로 전환한 이유

그러나 우리 프로젝트의 주요 기능과 확장성을 고려해보니

  • 추후 비정형 데이터를 다룰 수 있음을 고려하여 NoSQL과 호환성이 좋아야 한다
  • 읽기 / 쓰기 성능 모두 좋아야 한다
  • 동시성 처리가 뛰어나야 한다

는 점에서 Postgres로 전환하는게 맞다고 판단했다.

Properties.yaml
아래는 PostgreSQL로 전환 후 사용된 설정이다. 성능 최적화와 개발 편의성을 고려하여 설정을 구성했다.

  • Connection Pool 설정: HikariCP를 사용해 연결 풀을 관리하고, 최대 풀 사이즈를 4로 설정하여 성능 최적화를 고려했다.
  • DDL-Auto: update로 설정해, 테스트 환경에서는 스키마 변경이 자동으로 반영되도록 했다.
spring:
  application:
    name: MUSIC-IN-MY-DIARY-SPRING

  datasource:
    hikari:
      maximum-pool-size: 4
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://{uri}:{port_number}/{db_name}
    username: {username}
    password: {password}

  jpa:
    database: postgresql
    hibernate:
      ddl-auto: update
    show-sql: true
    properties:
      hibernate:
        format_sql: true

Connection Pool

Connection PoolDB 커넥션을 미리 생성해 놓는 저장소이다.
요청이 발생할 때마다 매번 db에 연결되는 것을 방지하여 가능한 최소한으로 DB에 접근할 수 있다.
이로써 읽기/쓰기 작업과 관련된 오버헤드를 줄일 수 있다.
Postgres를 비롯한 RDBMS에서는 다수의 사용자 요청을 효율적으로 처리하기 위해 Connection Pool을 잘 구성하는 것이 중요하다.
개발 초기라 최대 풀 크기를 작게 설정했지만, 향후 개발이 시작되면 조회 패턴과 트래픽을 분석하여 적정히 조정할 예정이다.

🧑🏼‍🎄 느낀점

이번 DB 전환과정에서 느낀점은, 동시성 처리와 비정형 데이터 처리 같은 기술을 고려했을 때 Postgres가 유리하다는 점과 Connection Pool 설정이 RDBMS에서 다수의 트랜잭션 관리에 효율적이고 오버헤드를 줄이는데 필수적이라는 점이다.


참고
✔️ Mysql과 Postgres 차이
✔️ Connection Pool
✔️ Connection Pool DBCP 이해하기

0개의 댓글