2025 OSSCA 체험형 Next.js 3주차 요일별 회고록
0504
0505
0508
라우터에서 선택적 캐치올과 404 페이지 비교
비교 항목 | 선택적 캐치올 ([[...slug]] ) | 404 페이지 (not-found.tsx ) |
---|---|---|
라우트 매칭 | O (존재하는 경로) | X (없는 경로에 자동 적용) |
동적 분기 처리 가능? | O | X (그냥 고정된 에러 UI) |
리디렉션 가능? | O (내부 로직으로) | X (정적 페이지, 리디렉션 불가) |
상태 코드 | 200 또는 302 등 자유롭게 | 404 |
리디렉션이란: 브라우저 주소창이 바뀌면서 아예 새 페이지로 넘어가는 것.
선택적 캐치올은 메인 화면이라든가, 다른 페이지로 유연하게 넘길 수 있는거고 404 페이지는 그냥 정적인 화면만.
1
2
3
4
5
6
7
8
9
10
// page
import {useEffect} from 'react';
import {useRouter} from 'next/naviagtion';
export default function Page(){
const router = useRouter();
useEffect(()=>{
router.push('/login')
})
}
1
2
3
4
5
6
7
8
9
10
11
//middleware.ts
import {NextResponse} from 'next/server';
import type {NextRequest} from 'next/server';
export function middleware(request: NextRequest){
const login = Boolean(request.cookies.get('token'));
if (!login){
return NextResponse.redirect(new URL('/login', request.url))
}
return NextRespose.next();
}
0509
과거 커밋 메세지를 포함해서 PR이 생겨요
저번 2차 멘토링(0424) 때 토스는 스퀴시를 사용한다는 말을 듣고, 이번에 메인 브랜치로 PR을 보낼 때 스퀴시를 사용해봤다.
리베이스와 스퀴시의 차이점은 다음과 같다.
- 리베이스
- 커밋 여러개를 각각 냅두고 메인에 보냄.
- 스퀴시
- 커밋 여러개를 합쳐서 하나로 만듦.
원랜 아래 사진처럼 메인브랜치 안에 머지 메세지랑 다른 브랜치에서 커밋한 메세지 내용이 두 번 들어갔는데,
스퀴시를 사용하니까 그냥 커밋메세지가 하나로 통일 된 모습을 볼 수 있다.
음음 이렇게 하니까 확실히 보기 깔끔하긴하다.
근데…
원래 작업하던 브랜치로 다시 돌아가서 혹시 몰라 메인 브랜치와 머지하고 그 후에 다시 푸시하고 메인 브랜치에 PR을 보냈더니 현재 커밋메세지 뿐만 아니라 그전의 커밋 메세지들이 다시 보였다.
왜?
스퀴시는 깃헙이 메인 브랜치에서 a,b,c를 스퀴시한 d라는 커밋을 새로 만드는거다. 내가 원래 작업하던 브랜치로 돌아가서 메인이랑 병합을 했다고 하자. 그럼 내가 작업하던 브랜치에 d의 커밋 메세지가 들어갈거다. 근데 내가 작업하던 브랜치 관점에서는 d가 a, b, c를 메인에 병합한 역할을 한건질 모른다. 왜? 커밋의 ID가 다르기 때문이다. 깃헙에선 커밋 ID 해시값으로 이 커밋이 동일한지 아닌지를 판단한다. 그래서 나중에 다시 메인으로 PR을 날리면 해당 커밋이 아직 안 합쳐졌다고 보고 그 전에 있는 커밋 내용까지 보내는거다.
해결방법
그래서 squash를 사용한 후엔 기존 브랜치에서 rebase를 하거나, 다시 메인 브랜치 기준 새 브랜치를 파서 각각 기능별로 관리하는게 좋다고 한다.
나는 그냥 TIL 커밋이기도 하고, 팀 활동을 올렸던거라 팀 브랜치에다 해서 새 브랜치를 파기엔 뭐해서 그냥 거기서 이어 작업을 했다.
실제로는 메인 브랜치 커밋 메시지에 원래 커밋 메시지 내용이 전부 남아 있고, 파일 내용도 잘 병합되어 있었기 때문에, 크게 신경 쓸 문제는 아니었다만….
나중에 프로젝트를 진행할 땐 스퀴시를 했으면 메인 브랜치를 기준으로 다시 새로운 브랜치를 만들면서 개발을 진행하는게 나을 것 같다는 생각이 들었다.
왜냐면 브랜치 히스토리가 꼬일 수도 있고, 어차피 브랜치 용량은 작기 때문에(41byte) 여러개를 만들어도 상관없기 때문이다.