SQL - RLS(Row Level Security) with Drizzle
ยท
๐Ÿงฉ SQL
โœ… RLS๋ฅผ Drizzle๋กœ ์ž‘์„ฑํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ์ด์ 1. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.2. ์ž‘์„ฑํ•œ ๊ทœ์น™๋“ค์ด SQL migration ํŒŒ์ผ์— ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์—, git์œผ๋กœ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.3. Drizzle์—๋Š” ํŠน๋ณ„ํžˆ Supabase์™€ ํ•จ๊ป˜ RLS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋”ฐ๋กœ ๋งˆ๋ จ๋˜์–ด ์žˆ๋‹ค. (์ข‹์€ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋“ค์ด ์žˆ์–ด์„œ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.) https://orm.drizzle.team/docs/rls#using-with-supabase Drizzle ORM - Row-Level Security (RLS)Drizzle ORM is a lightweight and performant TypeScript ORM with developer experience in mind.orm.driz..
SQL - Supabase PostgreSQL - Cron Job
ยท
๐Ÿงฉ SQL
โœ… Cron Job์ด๋ž€?Cron Job: ์ •ํ•ด์ง„ ์‹œ๊ฐ„์ด๋‚˜ ์ฃผ๊ธฐ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ž‘์—… ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด"๋งค์ผ ์˜ค์ „ 9์‹œ์— ์ด ์ž‘์—…์„ ์‹คํ–‰ํ•ด์ค˜”์ฒ˜๋Ÿผ ์˜ˆ์•ฝํ•ด ๋†“๋Š” ์ž๋™ ์ž‘์—… โœ… Supabase์—์„œ์˜ ์‚ฌ์šฉ๋ฒ•Extension ํ™œ์„ฑํ™” Database์˜ Extensions ์ค‘์—์„œ pg_cron๊ณผ pg_net์„ ํ™œ์„ฑํ™”ํ•œ๋‹ค. pg_cron: ์ž‘์—…์„ ์˜ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์คŒpg_net: Database์—์„œ HTTP ์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ Cron Job ์ƒ์„ฑ Cron Job ์ƒ์„ฑ ๋!
SQL - PostgreSQL - Security Definer View
ยท
๐Ÿงฉ SQL
โœ… Security Definer View๋ž€?๋ทฐ๋ฅผ ์กฐํšŒํ•œ ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ์ด ์•„๋‹ˆ๋ผ, ๋ทฐ๋ฅผ ๋งŒ๋“  ์†Œ์œ ์ž์˜ ๊ถŒํ•œ์„ ๊ธฐ์ค€์œผ๋กœ ์›๋ณธ ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜๋Š” ๋ทฐRLS๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋‹ค๋ฅธ ๋ณด์•ˆ ์กฐ์น˜๋ฅผ ์ทจํ–ˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๋งŒ์•ฝ View๊ฐ€ Security Definer View๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค๋ฉด, ๋ชจ๋“ ๊ฒŒ ๋ฌด์šฉ์ง€๋ฌผ์ด ๋œ๋‹ค. ์‚ฌ์šฉ์ž ๊ถŒํ•œ์œผ๋กœ RLS๋ฅผ ์ ์šฉ์‹œ์ผœ ์ ‘๊ทผํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด View์— ๋‹ค์Œ ์ฝ”๋“œ๋งŒ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.WITH (security_invoker = true)CREATE OR REPLACE VIEW community_post_list_viewWITH (security_invoker = true)AS SELECT posts.post_id, posts.title, posts.created_at, topics...
SQL - PostgreSQL - RLS(Row Level Security)
ยท
๐Ÿงฉ SQL
โœ… RLS(Row Level Security)RLS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ž์ฒด์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ํ–‰์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. ํ…Œ์ด๋ธ”์—์„œ RLS๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์•„๋ฌด๋Ÿฐ policy๋„ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•ด๋‹น ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.(deny all) using VS with checkusing์€ ์ด ํ–‰์„ ๊ฑด๋“œ๋ฆด ๊ถŒํ•œ์ด ์žˆ๋Š”๊ฐ€?with check์€ ์ด ๊ฒฐ๊ณผ๊ฐ€ ํƒ€๋‹นํ•œ๊ฐ€?๊ธฐ์กด ํ–‰ ↓USING ๊ฒ€์‚ฌ ↓ ํ†ต๊ณผUPDATE ์ ์šฉ ↓WITH CHECK ๊ฒ€์‚ฌ ↓ ํ†ต๊ณผ์ €์žฅ๋งŒ์•ฝ using์—์„œ ๊ถŒํ•œ ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•ด์„œ ์ˆ˜์ •์„ ํ•œ๋‹ค๊ณ  ํ•ด๋„ ํ•ด๋‹น ์ˆ˜์ • ๊ฒฐ๊ณผ๊ฐ€ with check์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ’์ด๋ฉด ์ €์žฅ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.
SQL - PostgreSQL - CREATE OR REPLACE๊ฐ€ ๊ฐ€๋Šฅํ•  ๋•Œ์™€ ๋ถˆ๊ฐ€๋Šฅํ•  ๋•Œ
ยท
๐Ÿงฉ SQL
โœ… CREATE OR REPLACE๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•  ๋•Œ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์— ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. - ๋ฐ˜ํ™˜ ํƒ€์ž…(RETURNS)๋ณ€๊ฒฝ- ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž… ๋ณ€๊ฒฝ- ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ๋ณ€๊ฒฝ ์˜ˆ๋ฅผ ๋“ค์–ดhandle_new_user()↓handle_new_user(user_id uuid)์ฒ˜๋Ÿผ ๋ฐ”๊พธ๋ฉด CREATE OR REPLACE๋กœ๋Š” ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋Ÿด ๋•Œ๋Š”DROP FUNCTION์œผ๋กœ ์ง€์šฐ๊ณ  ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. CASCADEDROP FUNCTION IF EXISTS public.handle_new_user() CASCADE;๋งŒ์•ฝ ํ•ด๋‹น Function์ด Trigger์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค๋ฉด ์˜์กด(depend)์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— CASCADE๋กœ ํ•ด๋‹น Trigger๊นŒ์ง€ ์‚ญ์ œํ•ด์ค˜์•ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
SQL - PostgreSQL - SET search_path = ''๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?
ยท
๐Ÿงฉ SQL
โœ… SET search_path = ''๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?CREATE FUNCTION public.notify_follow()RETURNS TRIGGERSECURITY DEFINER SET search_path = ''LANGUAGE plpgsqlAS $$BEGIN INSERT INTO public.notifications (type, source_id, target_id) VALUES ('follow', NEW.follower_id, NEW.following_id); RETURN NEW;END;$$;CREATE TRIGGER notify_follow_triggerAFTER INSERT ON public.followsFOR EACH ROWEXECUTE FUNCTION public.noti..
SQL - PostgreSQL - RETURNS TRIGGER๋Š” Trigger๋ฅผ returnํ•œ๋‹ค๋Š” ๋œป์ผ๊นŒ?
ยท
๐Ÿงฉ SQL
โœ… RETURNS TRIGGER๋Š” Trigger๋ฅผ returnํ•œ๋‹ค๋Š” ๋œป์ผ๊นŒ?RETURNS TRIGGER๋Š” “Trigger ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค”๋Š” ๋œป์ด ์•„๋‹ˆ๋ผ, “Trigger์—์„œ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜”๋ผ๋Š” ํ•จ์ˆ˜์˜ ํƒ€์ž…์„ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰ ๋ฐ˜ํ™˜๊ฐ’์˜ ์ž๋ฃŒํ˜• ์ด๋ฆ„์ด TRIGGER์ธ ๊ฒƒ์ด์ง€, ์‹ค์ œ๋กœ Trigger ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  RETURNS TRIGGER์ธ ํ•จ์ˆ˜๋Š” ๋ฌธ๋ฒ•์ƒ ๋ฐ˜๋“œ์‹œRETURN NEW;RETURN OLD;RETURN NULL;์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.CREATE FUNCTION public.notify_follow()RETURNS TRIGGERSECURITY DEFINER SET search_path = ''LANGUAGE plpgsqlAS $$BEGIN INSERT INTO p..
SQL - Drizzle Self Reference
ยท
๐Ÿงฉ SQL
โœ… Self Referenceexport const postReplies = pgTable("post_replies", { post_reply_id: bigint({ mode: "number" }) .primaryKey() .generatedAlwaysAsIdentity(), post_id: bigint({ mode: "number" }).references(() => posts.post_id, { onDelete: "cascade", }), parent_id: bigint({ mode: "number" }).references( (): AnyPgColumn => postReplies.post_reply_id, // AnyPgColumn์€ ์ž์ฒด ์ฐธ์กฐ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”(ํƒ€์ž… ์•ˆ..
SQL - Supabase & Drizzle
ยท
๐Ÿงฉ SQL
โœ… Installationnpm i drizzle-orm postgresnpm i -D drizzle-kit import { drizzle } from "drizzle-orm/postgres-js"; https://orm.drizzle.team/docs/connect-supabase Drizzle ORM - SupabaseDrizzle ORM is a lightweight and performant TypeScript ORM with developer experience in mind.orm.drizzle.team โœ… Setupimport { defineConfig } from "drizzle-kit";export default defineConfig({ schema: "./app/features/*..
SQL - Drizzle(ORM)
ยท
๐Ÿงฉ SQL
โœ… Drizzle์ด๋ž€?Javascript ๋˜๋Š” Typescript๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ORM(Object Relational Mapping)(Python ์ง€์› X)SQL ์œ„์— ์•„์ฃผ ์–‡์€ ๋ ˆ์ด์–ด๋ฅผ ์”Œ์›Œ ๋†“์€ ๊ฒƒ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.(VSCode์˜ ์ž๋™์™„์„ฑ, Typescript์˜ ํƒ€์ž… ๊ฐ€๋“œ๊นŒ์ง€ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.) Python์— ๋น„ํ•ด Javascript๋Š” ๋ชจ๋“  ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๊ตฌํ˜„ํ•ด์•ผ ํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ŠคํŽ™ ๊ฐ™์€ ๊ฑด ์—†๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“œ๋ผ์ด๋ฒ„ ์ข…๋ฅ˜๋Š” ๋˜๊ฒŒ ๋งŽ๋‹ค.Drizzle์„ ์ด์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๊ฒ‰์œผ๋กœ ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š๊ฒŒ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์–ด๋Œ‘ํ„ฐ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ DB์™€ ํ†ต์‹ ํ•œ๋‹ค. (์–ด๋Œ‘ํ„ฐ๋ฅผ ์„ค์น˜ํ•˜๋ฉด Drizzle์ด ๊ทธ ์–ด๋Œ‘ํ„ฐ๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•œ๋‹ค.) โœ… InstallationDrizzle ORMbun a..
SQL - SQL with Python
ยท
๐Ÿงฉ SQL
โœ… Python ํ™˜๊ฒฝ์—์„œ SQLite ์‚ฌ์šฉํ•˜๊ธฐPlaceholderimport sqlite3connection = sqlite3.connect("users.db")cursor = connection.cursor()def init_table(): cursor.execute( """ CREATE TABLE users ( user_id integer primary key autoincrement, username text not null, password text not null ); """ ) cursor.execute( """ insert into users (username, password) ..
SQL - SQL Injection
ยท
๐Ÿงฉ SQL
โœ… SQL Injection์ด๋ž€?์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์ด์šฉํ•ด “์˜๋„ํ•˜์ง€ ์•Š์€ SQL ์ฟผ๋ฆฌ”๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ณต๊ฒฉ์˜ˆ๋ฐฉ ๋ฐฉ๋ฒ•: String Interpolation์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.import sqlite3connection = sqlite3.connect("users.db")cursor = connection.cursor()def init_table(): cursor.execute( """ CREATE TABLE users ( user_id integer primary key autoincrement, username text not null, password text not null ); """ ) cursor.execute( ..
Redis - Get Started
ยท
๐ŸŽฏ Redis
โœ… Redis๋ž€?(Remote Dictionary Service)์†๋„๊ฐ€ ์–ด์–ด์–ด์–ดใ…“ใ…์ฒญ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค.๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋‹ค๋ฅธ SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. Redis๋Š” Key Value In-memory ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‹ค.(SQL, MongoDB ๋“ฑ์€ ๋””์Šคํฌ์—์„œ ๊ฐ’์„ ์ฝ์–ด์˜ค๋А๋ผ ์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆฌ๋‹ค.) ์žฅ์ : ๋น ๋ฅด๋‹ค.๋‹จ์ : ๋น„์‹ธ๋‹ค. ์šฉ๋Ÿ‰์ด ํ•˜๋“œ ๋””์Šคํฌ์ฒ˜๋Ÿผ ์ถฉ๋ถ„ํ•˜์ง€๊ฐ€ ์•Š๊ธฐ์—, ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋“ค์„ ๋ณด์กฐํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค. โœ… ์„ค์น˜brew install redisbrew services start redis โœ… Usecase๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์„œ cli๋ฅผ ํ™œ์„ฑํ™”ํ•œ๋‹ค.redis-cli GET, SETโ•ฐโ”€ redis-cli ..
SQL - PostgreSQL, Extensions
ยท
๐Ÿงฉ SQL
โœ… ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ PostgreSQL์˜ Extensions ๋ชฉ๋ก ๋ณด๋Š” ๋ฒ•SELECT *FROM pg_available_extensions; โœ… Extension ํ™œ์„ฑํ™” ๋ฐฉ๋ฒ•CREATE EXTENSION hstore; โœ… hstoreKey, Value ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.(ํ˜„์žฌ๋Š” JSONB๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.) CREATE TABLE users ( user_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, prefs hstore);INSERT INTO users (prefs)VALUES ('theme => dark, lang => kr, notifications => off'), ('theme => light, lang => es, notificat..
SQL - PostgreSQL, JSON Column
ยท
๐Ÿงฉ SQL
โœ… JSON Column์ด๋ž€?ํ…Œ์ด๋ธ” ์•ˆ์— JSON ํ˜•์‹ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•˜๋Š” ColumnMySQL๊ณผ PostgreSQL ๋ชจ๋‘ JSON ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ์ €์žฅํ•˜๋Š” ๊ฑธ ํ—ˆ์šฉํ•œ๋‹ค. SQL์ด๋ฉด์„œ ๋™์‹œ์— NoSQL์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค. ์‚ฌ์šฉ ์‹œ๊ธฐ: ์œ ์—ฐํ•œ ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•  ๋•Œ(์–ด๋– ํ•œ column์— ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€์•ผ ํ•  ์ง€ ๋ชจ๋ฅผ ๋•Œ)์œ ์—ฐ์„ฑ↑, ๊ตฌ์กฐ ์•ˆ์ •์„ฑ↓ โœ… JSON, JSONB๊ฑฐ์˜ ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.์ฐจ์ด์ ์€ ํšจ์œจ์„ฑ์ด๋‹ค.JSON vs JSONBJSON: ์ž…๋ ฅ๋œ text๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด์„œ ์ €์žฅํ•จJSONB: ๋ถ„ํ•ด๋œ Binary ํ˜•์‹์œผ๋กœ ์ €์žฅํ•จ(๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์†๋„๊ฐ€ ์•ฝ๊ฐ„ ๋А๋ ค์ง„๋‹ค. JSON์—์„œ Binary๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ, ์ฒ˜๋ฆฌ ์†๋„๋Š” ์—„์ฒญ ๋นจ๋ผ์ง, ๋Œ€๋ถ€๋ถ„ JSONB ์„ ํ˜ธ) CREATE TABLE users ( u..
SQL - PostgreSQL, DCL(Data Control Language)
ยท
๐Ÿงฉ SQL
โœ… DCL(Data Control Language)DDL: Data Definition LanguageDML: Data Manipulation LanguageTCL: Transaction Control LanguageDCL: ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐํšŒํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์–ธ์–ด role ์ƒ์„ฑCREATE ROLE marketerWITH login PASSWORD 'marketing4ever';๋น„๋ฐ€๋ฒˆํ˜ธ OCREATE ROLE editor;๋น„๋ฐ€๋ฒˆํ˜ธ X role์— ๊ถŒํ•œ ๋ถ€์—ฌGRANT SELECT ON movies TO marketer;์ฝ๊ธฐ ๊ถŒํ•œ๋งŒ ์žˆ์Œ GRANTSELECT,UPDATE,INSERT ON movies TO marketer;GRANTSELECT, INSERT ON st..
SQL - PostgreSQL, Transaction, Save Point, Isolation Level, Phenomena
ยท
๐Ÿงฉ SQL
โœ… Transaction์ด๋ž€?Transaction = ์—ฌ๋Ÿฌ ์ž‘์—…์„ “ํ•˜๋‚˜์˜ ๋ฌถ์Œ”์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‹จ์œ„ ์—ฌ๋Ÿฌ SQL ์ฟผ๋ฆฌ์— ๊ฑธ์ณ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ(integrity)์„ ๊ฐ•์ œํ•œ๋‹ค.์€ํ–‰, ํ•ญ๊ณต์‚ฌ, ์˜จ๋ผ์ธ ํ‹ฐ์ผ“ ์˜ˆ๋งค ์‹œ์Šคํ…œ ๋“ฑ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์‚ฐ์—…๋“ค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค. Commit; ๋˜๊ธฐ ์ „๊นŒ์ง€ ํ•œ Transaction์—์„œ ๋งŒ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ ๋‹ค๋ฅธ Transaction์—์„œ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.(SELECT, UPDATE, DELETE ๊ฐ™์€ ๋ฌธ๋“ค์€ ์‚ฌ์‹ค ํ•˜๋‚˜์˜ ์ž‘์€ Transaction๋“ค์ด๋‹ค.)Transaction์˜ 4๊ฐ€์ง€ ์„ฑ์งˆ Transaction ์‚ฌ์šฉ๋ฒ•BEGIN;UPDATE accountsSET balance = balance - 500WHERE account_holder = 'nico';SELECT *FROM ..
SQL - PostgreSQL, Extension(plpython3)
ยท
๐Ÿงฉ SQL
โœ… pl(procedural language)python3ํŒŒ์ด์ฌ์œผ๋กœ procedure๋‚˜ function์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์„ค์น˜PostgreSQL์„ ์„ค์น˜ํ•  ๋•Œ ๊ฐ™์ด ์„ค์น˜ ๋˜์—ˆ๋˜ Application Stack Builder๋ฅผ ์‹คํ–‰ ์‹œํ‚จ๋‹ค.Application Stack Builder๋กœ PostgreSQL Extension์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹คํ–‰์‹œํ‚ค๊ณ  EDB Language Pack์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋Š”๋‹ค. ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰์‹œ์ผœ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ํ™œ์„ฑํ™” ์‹œํ‚จ๋‹ค.CREATE EXTENSION plpython3u; *์ฃผ์˜*์„ค์น˜ ๋˜์–ด ์žˆ๋Š” python, postgreSQL์˜ ํ™˜๊ฒฝ์ด ๋งž์•„์•ผ ํ•œ๋‹ค.๋‘˜ ๋‹ค ์‚ฌ์ดํŠธ์—์„œ ์„ค์น˜ํ•œ ํ™˜๊ฒฝ์ด๊ฑฐ๋‚˜, ๋‘˜ ๋‹ค homebrew๋กœ ์„ค์น˜ํ•œ ํ™˜๊ฒฝ์ด์–ด์•ผ ํ•œ๋‹ค.์ด ๋•Œ, homebr..
SQL - PostgreSQL, Function, Procedure
ยท
๐Ÿงฉ SQL
โœ… Function & ProcedureFunction๊ณผ Procedure๋Š” Database Object๋‹ค.์ด ๋‘˜์„ ์ด์šฉํ•˜๋ฉด ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” SQL๊ตฌ๋ฌธ์„ ์„ธํŠธ๋กœ ์บก์Аํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.(์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ) โœ… FunctionFunction์€ ๋ฐ˜๋“œ์‹œ value๋ฅผ returnํ•œ๋‹ค.(Procedure์™€์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ) DML(Data Manipulation Language) Command์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒCREATE OR REPLACE FUNCTION hello_world ()RETURNS TEXT AS$$ SELECT 'hello_world';$$LANGUAGE SQL;LANGUAGE ํ‚ค์›Œ๋“œ๋กœ ์–ด๋–ค ์–ธ์–ด๋กœ Function์ด ์ž‘์„ฑ ๋˜์—ˆ๋Š”์ง€ ์ ์–ด์ค˜์•ผ ํ•œ๋‹ค. CREATE OR REPLACE FUNCTION ..
SQL - PostgreSQL, UNNEST, DISTINCT, FULL OUTER JOIN
ยท
๐Ÿงฉ SQL
โœ… UNNESTSELECT UNNEST(string_to_array(genres, ','))FROM moviesGROUP BY genres; ,๋กœ ๊ตฌ๋ถ„๋˜์–ด ์—ฌ๋Ÿฌ ์žฅ๋ฅด๋“ค์ด ํ•œ string์œผ๋กœ ์ด์–ด์ ธ ์žˆ๋˜ genres column์„ string_to_array(genres, ',') ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ,๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ณ„ํ•œ๋‹ค์Œ array๋กœ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ array๋ฅผ UNNEST()๋ฅผ ์ด์šฉํ•˜์—ฌ array๋ฅผ ํ’€์–ด์„œ ๋ชจ๋“  genre ๊ฐ’๋“ค์ด ํ•œ row์— ํ•˜๋‚˜์˜ genre๋งŒ ๊ฐ€์ง€๋„๋ก ๋ฐ”๊ฟจ๋‹ค. โœ… DISTINCTSELECT DISTINCT UNNEST(string_to_array(genres, ','))FROM moviesGROUP BY genres;๊ทธ ํ›„ DISTINCT ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ค‘๋ณต๋˜๋Š” ๊ฐ’๋“ค์„ ์ „๋ถ€ ์ง€์šด..
SQL - PostgreSQL, Data Types
ยท
๐Ÿงฉ SQL
โœ… Data TypesCREATE TYPE gender_type AS ENUM ('male', 'female');CREATE TABLE users ( -- 0 2KB TOAST (the oversized-attribute storage technique) bio TEXT, profile_photo BYTEA, -- SMALLINT -- Signed: -32,768 to 32,767 -- INTGER -- Signed: -2,147,483,648 to 2,147,483,647 -- BIGINT -- Signed: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 -- SMALLSERIAL (1 to 32,767) -- SERIAL (1 to 2,147,4..
SQL - PostgreSQL, pgAdmin
ยท
๐Ÿงฉ SQL
โœ… pgAdmin์ด๋ž€?๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ GUI ํ”„๋กœ๊ทธ๋žจ โœ… ConnectionpgAdmin์—์„œ Databases๋ฅผ ์šฐํด๋ฆญํ•ด ์ƒˆ Database๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค. pgAdmin์—์„œ PostgreSQL 18์„ ์šฐํด๋ฆญํ•ด์„œ properties๋ฅผ ์—ฐ๋‹ค. ๊ทธ ๋‹ค์Œ Beekeeper Studio๋“ , TablePlus๋“  DBeaver๋“  ์—ด์–ด์„œ PostgreSQL์„ ์„ ํƒ. Test๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ์ด๋ ‡๊ฒŒ ์ดˆ๋ก์ƒ‰์œผ๋กœ ๋œจ๋ฉด ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋œป.Connect๋ฅผ ๋ˆŒ๋Ÿฌ ์—ฐ๊ฒฐํ•ด์ฃผ๋ฉด ๋
SQL - PostgreSQL ์„ค์น˜(๊ณต์‹ ์‚ฌ์ดํŠธ, Homebrew)
ยท
๐Ÿงฉ SQL
โœ… ๊ณต์‹ ์‚ฌ์ดํŠธ ์„ค์น˜https://www.postgresql.org/download PostgreSQL: Downloads www.postgresql.org ๊ณต์‹ ์‚ฌ์ดํŠธ์—์„œ ์„ค์น˜ํ•˜๋ฉด1. PostgreSQL Server2. psql(CLI)3. pgAdmin(MySQL์˜ MySQLWorkbench ๊ฐ™์€ GUI ํ”„๋กœ๊ทธ๋žจ)4. Stack Builder(ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜)์ด๋Ÿฐ ์ถ”๊ฐ€ ํ”„๋กœ๊ทธ๋žจ๋“ค๊นŒ์ง€ ๊ฐ™์ด ์„ค์น˜๋œ๋‹ค. Homebrew๋กœ PostgreSQL Server๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋‚˜๋จธ์ง€๋Š” ์ง์ ‘ ์„ค์น˜ํ•ด์ค˜์•ผ ํ•œ๋‹ค. โœ… Homebrew ์„ค์น˜์ด๋ฏธ ๊ณต์‹ ์‚ฌ์ดํŠธ์—์„œ PostgreSQL์„ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด ์‚ญ์ œํ•˜๊ณ  Homebrew ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค. *์ฃผ์˜*Homebrew๋กœ ์„ค์น˜ํ•˜๋ฉด plpython3u extension์„ ..
SQL - MySQL, Full Text Index
ยท
๐Ÿงฉ SQL
โœ… Full Text Index๋ž€?๋ฌธ์žฅ(ํ…์ŠคํŠธ) ์•ˆ์—์„œ ๋‹จ์–ด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ์ธ๋ฑ์ŠคLIKE๋Š” ๋ฌธ์ž์—ด ๋น„๊ตFULLTEXT๋Š” “๊ฒ€์ƒ‰ ์—”์ง„ ๋ฐฉ์‹” โœ… UsageNatural Language Mode์ฃผ์–ด์ง„ text์™€ ์—ฐ๊ด€์„ฑ์ด ๋†’์€ ๊ฒฐ๊ณผ๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹์˜๋ฏธ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด the, a ๊ฐ™์€ ๋ถˆ์šฉ์–ด๋Š” ๊ฒ€์ƒ‰์—์„œ ์ œ์™ธ๋จCREATE FULLTEXT INDEX idx_overview ON movies (overview);SELECT title, overviewFROM moviesWHERE MATCH(overview) AGAINST ('the food'); Boolean Mode• ํŠน์ˆ˜ ๋ฌธ์ž(Operator):โ–ซ ‎`+` : ํ•ด๋‹น ๋‹จ์–ด๊ฐ€ ๋ฐ˜๋“œ์‹œ ํฌํ•จ๋˜์–ด์•ผ ํ•จ (AND)โ–ซ ‎`-` : ํ•ด๋‹น ๋‹จ์–ด๊ฐ€ ๋ฐ˜๋“œ์‹œ ํฌํ•จ๋˜๋ฉด ์•ˆ ๋จ..
SQL - MySQL, Event & Trigger
ยท
๐Ÿงฉ SQL
โœ… Event & TriggerEventMySQL์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ŠฅDatabase๊ฐ€ ํ•ด์•ผ ํ•  ์ž‘์—…๋“ค์„ ์Šค์ผ€์ค„๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค.ex) ํŠน์ • ์กฐ๊ฑด์— ํ•ด๋‹น๋˜๋Š” row๋“ค์„ ๋งค์ฃผ ์ˆ˜์š”์ผ ์˜คํ›„ 3์‹œ์— ์‚ญ์ œํ•œ๋‹ค. PostgreSQL์—์„œ๋„ ์ง€์›ํ•˜์ง€๋งŒ ํ™•์žฅํ”„๋กœ๊ทธ๋žจ์„ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค.SQLite์—์„œ๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. TriggerDatabase์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ์— ๋ฐ˜์‘ํ•  ์ˆ˜ ์žˆ๋‹ค.ex) ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ row๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์ „์— ๊ทธ ์‚ญ์ œ์— ๋Œ€ํ•œ log๋ฅผ log ํ…Œ์ด๋ธ”์— ๋งŒ๋“ ๋‹ค. MySQL, PostgreSQL, SQLite ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ฐ์ดํ„ฐ ์—†์ด ๊ตฌ์กฐ๋งŒ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” ๋ฒ•CREATE TABLE archived_movies LIKE movies; โœ… Event• ๊ด€๋ฆฌโ–ซ ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋ ค๋ฉด: ‎`SHOW..
SQL - MySQL, UNION
ยท
๐Ÿงฉ SQL
โœ… Union์ด๋ž€?์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š” ๋ฐฉ๋ฒ•Union๊ณผ Join์˜ ์ฐจ์ด์ Join์œผ๋กœ ํ…Œ์ด๋ธ”์„ ํ•ฉ์น˜๋ฉด ๋” ๋งŽ์€ column์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค. (์ˆ˜ํ‰์ ์œผ๋กœ ํ…Œ์ด๋ธ” ํ™•์žฅ)Union์€ ํ…Œ์ด๋ธ”์„ ์ˆ˜์ง์ ์œผ๋กœ ํ™•์žฅํ•œ๋‹ค. ์กฐ๊ฑด: ํ•ฉ์น˜๋Š” ํ…Œ์ด๋ธ”์€ ์„œ๋กœ ๊ฐ™์€ ์ˆ˜์˜ column์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.(๊ทธ๋ฆฌ๊ณ  ์ค‘๋ณต๋œ ๊ฐ’์€ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์ง„๋‹ค.) ex)SELECT 'hello'UNIONSELECT 'hi'UNIONSELECT 'hello'; UNION ALLํ•˜์ง€๋งŒ UNION์ด ์•„๋‹Œ UNION ALL์„ ์‚ฌ์šฉํ•˜๋ฉด ์ค‘๋ณต์ด ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค.๊ทธ๋ฆฌ๊ณ  UNION ALL์€ ์ค‘๋ณต ์ฒดํฌ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— UNION๋ณด๋‹ค ์„ฑ๋Šฅ์ด ์ข‹๋‹ค.SELECT 'hello'UNION ALLSELECT 'hi'UNION ALLSELECT 'hello';..
SQL - MySQL, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๊ทœํ™”, Foreign Key, JOIN
ยท
๐Ÿงฉ SQL
โœ… ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๊ทœํ™”๋ž€? (Normalization)๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ์ค„์ด๊ณ , ๊ตฌ์กฐ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ์„ค๊ณ„ ๋ฐฉ๋ฒ• โ‘  ์ œ1์ •๊ทœํ˜• (1NF)์ปฌ๋Ÿผ์€ ์›์ž๊ฐ’(Atomic)๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค โ‘ก ์ œ2์ •๊ทœํ˜• (2NF)๋ถ€๋ถ„ ํ•จ์ˆ˜ ์ข…์† ์ œ๊ฑฐ โ‘ข ์ œ3์ •๊ทœํ˜• (3NF)์ดํ–‰์  ์ข…์† ์ œ๊ฑฐ โœ… Foreign Key๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ Primary Key๋ฅผ ์ฐธ์กฐํ•˜๋Š” Column CREATE TABLE dogs ( dog_id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, weight DECIMAL(5, 2), date_of_birth DATE, owner_id BIGINT UNSIGNED, breed_id B..
SQL - MySQL, ๋ฌธ๋ฒ•
ยท
๐Ÿงฉ SQL
โœ… ALTERALTER TABLE ๋ช…๋ น์–ด๋Š” ๊ฝค ๋น„์šฉ์ด ํด ์ˆ˜ ์žˆ๋‹ค.(row์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด ์ƒˆ๋กœ ์ƒ์„ฑ๋œ column์˜ ๋ชจ๋“  row์— ๊ธฐ๋ณธ๊ฐ’์„ ์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ)SQLite์—์„œ๋„ ALTER๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Table ์ด๋ฆ„ ๋ณ€๊ฒฝ, Column ์ด๋ฆ„ ๋ณ€๊ฒฝ, Column ์ถ”๊ฐ€๋งŒ ๊ฐ€๋Šฅํ•จ(์ด๋ฏธ ์„ค์ •๋œ column์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜, ์ œ์•ฝ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ ํ˜น์€ ์‚ญ์ œํ•˜๋Š” ๊ฑด ๋ถˆ๊ฐ€๋Šฅ) ALTER TABLE users DROP COLUMN profile_picture;profile_picture column ์‚ญ์ œ ALTER TABLE usersCHANGE COLUMN bio about_me TINYTEXT;bio -> about_me ์ด๋ฆ„ ๋ณ€๊ฒฝ, data type๋ณ€๊ฒฝ CHANGEALTER TABLE us..
SQL - MySQL Data Types
ยท
๐Ÿงฉ SQL
โœ… Data TypesCHAR(10): ๊ธธ์ด๊ฐ€ 10์ด ๋  ๋•Œ๊นŒ์ง€ ๊ณต๋ฐฑ์„ ๋„ฃ์–ด ์ฑ„์šด๋‹ค. (CHAR๋Š” 255๊ฐ€ ์ตœ๋Œ€ ๊ธธ์ด)VARCHAR(10): ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 10 ENUM('male', 'female'): ์ง€์ •ํ•œ ๊ฐ’๋“ค ์ค‘ ํ•˜๋‚˜๋งŒ ๊ฐ’์œผ๋กœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ SET('1', '2', '3'): ์ง€์ •ํ•œ ๊ฐ’์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๊ฐ’์œผ๋กœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ TINYTEXT: 255 ์ดํ•˜TEXT: 65,535 ์ดํ•˜MEDIUMTEXT: 16MB ์ดํ•˜LONGTEXT: 4GB ์ดํ•˜ TINYBLOB: 255Byte ์ดํ•˜BLOB: 64KB ์ดํ•˜MEDIUMBLOB: 16MB ์ดํ•˜LONGBLOB: 4GB ์ดํ•˜ TINYINT: SIGNED -> -128 to 127 | UNSIGNED -> 0 to 255SMALLINT: SIGNED -> -32,7..
SQL - MySQL Setup
ยท
๐Ÿงฉ SQL
โœ… MySQL๋ž€?MySQL• ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (RDBMS)• ํ˜„์žฌ **Oracle**์ด ๊ด€๋ฆฌ MariaDB• MySQL์—์„œ ๊ฐˆ๋ผ์ ธ ๋‚˜์˜จ DB (fork)• MySQL ์› ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ๋“  ์˜คํ”ˆ์†Œ์Šค DB โœ… MySQL ์„ค์น˜homebrew๋กœ ์„ค์น˜1. mysql ์„ค์น˜brew install mysql 2. ๋งฅ๋ถ ๋ถ€ํŒ… ์‹œ mysql์„ ์ž๋™์‹คํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฐ‘ ๋ช…๋ น์–ด ์ž…๋ ฅbrew services start mysql 3. ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋งŒ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฐ‘ ๋ช…๋ น์–ด ์ž…๋ ฅmysql.server start 4. ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ • ๋“ฑ ๊ฐ„๋‹จํ•œ ์„ค์ • ๋ช…๋ น์–ดmysql_secure_installation 5. ๋กœ๊ทธ์ธ ๋ช…๋ น์–ดmysql -u root -p 6. ์‚ฌ์šฉ์ž ์ ‘์† ์ข…๋ฃŒexit 7. mysql ์„œ๋ฒ„ ์ข…๋ฃŒmysql.server..