딸기말차

[MSA] 6. Docker 활용, SQL 예제 본문

Bootcamp/MSA

[MSA] 6. Docker 활용, SQL 예제

딸기말차 2023. 10. 12. 11:09

엔코아 플레이데이터(Encore Playdata) Backend 2기 백엔드 개발 부트캠프 (playdata.io)

 

백엔드 개발 부트캠프

백엔드 기초부터 배포까지! 매력있는 백엔드 개발자 포트폴리오를 완성하여 취업하세요.

playdata.io


1. 도커 컨테이너 및 이미지 삭제

# 이미지 삭제
docker rmi [이미지ID]

docker image 삭제

# 컨테이너가 있는 이미지 삭제
docker rmi -f [이미지ID]

* 컨테이너가 실행중인 이미지는 바로 삭제가 안되기 때문에, -f 키워드를 사용해야한다.

컨테이너가 있는 image 삭제

# 컨테이너 ID 가져오기
docker ps -a -q

도커 컨테이너 id만 삭제

# 모든 도커 컨테이너 정지
docker stop $(docker ps -a -q)

# 모든 도커 컨테이너 삭제
docker rm $(docker ps -a -q)

실행중인 모든 컨테이너 stop

# dangling image 확인
docker images -f dangling=true

danling image

컨테이너가 사용중인 이미지를 docker rmi -f를 통해 강제로 삭제하면, 이미지의 이름이 <none>으로 변경된다.

이렇게 된 이미지를 dangling image 라고 한다.

# 사용중이지 않은 dangling image 한번에 삭제
docker image prune [옵션]

<none> 상태의 image 확인

 

dangling image 삭제

 

지워진 것 확인


2.  Maven Build

# mvnw 가 있는 패키지로 이동

mvn을 빌드하기 위해 이동

# mvn을 통해 jar 파일 생성
./mvnw clean package

mvn build

# mvn을 통해 docker image build
./mvnw package dockerfile:build

mvn을 통해 docker image 파일 build

# 생성한 image를 통해 컨테이너 생성, 실행
docker run -d -p 9002:8080 ostock/licensing-service:0.0.1-SNAPSHOT

docker 실행


3. SQL 예제

예제 ERD

1. products 상품의 개수 ?

SELECT COUNT(*) AS productsCount FROM products;

결과값

2. payments의 amount의 총합과 checknumber 개수 ?

SELECT SUM(amount) AS amountSum, COUNT(checknumber) AS checknumberCount FROM payments;

결과값

3. orderdetails의 ordernumber의 유일한 값의 개수 ?

SELECT COUNT(DISTINCT(ordernumber)) AS ordernumberCount FROM orderdetails;

결과값

4. orderdetails의 priceeach가 30에서 50사이 데이터 ?

SELECT * FROM orderdetails WHERE priceeach BETWEEN 30 and 50;

결과값

5. priceeach가 30 이상인 데이터 ?

SELECT * FROM orderdetails WHERE priceeach >= 30;

결과값

6. customer의 country가 USA 또는 Canada인 customernumber 조회

SELECT customernumber FROM customers WHERE country IN ('USA', 'Canada')

결과값

7. 6번의 나라가 아닌 customernumber 조회 

SELECT customernumber FROM customers WHERE country NOT IN ('USA', 'Canada')

결과값

8. employees의 reportsTo의 값이 NULL인 employeenumber 조회

SELECT employeenumber FROM employees WHERE reportsTo IS NULL;

결과값

9. customers의 addressline1에 ST가 포함된 addressline1을 출력

SELECT employeenumber FROM employees WHERE reportsTo IS NULL;

결과값

10. customers 테이블을 사용하여 국가, 도시별 고객 수 ?

SELECT COUNT(*) AS groupCount, country, city FROM customers GROUP BY country, city;

결과값

11. customers 테이블을 이용해 USA 거주자의 수를 계산하고 그 비중을 계산 

SELECT 
SUM(CASE WHEN country='USA' THEN 1 ELSE 0 END) AS n_usa,
SUM(CASE WHEN country='USA' THEN 1 ELSE 0 END) / COUNT(*) percent
FROM customers;

결과값

12. customers, orders 테이블을 이용해 USA 거주자의 OrderNumber, Country를 출력 

SELECT o.orderNumber, c.country 
FROM customers AS c LEFT JOIN orders AS o ON c.customerNumber=o.customerNumber
WHERE c.country='USA'

결과값

13. 내부 조인(inner join)을 사용하여 customers, orders 테이블 사용하여 usa거주자의 주문번호(customerNumber), 국가(country)를 출력 

SELECT c.customerNumber, c.country 
FROM customers AS c INNER JOIN orders AS o ON c.customerNumber=o.customerNumber 
WHERE c.country='USA'

결과값


4. 53일차 후기

이전에는 gradle로 구성 된 프로젝트를 build하여 도커 이미지를 만들었지만, 이번 시간에는 maven을 통해 도커 이미지를 생성해 보았다.

이를 통해 기본적으로 maven과 gradle은 빌드를 위한 도구라는 공통점이 있기 때문에, 키워드는 다르지만 동일하게 jar 파일이 만들어진다는 것을 확인하였다.

 

또한 주어진 테이블을 통해 SQL을 직접 짜보는 예제를 진행하였는데, 프로젝트 때는 ORM을 사용하였기 때문에 직접 SQL을 작성할 일이 많지 않았다. 

하지만 ORM으로 작성하는 JPQL은 SQL을 베이스로 만들어진 것이기 때문에, ORM을 잘 사용하려면 SQL의 공부가 필요하다는 생각이 들었다.

'Bootcamp > MSA' 카테고리의 다른 글

[MSA] 8. Config Server, Eureka Server  (0) 2023.10.19
[MSA] 7. Docker 활용, ConfigServer  (0) 2023.10.13
[MSA] 5. Docker 활용, Compose  (0) 2023.10.11
[MSA] 4. Docker 활용, Image Build  (0) 2023.10.10
[MSA] 3. Network  (1) 2023.10.05