
NestJS μ κ°λμ μΈν°μ
ν°μ λν΄ κ³΅λΆνλ μ€ λ¬Έλ© μ΄λ€ μκ°μ΄ λ€μλ€.
κ°λμ μΈν°μ ν° λͺ¨λ NestJSμμ μμ²κ³Ό μλ΅μ μ²λ¦¬νκΈ° μ μ μ€νλλ, λ§μΉ λ―Έλ€μ¨μ΄κ° μλκ°? λ λ€ ν΄λΌμ΄μΈνΈμ μμ²μ μ€κ°μ κ°λ‘μ± μ μμΌλ λμΌν κ°λ μλκ°?
μ΄λ¬ν μ΄μ κ° κΆκΈν΄ GPT μ μλκ³Ό ꡬκΈλ§μ μ΄μ¬ν μ§νν΄ κ°λμ μΈν°μ ν°μ μ°¨μ΄μ μ μ 리νμλ€.
κ°λ(Guards)μμΈν°μ ν°(Interceptors)λNestJSμμμμ²κ³Ό μλ΅μ μ²λ¦¬νκΈ° μ μ μ€νλλλ―Έλ€μ¨μ΄μ κ°μ μν μ μννμ§λ§, μ΄ λμ λͺ©μ κ³Ό κΈ°λ₯μ λ€λ₯΄λ€. λ λ€ λͺ¨λμμ²μ κ°λ‘μ± μ μλ€λ 곡ν΅μ μ μμ§λ§ κ°κ°μμν κ³Ό μ± μμ λͺ νν ꡬλΆλλ€.
β κ°λ(Guards) λ κΆν λΆμ¬ λ° μΈμ¦ , μμ² μ°¨λ¨μ κΈ°λ₯ μ μννλ€.
μ¦, μμ²μ μ²λ¦¬νκΈ° μ μ μ¬μ©μμ μΈμ¦ μν , κΆν λ±μ νμΈνμ¬ μμ²μ νμ©ν κ²μΈμ§ μ¬λΆλ₯Ό νλ¨νλ€.
λλ μμ²μ κ±°λΆν μ μμΌλ©° κ±°λΆν μ ν΄λΉ μμ²μ λ μ΄μ μ²λ¦¬λμ§ μκ³ μλ΅μ΄ μ¦μ λ°νλλ€.
β κ°λ(Guards) λ μ£Όλ‘ true , false λ₯Ό λ°ννμ¬ μμ²μ μΉμΈνκ±°λ κ±°λΆνλ€.
β κ°λ(Guards) λ μ£Όλ‘ λ³΄μκ³Ό κ΄λ ¨λ λ‘μ§(μμ : μΈμ¦ λ° κΆν κ²μ¬) μ μ§μ€νλ€.
canActivate(context: ExecutionContext): boolean{
const request = context.switchToHttp().getRequest(); // μμ² μ 보 κ°μ Έμ€κΈ°
return request.user ? true : false; // μΈμ¦λ μ¬μ©μμΈμ§ 체ν¬
}
β μΈν°μ
ν°(Interceptors) λ μμ² λ° μλ΅ λ³ν/μ‘°μ , λ‘κΉ
, μΊμ±, μ±λ₯ μΈ‘μ λ± μ μννλ€.
μ¦, μμ²μ μ²λ¦¬νκΈ° μ μ΄λ μλ΅μ ν΄λΌμ΄μΈνΈμκ² λ°ννκΈ° μ μ λ°μ΄ν°λ₯Ό μ‘°μνκ±°λ λ³ν νλ λ° μ¬μ©λλ€.
λν μΈν°μ
ν°(Interceptors)λ μμ²μ΄λ μλ΅λΏλ§ μλλΌ λ€μν λΆκ° μμ
μ μνν μ μλ€.
β μΈν°μ
ν°(Interceptors)λ μμ² λ°μ΄ν°μ νμμ λ³ννκ±°λ , μλ΅ λ°μ΄ν°λ₯Ό μ‘°μν μ μλ€.
β μΈν°μ
ν°(Interceptors)λ 보μ μΈμλ λ€μν λΆκ° μμ
μ μ§ννλ€.
intercept(context: ExecutionContext, next: CallHandler): Observable<any>{
// μλ΅ λ°μ΄ν°λ₯Ό { data: μλ μλ΅ } νμμΌλ‘ λ³ννλ€.
return next.handle().pipe(map(data => ({ data })));
}
β κ°λ(Guards) λ μ£Όλ‘ λ³΄μ μ μ΄μ μ λ§μΆλ©°, μμ²μ΄ νΉμ 쑰건μ λ§μ‘±νμ§ μμΌλ©΄ μμ²μ μ°¨λ¨ ν μ μλ€.
β μΈν°μ
ν°(Interceptors) λ μ£Όλ‘ λ°μ΄ν° λ³ν λ° μΆκ° λ‘μ§ μ€ν μ μ΄μ μ λ§μΆλ©°, μμ²μ μ°¨λ¨νμ§ μκ³ νλ¦μ μ μ΄νλ€.
κ°λ(Guards) λ 컨νΈλ‘€λ¬ λ λΌμ°νΈ νΈλ€λ¬ μ μ κ·ΌνκΈ° μ μ μ€νλλ©° μμ²μ μ§νμ λ§μ μ μλ€.μΈν°μ
ν°(Interceptors) λ νΈλ€λ¬ κ° μ€νλ νμλ μλνλ©°, μλ΅ λ°μ΄ν°λ₯Ό μμ νκ±°λ μΆκ° λ‘μ§μ μ μ©ν μ μλ€.