Node.js,mysql,aws_개인프로젝트 진행하며 알게 된 점(+ 복습)
__filename, __dirname
// file 명을 포함한 절대경로
console.log(__filename); // /Users/directory.js
// file 명을 제외한 절대 경로 (폴더 경로)
console.log(__dirname); // /Users
Node.js(express)에서 파일을 업로드하기 위해 사용되는 multipart/form-data를 다루기 위한 미들웨어 모듈
폼데이터나 폼 태그를 통해 업로드한 이미지를 올리면 req.file로 정보가 들어오고, dest 혹은 storage 속성에 지정해둔 경로에 이미지가 저장
multer({storage: 저장 함수(ex: diskStorage, multerS3 등..)로 생성한 파일 저장 위치 정보, option(사이즈,필터 등)})
파일을 위 multer로 설정한 storage에 저장(만든 multer 인스턴스를 변수로 저장하여 라우터에서 미들웨어로 이용)
fs.readFileSync(req.file.path)
로 필요한 코드 내에서 읽어올 수 있음 - 서버 db에 저장req.file.location
으로 해당하는 버킷의 이미지 url 읽어올 수 있음 - 서버 db에 저장more multer's option..-> multer 깃헙문서
AWS-SDK(Software Development Kit):
AWS를 프로그래밍적으로 제어하기 편리하도록 제공되는 라이브러리들(개발을 도와주는 키트들)
IAM (Identity and Access Manager)
: AWS의 리소스에 대한 개별적으로 접근제어와 권한을 가지도록 계정 또는 그룹을 생성, 관리하는 서비스.
front-end에서 유저가 업로드한 이미지를 저장할 때
- server에 이미지 저장 폴더를 만들어 클라이언트로부터 요청받은 파일 저장
- 이미지를 저장하는 서버 따로 만듬
- DB에 Blob 타입으로 저장
--> 사용하는 서버, DB, PC의 성능에 따라 퍼포먼스가 달라질 수 있다.
--> AWS의 S3를 이용하면 PC의 성능 고려하지 않아도 되고, 사용한 만큼 비용을 지불하므로 보다 효율적
- 방법
- AWS의 콘솔의 IAM에서 사용자 추가 -액세스 키 ID, 비밀 액세스 키 생성
- (안 만들었다면) S3 버킷 생성
- server 폴더 안에 config/s3.json 만들어 위에서 할당받은 키 ID, 비밀 액세스 키, 리전 입력
- S3 버킷에 접근하는 코드(aws-sdk) + multer(+ multer-s3) 이용 로직 구현
client: 유저 입력에 따라 서버에 이미지 post 요청
server: AWS S3 버킷에 이미지 파일 저장 + DB에 버킷의 이미지 파일 경로(이미지 주소) 저장
client: 이미지 get 요청
server: DB에 저장된 버킷의 이미지 파일 경로를 응답
S3 버킷으로 직접 요청을 받지 않고(S3 버킷 자체에는 퍼블릭 액세스가 전면 차단되어 외부 접근 권한이 없는 상태) CloudFront를 통해서만 파일에 접근할 수 있다.
웹서버의 캐싱과 쿼리 스트링, HTTP 헤더 전달, 리버스 프록시 기능을 일부 가짐
웹사이트 최적화 가능
(캐싱, time to live (TTL) 관련 추가 작성)
로드 밸런서(Load Balancer): 서버 부하(load)를 적절하게 분배해주는 장치
(트래픽을 여러 Amazon EC2 인스턴스에 자동으로 분산, 또한 비정상 인스턴스를 검색하고 비정상 인스턴스가 복원될 때까지 트래픽을 정상 인스턴스로 다시 라우팅, 트래픽에 맞춰 요청 처리 용량을 자동으로 조정)
AWS에서 제공하는 DNS(도메인 이름 시스템)웹 서비스
도메인 등록, 인터넷 트래픽을 도메인의 리소스로 라우팅, 리소스 상태 확인 + 인증서 발급을 위한 필수 요소
웹 사이트와 애플리케이션을 보호하는 퍼블릭 및 프라이빗 SSL/TLS X.509 인증서와 키를 만들고 관리
ACM 통합서비스(ELB, CloudFront, API Gateway 등)와 연동해서 쓸 수 있다.
만료되는 인증서의 갱신을 자동화하여 보안 관리를 단순화
비대칭 키 암호화 기법
SSL 인증서 작동 방법
- 웹브라우저가 서버 접속 시 서버는 제일 먼저 인증서 제공
- 브라우저는 인증서를 발급한 CA가 자신이 가지고 있는 CA리스트에 있는지 확인
- 리스트에 있다면 해당 CA의 공개키를 이용해 인증서 복호화
- 인증서를 복호화할 수 있다는 것은 해당 인증서가 CA의 비공개키에 의해 암호화된 것을 의미
-> 즉, 데이터를 제공한 사람의 신원 보장