(iOS 시뮬레이터 + 여러 AWS 계정 + Route53 DNS 인증)
로컬 개발 환경에서 HTTPS를 제대로 테스트하려면 공인 인증서가 필요하다. 특히 iOS 시뮬레이터는 로컬 CA(mkcert 등)를 신뢰하지 않기 때문에, Let’s Encrypt 와일드카드 인증서를 사용하는 것이 가장 현실적인 선택이다.
하지만 여기에는 몇 가지 문제가 있다.
- 와일드카드 인증서는 DNS 인증(DNS-01) 방식만 가능하다.
- DNS 인증은 Route53에 TXT 레코드 생성이 필요하다.
- 도메인마다 AWS 계정이 다를 수 있다.
- 인증서는 90일마다 갱신해야 한다.
- 로컬 개발용 인증서지만, 매번 수동으로 갱신하는 것은 번거롭다.
이 글에서는 이러한 조건을 모두 만족하면서,
회사 공유 PC에서 인증서를 자동으로 체크하고, 필요하면 자동 갱신하고, Notion에 기록까지 남기는 구조를 정리한다.
1. 왜 로컬 개발 환경에서 공인 인증서가 필요한가?
iOS 시뮬레이터는 다음 조건을 만족해야 HTTPS 요청을 허용한다.
- 공인된 CA에서 발급된 인증서
- 도메인 이름이 실제 DNS에 존재
- 와일드카드 인증서도 정상적으로 인식
따라서 mkcert 같은 로컬 CA 기반 인증서는 사용할 수 없다.
결국 Let’s Encrypt를 사용해야 한다.
2. 와일드카드 인증서는 왜 DNS 인증이 필요한가?
Let’s Encrypt는 와일드카드(*.domain.com) 인증서 발급 시 반드시 DNS-01 인증을 요구한다.
즉, 다음 TXT 레코드를 DNS에 넣어야 한다.
_acme-challenge.domain.com TXT "인증값"
Route53을 사용한다면 Certbot이 자동으로 넣어줄 수 있다.
하지만 도메인마다 AWS 계정이 다르면, 계정별로 인증 정보를 분리해야 한다.
3. AWS 계정이 여러 개인 경우의 문제
도메인마다 AWS 계정이 다르면 다음 문제가 생긴다.
- Route53 API 호출 시 계정별 IAM 권한이 필요
- 하나의 PC에서 여러 계정의 인증서를 관리해야 함
- 인증서 갱신 시 어떤 계정의 Route53을 호출해야 하는지 구분해야 함
이 문제는 AWS CLI 프로파일 분리로 해결할 수 있다.
4. AWS CLI 프로파일 분리로 문제 해결하기
~/.aws/credentials 파일에 계정별로 프로파일을 만든다.
[account1]
aws_access_key_id = AKIAxxxx
aws_secret_access_key = xxxx
[account2]
aws_access_key_id = AKIAyyyy
aws_secret_access_key = yyyy
[account3]
aws_access_key_id = AKIAzzzz
aws_secret_access_key = zzzz
이제 Certbot 실행 시 프로파일을 지정할 수 있다.
AWS_PROFILE=account1 certbot certonly --dns-route53 -d domain1.com -d "*.domain1.com"
AWS_PROFILE=account2 certbot certonly --dns-route53 -d domain2.com -d "*.domain2.com"
AWS_PROFILE=account3 certbot certonly --dns-route53 -d domain3.com -d "*.domain3.com"
이 방식이면 도메인마다 다른 AWS 계정을 사용해도 문제 없다.
5. 인증서 자동 갱신 구조 설계
인증서는 90일짜리이므로, 갱신은 필수다.
갱신 자동화를 위해 다음 구조를 추천한다.
(1) 회사 공유 PC에서 스케줄러 실행
- Mac/Linux → cron
- Windows → 작업 스케줄러
예: 매일 새벽 3시 실행
(2) 인증서 만료일 체크
OpenSSL 또는 Certbot 자체 기능으로 만료일을 확인한다.
예 (bash):
CERT="/etc/letsencrypt/live/domain.com/fullchain.pem"
EXPIRE_DATE=$(openssl x509 -enddate -noout -in $CERT | cut -d= -f2)
(3) 만료 30일 이하 → 자동 갱신
AWS_PROFILE=account1 certbot certonly --dns-route53 -d domain1.com -d "*.domain1.com"
(4) 갱신 후 Notion API로 기록 업데이트
- 만료일
- 발급일
- 인증서 파일 경로
- AWS 계정명
모두 Notion 페이지에 자동 업데이트 가능하다.
6. 여러 도메인을 자동으로 관리하는 스크립트 예시
domains=(
"account1:domain1.com"
"account2:domain2.com"
"account3:domain3.com"
)
for item in "${domains[@]}"; do
profile="${item%%:*}"
domain="${item##*:}"
AWS_PROFILE=$profile certbot certonly \
--dns-route53 \
-d "$domain" \
-d "*.$domain"
done
이 스크립트는:
- 계정별 프로파일 선택
- 도메인별 인증서 자동 발급
- TXT 레코드 자동 생성/삭제
- 인증서 자동 저장
까지 모두 처리한다.
7. Notion에 인증서 정보 자동 업데이트
Notion API는 단순한 HTTP 요청으로 동작한다.
curl만으로도 충분히 업데이트할 수 있다.
예:
curl -X PATCH "https://api.notion.com/v1/pages/$PAGE_ID" \
-H "Authorization: Bearer $NOTION_TOKEN" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
--data '{"properties":{"Expire":{"date":{"start":"2025-03-01"}}}}'
8. 최종 결론
- 로컬 개발 환경에서 iOS 시뮬레이터를 사용하려면 공인 인증서가 필요하다.
- 와일드카드 인증서는 DNS 인증만 가능하다.
- 도메인마다 AWS 계정이 달라도 AWS CLI 프로파일 분리로 문제를 해결할 수 있다.
- 회사 공유 PC에서 스케줄러를 돌리면 완전 자동 갱신이 가능하다.
- 갱신 후 Notion API로 기록을 남기면 관리가 훨씬 편해진다.
이 구조는 로컬 개발 환경에서 HTTPS를 안정적으로 유지하면서도,
여러 AWS 계정과 여러 도메인을 깔끔하게 관리할 수 있는 가장 현실적인 방법이다.
댓글 남기기