-리눅스를 많이씀
실습을 해볼 운영체제 -리눅스
-os 유닉스 계열
인터페이스 - 사물과 사물 사물과 인간사이
-.컴퓨터 H/W
도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다
컨테이너(Container)는 개별 Software의 실행에 필요한 실행환경을 독립적으로 운용할 수 있도록 기반환경 또는 다른 실행환경과의 간섭을 막고 실행의 독립성을 확보해주는 운영체계 수준의 격리 기술을 말한다. 컨테이너는 애플리케이션을 실제 구동 환경으로부터 추상화할 수 있는 논리 패키징 메커니즘을 제공한다
컨테이너를 가상 머신(Virtual Machine)
가상 머신은 하드웨어 스택을 가상화
컨테이너는 이와 달리 운영체제 수준에서 가상화를 실시하 여 다수의 컨테이너를 OS 커널에서 직접 구동
컨테이너는 훨씬 가볍고 운영체제 커널을 공유
시작이 훨씬 빠르고 운영체제 전체 부팅보다 메모리를 훨씬 적게 차지
이미지(Image)
이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않는다(Immutable). 컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장된다. 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있다.
이미지 저장소
도커는 빌드한 이미지를 서버에 배포하기 위해 직접 파일을 복사하는 방법 대신 도커 레지스트리(Docker Registry)라는 이미지 저장소를 사용한다. 도커 명령어를 이용하여 이미지를 레지스트리에 푸시(push)하고 다른 서버에서 풀(pull)받아 사용하는 구조이다. (git과 유사)
네트워크 -클라이언트→(요청) 서버 ←(응답)
protocol-대화를 맞춰주는것 (통신에 대한 포맷을 맞춰줌)
TCP UDP HTTP FRP SMTP SSL SSH HTTP POP3
Restful API -RESTful API는 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스이다. 대부분의 비즈니스 애플리케이션은 다양한 태스크를 수행하기 위해 다른 내부 애플리케이션 및 서드 파티 애플리케이션과 통신해야 한다. RESTful API는 안전하고 신뢰할 수 있으며 효율적인 소프트웨어 통신 표준을 따르므로 이러한 정보 교환을 지원합니다.
URL-네트워크 상에서 지원이 어디 있는지 알려주기 위한 규약
IP Port
protocol domain Name port
클라이언트 → 서버 →데이터 저장소backend (접근 획득) DB
리눅스 WSL-따로 설치할 필요가 없음
22.04 LTS
wsl—install
wsl- -list-o[—online]
wsl—install-d Ubuntu20.04
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
출처:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
출처:
[개새닷컴:티스토리]
wsl2 설치
hyper v
데이터 → 자체로 단순한 사실만을 나타내는것
데이터 베이스 -실시간 응답처리가 가능해야한다
지속적은 변화
sql 특수목적 프로그래밍 언어
DDL-데이터베이스 뷰 인덱스 함수
DML-데이터 갱신 삭제 추가
DCL-접근하거나 권한 부여
DBMS
-DATABASE1,2,3- table
\q
postgres=# select * from develop_book ORDER BY book_id ASC;
오름차순
postgres=# \l
데이터베이스 목록
이름 | 소유주 | 인코딩 | Collate | Ctype | 액세스 권한
-----------+----------+--------+------------------+------------------+-----------------------
postgres | postgres | UTF8 | Korean_Korea.949 | Korean_Korea.949 |
template0 | postgres | UTF8 | Korean_Korea.949 | Korean_Korea.949 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | Korean_Korea.949 | Korean_Korea.949 | =c/postgres +
| | | | | postgres=CTc/postgres
(3개 행)
postgres=# dt
postgres-# \dt
릴레이션(relation) 목록
스키마 | 이름 | 종류 | 소유주
--------+--------------+--------+----------
public | develop_book | 테이블 | postgres
(1개 행)
postgres-# \c template1
접속정보: 데이터베이스="template1", 사용자="postgres".
template1-# \e
CREATE TABLE
template1=# CREATE TABLE test
template1-# {
template1-# ddd
template1-# dffi
template1-# \q
postgres=# CREATE TABLE test
postgres-# CREATE DATABASE book_store;
postgres=# \l
데이터베이스 목록
이름 | 소유주 | 인코딩 | Collate | Ctype | 액세스 권한
-----------+----------+--------+------------------+------------------+-----------------------
postgres | postgres | UTF8 | Korean_Korea.949 | Korean_Korea.949 |
template0 | postgres | UTF8 | Korean_Korea.949 | Korean_Korea.949 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | Korean_Korea.949 | Korean_Korea.949 | =c/postgres +
| | | | | postgres=CTc/postgres
(3개 행)
postgres=# \c postgres
접속정보: 데이터베이스="postgres", 사용자="postgres".
postgres=# CREATE DATABASE book_store
postgres-# \l
데이터베이스 목록
이름 | 소유주 | 인코딩 | Collate | Ctype | 액세스 권한
-----------+----------+--------+------------------+------------------+-----------------------
postgres | postgres | UTF8 | Korean_Korea.949 | Korean_Korea.949 |
template0 | postgres | UTF8 | Korean_Korea.949 | Korean_Korea.949 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | Korean_Korea.949 | Korean_Korea.949 | =c/postgres +
| | | | | postgres=CTc/postgres
(3개 행)
postgres-# CREATE DATABASE book_store
postgres-# \l
데이터베이스 목록
이름 | 소유주 | 인코딩 | Collate | Ctype | 액세스 권한
-----------+----------+--------+------------------+------------------+-----------------------
postgres | postgres | UTF8 | Korean_Korea.949 | Korean_Korea.949 |
template0 | postgres | UTF8 | Korean_Korea.949 | Korean_Korea.949 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | Korean_Korea.949 | Korean_Korea.949 | =c/postgres +
| | | | | postgres=CTc/postgres
(3개 행)
postgres=# CREATE DATABASE book_store;
CREATE DATABASE
postgres=# \l
데이터베이스 목록
이름 | 소유주 | 인코딩 | Collate | Ctype | 액세스 권한
------------+----------+--------+------------------+------------------+-----------------------
book_store | postgres | UTF8 | Korean_Korea.949 | Korean_Korea.949 |
postgres | postgres | UTF8 | Korean_Korea.949 | Korean_Korea.949 |
template0 | postgres | UTF8 | Korean_Korea.949 | Korean_Korea.949 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | Korean_Korea.949 | Korean_Korea.949 | =c/postgres +
| | | | | postgres=CTc/postgres
(4개 행)
postgres-# root@LAPTOP-JJPVHET9:~#
postgres-# \c template1
접속정보: 데이터베이스="template1", 사용자="postgres".
template1-# DROP DATABSE book_store
root@LAPTOP-JJPVHET9:~# cp test test2
template1=#
template1=# \q
postgres=# \dt
릴레이션(relation) 목록
스키마 | 이름 | 종류 | 소유주
--------+--------------+--------+----------
public | develop_book | 테이블 | postgres
(1개 행)
postgres=# INSERT INTO develop_book VALUES(1, '2019-12-17',mongoDB');
postgres'# INSERT INTO develop_book VALUES(1, '2019-12-17','mongoDB');
postgres'# INSERT INTO develop_book VALUES(1, '2019-12-17','mongoDB');
postgres'# INSERT INTO develop_book VALUES(1, '2019-12-17','mongoDB');
postgres'# \q
마침은 Ctrl-C
postgres'# \q
postgres=# INSERT INTO develop_book values(1, '2019-12-17', 'mongoDB');
INSERT 0 1
postgres=# SELECT * FROM develop_book;
book_id | date | name
---------+------------+---------
1 | 2019-12-17 | mongoDB
(1개 행)
postgres=# INSERT INTO develop_book VALUES(2, '2019-12-25','"자바"');
INSERT 0 1
postgres=# INSERT INTO develop_book VALUES(2, '2019-12-25','"자바"');
INSERT 0 1
postgres=# INTO develop_book VALUES(2, '2019-12-25',"'자바');
postgres"# INTO develop_book VALUES(2, '2019-12-25',"'자바'");
postgres"# \q
마침은 Ctrl-C
postgres"# \q
postgres=# \e
INSERT 0 1
postgres=# SELECT * FROM develop_book;
book_id | date | name
---------+------------+----------
1 | 2019-12-17 | mongoDB
2 | 2019-12-25 | "자바"
2 | 2019-12-25 | "자바"
3 | 2020-01-03 | HTML/CSS
3 | 2020-01-03 | HTML/CSS
(5개 행)
postgres=# INSERT INTO develop_book VALUES(5, '2020-01-24','');
INSERT 0 1
postgres=# INSERT INTO develop_book VALUES(6, '2020-02-04','c언어++');
INSERT 0 1
postgres=# INSERT INTO develop_book VALUES(6, '2020-02-04','c언어++');
postgres=# select * from develop_book LIMIT 5;
book_id | date | name
---------+------------+----------
1 | 2019-12-17 | mongoDB
2 | 2019-12-25 | "자바"
2 | 2019-12-25 | "자바"
3 | 2020-01-03 | HTML/CSS
3 | 2020-01-03 | HTML/CSS
(5개 행)
postgres=# select * from develop_book LIMIT 6 OFFSET 1;
book_id | date | name
---------+------------+----------
2 | 2019-12-25 | "자바"
2 | 2019-12-25 | "자바"
3 | 2020-01-03 | HTML/CSS
3 | 2020-01-03 | HTML/CSS
4 | 2020-01-24 | Python
5 | 2020-01-24 |
(6개 행)
postgres=# select * from develop_book ORDER BY book_id ASC;
book_id | date | name
---------+------------+----------
1 | 2019-12-17 | mongoDB
2 | 2019-12-25 | "자바"
2 | 2019-12-25 | "자바"
3 | 2020-01-03 | HTML/CSS
3 | 2020-01-03 | HTML/CSS
4 | 2020-01-24 | Python
5 | 2020-01-24 |
6 | 2020-02-04 | c언어++
6 | 2020-02-04 | c언어++
(9개 행)
postgres=# select * from develop_book ORDER BY date,name;
book_id | date | name
---------+------------+----------
1 | 2019-12-17 | mongoDB
2 | 2019-12-25 | "자바"
2 | 2019-12-25 | "자바"
3 | 2020-01-03 | HTML/CSS
3 | 2020-01-03 | HTML/CSS
5 | 2020-01-24 |
4 | 2020-01-24 | Python
6 | 2020-02-04 | c언어++
6 | 2020-02-04 | c언어++
(9개 행)
postgres=# SELECT * FROM develop_book WHERE book_id = 1;
book_id | date | name
---------+------------+---------
1 | 2019-12-17 | mongoDB
(1개 행)
→ 식별자 조회
SELECT * FROM develop_book WHERE'2019-12-17' = (SELECT date FROM develop_book WHERE book_id =1);
select의 동작은 행을 하나하나보고 where절의 조건이 참인지를 확인
UPDATE - where book_id =2
UPDATE develop_book SET name = 'Java' WHERE book_id =2
RETURNING *;
name을 자바로 어떤레코드의 칼럼>? where절
book id가 2인 경우
where가 없어지면?
postgres=# DROP TABLE develop_book;
DROP TABLE
postgres=# CREATE TABLE develop_book(
book_id INTEGER, date DATE,
name VARCHAR(80)
postgres=# CREATE TABLE develop_book(book_id NUMERIC(6), date INTEGER, name VARCHAR(80));
CREATE TABLE
varchar(n) n이하 문자의 길이 그대로 저장 , n미지정시 임의의 길이 모든 문자열
char(n) 문자길이 + 공백 형태로 n을 맞추어
-postgres에서는 길이
TIMESTAMP TIMESTANPTZ DATE TIME
우리나라는 utc보다 +9시간
CREATE TABLE datetime_study(
type_ts TIMESTAMP
type_tstz TIMESTAMPTZ
type_date DATE
SHOW TIMEZONE;
SET TIMEZONE ='America/Los_Angeles'; timezone string
입력한 텍스트의 정확한 사본 저장 입력이 비교적빠르지만 처리 속도가 느림
JSONB텍스트를 이진 형태로 분해 후전장 입력이 비교적느리지만 처리속도가 빠름
{”키값” : “밸류값”}
{”키값”: “밸류값”, “키 값” :{”키 값”:”밸류값”}
cast (표현식 AS 바꿀 데이터 타입)
SELECT CAST(’3000 AS INTEGER);
표현식 :: 바꿀데이터 타입
데이터베이스 내에 정확하고 데이터만을 유지시키는 속성
CRUD수행시 데이터 갑을 일관되고 정확하게 유지
금액칼럼에는 문자및 기호를 입력 할 수 없게 한다
모든 테이블이 프라이머리키 NULL값 허용안됨
데이터를 구분하는 고유한 정보
외래키 값이 빈 값이거나 참조된 테이블의 기본 키 값과 동일
사용자가 정의한 도메인내에서 관계형 데이터베이스의 모든 열을 정의하도록 규정
무결성을 유지하기 위해 칼럼 값을 제한해야한다
not null 빈값을 허용하지 않는 조건
DROP TABLE IF EXISTS contact_info;
CREATE TABLE contact_info(
cont_id NUMERIC(3) NOT NULL,
name VARCHAR(15) NOT NULL,
tel INTEGER[] NOT NULL,
Email VARCHAR);
INSERT INTO contact_into(email) values('example@naver.com')
DROP TABLE IF EXISTS contact_info;
CREATE TABLE contact_info(
cont_id NUMERIC(3) NOT NULL,
name VARCHAR(15) NOT NULL,
tel INTEGER[] NOT NULL,
Email VARCHAR);
INSERT INTO contact_into(cont_id, name, tel, email) values(001,'example@naver.com');
-unique not null
보통FK로 표현 다른 테이블의 고유한값 참조
부모테이블이 자식테이블보다 먼저 생성
참조된 컬럼이 자식 테이블에 입력가능
모두 프라이머리 키 unique 제약 조건
CREATE TABLE subject (
subj_id numeric(5) NOT NULL PRIMARY KEY,
subj_name VARCHAR(60) NOT NULL);
INSERT INTO subject
values
(00001,'mathemarics'
0002,'sicentics')
CREATE TABLE teacher(
teac_id NUMERIC(5) NOT NULL PRIMARY KEY,
teac_name VARCHAR(20) NOT NULL.
subj_id NUMERIC(5) REFERENCES suject,
teac_certifi_date DATE);
참조테이블의 칼럼명과 같은경우 테이블명만 입력
CREATE TABLE subject (
subj_id numeric(5) NOT NULL PRIMARY KEY,
subj_name VARCHAR(60) NOT NULL);
INSERT INTO subject
values
(00001,'mathemarics'
0002,'sicentics')
CREATE TABLE teacher(
teac_id NUMERIC(5) NOT NULL PRIMARY KEY,
teac_name VARCHAR(20) NOT NULL.
subj_id NUMERIC(5) REFERENCES suject,
teac_certifi_date DATE);
INSERT INTO teacher values (00011,'정선생',00001,'2017-03-11');
INSERT INTO teacher values (00021,'홍선생',00001,'2017-04-12');
INSERT INTO teacher values (00031,'박선생',00001,'2017-04-13');
INSERT INTO teacher values (00041,'한선생',00001,'2018-05-20');
SELECT * FROM teacher_table;
CREATE TABLE subject (
subj_id numeric(5) NOT NULL PRIMARY KEY,
subj_name VARCHAR(60) NOT NULL,
stud_count NUMERIC(20) NOT NULL);
INSERT INTO subject
values
(00001,'mathemarics',60),
(00002,'scientics',42),
(00003, 'programin',7');
CREATE TABLE teacher(
teac_id NUMERIC(5) NOT NULL PRIMARY KEY,
teac_name VARCHAR(20) NOT NULL,
subj_code NUMERIC(5) NOT NULL,
subj_name VARCHAR(60) NOT NULL,
teac_certifi_date DATE NOT NULL,
FOREIGN KEY(subj_code,subj_name) REFERENCES subject(subj_id,subj_name));
on DELETE NO ACTION
on delete no action
on delete restrict
on delete set null
on delete
CREATE TABLE order_info(
order_no INTEGER NOT NULL PRIMARY KEY, cust_name VARCHAR(100), price MONEY, order_qty INTGER CHECK(order_qty >0)
안전하게
REATE TABLE BOOK_info(id INTEGER NOT NULL PRIMARY KEY, name VARCHAR(20) NOT NULL);
INSERT INTO book_info VALUES(1, 'POSTGRESQL'),(2,'MONGODB');
ALTER TABLE book_info
ADD COLUMN PUBLISHED_DATE DATE;
SELECT * FROM BOOK_INFO;
ALTER TABLE BOOK_INFO
ADD COLUMN NULL_TEST DATE NOT NULL;
CREATE TABLE book_info (
book_id INTEGER NOT NULLL PRIMARY KEY,
book_name VARCHAR(20) NOT NULL UNIQUE);
INSERT INTO book_info VALUES
(1, 'POSTGRESQL'),
(2, 'MONGDB');
CREATE TABLE librarfy(
id INTEGER NOT NULL,
book_name VARCHAR(20) NOT NULL REFERENCES book_info)(book_name));
insert into library values
(1, '국립도서관', 'postgresql');
ALTER TABLE book_info DROP COLUMN book_name;
라이브러리에 있는 북네임이 삭제됨
ALTER TABLE 테이블 이름
RENAME 기존컬럼이름 TO새컬럼이름;
CREATE TABLE book_info (
book_id INTEGER NOT NULL PRIMARY KEY,
book_name VARCHAR(20) NOT NULL UNIQUE);
INSERT INTO book_info VALUES
(1, 'POSTGRESQL'),
(2, 'MONGDB');
CREATE TABLE library(
id INTEGER NOT NULL,
book_name VARCHAR(20) NOT NULL REFERENCES book_info(book_name))
insert into library values
(1, '국립도서관', 'postgresql');
ALTER TABLE book_info RENAME book_name TO NAME;
SELECT * FROM book_info;
ALTER TABLE 테이블이름
ALTER COLUMN 컬럼이름 DROP
ALTER TABLE 테이블이름
ALTER CLOUMN 컬럼이름 TYPE 새로운 데이터 타입
ALTER CLOUMN 컬럼이름
CREATE TABLE water(
id SMALLINT NOT NULL PRIMARY KEY,
name TEXT NOT NULL,
location_no VARCHAR NOT NULL,
description TEXT);
INSERT INTO water VALYES(01,'천지','02','백두산 천지');
ALTER TABLE water
ALTER COLUM id TYPE INTEGER,
ALTER COLUM description TYPE VARCHAR;
ALTER TABLE water
ALTER TABLE location_no TYPP INTEGER;
ALTER TABLE location_no TYPE INTEGER USING LOCATION_NO::INTEGER;
SELECT 기준년도, 학교명, 졸업남자수, 졸업여자수
FROM graduates
WHERE 학교급명 = '특수학교' AND (졸업남자수 + 졸업여자수) >= 25;
SELECT 학교명, 지역명, 100*(취업남자수 + 취업여자수)/(졸업남자수+졸업여자수) AS 취업률
FROM graduates
WHERE EXTRACT (YEAR FROM 기준년도) =2015
AND (졸업남자수 + 졸업여자수) >0
AND 100*(취업남자수+취업여자수)/(졸업남자수+졸업여자수)>=50;
SELECT 기준년도,학교명,졸업남자수,졸업여자수,
CASE
when (졸업남자수 + 졸업여자수) =0 then 0
when (졸업남자수 + 졸업여자수) >0 then 100*(진학여자수+진학남자수)/(졸업여자수+졸업남자수)
END 진학률
FROM graduates
where 지역명 like '%고양시 일산%'
ORDER BY 진학률 DESC;