Angular로 웹 애플리케이션을 개발할 때 URL을 통해 데이터를 전달하는 방식은 크게 두 가지가 있습니다
- 동적 라우팅 (Route Parameter) – /user/:id
- 쿼리 파라미터 (Query Parameter) – /user?id=123
이 두 방식은 모두 특정 데이터를 기반으로 뷰를 렌더링할 수 있게 도와주지만, 각각의 사용 목적과 장단점이 뚜렷하게 다릅니다.
1. 동적 라우팅 (Route Parameter)
// 예: /products/123
const routes: Routes = [
{ path: 'products/:productId', component: ProductDetailComponent }
];
// ProductDetailComponent.ts
ngOnInit() {
this.route.paramMap.subscribe(params => {
const id = params.get('productId');
this.loadProduct(id);
});
}
장점
- SEO에 유리: URL이 구조적으로 깔끔해서 검색 엔진이 잘 인식
- 의미론적 URL: RESTful URL처럼 읽기 쉬움 (/user/123)
- 브라우저 히스토리에 잘 남음
단점
- 여러 값을 넘기기 복잡 (ex: /user/123/edit/true)
- 필수가 아닌 파라미터 처리 어려움
2. 쿼리 파라미터 (Query Parameter)
// 예: /products?productId=123&mode=edit
const routes: Routes = [
{ path: 'products', component: ProductDetailComponent }
];
// ProductDetailComponent.ts
ngOnInit() {
this.route.queryParamMap.subscribe(params => {
const id = params.get('productId');
const mode = params.get('mode');
this.loadProduct(id, mode);
});
}
장점
- 다수의 파라미터 처리에 유리: 검색 필터, 페이지네이션 등에 적합
- 선택적 파라미터 쉽게 처리 가능
- 값 변경에 유연: queryParams 변경만으로 뷰 리렌더링 가능
단점
- SEO 측면에서 덜 유리
- URL이 복잡하고 읽기 어려울 수 있음 (?filter=a&page=2&order=desc)
비교 표
| 항목 | 동적 라우팅 (:id) | 쿼리 파라미터 (?id=123) |
| 대표 용도 | 상세 페이지 (e.g. 상품, 유저) | 검색, 필터, 페이지 등 UI 제어 |
| SEO 적합성 | 우수 | 낮음 |
| URL 의미 표현 | 자연스럽고 명확 | 다소 복잡 |
| 파라미터 개수 | 보통 1~2개 이하 | 여러 개 가능 |
| 값 변경 후 URL 갱신 | 재라우팅 필요 | router.navigate로 즉시 가능 |
| 예시 | /posts/42 | /posts?page=2&sort=desc |
어떤 상황에 어떤 걸 써야 할까?
동적 라우팅을 써야 하는 경우
- 특정 리소스를 ID 기반으로 불러올 때: /product/:id, /user/:userId
- RESTful URL이 필요할 때
- 해당 페이지가 독립적인 상세 페이지일 때
쿼리 파라미터를 써야 하는 경우
- 검색/필터 조건이 많을 때
- 리스트 페이지에서 URL 상태 공유가 필요할 때
- 뷰 상태(예: 모달 열기 여부)를 URL로 제어하고 싶을 때
실제 사용 예시
상품 리스트 검색 페이지
// URL 예시: /products?category=shirt&sort=price&page=2
router.navigate([], {
relativeTo: this.route,
queryParams: { category: 'shirt', sort: 'price', page: 2 },
queryParamsHandling: 'merge'
});
- 검색 조건이 많고, 사용자가 페이지를 리프레시하거나 공유해도 같은 조건을 유지하려면 쿼리 파라미터 사용이 유리합니다.
사용자 상세 페이지
// URL 예시: /user/123
this.route.paramMap.subscribe(params => {
const userId = params.get('id');
this.userService.getUserById(userId).subscribe(...);
});
- 사용자를 식별해서 상세 정보를 보여주는 구조에서는 :id 기반의 동적 라우팅이 명확하고 직관적입니다.
- 상세/ID 기반 페이지 → 동적 라우팅
- 상태/검색 조건 제어 → 쿼리 파라미터
둘을 조합해서 사용할 수도 있습니다. 예: /user/:id?tab=profile
'개발 공부 > Angular' 카테고리의 다른 글
| Angular 20 - *ngIf, *ngFor, *ngSwitch Deprecation (0) | 2025.07.18 |
|---|---|
| Angular Subject, BehaviorSubject (0) | 2025.07.05 |
| 앵귤러 동적 라우팅(Dynamic Routing) (0) | 2025.05.31 |
| RxJS 연산자 debounceTime, switchMap, mergeMap (1) | 2025.05.29 |
| 컴포넌트 인클루전 방식 vs 라우트 분리 방식 (0) | 2025.05.27 |