๐Ÿ‘จ‍๐Ÿ’ป kimtongting
OOP์˜ 5๋Œ€ ์›์น™ (SOLID)

SOLID ์›์น™ ํ•ญ์ƒ ๊ธฐ์–ตํ•˜์ž S: ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP, Single Responsibility Principle) ๊ฐ์ฒด๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. O: ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(OCP, Open Closed Principle) ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค. L: ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™(LSP, Liskov Substitution Principle) ์ผ๋ฐ˜ํ™” ๊ด€๊ณ„์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฉฐ, ์ž์‹ ํด๋ž˜์Šค๋Š” ์ตœ์†Œํ•œ ์ž์‹ ์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ๊ฐ€๋Šฅํ•œ ํ–‰์œ„๋Š” ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. I: ์˜์กด ์—ญ์ „ ์›์น™(DIP, Dependency Inversion Principle) ์˜์กด ๊ด€๊ณ„๋ฅผ ๋งบ์„ ๋•Œ ๋ณ€ํ™”ํ•˜๊ธฐ ์‰ฌ์šด ๊ฒƒ ๋˜๋Š” ์ž์ฃผ ๋ณ€ํ™”ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ๋ณ€ํ™”ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ, ๊ฑฐ์˜ ๋ณ€ํ™”๊ฐ€ ์—†๋Š” ๊ฒƒ์—..

article thumbnail
ํ‹ฐ์Šคํ† ๋ฆฌ ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰ ๋…ธ์ถœ / ๊ตฌ๊ธ€์„œ์น˜์ฝ˜์†” / Google Search Console

์ด ๊ธ€์€ ํ‹ฐ์Šคํ† ๋ฆฌ ๋ฐ˜์˜์— ์ตœ์ ํ™” ๋œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰ ๋…ธ์ถœํ•˜๊ธฐ ์‹œ์ž‘. ์šฐ์ธก ๋งํฌ๋ฅผ ํ†ตํ•ด ์ž…์žฅ! (https://search.google.com/search-console) ์‹œ์ž‘ํ•˜๊ธฐ๋ฅผ ๋ˆ„๋ฅด๊ณ  ๋กœ๊ทธ์ธ์„ ์™„๋ฃŒํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํŒ์—…์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋‘ ๊ฐœ ์ค‘ ์„ ํƒํ•˜๋„๋ก ๋‚˜์˜ค๋Š”๋ฐ, URL ์ ‘๋‘์–ด๋ฅผ ์„ ํƒํ•œ๋‹ค. ๋„๋ฉ”์ธ์€ ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ๋„๋ฉ”์ธ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํ‹ฐ์Šคํ† ๋ฆฌ์˜ ๋„๋ฉ”์ธ์„ ๋นŒ๋ ค ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— URL ์ ‘๋‘์–ด๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅ ํ›„ ๊ณ„์†์„ ๋ˆ„๋ฅด๊ฒŒ ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค. ํ•˜๋‹จ์˜ HTML ํƒœ๊ทธ๋ฅผ ์„ ํƒ! ๋‚ด์šฉ์„ ๋ณต์‚ฌํ•œ ํ›„์—, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ์ค€ ๋ธ”๋กœ๊ทธ ์„ค์ • ! / ๊พธ๋ฏธ๊ธฐ / ์Šคํ‚จ ํŽธ์ง‘ ํด๋ฆญ! ์šฐ์ธก์—์„œ html ํŽธ์ง‘์„ ๋ˆ„๋ฅด๊ณ , ์•„๋ž˜์™€ ๊ฐ™์ด ํƒœ๊ทธ ๋ฐ‘์— ๋ณต์‚ฌํ•œ ํƒœ๊ทธ ์‚ฝ์ž…! ๊ทธ ํ›„์— ..

article thumbnail
[๋ธ”๋กœ๊ทธ๋กœ ๋ˆ๋ฒŒ๊ธฐ] ์นด์นด์˜ค ์• ๋“œํ• / ์นด์นด์˜ค AdFit ๋“ฑ๋ก / ์นด์นด์˜ค ๊ด‘๊ณ  ๊ฒŒ์žฌํ•˜๊ธฐ

Kakao AdFit - ์นด์นด์˜ค ์นด์นด์˜ค ๊ด‘๊ณ  ์‹ ์ฒญ์„ ๋จผ์ € ํ•˜๊ธฐ ์œ„ํ•ด ์šฐ์ธก ๋งํฌ๋ฅผ ํ†ตํ•ด ๋“ค์–ด๊ฐ„๋‹ค. adfit.kakao.com ์ƒ๋‹จ์˜ ๊ด‘๊ณ ๊ด€๋ฆฌ ํƒญ์—์„œ ๊ด‘๊ณ ๊ด€๋ฆฌ ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•œ๋‹ค. ๊ฐ€์šด๋ฐ์˜ ์ „์ฒด๋งค์ฒด์—์„œ ์ƒˆ ๋งค์ฒด ์„ ํƒ. ๊ด‘๊ณ ๋ฅผ ๊ตฌ๋ถ„ํ•  ๋ณ„์นญ์„ ์ •ํ•˜๊ณ  ๋งค์ฒด์œ ํ˜•์€ Web ์œผ๋กœ ํ•ด์ฃผ๋„๋ก ํ•˜์ž! ๋งค์ฒด ๊ณ ์œ ๊ฐ’์—๋Š” ๊ด‘๊ณ ๋ฅผ ๊ฒŒ์žฌํ•  URL (ํ™ˆํŽ˜์ด์ง€ ๋ฐ ๋ธ”๋กœ๊ทธ ์ฃผ์†Œ)์„ ์ž…๋ ฅํ•œ๋‹ค. ์ด์ œ ๊ด‘๊ณ ๋‹จ์œ„๋ฅผ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•œ ์ฐฝ์ด๋‹ค. ์ฒ˜์Œ์—” ๊ทธ๋ƒฅ ์•„๋ž˜์™€ ๋˜‘๊ฐ™์ด ์ž…๋ ฅํ•˜์ž. (์–ด์ฐจํ”ผ ์ถ”๊ฐ€๊ฐ€ ํ•„์š”!) ๊ด‘๊ณ ๋‹จ์œ„๋ช…์€ ์‚ฌ์ด์ฆˆ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๊ตฌ๋ถ„ํ•˜๋Š”๊ฒŒ ๋‚˜์ค‘์— ๊ตฌ๋ถ„ํ•˜๊ธฐ ํŽธํ•˜๋‹ค. ์Šคํฌ๋ฆฝํŠธ/SDK ๋ฐœ๊ธ‰์„ ํด๋ฆญ! ์•„๋ž˜์™€ ๊ฐ™์ด ์šฐ๋ฆฌ๊ฐ€ ์ž…๋ ฅํ•œ ์ •๋ณด๊ฐ€ ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค. ํ•˜๋‹จ์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋ธ”๋กœ๊ทธ์— ์‚ฝ์ž…์„ ํ•  ๊ฒƒ์ธ๋ฐ.. ๋ธ”๋กœ๊ทธ์˜ ์ข…๋ฅ˜๋Š” ์ˆ˜๋งŽ์œผ๋‹ˆ ์ด ๊ธ€์„ ํฌ์ŠคํŒ…ํ•œ ํ‹ฐ์Šคํ† ..

article thumbnail
[๋ธ”๋กœ๊ทธ๋กœ ๋ˆ๋ฒŒ๊ธฐ]๊ตฌ๊ธ€ ๊ด‘๊ณ  ๊ฒŒ์žฌ / ๊ตฌ๊ธ€ ์• ๋“œ์„ผ์Šค / ๊ตฌ๊ธ€ ๊ด‘๊ณ  ์‚ฝ์ž…

๊ตฌ๊ธ€์€ ์Šคํฌ๋ฆฝํŠธ ํ•˜๋‚˜๋กœ ์ž๋™์œผ๋กœ ๊ด‘๊ณ ๊ฐ€ ์‚ฝ์ž…๋˜๊ฒŒ ํ•  ์ˆ˜์žˆ๋‹ค. ๋˜๋Š” ์›ํ•˜๋Š” ์œ„์น˜์— ํ•ด๋‹น ๊ด‘๊ณ ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค. ์šฐ์ธก ๋งํฌ๋ฅผ ์ด์šฉํ•ด ์‹œ์ž‘ (https://www.google.co.kr/adsense/start/) ์‹œ์ž‘ํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์‹œ์ž‘ํ•œ๋‹ค. ๊ด‘๊ณ ๋ฅผ ๊ฒŒ์žฌํ•  ์›น์‚ฌ์ดํŠธ์˜ URL์„ ๋„ฃ๊ณ , ๊ตฌ๊ธ€ ์• ๋“œ์„ผ์Šค ๊ด€๋ จํ•˜์—ฌ ์ •๋ณด๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค. ์ €์žฅํ•˜๊ณ  ๊ณ„์†ํ•˜๊ธฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋‚˜์˜จ๋‹ค. ๊ตญ๊ฐ€๋Š” ๋Œ€ํ•œ๋ฏผ๊ตญ์„ ์„ ํƒํ•˜๊ณ  ํ•˜๋‹จ์˜ ๋™์˜ ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์„ ํƒํ•œ๋‹ค. ๋‹ค์Œ ์ฐฝ์—์„œ ์›ํ•˜๋Š” ์ข…๋ฅ˜์˜ ๊ด‘๊ณ  ์Šคํƒ€์ผ์„ ์„ ํƒํ•˜๊ณ  ์‹œ์ž‘ํ•˜๊ธฐ๋ฅผ ๋ˆ„๋ฅด๊ณ  ๋‚˜๋ฉด, ์ˆ˜์ต๊ธˆ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋ณธ ์„ค์ •์„ ํ•˜๋Š” ์ฃผ์†Œ ์ž…๋ ฅ ์ฐฝ์ด ๋‚˜์˜จ๋‹ค. ์ฃผ์†Œ ์ž…๋ ฅ ํ›„ ์ œ์ถœ. ์ž ๋“œ๋””์–ด ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์ด๋‹ค. ๊ด‘๊ณ  ์‚ฝ์ž…์„ ์œ„ํ•ด ๊ตฌ๊ธ€์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณต์‚ฌ..

PostgreSQL Sequence ์ƒ์„ฑ / postgreSQL ์‹œํ€€์Šค ์ƒ์„ฑ
๐Ÿ’พDatabase/PostgreSQL 2020. 8. 31. 03:52

#์‹œํ€€์Šค ์ƒ์„ฑ create sequence TB_Board_SEQ start with 1 increment by 1 cache 10; #์‹œํ€€์Šค ์ž…๋ ฅ INSERT INTO TB_BOARD VALUES(nextval('TB_BOARD_SEQ'), ....); #์‹œํ€€์Šค ์ดˆ๊ธฐํ™” ALTER SEQUENCE TB_USER_SEQ RESTART WITH 1;

PostgreSQL Sequence / postgreSQL ์‹œํ€€์Šค ์ƒ์„ฑ / ์ถ”๊ฐ€ / ์ดˆ๊ธฐํ™”
๐Ÿ’พDatabase/PostgreSQL 2020. 8. 30. 01:36

#์‹œํ€€์Šค ์ƒ์„ฑ create sequence TB_Board_SEQ start with 1 increment by 1 cache 10; #์‹œํ€€์Šค ์ถ”๊ฐ€ INSERT INTO TB_BOARD VALUES(nextval('TB_BOARD_SEQ'), ....); #์‹œํ€€์Šค ์ดˆ๊ธฐํ™” ALTER SEQUENCE TB_USER_SEQ RESTART WITH 1;

PostgreSQL ALTER ๋ช…๋ น์–ด
๐Ÿ’พDatabase/PostgreSQL 2020. 8. 30. 01:30

์ปฌ๋Ÿผ์ถ”๊ฐ€ ALTER TABLE board ADD create_date date; ์ปฌ๋Ÿผ์‚ญ์ œ ALTER TABLE board DROP create_date; ์ปฌ๋Ÿผ default๊ฐ’ ์ถ”๊ฐ€ ALTER TABLE board ALTER COLUMN name SET DEFAULT '์ด๋ฆ„์—†์Œ'; --๋ฌธ์ž ALTER TABLE board ALTER COLUMN no SET DEFAULT 1;--์ˆซ์ž ์ปฌ๋Ÿผ default๊ฐ’ ์ œ๊ฑฐ ALTER TABLE board ALTER name DROP DEFAULT; ์ปฌ๋Ÿผ NOT NULL ์ถ”๊ฐ€ ALTER TABLE board ALTER COLUMN name SET NOT NULL; ์ปฌ๋Ÿผ NOT NULL ์ œ๊ฑฐ ALTER TABLE board ALTER COLUMN name DROP NOT ..

article thumbnail
[DBeaver] ์œ ์šฉํ•œ ์‹ฌํ”Œ ๊ธฐ๋ณธ ์„ค์ • DBeaver UTF-8
๐Ÿ› IDE & DevOps/DBeaver 2020. 8. 30. 01:13

๐Ÿ“”Free SQL DB Tool, ๋‚ด๊ฐ€ ๋ฐ”๋กœ DBeaver ๋‹ค! ๐Ÿ“„1. ํ–‰ ๋ฒˆํ˜ธ ํ‘œ์‹œ ๐Ÿ“์•ˆ๋…•ํ•˜์„ธ์š”. ์˜ค๋Š˜์€ ๋งŽ์€ ๋ถ„๋“ค์ด ์งˆ๋ฌธ ์ฃผ์‹  DBeaver ๊ฐ„๋‹จํ•œ ๊ธฐ๋ณธ ์„ค์ •์— ๋Œ€ํ•ด ์„ค๋ช…๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. #1. ํ–‰ ๋ฒˆํ˜ธ ํ‘œ์‹œ ์ƒ๋‹จ ๋ฉ”๋‰ด์—์„œ ์œˆ๋„์šฐ/์„ค์ •์œผ๋กœ ์ด๋™ํ•ด์ฃผ์‹  ํ›„, ์ผ๋ฐ˜/ํŽธ์ง‘๊ธฐ/๋ฌธ์„œ ํŽธ์ง‘๊ธฐ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์šฐ์ธก ์ฒดํฌ๋ฐ•์Šค์—์„œ ํ–‰ ๋ฒˆํ˜ธ ํ‘œ์‹œ๋ฅผ ์„ ํƒ ํ•˜์‹  ํ›„, ์ ์šฉ์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค. ์™„๋ฃŒ! ๐Ÿ“„2. ์ž๋™์ €์žฅ ๐Ÿ“์ƒ๋‹จ ๋ฉ”๋‰ด์—์„œ ์œˆ๋„์šฐ/์„ค์ •์œผ๋กœ ์ด๋™ํ•ด์ฃผ์‹  ํ›„, ์ผ๋ฐ˜/ํŽธ์ง‘๊ธฐ/Autosave๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์šฐ์ธก ์ฒดํฌ๋ฐ•์Šค์—์„œ Enable autosave for dirty editors ๋ฅผ ์„ ํƒ ํ•˜์‹  ํ›„, ์›ํ•˜์‹œ๋Š” ์‹œ๊ฐ„์„ ์ž…๋ ฅํ•˜์…”์„œ ์ ์šฉ์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค. ์™„๋ฃŒ! ๐Ÿ“„3. UTF-8 ์„ค์ • ๐Ÿ“์š”์ƒˆ ๋Œ€๋ถ€๋ถ„ ํ…์ŠคํŠธ ํŒŒ์ผ ์ธ์ฝ”๋”ฉ์€ UTF-8์ด ํ‘œ์ค€ํ™”๋˜๊ณ  ์žˆ..