git action을 통해 ec2인스턴스에 자동으로 나의 코드를 배포하는 과정을 진행할 것이다. 우리의 서비스가 ec2에 배포를 진행하고 나면 우리의 서비스가 수정되고 새로운 기능이 생길 때마다 ec2에 접속해서 새로 빌드를 해야하는데 이러한 과정을 git action과 aws에서 대신 진행주는 서비스가 있다.
해당 과정은 개발중이거나 개발된 깃 레파지토리, Ec2인스턴스, Codedeploy, IAM Role, IAM User, S3버킷을 통해 이뤄지며 해당 과정을 순서대로 정리한 글이다.
먼저 개발중인 레파지토리를 이용할 것이며 각자의 프로젝트를 이용하거나 테스트 앱을 클론하여 진행해도 무방하다.
aws ec2에 접속하기 위해서는 인스턴스 생성시 생성한 키페어를 통해 접속을 할 수 있다. 먼저 인스턴스를 열기 위해 터미널을 열고 생성된 키페어가 있는 디렉토리로 이동한다.
이과정에서 윈도우 cmd나 powershell이 실행이 안되는 문제가 조금 있어서 git설치시 설치된 git bash 를 통해 인스턴스로 접속했다.
접속할 인스턴스를 선택 후 연결 버튼 클릭
연결 할 때 사용할 스크립트 복사.
shell을 통해 복사한 키를 붙여넣고 접속 시 다음과 같은 화면이 나오면 성공적으로 인스턴스에 접속이 된것이다.
row_number 함수는 조회하는 데이터의 특정 집합내에서 select 결과의 건수의 변화없이 데이터를 조회하는 함수이다.
데이터베이스에서 상품 테이블과 이미지 테이블을 조인한 데이터를 가져오려고 하는 과정에서 문제가 한가지 발행하였다. 현재 개발중인 API서버에서 상품의 데이터들을 조회하여 15개씩 limit옵션을 사용하여 가져오려고 한다. 데이터베이스에 대한 심도있는 학습을 하지 않았던 탓일까 왜 당연히 15개의 상품이 모두 조회된다는 생각을 했던것일까…
기존 쿼리 및 결과
정말 쉽게 생각해서 간단하게 left join만 해주면 되는 문제다라는 생각으로 데이터베이스에 조회를 했다. 내가 작성한 쿼리는 다음과 같다.
sql
1 2 3 4 5 6
select p.product_no, p.product_title, i.image_no, i.image_src from product p leftjoin image i on p.product_no = i.image_product_no orderby product_no desc limit 15;
결과
15개의 데이터를 가져오기는 했다… 하지만 이것은 내가 가져오고자 한 데이터의 모든 정보를 가져와 주지않았다. 이렇게 쿼리를 작성해보니 당연한 결과였는데 어떻게 그렇게 단순하게 생각을 한건지 나에게 부끄러움을 느꼈다…
그래서 데이터베이스를 잘아는 분과 구글의 힘을 빌려 원하는 데이터를 가져올 수 있는 방법을 찾던중 postgresql이 orcle의 ROWNUM함수와 같은 기능의 함수를 제공한다는 정보를 통해 쿼리문을 수정하였다.
수정된 sql
1 2 3 4 5 6 7 8 9
select p.product_no, p.product_title, i.image_src from ( selectrow_number() over(orderby a.product_no desc) as rn, a.product_no, a.product_title, a.product_user_no from product a ) as p leftjoin image i on i.image_product_no = p.product_no and i.deleted ='N' where rn <=15 orderby p.product_no desc;
결과
row_number 함수는 가져올 데이터의 갯수를 정하고 해당 값이 변동되지 않고서 정해진 데이터의 집합내에 모든 데이터를 가져와 주는 기능으로 사용하는 함수인듯 하다.
먼저 from절에서 서브쿼리로 데이터의 집합을 정하고 해당 집합의 데이터를 가져왔다.
이 방식을 사용하니 15개의 상품을 정상적으로 가져올수 있었고 이제 이 쿼리를 TypeOrm으로 가져가서 사용하면 될듯하다..
데이터베이스도 공부를 놓으면 안된다는걸 느끼는 과정이였다…