TIL

250217 월 TIL

파란배개 2025. 2. 17. 17:50

Next.js에서 쿠키 사용하기

클라이언트 컴포넌트에서 쿠키 사용

const response = await client.POST("/api/posts", {
      body: {
        title,
        content,
      },
      credentials: "include",
    });
  • 클라이언트 컴포넌트는 브라우저에서 실행됨.
  • 쿠키를 불러올 때 credentials: "include" 옵션을 설정하면 자동으로 포함됨.

서버 컴포넌트에서 쿠키 사용

const response = await client.GET("/api/posts/{id}", {
    params: {
      path: {
        id,
      },
    },
    headers: {
          cookie: (await cookies()).toString(),
        }
  });
  • 서버 컴포넌트에서는 Next.js의 API를 이용해 직접 쿠키를 가져와야 함.
  • cookies() 함수를 통해 서버에서 쿠키를 불러와 요청의 헤더에 추가해야 함.

Next.js와 Spring Boot 간 쿠키 문제

  • 클라이언트 컴포넌트에서 쿠키 요청 시 서버에서 바로 응답함.
  • 그러나 Spring Boot 서버는 응답을 브라우저가 아닌 Next.js 서버로 반환.
  • Next.js 서버가 Spring Boot 응답을 받아 새 응답을 구성해 브라우저에 전달.
  • 이 과정에서 Spring Boot 서버가 보낸 쿠키가 헤더에서 사라지는 문제 발생.

해결 방법

1. 미들웨어를 이용해 처리

  • Next.js에서 미들웨어를 활용하여 요청을 가로채고 쿠키를 유지.

2. 응답 가로채기

  • Next.js 서버가 브라우저로 응답을 전달하기 전에 Spring Boot에서 받은 쿠키를 저장.
  • 이를 브라우저로 넘기는 응답에 다시 포함.

 

프론트엔드에서 인증/인가를 하는 이유

서버에서 토큰 재발급 및 인증을 처리하는데, 왜 프론트에서 인증/인가를 해야 할까?

1. 최적화

  • 불필요한 요청이 서버에 과도하게 발생하는 것을 방지.
  • 예: /member/me 요청이 매번 발생하는 문제 → 만료 시간 체크로 최적화.

2. 불필요한 API 요청 방지

  • post/write 페이지에 로그인하지 않은 사용자가 접근 가능.
  • 로그인하지 않은 사용자가 API 요청을 보내는 문제 발생.
  • Middleware에서 차단하여 서버 요청이 발생하지 않도록 처리.