티스토리 뷰

이번 글에서는 Vapor - Fluent에서 사용하는 PostgreSQL에 대해 알아보자

 

이전 글 보기

 

 

[Swift] Swift로 서버 만들기 Vapor 02 - Vapor 기본 프로젝트 뜯어보기

이번 포스트에서는 Vapor new 명령어로 만들어진 기본 프로젝트 파일과 코드를 확인한다. 설치 및 기본 개념은 이전 글에서 확인할 수 있다. 이전 글 확인하기 - Vapor 개념 및 설치 [Swift] Swift로 서버

malchafrappuccino.tistory.com

 

 

왜 PostgreSQL?

데이터베이스하면 MySQL과 Oracle 밖에 몰랐다.

 

Flunet에서도 MySQL과 더불어 PostgreSQL, SQLite, MongoDB를 지원하고 있지만 그 중 PostgreSQL를 공식적으로 추천하고 있다. (근데 왜 강추하는지는 안 나옴 😅)

 

Fluent 공식 문서 오피셜

 

 

PostgreSQL

귀여운 코끼리 로고를 가졌다

 

PostgreSQL은 SQL 표준을 준수하는 오픈 소스 SQL 데이터베이스이다. PostgreSQL 공식 홈페이지

나무위키

포스트그레스큐엘이라고 읽는다.

 

특징은 다음과 같다.

  • 오픈소스 객체 관계형 데이터베이스 시스템
  • 정수, 문자열, 날짜, 타임스탬프 및 바이너리 객체를 포함한 광범위한 데이터 유형을 지원한다.
  • 사용자 정의 함수 및 저장 프로시저에 대한 지원도 포함되어 있다.
  • 웹 애플리케이션에 널리 사용되며 확장성 덕분에 엔터프라이즈 애플리케이션에 적합하다고 한다.
  • 특수한 데이터베이스 상황 처리에 더 우수해, 복잡한 대량의 데이터 작업을 수행하는데 적합한 솔루션으로 인식되고 있다.
  • 객체 관계형, ACID 호환, 높은 동시성 및 NoSQL 지원 등 다른 DBMS보다 기능이 더 많다.
  • 테이블과 열에 대한 정보를 단순히 저장만 하지 않고 사용자가 데이터 형식, 인덱스 형식, 함수형 언어를 정의할 수 있다.

장점

  • ORDBMS : 객체 관계형 프로그래밍 언어(ORDBMS)로서 객체 지향 프로그래밍과 관계 지향/절차 지향 프로그래밍 사이를 연결하는 역할을 합니다(C++와 유사). 따라서 객체 및 테이블 상속을 정의할 수 있으므로 데이터 구조가 더 복잡해집니다. ORDBMS는 엄격한 관계형 모델에 맞지 않는 데이터를 처리할 때 탁월합니다.
  • 복잡한 쿼리에 탁월 
  • NoSQL 및 다양한 데이터 형식 지원
  • 초대형 데이터베이스 관리용으로 설계
  • 다중 버전 동시성 제어(MVCC)

단점

  • 읽기 전용에서 느려질 수 있음 : ORDBMS는 읽기 전용 작업을 처리할 때 속도가 느려질 수 있습니다.

 

 

vs MySQL

좋은 건 알겠다. 그래서 MySQL과 다른 점은?

항목 PostgreSQL MySQL
아키텍처 객체 관계형; 멀티 프로세스 관계형; 단일 프로세스
지원하는
데이터
타입
숫자 (Numeric)
날짜/시간 (Date/time)
문자열 (Character)
JSON
부울 (Boolean)
열거형 (Enumerated)
XML 기하 (Geometric)
배열 (Arrays)
범위 (Ranges)
네트워크 주소 (Network address)
HSTOREComposite
숫자 (Numeric)
날짜/시간 (Date/time)
문자열 (Character)
JSON 공간 (Spatial)
지원하는 인덱스 B-tree
Hash
GiST
SP-GiST
GIN BRIN
B-tree
Hash
R-tree
역 인덱스 (Inverted indexes)
보안 많은 양의 읽기 및 쓰기를 잘 처리합니다. 많은 양의 읽기를 잘 처리합니다.
성능 액세스 컨트롤 복수의 암호화 옵션 액세스 컨트롤 암호화 옵션

더 많은 기능을 제공한다.

 

 

PostgreSQL 정리

내 머리로는 위에 있는 개념을 다 외우기 힘들다.

출처 : giphy.com

그래서 내가 쉽게 정의한 결론은 이렇다.

 

PostgreSQL은 파이썬, MySQL은 C언어

 

 

PostgreSQL은 사용자가 사용하기 쉬운 다양한 기능을 제공한다.

MySQL은 기능은 적지만 그에 따라 속도와 안정성에 우위를 가진다.

 

(물론 최근 컴퓨터의 연산 속도를 감안했을 때, 작은 프로젝트에서는 큰 차이가 안 난다고 한다.)

 

PostgreSQL과 MySQL 둘은 사이좋게 2020년 올해의 데이터베이스 상 수상했다고 한다. (2021년, 2022년은 snowflake 수상)

 

이제 개념에 대해 알아봤으니 PostgreSQL를 실제로 사용해보자

 

 

 

PostgreSQL 설치

shell 키고 명령어를 입력한다.

brew install postgresql

 

잘 설치되었나 확인한다.

 

postgres --version

14.7 버전이 설치가 됐다. 

 

 

 

PostgreSQL 실행

시작 & 종료

시작을 위한 명령어를 입력한다

brew services start postgresql

시작시

 

재시작을 위한 명령어

brew services restart postgresql

 

재시작을 하면 실행 중인 postgresql이 멈추고 다시 시작한다.

 

 

멈춰있을 때 restart 해주면 그냥 시작한다.

 

 

시작했는지 기억이 안나면 그냥 restart 하면 된다

 

 

종료를 위한 명령어

brew services restart postgresql

postgreSQL의 경우 shell을 종료해주어도 백그라운드에서 실행이 된다.

 

 

활성 상태 보기

 

대기 상태로 들어가 리소스를 거의 잡아먹지는 않지만, 그래도 찝찝하니까 다 사용하면 종료해주자

 

 

 

접속

postgres를 실행한 상태에서 아래 명령어를 입력해 접속한다.

psql postgres

접속하면 #가 뜬다.

 

만약 postgres를 실행 안 하고 접속을 시도하면?

당연히 에러가 난다.

 

 

종료

\q

명령어를 입력하면 종료된다.

 

 

 

유저

유저 확인

\du

유저 리스트가 나온다.

 

 

 

기존에 공부하면서 tester 유저를 생성해놔서 2개의 유저를 확인해놨다. 원래는 Superuser만 있다.

 

q를 누르면 리스트에서 나올 수 있다. (한글이면 안됨)

 

 

유저 생성

create user {유저 이름} with encrypted password '{유저 패스워드}';

새로운 유저를 생성해보자. 끝에 ; 를 반드시 붙여줘야 한다.

 

 

생성이 됐다.

 

다시 \du로 확인해보면

malcha가 잘 생성된 것을 확인할 수 있다!

하지만 권한은 없다.

 

 

유저 삭제

drop role {유저 이름};

 

유저가 삭제됐다.

 

 

 

특정 유저로 접속

psql postgres -U tester

-U 키워드를 사용해 사용자 아이디를 입력한다. 이 때 U가 대문자여야 함

 

 

만약 tester로 유저를 생성 시도를 한다면??

권한이 없기 때문에 에러가 난다.

 

 

 

데이터베이스

데이터베이스 리스트 확인

\list

 

 

현재 총 4개의 리스트가 있다.

 

 

 

데이터베이스 생성

create database {데이터베이스 이름};

 

 

새로운 데이터 베이스가 생성된다.

 

 

데이터베이스 확인

\connect {데이터베이스 이름};

명령어를 사용해 접속한다.

 

superUser로 접속됐다.

 

\dt

명령어를 사용해 릴레이션을 확인한다.

 

당연히 생성한게 없기 때문에 아무것도 없다.

 

 

기존에 공부할 때 사용했던 testdb를 확인해보겠다.

마이그레이션을 했기 때문에 migration을 한 스키마, 실제 사용하는 todos 스키마가 있는 걸 확인할 수 있다.

 

 

데이터베이스 삭제

drop database {데이터베이스 이름};

 

 

삭제가 된다.

 

 

 

정리

Vapor - Fluent에서 사용하는 PostgreSQL의 개념과 사용법에 대해 알아봤다.

 

기존에 SQL 언어를 접해봤던 사람들이라면 익숙했을 것고, 처음접하는 사람은 조금은 낯설었을 것이다.

 

하지만 괜찮다. Fluent를 사용하면 이런 SQL 명령어 없이 Swift의 메소드를 사용해 데이터베이스를 조작할 수 있기 때문!

 

다음 포스트에서는 Fluent를 조금 더 자세히 공부해보겠다.

 

 

끝!

 

Fluent 설치 및 개념 이어보기

 

 

 

[Swift] Swift로 서버 만들기 Vapor 04 - Fluent 설치 및 개념 (Models, Field, Timestamp, Migration 등)

Fluent를 사용해 PostgreSQL 데이터베이스에 실제 데이터를 저장해보자 지난 글 보기 - PostgreSQL 개념, 설치, 사용 [Swift] Swift로 서버 만들기 Vapor 03 - PostgreSQL 개념, 설치, 사용 이번 글에서는 Vapor - Fluent

malchafrappuccino.tistory.com

 

 

출처

 

Vapor: Fluent → Overview

Fluent Fluent is an ORM framework for Swift. It takes advantage of Swift's strong type system to provide an easy-to-use interface for your database. Using Fluent centers around the creation of model types which represent data structures in your database. T

docs.vapor.codes

 

PostgreSQL과 MySQL 비교: 주요 차이점

사용 사례에 더 나은 DBMS를 결정하기 위해 MySQL과 PostgreSQL을 비교합니다.

www.integrate.io

 

MacOS PostgreSQL 설치 하고 테이블 생성, 조회하기

Intro PostgreSQL은 확장 가능성 및 표준 준수를 강조하는 객체-관계형 데이터베이스 관리 시스템의 하나 입니다. 오픈소스 RDBMS로서 사용율은 Oracle, MySQL, Microsoft SQL에 이어 4위를 기록하고 있습니다.

shanepark.tistory.com

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함