저번 시간 웹 서버는 Web Server - WAS - DB 세 개의 구조로 볼 수 있다고 설명했었다. 그 중 데이터베이스(DB)에 대해서 설명하는 게시글이다.
데이터베이스의 구조를 엑셀에 비유해서 이해하면 다음과 같다.
- Database = 엑셀 파일
- Table = 엑셀 시트
- Column (열) = 데이터 종류 (카테고리), 세로 데이터
- Row (행) = 가로 데이터
데이터베이스란?
구조화된 정보 또는 데이터의 조직화된 모음으로서, 일반적으로 컴퓨터 시스템에 전자적으로 저장된다. 간단히 말해 (여러 명의 사용자나 응용 프로그램이 공유하는) '데이터의 집합'이고, 흔히 쓰는 엑셀과 유사한 느낌이다. 데이터는 동시에 접근이 가능해야 한다. 결국, 데이터베이스는 '데이터의 저장 공간 자체'인 것이다.
- 데이터의 독립성: 데이터베이스의 크기를 변경하거나 데이터 파일의 저장소를 변경해도 기존에 작성된 응용프로그램이 전혀 영향을 받지 않아야 함
- 보안: 데이터베이스 안 데이터에는 데이터를 소유한 사람 or 데이터에 접근이 허가된 사람만 접근해야 함
- 데이터 중복의 최소화: 동일한 데이터 여러 개 저장되는 것 방지
데이터베이스 관리 시스템(DBMS)이란?
데이터베이스에는 일반적으로 데이터베이스 관리 시스템(DBMS)으로 알려진 포괄적인 데이터베이스 소프트웨어 프로그램이 필요하다.
DBMS는 데이터베이스를 관리 및 운영하는 역할을 하며, 사용자가 정보의 구성 및 최적화 방법을 검색하거나 업데이트 및 관리할 수 있게 해 준다. 인기 데이터베이스 소프트웨어 또는 DBMS로는 MySQL, Microsoft Access, Microsoft SQL Server, FileMaker Pro, Oracle Database 및 dBASE가 있다.
- 무결성 (integrity) 충족
- 데이터베이스 안의 데이터는 오류가 없어야 함
- 제약 조건 (constraint) 이라는 특성을 가짐
SQL(Structured Query Language)이란?
데이터를 쿼리, 조작 및 정의하고 액세스 제어를 제공하기 위해 거의 모든 관계형 데이터베이스에서 사용되는 프로그래밍 언어이다. DBMS를 통해 중요한 정보들을 입력, 관리, 추출한다.
데이터베이스 관리 시스템(DBMS) 제작 회사와 관계없이 사용할 수 있어서, 여러 시스템에서도 쉽게 이식할 수 있다. 또한 SQL은 대화식으로 사용할 수 있는 언어이다. 즉, 사용자가 명령어를 입력하면 데이터베이스가 즉시 응답을 주는 방식이다.
SQL은 분산형 클라이언트/서버 구조를 지원해서, 여러 대의 컴퓨터가 동시에 데이터베이스에 접근하고 작업할 수 있게 해 준다. 이렇게 함으로써 데이터의 관리와 처리 효율성을 높일 수 있다.
MySQL Database란?
MySQL은 SQL 기반의 오픈 소스 관계형 데이터베이스 관리 시스템이다. 웹 애플리케이션용으로 설계 및 최적화되어 모든 플랫폼에서 실행할 수 있다.
MySQL는 Airbnb, Uber, LinkedIn, Facebook, Twitter, YouTube 등의 웹 사이트 또는 웹 기반 애플리케이션을 지원하는 DBMS이다.
흔히 MySQL 프로그램을 설치해서 사용하지만 (아무래도 ERD 그리기에도 좋고), 현재는 웹 서버 실습 과정이고 MAMP를 통해 APM이 설치된 로컬 서버가 구축되어 있어 해당 내용은 생략한다.
필요하다면 https://dev.mysql.com/downloads/installer/ 에서 설치하면 된다. (64bit용 따로 없음)
기초 실습을 통한 데이터베이스 이해
저번 주에 설치했던 MAMP를 실행하여 접속한다.
localhost:8888/phpmyadmin 로 접속한다. 그러면 아래와 같이 phpMyAdmin으로 접속할 수 있다.
1. 좌측 새로운(new) 탭 클릭
2. 데이터베이스명 설정 + utf8_general_ci 선택 후 만들기 로 데이터베이스 생성
3. 테이블 없는 데이터베이스를 다음과 같이 확인할 수 있다.
하나의 테이블에 대해 테이블명 + 해당 테이블의 칼럼 수를 원하는대로 설정 후 만들기 로 테이블을 생성한다.
4. 원하는대로 테이블 칼럼 (column) 구성 - 저장
- 이름: 칼럼명
- 종류: 칼럼의 데이터 타입 설정
- 예) INT 정수형, VARCHAR 가변길이 문자열, DATE 날짜 ([년-월-일]표기, YYYY-MM-DD) 등
- 길이/값: 데이터 최대 가변 길이 지정 (필요한만큼)
- Null: null값 허용 여부 (하나의 행에 대해 해당 값이 필수인지 아닌지 설정)
- 인덱스: PRIMARY, UN IQUE, INDEX, FULLTEXT, SPATIAL 중 설정
- A_I: Auto Increment, 자동 번호 매기기 (자동으로 인덱스 번호 생성하기에 편리함)
테이블 구조는 다음과 같다.
5. 테이블에 값 추가하기 (상단 삽입 탭 - 값 입력 - 실행)
원하는 값을 지정된 데이터타입(종류)에 맞게 입력한 후 실행을 클릭한다.
삽입 완료 문구와 함께 해당 내용에 대한 쿼리문을 함께 반환해준다.
좌측 탭에서 테이블을 다시 확인해보면 다음과 같이 데이터가 삽입된 것을 확인할 수 있다.
Query에 대한 이해
그렇다면 쿼리문은 무엇인가? 데이터베이스에 내리는 명령이다. 데이터베이스에 저장된 데이터를 원하는 조건에 맞게 조작(선택, 삽입, 수정, 삭제 등) 할 수 있는 명령문이라 생각하면 된다.
- SELECT 데이터 조회
- INSERT 데이터 추가/삽입
- UPDATE 데이터 수정
- DELETE 데이터 삭제
- CREATE 테이블 생성
- ALTER 테이블 구조 변경
- DROP 테이블 삭제
- CREATE INDEX 인덱스 생성
- 그 외
쿼리 구조는 간단히 몇 가지 예시를 통해 이해하면 된다. 정말로 순수 영어 문장 해석하듯이 보면 된다.
'name'이라는 칼럼만을 추출하기를 원한다. 이 때, 해당 테이블의 출처는 'test_table_01'이라는 이름의 테이블이다. 결과로 name 칼럼만이 조회된다.
SELECT 칼럼명 FROM '테이블명';
데이터를 더 추가해서 실습해보자.
'test_table_01'이라는 테이블에서 전부 불러오는데(* 은 모두 선택), 그 조건은 점수(score)가 80점 이상인 행만 출력하기를 원한다. 결과로 'score'이 80보다 큰 행의 전체 값만이 조회 가능하다.
SELECT * FROM '테이블명' WHERE 조건;
이번엔 삽입 구문이다. 데이터를 삽입하기 원하는 'test_table_01'이 있는데, 그 중 'name', 'score', 'password' 라는 칼럼에만 값을 넣고 싶다. 그 값은 'admin6', '57', '3213'이다.
실행하면 앞에서 칸에 하나하나 입력하여 넣지 않아도 추가가 된 것을 확인할 수 있다.
INSERT INTO '테이블명'('칼럼명') VALUES ('값');
'모의해킹 > 웹해킹스터디' 카테고리의 다른 글
로그인 로직 이해하기 - 식별과 인증, 그리고 해시 (Hash) (1) | 2024.11.27 |
---|---|
[실습] 회원가입 페이지 만들기 + DB연동 (0) | 2024.11.27 |
[실습] 로그인 페이지 만들기 + CSS (0) | 2024.11.27 |
[macOS] MAMP로 PHP 웹 개발 환경 세팅 (1) | 2024.11.27 |
웹 서버 이해하기 (0) | 2024.11.27 |