window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster가 이미 존재합니다') } else { w.LeadBooster = { q: [], on: 함수 (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 함수 (n) { this.q.push({ t: 't', n: n }) }, } } })() thecodest, Author at The Codest - Page 18 of 18

Amazon S3는 Amazon Web Services의 핵심에 있는 매우 강력한 서비스입니다. 하지만 프로덕션 환경이 아닌 곳에서는 S3를 사용하기가 어려울 수 있습니다. 액세스 키를 전달하고, 사용자 계정을 프로비저닝하고, 안정적인 네트워크 연결을 유지해야 하는 것은 말할 것도 없고, 비용도 들기 때문입니다. 다행히도 이 문제를 해결하는 데 도움이 되는 도구가 있습니다. FakeS3는 실제 S3의 동작을 시뮬레이션하는 경량 서버입니다. 이 도구는 Amazon S3가 응답하는 것과 동일한 호출에 응답하고 업로드된 파일을 로컬 파일 시스템에 저장하며 Amazon 서비스에 대한 요청은 하지 않습니다. gem은 전체 S3 명령 집합을 지원하지는 않지만, 구현된 API는 대부분의 애플리케이션 사용 사례에 충분합니다.

이 글에서는 액티브 레코드에 널리 사용되는 파일 첨부 라이브러리인 Paperclip과 AWS 및 FakeS3를 통합하는 방법을 소개합니다. Paperclip과 S3를 함께 사용하면 유효성 검사 관리 및 이미지 변환과 같은 유용한 Paperclip의 핵심 기능과 온라인 스토리지의 장점을 결합한 효과적인 파일 저장 시스템을 제공합니다. 이러한 도구의 구성은 명확하지 않고 자세한 설명서를 살펴보고 여러 가지 보석 같은 문제를 해결해야 하지만, 시간을 투자하여 더 빠르고 효율적으로 개발할 가치가 있습니다.

우리의 목표는 무엇인가요?

설명된 도구를 통합하려면 세 단계를 거쳐야 합니다:

  1. 백그라운드에서 FakeS3 겜에서 제공하는 S3 페이크서버를 실행합니다.
  2. 모든 요청을 시작된 페이크 서버에 위임하도록 AWS S3 클라이언트를 구성합니다.
  3. 구축된 리소스의 URL에서 가짜 S3 엔드포인트를 사용하도록 Paperclip 구성하기.

설치

필요한 보석을 설치하는 것부터 시작하겠습니다:

# 젬파일

gem "종이 클립"
gem "aws-sdk", "~> 1.6"

gem "fakes3", 그룹: [:개발, :테스트]

aws-sdk 버전 1.6을 설치해야 합니다. SKD를 사용하여 Amazon 서비스에서 스토리지를 관리하는 Paperclip은 상위 버전에서 제대로 작동하지 않습니다. 이는 버전 2.0에서 SDK의 API가 크게 변경되었기 때문입니다.

또한 FakeS3의 주요 목표는 런타임 종속성을 최소화하는 것임을 기억하세요. 이 도구는 S3 호출을 테스트하기 위한 개발 도구에 가깝습니다. 코드 S3 기능을 복제하려는 프로덕션 서버가 아니라. 따라서 개발 및 테스트 그룹에만 gem을 포함해야 합니다.

AWS 구성

AWS SDK는 구성 로드를 담당하는 전용 헬퍼 메서드를 제공합니다. 기본적으로 다음에서 구성을 로드합니다. config/aws.yml를 호출하여 현재 환경에 대한 파라미터를 추출하고 이를 AWS 클라이언트에 전달합니다. 먼저 이니셜라이저에서 다음 메서드를 호출합니다:

# config/initializers/aws.rb

AWS::Rails.load_yaml_config

이제 구성 파일이 제대로 로드되었으므로 콘텐츠 지정을 진행할 수 있습니다:

# config/aws.yml

개발: &개발
    access_key_id: "abc"
    secret_access_key: "abc"
    s3_endpoint: "localhost"
    s3_port: 10001
    s3_force_path_style: true
    use_ssl: false

test: *개발

모든 매개 변수에 대해 하나씩 살펴 보겠습니다:

프로덕션 환경에 대한 구성은 매우 간단합니다:

# config/aws.yml

프로덕션: &프로덕션
    access_key_id:     
    secret_access_key: 

스테이징: *프로덕션

하지만 이번에는 실제 S3 서비스를 다루기 때문에 실제 AWS 자격 증명을 제공해야 합니다.

잠재적인 보안 위험 때문에 액세스 키와 같은 비밀 값은 환경 변수를 사용하는 등의 방법으로 버전 관리 시스템에서 제외하는 것이 좋습니다. 여기서는 ERB를 사용하여 해당 값을 구성 파일에 삽입하겠습니다.

클립 구성

이제 Paperclip을 마주하고 이미 구성된 S3 클라이언트와 잘 작동하도록 강제할 차례입니다. Paperclip 구성의 주요 목표는 가짜 서버가 호스팅하는 리소스를 찾을 수 있는 스토리지 경로를 확보하는 것입니다:

localhost:10001/:버킷_이름/:경로

다시 개발 환경부터 시작하겠습니다:

# config/paperclip.yml

개발: &개발
    storage: :s3
    버킷: "development"
    s3_host_name: "localhost"
    url: ":s3_alias_url"
    경로 ":클래스/:첨부/:id_partition/:스타일/:파일명.:확장자"
    s3_host_alias: "localhost:10001/개발"

test: *개발
# config/paperclip.yml

프로덕션: &프로덕션
    storage: :s3
    버킷:  
    url:     ":s3_도메인_URL"
    경로    ":클래스/:첨부파일/:아이디_파티션/:스타일/:파일명.:확장자"

스테이징: *프로덕션

AWS 자격 증명과 마찬가지로 버킷 이름도 코드 베이스 외부에 저장해야 하는 비밀 값으로 간주됩니다. 환경 변수에 이름을 저장하는 것이 좋습니다.

마지막으로, 초기화 프로그램에서 설정을 Paperclip의 기본 옵션으로 병합합니다:

# config/initializers/paperclip.rb

paperclip_defaults = Rails.application.config_for :paperclip
paperclip_defaults.symbolize_keys!

종이 클립::첨부 파일.기본값_옵션.병합! 종이 클립 _ 기본값

가짜 실행3

AWS와 Paperclip 구성 모두 아래에서 실행될 것으로 예상되는 로컬 S3 페이크 서버에 대한 참조가 포함되어 있습니다. localhost:10001. 개발 작업을 하기 전에 다음 명령어(FakeS3 gem에서 제공)로 서버를 시작해야 합니다:

fakes3 -r public/system -p 10001

전달된 매개변수는 다음과 같습니다:

애플리케이션에서 프로세스 관리를 위해 Foreman을 사용하는 경우 Procfile에 다음 항목을 추가하는 것이 편리할 수 있습니다:

# 프로시저

fakes3: fakes3 -r ${FAKES3_STORAGE_PATH:-public/system} -p ${FAKES3_PORT:-10001}

이렇게 하면 S3 관련 기능을 개발해야 할 때마다 페이크서버를 실행하는 데 낭비하는 시간을 절약할 수 있습니다.

결론

모든 요청을 로컬 가짜 서버에 위임하도록 AWS 클라이언트를 구성하고, 구축된 리소스의 URL에 가짜 S3 엔드포인트를 사용하도록 Paperclip을 설정하고, 로컬 파일 시스템에 모든 파일을 저장하는 가짜 S3 gem에서 제공하는 가짜 서버를 시작했습니다.

그 결과 인터넷 연결로부터 독립하고 비용을 절감하여 더 빠르고 안정적으로 개발할 수 있게 되었습니다.

ko_KRKorean