각종 후기/우아한테크코스

[우아한 테크코스 3기] LEVEL 1 회고 (57일차)

제이온 (Jayon) 2021. 3. 30.

안녕하세요? 제이온입니다.

 

오늘은 오프라인으로 루터회관에서 교육을 진행했습니다. 전반적으로 데이터베이스를 올인한 날이었습니다.

 

 

데일리 미팅

오늘의 데일리 미팅 진행자는 마갸였습니다. 마갸는 '프로그래밍의 목적이나 만들고 싶은 프로그램'에 대해서 대화를 나누자고 제안했습니다. 절반 정도는 뚜렷한 목표가 있었으나, 나머지 크루들은 추상적으로 사회에 기여하는 프로그램을 개발하고 싶다고 답했습니다.

 

저는 원래 주식에 관심이 있고, 우테코에 들어오기 전까지는 주식 자동 매매 프로그램을 만들었습니다. 그래서 우테코 수료 이후에는 여기서 배운 지식을 잘 곁들여서 완성된 웹 어플리케이션을 만들 계획이라고 말했습니다.

 

 

SQL 퀴즈

오전에는 간단하게 service 객체를 만들어서 기존에 컨트롤러에서 move, end, result와 같은 로직을 위임했습니다. 그리고 결과 이후 재시작을 할 때, 게임 정보가 초기화되지 않는 문제를 일단은 해결했습니다. 방식은 service 필드 내의 ChessGame 객체를 만들고, 게임이 끝났을 때 해당 객체를 재할당하는 것이었죠. 물론, DB 도입 이후 리팩토링할 부분이긴 합니다.

 

점심 이후에는 SQL 퀴즈를 진행했는데, 전반적인 SQL 문법을 익히는 유익한 시간이었습니다. 퀴즈 3문제는 모두 join을 잘 이해하면 풀 수 있는 문제들이었고, 다행히 저녁 전까지 끝낼 수 있었습니다. 퀴즈의 실습 링크는 이곳이며, 문제는 아래와 같습니다.

 

 

 

 

답안은 각각 다음과 같습니다.

 

 

// 1번
SELECT Products.ProductID, Products.ProductName, SUM(OrderDetails.Quantity) AS '총수량'
FROM OrderDetails LEFT JOIN Products ON OrderDetails.ProductID = Products.ProductID
GROUP BY Products.ProductID
HAVING SUM(OrderDetails.Quantity) >= 200
ORDER BY SUM(OrderDetails.Quantity) DESC;

// 2번
SELECT Customers.CustomerID AS '고객아이디', Customers.CustomerName AS '고객이름', SUM(OrderDetails.Quantity) AS '주문량'
FROM (Orders LEFT JOIN Customers ON Orders.CustomerID = Customers.CustomerID) RIGHT JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID
GROUP BY Customers.CustomerID
ORDER BY SUM(OrderDetails.Quantity) DESC

// 3번
SELECT Customers.CustomerID AS '고객아이디', Customers.CustomerName AS '고객이름', SUM(Products.Price * OrderDetails.Quantity) AS '지출금액'
FROM ((Orders LEFT JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
RIGHT JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID)
Left JOIN Products ON OrderDetails.ProductID = Products.ProductID
GROUP BY Customers.CustomerID
ORDER BY SUM(Products.Price * OrderDetails.Quantity) DESC;

 

 

다양한 답이 존재할 수 있는데, 개인적으로는 Join을 중첩하여 답안을 작성하는 것이 편했습니다.

 

 

체스 5단계

체스 5단계는 웹 서버를 재시작하더라도 이전에 하던 체스 게임을 재시작할 수 있도록 해야 합니다.

 

 

 

 

선택 요구 사항도 있지만, 우선은 필수 요구 사항부터 구현하고 오늘이나 내일 중으로 pr을 날리자고 계획했습니다. 하지만, 오늘 생각보다 DAO를 만드는 작업이 쉽지 않았습니다. 그래서 오늘은 JDBC를 이용하여 어떤 식으로 CRUD를 구현하는지 예제를 통해 학습만 하였습니다.

 

내일은 어떤 데이터를 저장할지 테이블을 정의하고, 그에 맞는 DAO를 만들어서 5단계 필수 요구 사항을 꼭 구현하려고 합니다.

 

 

정리

오늘도 거의 처음이었던 SQL과 DB를 하느라 많이 고생했습니다. 다행히, 그 중 하나인 SQL 퀴즈를 모두 성공적으로 해결해서 만족합니다. 다음 주는 방학인데, 빠르게 체스 미션을 구현해서 리뷰어님의 피드백을 한 번이라도 받았으면 좋겠습니다.

댓글

추천 글