-
데이터베이스, MySQLToday I Learned 2020. 7. 31. 22:56
1. 데이터베이스(Database)
데이터베이스를 간략하게 표현하자면 '정보를 저장하는 애플리케이션'이라 할 수 있다.
만일 데이터베이스가 없다면? 서버의 '메모리'나 어떤 '파일'에 정보를 저장하게 될 것이다.
1) 서버의 메모리에 저장한다면?
- 서버를 끄면 데이터가 사라진다는 단점이 있다.
2) 파일에 저장한다면?
- 상황에 따라 원하는 정보만을 가져올 수 없고, 항상 모든 데이터를 가져온 뒤 서버에서 필터링을 거쳐야 한다.
- 성능, 보안, 편의성에 있어서 한계를 가지고 있다.
이러한 한계를 극복하기 위해 고안된 전문화된 소프트웨어가 바로 '데이터베이스'다. 데이터베이스의 장점은 데이터를 안전하고, 편리하고, 빠르게 보관하고 사용할 수 있다는 것! 데이터베이스에는 MySql, oracle, MongoDB 등등 다양한 제품들이 있다.
2. 스키마(Schema)
스키마(schema)는 데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티(테이블) 간의 관계에 대한 설명, 즉 "데이터베이스의 청사진"과 같다.
아래 그림으로 주어진 예제는 수강신청 시스템의 스키마. 각각의 엔티티(테이블) 간의 관계는 아래와 같다.
- Teachers 엔티티와 Classes 엔티티가 1:N(one-to-many, "일대 다")
- Classes 엔티티와 Students 엔티티가 N:N(many to many, "다대 다")
- Classes 엔티티와 Classes/Students 엔티티(조인 테이블)가 1:N
- Students 엔티티와 Classes/Students 엔티티(조인 테이블)가 1:N
예시) 수강신청 시스템의 스키마 3. SQL
'Structured Query Language'의 약자. 데이터베이스에 데이터를 저장하거나 얻기 위해서 사용하는 표준화된 언어.
1) Structured : 관계형 데이터베이스는 기본적으로 '표'의 형식으로 정보를 저장하며 정리 정돈하는데, 바로 그런 특징을 보고 '구조화'되었다고 이야기한다.
2) Query : 데이터베이스에게 "데이터를 넣어줘", "조회해줘", "삭제해줘" 등등 이처럼 질의하듯 요청할 수 있는데, 이런 특징 때문에 Query라는 표현이 사용된다(Query = 질문)
3) Language : 데이터베이스도 이해할 수 있고 사용자도 이해할 수 있는 '공통의 약속' 즉, '언어'로 요청해야 데이터베이스 서버가 알아들을 수 있다. 이때 사용되는 언어가 바로 SQL이다.
4. MySQL
1) MySQL이 뭔가?
- 데이터베이스에는 관계형 데이터베이스 외에도 '비 관계형 데이터베이스', '객체형 데이터베이스' 등 다양한 형태의 데이터베이스가 있다. MySQL은 그중 관계형 데이터베이스에 속하는 제품이다.(MySQL 외 다른 제품들로는 MSSQL, ORACLE 등이 있다.)
- MySQL을 사용하다보면 여러 독립된 테이블이 존재하지만, join과 같은 연산자를 통해 테이블들이 긴밀한 관계를 맺는 경우를 종종 볼 수 있다. 그러한 맥락에서 이런 형태의 데이터베이스를 관계형 데이터베이스라고 한다.
*관계형 데이터베이스에 대한 상세한 설명은 링크 참조.
2) MySQL의 구조
MySQL에서 데이터를 기록하는 최종적인 곳은 표(table)다. 어떤 웹사이트를 운영하는 데 사용되는 정보를 데이터베이스에 저장하고 싶다면, '회원정보를 저장하는 표', '게시글을 저장하는 표', '댓글을 저장하는 표' 등등 많은 표(table)를 만들게 된다. 이러한 표가 많아지면 이들을 잘 정리할 필요가 생기는데, MySQL에서는 서로 연관된 표들을 그룹핑해서, 연관되어 있지 않은 표들과 분리하기 위해 사용하는 '폴더'가 있다. 그것을 MySQL에서는 데이터베이스, 다른 말로 스키마(schema)라고 부른다. 즉 '스키마'는 서로 연관된 데이터들을 그룹핑한 것이라고 볼 수 있다.(MySQL에서 말하는 스키마는 데이터베이스와 같은 의미를 가진다. 하지만 다른 데이터베이스 서버에서는 스키마가 다른 의미로 쓰이니 혼동하지 말자) 스키마를 저장하는 곳은 '데이터베이스 서버'라고 한다.
'Today I Learned' 카테고리의 다른 글
객체 지향 프로그래밍? (0) 2020.10.04 express.Router (0) 2020.08.01 React를 통해 Personal Portfolio 만들기 - 스프린트 일지 (0) 2020.07.21 React 개념정리(1) (0) 2020.07.19 Web Architecture(용어 정리) (0) 2020.07.01