― Redis 오류, 그리고 Security 지옥 ―
🔴 4. Redis 연결 오류 (UnknownHostException: redis)
Spring Boot는 잘 떴는데, 갑자기 이런 에러가 터졌다:
java.net.UnknownHostException: redis
처음엔 “레디스 안 켜졌나?” 싶었는데, Redis는 잘 실행 중이었다.
문제는 Docker 네트워크였다.
✅ 이유: Redis를 docker-compose로 안 띄웠기 때문
내가 백엔드 컨테이너만 먼저 띄워놓고 Redis는 따로 설치해서 돌렸었는데,
그 상태에서 .env에 이렇게 설정해놨었다:
# env
spring.data.redis.host=redis
→ 당연히 "redis"라는 이름은 Docker 내부 네트워크에서만 인식 가능하고,
그 이름을 호스트 이름으로 쓰면 못 찾는다.
💡 해결 방법은 2가지
- Redis도 docker-compose로 같이 띄우기
- EC2에 Redis가 설치돼 있다면 spring.data.redis.host=172.17.0.1로 수정
난 결국 Docker Compose로 Redis를 같이 돌리면서 해결했다.
redis: image: redis:6.2
container_name: redis
ports: - "6379:6379"
이렇게 하고 나니까 "redis"라는 호스트명이 정상적으로 인식되더라.
역시 컨테이너는 같이 묶어야 편하다.
🧨 5. ClientRegistrationRepository 에러
이번엔 애플리케이션 실행하자마자 이런 에러가 터졌다:
Error creating bean with name 'filterChain': No bean of type 'ClientRegistrationRepository' found
이건 구글 로그인 설정이 빠졌거나 제대로 안 돼 있을 때 나오는 에러였다.
✅ 해결: .env에 제대로 된 소셜 로그인 값 추가
처음에는 이렇게만 넣어놨었다:
GOOGLE_CLIENT_ID=xxxx
GOOGLE_CLIENT_SECRET=xxxx
근데 실제로 Spring이 찾는 변수는 이런 식이었다:
spring.security.oauth2.client.registration.google.client-id=xxxx
spring.security.oauth2.client.registration.google.client-secret=xxxx
spring.security.oauth2.client.registration.google.redirect-uri=http://localhost:8080/login/oauth2/code/google
spring.security.oauth2.client.registration.google.scope=profile,email
이 이름 그대로 .env에 넣어야 정상적으로 인식된다.
이것도 모르고 한참 동안 "왜 Bean을 못 찾지?" 하고 헤맸다.
― 서버는 떴지만, 그게 끝은 아니었다 ―
🥳 6. 드디어 서버가 떴다
진짜 모든 에러를 잡고, 모든 환경변수를 맞추고, 모든 컨테이너를 띄우고 나서
docker logs -f moneytalk-app을 보는데, 딱 이 로그가 떴다:
Tomcat started on port 8080 (http)
🔥 진짜 소리 지르고 싶었다.
그리고 Swagger에 들어갔다:
http://<EC2-IP>:8080/swagger-ui/index.html
로딩 없이 딱 열렸다. 뭔가 되게 프로가 된 기분이었다.
🧊 7. 그런데 서버가 멈췄다
근데 문제는…
몇 시간 지나고 나니까 EC2 SSH 접속이 끊기고,
다시 접속하려니 렉이 너무 심하거나 아예 붙질 않았다.
이유는 간단했다.
✅ EC2 프리티어(t2.micro)는 상시 서비스용이 아니다
처음에는 무료로 배포하니까 좋다고 생각했는데,
현실은 프리티어 인스턴스는 CPU 크레딧이 부족하면 느려지거나 멈춘다.
- 메모리는 1GB
- CPU는 공유형
- 과부하 걸리면 throttling (자동 제한)
즉, 지속적으로 서비스 돌리기에는 무리였다.
🤔 8. 그럼 포트폴리오는 어떻게 배포해야 할까?
프로젝트를 포트폴리오로 보여주고 싶은데,
면접 때마다 EC2에 SSH 접속해서 docker compose up 하긴 귀찮고 위험하다.
그래서 구글링, AI 등의 도움을 통해 배포 전략 몇개를 정리했다.
✅ 정리: 포트폴리오용 데모 배포 전략
| 구성 | 추천 |
| 백엔드 | Render (Spring Boot용 무료 배포 가능) |
| 프론트엔드 | Vercel / Netlify (정적 파일 배포 최적화) |
| DB | PlanetScale (MySQL 클라우드 버전) |
| Redis | Upstash (무료 Redis, HTTP API 지원) |
| 기타 | Swagger, 영상 녹화본, Notion 페이지 정리 |
면접관이 "링크 있나요?" 하면 바로 Notion 보여주면 된다.
🎁 보너스: Swagger 무한 로딩, S3Uploader 주입 실패, UnknownHost(redis) 에러 등
진짜 배포하다가 하나씩 다 걸려봤다.
지금 생각하면, "에러 메시지 잘 읽고, 환경변수 이름 정확히 맞추면 해결된다"는 교훈 하나만 남았다.
🔚 마무리
직접 운영 환경처럼 배포해보니까
진짜로 현업에서 겪는 문제를 축소판으로 경험한 느낌이었다.
그리고 무엇보다...
지금은 이 삽질기록을 블로그에 정리하면서, 나중의 나에게 뿌듯함을 남기는 중이다.