-
Notifications
You must be signed in to change notification settings - Fork 0
/
component---src-app-templates-post-template-post-layout-ui-tsx-content-file-path-posts-2020-08-30-etc-aws-route-53-md-d05a3aefb870c8708af2.js.map
1 lines (1 loc) · 45.1 KB
/
component---src-app-templates-post-template-post-layout-ui-tsx-content-file-path-posts-2020-08-30-etc-aws-route-53-md-d05a3aefb870c8708af2.js.map
1
{"version":3,"file":"component---src-app-templates-post-template-post-layout-ui-tsx-content-file-path-posts-2020-08-30-etc-aws-route-53-md-d05a3aefb870c8708af2.js","mappings":"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","sources":["webpack://kyoungah-dev-blog/./posts/2020-08-30-etc-aws-route-53.md","webpack://kyoungah-dev-blog/./src/app/templates/post-template/post-layout.ui.tsx","webpack://kyoungah-dev-blog/./src/app/templates/post-template/components/post-layout-content/post-layout.content.module.css","webpack://kyoungah-dev-blog/./src/app/templates/post-template/components/post-layout-content/post-layout-content.ui.tsx","webpack://kyoungah-dev-blog/./src/app/templates/post-template/components/post-layout-date/post-layout-date.module.css","webpack://kyoungah-dev-blog/./src/app/templates/post-template/components/post-layout-date/post-layout-date.tsx","webpack://kyoungah-dev-blog/./src/app/templates/post-template/components/post-layout-tags/post-layout.module.css","webpack://kyoungah-dev-blog/./src/app/templates/post-template/components/post-layout-tags/post-layout-tags.ui.tsx","webpack://kyoungah-dev-blog/./src/app/templates/post-template/components/post-layout-title/post-layout-title.module.css","webpack://kyoungah-dev-blog/./src/app/templates/post-template/components/post-layout-title/post-layout-title.ui.tsx","webpack://kyoungah-dev-blog/./src/entities/tags/index.ts","webpack://kyoungah-dev-blog/./src/entities/tags/tags.ui.tsx","webpack://kyoungah-dev-blog/./src/entities/tags/tags.module.css","webpack://kyoungah-dev-blog/./src/shared/uis/tag/tag.ui.tsx","webpack://kyoungah-dev-blog/./src/shared/uis/tag/tag.module.css","webpack://kyoungah-dev-blog/./src/shared/uis/container/container.module.css","webpack://kyoungah-dev-blog/./src/shared/uis/container/container.ui.tsx","webpack://kyoungah-dev-blog/./src/widgets/basic-layout/basic-layout.module.css","webpack://kyoungah-dev-blog/./src/widgets/basic-layout/basic-layout.ui.tsx","webpack://kyoungah-dev-blog/./src/widgets/header/header.module.css","webpack://kyoungah-dev-blog/./src/widgets/header/header.ui.tsx","webpack://kyoungah-dev-blog/./src/widgets/footer/footer.module.css","webpack://kyoungah-dev-blog/./src/widgets/footer/footer.ui.tsx","webpack://kyoungah-dev-blog/./src/widgets/default-layout/default-layout.ui.tsx","webpack://kyoungah-dev-blog/./src/app/templates/post-template/post-layout.module.css","webpack://kyoungah-dev-blog/./node_modules/@mdx-js/react/lib/index.js","webpack://kyoungah-dev-blog/./node_modules/clsx/dist/clsx.mjs"],"sourcesContent":["/*@jsxRuntime classic @jsx React.createElement @jsxFrag React.Fragment*/\nimport {useMDXComponents as _provideComponents} from \"@mdx-js/react\";\nimport React from \"react\";\nfunction _createMdxContent(props) {\n const _components = Object.assign({\n h2: \"h2\",\n p: \"p\",\n blockquote: \"blockquote\",\n strong: \"strong\",\n img: \"img\",\n a: \"a\",\n span: \"span\",\n ul: \"ul\",\n li: \"li\"\n }, _provideComponents(), props.components);\n return React.createElement(React.Fragment, null, React.createElement(_components.h2, null, \"AWS Route 53\"), \"\\n\", React.createElement(_components.p, null, \"높은 가용성과 확장성이 뛰어난 클라우드 Domain Name System (DNS) 웹 서비스. 일반적인 DNS 기능 + 모니터링 기능 + 서버 로드 밸런싱 기능 + 글로벌 서버 로드 밸런싱 기능을 제공한다.\"), \"\\n\", React.createElement(_components.blockquote, null, \"\\n\", React.createElement(_components.p, null, React.createElement(_components.strong, null, \"DNS (Domain Name System)\"), \": 네트워크에 연결된 호스트들은 각각 IP 주소들을 가지고 있다. 이 IP 주소는 사람이 이해하고 기억하기 어렵기 때문에 각 IP 주소마다 도메인 이름을 부여한다. DNS는 특정 도메인에 대한 요청이 들어오면 도메인에 대한 IP 주소를 반환해준다. 반대로 IP 주소에 대한 도메인 이름을 반환해 줄 수도 있다.\"), \"\\n\"), \"\\n\", React.createElement(_components.p, null, \"Route 53은 프리티어 대상이 아니므로 매달 사용한 만큼 요금이 빠져나간다. 다행히 요금은 저렴한 편이다.\"), \"\\n\", React.createElement(_components.h2, null, \"Route 53 도메인 등록\"), \"\\n\", React.createElement(_components.p, null, \"AWS에서 사용하고 있는 서비스에 도메인을 등록하기 위해서는 먼저 Route 53 서비스에 도메인을 등록해야 한다. 도메인은 AWS 서비스에서도 구매할 수 있고 카페 24나 호스팅kr 같은 국내 호스팅 서비스에서도 구매할 수 있다. 나는 국내 호스팅 서비스에서 토이 프로젝트에 사용할 wolfonair.com 도메인을 구입했다. 이 도메인을 AWS Route 53 서비스에 등록해보자.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-1.png\",\n alt: \"AWS 서비스 메뉴\"\n }), \"\\n\", React.createElement(_components.p, null, \"AWS 서비스 메뉴 검색창에서 Route 53을 검색하거나 메뉴 목록에서 Route 53을 클릭하여 Route 53 대쉬보드 창으로 이동한다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-2.png\",\n alt: \"DNS 관리\"\n }), \"\\n\", React.createElement(_components.p, null, \"DNS 관리에서 호스팅 영역 생성 버튼을 클릭한다.\"), \"\\n\", React.createElement(_components.p, null, \"호스팅 영역이란 레코드의 컨테이너이다. 레코드에는 특정 도메인과(ex: example.com)과 하위 도메인(ex: api.example.com, cdn.example.com)의 트래픽을 라우팅하는 방식에 대한 정보가 포함된다. 호스팅 영역과 해당 도메인의 이름은 동일하다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-3.png\",\n alt: \"호스팅 영역 구성\"\n }), \"\\n\", React.createElement(_components.p, null, \"소유하고 있는 도메인 이름을 입력한다. 설명은 입력해도 되고 그냥 냅둬도 된다.\"), \"\\n\", React.createElement(_components.p, null, \"퍼블릭 호스팅 영역은 누구나 인터넷에서 도메인을 입력하여 트래픽을 라우팅 할 수 있고 프라이빗 호스팅 영역은 AWS VPC 내에서만 사용할 수 있다.\\n때문에 프라이빗 클라우드를 만드는게 아니면 유형 부분은 따로 건드릴 필요가 없고 퍼블릭 호스팅 영역으로 그대로 두면 된다.\"), \"\\n\", React.createElement(_components.p, null, \"쭉 내려서 호스팅 영역 생성 버튼을 눌러주면 호스팅 영역 생성이 완료된다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-4.png\",\n alt: \"호스팅 영역 구성\"\n }), \"\\n\", React.createElement(_components.p, null, \"생성이 완료되면 NS(네임서버) 레코드와 SOA(권한시작) 레코드가 자동 생성된다. 이 네임서버가 등록한 도메인이 사용할 네임서버이기 때문에 등록한 도메인의 네임서버를 Route 53의 네임서버로 교체해주어야 한다.\"), \"\\n\", React.createElement(_components.blockquote, null, \"\\n\", React.createElement(_components.p, null, React.createElement(_components.strong, null, \"네임 서버\"), \": DNS를 운영하는 서버. 특정 도메인이 어떤 IP와 연결되었다는 것을 기록하고 이것을 다른 DNS들에게 전파하는 역할을 한다. 예를 들어 abc.com 이라는 도메인이 있으면 이 도메인을 192.168.0.1 이라는 아이피를 가진 서버와 연결을 해준다.\"), \"\\n\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-5.png\",\n alt: \"네임서버 수정\"\n }), \"\\n\", React.createElement(_components.p, null, \"도메인을 구입한 사이트로 이동하여 구입한 도메인의 DNS 관리 화면으로 이동한 후 네임서버 항목에 Route 53의 네임서버 4개를 입력하고 확인 또는 저장 버튼을 누르면 네임서버 수정이 완료 된다.\"), \"\\n\", React.createElement(_components.p, null, \"Route 53을 이용하면 S3, CloudFront, EC2, ELB 등 몇몇 AWS 리소스에 도메인을 쉽게 연동할 수 있다. Route 53에 도메인 등록 하는 작업을 완료 했으니 기존에 사이드 프로젝트로 사용하고 있던 CloudFront, Api gateway에 도메인을 한번 연동해보자.\"), \"\\n\", React.createElement(_components.h2, null, \"AWS Certificate Manager 설정\"), \"\\n\", React.createElement(_components.p, null, \"Route 53에 도메인을 등록하면 AWS Certificate Manageer을 사용하여 무료로 SSL 인증서를 발급받을 수 있다.\"), \"\\n\", React.createElement(_components.blockquote, null, \"\\n\", React.createElement(_components.p, null, React.createElement(_components.strong, null, \"SSL 인증서\"), \": 클라이언트와 서버간의 통신을 제3자가 보증해주는 전자화된 문서. 웹서버와 웹사이트에서 이루어지는 모든 정보전송을 https 암호화 프로토콜을 통해 안전하게 전송되도록 하는 인증서이다.\"), \"\\n\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-6.png\",\n alt: \"AWS 서비스 메뉴\"\n }), \"\\n\", React.createElement(_components.p, null, \"AWS 서비스 메뉴에서 Certificate Manager을 검색하여 Certificate Manager 메뉴 대시보드 화면으로 이동한다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-7.png\",\n alt: \"인증서 프로비저닝 선택\"\n }), \"\\n\", React.createElement(_components.p, null, \"아무 인증서도 발급받지 않은 상태라면 위의 이미지와 같은 화면이 뜬다. 여기서 인증서 프로비저닝 항목 밑의 시작하기 버튼을 클릭한다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-8.png\",\n alt: \"공인 인증서 요청 선택\"\n }), \"\\n\", React.createElement(_components.p, null, \"공인 인증서 요청 항목을 선택한 후 인증서 요청 버튼을 클릭한다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-9.png\",\n alt: \"도메인 이름 추가\"\n }), \"\\n\", React.createElement(_components.p, null, \"도메인 이름 항목에 Route 53에 등록한 도메인을 입력한다. 하위 도메인도 사용하려면 '*.도메인 이름' 으로 등록해주면 된다. 도메인 입력이 완료 되었으면 확인 버튼을 클릭한다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-10.png\",\n alt: \"검증 방법 선택\"\n }), \"\\n\", React.createElement(_components.p, null, \"DNS 검증 항목을 선택한 후 다음 버튼을 클릭한다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-11.png\",\n alt: \"태그 추가\"\n }), \"\\n\", React.createElement(_components.p, null, \"태그 추가는 필수가 아니라 그냥 무시하고 검토 버튼을 눌러 다음 화면으로 넘어가도 상관없다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-12.png\",\n alt: \"검토\"\n }), \"\\n\", React.createElement(_components.p, null, \"실수한 부분이 있는지 잘 확인한 후 없으면 확인 및 요청 버튼을 클릭한다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-13.png\",\n alt: \"검증 화면\"\n }), \"\\n\", React.createElement(_components.p, null, \"도메인이 검증 보류 상태로 등록되었다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-14.png\",\n alt: \"검증 화면 2\"\n }), \"\\n\", React.createElement(_components.p, null, \"도메인 앞의 화살표 버튼을 누르면 CNAME 레코드 항목을 추가하라는 화면이 출력된다. Route 53에 등록한 도메인은 Route 53에서 레코드 생성 버튼을 클릭하여 자동으로 CNAME 레코드 항목을 생성할 수 있다. Route 53에서 레코드 생성 버튼을 클릭한다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-15.png\",\n alt: \"Route 53에서 레코드 생성\"\n }), \"\\n\", React.createElement(_components.p, null, \"생성 버튼을 클릭한다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-16.png\",\n alt: \"Route 53에서 레코드 생성 성공\"\n }), \"\\n\", React.createElement(_components.p, null, \"성공 메시지가 뜨면 완료가 된 것이다. 검증이 완료 되려면 최대 30분 정도 걸릴 수 있다고 했지만 체감상 1 ~ 2분 걸렸던 것 같다.\"), \"\\n\", React.createElement(_components.h2, null, \"CloudFront 커스텀 도메인 설정\"), \"\\n\", React.createElement(_components.p, null, \"저번에 현재 진행하고 있는 \", React.createElement(_components.a, {\n href: \"/2020-07-26-etc-aws-s3-hosting/\"\n }, \"사이드 프로젝트를 S3에 업로드 한 후 CloudFront 설정\"), \"까지 했었다. CloudFront를 사용하여 S3에 올라가있는 웹페이지에 커스텀 도메인을 연결해보자.\"), \"\\n\", React.createElement(_components.p, null, \"AWS 서비스 메뉴에서 CloudFront를 검색하여 해당 서비스로 이동하면 CloudFront Distributions 목록을 확인할 수 있다. 도메인 연결을 원하는 Distribution 항목의 ID를 클릭하여 상세 페이지로 이동한 후 General 탭에 있는 Edit 버튼을 눌러 편집 화면으로 이동할 수 있다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-17.png\",\n alt: \"클라우드 프론트 커스텀 도메인 설정\"\n }), \"\\n\", React.createElement(_components.p, null, \"Alternate Domain Names 항목에서 Route 53에 등록된 도메인을 입력한다. SSL Certificate 항목에서 Custom SSL Certificate 항목을 선택하고 인증서를 선택한 후 스크롤을 쭉 내려 Edit 버튼을 클릭해주면 도메인 연결이 끝난다.\"), \"\\n\", React.createElement(_components.p, null, \"CloudFront에서 ssl 인증서를 적용하려면 미국 동부(버지니아 북부, us-east-1) 리전에도 SSL 인증서가 있어야 한다. 다행히 Certificate Manager 서비스는 무료이므로 미국 동부 리전을 선택한 후 Certificate Manager 서비스로 똑같이은 방법으로 SSL 인증서를 발급받을 수 있다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-18.png\",\n alt: \"커스텀 도메인 설정 완료\"\n }), \"\\n\", React.createElement(_components.p, null, \"약 1분이 지난후 웹브라우저 url에 커스텀 도메인을 입력하면 접속이 잘 되는 것을 확인할 수 있다.\"), \"\\n\", React.createElement(_components.h2, null, \"API Gateway 도메인 설정 (feat. Serverless)\"), \"\\n\", React.createElement(_components.p, null, \"AWS에서 제공하는 Lambda와 API Gateway 서비스를 같이 사용하면 서버리스 아키텍처로 백엔드 서버를 운영할 수 있다. Serverless 프레임워크를 사용하면 아주 간편하게 Lambda 작성 및 배포까지 가능한데 serverless-domain-manager 플러그인을 추가로 사용하면 커스텀 도메인 설정까지 가능하다.\"), \"\\n\", React.createElement(_components.span, {\n dangerouslySetInnerHTML: {\n __html: \"<div class=\\\"gatsby-highlight\\\" data-language=\\\"text\\\"><pre class=\\\"language-text\\\"><code class=\\\"language-text\\\">acm:ListCertificates *\\napigateway:GET /domainnames/*\\napigateway:GET /domainnames/*/basepathmappings\\napigateway:DELETE /domainnames/*\\napigateway:POST /domainnames\\napigateway:POST /domainnames/*/basepathmappings\\napigateway:PATCH /domainnames/*/basepathmapping\\ncloudformation:GET *\\ncloudfront:UpdateDistribution *\\nroute53:ListHostedZones *\\nroute53:ChangeResourceRecordSets hostedzone/{HostedZoneId}\\nroute53:GetHostedZone *\\nroute53:ListResourceRecordSets *\\niam:CreateServiceLinkedRole arn:aws:iam::${AWS::AccountId}: role/aws-service-role/ops.ap</code></pre></div>\"\n }\n }), \"\\n\", React.createElement(_components.p, null, \"serverless-domain-manager 플러그인을 사용하려면 Serverless에 연동되어 있는 IAM 권한에 위의 권한이 추가로 더 필요하다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-19.png\",\n alt: \"IAM 권한 설정\"\n }), \"\\n\", React.createElement(_components.p, null, \"일단은 관련된 권한을 찾은 후 FullAccess 권한을 주긴 했는데 좀 더 안전한 보안을 위해서 나중에 다시 수정할 예정이다.\"), \"\\n\", React.createElement(_components.span, {\n dangerouslySetInnerHTML: {\n __html: \"<div class=\\\"gatsby-highlight\\\" data-language=\\\"text\\\"><pre class=\\\"language-text\\\"><code class=\\\"language-text\\\">npm install serverless-domain-manager --save-dev\\n</code></pre></div>\"\n }\n }), \"\\n\", React.createElement(_components.p, null, \"serverless-domain-manager 플러그인을 설치한다.\"), \"\\n\", React.createElement(_components.span, {\n dangerouslySetInnerHTML: {\n __html: \"<div class=\\\"gatsby-highlight\\\" data-language=\\\"yml\\\"><pre class=\\\"language-yml\\\"><code class=\\\"language-yml\\\"><span class=\\\"token key atrule\\\">plugins</span><span class=\\\"token punctuation\\\">:</span>\\n <span class=\\\"token punctuation\\\">-</span> serverless<span class=\\\"token punctuation\\\">-</span>webpack\\n <span class=\\\"token punctuation\\\">-</span> serverless<span class=\\\"token punctuation\\\">-</span>offline\\n <span class=\\\"token punctuation\\\">-</span> serverless<span class=\\\"token punctuation\\\">-</span>dotenv<span class=\\\"token punctuation\\\">-</span>plugin\\n <span class=\\\"token punctuation\\\">-</span> serverless<span class=\\\"token punctuation\\\">-</span>domain<span class=\\\"token punctuation\\\">-</span>manager\\n\\n<span class=\\\"token key atrule\\\">custom</span><span class=\\\"token punctuation\\\">:</span>\\n <span class=\\\"token key atrule\\\">customDomain</span><span class=\\\"token punctuation\\\">:</span>\\n <span class=\\\"token key atrule\\\">domainName</span><span class=\\\"token punctuation\\\">:</span> api.wolfonair.com\\n <span class=\\\"token key atrule\\\">stage</span><span class=\\\"token punctuation\\\">:</span> $<span class=\\\"token punctuation\\\">{</span>self<span class=\\\"token punctuation\\\">:</span>provider.stage<span class=\\\"token punctuation\\\">}</span>\\n <span class=\\\"token key atrule\\\">certificateName</span><span class=\\\"token punctuation\\\">:</span> <span class=\\\"token string\\\">\\\"*.wolfonair.com\\\"</span>\\n <span class=\\\"token key atrule\\\">createRoute53Record</span><span class=\\\"token punctuation\\\">:</span> <span class=\\\"token boolean important\\\">true</span>\\n <span class=\\\"token key atrule\\\">endpointType</span><span class=\\\"token punctuation\\\">:</span> regional\\n <span class=\\\"token key atrule\\\">securityPolicy</span><span class=\\\"token punctuation\\\">:</span> tls_1_2\\n <span class=\\\"token key atrule\\\">apiType</span><span class=\\\"token punctuation\\\">:</span> rest</code></pre></div>\"\n }\n }), \"\\n\", React.createElement(_components.p, null, \"serverless.yml파일에서 plugins 항목에는 serverless-domain-manager을 추가해주고 custom 항목에는 coustomDomain 설정을 추가로 넣어준다.\"), \"\\n\", React.createElement(_components.span, {\n dangerouslySetInnerHTML: {\n __html: \"<div class=\\\"gatsby-highlight\\\" data-language=\\\"text\\\"><pre class=\\\"language-text\\\"><code class=\\\"language-text\\\">sls create_domain\\nsls deploy</code></pre></div>\"\n }\n }), \"\\n\", React.createElement(_components.p, null, \"위의 명령어를 실행해주면 도메인 설정이 끝난다.\"), \"\\n\", React.createElement(_components.img, {\n src: \"/images/posts/aws-route-53-20.png\",\n alt: \"API Gateway 사용자 지정 도메인 이름\"\n }), \"\\n\", React.createElement(_components.p, null, \"AWS API Gateway 서비스에 직접 들어가 사용자 지정 도메인 이름 항목을 클릭해보면 도메인이 정상 등록 된 것을 확인할 수 있다.\"), \"\\n\", React.createElement(_components.h2, null, \"마무리\"), \"\\n\", React.createElement(_components.p, null, \"이렇게 Route 53을 이용하여 도메인을 등록하고 Certificate Manager를 이용하여 SSL 인증서 까지 발급받은 후 CloudFront, API Gateway에 도메인 연결까지 해보았다. EC2에도 SSL 인증서를 적용하여 커스텀 도메인을 달고 싶었는데 ELB를 사용하여 좀 편하게 SSL 인증서를 적용하려 했더니 ELB가 따로 프리티어를 제공하질 않는다는걸 알고 일단은 잠시 보류하기로 했다. 다음에 시간이 날때 무료 SSL 인증서를 이용하여 EC2에 https를 적용한 커스텀 도메인을 달아봐야겠다.\"), \"\\n\", React.createElement(_components.h2, null, \"Reference\"), \"\\n\", React.createElement(_components.blockquote, null, \"\\n\", React.createElement(_components.ul, null, \"\\n\", React.createElement(_components.li, null, React.createElement(_components.a, {\n href: \"https://www.youtube.com/watch?v=Nr7nLwfvT3Y\"\n }, \"Amazon Route53 101 - 서태호 | 강남비기너모임 : AWS Community Day\")), \"\\n\", React.createElement(_components.li, null, React.createElement(_components.a, {\n href: \"https://xetown.com/topics/1125037\"\n }, \"많이 혼돈하시는 네임서버와 DNS\")), \"\\n\", React.createElement(_components.li, null, React.createElement(_components.a, {\n href: \"https://velog.io/@minholee_93/AWS-Route-53-DNS-%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-8lk40vfqt4#2-route-53-%EB%8F%84%EB%A9%94%EC%9D%B8-%EB%93%B1%EB%A1%9D%ED%95%98%EA%B8%B0\"\n }, \"AWS Route 53 DNS 서비스 사용하기\")), \"\\n\", React.createElement(_components.li, null, React.createElement(_components.a, {\n href: \"https://musma.github.io/2019/09/16/what-to-do-after-you-buy-your-new-domain-on-aws.html#aws-certificate-manager-ssltls-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89\"\n }, \"새 도메인 이름 구입한 후 AWS에서 해야할 일\")), \"\\n\", React.createElement(_components.li, null, React.createElement(_components.a, {\n href: \"https://react-etc.vlpt.us/08.deploy-s3.html\"\n }, \"리액트 앱 AWS S3, CloudFront 에 배포하기\")), \"\\n\", React.createElement(_components.li, null, React.createElement(_components.a, {\n href: \"https://www.serverless.com/plugins/serverless-domain-manager\"\n }, \"Serverless Domain Manager\")), \"\\n\"), \"\\n\"));\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = Object.assign({}, _provideComponents(), props.components);\n return MDXLayout ? React.createElement(MDXLayout, props, React.createElement(_createMdxContent, props)) : _createMdxContent(props);\n}\nexport default MDXContent;\n","import React from \"react\";\nimport GATSBY_COMPILED_MDX from \"/Users/yookyoung.park/Workspace/kyoungah-dev-blog/posts/2020-08-30-etc-aws-route-53.md\";\nimport {MDXProvider} from '@mdx-js/react';\nimport {Container} from '@/shared/uis/container';\nimport {DefaultLayout} from '@/widgets/default-layout';\nimport {PostLayoutContent} from './components/post-layout-content';\nimport {PostLayoutDate} from './components/post-layout-date';\nimport {PostLayoutTags} from './components/post-layout-tags';\nimport {PostLayoutTitle} from './components/post-layout-title';\nimport {postLayoutContainer, postLayoutTitle} from './post-layout.module.css';\nimport {jsx as _jsx} from \"react/jsx-runtime\";\nimport {jsxs as _jsxs} from \"react/jsx-runtime\";\nfunction PostLayout(_ref) {\n var _data$mdx$frontmatter, _data$mdx;\n let {data, children} = _ref;\n const {date, tags, title} = (_data$mdx$frontmatter = data === null || data === void 0 ? void 0 : (_data$mdx = data.mdx) === null || _data$mdx === void 0 ? void 0 : _data$mdx.frontmatter) !== null && _data$mdx$frontmatter !== void 0 ? _data$mdx$frontmatter : {};\n return _jsx(DefaultLayout, {\n children: _jsxs(Container, {\n className: postLayoutContainer,\n children: [_jsx(PostLayoutTitle, {\n className: postLayoutTitle,\n title: title\n }), _jsx(PostLayoutDate, {\n date: date\n }), _jsx(PostLayoutTags, {\n tags: tags\n }), _jsx(PostLayoutContent, {\n children: _jsx(MDXProvider, {\n children: children\n })\n })]\n })\n });\n}\nconst query = \"1347208223\";\nPostLayout\nexport default function GatsbyMDXWrapper(props) {\n return React.createElement(PostLayout, props, React.createElement(GATSBY_COMPILED_MDX, props));\n}\n","// extracted by mini-css-extract-plugin\nexport var postLayoutContentRoot = \"post-layout-content-module--post-layout-content-root--01754\";","import { clsx } from \"clsx\";\nimport { type HTMLAttributes, type PropsWithChildren } from \"react\";\n\nimport { postLayoutContentRoot } from \"./post-layout.content.module.css\";\n\ntype Props = PropsWithChildren & HTMLAttributes<HTMLDivElement>;\n\nfunction PostLayoutContent({ children, className, ...props }: Props) {\n return (\n <div className={clsx(postLayoutContentRoot, className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport { PostLayoutContent };\n","// extracted by mini-css-extract-plugin\nexport var postLayoutDateRoot = \"post-layout-date-module--post-layout-date-root--f34d1\";","import { clsx } from \"clsx\";\nimport { type HTMLAttributes } from \"react\";\n\nimport { postLayoutDateRoot } from \"./post-layout-date.module.css\";\n\ntype Props = { date: string } & HTMLAttributes<HTMLHeadingElement>;\n\nfunction PostLayoutDate({ className, date, ...props }: Props) {\n return (\n <span className={clsx(postLayoutDateRoot, className)} {...props}>\n {date}\n </span>\n );\n}\n\nexport { PostLayoutDate };\n","// extracted by mini-css-extract-plugin\nexport var postLayoutTags = \"post-layout-module--post-layout-tags--837df\";","import { Tags } from \"@/entities/tags\";\nimport { Link } from \"gatsby\";\n\nimport { postLayoutTags } from \"./post-layout.module.css\";\n\ntype Props = { tags: string[] };\n\nfunction PostLayoutTags({ tags }: Props) {\n return (\n <Tags className={postLayoutTags}>\n {tags.map((tag) => (\n <Link key={tag} to={`/tags/${tag}`}>\n <Tags.Tag tag={tag} />\n </Link>\n ))}\n </Tags>\n );\n}\n\nexport { PostLayoutTags };\n","// extracted by mini-css-extract-plugin\nexport var postLayoutTitleRoot = \"post-layout-title-module--post-layout-title-root--88374\";","import { clsx } from \"clsx\";\nimport { postLayoutTitleRoot } from \"./post-layout-title.module.css\";\nimport { HTMLAttributes } from \"react\";\n\ntype Props = { title: string } & HTMLAttributes<HTMLHeadingElement>;\n\nfunction PostLayoutTitle({ className, title, ...props }: Props) {\n return (\n <h1 className={clsx(postLayoutTitleRoot, className)} {...props}>\n {title}\n </h1>\n );\n}\n\nexport { PostLayoutTitle };\n","import { Tag } from '@/shared/uis/tag';\nimport { Tags } from './tags.ui';\n\nconst ComposedTags = Object.assign(Tags, {\n Tag,\n});\n\nexport { ComposedTags as Tags };\n","import { PropsWithChildren, type HTMLAttributes } from 'react';\nimport { clsx } from 'clsx';\n\nimport { tagsRoot } from './tags.module.css';\n\ntype Props = PropsWithChildren & HTMLAttributes<HTMLDivElement>;\n\nfunction Tags({ children, className, ...props }: Props) {\n return (\n <div className={clsx(tagsRoot, className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport { Tags };\n","// extracted by mini-css-extract-plugin\nexport var show = \"tags-module--show--7704b\";\nexport var tagsRoot = \"tags-module--tags-root--e3461\";","import { clsx } from 'clsx';\n\nimport type { HTMLAttributes, ReactNode } from 'react';\n\nimport { tagRoot } from './tag.module.css';\n\ntype Props = {\n tag: ReactNode;\n} & HTMLAttributes<HTMLSpanElement>;\n\nfunction Tag({ className, tag, ...props }: Props) {\n return (\n <span className={clsx(tagRoot, className)} {...props}>\n {tag}\n </span>\n );\n}\n\nexport type { Props as TagProps };\nexport { Tag };\n","// extracted by mini-css-extract-plugin\nexport var tagRoot = \"tag-module--tag-root--aae01\";","// extracted by mini-css-extract-plugin\nexport var containerRoot = \"container-module--container-root--3b208\";","import { clsx } from 'clsx';\nimport type { PropsWithChildren, HTMLAttributes } from 'react';\n\nimport { containerRoot } from './container.module.css';\n\ntype Props = PropsWithChildren & HTMLAttributes<HTMLSpanElement>;\n\nfunction Container({ children, className, ...props }: Props) {\n return (\n <div className={clsx(containerRoot, className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport { Container };\n","// extracted by mini-css-extract-plugin\nexport var basicLayoutRoot = \"basic-layout-module--basic-layout-root--a11e0\";","import { clsx } from 'clsx';\nimport { type HTMLAttributes, type PropsWithChildren } from 'react';\n\nimport { basicLayoutRoot } from './basic-layout.module.css';\n\ntype Props = PropsWithChildren & HTMLAttributes<HTMLDivElement>;\n\nfunction BasicLayout({ children, className, ...props }: Props) {\n return (\n <div className={clsx(basicLayoutRoot, className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport { BasicLayout };\n","// extracted by mini-css-extract-plugin\nexport var about = \"header-module--about--32ac9\";\nexport var headerLogo = \"header-module--header-logo--5bbdc\";\nexport var headerNavigation = \"header-module--header-navigation--24bcb\";\nexport var headerNavigationItem = \"header-module--header-navigation-item--ba248\";\nexport var headerNavigationItemLink = \"header-module--header-navigation-item-link--d6da9\";\nexport var headerNavigationList = \"header-module--header-navigation-list--3815c\";\nexport var headerRoot = \"header-module--header-root--01ceb\";\nexport var tags = \"header-module--tags--eb332\";","import { Link } from 'gatsby';\nimport { clsx } from 'clsx';\n\nimport {\n about,\n headerRoot,\n headerLogo,\n headerNavigation,\n headerNavigationList,\n headerNavigationItem,\n headerNavigationItemLink,\n tags,\n} from './header.module.css';\n\nfunction Header() {\n return (\n <header className={headerRoot}>\n <Link to=\"/\">\n <img\n src=\"/images/logo.png\"\n srcSet={`/images/logo-small.png 200w, /images/logo.png 300w`}\n sizes=\"(max-width: 360px) 200px, 300px\"\n alt=\"dev.kyoungah.me\"\n className={headerLogo}\n />\n </Link>\n <nav className={headerNavigation}>\n <ul className={headerNavigationList}>\n <li className={headerNavigationItem}>\n <Link to=\"/tags\">\n <span\n aria-label=\"tags\"\n className={clsx(headerNavigationItemLink, tags)}\n />\n </Link>\n </li>\n <li className={headerNavigationItem}>\n <a href=\"/about\" rel=\"noopener\" target=\"_blank\">\n <span\n aria-label=\"about\"\n className={clsx(headerNavigationItemLink, about)}\n />\n </a>\n </li>\n </ul>\n </nav>\n </header>\n );\n}\n\nexport { Header };\n","// extracted by mini-css-extract-plugin\nexport var footerRoot = \"footer-module--footer-root--795ff\";","import { footerRoot } from './footer.module.css';\n\nfunction Footer() {\n return (\n <footer className={footerRoot}>\n <span>Powered by Gatsby, Hosted by GitHub Pages.</span>\n <span>\n ©\n <a\n href=\"https://github.com/partykyoung\"\n rel=\"noreferrer\"\n target=\"_blank\">\n KyoungAh\n </a>\n , All rights reserved.\n </span>\n </footer>\n );\n}\n\nexport { Footer };\n","import type { PropsWithChildren } from \"react\";\n\nimport { Header } from \"../header\";\nimport { Footer } from \"../footer\";\nimport { BasicLayout } from \"../basic-layout\";\n\nfunction DefaultLayout({ children }: PropsWithChildren) {\n return (\n <>\n <Header />\n <BasicLayout>{children}</BasicLayout>\n <Footer />\n </>\n );\n}\n\nexport { DefaultLayout };\n","// extracted by mini-css-extract-plugin\nexport var postLayoutContainer = \"post-layout-module--post-layout-container--f40b5\";\nexport var postLayoutTitle = \"post-layout-module--post-layout-title--1c575\";","/**\n * @typedef {import('mdx/types.js').MDXComponents} MDXComponents\n * @typedef {import('react').Component<{}, {}, unknown>} Component\n * @typedef {import('react').ReactNode} ReactNode\n */\n\n/**\n * @callback MergeComponents\n * Custom merge function.\n * @param {Readonly<MDXComponents>} currentComponents\n * Current components from the context.\n * @returns {MDXComponents}\n * Additional components.\n *\n * @typedef Props\n * Configuration for `MDXProvider`.\n * @property {ReactNode | null | undefined} [children]\n * Children (optional).\n * @property {Readonly<MDXComponents> | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @property {boolean | null | undefined} [disableParentContext=false]\n * Turn off outer component context (default: `false`).\n */\n\nimport React from 'react'\n\n/** @type {Readonly<MDXComponents>} */\nconst emptyComponents = {}\n\nconst MDXContext = React.createContext(emptyComponents)\n\n/**\n * Get current components from the MDX Context.\n *\n * @param {Readonly<MDXComponents> | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @returns {MDXComponents}\n * Current components.\n */\nexport function useMDXComponents(components) {\n const contextComponents = React.useContext(MDXContext)\n\n // Memoize to avoid unnecessary top-level context changes\n return React.useMemo(\n function () {\n // Custom merge via a function prop\n if (typeof components === 'function') {\n return components(contextComponents)\n }\n\n return {...contextComponents, ...components}\n },\n [contextComponents, components]\n )\n}\n\n/**\n * Provider for MDX context.\n *\n * @param {Readonly<Props>} properties\n * Properties.\n * @returns {JSX.Element}\n * Element.\n * @satisfies {Component}\n */\nexport function MDXProvider(properties) {\n /** @type {Readonly<MDXComponents>} */\n let allComponents\n\n if (properties.disableParentContext) {\n allComponents =\n typeof properties.components === 'function'\n ? properties.components(emptyComponents)\n : properties.components || emptyComponents\n } else {\n allComponents = useMDXComponents(properties.components)\n }\n\n return React.createElement(\n MDXContext.Provider,\n {value: allComponents},\n properties.children\n )\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;"],"names":["_createMdxContent","props","_components","Object","assign","h2","p","blockquote","strong","img","a","span","ul","li","_provideComponents","components","React","src","alt","href","dangerouslySetInnerHTML","__html","wrapper","MDXLayout","PostLayout","_ref","_data$mdx$frontmatter","_data$mdx","data","children","date","tags","title","mdx","frontmatter","_jsx","DefaultLayout","_jsxs","Container","className","postLayoutContainer","PostLayoutTitle","postLayoutTitle","PostLayoutDate","PostLayoutTags","PostLayoutContent","MDXProvider","GatsbyMDXWrapper","GATSBY_COMPILED_MDX","postLayoutContentRoot","clsx","postLayoutDateRoot","postLayoutTags","Tags","map","tag","Link","to","Tag","postLayoutTitleRoot","ComposedTags","containerRoot","basicLayoutRoot","BasicLayout","about","headerLogo","headerNavigation","headerNavigationItem","headerNavigationItemLink","headerNavigationList","headerRoot","Header","srcSet","sizes","rel","target","footerRoot","Footer","_Fragment","emptyComponents","MDXContext","useMDXComponents","contextComponents","properties","allComponents","disableParentContext","Provider","value","r","e","t","f","n","Array","isArray","o","length","arguments"],"sourceRoot":""}