401 (Unauthorized): 인증이 필요하거나, 인증이 실패한 경우403 (Forbidden): 인증은 되었지만 해당 리소스 권한 없음1. Access Token 헤더 전송
2. Access Token 만료 시 Refresh Token 발급
3. refresh 요청 시 이전 토큰 폐기 및 새로운 refresh token 발급
* Refresh Token은 `HttpOnly + Secure + SameSite=Strict` 쿠키에 저장
1️⃣ useRef() + .current: 특정 DOM 요소에 직접 접근 시 사용
import { useRef, useEffect } from 'react';
function MyComponent() {
const inputRef = useRef<HTMLInputElement>(null);
useEffect(() => {
if (inputRef.current) {
inputRef.current.focus();
}
}, []);
return <input ref={inputRef} />;
}
2️⃣ useEffect(): DOM이 렌더링 된 후 동작을 수행할 때 사용
useEffect(() => {
console.log(document.getElementById('myDiv')?.innerText);
}, []);
3️⃣ className/style props: DOM 속성을 선언적으로 제어
<div className={isActive ? 'active' : ''} style={{ color: 'red' }}>
Hello
</div>
4️⃣ dangerouslySetInnerHTML: HTML 문자열을 DOM 삽입 시 사용 (XSS 위험)
<div dangerouslySetInnerHTML={{ __html: '<b>Hello</b>' }} />
✏️ 직접 접근이 필요한 경우에만 ref로 제한적으로 사용하는 것이 베스트
<input>, <textarea>, 댓글, 게시판 등 사용자가 입력을 표시하는 곳에서 발생<img src="http://bank.com/transfer?amount=10000&to=hacker">XSS : 출력 시 반드시 이스케이프 처리 및 입력값 필터링,
CSP(악성 스크립트 차단) 적용, 쿠키에 HttpOnly 속성 설정
CSRF : CSRF 토큰 사용 및 SameSite 쿠키 옵션 설정,
origin 헤더 검증, 로그아웃 시 세션 무효화, 세션 timeout 설정
그리고.. 실제 서비스에서의 Next.js의 단점/제약 정리 (App Router 기준)
getServerSideProps → server component or fetch로 대체layout.tsx, loading.tsx, error.tsx 등 여러 파일 관리 필요Next의 장점은 충분히 알고 있지만, 단점에 대한 질문이 나오면 바로 답변이 나오지 않아서 정리해봤다 ㅎㅎ..