Day 09 - 데이터베이스, Docker, SQL

이유승·2024년 11월 8일
0
post-thumbnail

* 프로그래머스, 타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js) 5기 강의 수강 내용을 정리하는 포스팅.

* 원활한 내용 이해를 위해 수업에서 제시된 자료 이외에, 개인적으로 조사한 자료 등을 덧붙이고 있음.

1. 데이터베이스

  • 데이터를 체계적으로 저장하고 관리하는 시스템

  • 다양한 형태의 데이터를 효율적으로 저장하고 검색할 수 있도록 고안된 구조로, 필요한 데이터를 쉽게 찾고 업데이트할 수 있도록 설계되어있다.

데이터?

  • 데이터베이스에 저장되는 정보로, 예를 들어 이름, 나이, 주소 등의 개인 정보나 제품의 이름, 가격, 재고 상태와 같은 비즈니스 정보 등을 모두 아울러 데이터라고 지칭할 수 있다.

데이터베이스의 종류

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

  • 데이터가 테이블 형식으로 저장되며, SQL이라는 언어로 데이터를 관리하는 시스템.

비관계형 데이터베이스(NoSQL)

  • 테이블이 아닌 문서(document)나 키-값 쌍(key-value pairs) 등의 구조로 데이터를 저장하며, 유연한 데이터 구조를 허용하는 시스템.



테이블?

  • 관계형 데이터베이스에서 데이터를 저장하는 기본 단위입니다. 엑셀의 시트처럼 행(Row)과 열(Column)로 구성.
    - 예를 들어, 직원 정보를 저장하는 employees라는 테이블이 있다면, 행은 각 직원에 대한 정보를 나타내고, 열은 이름, 나이, 직급 등 직원의 각 속성을 나타내는 식.

열(Column)과 행(Row)

  • 열(Column): 데이터의 속성 또는 필드라고 불리며, 같은 테이블 안의 모든 행에서 동일한 종류의 데이터를 저장.

  • 행(Row): 각 개별 데이터 항목으로, 테이블에서 하나의 레코드(Record)를 나타낸다.



SQL(Structured Query Language)

  • 데이터베이스 관리 및 조작을 위해 사용되는 표준화된 언어.

  • 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 정의, 검색, 삽입, 수정, 삭제하는 데 사용.

SQL의 주요 기능

SQL은 다양한 작업을 수행할 수 있는 여러 종류의 명령어로 구성되어 있습니다. 주로 사용되는 SQL 기능은 다음과 같습니다:

데이터 정의(DDL - Data Definition Language): 데이터베이스 구조를 정의하는 데 사용

  • CREATE: 새로운 데이터베이스나 테이블을 생성.
  • ALTER: 테이블의 구조를 수정.
  • DROP: 데이터베이스나 테이블을 삭제.

데이터 조작(DML - Data Manipulation Language): 테이블에 있는 데이터를 다루기 위한 명령어

  • SELECT: 데이터를 조회.
  • INSERT: 새로운 데이터를 테이블에 삽입.
  • UPDATE: 테이블의 기존 데이터를 수정.
  • DELETE: 테이블의 데이터를 삭제.

데이터 제어(DCL - Data Control Language): 데이터베이스 접근 권한을 설정하는 명령어

  • GRANT: 사용자에게 특정 권한을 부여.
  • REVOKE: 사용자에게 부여한 권한을 취소.

트랜잭션 제어(TCL - Transaction Control Language): 데이터의 무결성을 유지하면서 여러 작업을 하나의 단위로 묶어 관리하는 명령어

  • COMMIT: 모든 변경 사항을 저장하고 트랜잭션을 완료.
  • ROLLBACK: 트랜잭션을 취소하고 모든 변경 사항을 이전 상태로 되돌림.
  • SAVEPOINT: 트랜잭션 내에서 되돌릴 지점을 설정.



2. Docker

  • 컨테이너라는 독립된 환경에 패키징하고 배포할 수 있게 해주는 오픈 소스 플랫폼.

  • 다양한 개발 및 배포 환경에서 일관성 있게 애플리케이션을 운영할 수 있게 해줘서, 특히 클라우드 환경이나 CI/CD(지속적 통합/지속적 배포) 파이프라인에서 많이 사용되고 있다.

Docker의 장점

환경 독립성:

  • 특정 서버나 개발 환경에 구애받지 않고 어디서든 동일한 환경을 제공할 수 있다.

가벼움:

  • Docker 컨테이너는 가상 머신과 달리 OS 커널을 공유하여 메모리 사용량이 적고 빠르게 실행된다.

확장성:

  • 컨테이너 기반으로 애플리케이션을 마이크로서비스로 분리하고 손쉽게 확장할 수 있다.

배포 및 복구 용이성:

  • 컨테이너로 애플리케이션을 묶어 배포하기 때문에 빠르게 배포하고 손쉽게 복구할 수 있다.

Docker를 사용하는 이유

  • Docker는 개발자가 동일한 환경에서 작업할 수 있도록 지원합니다. 팀원들이 모두 동일한 Docker 이미지를 사용하면, "내 컴퓨터에서는 되는데..." 같은 문제가 줄어든다.

  • Docker 이미지를 통해 애플리케이션의 모든 설정과 필요한 요소들을 하나의 패키지로 묶을 수 있다. 이를 통해 코드, 환경설정, 라이브러리 등이 모두 포함된 상태로 애플리케이션을 배포할 수 있어, 배포 과정이 단순해지고 효율적으로 관리된다.

설치

  • 공식 홈페이지에서 자신의 OS에 맞는 설치 파일을 내려받아 설치하면 된다.

  • 설치는 간단하다, Use WSL 2 instead of Hyper-V 옵션을 선택할 것인지만 물어본다.
    - Hyper-V는 Windows에서 제공하는 가상화 기술 / WSL 2는 Windows 10과 Windows 11에서 제공하는 리눅스 호환 레이어.
    - Docker가 Hyper-V 대신 WSL 2를 사용하여 컨테이너를 실행하는 옵션.
    - 더 효율적인 파일 시스템 접근 및 리소스 사용 / 커널 레벨의 가상화 기능이므로 시스템 리소스를 덜 사용 / 리눅스 기반 애플리케이션 및 도구들과의 호환성 향상 / 개발 시 로컬 파일을 컨테이너에서 빠르게 읽고 쓸 수 있다 등의 장점이 존재한다.
    - 다만, Windows 10의 일부 오래된 버전이나 Windows Server에서는 WSL 2가 지원하지 않고 / Hyper-V에서 실행해야 하는 다른 서비스가 있는 경우 등에서는 해당 옵션을 사용하지 않아야 한다.

주의점

  • Docker는 컴퓨터의 가상화 기능이 켜져있어야 정상적으로 사용할 수 있다.

  • 강의에서는 그냥 설치파일만 누르면 된다고 하는데.. 그럴리가 있나..

  • AMD/Intel CPU 제조사에 따라서 방법이 다르고, 메인보드 제조사에 따라서도 방법이 또 다르다. 자기 컴퓨터에 맞는 스펙의 가상화 기능 키는 방법을 알아보고 설치할 것.



3. MariaDB

  • MySQL 데이터베이스 관리 시스템의 대안으로 개발된 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS).

  • 모체는 MySQL. Oracle사가 MySQL을 인수하면서, 오픈 소스로 운영되던 MySQL이 유료화 될 것이라는 우려에 의해 MySQL 개발진들이 주축이 되어 독립. MariaDB를 개발하였다.

오픈 소스의 주적

  • Oracle Corp. 미국에서 창립된 초대형 소프트웨어 기업. 주로 B2B 방식의 IT 소프트웨어 개발 및 요지보수 등을 주 사업 영역으로 삼고 있다.

  • 자사의 저작권을 매우 적극적으로 활용해서 송사에 사용하고, 지독한 비즈니스 등으로 악명이 높다. 누구나 제한없이 소프트웨어를 사용할 수 있는 '오픈 소스' 원칙에 완전히 반하는 정책을 채택. 프로그램 사용료와 유지보수료 등을 꼬박꼬박 비싼값으로 요구하는 등으로 오픈 소스 진영에서는 Oracle을 상당히 비판적으로 바라보고 있다.

  • 특히 거대 기업으로써 막강한 자금력을 바탕으로 타 기업을 인수한 뒤에, 무료 사용이던걸 유료로 돌리는 등의 행위로 여타 개발자들의 분노를 사기도..

  • 한창 문어발식으로 기업을 경영할 때는 유지보수 비용은 받는데, 모든 수요를 감당할 능력이 안되서 정작 유지보수가 안되는 일도 있었다..

  • Java 언어의 경우 Oracle이 개발사 Sun Microsystems를 인수한 후 Java 관련 비용 문제를 일으키면서 여타 기업들과 마찰을 빚기도.
    - 유료화, 그것도 업데이트과 보안 패치를 포함한 특정 버전을 돈 받고 팔았다..
    - 여기에 시달리던 Google은 아예 Kotlin를 채택하고, Go를 따로 개발했을 정도..

  • MySQL 개발자들이 Oracle의 인수에 반발해서 MariaDB를 만든 것도 Oracle의 이런 전적 때문.
    - 그런데 공교롭게도 Oracle은 MySQL에 한해서는 여타 개발자들의 걱정을 배신했다.
    - 상업적 용도로 사용되는 MySQL Enterprise의 출시 이외에는 무료로 사용할 수 있는 MySQL Community Edition을 따로 내면서 오픈 소스 원칙을 비교적 잘 유지하고 있다.



4. Docker에서 MariaDB 설치하고 이용

docker exec -it mariadb mariadb -u root -p

  • docker 상에서 동작하는 mariadb에 접속하는 명령어.
    - root 계정.
  • 기본적으로는 cmd 등의 터미널에서 사용하지만.. 사실 MySQL Workbench 깔아서 Docker MariaDB에 연결해서 사용하는게 100배는 편하다.

  • 이것보다는..

  • 이쪽이 압도적으로 더 보기 편하고, 쓰기 쉽다.

SQL 명령어

1. Create (데이터 삽입)

  • 데이터를 테이블에 삽입할 때는 INSERT INTO 명령어를 사용

INSERT INTO 테이블명 (컬럼1, 컬럼2, ...) VALUES (값1, 값2, ...);

users 테이블에 사용자 정보를 삽입하는 예제입니다.

INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com');



2. Read (데이터 조회)

  • 데이터를 조회할 때는 SELECT 명령어를 사용합니다.

SELECT 컬럼1, 컬럼2, ... FROM 테이블명 WHERE 조건;

users 테이블에서 모든 데이터를 조회하는 예제.

SELECT * FROM users;

특정 조건에 맞는 데이터를 조회할 수도 있다.

SELECT * FROM users WHERE name = 'Alice';



3. Update (데이터 수정)

  • 데이터를 수정할 때는 UPDATE 명령어를 사용.

    UPDATE 테이블명 SET 컬럼1 = 값1, 컬럼2 = 값2, ... WHERE 조건;

users 테이블에서 이름이 'Alice'인 사용자의 이메일을 업데이트하는 예제.

UPDATE users SET email = 'newalice@example.com' WHERE name = 'Alice';

⚠️ 주의: WHERE 조건 필수!!

  • WHERE 조건을 생략하면 테이블의 모든 데이터가 수정될 수 있으므로 꼭 필요한 경우에만 사용해야 한다.



4. Delete (데이터 삭제)

  • 데이터를 삭제할 때는 DELETE FROM 명령어를 사용.

    DELETE FROM 테이블명 WHERE 조건;

users 테이블에서 이름이 'Bob'인 사용자를 삭제하는 예제.

DELETE FROM users WHERE name = 'Bob';

⚠️ 주의: WHERE 조건 필수!!

  • WHERE 조건을 생략하면 테이블의 모든 데이터가 삭제될 수 있으므로, 항상 신중하게 사용해야 한다.
profile
프론트엔드 개발자를 준비하고 있습니다.

0개의 댓글