프론트는 리액트로 하고, 백엔드는 간단한 자바 스프링부트로 구현을 했습니다. 이제 aws로 배포를 하려고 하는데, 백엔드는 ec2 + rds로 구축을 하는것 까지 성공을 했고, 리액트는 S3 정적호스팅 + cloudFront로 배포까지 각각 완료했습니다. 이제 이제 도메인과 인증 부분을 적용하고 싶은데 아키텍처를 어떻게 구성해야 할지 잘 모르겠어서 몇가지 질문을 정리해봤습니다... 도메인 적용과 HTTPS 적용을 프론트랑 백엔드 둘 다 해야 하는지, 프론트에만 적용을 시켜야 하는지 궁금합니다. CloudFromt를 사용하면 ELB를 사용할 필요가 없는지 궁금합니다. 각각 EC2, S3 + CloudFront에 배포를 했는데, 프론트랑 백엔드는 어떻게 연결을 하는지 궁금합니다.(백엔드와 프론트엔드의 통신(API) 로직은 이미 코드로 구현되어있는 상태입니다.)
강의를 듣다가 궁금한 점이 생겼는데 현재 외부 클라이언트와 elb 사이에서는 https연결을 하고있고, elb가 ec2에 트래픽을 넘겨줄떄는 http로 연결을 하고있는 상태 맞을까요? 만약 맞다면 ec2는 도메인이 아니라 ip주소로 접근하고 있기에 https를 적용할 수 없어서인가요?
안녕하세요. aws ec2를 통하여 프로젝트를 배포 후 https 설정 시 오류가 발생해 질문 남깁니다. 우선 환경부터 설명 드리겠습니다. 2개의 aws 계정을 사용 중입니다. 계정1은 프론트엔드(리액트) / 계정2는 백엔드(스프링) 배포하였습니다. nginx & let's encrypt를 통하여 certbot으로 https 적용 시도 중입니다. 도메인 구매(예시: test.co.kr) 후 Route53을 통하여 각 인스턴스에 적용시켰습니다. 프론트: www.test.co.kr / 백엔드: api.test.co.kr 각 도메인은 정상적으로 동작하고, 접속도 됩니다. 에러 상황 우선 프론트엔드 서버(www.test.co.kr)에서 우선 인증서 발급 및 https 적용하려 하였습니다. 1. test.co.kr로 인증 수행 초기에는 여러 블로그를 보고 따라하다보니, www.test.co.kr이 아닌 test.co.kr로 인증서 발급을 진행하였습니다. 진행 과정 중에서 다음과 같은 오류가 발생하였습니다. A 레코드가 없다는 것으로 파악해 test.co.kr이 아닌 Route53에 A 레코드로 등록한 www.test.co.kr을 등록해야 되겠다고 생각하여 다음은 www.test.co.kr로 진행하였습니다. 2. www.test.co.kr로 인증 수행 www.test.co.kr로 인증을 진행한 사진입니다. 확인해보면 AAAA 레코드가 없다고 나오는데, Route53에는 A 레코드로 인스턴스에 대한 도메인이 등록되어 있는데 그래서 오류가 발생하는 것 일까요?
안녕하세요. 열심히 따라하고있습니다 ^^ 질문 : 로컬 pc 에서 v5 로 프로젝트 생성해서 처음 실행하려는데 에러가 나면서 실행이 안되네요. Strapi v5 훑어보기 v4 버전할때는 강의 따라해도 문제없이 잘 됐었습니다. 실행 결과를 보니 db 에는 테이블까지는 생성이 됐었네요. 에러 내용 : C:\dev\strapi5_test> npm run develop > strapi-5-test@0.1.0 develop > strapi develop ⠋ Loading Strapi⠋ Building build context [INFO] Including the following ENV variables as part of the JS bundle: - ADMIN_PATH - STRAPI_ADMIN_BACKEND_URL - STRAPI_TELEMETRY_DISABLED ✔ Building build context (73ms) ✔ Creating admin (489ms) ✔ Loading Strapi (1826ms) ✔ Generating types (315ms) node:events:497 throw er; // Unhandled 'error' event ^ Error: bind EACCES null:5173 at listenOnPrimaryHandle (node:net:1985:18) at rr (node:internal/cluster/child:163:12) at Worker.<anonymous> (node:internal/cluster/child:113:7) at process.onInternalMessage (node:internal/cluster/utils:49:5) at process.emit (node:events:531:35) at process.processEmit [as emit] (C:\dev\strapi5_test\node_modules\signal-exit\index.js:199:34) at emit (node:internal/child_process:951:14) at process.processTicksAndRejections (node:internal/process/task_queues:83:21) Emitted 'error' event on Server instance at: at listenOnPrimaryHandle (node:net:1986:21) at rr (node:internal/cluster/child:163:12) [... lines matching original stack trace ...] at process.processTicksAndRejections (node:internal/process/task_queues:83:21) { errno: -4092, code: 'EACCES', syscall: 'bind', address: null, port: 5173 } Node.js v20.18.0 C:\dev\strapi5_test> 바쁘시겠지만 시간 괜찮으실때 한번 봐주세요~ 감사합니다.
안녕하세요 강사님, ELB에서 프로토콜:포트 설정 부분에서 왜 HTTPS가 아니라 HTTP를 쓰는지가 잘 이해가 안돼서 질문드립니다. 대상그룹의 정의를 아래와 같이 설명하셨습니다. "ELB로 들어온 요청을 ‘어떤 곳’ 으로 전달해야 하는데, 여기서 ‘어떤 곳’을 대상 그룹(Target Group) 이라고 표현한다. 즉, ELB로 들어온 요청을 어디로 보낼 지 대상 그룹 을 만들어야 한다." ELB 셋팅하기 中 1분 42초 경에 해당하는 프로토콜:포트 설정 부분은 AWS 사이트에서 확인해보니, "트래픽을 라우팅할 로드 밸런서 유형에 해당하는 대상 그룹의 프로토콜을 선택합니다." 라고 하는데 "ELB의 SSL/TLS 기능을 고려한다면, 트래픽을 라우팅할 대상 그룹의 프로토콜은 HTTPS가 되므로 프로토콜 선택은 HTTP가 아니라 HTTPS가 되어야하지 않나?" 라는 의문이 들어 질문드립니다.
안녕하세요 강사님 수업을 듣다가 ELB 보안 그룹 세팅 과정에서 인바운드 규칙 적용시 HTTP와 HTTPS에 대해서만 보안을 허용하게끔 하는 이유가 궁금해졌습니다. ELB의 SSL/TLS 기능이 HTTP를 HTTPS로 바꿔주는 거라고 배웠는데 그래서 HTTPS인지 HTTP인지 여부가 중요해서 두개의 유형에 대해서 허용을 하는 것은 알겠는데.. 나머지는 왜 허용을 안하는지 궁금합니다
안녕하세요 강사님 수업 잘 듣고 있습니다. 다름이 아니라, 말씀해주신 방법대로 spring boot 서버를 배포하려고 하니 잘 안되네요 Web server failed to start. Port 80 was already in use. 라고 나오는데, 바로 직전 강좌에서 express를 80번 포트로 이미 배포한 상황에서 스프링부트 배포를 연속적으로 하려고 하니 이런 에러가 발생하는 것 같습니다 이런 경우 어떻게 기존 express를 삭제하고 스프링부트 배포를 할 수 있나요? 또한 스프링부트를 배포하는데 왜 자동으로 80번 포트로 배포가 되나 궁금합니다. HTTP의 권장 포트가 80번이기에 자동으로 80번으로 배정되는 것인가요
강의 파트 : 섹션2. 백엔드 API 서버 배포하기 (EC2) 강의명 : [실습] 7. Express 서버를 EC2에 배포하기(영상시간 4:52~5:13) 문의 내용 : EC2에서 "sudo pm2 start app.js"으로 배포를 실시하는데, publicIP로 접속시 연결거부가 발생하고 있습니다. 강의문서 : https://jscode.notion.site/7-Express-EC2-5f90f0ece37943f99dffbf29a21bdd93 (강의 내용의 코드를 복사&붙여넣기 하여 진행하였습니다) 권한 상태 : IAM 통해 별도의 사용자를 생성, 해당 사용자 계정에 권한을 부여하여 실습을 진행하고 있습니다. 부여 권한 1) AmazonEC2FullAccess 부여 권한 2) AmazonRDSFullAccess 부여 권한 3) AWSCloudShellFullAccess 부여 권한 4) EC2InstanceConnect (이하 현 상황에 대한 스크린샷 및 간단한 첨언입니다) 안녕하세요. sudo pm2 start app.js명령까지 실시하여 배포를 실시하였습니다만, 아래의 화면처럼 연결이 거부되고 있습니다. 혹시 제가 인지못한 에러가 있을까 싶어서 sudo npx pm2 monit 명령등으로 에러를 체크하였습니다만 특별한 에러는 찾지 못하였습니다. 제가 설정을 하는 중에 빠뜨리거나 잘못된 부분이 있는 거 같은데 찾지 못하고 있습니다. 조언을 부탁 드립니다.
위 항목은 혹시 어디서 과금되는 것인가요? rds는 IPv4로 열지 않고 공유해주신 https://velog.io/@server30sopt/VPC-%EC%84%9C%EB%B8%8C%EB%84%B7-%EC%84%A4%EC%A0%95%EC%9C%BC%EB%A1%9C-RDS%EC%97%90-%EC%95%88%EC%A0%84%ED%95%98%EA%B2%8C-%EC%A0%91%EA%B7%BC%ED%95%98%EA%B8%B0 위 블로그 참고해서 ec2 내부에서만 접근 가능하게 설정해놓은 상태입니다. 여러 블로그 참고해서 현재 rds 세팅은 아래와 같습니다. 매일매일 야금야금 오르고 있네요 ㅠ 스냅샷도 없습니다.
안녕하세요. 현재 [실습] 3. ELB 셋팅하기 - 리스너 및 라우팅 / 헬스 체크 강의를 듣고 실습하던 중, cannot get /health 오류를 보게 되었습니다. http://13.124.124.188/health 요것을 했을 때, cannot GET /health 가 뜨고 (아래 이미지는 대상 그룹에 속한 하나의 인스턴스의 상태검사 결과입니다.) http://13.124.124.188/ 요것을 했을 때는 정상 작동 됩니다. reload를 했을 때 pm2 명령어 부분에서 문제가 있는 걸까요? app.js 파일은 아래와 같이 입력해서 저장했고 require('dotenv').config(); const express = require('express'); const app = express(); const port = 80; app.get('/', (req, res) => { res.send(`.env 테스트 : ${process.env.DATABASE_NAME}`); }) app.get('/health', (req, res) => { res.status(200).send("Success Heatlth Check"); }) app.listen(port, () => { console.log(`Example app listening on port ${port}`) }) 아래는 ec2 인스턴스에 연결해서 실행한 'pm2 reload 0'의 결과입니다. ubuntu@ip-172-31-1-28:~/ec2-express-sample$ pm2 reload 0 [PM2] Spawning PM2 daemon with pm2_home=/home/ubuntu/.pm2 [PM2] PM2 Successfully daemonized Use --update-env to update environment variables [PM2] Applying action reloadProcessId on app [0](ids: [ '0' ]) [PM2][ERROR] Process 0 not found
안녕하세요 강의를 보고 서비스를 운영하려고 준비중인 상태인데 자고 일어나니 아래와 같은 이메일을 받았습니다. 실제 aws의 비용 관리 부분에서도 위와 같이 나오는 상황입니다. 찾아보니 https://repost.aws/questions/QULUdGMVrkQGGvt1vueg96OA/ec2-free-tier-snapshot-data-limit-surpassed 이런 레퍼런스는 ec2가 AMI를 생성했을 수 있다고 하는데 위와 같이 그런것도 없는 상태입니다. snapshot 스토리지를 비울 수 있는 방법이 없을까요? 추가로 스냅샷 스토리지는 Amazon Simple Storage Service(Amazon S3)에서 데이터가 차지하는 공간의 양을 기준으로 합니다.라고 하는데 제 s3에는 정적 웹 사이트 하나 배포되어 있고 이미지 업로드 등 s3 파일에 추가로 저장되는 파일이 없는데 예상 사용량이 현재보다 커지는 이유가 궁금합니다.
안녕하세요, 강의 잘 수강했습니다. 복습 겸 정리하다가 제가 알던 부분과 좀 다른 부분이 있는 것 같아서 여쭤봅니다. RDS 실습 3번 2:22 에 character_set_filesystem 도 utf8mb4 로 설정하시는데, 기본값인 binary 로 둬야 파일을 그대로 저장할 수 있을 것 같습니다. 애플리케이션에서 base64 로 인코딩하고 저장한다든지 그런 경우에는 의미가 있을 수 있는데, DB 에 저장하기 위해서라면 불필요한 변환 작업과 오버헤드가 아닐까 싶은데요. 혹시 정말로 인코딩 변환을 의도하신 거라면 binary 로 저장했을 때보다 utf8mb4 로 저장했을 때 어떤 이점이 있는지 궁금합니다. (사실 파일을 백업 목적이 아니라면 DB 에는 잘 저장하지 않으니 별 상관 없긴 합니다ㅎㅎ)
현재 EC2인스턴스와 탄력적IP만 연결했다가 지금은 탄력적IP는 연결하지않고 삭제한후에 인스턴스만으로 작업중입니다. 저는 RDS나 S3를 아직 사용하지않았는데 Virtual Private Cloud 라는 부분에서 금액이 발생되어 질문드립니다! 비용이 발생한 이유와 비용 발생을 막을 방법이 궁금합니다. 또한 S3 프론트엔드 서버를 올릴 예정이였는데 이상황에서도 비용이 추가로 발생하는지 궁금합니다.
안녕하세요 강사님, 좋은 강의 감사합니다! BE Aws ec2 배포 과정 중에 궁금한 점이 생겨서 질문드립니다. 보통 웹에서는 프론트 주소를 백엔드 ec2 인바운드 규칙에 넣어서 그 주소의 api요청만 허용하게 해, 보안을 강화하는 한편, 앱에서는 웹과 다르게 프론트 배포 주소를 알 수 없는데 이때는 모든 아이피를 허용하게 보안규칙을 넣어야 하나요? 만약 그렇게하면 악성 유저가 서버 주소를 알아서 악용하는 상황에서는 어떻게 보안을 강화해야할까요? 너무 궁금합니다! 이상입니다. 감사합니다.
맨 처음 17달러 과금이 발생한 것을 확인한 날, 강의를 따라하면서 배포한 사이트를 비활성화 처리했습니다. 하지만 다음날 25달러로 늘어나 있었고 SSL 인증서 문제인 것을 확인해, Certificate Manager들어가서 발급받았던 인증서 삭제하고, 배포했던 사이트에 적용햇던 인증서를 None처리했습니다. 그러고 다음날은 오늘 추가 0.81달러 과금이 발생해 25.81 이 되었습니다. cloudfront에서 과금이 발생할 수 있는 요소에 대해 설명해주실 수 있을까요. 어떤 처리들을 해야 아예 과금이 발생하지 않을 수 있을까요? 인증서 외에도 과금 발생할 요소들이 있을까요. 실습시에 구매했던 도메인네임을 적용하면서 하는 중이었습니다 .