멋쟁이사자처럼 정규 세션이 끝나고, 8월부터는 Front-End
, Back-End
분야를 나누어서 스터디를 진행하게 되었다.
스터디는 주마다 주어지는 키워드와 질문에 대해 각자 공부해서 발표를 하는 방식으로 진행된다.
[키워드]
Database
Database Query
(select
,insert
,update
,delete
)NoSQL
ORM
[질문 리스트]
Database
가 필요한 이유는 무엇일까요?RDB
와NoSQL
의 개념과 특징을 설명해주세요.- 4개의
DB 쿼리문
에 대해 설명해주세요. (select
,insert
,update
,delete
)ORM
이 무엇인지 설명해주세요.
흠,,, 내가
Database
에 대한 공부를 제대로 해본 적이 없어서 처음 들어보는 용어가 조금 있다.
Database
기초부터 공부해보자!
Database
DB
: Database
)란?여러 사람에 의해 공유되어 사용될 목적으로 체계화하여 통합하여 관리되는 데이터의 집합체
데이터베이스는 중복된 데이터를 없애고, 자료를 구조화하여, 효율적인 처리를 할 수 있도록 관리되어, 여러 업무에 여러 사용자가 데이터베이스를 사용할 수 있다.
DBMS: Database Management System
)이란?데이터베이스는 응용 프로그램과는 다른 별도의 미들웨어에 의해 관리되는데, 이러한 미들웨어를
DBMS
라고 한다.
DBMS
는 응용 프로그램을 대신하여 DB
에 존재하는 데이터의 검색, 삭제, 삽입, 수정을 가능하게 하고, 모든 응용 프로그램이 DB
를 공유할 수 있게 한다.
DBMS
의 특징RDB
RDB(Relational Database
)란?
- 관계형 데이터베이스란 테이블(
table
)로 이루어져 있으며, 이 테이블은 키(key
)와 값(value
)의 관계를 나타낸다.- 이처럼 데이터의 종속성을 관계(
relationship
)로 표현하는 것이 관계형 데이터베이스의 특징!- 현재 가장 많이 사용되고 있는 데이터베이스의 한 종류이다.
RDB
의 특징NoSQL
NoSQL
이란?
NoSQL
의 약자에 대해서는No SQL
,Not Only SQL
,Non-Relational Operational Database SQL
로 의견이 엇갈리지만, 현재는Not Only SQL
로 풀어서 설명하는 것이 다수를 차지하고 있다.Not Only SQL
을 풀어보면, 단순히 기존 관계형DBMS
가 가지고 있는 특성뿐만 아니라, 다른 특성들을 부가적으로 지원한다는 것을 의미한다.
NoSQL
특징NoSQL
은 RDBMS
와 달리 데이터 간의 관계를 정의하지 않는다.
→ 데이터 테이블은 그냥 하나의 테이블이며, 각 테이블간의 관계를 정의하지 않고 테이블간의 join
도 불가능하다.
RDBMS
에 비해 훨씬 더 대용량의 데이터를 저장할 수 있다.
→RDBMS
의 복잡도와 용량의 한계를 극복하기 위한 목적으로 등장한 만큼 페타바이트급의 대용량 데이터를 저장할 수 있다.
분산형 구조이다.
→ NoSQL
은 기존의 RDBMS
와는 다르게 하나의 고성능 머신에 데이터를 저장하는 것이 아니라 분산형 구조를 통해 데이터를 여러 대의 서버에 분산하여 저장한다. 분산 시에 데이터를 상호 복제하여 특정 서버에 장애가 발생했을 때에도 데이터 유실이나 서비스 중지가 없는 구조의 형태를 가진다.
고정되지 않은 테이블 스키마를 갖는다.
→RDBMS
와는 다르게 테이블의 스키마가 유동적이다. 데이터를 저장하는 column
은 각기 다른 이름과 다른 데이터 타입을 갖는 것이 허용된다.
RDBMS
와 NoSQL
비교
RDBMS
가 클라이언트/서버 환경에 맞는 데이터 저장 기술이라고 한다면,NoSQL
은 클라우드 환경에 맞는 저장 기술이다.
Database Query
(select
, insert
, update
, delete
)Database Query
란?
Query
: '질문, 문의하다'
Database Query
: 데이터베이스에 정보를 요청하는 것
흔히 쿼리문을 작성한다는 말은 데이터베이스에서 원하는 정보를 가져오는 코드를 작성한다 정도로 이해하면 된다.
SELECT
- 가장 기본이 되는 데이터를 불러오는 쿼리문
- 단순히
DB
의 데이터를 일정 조건으로 조회할 때 사용함.
SELECT * FROM [테이블명]
: [테이블명]의 모든 필드, 모든 데이터를 조회한다.SELECT * FROM [테이블명] WHERE [필드명] = [필드값]
: [테이블명]의 모든 필드, [필드명]이 [필드값]인 데이터를 조회한다.SELECT * FROM [테이블명] WHERE [필드명1] = [필드값1] AND [필드명2] = [필드값2]
: [테이블명]의 모든 필드, [필드명1]이 [필드값1]이고, [필드명2]이 [필드값2]인 데이터를 조회한다.SELECT [필드명3], [필드명2] FROM [테이블명] WHERER [필드명1] = [필드값1] AND [필드명2] = [필드값2]
: [테이블명]의 [필드명3], [필드명2] 필드를 출력, [필드명1]이 [필드값1]이고 [필드명2]이 [필드값2]이고 데이터를 조회한다.INSERT
DB
에 원하는 값을 삽입하는 쿼리.
INSERT
사용법INSERT INTO[테이블명] (필드명1, 필드명2, ... ) VALUES(필드값1, 필드값2, ...)
: [테이블명]에 필드값 1을 필드명 1에, 필드값 2를 필드명 2에 삽입한다. INSERT
문을 실행하면 결과에 따라 레코드의 수가 추가된다.
INSERT INTO[테이블명] VALUES(필드값1, 필드값2, ... )
: [테이블명]에 필드의 순서대로 필드값1, 필드값2를 삽입한다. 테이블 필드의 개수에 맞게 필드값1, 필드값2, ... 가 설정되어야 한다.
UPDATE
원하는 조건에 맞는 필드의 값을 수정하는 쿼리.
UPDATE [테이블명] SET [필드명1] = [수정할 값]
: [테이블명]의 필드명1의 모든 필드를 [수정할 값]으로 수정한다.UPDATE [테이블명] SET [필드명1] = [수정할 값] WHERE [필드명2] = [필드값2]
: [테이블명]의 필드명2가 필드값2인 필드명1의 필드를 [수정할 값]으로 수정한다. (SELECT
절과 동일하게 WHERE
절을 사용하여 수정할 값의 조건 설정 가능하다.)UPDATE [테이블명] SET [필드명1] = [수정할 값1], [필드명2] = [수정할 값2] WHERE [필드명2] = [필드값2] AND [필드명3] = [필드값3]]
: [테이블명]의 필드명2가 필드값2이고 필드명3이 필드값3인 필드명1과 필드명2를 각각 수정할값1, 수정할값2로 수정한다.DELETE
원하는 조건에 맞는 필드의 값을 삭제하는 쿼리.
DELETE FROM [테이블명]
: [테이블명]의 모든 데이터를 삭제한다.DELETE FROM [테이블명] WHERE [필드명2] = [필드값2] AND [필드명3] = [필드값3]]
: 필드명2가 필드값2이고, 필드명3이 필드값3인 [테이블명]의 데이터를 삭제한다.ORM
ORM
이란?
ORM
(Object Relational Mapping
, 객체-관계 매핑)
- 단순하게 표현하자면 객체와 관계와의 설정.
- 우리가
OOP(Object Oriented Programming
)에서 쓰이는 객체라는 개념을 구현한 클래스와RDB(
Relational DataBase`)에서 쓰이는 데이터인 테이블을 자동으로 매핑(연결)하는 것을 의미한다.- 그러나 클래스와 테이블은 서로가 호환가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생하는데, 이를
ORM
을 통해 객체 간의 관계를 바탕으로SQL
문을 자동으로 생성하여 불일치를 해결한다.- 따라서
ORM
을 이용하면 따로SQL
문을 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 된다.
ORM
의 장단점장점
1. 완벽한 객체지향적인 코드
2. 재사용, 유지보수, 리팩토링 용이성
3. DBMS
종속성 하락
4. 별도 SQL
을 사용하지 않고 OOP
언어 그대로를 사용할 수 있다.
단점
1. ORM
이 모든 것을 해결해줄 수 없다.
2. 속도나 생산성이 저하될 수 있다.
http://www.tcpschool.com/mysql/DB
https://codedragon.tistory.com/3802
https://sosobaba.tistory.com/124
https://hengbokhan.tistory.com/133
http://tcpschool.com/mysql/mysql_intro_relationalDB
https://helloworld-88.tistory.com/18
http://www.incodom.kr/ORM
https://miaow-miaow.tistory.com/46
글이 굉장히 읽기 편하게 되어있네요 덕분에 잘 읽었습니다!!