[SOLID][Nest.js][Java + Spring] Interface๋ฅผ ํ™œ์šฉํ•œ ๊ฒฐํ•ฉ๋„ ๋ถ„๋ฆฌ (Interface๋ฅผ ์ด์šฉํ•œ Dependency Injection - DI)

2023. 12. 6. 13:00ใ†Back-End ์ž‘์—…์‹ค/๊ธฐํƒ€ ์ฐธ๊ณ  ์ž๋ฃŒ

728x90
๋ฐ˜์‘ํ˜•

 

 





 

๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด : ์—ญํ•  ์ฑ…์ž„ ํ˜‘๋ ฅ ๊ด€์ ์—์„œ ๋ณธ ๊ฐ์ฒด์ง€ํ–ฅ

COUPANG

www.coupang.com


"์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค."

 



 

 

GitHub - junyharang-coding-study/GraphQL-Study: GraphQL์„ ๊ณต๋ถ€ํ•˜๊ณ , ์‹ค์Šตํ•œ ์ฝ”๋“œ์—์š” ๐Ÿ˜€

GraphQL์„ ๊ณต๋ถ€ํ•˜๊ณ , ์‹ค์Šตํ•œ ์ฝ”๋“œ์—์š” ๐Ÿ˜€. Contribute to junyharang-coding-study/GraphQL-Study development by creating an account on GitHub.

github.com

 

 

 

๐Ÿš€ [Nest.js] Interface๋ฅผ ํ™œ์šฉํ•œ ๊ฒฐํ•ฉ๋„ ๋ถ„๋ฆฌ

    ๐Ÿ”ฝ Interface๋ฅผ ์ด์šฉํ•œ Dependency Injection - DI

        ๐Ÿ“ฆ ๊ฐœ์š”

SOLID 5 ์›์น™์ด๋ผ๋Š” Object-Oriented Programming, OOP (๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)์˜ Software(์†Œํ”„ํŠธ์›จ์–ด) Design(๋””์ž์ธ)์˜ ๋‹ค์„ฏ ๊ฐ€์ง€ ๊ธฐ๋ณธ ์›์น™์ด๋ผ๋Š” ๊ฐœ๋…์ด ์žˆ์–ด์š”. ์ด ๊ฐœ๋…์˜ ์ฃผ์š” ๋‚ด์šฉ์€ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ๋ณ€๊ฒฝ์ด ์šฉ์ดํ•˜๊ณ , ์œ ์ง€๋ณด์ˆ˜์™€ ํ™•์žฅ์ด ์‰ฌ์šด ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ผ๋Š” ๊ฒƒ์ด์—์š”.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ์ค‘์š”ํ•œ ๊ฐœ๋…์œผ๋กœ ์ž๋ฆฌ ์žก๊ณ  ์žˆ์–ด์š”.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” SOLID 5์›์น™ ์ค‘ ์ฃผ๋‹ˆ๊ฐ€ ๊ฐœ๋ฐœํ•  ๋•Œ, ํ•ญ์ƒ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋Š” Interface Segregation Principle - ISP (์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™)์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•ด๋ณด๊ณ , ์ด๋ฅผ Nest.js์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”.


 

        ๐Ÿ“ฆ ISP๋ž€?

์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™์€ ๊ฐ์ฒด๋Š” ์ž์‹ ์ด ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š” Method(๋ฉ”์„œ๋“œ)์— ์˜์กดํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. ๋ผ๋Š” ์›์น™์ด์—์š”.

์ฆ‰, ๊ตฌํ˜„ํ•  ๊ฐ์ฒด์—๊ฒŒ ๋ฌด์˜๋ฏธํ•œ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋งŒ์„ ์ƒ์† ๋ฐ ๊ตฌํ˜„ํ•˜๋ผ๋Š” ๊ถŒ๊ณ  ์‚ฌํ•ญ์ด์—์š”.
๋งŒ์•ฝ ์ƒ์†ํ•  ๊ฐ์ฒด์˜ ๊ทœ๋ชจ๊ฐ€ ๋„ˆ๋ฌด ํฌ๋‹ค๋ฉด ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์€ ๋‹จ์œ„์˜ Interface(์ธํ„ฐํŽ˜์ด์Šค)๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ๋„ ๊ณ ๋ คํ•ด ๋ด์•ผ ํ•ด์š”.


์œ„ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ๊ทœ๋ชจ๊ฐ€ ํฐ ๊ฐ์ฒด๋ฅผ ์ƒ์†ํ–ˆ์„ ๋•Œ, ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์™€ ์ด๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‚˜ํƒ€๋‚ด ๋ณธ๊ฒƒ์ด์—์š”.

์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์šด๋ฐ ๊ฐ์ฒด๋ฅผ ๊ฐ๊ฐ ์ƒ์†ํ•  ๊ฒฝ์šฐ ์™ผ์ชฝ ๊ฐ์ฒด๋Š” ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ๋ชจ๋‘ ๊ตฌํ˜„๋˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†์–ด์š”.

ํ•˜์ง€๋งŒ, ์˜ค๋ฅธ์ชฝ ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ Method1์„ ๋นผ๊ณ , ๋‚˜๋จธ์ง€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ์ƒํ™ฉ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ๊ฐ€์šด๋ฐ ๊ฐ์ฒด๋ฅผ ์ƒ์† ๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์— ์›์น˜ ์•Š์•„๋„ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ๋ชจ๋‘ ์žฌ ์ •์˜(Overriding)ํ•ด ์ฃผ์–ด์•ผ ํ•ด์š”.

๋งŒ์•ฝ ์ƒ์† ๋Œ€์ƒ์ธ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ ๋™์ž‘๋ณ„๋กœ ๊ตฌ๋ถ„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด ๊ฐ ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ์„ ์ƒ์†ํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ž๊ฐ€ ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋งŒ์„ ๊ฐ€์ง€๊ฒŒ ๋  ๊ฒƒ์ด์—์š”.

์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™์˜ ๊ฐœ๋…์ด์—์š”.

์ด ๋•Œ, ์ธํ„ฐํŽ˜์ด์Šค์˜ ์žฅ์ ์€ ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ๋ชฐ๋ผ๋„ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด์—์š”.

์ด ๋ง์ด ๋ฌด์Šจ ๋ง์ด๋ƒ๋ฉด ๊ฐ์ฒด ์„ค๊ณ„ ์‹œ ์™ธ๋ถ€๋กœ ๋…ธ์ถœ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋‚ด๋ถ€์— ์ˆจ๊ฒจ์ง„ ๊ตฌํ˜„์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์—์š”.

์ด๊ฒƒ์„ Separation of interface and implementation(์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์˜ ๋ถ„๋ฆฌ)๋ผ๊ณ  ํ•ด์š”.

๋˜, ์•ˆ์ „ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด์š”.
๊ฐ์ฒด ์ž์ฒด๋ฅผ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ์„ ๋•Œ, ๋‚ด๋ถ€๊ฐ€ ์–ด๋–ป๊ฒŒ ๋˜์–ด ์žˆ๋Š”์ง€ ์–ด๋–ค ๋ฉ”์„œ๋“œ๊ฐ€ ์—ด๋ ค์žˆ๋Š”์ง€ ๋“ฑ์„ ๊ณ ๋ คํ•ด์•ผํ•ด์š”.

๋งŒ์ผ ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ๋งŽ์ด ์žˆ๊ณ , ๊ทธ๊ฑธ ์ž˜ ๋ชป ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์˜๋„์น˜ ์•Š๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ๊ณ ,
๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ๋‹ค๋ฅธ ๊ณณ์—์„œ๋Š” ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์—์„œ๋Š” ๊ทธ๊ฑธ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ์–ด์š”.

์ด๋ฅผ ์œ„ํ•ด ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถฐ ์œ ์—ฐํ•˜๊ณ , ์•ˆ์ •์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ์œ„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์•„์š”.

 

 

 

 

 

 

    ๐Ÿ”ฝ ๊ตฌํ˜„ํ•˜๊ธฐ

        ๐Ÿ“ฆ Service Layer

๋ณดํ†ต Backend(๋ฐฑ์—”๋“œ)์—์„œ MVC Pattern(ํŒจํ„ด)์„ ์ด์šฉํ•˜์—ฌ API๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด Controller, Service, Repository๋กœ
๋‚˜๋ˆ„์–ด ๊ฐœ๋ฐœ์„ ํ•˜๊ฒŒ ๋  ๊ฑฐ์—์š”.

์žํ”„๋ง(Java + Spring Boot) ์˜ˆ์‹œ๋ฅผ ํ•œ๋ฒˆ ๋ณผ๊ฒŒ์š”.

EquipmentResolver.java

728x90


์œ„ Resolver(๋ฆฌ์กธ๋ฒ„) Code(์ฝ”๋“œ)๋ฅผ ๋ณด๋ฉด 18๋ฒˆ์งธ ์ค„์— @RequiredArgsConstructor๋ฅผ ์„ ์–ธํ•˜๊ณ , 22๋ฒˆ์งธ ์ค„์— final Keyword(ํ‚ค์›Œ๋“œ)๋ฅผ ์ด์šฉํ•˜์—ฌ EquipmentService(์ธํ„ฐํŽ˜์ด์Šค)๋ฅผ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•˜๊ณ , ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”.

EquipmentService.java



EquipmentServiceImpl.java


๊ทธ๋ฆฌ๊ณ , ServiceImpl์€ Service๋ฅผ implements ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๊ณ ,
๊ฐ ๋ฉ”์„œ๋“œ๋ฅผ @Override ํ•˜์—ฌ ์žฌ ์ •์˜ํ•ด์ฃผ๊ณ  ์žˆ์–ด์š”.

์ด๋Š” Spring Boot(์Šคํ”„๋ง ๋ถ€ํŠธ) Framework(ํ”„๋ ˆ์ž„์›Œํฌ)์˜ ๊ธฐ๋Šฅ์ด ์•„๋‹Œ
์ˆœ์ˆ˜ ์ž๋ฐ”์˜ ๋‹คํ˜•์„ฑ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์š”.

์Šคํ”„๋ง์˜ ์˜์กด์„ฑ ์ฃผ์ž… ๋ฐฉ์‹์€ ์Šคํ”„๋ง์—์„œ ์ถ”์ƒํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜์กดํ•˜์—ฌ๋„
์Šคํ”„๋ง Container(์ปจํ…Œ์ด๋„ˆ)๊ฐ€ Runtime(๋Ÿฐํƒ€์ž„) ์‹œ์ ์— ์Šคํ”„๋ง Bean(๋นˆ)์— ๋“ฑ๋ก๋œ ๊ตฌํ˜„์ฒด๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์ด์—์š”.

์œ„ ์ฝ”๋“œ์—์„œ๋Š” EquipmentService ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ ,
๊ตฌํ˜„์ฒด์ธ EquipmentServiceImpl์„ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๊ฒŒ ๋œ๋‹ต๋‹ˆ๋‹ค.

Nest.js ์—ญ์‹œ TypeScript์—์„œ ์ด๋Ÿฐ ๋‹คํ˜•์„ฑ์„ ์ œ๊ณต(JavaScript ES6์—์„œ๋Š” ๋ฏธ์ง€์›) ํ•˜์ง€๋งŒ, TypeScript์˜ ๊ฒฝ์šฐ Compile(์ปดํŒŒ์ผ) ์‹œ์ ์—๋งŒ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์กด์žฌํ•˜๊ณ , ๋Ÿฐํƒ€์ž„ ์‹œ์ ์—๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ํŠน์„ฑ๊ณผ ํ•จ๊ป˜ Nest.js ํŠน์„ฑ(Module)์œผ๋กœ ์ธํ•ด ์Šคํ”„๋ง ๋ถ€ํŠธ๋ณด๋‹จ ์กฐ๊ธˆ ๋” ์ž‘์—…ํ•  ๊ฒƒ์ด ์žˆ์–ด์š”.


equipment-service.interface.ts

 

equipment-Impl.service.ts


์Šคํ”„๋ง์ด์˜€๋‹ค๋ฉด ์—ฌ๊ธฐ๊นŒ์ง€ ํ•ด์ฃผ๊ณ , Controller์—์„œ ์ด๋ฅผ ์ฃผ์ž…ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€๋งŒ,
Nest.js์—์„œ๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด์š”.

equipment-module.ts


๋ฐ”๋กœ ์œ„์™€ ๊ฐ™์ด ๋ชจ๋“ˆ์„ ๋“ฑ๋กํ•ด์ฃผ์–ด์•ผ ํ•ด์š”.

equipment.resolver.ts

๋ฐ˜์‘ํ˜•


๊ทธ๋ฆฌ๊ณ  Controller์—์„œ ์œ„์™€ ๊ฐ™์ด ์ƒ์„ฑ์ž์— ์ธ์ž๊ฐ’์œผ๋กœ @Inject("...")๋ฅผ ์ถ”๊ฐ€ํ•ด ์ค˜์•ผ ํ•˜๋Š”๋ฐ, @Inject()์˜ ์ธ์ž๊ฐ’์€ ๋ชจ๋“ˆ์˜ provide ๊ฐ์ฒด์˜ ๊ฐ’์„ ๋ช…์‹œํ•ด ์ฃผ์–ด์•ผ ํ•ด์š”.

์ด๋ฅผ ํ†ตํ•ด Provider(ํ”„๋กœ๋ฐ”์ด๋”)๋ฅผ ๋ชจ๋“ˆ์— ๋“ฑ๋กํ•  ๋•Œ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€์ •ํ•œ ํ”„๋กœ๋ฐ”์ด๋” ๋ฌธ์ž์—ด Token(ํ† ํฐ)์„ ์ฃผ์ž…ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š” ๋ฐฉ์‹์ด์—์š”.

์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ๋ฐ”์ด๋” ์ฃผ์ž… ์‹œ ์ƒ์„ฑ์ž ์ฃผ์ž… ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ ์ฃผ์ž…ํ•˜๊ฒŒ ๋˜์ง€๋งŒ, ์ด ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Class(ํด๋ž˜์Šค)๋ฅผ ์˜์กดํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜์กดํ•˜๊ณ  ์žˆ์œผ๋ฉด ์ƒ์„ฑ์ž ์ฃผ์ž… ํŒจํ„ด์„ ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์—†์–ด์š”.
์ด๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด์—์š”.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์œ„์™€ ๊ฐ™์ด ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ž์—ด ํ† ํฐ ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ ๋“ฑ๋กํ•˜์—ฌ ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ•˜๊ณ , ์ฃผ์ž…ํ•  ์ธํ„ฐํŽ˜์ด์Šค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— @Inject(...)๋ฅผ ๋‹ฌ์•„์ฃผ์–ด ๋ชจ๋“ˆ์˜ useClass์— ๋ช…์‹œํ•œ ๊ตฌํ˜„์ฒด๊ฐ€ ์ฃผ์ž…๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค˜์•ผ ํ•ด์š”.

npm run start:dev


๊ตฌํ˜„์ด ์ž˜ ๋˜์—ˆ๋‚˜ ํ™•์ธ์„ ์œ„ํ•ด ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™ํ•˜๊ณ , PlayGround๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด ๋ณผ๊ฒŒ์š”.

http://localhost:8081/graphql



Console Log


์œ„์™€ ๊ฐ™์ด ์ •์ƒ ์ž‘๋™ํ•˜๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.







 

 

 

ํด๋ฆฐ ์ฝ”๋”:๋‹จ์ˆœ ๊ธฐ์ˆ ์ž์—์„œ ์ง„์ •ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์ธ์ด ๋˜๊ธฐ๊นŒ์ง€

COUPANG

www.coupang.com

"์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค."

 

 

 

 

 

๐Ÿง ์ฐธ๊ณ  ์ž๋ฃŒ

 

Documentation | NestJS - A progressive Node.js framework

Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Rea

docs.nestjs.com

 

 

NestJS ์ธํ„ฐํŽ˜์ด์Šค๋กœ DIํ•˜๊ธฐ

nest JS interface dependency injection

medium.com

 

 

 

DI with Nest.js

์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. Nest.js๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ DI๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ library๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š์•„๋„ DI๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค. Hexagonal architecture์™€ ๊ฐ™์ด ํŠน์ • ์ธํ”„๋ผ ์Šค

ivvve.github.io

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•