본문 바로가기
내일배움 강의/강의- Node.js 입문, 숙련

Node.js 숙련주차 3.1 관계형 데이터베이스 (RDB)

by GREEN나무 2024. 11. 25.
728x90

1. 관계형 데이터베이스(RDB)란 어떤 것인지 알아봅니다.
2. AWS RDS에서 MySQL 8.0 버전을 대여합니다.
3. VS Code에서 MySQL 익스텐션을 이용해 MySQL을 연결합니다.

01. 관계형 데이터베이스 (RDB)

1) 이전에는 어떤 문제가 있었나요?

관계형 데이터베이스(RDB, Relational DataBase)  데이터의 정규화와 무결성을 보장하며, 정형화된 데이터를 효과적으로 관리하고 복잡한 비즈니스 로직을 구현하기 위해 탄생했습니다.


+추가 상식) 이후 NoSQL이 탄생합니다. RDBMS는 1970년대 데이터베이스의 초기 형태로 발전했으며, NoSQL은 RDBMS의 한계를 극복하기 위해 2000년대 후반에 등장한 새로운 유형의 데이터베이스입니다.


2) 관계형 데이터베이스(RDB, Relational DataBase)

출처: https://www.pragimtech.com/blog/

관계형 데이터베이스(RDB, Relational DataBase)는 각 데이터를 ‘테이블’이라는 표형태의 구조에 저장합니다. 여기서, 각 ‘테이블’은 여러 정보를 저장하며, ‘테이블’간에 연관 관계를 설정하여, 여러 테이블에 분산된 데이터를 서로 연결하여 관리할 수 있습니다.


연관 관계(Relationship)란, 각 테이블 사이의 연결된 관계를 의미합니다.


관계형 데이터베이스는 테이블(Table)이라는 구조를 가지며, 각 테이블은 고유한 데이터를 나타내는 행(row)과 데이터의 속성을 나타내는 열(column)을 가집니다.

Database : MongoDB에서 컬렉션

Row :  MongoDB에서 다큐멘트

하나의 Row는 여러개의 Column을 가집니다. 하나의 다큐먼트가 여러개의 필드를 가지고 있는 것과 동일한 개념입니다. 


이 테이블들은 서로 연결될 수 있으며, 이 연결을 통해 복잡한 데이터를 관리할 수 있게 됩니다.


3) 관계형 데이터베이스(RDB)와 비관계형 데이터베이스(NoSQL)의 개념

출처: https://www.linkedin.com/pulse/
MongoDB는 비관계형 데이터베이스(NoSQL)에 해당합니다.

이번 주차에 새롭게 사용할 MySQL이 바로 관계형 데이터베이스(RDB)에 해당합니다.

 

관계형 vs 비관계형 DB
데이터 형식이 자유로웠던 비관계형 데이터베이스와 달리 관계형 데이터베이스는 "테이블" 이라는 개념이 존재합니다. 여기서 테이블이란, 여러개의 ‘열(column)’과 ‘행(row)’을 가지는데, 이는 저희가 많이 사용한 엑셀의 표와 유사한 형태입니다.

각 행(row)은 고유한 데이터(record)를 나타닙니다. 예를 들어 ‘테스트닉네임’이라는 사용자의 정보가 될 수 있어요. 반면에, 각 열(column)은 해당 데이터의 속성(field)을 표현하고, ‘이메일’, ‘닉네임’, ‘비밀번호’와 같이 사용자의 구성 요소를 뜻 하는것이죠.


한 가지 주목해야 할 점은 이 테이블(표)들 간에는 서로 연관 관계(Relationship)를 가질 수 있다는 것입니다. 이러한 관계를 통해 더욱 복잡한 쿼리를 작성할 수 있고, 바로 이 점이 “관계형 데이터베이스”라는 이름의 유래가 된것입니다.


비관계형 데이터베이스(NoSQL)의 장점은 유연한 데이터 구조를 가지기 때문에, 저장(Write)과 읽기(Read) 작업이 더욱 빠르며, 복잡한 비즈니스 로직 없이 주로 데이터 읽기와 쓰기에 중점을 둔 서버에서 주로 사용한답니다.
   ex) 빅데이터 환경이나 단순 페이지뷰가 많은 어플리케이션
반면, 관계형 데이터베이스(RDB)는 더욱 복잡한 비즈니스 로직과 정형화된 데이터를 체계적으로 관리할 수 있어 더욱 안전한 서버 환경을 구성하기에 좋습니다. 
   ex) 특히 보안이 중요한 기관이나, 은행과 같은 안전성을 중시하는 회사들


4) MySQL 이란?

MySQL은 가장 널리 사용되는 오픈소스 관계형 데이터베이스(RDB)입니다.

DB-Engines 랭킹, 출처: https://db-engines.com/en/ranking
 Oracle은 유료화 정책으로 인해, 점유율이 지속적으로 하락하고있어요. 
MySQL은 오픈 소스 데이터베이스로, 다른 DBMS와 달리 라이센스 비용이 들지 않습니다.
      엔터프라이즈 버전에서는 추가적으로 라이센스 비용이 발생합니다.
데이터베이스를 관리하는 가장 대표적인 언어인 SQL(Structured Query Language)을 사용하여 데이터를 조작하고 관리할 수 있습니다.

 

트랜잭션의 특징인 ACID(아키드)를 준수하여 구현된 데이터베이스로써, 트랜잭션을 안전하게 처리할 수 있습니다.


저희는 이번 챕터부터 관계형 데이터베이스 중에서도 가장 저렴하고, 널리 사용되는 MySQL을 이용하여 프로젝트를 진행할 예정입니다.

02. RDS 구매하고 MySQL 세팅하기 

가장 대표적인 관계형 데이터베이스인 MySQL을 사용할 예정입니다.
그러기 위해 MySQL 서버를 AWS에서 구매해볼텐데요, AWS RDS를 이용해서 MySQL서버를 구성하도록 하겠습니다.

 

1) RDS란?

RDS는 AWS에서 제공하는 관계형 데이터베이스 서비스입니다. RDS는 서버 운영, 유지보수, 백업과 같이 데이터베이스 관련 작업을 AWS에게 위임하여, 저희 백엔드 개발자가 데이터베이스를 사용하는 것에 집중할 수 있게 해줍니다


2) RDS 구매하기

AWS에 로그인합니다.
https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2#.

RDS를 검색하고 결과를 클릭합니다.


좌측 “데이터베이스” 탭을 클릭합니다.
"데이터베이스 생성" 버튼을 클릭합니다.


"표준 생성" 과 "MySQL"을 클릭합니다.


DB 인스턴스 크기는 "프리 티어"를 선택합니다.
프리 티어를 설정하지 않고 다른 템플릿을 사용하였을 때, 추가 요금이 발생할 수 있습니다.
꼭! 프리 티어를 선택해주세요!
AWS에 가입 후 1년 동안 특정 서비스를 무료로 사용할 수 있는데요. 프리 티어가 붙은 서비스는 무료로 사용할 수 있는 서비스랍니다!


프리 티어가 적용되는 서비스 목록 : https://aws.amazon.com/ko/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all

다음과 같이 입력합니다.
DB 인스턴스 식별자에 "express-database" 라고 입력합니다. (원하는 이름으로 바꾸셔도 돼요!)
마스터 사용자 이름과 암호에 만들고 싶은 계정의 아이디, 비밀번호를 입력합니다. DB 접속용으로 사용해야 하니 꼭 기억해주세요!
저는 아래와 같이 작성했습니다.
DB 인스턴스 식별자: express-database
마스터 사용자 이름: root
마스터 암호: aaaa4321
마스터 암호 확인: aaaa4321


‘인스턴스 구성’과 ‘스토리지’ 설정은 그대로 두고 넘어갑니다.


‘연결’ 설정은 다음과 같이 설정합니다.
컴퓨팅 리소스: “EC2 컴퓨팅 리소스에 연결 안 함” 선택
퍼블릭 액세스 기능: "예" 선택 
→ 이 설정이 되어있어야 우리 컴퓨터에서 AWS RDS의 MySQL과 연결이 가능합니다. 꼭 퍼블릭 액세스 설정을 확인해주세요!
VPC 보안 그룹: "새로 생성" 선택
새 VPC 보안 그룹 이름: express-database-sg

   DB이름-서비스

  sg : security group의 약어
가용 영역: 옵션 중 아무거나 선택하셔도 괜찮아요.


‘추가 구성’ > ‘초기 데이터베이스 이름’ 에 "express_db" 를 입력합니다.
RDS를 생성한다면, 자동으로 express_db 이름의 데이터베이스가 생성됩니다.

모니터링은 유료라 활성화X

백업에 체크합니다,


“데이터베이스 생성” 버튼 클릭 

기다리기



AWS RDS는 지금까지 다룬것보다 더욱 많은 다양한 설정이 가능하답니다.

: https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/Welcome.html

 

3) RDS 포트 열어주기

“express-database” 클릭

   엔드포인트가 DB주소입니다.


“연결 & 보안” > “보안” > “VPC 보안 그룹”에서  “express-database-sg” 를 찾아 클릭합니다.
저희가 생성한 “보안 그룹 ID” 클릭 합니다.


“인바운드 규칙 편집” 버튼 클릭


인바운드 규칙을 다음과 같이 설정합니다.
“규칙 추가”를 클릭하고, 유형에서 사용자 지정 TCP를 선택합니다.
RDS의 특정 TCP 포트를 열도록 설정합니다.
포트 범위에 3306을 입력합니다.
MySQL을 3306 Port를 기본으로 사용하고 있으므로, 해당 Port를 열어줍니다.
소스에서 Anywhere-IPv4를 선택합니다.
모든 IP 주소에서 전달되는 트래픽을 허용하는 의미입니다.
실제 서비스 환경에서는 이 설정이 보안 위험을 초래할 수 있으니, 주의하세요
위와 같이 설정이 완료되었으면 “규칙 저장” 버튼 클릭


4) VS Code(Visual Studio Code)에서 MySQL 확장 플러그인 설치

 https://marketplace.visualstudio.com/items?itemName=formulahendry.vscode-mysql
​위 확장 플러그인을 VS Code에 설치해주세요

탐색기 하단

5) DB 연결 정보 등록

https://ap-northeast-2.console.aws.amazon.com/rds/home?region=ap-northeast-2#databases:
 AWS RDS 대시보드에서  데이터베이스 “express-database” 클릭합니다.
RDS의 엔드포인트 정보를 확인 후 드래그하여 복사합니다.


“VS Code 좌측 사이드바” → “탐색기” → MYSQL 탭 우측 ﹢ 버튼을 클릭합니다.


MySQL 서버 접속 정보 입력
﹢버튼을 누르면 아래처럼 입력 상자가 뜨는데, 위에서 설정한 RDS의 정보를 입력합니다!
host: 나의 RDS 엔드포인트
user: 나의 마스터 사용자 이름 (root)
password: 나의 마스터 암호 (aaaa4321)
port: 3306 (MySQl이 기본적으로 사용하는 Port 번호)

certificate file path: 아무것도 설정하지 않고 넘어갑니다!
MySQL 데이터베이스 등록 확인하기


파란 데이터베이스 아이콘의 >  버튼을 누르면 위 사진처럼 펼쳐지며 보입니다
이렇게 보이면 express-database에 존재하는 데이터베이스 목록이 보여지는 것입니다.
저희가 RDS를 설정할 때 생성한 express_db 데이터베이스 또한 확인할 수 있습니다.
설명