딸기말차
[MSA] 6. Docker 활용, SQL 예제 본문
엔코아 플레이데이터(Encore Playdata) Backend 2기 백엔드 개발 부트캠프 (playdata.io)
백엔드 개발 부트캠프
백엔드 기초부터 배포까지! 매력있는 백엔드 개발자 포트폴리오를 완성하여 취업하세요.
playdata.io
1. 도커 컨테이너 및 이미지 삭제
# 이미지 삭제
docker rmi [이미지ID]
# 컨테이너가 있는 이미지 삭제
docker rmi -f [이미지ID]
* 컨테이너가 실행중인 이미지는 바로 삭제가 안되기 때문에, -f 키워드를 사용해야한다.
# 컨테이너 ID 가져오기
docker ps -a -q
# 모든 도커 컨테이너 정지
docker stop $(docker ps -a -q)
# 모든 도커 컨테이너 삭제
docker rm $(docker ps -a -q)
# dangling image 확인
docker images -f dangling=true
컨테이너가 사용중인 이미지를 docker rmi -f를 통해 강제로 삭제하면, 이미지의 이름이 <none>으로 변경된다.
이렇게 된 이미지를 dangling image 라고 한다.
# 사용중이지 않은 dangling image 한번에 삭제
docker image prune [옵션]
2. Maven Build
# mvnw 가 있는 패키지로 이동
# mvn을 통해 jar 파일 생성
./mvnw clean package
# mvn을 통해 docker image build
./mvnw package dockerfile:build
# 생성한 image를 통해 컨테이너 생성, 실행
docker run -d -p 9002:8080 ostock/licensing-service:0.0.1-SNAPSHOT
3. SQL 예제
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 |