6์žฅ. SQL ๋ฌธ์˜ ๊ธฐ๋ณธ

SELECT ๋ฌธ์˜ ์ดํ•ด
  1. SELECT
  2. INSERT, UPDATE, DELETE
  3. VIEW
  4. SUBQUERY
  5. JOIN
  6. ์ฒดํฌํฌ์ธํŠธ

 

๐Ÿง SQL์„ ์™œ ์‚ฌ์šฉํ• ๊นŒ?

์š”์ฆ˜์€ ORM์œผ๋กœ ์ž‘์—…์„ ๋งŽ์ด ํ•˜๋‹ˆ๊นŒ SQL.. ์ž์„ธํžˆ ๋ชฐ๋ผ๋„ ๋˜๋Š”๊ฑฐ ์•„๋‹๊นŒ? SQL์„ ์•Œ์•„์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?

โ—๏ธ ORM์€ SQL์„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•˜์—ฌ, ์ ‘๊ทผ์„ฑ์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ํ•˜๋‚˜์˜ ๋„๊ตฌ

  • ORM์ด ์™œ ๋‚˜์˜ค๊ฒŒ ๋˜์—ˆ๋Š”์ง€
  • SQL ๋™์ž‘์›๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ๋œ๊ฑด์ง€
  • ORM์ด ์—†์„ ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š”์ง€

์ œ์ผ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ฒƒ, DB์— ์ง์ ‘ ์ ‘๊ทผํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์—ด๋žŒํ•˜๊ฑฐ๋‚˜ ํ•„ํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


SELECT ๋ฌธ

  • MySQL CLI๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋กœ๊ทธ์ธ์„ ํ•œ ํ›„
  • MySQL ์„œ๋ฒ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชฉ๋ก ํ‘œ์‹œ
mysql> show databases;
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ
mysql> use DB๋ช…;
  • ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ” ๋ชฉ๋ก ํ‘œ์‹œ
mysql> show tables;

 

์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„(MySQL)

์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„
INTERVAL ๋†’์Œ
BINARY, COLLATE  
-(๋‹จํ•ญ ๊ฐ์‚ฐ), ~(๋‹จํ•ญ ๋น„ํŠธ ๋ฐ˜์ „)  
^  
*, /, DIV, %, MOD  
-, +  
&  
|  
=, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN  
BETWEEN, CASE, WHEN, THEN, ELSE  
NOT  
&&, AND  
XOR  
||, OR  
=(๋Œ€์ž… ๋“ฑํ˜ธ), := ๋‚ฎ์Œ

 

SQL์˜ ๊ธฐ์ดˆ์ ์ธ ๊ธฐ์ˆ  ๊ทœ์น™

  • SQL ๋ฌธ์˜ ๋งˆ์ง€๋ง‰์— ๋”œ๋ฆฌ๋ฏธํ„ฐ๋ฅผ ๋ถ™์ธ๋‹ค (๋Œ€๋ถ€๋ถ„ ์„ธ๋ฏธ์ฝœ๋ก )
  • ํ‚ค์›Œ๋“œ๋Š” case-sensitive ํ•˜์ง€ ์•Š๋‹ค (select์™€ SELECT๋Š” ๊ฐ™๋‹ค)
  • ์ •์ˆ˜๋Š” ๊ทธ๋Œ€๋กœ ์“ด๋‹ค. ๋ฌธ์ž์—ด, ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ์€ ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ผ๋‹ค
  • ๋‹จ์–ด๋Š” ๋ฐ˜๊ฐ ์ŠคํŽ˜์ด์Šค๋‚˜ ๊ฐœํ–‰์œผ๋กœ ๊ตฌ๋ณ„ํ•œ๋‹ค

 

DISTINCT

์„ ํƒํ•œ ํ–‰์—์„œ ์ค‘๋ณต๋œ ๊ฐ’์ด ์žˆ๊ณ  ์ด๋ฅผ ์—†์• ๋ ค๊ณ  ํ•˜๋Š” ๊ฒฝ์šฐ

SELECT DISTINCT ์ปฌ๋Ÿผ๋ช… FROM ํ…Œ์ด๋ธ”๋ช… WHERE ์กฐ๊ฑด;

 

ORDER BY

SELECT ~ FROM ํ…Œ์ด๋ธ”๋ช… ORDER BY ์ •๋ ฌํ‚ค1[, ์ •๋ ฌํ‚ค2, ... DESC/ASC];
  • ํ–‰์˜ ์ˆœ์„œ๋ฅผ ํ™•์‹คํžˆ ๊ฐ™๊ฒŒ ํ•˜๋ ค๋ฉด ํ–‰์˜ ์ •๋ ฌํ‚ค๋ฅผ uniqueํ•˜๊ฒŒ ์ •ํ•ด์•ผ ํ•จ
    • ์ •๋ ฌํ‚ค๊ฐ€ ๊ฐ™์€ ๊ฐ’์˜ ํ–‰์ด ๋ณต์ˆ˜ ๊ฐœ ์กด์žฌํ•œ๋‹ค๋ฉด ๊ทธ ํ–‰๋“ค์˜ ์ˆœ์„œ๋Š” ์ผ์ •ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ
  • ๊ธฐ๋ณธ๊ฐ’ : ASC(์˜ค๋ฆ„์ฐจ์ˆœ)

 

์ง‘์•ฝํ•จ์ˆ˜

๊ธฐ๋ณธ์ ์œผ๋กœ NULL์„ ์ œ์™ธํ•˜๊ณ  ์ง‘๊ณ„

COUNT ํ•จ์ˆ˜๋งŒ์€ 'COUNT(*)'๋กœ ํ‘œ๊ธฐ(NULL์„ ํฌํ•จํ•œ ์ „์ฒด ํ–‰ ์ง‘๊ณ„)

 

  • COUNT ํ…Œ์ด๋ธ” ํ–‰์ˆ˜
  • SUM ํ…Œ์ด๋ธ” ์ˆ˜์น˜ ๋ฐ์ดํ„ฐ ํ•ฉ๊ณ„
  • AVG ํ…Œ์ด๋ธ” ์ˆ˜์น˜ ๋ฐ์ดํ„ฐ ํ‰๊ท 
  • MAX ํ…Œ์ด๋ธ” ์ž„์˜์—ด ๋ฐ์ดํ„ฐ ์ค‘ ์ตœ๋Œ€๊ฐ’
  • MIN ํ…Œ์ด๋ธ” ์ž„์˜์—ด ๋ฐ์ดํ„ฐ ์ตœ์†Œ๊ฐ’
  • (MySQL only) GROUP_CONCAT ๋ฌธ์ž์—ด ๊ฒฐํ•ฉ, ์ฝค๋งˆ๋กœ ๊ตฌ๋ถ„
# GROUP_CONCAT๊ณผ DISTINCT๋กœ ์ค‘๋ณต ํšŒํ”ผ
# ์ค‘๋ณต์ด ์—†์–ด์ง€๊ณ  ํ–‰์ •๊ตฌ์—ญ์ด 1ํšŒ๋งŒ ์กฐํšŒ
mysql> SELECT GROUP_CONCAT(DISTINCT district) FROM CITY WHERE COUNTRYCODE='KOR';

 

GROUP BY

๋ฐ์ดํ„ฐ๋ฅผ ๋ช‡ ๊ฐœ์˜ ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆ ์„œ ์ง‘์•ฝํ•˜๋Š” ๊ฒƒ

SELECT ~ FROM ํ…Œ์ด๋ธ”๋ช… GROUP BY ์ปฌ๋Ÿผ๋ช…1 [, ์ปฌ๋Ÿผ๋ช…2, ...];
  • GROUP BY๋กœ ์ง€์ •ํ•œ ์—ด : ์ง‘์•ฝ ํ‚ค, ๊ทธ๋ฃนํ™” ํ‚ค
  • ๋ณต์ˆ˜ ์—ด์„ ์ฝค๋งˆ๋กœ ๊ตฌ๋ถ„ํ•ด ์ง€์ •

 

HAVING

๊ทธ๋ฃน๋งˆ๋‹ค ์ง‘์•ฝํ•œ ๊ฐ’์„ ์กฐ๊ฑด์œผ๋กœ ์„ ํƒํ•˜๋Š” ๊ฒƒ

SELECT ~ FROM GROUP BY ~ HAVING ๊ทธ๋ฃน์˜ ๊ฐ’์— ๋Œ€ํ•œ ์กฐ๊ฑด;

 

์ž‘์„ฑ ์ˆœ์„œ

  1. SELECT
  2. FROM
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. ORDER BY

 

์‹คํ–‰ ์ˆœ์„œ

  1. FROM
  2. ON, WHERE
  3. JOIN, GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY
  7. LIMIT (MySQL) / ROWNUM (Oracle)

UPDATE, INSERT, DELETE ๋ฌธ

UPDATE

UPDATE ํ…Œ์ด๋ธ”๋ช… SET ์ปฌ๋Ÿผ๋ช…1=๊ฐ’1[,์ปฌ๋Ÿผ๋ช…2=๊ฐ’2,...] WHERE ์กฐ๊ฑด;
  • ๊ฐฑ์‹ ํ•˜๋Š” ์—ด์— ๋””ํดํŠธ ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ : ๊ฐ’ ๋Œ€์‹  'DEFAULT'  ํ‚ค์›Œ๋“œ๋ฅผ ์ง€์ •ํ•˜๋ฉด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ๋จ

 

INSERT

  • INSERT๋Š” ํ–‰ ๋‹จ์œ„๋กœ ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ ํ…Œ์ด๋ธ” ์ •์˜๋ฅผ ์ •ํ™•ํžˆ ํ™•์ธ ํ›„ ์‹คํ–‰๋˜์–ด์•ผ ํ•จ
    • \G๋Š” ; ๋Œ€์‹ ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋”œ๋ฆฌ๋ฏธํ„ฐ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์„ธ๋กœ๋กœ ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ํ•จ
SHOW CREATE TABLE ํ…Œ์ด๋ธ”๋ช…\G
# ํ…Œ์ด๋ธ” ์ •์˜ ์ž์ฒด๊ฐ€ ์•„๋‹Œ ๋‹จ์ˆœํžˆ ์—ด ์ •๋ณด ์กฐํšŒ์šฉ (Oracle ํ˜ธํ™˜)
DESC ํ…Œ์ด๋ธ”๋ช…;

 

  • INSERT๋ฌธ
# ๊ธฐ๋ณธ
INSERT INTO ํ…Œ์ด๋ธ”๋ช…(์ปฌ๋Ÿผ1[,์ปฌ๋Ÿผ2,...]) VALUES (๊ฐ’1[,๊ฐ’2,...]);
# Multi row insert (MySQL)
INSERT INTO city (name, code, district) VALUES ('Gimpo', 'KOR', 'Kyonggi'), 
('Seongnam', 'KOR', 'Kyonggi'), ('Hwaseong', 'KOR', 'Kyonggi');
# ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ๋ฌธ
INSERT INTO ํ…Œ์ด๋ธ”1 SELECT FROM ํ…Œ์ด๋ธ”2; # SELECT๋ฌธ์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ ˆ์ฝ”๋“œ๋กœ ์ž…๋ ฅ

 

DELETE

DELETE FROM ํ…Œ์ด๋ธ”๋ช… WHERE ์กฐ๊ฑด;

VIEW

๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”, ์ ‘๊ทผ์ด ํ—ˆ์šฉ๋œ ๋ฐ์ดํ„ฐ๋งŒ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Œ(ํ…Œ์ด๋ธ”๊ณผ ๋™์ผํ•˜์ง€๋งŒ ํ…Œ์ด๋ธ”๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Œ)

 

VIEW ์–ธ์ œ ์“ธ๊นŒ? VIEW์˜ ์ด์ 

์„ค๊ณ„๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์„ ๋•Œ ๋ทฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ„์†Œํ™”ํ•˜์ž!

  1. ํŽธ๋ฆฌ์„ฑ : ๋ณต์žกํ•œ SELECT ๋ฌธ์„ ์ผ์ผ์ด ๋งค๋ฒˆ ๊ธฐ์ˆ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋ฐ์ดํ„ฐ ์ €์žฅ ์—†์ด(๊ธฐ์–ต์žฅ์น˜์˜ ์šฉ๋Ÿ‰์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ) ์‹คํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ๋ณด์•ˆ์„ฑ : ํ•„์š”ํ•œ ์—ด๊ณผ ํ–‰๋งŒ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค. ๋ฏผ๊ฐํ•œ ์ปฌ๋Ÿผ์€ ๋งˆ์Šคํ‚นํ•˜๊ธฐ
  3. ๋…๋ฆฝ์„ฑ : ๊ธฐ์กด ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋ทฐ๋„ ํ•จ๊ป˜ ๋ณ€๊ฒฝ, ๊ฐฑ์‹  ์‹œ์—๋„ ๋ทฐ ์ •์˜์— ๋”ฐ๋ฅธ ๊ฐฑ์‹ ์œผ๋กœ ํ•œ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ทฐ๋ฅผ ์ œ๊ฑฐ(DROP VIEW)ํ•ด๋„ ์ฐธ์กฐํ•˜๋Š” ํ…Œ์ด๋ธ”์€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

 

VIEW ์ž‘์„ฑ

CREATE VIEW ๋ทฐ์ด๋ฆ„(์—ด๋ช…1[, ์—ด๋ช…2, ...]) AS SELECT๋ฌธ;

 

VIEW ์ž…๋ ฅ, ๊ฐฑ์‹  ์ œํ•œ

  • ๊ฐฑ์‹  ๋ถˆ๊ฐ€
    • ์–ด๋–ค ํ–‰์ด ๋Œ€์‘ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฑฐ๋‚˜ ์–ด๋–ค ๊ฐ’์„ ๋„ฃ์œผ๋ฉด ์ข‹์„์ง€ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ
  • ์‚ฝ์ž… ๋ถˆ๊ฐ€
    • 2๊ฐ€์ง€ ์ด์ƒ ํ…Œ์ด๋ธ”์„ ์กฐํ•ฉํ•ด ์ž‘์„ฑํ•œ ๋ทฐ๋ฅผ ๊ฐฑ์‹ ํ•  ๋•Œ ์–ด๋Š ํ…Œ์ด๋ธ”์„ ๊ฐฑ์‹ ํ•˜๋ฉด ์ข‹์„์ง€ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ
    • ์„ ํƒ๋œ ์—ด ์ด์™ธ์˜ ์—ด์— ๊ธฐ๋ณธ๊ฐ’๋„ ์—†๊ณ  NULL๋„ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์ƒํ™ฉ (ํ•ด๋‹น ์—ด์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ)

SUBQUERY

ํ•˜๋‚˜์˜ SQL ๋ฌธ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ SQL ๋ฌธ

 

์ฃผ์˜์‚ฌํ•ญ

  1. ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ์„œ ์‚ฌ์šฉํ•  ๊ฒƒ
  2. ORDER BY๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค
  3. ๋‹จ์ผ ํ–‰ ๋˜๋Š” ๋ณต์ˆ˜ ํ–‰ ๋น„๊ต ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
SELECT		-- ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ
FROM		-- ์ธ๋ผ์ธ ๋ทฐ
WHERE		-- ์ค‘์ฒฉ ์„œ๋ธŒ์ฟผ๋ฆฌ ๋“ฑ
HAVING		-- ์ค‘์ฒฉ ์„œ๋ธŒ์ฟผ๋ฆฌ ๋“ฑ
ORDER BY	-- ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ


-- ํ…Œ์ด๋ธ”2์˜ ์ •๋ณด๋ฅผ ๋ฝ‘์•„์„œ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ด๋ธ”1์— ๋„ฃ์–ด์ค€๋‹ค.
-- value()๋“ค์–ด๊ฐˆ ์ž๋ฆฌ๋ฅผ ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ๋Œ€์ฒด ํ–ˆ๋‹ค.
INSERT INTO table1 (SELECT * FROM table2);


-- ์ธํ„ด์˜ ์ •๋ณด๋ฅผ ๊ตฌํ•ด์™€์„œ ์‚ญ์ œํ•œ๋‹ค. 
DELETE FROM employee 
WHERE id = (SELECT id FROM employee where office_worker = '์ธํ„ด' );


-- ์ธํ„ด์— ์ •๋ณด๋ฅผ ๊ตฌํ•ด์™€์„œ ๊ธ‰์—ฌ๋ฅผ 10๋งŒ์› ์ธ์ƒํ•œ๋‹ค.
UPDATE employee SET salary=(salary+100000)
WHERE id = (SELECT id FROM employee where office_worker = '์ธํ„ด' );
  • ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ : ํ•œ ํ–‰๋งŒ ๋ฐ˜ํ™˜
  • ์ธ๋ผ์ธ ๋ทฐ : SQL๋ฌธ์ด ์‹คํ–‰๋  ๋•Œ๋งŒ ์ƒ์„ฑ๋˜๋Š” ๋ทฐ์ด๊ธฐ ๋•Œ๋ฌธ์— DB์— ์ €์žฅ๋˜์ง€ ์•Š์Œ (๋™์ , ์ž„์‹œ์ )
  • ๋‹จ์ผ ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ : =, <, <=, >, >=, <> ์—ฐ์‚ฐ์ž๋กœ ์–ป์€ ์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ 1๊ฐœ ์ดํ•˜ ํ–‰์„ ๋ฐ˜ํ™˜
  • ๋ณต์ˆ˜ ํ–‰(์ค‘์ฒฉ) ์„œ๋ธŒ์ฟผ๋ฆฌ : IN, ANY, ALL, EXISTS ๋“ฑ์˜ ์—ฐ์‚ฐ์ž๋กœ ์–ป์€ ์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์—ฌ๋Ÿฌ๊ฐœ ํ–‰์„ ๋ฐ˜ํ™˜

JOIN

2๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ

ON ์„ ์ด์šฉํ•ด์„œ ๊ฒฐํ•ฉ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•จ

 

INNER JOIN

ON ์œผ๋กœ ์ง€์ •ํ•œ ๊ฒฐํ•ฉ ์กฐ๊ฑด์— ์ผ์น˜ํ•˜๋Š” ํ–‰๋งŒ์„ 2๊ฐœ์˜ ํ…Œ์ด๋ธ”๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ

SELECT ์„ ํƒํ•  ์—ด ๋ชฉ๋ก FROM ํ…Œ์ด๋ธ”1 INNER JOIN ํ…Œ์ด๋ธ”2 ON ๊ฒฐํ•ฉ์กฐ๊ฑด;

 

OUTER JOIN

ํ•œ ์ชฝ ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ ์ „์ฒด ํ–‰์„ ํ‘œ์‹œํ•˜๊ณ  ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์€ ์กฐ๊ฑด์— ๋งž๋Š” ํ–‰์ด ์žˆ์œผ๋ฉด ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ

https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/

  • ํŠน๋ณ„ํ•œ ์ด์œ (์ฟผ๋ฆฌ ์ž๋™ ์ƒ์„ฑ์œผ๋กœ ํ…Œ์ด๋ธ”1, ํ…Œ์ด๋ธ”2์˜ ์ฟผ๋ฆฌ์—์„œ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋“ฑ)๊ฐ€ ์•„๋‹ˆ๋ฉด LEFT OUTER JOIN ์‚ฌ์šฉ
SELECT ์„ ํƒํ•  ์—ด ๋ชฉ๋ก FROM ํ…Œ์ด๋ธ”1 LEFT OUTER JOIN ํ…Œ์ด๋ธ”2 ON ๊ฒฐํ•ฉ์กฐ๊ฑด;
SELECT ์„ ํƒํ•  ์—ด ๋ชฉ๋ก FROM ํ…Œ์ด๋ธ”1 RIGHT OUTER JOIN ํ…Œ์ด๋ธ”2 ON ๊ฒฐํ•ฉ์กฐ๊ฑด;

์ฒดํฌํฌ์ธํŠธ (SQL ์ฝ”๋”ฉ์˜ ๊ธฐ์ˆ  ์ฐธ์กฐ)

๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง๊ณผ ๊ฒ€์ƒ‰

  • LIKE ์ œ๋Œ€๋กœ ์“ฐ๊ธฐ
    • LIKE '%keyword%'์ฒ˜๋Ÿผ ์ „ํ›„๋ฐฉ ๋ชจ๋‘ ์™€์ผ๋“œ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
    • LIKE๋Š” ์ตœ๋Œ€ํ•œ ์ž์„ธํ•˜๊ฒŒ
  • ์ผ์น˜ํ•˜๊ฑฐ๋‚˜ ๋ˆ„๋ฝ๋œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์•„๋‚ผ ๋•Œ
    • ์ด๋ก ์ ์œผ๋กœ๋Š” EXISTS๊ฐ€ NOT IN๋ณด๋‹ค ๋น ๋ฆ„
    • ๋˜๋Š” LEFT JOIN์„ ์‚ฌ์šฉํ•˜๊ณ  WHERE์—์„œ NULL๊ฐ’์„ ์ฐพ๋Š” Frustrated JOIN ์‚ฌ์šฉํ•˜๊ธฐ

 

GROUP BY

  1. GROUP BY ์ ˆ์˜ ์ž‘๋™ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜์ž
    • ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ GROUP BY ์ ˆ์€ SELECT DISTINCT์™€ ๋™์ผํ•˜๊ฒŒ ์ˆ˜ํ–‰๋œ๋‹ค
    • ์ง‘๊ณ„ ์ˆ˜ํ–‰ ์ „ WHERE ์ ˆ์ด ์ ์šฉ๋œ๋‹ค
    • GROUP BY ์ ˆ์€ ํ•„ํ„ฐ๋ง๋œ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ์ง‘๊ณ„ํ•œ๋‹ค
    • HAVING ์ ˆ์€ ์ง‘๊ณ„๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ํ•„ํ„ฐ๋งํ•œ๋‹ค
    • ORDER BY ์ ˆ์€ ๋ณ€ํ˜•๋œ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ์ •๋ ฌํ•œ๋‹ค
    • SELECT ์ ˆ์—์„œ ์ง‘๊ณ„ ํ•จ์ˆ˜๋‚˜ ์ง‘๊ณ„ ๊ณ„์‚ฐ์— ํฌํ•จ๋˜์ง€ ์•Š์€ ์ปฌ๋Ÿผ์€ GROUP BY ์ ˆ์— ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค
  1. GROUP BY ์ ˆ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์ž
    • HAVING ์ ˆ์˜ ์ง„์ •ํ•œ ํž˜์€ ํ•œ ๊ทธ๋ฃน์˜ ์ง‘๊ณ„ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค๋ฅธ ์ง‘๊ณ„ ๊ฐ’๊ณผ ๋น„๊ตํ•˜๋Š” ๋Šฅ๋ ฅ์— ์žˆ๋‹ค.
    • ๋ณ„์นญ์œผ๋กœ SELECT ์ ˆ์—์„œ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜, HAVING ์ ˆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ํ•ด๋‹น ํ‘œํ˜„์‹์„ ๊ทธ๋Œ€๋กœ ์žฌ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. (?)
  2. ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด GROUP BY๋‚˜ HAVING ์ ˆ์„ ์‚ฌ์šฉํ•˜์ž
SELECT SUM(col) AS total
GROUP BY ...
HAVING SUM(col) ...;
  1. GROUP BY ์ ˆ ์—†์ด ์ตœ๋Œ“๊ฐ’, ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์ž

 

์„œ๋ธŒ์ฟผ๋ฆฌ

  1. ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์–ด๋””์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋‘์ž
    • ์ผ๋ฐ˜์ ์œผ๋กœ ํ…Œ์ด๋ธ” ์ด๋ฆ„์„ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด๋ผ๋ฉด ์–ด๋””์—๋‚˜ ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 
    • ํ…Œ์ด๋ธ” ์„œ๋ธŒ์ฟผ๋ฆฌ: FROM, JOIN ๋“ฑ์— ์‚ฌ์šฉ
    • ๋‹จ์ผ ์ปฌ๋Ÿผ ์„œ๋ธŒ์ฟผ๋ฆฌ: IN, NOT IN ์กฐ๊ฑด์— ์‚ฌ์šฉ
    • ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ
  1. ์—ฐ๊ด€์„ฑ ์žˆ๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ์™€ ์—ฐ๊ด€์„ฑ ์—†๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ์ฐจ์ด์ ์„ ํŒŒ์•…ํ•˜์ž
  2. ์„œ๋ธŒ์ฟผ๋ฆฌ ๋Œ€์‹  ์กฐ์ธ์„ ์‚ฌ์šฉํ•ด ๋” ํšจ์œจ์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜์ž
SELECT NAME
FROM BEERSTYLE
WHERE CountryFK IN (
    SELECT CountryID
    FROM Countries
    WHERE CountryNm = "Belgium"
);

SELECT S.NAME
FROM STYLE AS S
INNER JOIN Countries AS c
    ON S.CountryFK = C.CountryID
WHERE C.CountryNm = "Belgium";

 

์กฐ์ธ

  1. LEFT JOIN์˜ ์˜ค๋ฅธ์ชฝ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ฑธ๋Ÿฌ๋‚ด์ž
  1. OUTER JOIN์—์„œ๋Š” ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด๋Š” COUNT(*) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž 
    • '*'๋ฅผ ์‚ฌ์šฉํ•ด COUNT๋ฅผ ํ•˜๋ฉด row ์ž์ฒด๋ฅผ ์นด์šดํŠธํ•œ๋‹ค. ์ฆ‰ ๋ชจ๋“  ์ปฌ๋Ÿผ์˜ ๊ฐ’์ด NULL๋กœ ์ฑ„์›Œ์ ธ ์žˆ์–ด๋„ ์นด์šดํŠธ๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค. ๋ฐ˜๋ฉด์— ์ปฌ๋Ÿผ๋ช…์„ ์‚ฌ์šฉํ•ด COUNT๋ฅผ ํ•˜๋ฉด ํ•ด๋‹น ์ปฌ๋Ÿผ์˜ ๊ฐ’์ด NULL์ด๋ฉด ์นด์šดํŠธํ•˜์ง€ ์•Š๋Š”๋‹ค. 
    • NULL ๊ฐ’์ด ์žˆ๋Š” ๋กœ์šฐ๋ฅผ ํฌํ•จํ•ด ๋ชจ๋“  ๋กœ์šฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๊ธฐ : COUNT(*)
    • ์ปฌ๋Ÿผ ๊ฐ’์ด NULL์ด ์•„๋‹Œ ๋กœ์šฐ์˜ ๊ฐœ์ˆ˜๋งŒ ์„ธ๊ธฐ : COUNT(์ปฌ๋Ÿผ๋ช…)
  • EXPLAIN, STRAIGHT JOIN(์™ผ์ชฝ ํ…Œ์ด๋ธ”๋ถ€ํ„ฐ ์ฝ๋Š” ์กฐ์ธ), SEMI JOIN(๋ฉ”์ธ ์ฟผ๋ฆฌ ํ…Œ์ด๋ธ”๊ณผ ์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์กฐ์ธ)
  • ์กฐ์ธ๋˜์–ด์•ผ ํ•  ๊ฐ ์ง‘ํ•ฉ์˜ ์ฒ˜๋ฆฌ๋ฒ”์œ„์™€ ์ˆœ์„œ์— ๋”ฐ๋ผ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค.
    • ๊ฐ€์žฅ ์ข์€ ๋ฒ”์œ„๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ• ์ˆ˜๋ก ์กฐ์ธ ํšจ์œจ์€ ์ฆ๊ฐ€

 

 

 

 

 

 

 

์ฐธ๊ณ 

https://mozi.tistory.com/233

https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC-%EC%A0%95%EB%A6%AC

5์žฅ. DBMS๋ฅผ ์กฐ์ž‘ํ•  ๋•Œ ํ•„์š”ํ•œ ๊ธฐ๋ณธ ์ง€์‹

์กฐ์ž‘ํ•˜๊ธฐ ์ „์— ์•Œ์•„๋‘์–ด์•ผ ํ•  ๊ฒƒ

 

โฌ‡๏ธ MySQL ์„ค์น˜๋ฐฉ๋ฒ• โฌ‡๏ธ

2023.01.18 - [์ธํ”„๋ผ/NHN Cloud] - NHN Cloud ์ธ์Šคํ„ด์Šค์— MySQL ์„ค์น˜ํ•˜๊ธฐ (1) - ์••์ถ•ํŒŒ์ผ ์ด์šฉ

2023.01.18 - [์ธํ”„๋ผ/NHN Cloud] - NHN Cloud ์ธ์Šคํ„ด์Šค์— MySQL ์„ค์น˜ํ•˜๊ธฐ (2) - Yum ์ด์šฉ

2023.01.18 - [์ธํ”„๋ผ/NHN Cloud] - NHN Cloud ์ธ์Šคํ„ด์Šค์— MySQL ์„ค์น˜ํ•˜๊ธฐ (3) - ์„ค์ •

 

MySQL๊ณผ ์ปค๋„ฅ์…˜ ๋งŒ๋“ค๊ธฐ

๋กœ๊ทธ์ธ

๋กœ๊ทธ์ธ ์„ฑ๊ณต ํ™”๋ฉด

๋กœ๊ทธ์ธ ์„ฑ๊ณต: MySQL์ด๋ผ๋Š” DBMS์— ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•ด์„œ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ ์ƒํƒœ

mysql> : ํ”„๋กฌํ”„ํŠธ, ์‚ฌ์šฉ์ž ๋ช…๋ น์„ ์ž…๋ ฅ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ

 

์ปค๋„ฅ์…˜

๋กœ๊ทธ์ธํ•ด์„œ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ํ‘œ์‹œ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ

โ†’ ๋กœ๊ทธ์ธ ์ „๊ณผ ๋กœ๊ทธ์ธ ํ›„๋กœ ์‚ฌ์šฉ์ž์™€ MySQL์˜ ๊ด€๊ณ„๊ฐ€ ๋ณ€ํ–ˆ๋‹ค

โ†’ ์‚ฌ์šฉ์ž์™€ MySQL์ด ์ ‘์†๋˜์—ˆ๋‹ค (=์—ฐ๊ฒฐ๋˜์—ˆ๋‹ค)

โ†’ ์ปค๋„ฅ์…˜ (Connection)

  • ์ปค๋„ฅ์…˜์ด ์œ ์ง€๋œ๋‹ค = ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋ฌด์–ธ๊ฐ€ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค
  • ์ปค๋„ฅ์…˜์ด ์„ฑ๋ฆฝ๋˜์—ˆ์Œ์„ ํ‘œ์‹œํ•˜๋Š” ๋ฌธ์žฅ

  • connection id : MySQL์ด ์ปค๋„ฅ์…˜์— ๋ถ™์ธ ๋ฒˆํ˜ธ
  • MySQL์€ ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปค๋„ฅ์…˜์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ
  • ์ปค๋„ฅ์…˜ ๋ฒˆํ˜ธ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ๊ตฌ๋ถ„
  • ์ปค๋„ฅ์…˜์˜ ์ƒํƒœ๋ฅผ ์กฐ์‚ฌํ•˜๋Š” ๋ช…๋ น
mysql> show status like 'Thread_connected';
  • Thread_connected : ์ปค๋„ฅ์…˜(์‚ฌ์šฉ์ž)์˜ ์ˆ˜

 

์„ธ์…˜

์ปค๋„ฅ์…˜ ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ๊นŒ์ง€์˜ ๋‹จ์œ„

์ƒ์„ฑ ์‹œ์  : ์ปค๋„ฅ์…˜์ด ํ™•๋ฆฝ๋œ ๋’ค

์ปค๋„ฅ์…˜๊ณผ ์„ธ์…˜์€ 1:1๋กœ ๋Œ€์‘๋˜๊ณ , ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ ์‹œ์ ์ด ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Œ

 

๋กœ๊ทธ์˜คํ”„

  • ์ปค๋„ฅ์…˜ ์ข…๋ฃŒ
mysql> quit
Bye

 

SQL๊ณผ ๊ด€๋ฆฌ ๋ช…๋ น์˜ ์ฐจ์ด

๊ด€๋ฆฌ ๋ช…๋ น

  • DBMS๋Š” SQL๋ฌธ ์ด์™ธ์—๋„ '๊ด€๋ฆฌ ๋ช…๋ น'์ด ์žˆ๋‹ค
  • DBMS๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฐ์‹œํ•˜๊ฑฐ๋‚˜ DBMS๊ฐ€ ์ด์ƒํ•œ ๋™์ž‘์„ ํ•  ๋•Œ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์ •๋ณด์ˆ˜์ง‘์„ ํ•˜๋Š” ๋“ฑ์˜ ์šฉ๋„
  • ๊ด€๋ฆฌ ๋ช…๋ น์˜ ์ข…๋ฅ˜๋‚˜ ๋ฌธ๋ฒ•์„ DBMS์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค โ†’ DBMS ๋งค๋‰ด์–ผ์— ๊ธฐ์žฌ๋˜์–ด ์žˆ๊ณ , ๋ ˆํผ๋Ÿฐ์Šค๋„ ์žˆ์Œ
    • SQL๋ฌธ์€ ๋ฐ˜๋“œ์‹œ 'SELECT, INSERT, DELETE, UPDATE' ์ค‘ ํ•˜๋‚˜์˜ ๋‹จ์–ด๋กœ ์‹œ์ž‘
    • ์ด ์™ธ์˜ ๋‹จ์–ด๋กœ ์‹œ์ž‘ํ•˜๋ฉด ๊ด€๋ฆฌ ๋ช…๋ น
  • MySQL ๊ด€๋ฆฌ ๋ช…๋ น ์˜ˆ์‹œ
# ๊ฐ€๋™๋œ ์‹œ์ ๋ถ€ํ„ฐ์˜ ๊ฒฝ๊ณผ์‹œ๊ฐ„(์ดˆ)
mysql> show status like 'Uptime';

# ์‹คํ–‰ํ•œ SQL ๋ฌธ์˜ ์ˆ˜
mysql> show status like 'Queries';

 

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ณ„์ธต

์ธ์Šคํ„ด์Šค

  • ๋ฌผ๋ฆฌ์  ๊ฐœ๋…, DBMS๊ฐ€ ๋™์ž‘ํ•  ๋•Œ์˜ ๋‹จ์œ„
  • OS ์ž…์žฅ์—์„œ๋Š” ํ”„๋กœ์„ธ์Šค / DBMS ์ž…์žฅ์—์„œ๋Š” ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ์„œ๋ฒ„๋กœ ๋ถ€๋ฆ„
  • ์ธ์Šคํ„ด์Šค ์•„๋ž˜์— ๋ณต์ˆ˜ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กด์žฌํ•  ์ˆ˜ ์žˆ์Œ

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์˜ ์ง‘ํ•ฉ์ฒด + ๊ณ„์ธต์„ ํ‘œ์‹œํ•˜๋Š” ์˜๋ฏธ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•„๋ž˜์—๋Š” ๋ณต์ˆ˜์˜ ์Šคํ‚ค๋งˆ ์กด์žฌ

 

์Šคํ‚ค๋งˆ

  • ํด๋”, ํ‹€
  • 1๊ฐœ์˜ ์Šคํ‚ค๋งˆ ์•„๋ž˜์— ๋ณต์ˆ˜ ๊ฐœ์˜ ํ…Œ์ด๋ธ” ์กด์žฌ
  • ์Šคํ‚ค๋งˆ ๋ณ„๋กœ ์šฉ๋„๋ณ„๋กœ ๋‚˜๋ˆ„๊ฑฐ๋‚˜ ๊ถŒํ•œ ๊ด€๋ฆฌ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ

 

์˜ค๋ธŒ์ ํŠธ

  • ์ตœํ•˜์œ„ ๊ณ„์ธต
  • ๊ตฌ์„ฑ : ํ…Œ์ด๋ธ”, ์ธ๋ฑ์Šค, ์ €์žฅ ํ”„๋กœ์‹œ์ €(๋‹ค์–‘ํ•œ ํ•จ์ˆ˜๋‚˜ ์ฒ˜๋ฆฌ๋ฅผ ์ผ๊ด„๋กœ ๋‹ค๋ฃธ) ๋“ฑ

 

DBMS๋ณ„ ๊ณ„์ธต ๊ตฌ์กฐ

  • 3๊ณ„์ธต : Oracle, MySQL
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์Šคํ‚ค๋งˆ๋ฅผ ๋™์ผํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ
    • Oracle์€ 4๊ณ„์ธต์œผ๋กœ ๋˜์–ด ์žˆ์ง€๋งŒ, ์ธ์Šคํ„ด์Šค ์•„๋ž˜์— ํ•œ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์งˆ์ ์œผ๋กœ 3๊ณ„์ธต
  • 4๊ณ„์ธต : SQL Server, DB2, PostgreSQL
    • ANSI ํ‘œ์ค€ SQL
  • ๊ตฌํ˜„ ์‚ฌ์–‘์€ ๊ฐœ๋ฐœ์‚ฌ์˜ ์˜ํ–ฅ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง

4์žฅ. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ

๊ฒฌ๊ณ ํ•˜๊ณ  ๊ณ ์†์˜ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด
  1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•„ํ‚คํ…์ฒ˜
  2. ํด๋Ÿฌ์Šคํ„ฐ๋ง
  3. ๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜
  4. ์ƒค๋”ฉ

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์•„ํ‚คํ…์ฒ˜

๐Ÿ’ก ์•„ํ‚คํ…์ฒ˜๋ž€

์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋ฌผ๋ฆฌ ๋ ˆ๋ฒจ์˜ ์กฐํ•ฉ

โžก๏ธ ํ•˜๋“œ์›จ์–ด์™€ ๋ฏธ๋“ค์›จ์–ด์˜ ๊ตฌ์„ฑ = ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์„œ๋ฒ„๋ฅผ ์ค€๋น„ํ•˜๊ณ  ์–ด๋– ํ•œ ์ €์žฅ์†Œ๋‚˜ ๋„คํŠธ์›Œํฌ ๊ธฐ๊ธฐ์™€ ์กฐํ•ฉํ•  ๊ฒƒ์ธ์ง€?

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด

1. ์—ญ์‚ฌ์™€ ๊ฐœ์š”

์•„ํ‚คํ…์ฒ˜์˜ ์—ญ์‚ฌ

'์•„ํ‚คํ…์ฒ˜'๋ผ๋Š” ๋ง์€ ์ถ”์ƒ์ ์ด์–ด์„œ ๋”ฑ ๋“ค์—ˆ์„ ๋•Œ ์ด๋ฏธ์ง€๋ฅผ ๋– ์˜ฌ๋ฆฌ๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š๋‹ค.

๊ทธ๋ž˜์„œ ๊ตฌ์ฒด์ ์ธ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ด€ํ•œ ์•„ํ‚คํ…์ฒ˜์˜ ์—ญ์‚ฌ๋Š” ๋‹ค์Œ 3๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด์ง„๋‹ค.

1) Stand-alone (~1980๋…„๋Œ€)

2) ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ (1990๋…„๋Œ€~2000๋…„)

3) Web 3๊ณ„์ธต (2000๋…„~ํ˜„์žฌ)


1) Stand-alone

  • ํŠน์ง•
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋™์ž‘ํ•˜๋Š” ๋จธ์‹ ์ด LAN์ด๋‚˜ ์ธํ„ฐ๋„ท ๋“ฑ์˜ ๋„คํŠธ์›Œํฌ์— ์ ‘์†ํ•˜์ง€ ์•Š๊ณ  ๋…๋ฆฝ๋˜์–ด ๋™์ž‘ํ•˜๋Š” ๊ตฌ์„ฑ
    • DBMS์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์†Œํ”„ํŠธ์›จ์–ด๋Š” ๊ฐ™์€ DB ์„œ๋ฒ„์—์„œ ๋™์ž‘ โ†’ ์‚ฌ์šฉ์ž๋Š” ๋ฌผ๋ฆฌ์ ์œผ๋กœ DB ์„œ๋ฒ„๊ฐ€ ์„ค์น˜๋œ ์žฅ์†Œ๊นŒ์ง€ ์ ‘๊ทผํ•ด์•ผ ํ•จ
  • ์žฅ์ 
    • ๊ตฌ์ถ•์ด ๊ฐ„๋‹จํ•ด์„œ ์†Œ๊ทœ๋ชจ ์ž‘์—…์ด๋‚˜ ํ…Œ์ŠคํŠธ์— ์ ํ•ฉ
    • ๋ณด์•ˆ์ด ๋งค์šฐ ๋†’์Œ (์•„๋ฌด๋„ ๋งŒ๋‚˜์ง€ ์•Š์œผ๋ฉด ์ „์—ผ๋ณ‘ ๊ฐ์—ผ์˜ ์œ„ํ—˜์ด ๋‚ฎ์€ ๊ฒƒ๊ณผ ๊ฐ™์Œ)
  • ๋‹จ์ 
    • ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋–จ์–ด์ง„ ์žฅ์†Œ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค
    • ๋ณต์ˆ˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์ž‘์—…ํ•  ์ˆ˜ ์—†๋‹ค
    • ๊ฐ€์šฉ์„ฑ์ด ๋‚ฎ๋‹ค
    • ํ™•์žฅ์„ฑ์ด ๋ถ€์กฑํ•˜๋‹ค (์„œ๋ฒ„๊ฐ€ ์„ฑ๋Šฅ์˜ ํ•œ๊ณ„์— ๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ ๋จธ์‹  ์ž์ฒด ์„ฑ๋Šฅ์„ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์™ธ์— ๊ฐœ์„  ์ˆ˜๋‹จ์ด ์—†๋‹ค)

 

2) ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„

  • ํŠน์ง•
    • DB ์„œ๋ฒ„ 1๋Œ€์— ๋ณต์ˆ˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘์†ํ•˜๋Š” ๊ตฌ์„ฑ
    • C/S, ํด๋ผ ์„œ๋ฒ„ ๋˜๋Š” 2๊ณ„์ธต ๊ตฌ์„ฑ์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•จ
  • ํ™•์žฅ
    • ๊ธฐ์—…์ด๋‚˜ ์กฐ์ง ๋‚ด ๋‹ซํžŒ ๋„คํŠธ์›Œํฌ์—์„œ ์ด์šฉ๋˜์–ด ์™ธ๋ถ€๋ฅผ ๊ฑฐ์ณ์„œ ์ ‘์†ํ•˜๋Š” ์ผ์€ ์—†์—ˆ์Œ
    • ์กฐ์ง ๋‚ด์—์„œ ์ œํ•œ๋œ ์šฉ๋„์˜ ์‹œ์Šคํ…œ์œผ๋กœ ์ด์šฉ๋จ
    • ์ธํ„ฐ๋„ท ์‹œ๋Œ€์—๋Š” ๊ฒฐ์ •์ ์œผ๋กœ ๋ถ€์ ํ•ฉํ•œ ๋ช‡ ๊ฐ€์ง€ ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
  • ๋‹จ์ 
    • ๋ณด์•ˆ ์œ„ํ—˜ : ์ธํ„ฐ๋„ท์—์„œ ์ง์ ‘ DB์— ์ ‘์†ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
    • ๊ด€๋ฆฌ๋น„์šฉ ๋ฌธ์ œ : ํด๋ผ์ด์–ธํŠธ๋งˆ๋‹ค์˜ ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ธฐ ์–ด๋ ค์›€ โ†’ Web 3๊ณ„์ธต ์ œ์‹œ๋จ

 

3) Web 3๊ณ„์ธต

  • ์›น ์„œ๋ฒ„ + ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ + ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„
  • ์›น ์„œ๋ฒ„
    • ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ HTTP ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋กœ ๋„˜๊ธฐ๊ณ  ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜
    • Apache, IIS
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„
    • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ž‘
    • ์›น ์„œ๋ฒ„์™€ ์—ฐ๊ณ„๋œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํ•„์š”ํ•˜๋ฉด DB ์„œ๋ฒ„์— ์ ‘์†ํ•ด์„œ ๋ฐ์ดํ„ฐ ์ถ”์ถœํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์›น ์„œ๋ฒ„๋กœ ๋ฐ˜ํ™˜
    • Tomcat, WebLogic, WebSphere
  • ํŠน์ง•
    • ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ง์ ‘์ ์ธ ์ ‘์† ์š”์ฒญ โ†’ only ์›น ์„œ๋ฒ„ : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณ„์ธต์˜ ๋ณด์•ˆ์ด ๋†’์•„์ง
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์— ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ง‘์ค‘ โ†’ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ด€๋ฆฌ ๋น„์šฉ์ด ๋‚ฎ์•„์ง
    • ํ˜„์žฌ ์›น ์‹œ์Šคํ…œ์—์„œ์˜ ํ‘œ์ค€

 

2. ๊ฐ€์šฉ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์˜ ํ™•๋ณด

๐Ÿง ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ •์ง€ํ•˜์ง€ ์•Š๋Š” ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„๊นŒ?

 

์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„์—์„œ ๊ฒฌ๊ณ ํ•œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ ์€ ๊ฐ€์šฉ์„ฑ ์ด๋‹ค.

 

๊ฐ€์šฉ์„ฑ์„ ๋†’์ด๋Š” 2๊ฐ€์ง€ ์ „๋žต

  • ์‹ฌ์žฅ์ „๋žต : ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ ์‹ ๋ขฐ์„ฑ์„ ๋†’์—ฌ ์žฅ์•  ๋ฐœ์ƒ๋ฅ ์„ ์–ต์ œํ•ด์„œ ๊ฐ€์šฉ์„ฑ์„ ๋†’์ž„ (๊ณ ํ’ˆ์งˆ-์†Œ์ˆ˜์ „๋žต)
  • ์‹ ์žฅ์ „๋žต : '์‚ฌ๋ฌผ์€ ์–ธ์  ๊ฐ€ ๋ง๊ฐ€์ง„๋‹ค'๋Š” ์ „์ œ๋กœ ์—ฌ๋ถ„์„ ์ค€๋น„ํ•ด ๋‘ , ๋ฌผ๋Ÿ‰์ž‘์ „ (์ €ํ’ˆ์งˆ-๋‹ค์ˆ˜์ „๋žต)
  • ๊ด€๊ณ„
    • ํ˜„์žฌ๋Š” ์‹ ์žฅ์ „๋žต ๋…ธ์„  ์œ„์ฃผ, FT ์„œ๋ฒ„ ๋“ฑ์—์„œ๋Š” ์‹ฌ์žฅ์ „๋žต ์ด์šฉ ์ค‘
    • ์‹ฌ์žฅ์ „๋žต๊ณผ ์‹ ์žฅ์ „๋žต์€ ์ค‘์ฒฉ๋˜๋ฉฐ, ์‹ฌ์žฅ์ „๋žต๋„ ์‚ฌ์‹ค์€ ์‹ ์žฅ์ „๋žต์— ์˜ํ•ด ์‹คํ˜„๋˜๋Š” ์ค‘

๐Ÿ’ก ํด๋Ÿฌ์Šคํ„ฐ๋ž€

  • ๋™์ผํ•œ ๊ธฐ๋Šฅ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณต์ˆ˜ ๊ฐœ ์ค€๋น„ํ•ด ํ•œ ๊ฐœ์˜ ๊ธฐ๋Šฅ์„ ์‹คํ˜„
  • ์‹ ์žฅ์ „๋žต์ฒ˜๋Ÿผ ๋™์ผํ•œ ๊ธฐ๋Šฅ์˜ ์ปดํฌ๋„ŒํŠธ ๋ณ‘๋ ฌํ™”ํ•˜๋Š” ๊ฒƒ โ†’ ํด๋Ÿฌ์Šคํ„ฐ๋ง
  • ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์œผ๋กœ ์‹œ์Šคํ…œ์˜ ๊ฐ€๋™๋ฅ ์„ ๋†’์ด๋Š” ๊ฒƒ โ†’ ์—ฌ์œ ๋„(Redundancy)๋ฅผ ํ™•๋ณดํ•œ๋‹ค, ๋‹ค์ค‘ํ™”

์˜ˆ๋ฅผ ๋“ค์–ด, ์–ด๋–ค ์„œ๋ฒ„์˜ ๊ณ ์žฅ๋ฅ ์ด 10%๋ผ๊ณ  ํ•˜์ž.

์‹œ์Šคํ…œ ์ „์ฒด ์žฅ์•  ๋ฐœ์ƒ๋ฅ ์€ ์ „ ์„œ๋ฒ„๊ฐ€ ๋™์‹œ์— ๊ณ ์žฅ๋‚ฌ์„ ๋•Œ ํ•œํ•˜๊ธฐ ๋•Œ๋ฌธ์—

์„œ๋ฒ„๊ฐ€ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก ์žฅ์•  ๋ฐœ์ƒ๋ฅ ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์ค„์–ด๋“ ๋‹ค.

  • ์„œ๋ฒ„ 1๋Œ€ = 10% (0.1)
  • ์„œ๋ฒ„ 2๋Œ€ = 1% (0.1 * 0.1)
  • ์„œ๋ฒ„ 3๋Œ€ = 0.1% (0.1 * 0.1 * 0.1)

๐Ÿ’ก ๊ฐ€๋™๋ฅ  = 100% - ์žฅ์•  ๋ฐœ์ƒ๋ฅ 

 

 

๐Ÿ’ก ๋‹จ์ผ ์žฅ์• ์ ์ด๋ž€

SPOF(Single Point of Failure), ๋‹ค์ค‘ํ™”๋˜์–ด ์žˆ์ง€ ์•Š์•„์„œ ์‹œ์Šคํ…œ ์ „์ฒด ์„œ๋น„์Šค์˜ ๊ณ„์†์„ฑ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ

์‡ ์‚ฌ์Šฌ์˜ ๊ฐ•๋„๋Š” ๊ฐ€์žฅ ์•ฝํ•œ ๊ณ ๋ฆฌ์˜ ๊ฐ•๋„๋กœ ๊ฒฐ์ •๋œ๋‹ค = ๋‹จ์ผ ์žฅ์• ์ ์˜ ์‹ ๋ขฐ์„ฑ์ด ์‹œ์Šคํ…œ์˜ ์ „์ฒด์˜ ๊ฐ€์šฉ์„ฑ์„ ๊ฒฐ์ •ํ•œ๋‹ค

 

์‹ ๋ขฐ์„ฑ๊ณผ ๊ฐ€์šฉ์„ฑ

์‹ ๋ขฐ์„ฑ : ํ•˜๋“œ์›จ์–ด๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด ๊ณ ์žฅ ๋นˆ๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐœ๋… โ†’ ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•ด 

๊ฐ€์šฉ์„ฑ : ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ๋ณผ ๋•Œ ์‹œ์Šคํ…œ์„ ์–ด๋Š์ •๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ โ†’ ์‹œ์Šคํ…œ ์ „์ฒด์—์„œ ์‚ฌ์šฉ์ž ๋ˆˆ๋†’์ด์— ๋งž์ถฐ ์ƒ๊ฐ

โ†’ ์‹ ๋ขฐ์„ฑ์ด ๋‚ฎ์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค ํ•˜๋”๋ผ๋„, ๋‹ค์ค‘ํ™”ํ•œ๋‹ค๋ฉด ์‹œ์Šคํ…œ ์ „์ฒด์˜ ๊ฐ€์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

 

DB ์„œ๋ฒ„์˜ ๋‹ค์ค‘ํ™” - ํด๋Ÿฌ์Šคํ„ฐ๋ง

๐Ÿ’ก ๋‹ค์ค‘ํ™”๋ž€

๊ณ ๊ฐ€์šฉ์„ฑ(HA)์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•˜๋Š”๋ฐ,

์˜ˆ๋ฅผ ๋“ค๋ฉด DB ์„œ๋ฒ„ 2๋Œ€์—์„œ 1๋Œ€๊ฐ€ ๊ณ ์žฅ์ด ๋‚˜๋„ ๋‚˜๋จธ์ง€ 1๋Œ€๊ฐ€ ๋™์ž‘ํ•˜๋„๋ก ํ•ด์„œ ์„œ๋น„์Šค์˜ ์ •์ง€๋ฅผ ๋ง‰๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

 

DB ์„œ๋ฒ„์˜ ๋‹ค์ค‘ํ™”

DB ์„œ๋ฒ„๋Š” ์˜ค๋žซ๋™์•ˆ ํด๋Ÿฌ์Šคํ„ฐ๋ง์ด ์–ด๋ ค์šด ์ปดํฌ๋„ŒํŠธ๋กœ ์ธ์‹๋จ

๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•˜๋Š” ์˜์†(Persistence) ๊ณ„์ธต์ด๊ธฐ ๋•Œ๋ฌธ์—

 

DB์™€ ๋‹ค๋ฅธ ์„œ๋ฒ„์˜ ์ฐจ์ด

  1. ์›น ์„œ๋ฒ„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ : ์ผ์‹œ์ ์ธ ์ฒ˜๋ฆฌ
  2. DB์„œ๋ฒ„ : ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ๋ณด์กดํ•ด์•ผ ํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ฅธ ์„ฑ๋Šฅ๋„ ์š”๊ตฌ๋˜์–ด ํ•„์š” ์š”๊ฑด์ด ๋†’์Œ

DB์„œ๋ฒ„(๊ณ„์‚ฐ์ด๋‚˜ ์—…๋ฌด ๋กœ์ง ์ฒ˜๋ฆฌ)์˜ ์•„ํ‚คํ…์ฒ˜๋Š” ์ €์žฅ์†Œ(๋ฐ์ดํ„ฐ ๋ณด์กด)์™€ ๋ฌถ์–ด์„œ ์ƒ๊ฐ

๋ฐ์ดํ„ฐ๋Š” ํ•ญ์ƒ ๊ฐฑ์‹ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์ค‘ํ™”๋ฅผ ์œ ์ง€ํ•˜๋Š” ์ค‘์— ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ๋„ ์ค‘์š”ํ•˜๊ฒŒ ์˜์‹ํ•ด์•ผ ํ•จ

 

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋‹ค์ค‘ํ™”

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋‹ค์ค‘ํ™” ๊ตฌ์„ฑ = DB ์„œ๋ฒ„ ์—ฌ๋Ÿฌ๊ฐœ + ์ €์žฅ์†Œ 1๊ฐœ

 

1) Active-Active

ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋™์‹œ์— ๊ฐ€๋™

  • ์žฅ์ 
    • ์‹œ์Šคํ…œ ๋‹ค์šด ์‹œ๊ฐ„์ด ์งง์Œ : DB ์„œ๋ฒ„ ์—ฌ๋Ÿฌ ๋Œ€๊ฐ€ ๋™์‹œ์— ๋™์ž‘ํ•˜๊ณ  ์žˆ์–ด์„œ 1๋Œ€๊ฐ€ ๋‹ค์šด๋˜๋”๋ผ๋„ ๋‚จ์€ ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌ๋ฅผ ๊ณ„์†ํ•ด ์‹œ์Šคํ…œ ์ „์ฒด๊ฐ€ ์ •์ง€ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€
    • ์„ฑ๋Šฅ์ด ์ข‹์Œ : DB ์„œ๋ฒ„ ๋Œ€์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด ๋™์‹œ์— ๊ฐ€๋™ํ•˜๋Š” CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๋„ ์ฆ๊ฐ€ํ•ด์„œ ์„ฑ๋Šฅ๋„ ํ–ฅ์ƒ๋จ (์ €์žฅ์†Œ๊ฐ€ ๋ฒ„ํ‹€๋„ฅ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ฐ๋งŒํผ ํ–ฅ์ƒ๋˜์ง€ ์•Š๊ธฐ๋„..)
    • Oracle RAC(Real Application Clusters), DB2 pureScale
  • ๋‹จ์  : ๋น„์‹ธ๋‹ค

๐Ÿ’ก Heartbeat์ด๋ž€

Standby DB ์„œ๋ฒ„์—์„œ ์ผ์ • ๊ฐ„๊ฒฉ์œผ๋กœ Active DB์— ์ด์ƒ์ด ์—…๋Š”์ง€ ์กฐ์‚ฌํ•˜๊ธฐ ์œ„ํ•œ ํ†ต์‹ 

 

2) Active-Standby

ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ์ค‘ ์‹ค์ œ ๊ฐ€๋™ํ•˜๋Š” ๊ฒƒ์€ Active, ๋‚จ์€ ๊ฒƒ์€ ๋Œ€๊ธฐ(Standby)

  • Cold-Standby : ํ‰์†Œ์—๋Š” Standby DB๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋‹ค๊ฐ€ Active DB๊ฐ€ ๋‹ค์šด๋œ ์‹œ์ ์— ์ž‘๋™
  • Hot-Standby : ํ‰์†Œ์—๋„ Standby DB๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๊ตฌ์„ฑ
    • ์ „ํ™˜ ์‹œ๊ฐ„์ด ์งง์€ ๋งŒํผ ๋ผ์ด์„ ์Šค๋ฃŒ๊ฐ€ ๋†’์Œ (Active-Active๋ณด๋‹ค๋Š” ์ €๋ ด)

๊ฐ€์šฉ์„ฑ๊ณผ ์„ฑ๋Šฅ์ด ์ข‹์€ ์ˆœ์„œ

  1. Active-Actvie
  2. Active-Standby (Hot-Standby)
  3. Active-Standby (Cold-Standby)

 

DB ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ์˜ ๋‹ค์ค‘ํ™” - ๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜

๐Ÿ’ก ๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ž€

DB ์„œ๋ฒ„์™€ ์ €์žฅ์†Œ ์„ธํŠธ๋ฅผ ๋ณต์ˆ˜๋กœ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ

  • Active-Active, Active-Standby ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์„œ๋ฒ„๋Š” ๋‹ค์ค‘ํ™”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ €์žฅ์†Œ๋Š” ๋‹ค์ค‘ํ™”ํ•˜์ง€ ์•Š๋Š” ๋‹จ์ ์„ ๋ณด์™„
  • ์ €์žฅ์†Œ๋„ ๋‚ด๋ถ€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค์ค‘ํ™”๋˜์–ด ์žˆ์ง€๋งŒ(RAID), ๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์žฌ๋‚œ ์ƒํ™ฉ์„ ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•œ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์ž„
    • DB์„œ๋ฒ„์™€ ์ €์žฅ์†Œ๊ฐ€ ๋™์‹œ์— ์‚ฌ์šฉ ๋ถˆ๋Šฅ์ผ ๋•Œ, ์„œ๋น„์Šค๋ฅผ ์ง€์†ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์—์„œ ๊ฐ€์šฉ์„ฑ์ด ๋†’์€ ์•„ํ‚คํ…์ฒ˜
  • Oracle Data Guard, DB2 HADR, MySQL(๋ถ€ํ•˜ ๋ถ„์‚ฐ์šฉ์— ๊ฐ€๊นŒ์›€)

 

๐Ÿ’ก RAID๋ž€

Redundant Array of Independent Disks, ์ €์žฅ์†Œ ๋‚ด๋ถ€์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค์ค‘ํ™”ํ•˜๋Š” ๊ธฐ์ˆ 

๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ง๊ณผ ๋™์ผํ•˜๊ฒŒ ๋‹จ์ผ ์žฅ์• ์ ์„ ์ œ๊ฑฐํ•˜์—ฌ, ๋””์Šคํฌ๋ฅผ ๋ณ‘๋ ฌ๋กœ ๋‚˜์—ดํ•ด ํ•œ๊ฐœ๊ฐ€ ๋ง๊ฐ€์ ธ๋„ ๋ฐ์ดํ„ฐ ์†Œ์‹ค์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•จ

 

๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฃผ์˜ํ•  ์ 

  • Active์™€ Standby ์ €์žฅ์†Œ์˜ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ์œ ์ง€ํ•  ๊ฒƒ
    • Active ์ธก ์ €์žฅ์†Œ์˜ ๋ฐ์ดํ„ฐ - ํ•ญ์ƒ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๊ฐฑ์‹ ๋จ โ†’ Standby ์ธก ๋ฐ์ดํ„ฐ๋ฅผ ๋Š˜ ์ตœ์‹ ํ™”ํ•˜์ง€ ์•Š์œผ๋ฉด ์ •ํ•ฉ์„ฑ์ด ๊นจ์ง
    • ์ตœ์‹ ํ™”๋ฅผ ์œ„ํ•œ ๋™๊ธฐํ™”๋ฅผ ์ผ์ • ์ฃผ๊ธฐ๋กœ ํ•  ๋•Œ, ๊ฐฑ์‹  ์ฃผ๊ธฐ๋ฅผ ์–ผ๋งˆ๋กœ ํ•  ๊ฒƒ์ธ๊ฐ€์™€ ์„ฑ๋Šฅ ์‚ฌ์ด์— ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„ ๋ฐœ์ƒ
  • ๊ตฌ์„ฑ์„ ํ”ผ๋ผ๋ฏธ๋“œํ˜•์œผ๋กœ (= ์†์ž๋‚˜ ์ฆ์†์ž ์„ธํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ)
    • ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค๋ž˜ ๋˜์–ด๋„ ์ฐธ์กฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค๋Š” ์ฒ˜๋ฆฌ๋ฅผ ์†์ž๋‚˜ ์ฆ์†์ž ์„ธํŠธ์—์„œ ํ•˜์—ฌ ๋ถ€๋ชจ์— ๊ฑธ๋ฆฌ๋Š” ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐํ•จ

 

์„ฑ๋Šฅ์„ ์ถ”๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์ค‘ํ™” - Shared Nothing

๐Ÿ’ก Share Disk๋ž€

  • Active-Active ๊ตฌ์„ฑ DB = ์—ฌ๋Ÿฌ๋Œ€์˜ DB์„œ๋ฒ„๊ฐ€ 1๋Œ€์˜ ๋””์Šคํฌ ์ €์žฅ์†Œ๋ฅผ ๊ณต์œ  โ†’ ์ €์žฅ์†Œ ๋ถ€๋ถ„์—์„œ ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.
  • DB์„œ๋ฒ„๋ฅผ ๋Š˜๋ ค๋„ ์ฒ˜๋ฆฌ์œจ์ด ์–ธ์  ๊ฐ€ ํ•œ๊ณ„์ ์— ๋„๋‹ฌํ•œ๋‹ค.
    • ์ €์žฅ์†Œ๋Š” ๊ณต์œ  ์ž์›์ด๋ผ์„œ ์‰ฝ๊ฒŒ ๋Š˜๋ฆฌ๊ธฐ ์–ด๋ ต๊ณ , DB์„œ๋ฒ„ ๋Œ€์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก DB ์„œ๋ฒ„ ๊ฐ„์˜ ์ •๋ณด๊ณต์œ ๋ฅผ ์œ„ํ•œ ๋™๊ธฐํ™” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ

 

๐Ÿ’ก Share Nothing์ด๋ž€

'์•„๋ฌด๊ฒƒ๋„ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค'๋ผ๋Š” ์˜๋ฏธ๋กœ ๋„คํŠธ์›Œํฌ ์ด์™ธ์˜ ์ž์›์„ ๋ชจ๋‘ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ์‹

  • ์žฅ์  : ์„œ๋ฒ„์™€ ์ €์žฅ์†Œ ์„ธํŠธ๋ฅผ ๋Š˜๋ฆฌ๋ฉด ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ์„ ํ˜•์ ์œผ๋กœ ํ–ฅ์ƒ
  • ๋‹จ์  : ๊ฐ๊ฐ์˜ DB ์„œ๋ฒ„๊ฐ€ ๋™์ผํ•œ 1๊ฐœ์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Œ โ†’ ์ปค๋ฒ„๋ง ๊ตฌ์„ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•จ
  • Google์ด ๊ฐœ๋ฐœํ•œ Shared Nothing ๊ตฌ์กฐ = ์ƒค๋”ฉ(Sharding)

 

์ •๋ฆฌ

๊ฐ€์šฉ์„ฑ, ์‹ ๋ขฐ์„ฑ, ์žฌํ•ด๋Œ€์ฑ…, ์„ฑ๋Šฅ, ๋ณด์•ˆ ๊ฐ™์€ ๋น„๊ธฐ๋Šฅ์ ์ธ ์š”๊ฑด์— ๋Œ€ํ•ด์„œ๋„ ๊ณ ๋ ค

์•„ํ‚คํ…์ฒ˜๋Š” ๋ณ€๊ฒฝ์ด ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ์‹ ์ค‘ํžˆ ๊ฒฐ์ •

๊ณ ๊ธฐ๋Šฅ์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ฑ„์šฉํ•œ๋‹ค๋ฉด ์˜ˆ์‚ฐ, ์‹œ๊ฐ„๊ณผ ์ธ์  ์ž์› ๊ฐ™์€ ์ œ์•ฝ ์š”๊ฑด๋„ ์ƒ๊ฐ

 

 

Transaction์˜ ํŠน์„ฑ

ํŠธ๋žœ์žญ์…˜์€ DBMS์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ์ž‘์—…(unit of work)
ํŠธ๋žœ์žญ์…˜์€ ์•„๋ž˜์˜ 4๊ฐ€์ง€ ํŠน์„ฑ์ธ ACID๋ฅผ ๋ณด์žฅํ•ด์•ผ ํ•œ๋‹ค.

  • ์›์ž์„ฑ(Atomicity)
  • ์ผ๊ด€์„ฑ(Consistency)
  • ๊ฒฉ๋ฆฌ์„ฑ(Isolation)
  • ์ง€์†์„ฑ(Durability)

 

Transaction Isolation Level

๊ทธ๋Ÿฐ๋ฐ ACID๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ์ง€ํ‚ค๋‹ค ๋ณด๋ฉด ๋™์‹œ์„ฑ(Concurrency)๊ฐ€ ๋งค์šฐ ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
๊ทธ๋ž˜์„œ DB ์—”์ง„์€ ACID๋ฅผ ํฌ์ƒํ•ด์„œ ๋™์‹œ์„ฑ์„ ์–ป์„ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š”๋ฐ ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ๋ ˆ๋ฒจ์ด๋‹ค.
๊ฒฉ๋ฆฌ์„ฑ์„ ๋œ ์ง€ํ‚ค๋Š” level์„ ์‚ฌ์šฉํ• ์ˆ˜๋ก ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์€ ์ปค์ง€์ง€๋งŒ ๋™์‹œ์— ๋” ๋†’์€ ๋™์‹œ์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

 

์ผ๊ด€์„ฑ(Consistency)์™€ ๋™์‹œ์„ฑ(Concurrency)

ACID ์ค‘ ์ผ๊ด€์„ฑ์ด ์™„์ „ํžˆ ๋ณด์žฅ๋  ๊ฒฝ์šฐ, ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠน์„ฑ์ƒ ๋™์‹œ์„ฑ์ด ์ €ํ•ด(์‘๋‹ต์˜ ์ง€์—ฐ์ด ๋ฐœ์ƒ)๋  ์ˆ˜ ์žˆ๋‹ค.

  • ์ผ๊ด€์„ฑ๊ณผ ๋™์‹œ์„ฑ -> ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„ ๊ด€๊ณ„
    • ์ผ๊ด€์„ฑ๊ณผ ๋™์‹œ์„ฑ์˜ ๊ท ํ˜•์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.
  • ๋™์‹œ์„ฑ ์ œ์–ด = ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ํŠธ๋žœ์žญ์…˜์˜ ์ˆ˜๋ฅผ ์ตœ๋Œ€ํ™”ํ•˜๋ฉด์„œ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ
    • ๋‚™๊ด€์  ๋™์‹œ์„ฑ ์ œ์–ด
      ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์ˆ˜์ •ํ•˜์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ๊ฐ€์ •ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์‹œ์ ์— ๋ฝ์„ ๊ฑธ์ง„ ์•Š์ง€๋งŒ ์ˆ˜์ •ํ•˜๋Š” ์‹œ์ ์—์„œ ๊ธฐ์กด์— ์ฝ์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์— ์˜ํ•ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ์žฌ๊ฒ€์‚ฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
    • ๋น„๊ด€์  ๋™์‹œ์„ฑ ์ œ์–ด
      ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์ˆ˜์ •ํ•  ๊ฒƒ์œผ๋กœ ๊ฐ€์ •ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์‹œ์ ์—์„œ ๋ฝ์„ ๊ฑธ๊ณ  ์กฐํšŒ, ๊ฐฑ์‹  ์™„๋ฃŒ ์‹œ๊นŒ์ง€ ๋ฝ์„ ์œ ์ง€ํ•œ๋‹ค.

 

๋ฝ(Lock)

ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ์˜ ์ˆœ์ฐจ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•

ํŠธ๋žœ์žญ์…˜์— ๊ฑธ๋ฆฐ Lock์€ ํŠธ๋žœ์žญ์…˜์ด commit ๋˜๊ฑฐ๋‚˜ rollback ๋  ๋•Œ ํ•จ๊ป˜ unlock ๋œ๋‹ค.

  • Shared Lock (Read Lock), ๊ณต์œ ๋ฝ
    ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ์‚ฌ์šฉ๋˜๋Š” Lock์œผ๋กœ ๊ณต์œ ๋ฝ์€ ๊ณต์œ ๋ฝ๋ผ๋ฆฌ ๋™์‹œ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. Write๋Š” ๋ถˆํ—ˆํ•˜๊ณ , Read๋Š” ํ•ด๋‹น Critical Section์— ์ ‘๊ทผ์ด ํ—ˆ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ
    (Read Lock์€ Read์—๋งŒ ์—ด๋ ค์žˆ๋Š” ๊ฒƒ)
  • Exclusive Lock (Write Lock), ๋ฐฐํƒ€๋ฝ
    ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” Lock์œผ๋กœ ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋œ๋‹ค. Lock์ด ํ•ด์ œ๋  ๋•Œ๊นŒ์ง€ ์กฐํšŒ๋ฅผ ํฌํ•จํ•œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์€ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

 

๊ฒฉ๋ฆฌ ๋ ˆ๋ฒจ๊ณผ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ

- Read Uncommitted

๊ฐ€์žฅ ๋‚ฎ์€ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์œผ๋กœ ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

- Read Committed

์ปค๋ฐ‹๋œ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, Dirty Read๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

- Repetable Read

ํ•œ ๋ฒˆ ์กฐํšŒํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์กฐํšŒํ•ด๋„ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์กฐํšŒ๋œ๋‹ค. Dirty Read, Non Repeatable Read๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

- Serializable

๊ฐ€์žฅ ์—„๊ฒฉํ•œ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์œผ๋กœ Dirty Read, Non Repeatable Read, Phantom Read ๋ชจ๋‘ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

โœ… ๊ณต์‹๋ฌธ์„œ
4.4.3 mysql_ssl_rsa_setup โ€” SSL/RSA ํŒŒ์ผ ์ƒ์„ฑ
6.3.3.1 MySQL์„ ์‚ฌ์šฉํ•˜์—ฌ SSL ๋ฐ RSA ์ธ์ฆ์„œ ๋ฐ ํ‚ค ์ƒ์„ฑ


SSL์ด๋ž€?

1994๋…„ Nescape ์‚ฌ์—์„œ ๊ฐœ๋ฐœํ•œ ๋ณด์•ˆ๊ธฐ์ˆ ๋กœ Secure Sockets Layer์˜ ์•ฝ์ž์ด๋‹ค.

ํ˜„์žฌ๋Š” ํ‘œ์ค€ ๋ณด์•ˆ๊ธฐ์ˆ ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์œผ๋ฉฐ SSL์„ ์‚ฌ์šฉ์‹œ ์Šค๋‹ˆํ•‘๊ณผ ํ”ผ์‹ฑ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

SSL/RSA ํŒŒ์ผ ์ƒ์„ฑ

MySQL ์„ค์น˜์‹œ ๋ฒ„์ „๋ณ„๋กœ SSL ํ•„์ˆ˜ ์—ฌ๋ถ€๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

  • SSL์„ ์‚ฌ์šฉํ•˜๋Š” ๋ณด์•ˆ ์—ฐ๊ฒฐ์„ ์ง€์›ํ•˜๊ณ , ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ ์—ฐ๊ฒฐ์—์„œ RSA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ณด์•ˆ ์•”ํ˜ธ ๊ตํ™˜์„ ์ง€์›ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ SSL ์ธ์ฆ์„œ ๋ฐ ํ‚ค ํŒŒ์ผ๊ณผ RSA ํ‚ค ์Œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค(ํ•ด๋‹น ํŒŒ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ).
  • ๊ธฐ์กด SSL ํŒŒ์ผ์ด ๋งŒ๋ฃŒ๋œ ๊ฒฝ์šฐ ์ƒˆ SSL ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

mysql_ssl_rsa_setup

  • openssl ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋จธ์‹ ์— OpenSSL์ด ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํ•„์š”ํ•œ ํŒŒ์ผ์„ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•ด์ฃผ์–ด์„œ SSL ์‚ฌ์šฉ ์žฅ๋ฒฝ์„ ๋‚ฎ์ถฐ์ค€๋‹ค.
    • ๊ทธ๋Ÿฌ๋‚˜ mysql_ssl_rsa_setup์— ์˜ํ•ด ์ƒ์„ฑ๋œ ์ธ์ฆ์„œ๋Š” ์ž์ฒด ์„œ๋ช…์ด ๋˜์–ด ์žˆ์–ด ํฌ๊ฒŒ ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค.
    • mysql_ssl_rsa_setup์— ์˜ํ•ด ์ƒ์„ฑ๋œ ์ธ์ฆ์„œ๋กœ ๊ฒฝํ—˜์„ ์Œ“์€ ํ›„, ๋“ฑ๋ก๋œ ์ธ์ฆ ๊ธฐ๊ด€์—์„œ CA ์ธ์ฆ์„œ๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

SSL ๋ฐ RSA ์ธ์ฆ์„œ ๋ฐ ํ‚ค ์ƒ์„ฑ

OpenSSL์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ๋œ MySQL ๋ฐฐํฌํŒ์˜ ๊ฒฝ์šฐ, MySQL ์„œ๋ฒ„์— ์‹œ์ž‘์‹œ ๋ˆ„๋ฝ๋œ SSL ๋ฐ RSA ํŒŒ์ผ ์ž๋™ ์ƒ์„ฑ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค.

 

 

๊ฒฐ๋ก 

8.0.4 ๋ฒ„์ „๋ถ€ํ„ฐ Enterprise Edition๊ณผ Community Edition ๋ชจ๋‘ OpenSSL๋กœ ํ†ตํ•ฉ๋˜์–ด 8.0.4 ์ด์ƒ ๋ฒ„์ „์„ ์„ค์น˜ํ•  ๊ฒฝ์šฐ OpenSSL ์ƒ์„ฑ ๊ณผ์ •์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.

+ Recent posts