당신의 .htaccess를 해킹하지 마세요: Laravel 버전을 전환하는 더 나은 방법
Source: Dev.to

Overview
우리 모두 그런 경험이 있습니다. 밤 10시, Laravel 사이트에 큰 업데이트를 마쳤고 이제 라이브로 전환할 시간입니다.
예전에는 많은 사람들이 먼저 시도하는 .htaccess 트릭을 사용했습니다. 새 버전을 서브 폴더에 업로드하고, 똑똑한 Apache 규칙으로 웹사이트를 “가리키게” 했죠.
그때는 똑똑해 보였지만, 곧 버그가 나타났습니다: 깨진 CSS 경로, 세션 오류, 그리고 가장 무서운 것은 .env 파일이 실수로 공개되는 경우였습니다.
오늘은 훨씬 더 나은, “프로” 방식인 심볼릭 링크(symlink) 를 소개하고자 합니다. 기술적인 용어처럼 들리지만, 실제로는 데스크톱에 바로 가기를 만드는 것만큼 간단합니다.
The “Bakery” Analogy
당신이 베이커리를 운영한다고 상상해 보세요. 디스플레이 케이스(웹사이트) 안에 케이크를 진열합니다.
.htaccess 방식: 새 케이크를 만들 때마다 전체 디스플레이 케이스를 옮기려 합니다. 무겁고, 느리며, 뭔가를 떨어뜨릴 위험이 있습니다.
symlink 방식: 디스플레이 케이스는 그대로 두고 내부 트레이만 교체합니다. 고객은 언제나 같은 자리를 보지만, 케이크는 언제나 신선합니다.
Why the .htaccess Method Is Risky
“어떻게”에 들어가기 전에, .htaccess 로 버전을 전환하면 안 되는 이유는 다음과 같습니다:
- 보안: 리다이렉트가 완벽하지 않으면 민감한 파일(예:
.env)이 노출될 위험이 있습니다. - 경로 문제: Laravel의
public_path()같은 함수가 서브 폴더에 프로젝트가 있을 때 혼란스러워집니다. - 다운타임:
.htaccess파일에 오타가 있으면 “500 Internal Server Error” 로 전체 사이트가 다운될 수 있습니다.
The Better Way: The “Current” Folder Strategy
파일을 옮기는 대신, 서버에 다음과 같은 구조를 만들세요:
/my-project/
├── releases/
│ ├── v1_old/ (Your old code)
│ └── v2_new/ (Your new code)
└── current/ (The “Magic” Shortcut)
웹 서버(Apache 또는 Nginx)는 항상 current/public 폴더를 바라봅니다. 버전을 전환하려면 current 바로 가기를 다른 폴더로 가리키기만 하면 됩니다.
Step‑By‑Step Guide
1. Prepare Your Folders
새 버전을 releases/ 안의 폴더에 업로드합니다. 여기서는 v2_new 라고 부르겠습니다.
2. The Magic Command
터미널(SSH)을 엽니다. 파일을 복사하는 대신 다음 명령을 실행합니다:
ln -sfn /home/username/releases/v2_new/public /home/username/public_html
이 명령이 하는 일은? 서버에 “public_html에 접근하면 실제로는 v2_new/public 안의 파일을 보여줘라” 라고 알려주는 것입니다. 즉시 적용됩니다—로드 바도 없고, 기다릴 필요도 없습니다.
3. The “Oops” Button (Rollback)
v2_new 에서 큰 버그를 발견하면, 1초 만에 이전 버전으로 되돌릴 수 있습니다:
ln -sfn /home/username/releases/v1_old/public /home/username/public_html
이게 전부입니다—다운타임 없이, 위험한 리다이렉트 없이, .env 파일은 여전히 안전하게 비공개 상태로 유지됩니다.