Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

week06 - S3업로드 및 mongoDB ORM 관련 명령어 #12

Open
hyejungg opened this issue May 28, 2022 · 1 comment
Open

week06 - S3업로드 및 mongoDB ORM 관련 명령어 #12

hyejungg opened this issue May 28, 2022 · 1 comment
Assignees
Labels

Comments

@hyejungg
Copy link
Member

hyejungg commented May 28, 2022

🔥 알게된 점

  1. express 에서 S3로 파일 업로드하기
  2. 몽고DB에서 사용할 수 있는 것

📚 배운 점

application/json

  • HTTP body에 들어가는 message type 명시하는 것
  • json 형식을 통해 http로 통신하는 것

multipart/form-data

  • HTTP 헤더 속 content-Type 필드에 파일을 첨부하기 위해 사용
  • MIME Type을 명시
  • Form 타입 형태로 주고 받을 때 이용

MIME Type

Multipurpose Internet Mail Extensions

  • 파일 변환 형태
  • 파일을 MIME형태로 인코딩한 파일은 Content-type 정보를 파일의 앞부분에 담게 됨

Content-type?

  • 클라이언트와 데이터를 주고 받을 때, 서버는 HTTP 헤더에 파일이나 자원을 포함하는 바이트의 Stream을 보냄
  • Application/~ 형태의 타입이 존재
    • express에서 application/json을 쓰는데 이건 클라와 서버간 통신을 JSON 형태로 주고 받겠다는 뜻
    • multpart/form-data는 클라와 서버 간 통신 시 form 타입의 파일 형태를 주고 받겠다는 뜻

JPEG, MPEG 등등 될 수 있음

Client <-> Server 통신 과정

  1. 클라이언트 -> 서버에게 Form을 통해 파일을 서버로 전송
  2. Content-type이 multipart/form-data로 지정되어 전송
  3. 서버는 해당 multipart 메세지를 part별로 분리해서 처리

파일 업로드를 도와 줄 모듈

  1. multer : multipart/form-data로 전송된 파일 처리 미들웨어
  2. multer-s3 : 이미지 업로드 시 s3 사용할 경우 이용
  3. aws-sdk : nodejs용 aws sdk를 사용하기 위한 모듈
- s3에 저장된 파일 주소는 req.file.location에 있음
  • Multer와 MulterS3는 서로 안에 들어있는게 살짝 다름. !!명시 주의하기!!
Express.Multer.File
Express.MulterS3.File
  • express에서 S3를 사용하여 파일 업로드 시에는 S3의 액세스키, 시크릿키, 버킷명 필요
    • 유출되면 안돼! 오픈된 공간에는 올리지 말 것
    • 권한 부여 필요 S3 버킷 -> 권한 -> ACL 활성화 해줘야 함

      ACL(Access Control List)


query parameter

  • 검색은 주로 queryString 사용
    • req.query는 다양한 타입으로 들어올 수 있으므로 as 로 타입 명시 필요!
  • sql에서 검색 시에는 like를 사용해서 검색 '%string%' 이런 형태로
    • mongoDB에서는 정규표현식을 $reqex로 매칭시킴 /.string./
    • or 연산자는 $or

타입가드

  • typeof, instanceof 이런 애들처럼 타입 한 번 검사해주는
  • is를 이용해서 custom 타입 가드 생성 가능

페이지네이션

sort : -1이 최신순(내림차순) / 1이 오름차순
skip : 
limit

//skip, limit를 이용해서 페이지네이션 사용

Model.countDocuments({}) : 도큐먼트 개수 (row 수) 반환

  • countDocuments안에 필터를 걸 수도 있음

몽구스에서 where 은 Equlas와 함께 사용

@hyejungg hyejungg self-assigned this May 28, 2022
@hyejungg
Copy link
Member Author

hyejungg commented Jun 5, 2022

궁금한점

  1. 쿼리파라미터로 search 인 경우와 option이 있는 경우로 하고 싶으면 Option은 ?로 지정?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant