31일차

장민우·2024년 5월 10일

서버의 개인키 생성
# openssl genrsa -out KEY_FILE LENGTH

# openssl genrsa -out private.key 2048

CSR(Certificate Signing Request) 생성
# openssl req -new -key KEY_FILE -out CSR_FILE

# openssl req -new -key private.key -out cert.csr

CSR에 서명하여 인증서 발급(Self-Signed 인증서 발급)
# openssl x509 -req -signkey PRIVATE_KEY -in CSR_FILE -out CERTIFICATE_FILE

# openssl x509 -req -signkey private.key -in cert.csr -out cert.crt

발급 후.

  1. 웹 서버에 SSL/TLS 구성
  2. Apache SSL 모듈 설치
    # yum install mod_ssl
    [root@host1 ~]# cd /etc/httpd/conf.d/
    [root@host1 conf.d]# cp ssl.conf ssl.conf.bak
    [root@host1 conf.d]# vim ssl.conf

# systemctl restart httpd.service
# firewall-cmd --add-service=https
# firewall-cmd --add-service=https --permanent

방화벽 설정확인됐는지 확인 화면.

웹 컨텐츠

  • 정적 웹 컨텐츠
    웹 페이지 문서의 내용이 고정된 웹 문서로 웹 문서 요청시 웹 문서 원본 내용이 그대로 클라이언트에 제공되는 웹 컨텐츠

  • 동적 웹 컨텐츠
    웹 페이지 문서의 내용 중 서버 사이드 언어가 포함된 웹 문서로 웹 문서 요청시 서버 사이드 언어 코드가 서버에서 처리된 후 처리된 결과를 웹 문서에 포함하여 클라이언트에게 제공하는 웹 컨텐츠

서버 사이드 언어

  • 코드 내용이 서버의 스크립트 엔진 또는 파서가 처리하여 그 결과를 웹 서버에게 전달함
    ASP, JSP, PHP

클라이언트 사이드 언어

  • 코드 내용이 클라이언트에서 해석되어 처리되는 언어
    HTML, JavaScript

Apache 웹서버에서 PHP로 웹 서비스 제공

# yum install php
# systemctl restart httpd.service

# cd /var/www/html/
# vim phpinfo.php

관계형 데이터베이스 - MariaDB(MySQL)

데이터베이스(Database, DB)

  • 체계적으로 구조화된 데이터의 모음을 의미함.
  • 이 데이터는 효과적으로 검색, 저장, 관리, 업데이트 및 조작할 수 있도록 설계되어 있음.
  • 데이터베이스는 정보를 효율적으로 관리하기 위한 중요한 도구로 사용되며, 다양한 분야에서 이용되고 있음.

데이터베이스의 주요 특징

  • 구조화된 데이터: 데이터베이스는 테이블, 열, 행 등과 같은 구조를 가지고 있어 데이터의 일관성과 유지보수가 용이함.
  • 데이터 독립성: 데이터베이스는 데이터와 응용프로그램을 독립시켜, 데이터의 변경이 응용프로그램에 영향을 미치지 않도록 함.
  • 동시성 제어: 여러 사용자가 동시에 데이터에 접근하더라도 데이터베이스는 이를 효과적으로 관리하여 충돌을 방지함.

데이터베이스의 분류

  • 관계형 데이터베이스(Relational Database)
    데이터를 테이블 형태로 표현하고, 테이블 간에 관계를 설정하여 데이터를 관리함.
    예: Oracle, MySQL, MariaDB, Microsoft SQL Server

  • 객체지향 데이터베이스(Object Database)
    객체 지향 프로그래밍의 개념을 데이터베이스에 도입하여, 객체 간의 관계를 중심으로 데이터를 조직함
    예: ObjectDB, db4o 등

데이터베이스 기본 용어 정리
Database (데이터베이스)

Table (테이블)

  • 데이터베이스 내에서 구조화된 형식으로 데이터를 저장하는 표 형태의 개체.
  • 행과 열로 이루어져 있으며, 각 열은 특정 유형의 데이터를 나타냄. 테이블은 데이터베이스의 핵심 구성 요소 중 하나.

Entity (엔터티)

  • 데이터베이스에서 구별 가능한 실세계 객체나 사건으로, 테이블에 저장된 데이터의 논리적인 단위.
  • 예: 고객, 주문, 제품 등

Row (행)

  • 테이블에서 하나의 레코드를 나타내는 가로의 한 줄.

Column (열)

  • 테이블에서 수직으로 배열된 데이터의 유형을 나타내는 세로의 한 열.
  • 각 열은 특정 유형의 데이터를 포함하며, 열의 집합이 테이블의 스키마를 형성함.

Field (필드)

  • 테이블에서 각 열에 해당하는 데이터의 최소 단위.

Record (레코드)

  • 테이블에서 하나의 행 또는 데이터 레코드를 나타냄.
  • 레코드는 특정 엔터티에 대한 정보를 포함하며, 테이블 내에서 유일한 식별자를 가지는 경우가 많음.

Schema (스키마)

  • 스키마는 데이터베이스에서 데이터 구조, 데이터베이스 객체의 정의, 그리고 데이터베이스 객체 간의 관계를 정의하는 데 사용되는 구조

Schema의 특징:

  • 데이터 구조 정의: 테이블, 열, 데이터 유형 등과 같은 데이터 구조를 정의합니다.
  • 객체 정의: 데이터베이스 객체(테이블, 뷰, 프로시저 등)의 속성과 특성을 정의합니다.
  • 제약 조건 정의: 데이터의 무결성을 유지하기 위해 각 데이터베이스 객체에 적용되는 제약 조건(Primary Key, Foreign Key 등)을 정의합니다.

스키마(Schema)의 종류:

  • 데이터베이스 스키마(Database Schema): 전체 데이터베이스의 구조를 정의합니다.
  • 테이블 스키마(Table Schema): 특정 테이블의 구조를 정의합니다.

SQL(Structured Query Language)

  • 데이터베이스에서 데이터를 관리하기 위한 표준화된 언어로, 데이터베이스의 생성, 수정, 삭제, 조회 등 다양한 작업을 수행하는데 사용됨.

MariaDB로 DB 서비스 구축

  1. MariaDB 서비스 패키지 설치
    # yum install mariadb-server mariadb

  2. MariaDB 서비스 시작
    # systemctl start mariadb.service

  3. MariaDB 서비스 부팅시 활성화(영구설정)
    # systemctl enable mariadb.service

  4. 방화벽에서 MariaDB(MySQL) 서비스 허용
    # firewall-cmd --add-service=mysql
    # firewall-cmd --add-service=mysql --permanent

(옵션) MariaDB(MySQL) 보안 강화 설정
# mysql_secure_installation

초기 설정시 localhost의 데이터베이스 서비스 접속
[root@host2 ~]# mysql -h localhost -u root

  • 반드시 로컬에서 root 사용자로 접속 (초기 설정에서는 패스워드 없이 접속 가능)

MariaDB [(none)]>

  • 데이터베이스 목록 확인
    MariaDB [(none)]> SHOW DATABASES

  • 데이터베이스 생성
    MariaDB [(none)]> CREATE DATABASE exampledb;
    Query OK, 1 row affected (0.000 sec)

  • 사용자 생성
    MariaDB [(none)]> CREATE USER 'user'@'localhost' IDENTIFIED BY 'test1234';
    • localhost에서 접속하는 id : user, pw: test1234 인 사용자 생성

  • 사용자에게 데이터베이스 사용 권한 부여
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON exampledb.* TO 'user'@'localhost';

    • user@localhost 사용자에게 exampledb 데이터베이스의 모든 권한을 부여

MariaDB [(none)]> FLUSH PRIVILEGES;
- 사용자 계정, 권한 설정을 즉시 반영

[test01@host2 ~]$ mysql -h localhost -u user -p

MariaDB [(none)]> SHOW DATABASES;

MariaDB [(none)]> USE exampledb;


  • Database 생성
    MariaDB [(none)]> CREATE DATABASE testdb01;

  • Database 삭제
    MariaDB [(none)]> DROP DATABASE testdb01;

  • Database 목록 확인
    MariaDB [(none)]> SHOW DATABASES;

  • 데이터베이스 선택
    MariaDB [(none)]> USE testdb01;
    Database changed
    MariaDB [testdb01]>

  • 테이블 생성
    MariaDB [testdb01]> CREATE TABLE phonebook (
    -> no int,
    -> name char(10),
    -> phone char(15),
    -> memo text
    -> );

  • 테이블 목록 확인
    MariaDB [testdb01]> SHOW TABLES;
    +--------------------+
    | Tables_in_testdb01 |
    +--------------------+
    | phonebook |
    +--------------------+
    1 row in set (0.000 sec)

  • 테이블 구조 확인
    MariaDB [testdb01]> DESC phonebook;
    MariaDB [testdb01]> DESCRIBE phonebook;

+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| no | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| phone | char(15) | YES | | NULL | |
| memo | text | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
4 rows in set (0.001 sec)

  • 테이블 삭제
    DROP TABLE 테이블;

  • 테이블 데이터 전체 조회
    SELECT 필드1, 필드2 FROM 테이블;
    SELECT * FROM 테이블;

  • 테이블 데이터를 조건을 지정하여 조회
    SELECT * FROM 테이블 WHERE 조건;

  • 테이블에 데이터 삽입
    INSERT INTO 테이블 VALUES (값1, 값2);

  • 테이블의 특정 필드를 지정하여 테이블에 데이터 삽입
    INSERT INTO 테이블 (필드1, 필드2) VALUES (값1, 값2);

  • 테이블의 전체 행 삭제
    DELETE FROM phonebook;

  • 테이블의 특정 조건에 해당하는 행 삭제
    DELETE FROM 테이블 WHERE 조건;

  • 테이블의 전체 행 수정
    UPDATE 테이블 SET 필드1=값1, 필드2=값2;

  • 테이블의 특정 조건에 해당하는 행 수정
    UPDATE 테이블 SET 필드1=값1 WHERE 조건;

  • 테이블 구조 변경 - 필드 추가
    ALTER TABLE 테이블 ADD 필드1 데이터타입;

  • 테이블 구조 변경 - 필드 삭제
    ALTER TABLE 테이블 DROP 필드1;

  • 테이블 구조 변경 - 필드 이름 변경
    ALTER TABLE 테이블 CHANGE 필드1원래이름 필드1새이름 데이터타입


사용자 및 권한 관리

  • 사용자 생성
    CREATE USER '사용자이름'@'호스트' IDENTIFIED BY '비밀번호';

  • 사용자 삭제
    DROP USER '사용자이름'@'호스트';

  • 권한 부여
    GRANT 권한1, 권한2 ON 데이터베이스이름.테이블이름 TO '사용자이름'@'호스트';

  • 권한 회수
    REVOKE 권한1, 권한2 ON 데이터베이스이름.테이블이름 FROM '사용자이름'@'호스트';

  • 패스워드 변경
    SET PASSWORD FOR '사용자이름'@'호스트' = PASSWORD('새비밀번호');
    ALTER USER '사용자이름'@'호스트' IDENTIFIED BY '새로운비밀번호';

  • DB 생성

  • 적용


MariaDB(MySQL) 네트워크 통신 없이 로컬에서만 운영

# vim /etc/my.cnf.d/mariadb-server.cnf

# systemctl restart mariadb.service

데이터 백업 방법


  • 물리적인 방법

    • 데이터베이스의 데이터가 물리적으로 저장되는 파일을 직접 백업하는 방법으로 백업 전후 사용 환경이 달라지는 경우(OS 버전, DBMS 종류 및 버전) 복원이 제대로 되지 않을 수 있음.
  • 논리적인 방법

    • DBMS에 요청하여 데이터를 추출하는 방법으로 데이터베이스의 데이터는 백업이 되지만 데이터베이스 설정까지 백업되지는 않음.

    • 데이터베이스에서 데이터를 추출하는 방식으로 데이터베이스의 데이터 사이즈가 큰 경우 백업 및 복원에 시간이 소요됨.

      (1) 데이터베이스 백업
      $ mysqldump [OPTION]... -u USER -p DATABASE > DATABASE_FILE.dump

      (2) 데이터베이스 복원
      $ mysql -u root -p DATABASE < DATABASE_FILE.dump

Wordpress 설치


  • 웹 사이트를 간단히 구축할 수 있도록 도와주는 오픈소스 CMS(Contents Management System) 도구
  • PHP, MySQL
  • https://wordpress.org/

설치 단계

  1. 웹서버 구성

  2. PHP, MySQL(MariaDB) 플러그인 설치 (php, php-mysqlnd)
    # yum install php php-mysqlnd

  3. 웹서비스 방화벽 허용

  4. MariaDB(MySQL) 서비스 구성
    # yum install mariadb-server mariadb
    # systemctl start mariadb.service
    # systemctl enable mariadb.service
    # firewall-cmd --add-service=mysql
    # firewall-cmd --add-service=mysql --permanent
    # mysql_secure_installation

  5. WordPress 다운로드 및 설치

# cd /var/www/html
# vim index.html

# wget https://wordpress.org/latest.zip
# unzip latest.zip
# cd wordpress
# ls -l
# cp wp-config-sample.php wp-config.php
# vim wp-config.php

#systemctl restart httpd.service

0개의 댓글