[TIL - 1018] git command, APM이란, aws 리소스 알아보기

git

git flow(+operation)

  • fork flow : master, develop, feature, release, hotfix 브랜치로 구성하고, 저장소는 upstream, origin, local으로 구성함
    • 브랜치 : master가 현재 운영, develop은 기능 개발 시 출발점이 되는 브랜치, feature는 각 기능 개발 때 사용되는 브랜치(develop에서 branch 생성), release는 다음 release될 브랜치, hotfix는 긴급하게 수정해야하는 상황이 발생했을 때 master로부터 브랜치를 따서 수정 후 merge 배포를 진행함(절대적인 것은 아님! - 각 팀의 운영 노하우에 따라 조금씩 수정될 수 있음)
    • 저장소 : upstream을 prod로 사용하고 origin은 개발자 개인 repo로 upstream을 fork한 repo, local은 개발자의 로컬 저장소

command

  • cherry-pick : 특정 브랜치와 merge 하는 것이 아니라 특정 브랜치들의 변경사항은 각각 놔두면서 흡수하는 것 - 새로운 커밋(들)을 만들어냄(내용은 복사본, pick한 커밋만큼 생성)
    • next-release 작업이 진행되고 있는 상황에서(dev까지 완료되었건 feature에 있건 간에) master에 긴급 수정한 내용이 생겼을 때 next-release에도 반영해야한다면 cherry-pick을! : release 브랜치에서 새로운 커밋 생성
/* master */
4c01e372f5f7e7ff727f3f5422fae19f0154d7ad (HEAD -> master) prod hotfix
bb237d418692237ebd09bf09178675b8e067fb9e prod commit

> git cherry-pick 4c01e37

/* release branch */
97594e7ccb7b20f375ed109cf0f107f9ee96dc9c (HEAD -> release) prod hotfix
c869dada3813365f36ff4c034fbd244fe2c57324 next-release commit
bb237d418692237ebd09bf09178675b8e067fb9e prod commit
  • interactive rebase(squash) : 여러 커밋을 하나의 커밋으로 만드는 작업을 할 때 사용 - 단 원격저장소(hub 목적)에 push한 커밋가지고는 하지말기!(reset 보다 revert를 사용하는 것이 더 나은 이유와 같음)

infra

  • APM : Application Performance Management(성능 관리, 모니터링툴) - pinpoint, new relic 등이 있음
    • 3계층(tier) 구조 : 프론트 / 서버 / 데이터베이스, 지금은 3계층 이상으로 N계층으로 더 세분화해서 나눔(MSA) - 도메인 별로 더 쪼개서 관리하기 쉽도록, 관리해야할 대상이 많아져 몇군데만 보는 것이 아니라 다 들여다보고 대응할 수 있어야해서 APM을 사용하게 됨
    • tier와 layer 차이 : 외부로 분리해내는 것과 내부적으로 계층을 나눈 것

AWS 리소스

  • AMI : Amazon machine Image - 인스턴스를 이미지화 하여 복제(scale out)가 쉬움, AWS는 트래픽에 따라 오토스케일링이 편하다는 점!
  • access key ID/secret key : API로 리소스 사용가능(써드파티툴로 제어가능) - 주로 마스터 계정의 액세스키가 아닌 IAM 계정(제한된 권한)의 액세스키를 발급하여 사용
  • cloud watch : EC2 인스턴스를 비롯한 모니터링 가능한 서비스의 인스턴스에 attach 시키면 됨, 알람 수치를 설정할 수 있음, 뿐만 아니라 오토스케일링(out, in)
  • aws-cli : cli에서 aws 리소스를 제어할 수 있음 - 단 access-key가 있어야함(발급 받으면 됨)
  • s3 : HTTP로 파일 업로드, 다운로드 가능 - 동적인 처리없이 정적으로 파일만 주고 받는 프로그램을 만든다면 S3를 사용하는 것이 더 효율적
    • 업로드 후 curl로 다운로드 테스트
    • 버킷에 권한 설정 가능 : AWS에서 제공해주는 기능으로 버킷에 대한 정책(공개 여부, 공개 범위 등) json 데이터를 만들기 쉽고 적용하기도 쉬움
    • metadata 설정으로 캐시 설정 가능, 라이프 사이클 설정 가능, 버져닝 가능(동시에 라이프 사이클 설정은 안됨)
    • 해봐야할 것 : spring cloud로 S3 파일 업로드 해보기
  • cloud front(캐시 서버 - 엣지 로케이션) : HTTP 메소드로 동적인 작업일 경우(POST, PUT, DELETE 등) origin으로, 그 외엔 파일 있을 경우 캐시된 파일을 내려주고 origin으로
    • cloud front에 복사된 파일이 없을 경우 origin으로 가게 되어있음 : 임의 갱신할 때 이용할 수 있는 특징(요청 URL 변경하기)
    • deploy : 엣지 로케이션에 배치된(생성된) 단위
    • 단순하게 가까워서 얻는 이점도 있음
    • ec2 - cloud front(custom origin) 연동 : HTTP 통신
  • rds
    • 탄력적으로 관리 가능 : 스케일링 가능, replica 서비스 제공 등
    • 해봐야할 것 : master/slave(Replication) 구성해보기

네트워크

HTTP 헤더

  • referer : 어디에서 요청을 했는지 나타내는 값을 Request 헤더에 넣어서 보냄