ν°μ€ν 리 λ·°
𧬠NestJS API Versioning – μμ μ μΈ μλΉμ€ νμ₯μ μν λ²μ λ μ λ΅
octo54 2025. 6. 2. 10:58𧬠NestJS API Versioning – μμ μ μΈ μλΉμ€ νμ₯μ μν λ²μ λ μ λ΅
NestJSλ API λ²μ κ΄λ¦¬(versioning) κΈ°λ₯μ 곡μμ μΌλ‘ μ§μνμ¬,
μλΉμ€ μ€λ¨ μμ΄ μλ‘μ΄ API λ²μ μ λμ
νκ±°λ, ꡬλ²μ κ³Όμ νΈνμ μ μ§ν μ μλλ‘ λμ΅λλ€.
μ΄λ² κΈμ NestJS 곡μ λ¬Έμ Versioningμ λ°νμΌλ‘
URL, ν€λ, λ―Έλμ΄ νμ
, 컀μ€ν
μ λ΅μ ν΅ν API λ²μ λ μ λ΅μ μ€λ¬΄ μ€μ¬μΌλ‘ μ 리νμ΅λλ€.
π‘ “λ²μ κ΄λ¦¬λ μ±μ₯νλ μλΉμ€μμ νμμ λλ€. V1 → V2λ‘ APIλ₯Ό μ§νμν€λ©΄μλ ꡬ μ¬μ©μμκ² νΌλμ μ£Όμ§ λ§μΈμ!”
β 1. μ μ λ²μ μ λ΅ νμ±ν
// main.ts
import { VersioningType } from '@nestjs/common';
const app = await NestFactory.create(AppModule);
app.enableVersioning({
type: VersioningType.URI, // or HEADER, MEDIA_TYPE, CUSTOM
});
π’ 2. URI λ°©μ – κ°μ₯ λͺ ννκ³ λ리 μ¬μ©λ¨
@Controller({ path: 'cats', version: '1' })
export class CatsControllerV1 {
@Get()
findAll() {
return 'This is version 1';
}
}
@Controller({ path: 'cats', version: '2' })
export class CatsControllerV2 {
@Get()
findAll() {
return 'This is version 2';
}
}
μμ² μμ
GET /v1/cats
GET /v2/cats
βοΈ RESTfulν μλΉμ€μμλ κ°μ₯ μ§κ΄μ μ΄κ³ λ¬Έμνλ μ¬μ
π§ 3. Header λ°©μ – ν΄λΌμ΄μΈνΈμ λ ΈμΆλμ§ μλλ‘
app.enableVersioning({
type: VersioningType.HEADER,
header: 'x-api-version',
});
@Controller({ path: 'cats', version: '1' })
μμ² μμ
GET /cats
Headers: { x-api-version: 1 }
βοΈ μΉ μ±, λͺ¨λ°μΌ μ±μμ ν€λλ‘ μ μ‘νλ κ²½μ° μ 리ν¨
β API ν μ€νΈ/λ¬Έμνλ 볡μ‘ν΄μ§ μ μμ
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-XXXXXX"
data-ad-slot="YYYYYY"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
π§ͺ 4. Media Type λ°©μ (Accept ν€λ μ¬μ©)
app.enableVersioning({
type: VersioningType.MEDIA_TYPE,
});
@Controller({ path: 'cats', version: '1' })
μμ² μμ
GET /cats
Headers: Accept: application/vnd.api+json;version=1
βοΈ GraphQL, REST HAL, JSON API λ±μμ μ¬μ©
β ꡬν λμ΄λμ ν μ€νΈ 볡μ‘λλ μλμ μΌλ‘ λμ
π§© 5. Custom μ λ΅λ μ§μλ¨
app.enableVersioning({
type: VersioningType.CUSTOM,
extractor: (request: Request) => {
return request.headers['custom-version'] as string;
},
});
βοΈ μμ²μ cookies, query, headers, params λ± μ΄λμλ λ²μ μΆμΆ κ°λ₯
β 6. λ©μλ λ 벨μμ λ²μ μ€μ λ κ°λ₯
@Controller('cats')
export class CatsController {
@Get()
@Version('1')
getV1() {
return 'v1';
}
@Get()
@Version('2')
getV2() {
return 'v2';
}
}
βοΈ νλμ 컨νΈλ‘€λ¬ λ΄μμ λ€μ€ λ²μ μ 곡쑴μν¬ μ μλ λ°©μ
π§ μ€λ¬΄ μ λ΅ μμ½
λ²μ μ λ΅ μ€λͺ μ₯μ λ¨μ
URI | /v1/cats, /v2/cats | μ§κ΄μ , λ¬Έμν μ¬μ | κ²½λ‘ λ³κ²½μΌλ‘ λΌμ°ν μ¦κ° |
HEADER | x-api-version | URL μΌκ΄μ± μ μ§ | ν μ€νΈ/λ¬Έμν λ²κ±°λ‘μ |
MEDIA_TYPE | Accept: ...;version=1 | ν¬λ§· κΈ°λ° APIμ μ 리 | λμ΄λ λμ |
CUSTOM | μΏ ν€, 쿼리 λ± μ»€μ€ν | μ μ°μ± μ΅κ³ | μ μ§λ³΄μ λ³΅μ‘ |
π μ€λ¬΄ ν
- λ²μ μ¦κ° μ λͺ νν λ§μ΄κ·Έλ μ΄μ λ¬Έμ μ 곡 νμ
- Swagger μ°λ μ versionλ³ κ·Έλ£Ήνλ₯Ό ν΅ν΄ λ¬Έμν κΆμ₯
- VersioningType.URI + @Version() μ‘°ν©μ νμ₯μ±κ³Ό κ΄λ¦¬μ λ§€μ° μ 리
NestJS API Versioning,NestJS λ²μ κ΄λ¦¬,NestJS REST API λ²μ ,NestJS Header κΈ°λ° λ²μ ,NestJS Custom Version,NestJS Media Type λ²μ ,NestJS URI λ²μ λ,NestJS Versioning μ λ΅,NestJS Swagger λ²μ λ¬Έμν,NestJS μ€λ¬΄ API ꡬ쑰
'framework > NestJS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
- Total
- Today
- Yesterday
- νλ‘ νΈμλ
- νλ‘ νΈμλλ©΄μ
- rag
- Webpack
- llm
- Ktor
- NestJS
- Next.js
- μΉκ°λ°
- Python
- λ°±μλκ°λ°
- seo μ΅μ ν 10κ°
- nextJS
- κ°λ°λΈλ‘κ·Έ
- JAX
- λ₯λ¬λ
- νμ΄μ¬ μκ³ λ¦¬μ¦
- gatsbyjs
- Prisma
- CI/CD
- AIμ±λ΄
- nodejs
- PostgreSQL
- SEOμ΅μ ν
- kotlin
- REACT
- SEO μ΅μ ν
- App Router
- fastapi
- Docker
μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |