앞서 얘기한 python framework 중 나는 Fast API를 사용한 웹 서버를 만들기로 결정했다.
적은 커뮤니티와 , 리소스로 인하여 힘든 개발이 될 것으로 예상되지만, "비동기 처리"에 매료가 되어 한 번 도전해보고자 결정하게 되었다.
웹 서버를 만들면 반드시 따라오는 것이 있다. Model 을 정해야 한다. 최근에 chat GPT를 사용해봤는데, 나름 의미있는 답을 제공해주어서 이번에도 한 번 사용해봤다.

추천하는 DB는 4가지(SQLAlchemy 는 python ORM) 중에서 RDB에 대해 좀 더 공부하고자 PostgreSQL 과 MySQL 에 중 선택하려고 한다.
모두 인기 있는 RDB 이기에 뭘 사용하든 초반 개발하는데 큰 지장은 없겠지만 사용량이 많아질수록, 대규모 서비스가 될 때를 생각하여 둘 중 하나를 선택해야한다.
MySQL : RDBMS (관계형 데이터베이스 관리 시스템)
PostgreSQL : ORDBMS (객체 관계형 데이터베이스 관리 시스템)
Mysql : Clustered Index, Secodary Index / non-Clustered Index
PostgreSQL : B-tree, Hash, Gist, GIN, etc..
Indexing 종류 참고 사이트
Mysql : https://bit.ly/4biSGrE
PostgreSQl : https://dbknowledge.tistory.com/48
Mysql : 표준유형 사용 가능
PostgreSQL : 표준유형 + array , 등 다양한 유형
SQL data Type 참고 사이트
Mysql : https://dev.mysql.com/doc/refman/8.0/en/data-types.html
PostgreSQL : https://www.postgresql.org/docs/current/datatype.html
Mysql : Undo Segment(=Rollback Segment) 방식
PostgreSQL : MGA(Multi Generation Atchitecture) 방식
MVCC 종류 참고 사이트
https://scorpio-mercury.tistory.com/32
모두 좋은 성능을 가지고 있지만 Read , Update시에 성능차이가 있다
Mysql : 단일 프로세스로 사용하여 빠르게 조회 가능
PostgreSQL : 새로운 시스템 프로세스를 생성하여 제공하여 MySQL 보다 느린 성능
하지만 복합한 쿼리일경우 MySQL 보다 더 빠른 성능을 가진다.
PostgreSQL : INSERT 후 DELETE가 되어 MySQL보다 성능이 떨어지지만 MVCC가 내장되어있어 Write Lock 없이 업데이트를 할 수 있어 Update 요청이 잦고 동시에 수행돼야하는 작업이 많을 경우 MySQL보다 빠른 성능을 보인다.
-> 단, update시 이전 원본 데이터는 죽은 데이터로(Dead Tuple) 남게되어 공간 낭비, 쿼리 성능에 악 영향을 끼치게 되어 Vacuum을 활성화하여 정리시켜줘야함.
경험이 적을 경우 : MySQL > PostgreSQL
잦은 업데이트 : PostgreSQL > MySQL
잦은 데이터 조회 : MySQL > PostgreSQL
소규모 DB: MySQL > PostgreSQL
대규모 DB: PostgreSQL > Mysql
주요 차이점은 이것 뿐만 아니라 다양하니 다음 글을 참고
PostgreSQL 과 MySQL 비교
https://www.integrate.io/ko/blog/postgresql-vs-mysql-which-one-is-better-for-your-use-case-ko/
Aurora MySQ vs Aurora PostgreSQL
https://techblog.woowahan.com/6550/