항해 12주차 회고 (WIL)

계리·2022년 12월 11일
0
post-thumbnail
post-custom-banner

항해 12주차 WIL List

고민의 흔적

  • 채팅에 관한 데이터 저장소를 꼭 Redis를 사용 해야 하나?
  • 도서 검색 기능을 구현하기 위해 NAVER API를 사용한 이유는?

채팅에 관한 데이터 저장소는 꼭 Redis를 사용 해야 하나?

Redis가 채팅을 구현하는데 사용하기 좋은 DB라고는 알고 있지만 현재 우리가 만든 서비스에서 채팅에 관한 데이터들을 꼭 Redis를 사용해야 하는지에 대해 의문을 가졌다. 현재 사용하고 있는 DB는 PostgesQL을 사용 중이다. PostgeSQL은 관계형 데이터베이스(RDBMS)이고 Redis는 No SQL이다. 이 둘을 비교 해보기로 했다.


관계형 데이터베이스(RDBMS)란

  • 행과 열을 가지는 표 형식 데이터를 저장하는 형태의 데이터베이스
  • SQL이라는 언어를 사용
  • 종류는 MySQL, PostgreSQL, 오라클, SQL Server, MSSQL 등이 있다

관계형 데이터베이스의 특징

- 장점

  • 데이터 분류, 정렬, 탐색 속도가 빠르다
  • 데이터의 무결성과 신뢰성을 보장한다
  • 정규화에 따른 갱신 비용이 적다
  • 유지보수가 편하다

- 단점

  • 기존 작성된 스키마 수정이 어렵다
  • 시스템 자원을 많이 차지한다
  • 구조가 복잡해질수록 성능 최적화가 반드시 필요하다

No SQL이란?

  • Not Only SQL의 줄임말
  • 비 관계형 데이터베이스

No SQL이 특징

  • 장점

    • 데이터간의 관계를 정의하지 않음(테이블간의 관계(join) 불필요)
    • RDBMS보다 복잡도가 떨어져 훨씬 대용량의 데이터를 저장, 관리할 수 있음
    • 테이블에 스키마가 정해져있지 않아 데이터 저장이 비교적 자유로움
    • 많은 양의 데잍를 저장, 처리할 수 있음
  • 단점

    • key값에 대한 입,출력만 지원
    • 스키마가 정해져 있지 않아 데이터에 대한 규격화가 되어있지 않음
    • 데이터를 Update하는데 비교적 느리다

PostgreSQL이란?

오픈 소스 객체-관계형 데이터베이스 시스템(ORDBMS)으로 Enterprise급 DBMS의 기능과 차세대 DBMS에서나 볼 수 있을 법한 기능들을 제공한다. PostgreSQL은 다른 관계형 데이터베이스 시스템과 달리 연산자, 복합 자료형, 집계 함수, 자료형 변환자, 확장 기능 등 다양한 데이터베이스 객체를 사용자가 임의로 만들 수 있는 기능을 제공함으로써 마치 새로운 하나의 프로그래밍 언어처럼 무한한 기능을 손쉽게 구현할 수 있다.


PostgreSQL은 세계에서 가장 많이 사용하는 관계형 데이터베이스 중 하나로 오라클, MySQL, MS SQL 다음 4위를 차지하고 있는데 수년간 압도적인 성장 속도를 보여주며 3위와 격차를 좁혀 나가고 있다고 한다. 국내에서도 PostgreSQL을 많이 쓰는 기업이 늘었다고 하는데 그 이유를 알아보았다.


PostgreSQL과 같은 ORDBMS를 사용하는 이유

  • 비용 절감
  • 빠르고 유연한 개발
  • 호환성 / 유연성
  • 신뢰성 / 안정성

PostgreSQL의 특징

  • 최다 SQL 기능 지원
    • 가장 오랜 기간 개발을 거친 PostgreSQL은 관계형 DB 중에서 최다 SQL을 지원
  • 최다 SQL 표준 지원
    • 2016 또는 ISO/IEC 9075:2016은 SQL 데이터베이스 쿼리 언어에 대한 ISO 및 ANSI 표준의 8번째 개정판으로 2016년 12월에 공식적으로 채택된 바 있는데 PostgreSQL은 전체 179 항목 중 170 항목인 약 95%의 SQL 표준을 지원한다.
  • 풍부한 데이터 유형 지원
    PostgreSQL이 지원하는 데이터 유형은 일부 NoSQL도 포함하고 있어 차별화된 확장 기능(extension)으로 제공
    • Key - Value, XML
    • JSON, JSONB
    • Columnar Store
    • Graph (예: Apache AGE)
  • 프로그래밍 언어 지원
    • Server-side Language, C/C++, PL/pgSql, PL/Tcl, PL/Perl, PL/Python, PL/Ruby
    • External Languge
    • PL/Java, PL/Lua, PL/R, PL/sh, PL/v8
  • 대량 데이터 처리
    • Table Partitioning
    • Parallel Query & Multiple Processes
    • Analytic & Aggregate Funtions
    • Indexing & JOIN

Redis란?

  • Key, Value 구조의 비정형 데이터를 저장하고 관리
  • 오픈 소스 기반의 비관계형 데이터베이스 관리
  • 데이터베이스, 캐시, 메세지, 브로커로 사용
  • 인 메모리 데이터구조를 가진 저장소

Redis를사용하는 이유

  • 성능속도가 빠르다
    • 인 메모리 데이터 저장 방식으로 인해 성능속도가 빠르다
  • 많은 프로그래밍 언어, 프레임워크에 대한 API를 폭넓게 지원
    • Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go

Redis의 특징

  • 영속성을 지원하는 인 메모리 데이터 저장소

  • 다양한 자료 구조를 지원

  • 싱글 스레드 방식으로 인해 연산은 원자적으로 수행이 가능

  • 읽기 성능 증대를 위한 서버 측 애플리케이션 지원

  • 쓰기성능증대를 위한 클라이언트 측 샤딩 지원

  • 다양한 서비스에서 사용되며 검증된 기술


채팅에 관한 데이터 저장소는 꼭 Redis를 사용 해야하는지에 대한 결론

오늘의독서 서비스는 도서 관련 데이터가 대용량으로 많아야한다.
서비스가 크지 않기 때문에 트래픽 문제가 발생하지 않아 성능측면에서 크게 차이를 느끼지 못했다.
그래서 채팅 관련 데이터들도 PostgreSQL에 저장하는 것으로 결정하였고 서비스가 점차 커지고 트래픽 문제가 발생한다면 채팅 관련 데이터들은 Redis로 변경해야 될 것 같다.


도서 검색 기능 구현 시 NAVER API를 선택한 이유

  • NAVER Developer에 Docment가 잘 나와있다.
  • 예제코드가 잘 나와있다.
  • 교보문고, 알라딘 등등 다른 도서 검색 API는 Document나 예제코드 자료들을 찾아보기가 힘들다

위의 세가지 이유로 NAVER API를 선택하여 도서 검색 기능을 구현했다.

참조
면접을 위한 CS 전공지식 노트
https://universitytomorrow.com/26
https://bitnine.tistory.com/516
https://steady-coding.tistory.com/586

profile
gyery
post-custom-banner

0개의 댓글