Monday (01.20)
์ค๋์ ์ ์ฌ
๋ณ์ โญ๏ธ โญ๏ธ โญ๏ธ โญ๏ธ
JTBC ๊ตฌ๋ด์๋น์์ ์์ฌํ๋ค.
์ฌ์ ํ ๋ง์์ ๋ ๋ค.
https://naver.me/G1wOEZF8
- LIKE๋ WHERE, HAVING, ORDER BY ์ ์์ ์ฌ์ฉ, ๊ทธ๋ฌ๋ SELECT ์ ์์๋ ๊ฒฐ๊ณผ๋ฅผ ์ง์ ์ ์ผ๋ก ๋ณํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ค.
- IN์ WHERE, HAVING, SELECT ๋ฑ ์ฌ๋ฌ ์ ์์ ์ฌ์ฉ, ๊ทธ๋ฌ๋ ์ฃผ๋ก ์กฐ๊ฑด์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ SELECT ์ ์์ ์ปฌ๋ผ ๊ฐ์ ํํฐ๋งํ๋ ๋ฐ ์ฌ์ฉ
- IS NULL์ WHERE, HAVING ์ ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ฉฐ, SELECT ์ ์์๋ ๊ฐ์ด NULL์ธ์ง ์๋์ง๋ฅผ ํํฐ๋ง
- EXISTS๋ WHERE ๋๋ HAVING ์ ์์ ์๋ธ์ฟผ๋ฆฌ์ ํจ๊ป ์ฌ์ฉ. SELECT ์ ์์ ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ ์๋ ์๋ค.
group by์ธ๋ select์ case๋ฌธ ์ผ์ผ๋ฉด, ๊ทธ๊ฒ๋ groupby์ ๋ค์ด๊ฐ์ผํ ๊น?
-> GROUP BY ์ ์ ํฌํจ๋์ง ์์ ์ปฌ๋ผ์ SELECT ๋ชฉ๋ก์ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ค์ด๊ฐ์ผ ํ๋ค.
WITH ROLLUP์ SQL์์ ์ง๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์์ฝํ๋ ๊ธฐ๋ฅ์ ์ ๊ณต
SELECT movie_type, MONTH(release_date), SUM(audience) AS total_audience
FROM movies
WHERE YEAR(release_date) = 2019
GROUP BY movie_type, MONTH(release_date) WITH ROLLUP;
1. CREATE ์์
CREATE TABLE departments (
deptno INT PRIMARY KEY,
dname VARCHAR(50),
loc VARCHAR(50)
);
CREATE TABLE employees (
empno INT PRIMARY KEY,
ename VARCHAR(50),
job VARCHAR(50),
mgr INT,
hiredate DATE,
sal DECIMAL(10, 2),
comm DECIMAL(10, 2),
deptno INT,
FOREIGN KEY (deptno) REFERENCES departments(deptno)
);
1) CASCADE:
๋ถ๋ชจ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๊ฑฐ๋ ๊ฐฑ์ ๋๋ฉด ์์ ํ
์ด๋ธ์ ํด๋น ๋ฐ์ดํฐ๋ ์๋์ผ๋ก ์ญ์ ๋๊ฑฐ๋ ๊ฐฑ์
CREATE TABLE employees (
empno INT PRIMARY KEY,
ename VARCHAR(50),
deptno INT,
FOREIGN KEY (deptno) REFERENCES departments(deptno)
ON DELETE CASCADE
);
๋ง์ฝ departments ํ
์ด๋ธ์์ ๋ถ์๊ฐ ์ญ์ ๋๋ฉด, ๊ทธ ๋ถ์์ ์ํ ๋ชจ๋ ์ง์๋ค๋ ์๋์ผ๋ก ์ญ์ ๋จ
2) SET NULL:
๋ถ๋ชจ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๊ฑฐ๋ ๊ฐฑ์ ๋๋ฉด ์์ ํ
์ด๋ธ์์ ํด๋น ๊ฐ์ด NULL๋ก ์ค์ ๋จ
CREATE TABLE employees (
empno INT PRIMARY KEY,
ename VARCHAR(50),
deptno INT,
FOREIGN KEY (deptno) REFERENCES departments(deptno)
ON DELETE SET NULL
);
๋ง์ฝ departments ํ
์ด๋ธ์์ ๋ถ์๊ฐ ์ญ์ ๋๋ฉด, ๊ทธ ๋ถ์์ ์ํ ์ง์๋ค์ deptno ๊ฐ์ด NULL๋ก ์ค์ ๋จ
3) NO ACTION:
๋ถ๋ชจ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๊ฑฐ๋ ๊ฐฑ์ ๋๋ฉด ์์ ํ
์ด๋ธ์ ์๋ฌด๋ฐ ์กฐ์น๋ ์ทจํ์ง ์์. ๊ธฐ๋ณธ๊ฐ
CREATE TABLE employees (
empno INT PRIMARY KEY,
ename VARCHAR(50),
deptno INT,
FOREIGN KEY (deptno) REFERENCES departments(deptno)
ON DELETE NO ACTION
);
์์: ๋ง์ฝ departments ํ
์ด๋ธ์์ ๋ถ์๊ฐ ์ญ์ ๋๋ ค ํ ๋, ํด๋น ๋ถ์์ ์ํ ์ง์์ด ์์ผ๋ฉด ์ญ์ ์คํจ
4) RESTRICT:
์ฆ์ ๋ถ๋ชจ ํ
์ด๋ธ์์ ์์ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ์ ์ ํ ์ ์ฉ
CREATE TABLE employees (
empno INT PRIMARY KEY,
ename VARCHAR(50),
deptno INT,
FOREIGN KEY (deptno) REFERENCES departments(deptno)
ON DELETE RESTRICT
);
์์: departments์์ ๋ถ์๋ฅผ ์ญ์ ํ๋ ค๋ฉด, ๋จผ์ ๊ทธ ๋ถ์์ ์ํ ์ง์๋ค์ด ์์์ ํ์ธํด์ผ ํจ
JOIN vs ์๋ธ์ฟผ๋ฆฌ
- ์๋ธ์ฟผ๋ฆฌ๊ฐ ์๋๋ฉด์์ ์ฐ์ํจ(์ ์ฒด ๋ค ๋ณด์ง ์๊ธฐ ๋๋ฌธ)
์๋ 2๊ฐ๋ ๋ค๋ฅด๋ค.
์กฐ๊ฑด์ด FROM (๋๋ JOIN)์ ๊ฑธ๋ฆฌ๋๋ WHERE์ ๊ฑธ๋ฆฌ๋๋์ ๋ฐ๋ผ ๋์ ์์์ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ค.
select d.deptno,
d.dname,
d.loc,
e.empno,
e.ename,
e.job,
e.mgr,
e.hiredate,
e.sal,
e.comm
from emp e
right join dept d on e.deptno = d.deptno
where e.sal >= 3000;
SELECT d.deptno,
d.dname,
d.loc,
e.empno,
e.ename,
e.job,
e.mgr,
e.hiredate,
e.sal,
e.comm
FROM emp e
RIGHT JOIN dept d ON e.deptno = d.deptno
AND e.sal >= 3000;
Tuesday(01.21)
์ค๋์ ์ ์ฌ
๋ณ์ โญ๏ธ โญ๏ธ โญ๏ธ โญ๏ธ
์ค๋๋ JTBC ๊ตฌ๋ด์๋น
์ฌ์ ํ ๋ง์์ ๋ ๋ค.
https://naver.me/G1wOEZF8
SQL์์ NULL ๊ฐ์ด ํฌํจ๋ ์ฐ์ฐ์ ์ํํ ๋๋ NULL๊ณผ์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ NULL์ด ๋๋ค. ๋ฐ๋ผ์, NULL์ ๋จผ์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ฐ๊พธ๊ณ ์งํํด์ผ ํ๋ค. ์๋์ ์ฟผ๋ฆฌ ๊ฐ์ ๊ฒฝ์ฐ e.sal or e.comm์ค์ NULL ์ด ์์ผ๋ฉด ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค์ง ์๋๋ค.
select *
from emp e
where (e.sal + e.comm) >= 2000
and job = 'SALESMAN';
ํท๊ฐ๋ ธ๋ ์ฟผ๋ฆฌ
select ์ง์์ ๋ณด.mgr, ๊ด๋ฆฌ์์ ๋ณด.ename , AVG(์ง์์ ๋ณด.sal), COUNT(์ง์์ ๋ณด.sal)
from emp ์ง์์ ๋ณด, emp ๊ด๋ฆฌ์์ ๋ณด
WHERE ์ง์์ ๋ณด.mgr is not null and ์ง์์ ๋ณด.mgr = ๊ด๋ฆฌ์์ ๋ณด.empno
group by ์ง์์ ๋ณด.mgr;
SET AUTOCOMMIT = FALSE; ๋ก ๋ณ๊ฒฝํ๋ฉด ์ฟผ๋ฆฌ๋ฌธ์ ์ปค๋ฐ์ด ์๋์ผ๋ก ๋์ง ์๋๋ค.
ํ์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆฌ๋ฉด, ์ฐ๋ฆฌ ์ธ์ ์๋ง ๋ฐ์๋๊ณ , ์ค์ DB์๋ ๊ฐ์ด ๋ค์ด๊ฐ์ง ์๋๋ค.
SET AUTOCOMMIT = FALSE;
insert into dept values(99,'edu','์์');
select * from dept;
COMMIT;
ํจ์๋ฅผ ๋ง๋ค์ด๋์ผ๋ฉด ์ปค๋ฐ ์์ ํธ๋ฆฌ๊ฑฐ ๋์ด ๊ฐ์ ๋ณ๊ฒฝํด์ db์ ์ ์ฅํ ์ ์๋ค.
์ธ์ ์ ์ปค๋ฐ์ ์ ๋จ์ํ ์์์ ์ฅํ๋ ๊ฒ. ์์๋ก ๊ฐ ํด๋ผ์ด์ธํธ๋ง๋ค ์๋ฒ์์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ์ธ์ ์ ๋ณ๊ฒฝ์ํ๋ฅผ ์ ์ฅํ๊ณ , commit์ผ๋ก ํ๊บผ๋ฒ์ db์ ๋ฐ์ํ๋ ๋จ์๋ฅผ ํธ๋์ญ์ ์ด๋ผ ํ๋ค.
rollback : commit ์ด์ ์ํ๋ก๋ ๋์๊ฐ ์ ์๋ค.
savepoint: ์ค๊ฐ์ค๊ฐ savepoint ๋ง๋ค์ ์๊ณ , commit ์ ๊น์ง๋ง ์ ํจํ๋ค
create table emp01 select empno,ename,deptno from emp;
select * from emp01;
desc emp01;
์ด ๊ฒฝ์ฐ not null์ ๊ฐ์ ธ์ค์ง๋ง, pk์ ๊ฐ์ ์ ๋ณด๋ ์ ๊ฐ์ ธ์จ๋ค. ์๊ธฐ ์ปฌ๋ผ์ ์ํฅ ๋ฏธ์น๋ ๊ฒ๋ง ๊ฐ์ ธ์ด.
๋ฐ๋ผ์ ๋ค์์ธ๋ฑ์ค, pk fk ๋ฑ์ ์ ์ฝ์กฐ๊ฑด๋ค์ ์์ฑํด์ผํ๋ค.
๋ฌธ์ ) empno, ename, deptno emp ํ ์ด๋ธ์ ๊ฐ์ง๊ณ ์ค๋ ๊ตฌ์กฐ๋ง ๊ฐ์ ธ์ ๋ณด์ธ์.
๋ง์ด ์๋๋ ์กฐ๊ฑด์ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ ๊ตฌ์กฐ๋ง ๊ฐ์ ธ์ฌ ์ ์๋ค.
create table emp02 select empno,ename,deptno from emp where 1=0; #๋ง์ด ์๋๋ ์กฐ๊ฑด
PK ์ ๋ฆฌ
- MYSQL: AUTOINCREMENT ๊ฑธ๋ฉด ๋ง์ง๋ง๊ฐ +1 , AUTOINCREMENT ์๊ฑธ๋ฉด DEFAULT๊ฐ 0์ด๋ผ์ 0 . PK๋ 0์ด๋ ์ ์์
- ORACLE: SEQUENCE ๊ฑธ๋ฉด ๋ง์ง๋ง๊ฐ +1 , SEQUENCE ์๊ฑธ๋ฉด DEFAULT๊ฐ NULL์ด๋ผ์ NULL . PK๋ DEFAULT๊ฐ NULL์ด๋ผ๋ NULL ๋ชป์
DROP TABLE TABLE๋ช
; # ํ
์ด๋ธ ์์ฒด ์ญ์
DELETE FROM ํ
์ด๋ธ WHERE ~ ; # ํ ์ญ์
TRUNCATE TABLE ํ
์ด๋ธ๋ช
; # ํ
์ด๋ธ์ ์๋ ๊ฐ๋ง ์ง์ฐ๊ณ , ์คํค๋ง๋ ๋จ๊ฒจ๋
- ์ธ๋ ํค(Foreign Key) ์ ์ฝ์ ์ค์ ํ์ง ์๋๋ผ๋, ์ปฌ๋ผ๋ช ๋ง ์ผ์นํ๋ฉด SELECT ์ฟผ๋ฆฌ์์ ๋ค๋ฅธ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
- ์ธ๋ ํค๋ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ ์ ์ฝ ์กฐ๊ฑด์ผ ๋ฟ, ํ ์ด๋ธ ๊ฐ์ ์กฐ์ธ(JOIN)์ด๋ ์กฐํ(SELECT)์๋ ํ์์ ์ด์ง ์๋ค.
- update๋ฌธ์ ์๋ฃํ์ด ์ ๋ฐ๋๋ค. alter๋ก ๋ฐ๊ฟ์ผ ํ๋ค.
SQL ๋ณ์
- sql์์ ๋ณ์๋ ํน์ ๊ฐ์ ์์๋ก ์ ์ฅํ๊ณ ์ฟผ๋ฆฌ์์ ์ฐธ์กฐํ๋ ์ฉ๋
- ์ฟผ๋ฆฌ ๋ด์์ ๋์ ์ผ๋ก ๊ฐ์ ์ฒ๋ฆฌํ๊ณ , ์ผ์์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ ์ ์ฅํ๊ณ , ์ฟผ๋ฆฌ ๋ด์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
@: ๋ณ์ ์ ์ธํ๊ณ ๊ฐ ์ ์ฅ
set @count = 1000; -- @count ๋ณ์์ 1000์ ์ ์ฅ
SELECT code, name, @cont, region, population
FROM country
WHERE population > 100000000
prepare: ๋์ ์ฟผ๋ฆฌ ์ค๋น
execute: ๋์ ์ฟผ๋ฆฌ ์คํ
PREPARE mySQL FROM 'SELECT code, name, continent, region, population
FROM world.country
WHERE population > 100000000
ORDER BY 1 ASC
LIMIT ?';
EXECUTE mySQL USING @count;
-- ๋ณ์ ์ ์ธ ๋ฐ ๊ฐ ์ค์
SET @count = 1000; -- @count ๋ณ์์ 1000์ ์ ์ฅ
-- ๋์ ์ฟผ๋ฆฌ ์ค๋น
PREPARE mySQL FROM 'SELECT code, name, continent, region, population
FROM world.country
WHERE population > ?
ORDER BY population DESC';
-- ๋์ ์ฟผ๋ฆฌ ์คํ (LIMIT ๋ถ๋ถ์ @count ๊ฐ์ ์ฌ์ฉ)
EXECUTE mySQL USING @count; -- @count ๊ฐ์ ? ์๋ฆฌ์ ๋์
ํ์ฌ ์คํ
HOT(24์๊ฐ) > WARM(1์ฃผ์ผ) > COLD(1๋ฌ ์ด๋ด) > FREEZE(1๋ฌ ์ดํ)
์ ์ฝ์กฐ๊ฑด
์ ์ฝ์กฐ๊ฑด ์ฌ์ฉ ์์
create table people(
rrn int not null,
name varchar(10),
address varchar(20)
);
create table school(
school_id int not null,
school_address varchar(20)
);
desc people;
desc school;
-- ์ ์ฝ ์กฐ๊ฑด ์์ฑ ์ add constraint, ์์ ์ modify
alter table people add constraint pk_people primary key (rrn);
alter table school add constraint pk_school primary key (school_id);
alter table school add constraint fk_school_to_people foreign key (school_id) references people(rrn)
on delete no action on update cascade;
alter table people modify address varchar(20) not null;
alter table school add constraint unique_school_address unique (school_address);
-- people ํ
์ด๋ธ์ ๋ฐ์ดํฐ ์ฝ์
insert into people (rrn, name, address) values (1, 'John', '123 Main St');
insert into people (rrn, name, address) values (2, 'Jane', '456 Oak St');
-- school ํ
์ด๋ธ์ ๋ฐ์ดํฐ ์ฝ์
insert into school (school_id, school_address) values (1, '789 Elm St');
insert into school (school_id, school_address) values (2, '321 Pine St');
-- school ํ
์ด๋ธ์์ ๋ฐ์ดํฐ ์ญ์
delete from school where school_id = 2;
-- people ํ
์ด๋ธ์์ rrn์ด 1์ธ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ ๋ฐ์ (์ฐธ์กฐ๋ ๋ฐ์ดํฐ๊ฐ ์๊ธฐ ๋๋ฌธ)
delete from people where rrn = 1;
-- people ํ
์ด๋ธ์์ rrn์ ๋ณ๊ฒฝํ๋ฉด, school ํ
์ด๋ธ์ school_id ๊ฐ๋ ์๋์ผ๋ก ๋ณ๊ฒฝ๋จ
update people set rrn = 10 where rrn = 2;
-- people ํ
์ด๋ธ์์ rrn์ด 2์ธ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ๋, school ํ
์ด๋ธ์์ ํด๋น ์ฐธ์กฐ๊ฐ ์์ผ๋ฉด ์ญ์ ๋์ง ์์
-- ์์์ 2์ธ ๊ฒฝ์ฐ 10์ผ๋ก ๋ณ๊ฒฝํ๊ธฐ์, 2์ธ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฏ๋ก ์ญ์ ๋จ (์ญ์ ๋๋ ๋ฐ์ดํฐ๋ ์๋ค.)
delete from people where rrn = 2;
-- people ํ
์ด๋ธ์์ primary key ์ ์ฝ์กฐ๊ฑด ์ญ์
-- ๋ค๋ฅธ ํ
์ด๋ธ์ fk๊ฐ ์ฐธ์กฐํ๊ณ ์ญ์ ์ no action์ด๋ฏ๋ก ์ฐธ์กฐํ๋ ์ธ๋ ํค ๊ฐ์ด ์๋ ๋ ์ฝ๋๋ ์ญ์ ํ ์ ์๋ค.
-- ๋ฐ๋ผ์, cacade๋ก ์ค์ ํ๊ฑฐ๋, ์ฐธ์กฐํ๋ ํ
์ด๋ธ์ fk๋ฅผ ์ญ์ ํ๊ณ ๋ค์ ์งํํด์ผํ๋ค.
alter table people drop primary key; # (x)
-- fk๋ฅผ ์ญ์ ํ๊ณ
alter table school drop foreign key fk_school_to_people;
alter table people drop primary key; # (o)
-- school ํ
์ด๋ธ์์ unique ์ ์ฝ์กฐ๊ฑด ์ญ์
alter table school drop constraint unique_school_address;
Wednesday (01.22)
distinct: ์ค๋ณต์ ๊ฑฐ
select distinct table_name
WHERE ์ ์์ ์ฌ์ฉํ ์ ์๋ ์กฐ๊ฑด ์ฐ์ฐ์: =, <>, >, <, BETWEEN, IN, LIKE, IS NULL, AND, OR, NOT
- primary key๋ ํค์ด๋ฆ ๋ญ๋ผํ๋ primary key๋ผ๊ณ ๋ช ์ํด์ ์์ , ์ญ์ ๊ฐ๋ฅ
- ๋ค๋ฅธ ์ ์ฝ์กฐ๊ฑด๋ค์ ์ ์ฝ์กฐ๊ฑด ์ด๋ฆ ์ฌ์ฉ
check: ์ ์ฅ ์ ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ
CREATE TABLE emp03 (
empno INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(10)
);
INSERT INTO emp03 (ename) VALUES ('Alice'); -- empno๋ ์๋์ผ๋ก 1
INSERT INTO emp03 (ename) VALUES ('Bob'); -- empno๋ ์๋์ผ๋ก 2
INSERT INTO emp03 (empno, ename) VALUES (10, 'Charlie'); -- empno๋ฅผ 10์ผ๋ก ๋ช
์์ ์ผ๋ก ์ง์
INSERT INTO emp03 (ename) VALUES ('David'); -- empno๋ ์๋์ผ๋ก 11 (10์ด ์ด๋ฏธ ์ฌ์ฉ๋์์ผ๋ฏ๋ก)
์ธ๋ฑ์ค
https://koreatstm.tistory.com/159
ํด๋ฌ์คํฐ ์ธ๋ฑ์ค
๋ณด์กฐ ์ธ๋ฑ์ค
- MYSQL์์๋ ํ ์ด๋ธ ์ค์ ์ PK๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํ์ง ์์ผ๋ฉด NOT NULL๊ณผ UNIQUE๋ฅผ ๊ฐ์ง ์นผ๋ผ์ด PK๊ฐ ๋๊ณ , NOT NULL๊ณผ UNIQUE๋ฅผ ๊ฐ์ง ์นผ๋ผ์ด ์ฌ๋ฌ๊ฐ์ด๋ฉด ๊ฐ์ฅ ๋จผ์ ์ฌ์ฉํ ์นผ๋ผ์ด PK๊ฐ ๋๋ค.
- ๊ฒ์์ PK๋ก ๊ฒ์์กฐ๊ฑด์ ์ฌ์ฉํ๋ค๋ฉด ๋ค๋ฅธ ์ปฌ๋ผ์ ๊ฒ์์กฐ๊ฑด์ผ๋ก ์ฌ์ฉํ์ ๋ ๋ณด๋ค ๋น ๋ฅด๋ค.
- UNIQUE๊ฐ ๊ฑธ๋ฆฌ๋ฉด ๋ณด์กฐ ์ธ๋ฑ์ค๊ฐ ์๋ ์์ฑ๋๋ค.
- ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํ ์ด๋ธ์ ์์ฐจ์ ์ผ๋ก ์ฝ์ง ์๊ณ , ์ธ๋ฑ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋น ๋ฅด๊ฒ ์ํ๋ ๊ฐ์ ์ฐพ์ ์ ์๋ค.
- ์ธ๋ฑ์ค๋ ๋จ๋ฐํ๋ฉด ์๋๋ค. ์ ํ๋๊ฐ ๋์ ๊ฒฝ์ฐ์ ์ ๋ฆฌํ๋ค. ์ฑ๋ณ(๋จ/๋ ): 1/2, ๋ฐ(1~10)
์ธ๋ฑ์ค๊ฐ ์๋ ๊ฒฝ์ฐ: ํ
์ด๋ธ์ ๋ชจ๋ ํ์ ์์ฐจ์ ์ผ๋ก ๊ฒ์ํ๋ฏ๋ก, ํ
์ด๋ธ์ 1,000,000๊ฐ์ ํ์ด ์์ ๊ฒฝ์ฐ, 1,000,000๋ฒ์ ๋น๊ต๊ฐ ํ์ํ ์ ์๋ค. (3sec ~ 5sec)
์ธ๋ฑ์ค๊ฐ ์๋ ๊ฒฝ์ฐ: ์ด์ง ํ์์ ํตํด ์ธ๋ฑ์ค์ ๋ก๊ทธ ๊ธฐ๋ฐ ํธ๋ฆฌ๋ฅผ ํ์ํ์ฌ ๊ฒ์. O(log n) ์๊ฐ ๋ณต์ก๋๋ก ๊ฒ์ (0.1sec ~ 0.5sec)
๋ทฐ
๊ฐ์ ํ ์ด๋ธ
create view emp_ as select empno,ename,job,mgr,hiredate,deptno from emp;
select * from emp_;
insert into emp_ values (1,'jsj','king',1,'2020-01-12',10);
- ์ด ๊ฒฝ์ฐ์ ๋ณ๋์ ํ ์ด๋ธ์ ๋ง๋ ๊ฑด๋ฐ, ์๋ณธ ํ ์ด๋ธ์๋ ๊ฐ์ด ๋ค์ด๊ฐ๋ค. ์ด์ ์ด ๊ธฐ์กด์ ํ ์ด๋ธ๊ณผ ์ฐจ์ด์
- ๋ฐ๋๋ก ์๋ณธํ ์ด๋ธ์ ๋ฃ์ด๋, viewํ ์ด๋ธ์ ๊ฐ์ด ๋ค์ด๊ฐ๋ค.
- ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ์งํค๋ฉด์๋ ๋ฐ๋ก๊ฐ๊ธฐ ์ฒ๋ผ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
- ์ด๋ฅผ ํตํด ๋ณด์์ฑ๊ณผ , ์๋ณธ ํ ์ด๋ธ์ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ์์ฉ ํ๋ก๊ทธ๋จ์๋ ์ํฅ์ ์ฃผ์ง ์๋ ๋ ผ๋ฆฌ์ ๋ ๋ฆฝ์ฑ์ ์ ๊ณตํ๋ค.
- select๋ฅผ ์ ์ธํ๊ณค ์ ํ๋๋๋ฐ, pk๋ฅผ ๋ฃ๊ณ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด ์ ์ฉ๋์ง ์๋๋ค.
- ์กฐ์ธํด์ ๋ทฐ๋ก ๋ง๋ค์์๋, ์ปฌ๋ผ์ ๊ฒฝ์ฐ ์ค๋ณต๋์ง ์์ ์ปฌ๋ผ์ ๋ฌธ์ ์์ง๋ง, ์ค๋ณต๋๋ ๊ฒฝ์ฐ๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
- ๋ฐ๋ผ์ ๋ทฐ๋ก๋ ๊ฐ ๋ณ๊ฒฝ์ ํ์ง ๋ง์
CREATE OR REPLACE VIEW๋ฅผ ์ฌ์ฉํ๋ฉด, ๊ธฐ์กด ๋ทฐ๋ฅผ ์ญ์ ํ๊ณ ์๋ก์ด ์ ์๋ก ๊ต์ฒด
CREATE OR REPLACE VIEW๋ฅผ ์ฌ์ฉํ ๋, ๋ทฐ์ ์ ์๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ ์์ฒด๋ ๋ฌธ์ ๊ฐ ๋์ง ์์ง๋ง, ์ด ๋ ๋ทฐ์์ DML ์์
์ ์ง์ํ๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ก ์ธํด ๋ฐ์ํ ์ ์๋ ๋ฌด๊ฒฐ์ฑ ๋ฌธ์ ๋ฅผ ์ถฉ๋ถํ ๊ณ ๋ คํด์ผ ํ๋ค.
์๋์ฐ ํจ์
SQL์์ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ์ง ์๊ณ , ๊ฐ ํ์ ๋ํด ๊ณ์ฐ์ ์ํํ๋ ํจ์
๋์ ํฉ๊ณ, ์ด์ /๋ค์ ๊ฐ์ ๊ณ์ฐํ๊ฑฐ๋, ์์๋ฅผ ๋งค๊ธฐ๋ ์์ ์ ์ ์ฉ
์ง๊ณํจ์์ ์ฌ์ฉํ์ง๋ง ํ์๋ ์๋
์๊ณ์ด ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ํธํจ
<์๋์ฐ ํจ์> OVER (
[PARTITION BY <์ปฌ๋ผ1>, <์ปฌ๋ผ2>...]
[ORDER BY <์ปฌ๋ผ1>, <์ปฌ๋ผ2>...]
[ROWS <ํ๋ ์ ์ ์>]
)
์๋ ๋ธ๋ก๊ทธ์ ์ ์ ๋ฆฌ๋์ด ์๋ค.
์์ํจ์
- ROW_NUMBER(): ๊ฐ ํ์ ๊ณ ์ ํ ์๋ฒ ๋ถ์ฌ
- RANK(): ์์๊ฐ ๋์ ์ผ ๊ฒฝ์ฐ, ๋์ ์์๊ฒ ๊ฐ์ ์์๋ฅผ ๋ถ์ฌํ๊ณ , ๋ค์ ์์๋ ๊ฑด๋ ๋
- DENSE_RANK(): ๋์ ์์๊ฒ ๊ฐ์ ์์๋ฅผ ๋ถ์ฌํ์ง๋ง, ์์๋ ๊ฑด๋๋ฐ์ง ์์
์ด์ /๋ค์ ๊ฐ ์ฒ๋ฆฌ ํจ์
- LAG(): ํ์ฌ ํ์ ์์ ์๋ ๊ฐ์ ๊ฐ์ ธ์ด
- LEAD(): ํ์ฌ ํ์ ๋ค์ ์๋ ๊ฐ์ ๊ฐ์ ธ์ด
GROUP BY vs WINDOW
- GROUP BY๋ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํด์ ๊ฐ ๊ทธ๋ฃน์ ๋ํด ์ง๊ณ๋ ๊ฐ๋ง ๋ฐํ. ๊ฐ๋ ๋ณ๋ก ์ํ ์๋ฅผ ๊ณ์ฐํ ์ ์์ง๋ง, ์ํ๋ณ ์์๋ ์ํ๋ง๋ค ๊ณ์ฐ๋ ๊ฐ์ ์ ๊ณตํ๋ ๋ฐ๋ ์ ํ์
- ์๋์ฐ ํจ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ๋ฉด์๋ ๊ฐ ํ์ ๋ํด ์์๋ฅผ ๋งค๊ธฐ๊ฑฐ๋ ๊ณ์ฐ๋ ๊ฐ์ ๋ฐํ. ์ํ๋ณ๋ก ์์๋ฅผ ๋งค๊ธฐ๊ฑฐ๋, ๊ฐ ํ์ ๋ํด ๊ณ์ฐ๋ ๊ฐ์ ๋ฐํํ ์ ์์
-- movies_db.movies์์ ์์๊ด์ด ๊ฐ์ฅ ๋ง์ ์์๋๋ก, ์ฐ๋๋ณ๋ก RANK๋ฅผ ๋งค๊น
-- screeens๋ year์ด NULL์ธ ๊ฐ์ ์ ์ธ
-- ์ ์ฒด ๋
๋๋ ์ต๊ทผ๊ฒ ์์ผ๋ก (DESC)
SELECT title,
director,
YEAR(release_date) AS release_year,
screens,
RANK() OVER (PARTITION BY YEAR(release_date) ORDER BY screens DESC) AS screen_rank
FROM movies
WHERE screens IS NOT NULL
AND release_date IS NOT NULL
ORDER BY release_year DESC, screen_rank;
+) from ์ ์ ์๋ธ์ฟผ๋ฆฌ๋ ๋ณ์นญ์ด ์์ด์ผ ํ๋ค.
์ ์ฅ ํ๋ก๊ทธ๋จ (Stored Program)
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์์ ํน์ ์์ ์ ์๋ํํ๊ฑฐ๋ ๋ณต์กํ ๋ก์ง์ ์ฒ๋ฆฌํ๊ธฐ ์ํด SQL ๋ช ๋ น์ด๋ค์ ํ๋์ ํ๋ก๊ทธ๋จ ๋จ์๋ก ๋ฌถ์ด๋๋ ๋ฐฉ๋ฒ
์ ์ฅ ํ๋ก๊ทธ๋จ์ ํ๋ก์์ (Stored Procedure), ํจ์(Stored Function), ํธ๋ฆฌ๊ฑฐ(Trigger)๋ก ๊ตฌ์ฑ
์ ์ฅ ๋ฃจํด (Stored Routine): ์ ์ฅ ๋ฃจํด์ ํ๋ก์์ ์ ํจ์๋ฅผ ํฌํจํ๋ ๊ฐ๋
ํ๋ก์์ (Stored Procedure): ํน์ ์์
์ ์ฒ๋ฆฌํ๋ SQL ๋ช
๋ น์ด ์งํฉ์ผ๋ก, ํธ์ถ ์ ๋ฐํ ๊ฐ ์์ด ์คํ
์ฃผ๋ก ๋ณต์กํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์
์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ
ํจ์(Stored Function): ํน์ ์์
์ ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํํ๋ SQL ๋ช
๋ น์ด ์งํฉ. ์ฃผ๋ก ๊ฐ์ ๊ณ์ฐํ๊ฑฐ๋ ๋ฐํํ๋ ๋ฐ ์ฌ์ฉ
์ฅ์
- ์ ์ฅ ํ๋ก๊ทธ๋จ์ ํน์ง๊ณผ ์ฅ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์์์ ์๋ํ
- ๋ณต์กํ ๋ก์ง ์ฒ๋ฆฌ
- ์ฑ๋ฅ ์ต์ ํ
- ์ฌ์ฌ์ฉ์ฑ
Thursday(01.23)
์ค๋์ ์ ์ฌ
๋ณ์ โญ๏ธ โญ๏ธ โญ๏ธ โญ๏ธ
jtbc๋ ์ธ์ ๋ ๋ง์๋ค. ํ์ง๋ง ....์ค๋์ ํ์ ์๋ฃ๊ฐ ์์ด์ ์์ฌ์ ๋ค..ใ
๋์ปค๋ฅผ ๊ธฐ์กด์ ๊ณต๋ถํด๋ดค์ด์, ์ฃผ์ ์น๊ตฌ๋ค์ ์๋ ค์ฃผ์๋๋ฐ, ์๊ฐ๋ฃ๋ฅผ ๋ฐ์๋ค.
์ค๋์ ๋์ปค
https://koreatstm.tistory.com/category/%F0%9F%90%B3%EC%9D%B8%ED%94%84%EB%9D%BC/Docker?page=2
์ค๋์ ์น๊ตฌ๋ค์๊ฒ ์ค๋ช ํ ๋ด์ฉ์ ์ ๋ฆฌํ๊ฒ ๋ค.
- ๋ฐ๋ชฌ: ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๋ ํ๋ก์ธ์ค
- ์๋ฒ์ฒ๋ผ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋์๊ฐ๋ฉด์ ์์ฒญ์ ๊ธฐ๋ค๋ฆผ(๊ผญ ๋คํธ์ํฌ ์์ฒญ์ด ์๋์ด๋ ๋จ)
- ์๋ฒ: ํด๋ผ์ด์ธํธ ์์ฒญ(์: ๋ธ๋ผ์ฐ์ ์์ ์ ์) → ์๋ต ์ฒ๋ฆฌ
์ปจํ
์ด๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ผ์์คํ
์ด ์ผ์์ ์ด์ด์, ์ปจํ
์ด๋๊ฐ ์ญ์ ๋๋ฉด ๋ด๋ถ ๋ฐ์ดํฐ๋ ๊ฐ์ด ์ฌ๋ผ์ง
ํ์ง๋ง ๋์ปค ๋ณผ๋ฅจ์ ์ฌ์ฉํ๋ฉด ์ปจํ ์ด๋๊ฐ ์ญ์ ๋์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ ์ ์๋ค.
์ปจํ ์ด๋๋ก ์ฌ์ฉ์ค์ธ ์ด๋ฏธ์ง๋ ์ญ์ ๋ถ๊ฐ, ๊ฐ์ ๋ก ์ด๋ฏธ์ง ์ญ์ ํ๊ฑฐ๋, ์ปจํ ์ด๋ ์์ ๊ณ ์ด๋ฏธ์ง ์ญ์ ํ๋ ์์ผ๋ก ๊ฐ๋ฅ
๋์ปค ์ปดํฌ์ฆ๋ ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ์ ์ํ๊ณ ๋์์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋๊ตฌ
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ํ๋์ ์ค์ ํ์ผ(docker-compose.yml)๋ก ๋ฌถ์ด์, ๋ช ๋ น ํ ๋ฒ์ผ๋ก ์คํํ๊ณ ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ๋๊ตฌ
ํฌํธ(port)๋ ์ปดํจํฐ ๋คํธ์ํฌ์์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๊ณ ๋๊ฐ๋ ์ถ์ ๊ตฌ ๊ฐ์ ๊ฒ
์๋ฒ๋ ์ปดํจํฐ๊ฐ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ ๋์์ ์คํํ ๋, ๊ฐ๊ฐ์ ํ๋ก๊ทธ๋จ์ด ๋คํธ์ํฌ ํธ๋ํฝ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ๊ตฌ๋ถํด์ฃผ๋ ๋ฒํธ๋ฅผ ์๋ฏธ
๋์ปค์์๋ ์ปจํ ์ด๋ ๊ฐ ํต์ ์ด๋ ์ธ๋ถ ๋คํธ์ํฌ์์ ์ฐ๊ฒฐ์ ์ํด ํฌํธ ๋งคํ(port mapping)์ ์ฌ์ฉ
docker run -p 8080:80
- ์ปจํ ์ด๋ ๋ด๋ถ์์ ์คํ ์ค์ธ ์๋น์ค๊ฐ ํฌํธ 80์ ์ฌ์ฉ
- ํธ์คํธ ๋จธ์ ์ 8080 ํฌํธ๋ฅผ ํตํด ์ธ๋ถ์ ์ฐ๊ฒฐ๋จ
์ธ๋ถ(์ปดํจํฐ)์์ localhost:8080์ผ๋ก ์ ๊ทผํ๋ฉด, ๋์ปค ์ปจํ
์ด๋ ๋ด๋ถ์์ 80๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ผ๋ก ์์ฒญ์ด ์ ๋ฌ๋๋ค.
๋ด ์ปดํจํฐ๋ ๋์ปค ์
์ฅ์์๋ ์ธ๋ถ!
ํน์ง | ๋์ปค | ๋์ปค ์ปดํฌ์ฆ |
์ฃผ์ ์ฉ๋ | ๋จ์ผ ์ปจํ ์ด๋ ์คํ/๊ด๋ฆฌ | ์ฌ๋ฌ ์ปจํ ์ด๋ ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌ |
์คํ ๋ฐฉ์ | ๋ช ๋ น์ด๋ก ๊ฐ ์ปจํ ์ด๋ ์คํ | ํ ๋ฒ์ ๋ช ๋ น์ด๋ก ์ฌ๋ฌ ์ปจํ ์ด๋ ์คํ |
ํ๊ฒฝ ์ฌํ | ์ด๋ ค์, ์๋ | ymlํ์ผ๋ก ์ฝ๊ฒ ์ฌํ ๊ฐ๋ฅ |
๋คํธ์ํฌ ๊ตฌ์ฑ | ์๋ ์ค์ | ์๋ ๊ตฌ์ฑ |
ํน์ง | ๋์ปค ์ปดํฌ์ฆ | ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ |
์ค์ผ์ผ | ๋จ์ผ ์๋ฒ์์ ์ปจํ ์ด๋ ๊ด๋ฆฌ | ์ฌ๋ฌ ์๋ฒ์์ ์ปจํ ์ด๋ ๊ด๋ฆฌ |
์ฌ์ฉ ๋ชฉ์ | ๊ฐ๋ฐ/ํ ์คํธ ํ๊ฒฝ ๊ฐ๋จํ ์ปจํ ์ด๋ ์คํ, ๊ด๋ฆฌ | ํ๋ก๋์ ํ๊ฒฝ ๋๊ท๋ชจ ์ปจํ ์ด๋ ์ด์,๊ด๋ฆฌ |
์๋ํ | ์๋์ ์ค์ผ์ผ๋ง | ์๋ํ๋ ๋ฐฐํฌ, ์ค์ผ์ผ๋ง |
๊ณ ๊ฐ์ฉ์ฑ | ์ง์ ์ํจ | ์ง์ |
๋ก๋ ๋ฐธ๋ฐ์ฑ | ์ง์ ์ค์ | ๋ด์ฅ๋ ๋ก๋๋ฐธ๋ฐ์ฑ |
์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ | ์ง์ ์ฐ๊ฒฐ ์ค์ ํ์ | ํด๋ฌ์คํฐ ๋ด ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ ์๋ ์ง์ |
ํด๋ฌ์คํฐ ์ง์ | ๋จ์ผ ์๋ฒ์์๋ง ์๋ | ๋ฉํฐ ๋ ธ๋ ํด์คํฐ ์ง์ |
์์ | ๋์ปค ์ปดํฌ์ฆ | ์ฟ ๋ฒ๋คํฐ์ค, ๋์ปค ์ค์, ECS, EKS |
Friday (01.24)
์ค๋์ ์ ์ฌ
๋ณ์ โญ๏ธ โญ๏ธ โญ๏ธ โญ๏ธ
๋๊น์ค 6500์.. ๋๋ฌด ์ธ๋ค~
๋ง์ดํธ
1. ๋ฐ์ธ๋ ๋ง์ดํธ (Bind Mount)
ํธ์คํธ์ ํน์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ปจํ ์ด๋์ ๋๋ ํ ๋ฆฌ์ 1๋1๋ก ์ฐ๊ฒฐ
๊ฒฝ๋ก๋ฅผ ์ง์ ํ๋ฉด ๊ทธ ๋๋ ํ ๋ฆฌ ๊ทธ๋๋ก ์ปจํ ์ด๋ ์์ ๋งคํ๋จ
ex) ๊ฐ๋ฐ ์ค์ธ ์์ค์ฝ๋๋ฅผ ์ปจํ
์ด๋์์ ๋ฐ๋ก ํ
์คํธํ๊ณ ์ถ์ ๋
docker run -v /host/path:/container/path~
2. ๋ณผ๋ฅจ ๋ง์ดํธ (Volume Mount)
Docker๊ฐ ๊ด๋ฆฌํ๋ ์คํ ๋ฆฌ์ง ๊ณต๊ฐ(๋ณผ๋ฅจ)์ ์์ฑํ๊ณ , ์ด๋ฅผ ์ปจํ ์ด๋์ ์ฐ๊ฒฐ
ํธ์คํธ ๋๋ ํ ๋ฆฌ๊ฐ ์๋๋ผ, Docker๊ฐ ์ง์ ํ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํจ
ex) ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ์, ๋ก๊ทธ ๋ฐ์ดํฐ ์ ์ฅ ๋ฑ.
docker run -v my-volume:/container/path ~
์ ๋ฆฌํ๋ฉด
- ๋ฐ์ธ๋ ๋ง์ดํธ: ํธ์คํธ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ทธ๋๋ก ์ฐ๊ฒฐ. (์ง์ ์ง์ ํ ๊ฒฝ๋ก)
- ๋ณผ๋ฅจ ๋ง์ดํธ: Docker๊ฐ ๊ด๋ฆฌํ๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ฐ๊ฒฐ. (์ปจํ ์ด๋ ๊ฐ ๊ณต์ ์ ๋ฐฑ์ ์ ์ ๋ฆฌ)
ํ์ํ๋ฉด ๋ณผ๋ฅจ ๋ง์ดํธ๋ฅผ ์ฌ์ฉํ์ง๋ง, ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ๋ฐ์ธ๋ ๋ง์ดํธ๋ฅผ ์งํฅํ๋ค.
์์ฐ๋ ๋ณผ๋ฅจ, ์ปจํ
์ด๋, ์ด๋ฏธ์ง ์ญ์ ์ prune ๋ช
๋ น์ด ์ฌ์ฉ
๋์ปคํ์ผ
๋์ปค ํ์ผ์ด ๋์ปค ํ๋ธ์ ์๋ ์์ฉํ๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์์์, ๊ฑฐ๊ธฐ๋ค๊ฐ ์๋ก์ด ์ด๋ฏธ์ง์ธต์ ๋ ๋ง๋ค๊ณ , ๋ด๊ฐ ๋ง๋ ์ต์ข ์ด๋ฏธ์ง๋ฅผ ํ๋ธ์ ์ฌ๋ฆด๋, ์ด๋ฏธ์ง๋ฅผ ๋ง๋๋ ์ฝ๋๊ฐ ๋์ปค ํ์ผ
Dockerfile์ ํตํด ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ณ ์ปค๋ฐ์ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ ๋ ์ฌ์ฉํ๋ฉฐ, ์ด๋ฅผ ์๋ํํ๋ ค๋ฉด ๋น๋ ๋ฐ ํธ์ ์์ ์ ์คํฌ๋ฆฝํธ๋ก ์์ฑ
'๐ฐ์ฐ๋ฆฌ FISA > ํ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฐ๋ฆฌ FISA AI์์ง๋์ด๋ง 3์ฃผ์ฐจ ๊ณผ์ (0) | 2025.01.13 |
---|---|
์ฐ๋ฆฌ FISA AI์์ง๋์ด๋ง 2์ฃผ์ฐจ ๊ณผ์ (0) | 2025.01.06 |
์ฐ๋ฆฌ FISA AI์์ง๋์ด๋ง 1์ฃผ์ฐจ ๊ณผ์ (0) | 2024.12.30 |