[우아한테크코스] 3월 28일 TIL

1 minute read

오늘 배운 것

  1. spark JAVA

sparkJava

  1. 시작
    spring으로 시작해서 build.gradle에 compile "com.sparkjava:spark-core:2.9.3" 추가
    나머지 파일 다 삭제

  2. get
    public class HelloWorld {
     public static void main(String[] args) {
         get("/hello", (req, res) -> "Hello World");
     }
    }
    

    위와 같이 작성하면 http://localhost:4567/hello로 접근 가능

    public class HelloWorld {
     public static void main(String[] args) {
         get("/hello", (req, res) -> "Hello: " + req.params(":name"));
     }
    }
    

    위와 같이 작성하면 hello/hi url로 들어가면 Hello: hi 출력

    return "Hello: " + req.queryParams("name") + "나이: " + req.queryParams("age");
    

    위와 같이 작성하면 ?name=hi&age=24로 url 들어가면 이름 나이 출력

  3. post ```html
이름:
나이:
```java
    post("/hello", (req, res) -> {
        return "post Hello: " + req.queryParams("name") + "나이: " + req.queryParams("age");
    });

get은 url에 ?name=~~ 와 같은 url을 입력해서 전달했다면,
post는 url에 노출하지 않고 서버에서 이동해서 보여주는 것

  1. template engine
    동적으로 화면 만들기 위한 handlebar template engine 적용하기
    html에서 문법은
    이름: 
    <br>
    나이: 
    

    위와 같이 mustache 처럼 적용할 수 있고
    이를 java에서는 아래와 같이 rendering 하여 사용할 수 있다.

     post("/hello", (req, res) -> {
         Map<String, Object> model = new HashMap<>();
         model.put("name", req.queryParams("name"));
         model.put("age", req.queryParams("age"));
    
         return render(model, "result.html");
     });
    
     public static String render(Map<String, Object> model, String templatePath) {
         return new HandlebarsTemplateEngine().render(new ModelAndView(model, templatePath));
     }
    
  2. 여러 명의 사용자 관리하기
    List<User> users = new ArrayList<>();를 선언하고 add해가며 List를 렌더링하여 사용할 수 있다.

SQL 문제

  1. 200개 이상 팔린 상품명과 그 수량을 수량 기준 내림차순으로 보여주세요.
    SELECT OrderDetails.ProductID AS "상품아이디", Products.ProductName AS "상품이름", SUM(OrderDetails.Quantity) AS "총수량" 
    FROM OrderDetails
    INNER JOIN Products ON OrderDetails.ProductID = Products.ProductID
    GROUP BY OrderDetails.ProductID
    HAVING SUM(OrderDetails.Quantity) >= 200
    ORDER BY SUM(OrderDetails.Quantity) DESC;
    
  2. 많이 주문한 순으로 고객 리스트(ID, 고객명)를 구해주세요. (고객별 구매한 물품 총 갯수)
    SELECT customers.CustomerID AS "고객아이디", customers.CustomerName AS "고객이름", SUM(orderDetails.Quantity) AS "주문량"
    FROM Customers customers
    INNER JOIN Orders orders ON customers.CustomerID = orders.CustomerID
    INNER JOIN OrderDetails 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(orderDetails.Quantity * products.Price) AS "지출금액"
    FROM Customers customers
    LEFT JOIN Orders orders ON customers.CustomerID = orders.CustomerID
    LEFT JOIN OrderDetails orderDetails ON orders.OrderID = orderDetails.OrderID
    LEFT JOIN Products products on products.ProductID = orderDetails.ProductID
    GROUP BY customers.CustomerID
    ORDER BY SUM(orderDetails.Quantity * products.Price) DESC;