πŸ€” NestJS λͺ¨λ“ˆν™”μ˜ 이점은 뭘까?

Daehyeon YunΒ·2024λ…„ 8μ›” 18일

πŸ€”Β κ°œμš”

NestJS λ₯Ό κ³΅λΆ€ν•˜λ‹€κ°€ μ•„λž˜μ™€ 같은 μ½”λ“œλ₯Ό μ ‘ν•˜μ˜€λ‹€.

// app.module.ts
import { Module } from '@nestjs/common';
import { MoviesModule } from './movies/movies.module';
import { AppController } from './app.controller';

@Module({
  imports: [MoviesModule],
  controllers: [AppController],
  providers: [],
})
export class AppModule {}

이 μ½”λ“œλ₯Ό 보고 문뜩 μ–΄λ–€ 생각이 λ“€μ—ˆλ‹€.

μ™œ 각각의 λͺ¨λ“ˆμ„ μ»΄ν¬λ„ŒνŠΈμ²˜λŸΌ λΆ„λ¦¬ν•˜λŠ”κ±°μ§€?

κ·Έλƒ₯ λͺ¨λ‘ app.module.ts 에 μ μš©ν•˜μ§€ μ•ŠλŠ” μ΄μœ κ°€ μžˆμ„κΉŒ?

NestJS 의 λͺ¨λ“ˆν™”κ°€ ν”„λ‘œμ νŠΈ 관리에 μ–΄λ–€ 영ν–₯을 미칠까?

NestJSμ—μ„œ λͺ¨λ“ˆμ„ λΆ„λ¦¬ν•¨μœΌλ‘œμ¨ μ–»λŠ” 이점은??

μ΄λŸ¬ν•œ λͺ¨λ“ˆ ꡬ쑰둜 ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄ ν˜‘μ—…μ— λ―ΈμΉ˜λŠ” 영ν–₯은 μ—†μ„κΉŒ?

μ΄λŸ¬ν•œ μ˜λ¬Έμ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 이 글을 μ •λ¦¬ν•˜μ˜€λ‹€!


πŸ’‘NestJS의 λͺ¨λ“ˆ ꡬ쑰λ₯Ό μ‚¬μš©ν•˜λŠ” 이유이자 μž₯점은?

⭐ 1. λͺ¨λ“ˆν™”(Modularity)와 μΊ‘μŠν™”(Encapsulation)

  • λͺ¨λ“ˆν™”(Modularity)
    • NestJSλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μž‘μ€ λ‹¨μœ„λ‘œ λ‚˜λˆŒ 수 μžˆλ„λ‘ λͺ¨λ“ˆμ„ μ§€μ›ν•œλ‹€.
    • 각 λͺ¨λ“ˆμ€ νŠΉμ • 도메인에 λŒ€ν•œ κΈ°λŠ₯을 μΊ‘μŠν™”ν•˜μ—¬ λ…λ¦½μ μœΌλ‘œ 관리할 수 μžˆλ‹€.
    • μ½”λ“œμ˜ ꡬ쑰λ₯Ό λͺ…ν™•ν•˜κ²Œ ν•˜κ³  μœ μ§€λ³΄μˆ˜μ„±μ„ 높이며 λ‹€λ₯Έ κ°œλ°œμžμ™€μ˜ ν˜‘μ—…μ„ μˆ˜μ›”ν•˜κ²Œ ν•œλ‹€.
  • μΊ‘μŠν™”(Encapsulation)
    • λͺ¨λ“ˆν™”λœ κ΅¬μ‘°λŠ” 각 배정받은 λͺ¨λ“ˆμ„ μžμ‹ μ΄ μ±…μž„μ§€κ³  집쀑할 수 μžˆλ„λ‘ μœ λ„ν•œλ‹€.
    • λ‹€λ₯Έ λͺ¨λ“ˆ κ°„μ˜ μ˜μ‘΄μ„±μ„ μ΅œμ†Œν™”ν•˜μ—¬ μ½”λ“œκ°€ 변경될 λ•Œ 영ν–₯을 쀄일 수 μžˆλ‹€.

⭐ 2. κ΄€μ‹¬μ‚¬μ˜ 뢄리(Separation of Concerns)

  • NestJS 의 λͺ¨λ“ˆ κ΅¬μ‘°λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μ„±ν•˜λŠ” 각 뢀뢄이 λ…λ¦½μ μœΌλ‘œ 개발될 수 μžˆλ„λ‘ 도와쀀닀.
    β†’ μ˜ˆμ‹œ : AuthModule 은 인증과 κ΄€λ ¨λœ λͺ¨λ“  λ‘œμ§μ„ 닀루고 RegisterModule 은 둜그인 및 νšŒμ›κ°€μž…κ³Ό κ΄€λ ¨λœ λͺ¨λ“  λ‘œμ§μ„ 닀룬닀.
    • 이λ₯Ό 톡해 λ‹€λ₯Έ λͺ¨λ“ˆμ—μ„œλŠ” ν•΄λ‹Ή λ‘œμ§μ„ μ‹ κ²½ μ“°μ§€ μ•Šμ•„λ„ 되며 μ΄λŠ” μœ μ§€λ³΄μˆ˜μ™€ ν…ŒμŠ€νŠΈλ₯Ό μš©μ΄ν•˜κ²Œ λ§Œλ“œλŠ” νš¨κ³Όκ°€ μžˆλ‹€.

⭐ 3. μž¬μ‚¬μš©μ„±(Reusability)πŸ€”Β κ°œμš”

  • NestJS 의 λͺ¨λ“ˆμ€ λ…λ¦½μ μœΌλ‘œ μž‘μ„±λ˜μ–΄ λ‹€λ₯Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λ‚˜ ν”„λ‘œμ νŠΈμ—μ„œ μž¬μ‚¬μš©λ  수 μžˆλ‹€.
    β†’ μ˜ˆμ‹œ : AuthModule 은 λ‹€λ₯Έ ν”„λ‘œμ νŠΈμ— μž¬μ‚¬μš©ν•  수 있으며, ν•„μš”ν•œ 경우 λͺ¨λ“ˆμ„ μ‰½κ²Œ ν™•μž₯ν•˜κ±°λ‚˜ μˆ˜μ •ν•  수 μžˆλ‹€.

⭐ 4. μœ μ—°μ„±(Flexibility)

  • μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•΄μ•Ό ν•  λ•Œ, μƒˆλ‘œμš΄ λͺ¨λ“ˆμ„ μƒμ„±ν•˜μ—¬ κΈ°μ‘΄ λͺ¨λ“ˆκ³Ό λ…λ¦½μ μœΌλ‘œ κ°œλ°œν•  수 μžˆλ‹€.
    • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 컀짐에 따라 ꡬ쑰λ₯Ό 더 μœ μ—°ν•˜κ²Œ ν™•μž₯ν•  수 μžˆλ‹€.

⭐ 5. ν…ŒμŠ€νŠΈ μš©μ΄μ„±(Testability)

  • λͺ¨λ“ˆμ΄ λ…λ¦½μ μ΄λ―€λ‘œ ν…ŒμŠ€νŠΈ λ˜ν•œ 각 λͺ¨λ“ˆ λ‹¨μœ„λ‘œ μˆ˜ν–‰λ˜κΈ°μ— 훨씬 μ‰¬μ›Œμ§„λ‹€.
    β†’ 이λ₯Ό 톡해 각 λͺ¨λ“ˆμ΄ μ •μƒμ μœΌλ‘œ λ™μž‘ν•˜λŠ”μ§€ 호율적으둜 검증할 수 있고, λ¬Έμ œκ°€ λ°œμƒν•  경우 ν•΄λ‹Ή λͺ¨λ“ˆμ— 집쀑할 수 μžˆλ‹€.

⭐  6. νŒ€ ν˜‘μ—… 및 μŠ€μΌ€μΌλ§(Team Collaboration and Scaling)

  • ν˜‘μ—…μ˜ μš©μ΄μ„±
    • ν”„λ‘œμ νŠΈ ꡬ성원 λ‚΄μ—μ„œ 각 νŒ€μ›μ΄ νŠΉμ • λͺ¨λ“ˆμ΄ μ§‘μ€‘ν•˜μ—¬ μž‘μ—…ν•  수 μžˆμ–΄ μ—¬λŸ¬ μ‚¬λžŒμ΄ λ™μ‹œμ— λ‹€μ–‘ν•œ κΈ°λŠ₯을 κ°œλ°œν•˜λŠ” 것이 μš©μ΄ν•΄μ§„λ‹€.
  • μŠ€μΌ€μΌλ§(Scaling)
    • ν”„λ‘œμ νŠΈ 규λͺ¨κ°€ 컀질 λ•Œ, λͺ¨λ“ˆ λ‹¨μœ„λ‘œ μž‘μ—…μ„ λΆ„ν• ν•¨μœΌλ‘œμ¨ 효율적으둜 ν˜‘λ ₯ν•  수 있게 λœλ‹€.

πŸ€”Β κ·Έλ ‡λ‹€λ©΄ 단점은 μ—†μ„κΉŒ?

β†’ λͺ¨λ“ˆμ„ λΆ„λ¦¬ν•˜λŠ” 것을 μœ λ„ν•˜λŠ” 만큼 μ•„λž˜μ™€ 같은 λ¦¬μŠ€ν¬μ™€ 단점이 μ‘΄μž¬ν•œλ‹€!

πŸ‘ŽΒ 1. ν”„λ‘œμ νŠΈ λ³΅μž‘μ„± 증가

  • NestJS λŠ” μ‚¬μš© λͺ©μ  μžμ²΄κ°€ μž‘μ€ ν”„λ‘œμ νŠΈμ—λŠ” μ–΄μšΈλ¦¬μ§€ μ•Šλ‹€. μž‘μ€ ν”„λ‘œμ νŠΈμ—μ„œ λͺ¨λ“ˆμ„ λ„ˆλ¬΄ 많이 λ‚˜λˆ„κ²Œ λœλ‹€λ©΄ 였히렀 λ³΅μž‘μ„±μ΄ μ¦κ°€ν•˜μ—¬ μœ μ§€λ³΄μˆ˜κ°€ νž˜λ“€μ–΄μ§ˆ 수 μžˆλ‹€.
  • ν•„μš”ν•œ λͺ¨λ“ˆ κ°„μ˜ 관계λ₯Ό 잘λͺ» κ΄€λ¦¬ν•˜λ©΄ μ˜μ‘΄μ„± 사이클(Dependency cycle) 이 λ°œμƒν•  수 μžˆλ‹€!

πŸ‘ŽΒ 2. 초기 μ„€κ³„μ˜ 문제

  • λͺ¨λ“ˆμ„ λΆ„λ¦¬ν•˜μ—¬ 각각의 λ…λ¦½μ²΄λ‘œ μš΄μ˜ν•˜κΈ° λ•Œλ¬Έμ— ν”„λ‘œμ νŠΈ μ΄ˆλ°˜λΆ€ν„° λͺ¨λ“ˆ ꡬ쑰λ₯Ό 잘λͺ» μ„€κ³„ν•˜λ©΄ μΆ”ν›„ λ³€κ²½ν•˜λŠ” 데 λ§Žμ€ μ‹œκ°„μ΄ μ†Œμš”λ  수 μžˆλ‹€.
    β†’ λ”°λΌμ„œ 초기 섀계 λ‹¨κ³„μ—μ„œ λͺ¨λ“ˆμ„ 잘 λ‚˜λˆ„λŠ” 것이 μ€‘μš”!

😝 결둠!

NestJSμ—μ„œ μ§€μ›ν•˜λŠ” λͺ¨λ“ˆν™” κ΅¬μ‘°λŠ” Spring κ³Ό 같이 μ—”ν„°ν”„λΌμ΄μ¦ˆκΈ‰ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΄€λ¦¬ν•˜κΈ°μ— 맀우 μœ μš©ν•œ ꡬ쑰라고 μƒκ°ν•œλ‹€. 마치 MVC(Model-View-Controller)λ₯Ό μ—°μƒμ‹œν‚€λŠ” ꡬ쑰λ₯Ό 톡해 μœ μ§€λ³΄μˆ˜μ„±κ³Ό μž¬μ‚¬μš©μ„±μ„ 높이고, νŒ€ ν˜‘μ—…μ„ μ›ν™œν•˜κ²Œ ν•˜λ©°, μœ μ—°ν•˜κ²Œ ν™•μž₯ν•  수 μžˆλŠ” μ„œλΉ„μŠ€λ₯Ό κ°œλ°œν•  수 μžˆλ‹€λŠ” 것은 정말 μ’‹λ‹€κ³  μƒκ°ν•œλ‹€.
ν•˜μ§€λ§Œ, κ³Όμœ λΆˆκΈ‰μ΄λΌλŠ” 말이 μžˆλ‹€. μž‘μ€ ν”„λ‘œμ νŠΈμ—μ„œλŠ” 였히렀 λ³΅μž‘μ„±μ„ μ¦κ°€μ‹œμΌœ ν”„λ‘œμ νŠΈλ₯Ό μ›ν™œνžˆ μ§„ν–‰ν•˜μ§€ λͺ»ν•˜κ²Œ 될 수 μžˆμ–΄ μ μ ˆν•œ λͺ¨λ“ˆν™” μ „λž΅μ΄ κΌ­ μ„ ν–‰λ˜μ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•œλ‹€!

profile
μ—΄μ‹¬νžˆ μ‚΄μ•„μ•Όμ§€

0개의 λŒ“κΈ€