[팀프로젝트]3주차
- 우아한테크코스
- 2021. 7. 22. 00:27
와우 벌써 3주차라니. 우리팀은 2주 단위였던 스프린트를 1주 단위로 줄이고 회고하는 방식으로 변경했다. 다음 데모데이 까지 핵심기능 개발이 목표인데 좀 더 효율적으로 보인다~
깃 서브모듈
- 하나의 저장소 안에 있는 또 다른 별개의 저장소
서브모듈 시작하기
- Git에 팀 Operation을 만들고, Private 레포지토리를 만들었다.
- 해당 레포지토리를 아래 명령어로 서브모듈로 만들어준다
git submodule add {내가 서브모듈로 사용하고 싶은 레포의 URL}
- 서브모듈을 포함한 프로젝트 Clone
- 비어있다..
- 아래 명령어를 실행해서 git 저장소를 초기화 해주고, 원격 저장소에서 파일을 가져온다.
git submodule init
git submodule update
https://sgc109.github.io/2020/07/16/git-submodule/
Jasypt보다 좋아진 점
- 팀원들과 공유가 편하다
- 팀원들 간 수정이 편하다..!
- Jaspyt으로는 logger설정 xml에 쓸 슬랙 Web-hook 토큰이 복호화가 안된다. 스프링 컨텍스트를 부팅할 때 Jasypt으로 암호화된 것들을 복호화 해준다고 하는데.. ㅜㅜ 그래서 Web-hook 토큰을 VM 옵션으로 주고 있었는데 이런 부분을 편하게 관리 할 수 있었다
- 자바, 스프링 관련 설정말고 여러 가지로 활용이 가능할 듯 보인다.
S3
프로필 사진 등록, 제거 API구현 에서 프로필사진에 대한 스토리지를 AWS S3를 사용하기로 하였다. 이는 후에 배너관리 할 때도 유용하게 사용할 것 같다.
IAM
- AWS 서비스와 리소스에 대한 액세스를 안전하게 관리하는 기능
accesskey, secretkey 발급은 해드릴 수 없어요. ec2-s3-deploy 역할을 활용해주세요. ec2 페이지에서 우측 상단에 작업 > 보안 > IAM 역할 수정 으로 진행하면 됩니다.
IAM의 역할(Role)
- AWS에서 할 수 있는 작업과 할 수 없는 작업을 결정하는 것과 리소스에 대한 액세스를 부여하는 권한 세트
- 서버로 사용 중인 EC2에서 S3를 사용하기 위해서는 IAM역할을 추가 해야 했다.
CloudFront
- CloudFront는 AWS에서 제공하는 CDN 기능
퍼블릭 오픈도 불가합니다. 정적 리소스 읽기 작업은 Cloudfront를 통해 접근하도록 구성하시고, 쓰기 작업은 ec2-s3-deploy 역할이 부여된 인스턴스에서 가능합니다. (참고로 이 역할에 cloudwatch 권한도 부여해두었어요)
- 쓰기작업은 EC2에서 하고, 읽기 작업은 CloudFront를 통해 수행
- 퍼블릭 오픈이 되어있지 않아서 CloudFront로 읽기 수행 시에는 Public access 차단 설정이 동작하지 않도록 해야함
- CloudFront 생성시 Origin으로 S3연결
- S3 Access 정책 중 "use OAI" 선택
- Origin aceess identities 생성 후 연결
- S3 버킷의 권한 탭에서 버킷 정책 설정 JSON 형식
- CloudFront를 사용해서 S3를 읽어오는 과정은 현구막 블로그를 참조함
https://hyeon9mak.github.io/access-s3-through-cloudfront/
https://dev.classmethod.jp/articles/aws-cli-cloudfront-oai-kr/
OAI란 (Origin Access ID)
- Amazon CloudFront와 함께 콘텐츠를 제공하기 위해 Amazon S3 버킷을 Origin으로 사용하는 경우, 사용자가 Amazon S3 URL 대신 CloudFront URL을 통해 콘텐츠에서 액세스하도록 요구하기 위해 사용하는 가상 자격 증명.
MultipartFile 테스트
- 스프링에서 MultiPartFile을 테스트 할 수 있는 MockMultipartFile을 제공한다.
//given
MockMultipartFile file = new MockMultipartFile("multipartFile", "testImage1.jpg",
ContentType.IMAGE_JPEG.getMimeType(), "testImageBinary".getBytes());
- MockMultipartFile의 첫번째 인자인 "multipartFile"이게 Controller에서 MultipartFile을 받는 인자의 이름과 같아야 한다..
- 또한 MultipartFile요청을 모킹할 수 있는 MockMvcReqeustBuilders.multipart를 제공한다.
mockMvc.perform(multipart("/profile")
.file(file))
.andExpect(status().isCreated())
.andExpect(jsonPath("profileUrl").value(url))
.andDo(document("profile",
preprocessRequest(prettyPrint()),
preprocessResponse(prettyPrint())))
;
아임포트
- 결제 모듈로 아임포트를 붙히기로 했다.
- 클라이언트로 부터 받은 결제 정보와 직접 아임포트 API로 실 결제정보를 비교하는 부분이 흥미로웠다.
- 결제중, 결제실패, 결제 대기 등 상태 값이 많았는데 ENUM으로 관리하니 좋았다.
그래서 3주차는..
- 월요일에 두번째 데모데이 발표를 했다.
- 서브모듈로 비밀 데이터를 관리, 공유 하도록 하였다.
- S3로 프로필 이미지 업로드 API를 구현했다.
- 결제 모듈인 아임포트를 사용해 보았고, 이것을 우리 결제 도메인에 적용하였다!
- Payment 도메인이 추가되었다~ 👏
'우아한테크코스' 카테고리의 다른 글
배포인프라 수업 다시보기 (0) | 2021.08.04 |
---|---|
[팀프로젝트]4주차 (0) | 2021.07.27 |
[팀프로젝트] 2주차 (0) | 2021.07.13 |
[팀프로젝트] 1주차 (5) | 2021.07.09 |
SpringBoot Security 없이 Oauth2.0 로그인 Naver편 (8) | 2021.07.06 |