[Internship] 2025-11 인턴일지
👩🏻💻 11월 동안 인턴을 하면서 진행한 작업들
1️⃣ Yarn Berry로 마이그레이션하기
기존 프로젝트의 패키지 관리 방식을 개선하기 위해 Yarn Berry로 마이그레이션을 진행했다. 처음 사용하는 번들러 환경이라 개념을 이해하는 데 시간이 필요했지만, 그 과정에서 Yarn과 Yarn Berry의 구조적 차이와 Yarn Berry가 제공하는 장점들을 깊이 있게 공부할 수 있었다. 특히 Yarn Berry는 node_modules를 생성하지 않고 ZIP 기반으로 패키지를 관리하는 구조라, 더 빠른 설치 속도와 명확한 디펜던시 매핑, 충돌 방지 등 기존 Yarn보다 훨씬 안정적인 장점을 가지고 있다는 것을 직접 경험하며 깨달았다.
마이그레이션 과정에서는 .pnp.cjs를 활용한 패키지 로딩 구조를 이해하는 것이 핵심이었다. 처음에는 익숙한 node_modules가 보이지 않아 적응이 어려웠지만, 오히려 PnP 방식 덕분에 “어디에서 어떤 패키지가 사용되는지”가 훨씬 명확해지는 장점을 느꼈다. 기존 패키지 구조와 충돌하는 영역을 해결하며 프로젝트 전체의 의존성 구조를 재정비할 수 있었고, 이를 통해 Yarn Berry 환경에 대한 이해도도 크게 높아졌다.
또한 앞으로는 Yarn Berry의 핵심 기능 중 하나인 Zero-Install도 적용해볼 계획이다. 팀원 환경 간 패키지 버전 불일치 문제를 근본적으로 해결할 수 있고, 설치 속도도 더 빨라지는 등 효율적인 개발 환경을 만들 수 있을 것이라는 기대가 생겼다.
2️⃣ Dockerfile 작성부터 CI/CD 구축을 지나 AWS 배포 자동화까지
이번 달의 가장 큰 도전은 Docker 빌드와 CI/CD 구축이었다. 사실 Docker를 이번에 처음 설치해봤을 정도로 DevOps 경험이 거의 없었기 때문에, Dockerfile을 작성하는 과정 하나하나가 전부 새로웠고 엄청 어려웠다. 특히 Yarn Berry로 마이그레이션한 직후라 기존 Yarn 기반 Dockerfile 명령어 일부와 안 맞다는 걸 깨닫는 순간 진짜 큰일났다 싶었다.. 허허.. 이걸 하루 안에 끝내면 난 진짜 천재다 라는 생각이 맨 먼저 듦.. 일단 리서치부터 시작했는데 Yarn Berry 환경에서의 Dockerfile 예시가 인터넷에 거의 없어 2~3시간 동안 구글링과 레퍼런스 검색만 반복하며 하나씩 시행착오를 겪었다. 너무 힘들었다 흑흑….
일단 Dockerfile의 코드 한 줄 한 줄을 다 뜯어보고 해석하기 시작했다. 어느 정도의 플로우와 명령어 등을 이해했고 결국 Dockerfile을 만들어 빌드, 태그 달기, 푸시까지 성공했다! Yarn Berry는 node_modules가 없는 구조라 빌드 때 종속성 문제가 생길 수 있다는 조언을 듣고 빌드 단계에서만 node_modules를 생성하도록 추가 처리했다. .pnp.cjs, .yarnrc.yml, .yarn 디렉토리가 Docker 빌드에서 누락되면 바로 실패한다는 것도 직접 부딪히며 이해했다. 처음 겪는 문제였지만, 실행할 때마다 왜 실패했는지 원인을 추적하고 해결해가는 과정 자체가 큰 공부가 되었다.
CI/CD 역시 처음 연동해보는 작업이라 한 단계 한 단계가 전부 도전이었다. GitHub Actions에서 테스트와 빌드를 분리하고, 빌드된 이미지를 ECR로 push한 뒤 ECS 서비스에서 자동으로 롤링 업데이트가 되도록 워크플로우를 구성했다. 이를 통해 AWS가 어떤 식으로 실제 서비스를 업데이트하는지, ECS와 ECR이 어떤 역할을 하는지, 태스크 정의가 어떻게 동작하는지까지 이해할 수 있었다.
무엇보다 AWS 자체를 잘 몰랐기 때문에 서버 개발자 동료분에게 질문을 정말 많이 했다. 너무 많이 여쭤봐서 죄송한 마음도 컸지만, 덕분에 ECS/ECR 구조와 배포 흐름을 훨씬 깊게 이해하게 되었고 지금은 감사한 마음뿐이다.
DevOps에 대해 감자였던 내가 실무에서 직접 Dockerfile을 만들고 CI/CD를 구성하고 AWS 배포까지 연결해본 경험은 정말 값진 시간이었다. 너무 힘들었지만 결국 해냈다는 사실이 너무 뿌듯하고, 내가 직접 서비스 배포 자동화까지 만들었다는 게 믿기지 않을 정도로 행복했다 희희..
3️⃣ RefreshToken 작업하기
이번 달에는 인증 구조를 개선하는 과정에서 AccessToken과 RefreshToken의 동작 원리를 깊이 이해하게 되었다. 기존에는 AccessToken을 localStorage에 저장하는 방식으로 동작하고 있었는데, 이는 보안 측면에서 취약하고 토큰 탈취 위험이 높다는 단점이 있었다. 이를 개선하기 위해 AccessToken을 메모리 기반인 Redux store에서 관리하도록 변경했다. (RefreshToken은 현재 Cookie에 저장하는 방식을 이용하고 있다!)
AccessToken을 store에서 관리하는 방식은 보안적으로 훨씬 안전하지만, 새로고침 시 store가 초기화된다는 특성 때문에 사용자가 매번 로그인 페이지로 이동하는 문제가 있었다.
이 문제를 해결하기 위해 새로고침 시마다 RefreshToken을 이용해 AccessToken을 재발급받는 흐름을 구축했다. 페이지에 다시 진입할 때 Refresh API를 호출하고, 성공하면 AccessToken을 다시 store에 저장하도록 처리해 초기화 문제를 해결했다. 이를 통해 사용자는 RefreshToken이 만료되지 않는 한 로그인 상태를 안정적으로 유지할 수 있게 되었다.
📋 회고
AWS 공부를 하기로 다짐했다
위에서 언급했듯이, AWS 배포 자동화를 구현하면서 내가 AWS가 무엇이고 어떤 서비스들이 있는지 거의 모르고 있었다는 사실을 깨달았다. 배포 실패 시 확인해야 하는 로그들, 현재 배포가 진행 중인 태스크 넘버 등은 이번 경험을 통해 기본적인 수준까지는 익힐 수 있었지만, 앞으로 원활한 운영과 관리까지 생각하면 더 깊게 공부가 필요하다는 생각이 들었다.
✏️ 총정리
11월은 정말 새로운 것들을 많이 배우고 실무에 적용해본 달이었다.
지금까지 해본 적 없던 환경 설정, 배포 자동화, 인프라 구성까지 직접 다뤄보면서 서비스가 사용자에게 도달하기까지의 전 과정을 경험할 수 있었다. 이 과정에서 시행착오도 많았지만 결국 문제를 해결해나가며 성장하는 경험을 할 수 있었다.