Github Actions 로 AWS ECS deployment

이미지
Github Actions 을 이용해서 spring boot 프로젝트를 Docker , ECR, ECS 를 이용해서 배포하는 과정을 블로깅 하려고 한다. Github repository 랑 AWS 계정은 다 있다는 전제하에 진행 한다. aws cli 를 사용해도 되는데 제일 쉽게 console 을 이용한 가내수공업을 해보려고 한다. 우선 ECS cluster 를 먼저 생성한다. 파란색 버튼 눌러! 깜빡하고 언급 안했는데, fargate 를 사용할 것이다. fargate 에 대한 설명은 aws 들어가서 참고 하세요. https://aws.amazon.com/ko/fargate/ 클러스터 이름은 알아서 기입해주고, VPC 는 체크해주면 알아서 생성 해준다. 혹은 체크하지 않고 AWS default VPC 를 사용해도 된다. 혹은 VPC 를 스스로 생성해서 사용해도 된다. 그리고 CloudWatch 컨테이너 인사이트 활성화는 꼭 체크해주자, CloudWatch 를 이용해서 로그를 볼 수 있어서 유용하다. 다음에 해주어야 할 것이! 바로 작업 정의 ! task-definition 생성이다. 시퍼런 버튼 눌러서 생성해 주면 된다. 역시 또한 fargate 를 사용할 것이다. 작업 정의 이름은 알아서 기입해주고, 작업 역할과 작업 실행 IAM 역할이 가장 중요하다. AmazonECSTaskExecutionRolePolicy 와 관련된 내용인데, 이 정도만 언급하고 생략하겠다. 컨테이너 정의에서 컨테이너 추가 버튼을 눌러서, 사전에 ECR 에 등록된 이미지를 세팅 해 준다. 작업 메모리 및 작업 CPU 도 알맞게 설정 한다. 컨테이너 이름은 알아서 기입해주고, 이미지는 ECR 이미지 URL 을 넣어준다. 그 다음은 처음에 생성한 클러스터에 들어가서 서비스를 생성 해 준다. 역시 fargate를 이용할 것이다. 배포는 롤링 업데이트로 설정한다. 블루 그린 배...

Hibernate - Composite Identifiers @EmbeddedId @IdClass With @GeneratedValue is impossible

이미지
요즘에, MSA 꽂혀서 이거저거 공부를 여전히 하고 있다. 그러다가 DDD 에 대해서 관심이 가게 되고, DDD 를 공부하다가 또한 JPA 에 꽂혀서 이거저거 건드리고 있다. 그러다가 좀 fucking 한 걸 발견해서 포스팅 해보려고 한다. DDD 에서는    Ubiquitous Language  라는 개념이 있다. 도메인 전문가와 개발자 간에 같이 공유하며, 해당 프로젝트에 참여하는 모든 사람 간에 공유되는 언어이다. 도메인 주도 설계 구현 이라는 책에서 적절한 예시를 주고 있다. 1. patient.setShotType(ShotTypes.TYPE_FLU); patient.setDoes(dose); patient.setNurse(nurse); 2. patient.giveFluShot(); 3. Vaccine vaccine = vaccines.standardAdultFluDose(); nurse.administerFluVaccine(patient, vaccine); 3가지 예시 중 어느 것이 유비쿼터스 언어를 잘 반영하고 있다고 할까? 유비쿼터스 언어에 대한 대략적인 감은 잡았을 것이라고 생각한다. 도메인 관점에서 어떻게 하면 유비쿼터스 언어를 반영하는 설계를 할 수 있을까? 라는 고민을 항상 한다. DDD start 라는 책에서는 엔티티와 밸류 오브젝트라는 개념을 다룬다. (두 개념에 대한 설명은 하지 않겠다.) 아래 링크 참조 http://getoutsidedoor.com/2018/08/06/ddd-entities-value-objects-aggregates/ 여기서, 밸류 오브젝트를 통한 식별자를 사용하는 개념이 나온다. 단순히, 어떤 엔티티를 설계할 때 단순히 식별자를 Long 혹은 String 으로 type 선언을 하게 되면, 유비쿼터스 언어를 잘 반영했다고 보기 어렵게 된다. 좀 더 도메인 관점에서 해당 도메인을 잘 나타내기 위해서는 단순히 식별자를 L...