[TIL] 리액트 라우팅과 전역 상태 관리: Router & Context API

2025. 12. 2. 15:38·Archive/TIL

1. 학습 배경

오늘 투두리스트(TodoApp) 수업 중 'Provider'라는 생소한 단어가 등장했다. 찾아보니 useContext와 관련된 개념이었고, 이는 기존의 props 전달 방식의 불편함을 해결하기 위해 나온 것이었다.

또한, 라우팅 수업에서 교수님께서 Link가 아닌 Route 위주로 설명하시며 정적/동적 경로를 언급하셨는데, 이 부분도 개념이 모호하여 확실히 정리하고 넘어가려 한다.


2. React Router: 페이지 이동의 모든 것

처음엔 Link와 Route가 헷갈렸는데, 역할이 완전히 다르다.

2-1. Link vs Route (리모컨과 TV)

  • Link (이동 버튼): 사용자가 클릭하는 메뉴. URL만 바꾼다. (HTML <a> 태그 역할)
  • Route (화면 표시): 바뀐 URL을 감지하고 그에 맞는 컴포넌트(화면)를 보여준다.

2-2. path와 element

Route를 설정할 때 사용하는 핵심 속성이다.

  • path: 브라우저 주소창에 찍힐 경로 (예: /login)
  • element: 해당 경로일 때 보여줄 리액트 컴포넌트

2-3. 정적 경로 vs 동적 경로

  • 정적 경로 (Static): 주소가 고정된 경우. (예: /about, /login)
  • 동적 경로 (Dynamic): 주소의 일부분이 변수처럼 변하는 경우. 상세 페이지 등에서 사용된다.
    • 경로 뒤에 :id처럼 콜론을 붙여 사용한다.
    • 예: /product/:id (상품 번호에 따라 내용이 바뀜)

Spring 개발자 관점 비교:

  • path & element = @GetMapping (매핑)
  • useParams = @PathVariable (파라미터 추출)
  • useNavigate = return "redirect:..." (강제 이동)

3. useContext: 데이터 전달의 혁신

3-1. 기존 방식의 문제점 (Props Drilling)

리액트에서 부모가 자식에게 데이터를 줄 때는 props를 사용한다. 하지만 데이터가 필요한 컴포넌트가 손자의 손자의 손자라면?

  • 중간에 낀 모든 컴포넌트가 쓰지도 않는 props를 계속 전달만 해야 한다.
  • 이것을 **Props Drilling(프롭스 드릴링)**이라고 하며, 코드가 지저분해지고 유지보수가 힘들어진다.

3-2. useContext와 Provider

이 문제를 해결하기 위해 등장한 것이 **Context API (useContext)**다.

  • 개념: 데이터를 릴레이 경주처럼 넘겨주는 게 아니라, **방송국(Context)**에서 전파를 쏘면 라디오(컴포넌트)가 어디에 있든 바로 수신하는 방식이다.
  • Provider (제공자):
    • 데이터(state)를 가지고 있는 데이터 전달자이자 공급소이다.
    • 트리의 최상위(혹은 공통 부모)에서 하위 컴포넌트들을 감싸주면, 그 내부에 있는 모든 컴포넌트는 데이터에 접근할 수 있게 된다.

3-3. 비교 정리

구분 useState + Props useContext + Provider
데이터 전달 부모 → 자식 (직접 전달) Provider → 필요한 하위 컴포넌트 (직통)
전달 단계 단계별로 모두 거쳐야 함 (Drilling) 중간 단계 건너뛰고 바로 사용 가능
사용처 가까운 부모-자식 간 데이터 통신 전역적인 데이터 (테마, 로그인 정보 등)

4. 오늘의 결론

  1. 라우팅: Link는 문을 여는 손잡이, Route는 문 뒤에 있는 방이다. path로 주소를 정하고 element로 방을 꾸민다.
  2. 데이터: Props는 옆 사람에게 물건 건네주기, useContext는 확성기로 모두에게 방송하기다. 이때 확성기 역할을 하는 것이 바로 **Provider**이다.

확실히 Spring의 개념과 매핑하고, 문제 해결(Props Drilling) 관점에서 바라보니 이해가 빨랐다. 프로젝트에 바로 적용해 봐야겠다.

'Archive > TIL' 카테고리의 다른 글

[TIL] JPA 영속성 전이와 고아 객체: Cascade vs OrphanRemoval 정리  (0) 2025.12.16
[TIL] REST API 인증과 상태 관리: Session vs Token 정리  (0) 2025.12.09
[TIL] 리액트 핵심 이론 정리: 제이쿼리 차이, 클로저, 비동기  (0) 2025.12.05
[TIL] 리액트 필수 개념 정리: 콜백 함수, 캡슐화, AJAX  (0) 2025.11.26
2025.09.26 수업 내용 정리  (0) 2025.09.26
'Archive/TIL' 카테고리의 다른 글
  • [TIL] REST API 인증과 상태 관리: Session vs Token 정리
  • [TIL] 리액트 핵심 이론 정리: 제이쿼리 차이, 클로저, 비동기
  • [TIL] 리액트 필수 개념 정리: 콜백 함수, 캡슐화, AJAX
  • 2025.09.26 수업 내용 정리
tlsgkstj
tlsgkstj
짱구의 성장 일기
  • tlsgkstj
    코딩하는 짱구
    tlsgkstj
  • 전체
    오늘
    어제
    • 분류 전체보기 (159)
      • About (1)
      • Projects (35)
        • Personal Projects (21)
        • Team Projects (14)
      • Engineering (20)
        • CS & Tools (0)
        • Backend Core (15)
        • Frontend (1)
        • Infra & Cloud (2)
        • AI & Tools (1)
      • Trouble Shooting & Issues (0)
      • Growth & Career (38)
        • Interview Prep (0)
        • Retrospectives (38)
      • Archive (65)
        • TIL (8)
        • Daily Dev Q&A (56)
  • 블로그 메뉴

    • 홈
    • About
    • Projects
    • Tech Stack
    • Dev Log
    • GitHub
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    aws_s3
    데브페스트
    Project_Review
    backend
    network
    devlog
    경기기후바이브코딩
    REACT
    프로덕트개발자
    커리어리셋
    til
    SpringBoot
    Spring비교
    spring
    DevFestIncheon2025
    jpa
    프로젝트회고
    java
    클로드코드
    OrphanRemova
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
tlsgkstj
[TIL] 리액트 라우팅과 전역 상태 관리: Router & Context API
상단으로

티스토리툴바