์ฐ์ ๊ธฐ๋ก ๐ช
[๋ฉด์ ์ ์ํ CS ์ ๊ณต์ง์ ๋ ธํธ] ๋์์ธ ํจํด๊ณผ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์ ๋ณธ๋ฌธ
[๋ฉด์ ์ ์ํ CS ์ ๊ณต์ง์ ๋ ธํธ] ๋์์ธ ํจํด๊ณผ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์
kite707 2023. 9. 13. 13:34SECTION1 ๋์์ธ ํจํด
์ฑ๊ธํค ํจํด
ํ๋์ ํด๋์ค์ ์ค์ง ํ๋์ ์ธ์คํด์ค๋ง ๊ฐ์ง๋ ํจํด์ด๋ค. ๋ณดํต ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ชจ๋์ ๋ง์ด ์ฌ์ฉํ๋ฉฐ, ์ธ์คํด์ค๋ฅผ ํ๋ ๋ง๋ค๊ณ ๊ทธ ์ธ์คํด์ค๋ฅผ ๋ค๋ฅธ ๋ชจ๋๋ค์ด ๊ณต์ ํ๋ฉฐ ํจ๊ป ์ฌ์ฉํ๋ค. ๋น์ฉ์ ์ค์ง๋ง ์์กด์ฑ์ด ๋๋ค.
์๋์ ๊ฐ์ด db์ ์ฐ๊ฒฐํ๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด, DB๋ผ๋ ํ๋์ ํด๋์ค์ DB.instance๋ผ๋ ํ๋์ ์ธ์คํด์ค๋ง ์กด์ฌํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
const URL = 'dbUrl'
const createConnection = url => ({"url" : url})
class DB {
constructor(url) {
if (!DB.instance) {
DB.instance = createConnection(url)
}
return DB.instance
}
connect() {
return this.instance
}
}
const a = new DB(URL)
const b = new DB(URL)
console.log(a === b) // true
์ด๋ฌํ ์ฑ๊ธํคํจํด์ TDD์ ๋ณ๋ก ์ข์ง ์์๋ฐ, ๊ทธ ์ด์ ๋ ๋จ์ํ ์คํธ๋ฅผ ํ ๋ ๋ชจ๋๊ฐ ์ข ์์ ์ด๊ธฐ ๋๋ฌธ์ ์๋ก ๋ ๋ฆฝ์ ์ธ ํ ์คํธ๋ฅผ ํ๊ธฐ ์ด๋ ต๋ค. ๊ทธ๋์ ๋ชจ๋๊ฐ์ ๊ฒฐํฉ์ ๋์จํ๊ฒ ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ์์กด์ฑ ์ฃผ์ (Dependency Injection)์ด๋ผ๋ ๊ฐ๋ ์ด ๊ณ ์๋์๋ค.
์ฆ ์ค๊ฐ์ ์์กด์ฑ ์ฃผ์ ์๊ฐ ๋ค๋ฅธ ๋ชจ๋์ ๋ํ ์์กด์ฑ์ ์ฃผ์ ํ๊ณ , ๋ฉ์ธ๋ชจ๋์ ์์กด์ฑ ์ฃผ์ ์๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ์์กด์ฑ์ ์ฃผ์ ํ๋ ๊ฒ์ด๋ค.
ํฉํ ๋ฆฌ ํจํด
ํฉํ ๋ฆฌ ํจํด์ ๊ฐ์ฒด ์์ฑ์ ์บก์ํํ๋ ํจํด์ด๋ค. ์๋ฅผ๋ค์ด ๋ผ๋ผ, ์๋ฉ๋ฆฌ์นด๋ ธ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํด๋์ค๊ฐ ์ปคํผ ๊ณต์ฅ์ด๋ผ๋ ํด๋์ค ๋ด์ ์์ ๋ ํฉํ ๋ฆฌ ํจํด์ด๋ผ๊ณ ํ๋ค. ์๋ ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ดํด๊ฐ ์ฌ์ธ ๊ฒ์ด๋ค.
class CoffeeFactory {
static createCoffee(type) {
const factory = factoryList[type]
return factory.createCoffee()
}
}
class Latte {
constructor() {
this.name = "latte"
}
}
class Espresso {
constructor() {
this.name = "Espresso"
}
}
class LatteFactory extends CoffeeFactory{
static createCoffee() {
return new Latte()
}
}
class EspressoFactory extends CoffeeFactory{
static createCoffee() {
return new Espresso()
}
}
const factoryList = { LatteFactory, EspressoFactory }
const main = () => {
// ๋ผ๋ผ ์ปคํผ๋ฅผ ์ฃผ๋ฌธํ๋ค.
const coffee = CoffeeFactory.createCoffee("LatteFactory")
// ์ปคํผ ์ด๋ฆ์ ๋ถ๋ฅธ๋ค.
console.log(coffee.name) // latte
}
main()
static์ ํตํด createCoffee๋ฅผ ์ ์ ์ผ๋ก ์ ์ธํ๊ธฐ ๋๋ฌธ์ LatteFactory ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ง ์๊ณ createCoffee ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ ๋ต ํจํด
์ ๋ตํจํด์ ์ฌ๋ฌ๊ฐ์ง ํ์๋ฅผ ์ ๋ต์ด๋ผ๋ ์บก์ํํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ฐ์ธ๋ ํจํด์ผ๋ก, passport๊ฐ ๋ํ์ ์ธ ์์์ด๋ค. ์๋ฅผ๋ค์ด ๋ก๊ทธ์ธ์ด๋ผ๋ ํฐ ํด๋์ค ๋ด์ ์นด์นด์ค, ๋ค์ด๋ฒ, ๊ตฌ๊ธ ๋ก๊ทธ์ธ์ ๊ตฌํํ ๊ฐ ์๊ณ ๋ฆฌ์ฆ๋ค์ ์ ๋ต์ผ๋ก ๊ฐ์ธ์ ๋ฃ๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ์ ๋ตํจํด๊ณผ ํฉํ ๋ฆฌํจํด์ด ์ฌ์ค์ ๊ฐ์ ๊ฒ์ด ์๋๊ฐ ํ๋ ์๊ฐ์ ํ๋๋ฐ ํฉํ ๋ฆฌํจํด์ ๊ฐ์ฒด ์์ฑ์ ์ถ์ํํ๋๊ฒ์ด ๋ชฉ์ . ์ ๋ต ํจํด์ ์ฌ๋ฌ๊ฐ์ง ํ๋ ์ค ํ๋๋ฅผ ์ ํํ๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ผ๊ณ ํ๋ค. ์ฆ ๋ชฉ์ ์ ๋ฐ๋ผ ๊ตฌ๋ถ๋๋ ๋ฏ ํ๋ค.
์ต์ ๋ฒ ํจํด
์ต์ ๋ฒ ํจํด์ ์ฃผ์ฒด๊ฐ ์ด๋ค ๊ฐ์ฒด์ ์ํ ๋ณํ๊ฐ ์์ ๋ ๋ง๋ค ์ต์ ๋ฒ๋ค์๊ฒ ๋ณํ๋ฅผ ์๋ ค์ฃผ๋ ๋์์ธ ํจํด์ด๋ค. ๋ํ์ ์ธ ์์๋ ํธ์ํฐ์ธ๋ฐ ๋๊ตฐ๊ฐ ๋๋ฅผ ํ๋ก์ฐํ๊ฑฐ๋, ๋ด๊ฐ ํ๋ก์ฐํ ์ฌ๋์ด ๊ฒ์๋ฌผ์ ์ฌ๋ฆฌ๋ฉด ์๋ฆผ์ ๋ณด๋ด์ค๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ํ๋ก์ ๊ฐ์ฒด๋ฅผ ์ด์ฉํด ์ต์ ๋ฒ ํจํด์ ๊ตฌํํ ์ ์๋ค.
function observe(target,callback){
const proxy=new Proxy(target,{
set(obj,prop,value){
if(value!==obj[prop]){
const prev=obj[prop]
obj[prop]=value
callback(`${prop}์ด ${prev}์์ ${value}๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค`);
}
return true;
}
})
return proxy;
}
const a= {"์ด๋ฆ":"k"}
const b=observe(a,console.log);
b.์ด๋ฆ="J";
b.์ด๋ฆ="KK";p
ํ๋ก์ ํจํด
ํ๋ก์ ํจํด์ ๋์ ๊ฐ์ฒด์ ์ ๊ทผํ๊ธฐ ์ ๊ทธ ์ ๊ทผ์ ๋ํ ํ๋ฆ์ ๊ฐ๋ก์ฑ ๊ฐ์ฒด ์๋จ์ ์ธํฐํ์ด์ค ์ญํ ์ ํ๋ ๋์์ธ ํจํด์ด๋ค.
์ ํจํด์ ์ ์ฉํ ์์ ์ค ํ๋๋ ํ๋ก์ ์๋ฒ์ด๋ค. ๋ํ์ ์ผ๋ก nginx๋ผ๋ ์๋ฒ๊ฐ Node.js ์๋ฒ์ ํ๋ก์ ์๋ฒ๋ก ์ฌ์ฉ๋๋๋ฐ, ์ด nginx๋ ์๋ฒ์ ์ ์ํ๊ธฐ ์ ๊ฑฐ์ณ๊ฐ์ผํ๋ ์๋ฌธ์ฅ๊ณผ ๊ฐ์ ์ญํ ์ ํด์ค๋ค.
MVC ํจํด
model view controller๋ก ์ด๋ฃจ์ด์ง ๋์์ธ ํจํด์ด๋ค. model์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ, view๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค, controller๋ ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ์ด์ด์ฃผ๋, ๋ก์ง์ด ๊ตฌํ๋ ๋ถ๋ถ์ ์๋ฏธํ๋ค.
์ฌ๊ธฐ์ ํ๋์ ๋ทฐ์ ํ๋์ ์ปจํธ๋กค๋ฌ๋ง์ด ์ฐ๊ฒฐ๋์์ ๋๋ฅผ MVPํจํด์ด๋ผ๊ณ ํ๋ค. ์ฆ ์ปจํธ๋กค๋ฌ๊ฐ ํ๋ ์ ํฐ(presenter)๋ก ๊ต์ฒด๋ ๊ฒ์ด๋ค.
MVVM ํจํด
MVVMํจํด์ ์ปจํธ๋กค๋ฌ๊ฐ ๋ทฐ๋ชจ๋ธ(view model)๋ก ๋ฐ๋ ํจํด์ด๋ค. ๋ทฐ์ ๋ชจ๋ธ์ ๋ฌถ์ด์ ์ฐ๊ฒฐํ๋ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๊ฐ์ง๋ค. ๋ทฐ์ ๋ทฐ๋ชจ๋ธ ์ฌ์ด์ ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ง์ํ๋ค.
UI๋ฅผ ๋ณ๋์ ์ฝ๋ ์์ ์์ด ์ฌ์ฌ์ฉํ ์ ์๊ณ ๋จ์ ํ ์คํ ํ๊ธฐ ์ฝ๋ค๋ ์ฅ์ ์ด ์๋ค.(์์กด์ฑx)
SECTION2 ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์
์ค๋ฒ๋ก๋ฉ
๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ๋ฉ์๋๋ฅผ ์ฌ๋ฌ๊ฐ ๋๋ ๊ฒ. ํ์ , ๋งค๊ฐ๋ณ์์ ์ ํ, ๊ฐ์ ๋ฑ์ผ๋ก ๊ตฌ๋ถ๋จ. ์ ์ ๋คํ์ฑ
์ค๋ฒ๋ผ์ด๋ฉ
์์ ํด๋์ค๋ก๋ถํฐ ์์๋ฐ์ ๋ฉ์๋๋ฅผ ํ์ ํด๋์ค์์ ์ฌ์ ์ํ๋ ๊ฒ. ๋์ ๋คํ์ฑ