# 2주차 (ERD와 화면 설계)

exERD 프로그램을 사용해서 직접 ERD를 설계해보고 상황을 가정하여 쿼리문을 작성해보는 연습을 화요일까지 하였다. 그리고 수요일부터 갑자기 프로젝트 팀 편성(SCM, ERP)을 하였고, 프로젝트를 시작하게 되었다.

팀장님이 나눠주신 기본 골격 코드를 설명을 해주시긴 했지만 설명이 논리적으로 되어있지도 않았고 중간 중간의 코드를 해석해주셔서 오히려 더 헷갈려서 따로 코드를 분석하는 게 나을 것 같다고 생각했다.

팀원들과 어떤 산출물들을 만들 것인지 이야기와 '화면설계' 산출물을 만들기 위해 '발사믹' 프로그램을 사용해서 각자의 페이지 분담을 진행하였다.

# ERD(Entity Relationship Diagram)

ERD예제

# ERD를 가지고 연습한 Query문

  1. 특정기간 동안 구매를 제일 많이한 5명
SELECT ci.custum_name
FROM tb_custom_info ci
INNER JOIN (
              SELECT custum_cd,
                     DATE_FORMAT(buy_date, '%Y.%m.%d') AS buy_date
              FROM tb_sell
            ) ll ON ci.custum_cd = ll.custum_cd
WHERE ll.buy_date BETWEEN '2018.09.11' AND '2018.10.11'
ORDER BY ci.buy_cnt DESC
LIMIT 5;
  1. 특정기간 동안 총 매출액과 총 발주액을 뽑아 손익 금액 구하기
SELECT s.tot_amt
			,o.tot_order_amt
			,(s.tot_amt - o.tot_order_amt) as profit_and_loss
FROM (
        SELECT goods_cd, SUM(amt) as tot_amt
        FROM tb_sell
        WHERE buy_date BETWEEN '20180911' AND '20181111'
      ) s
INNER JOIN (
              SELECT goods_cd, SUM(order_amt) as tot_order_amt
              FROM tb_order
              WHERE order_date BETWEEN '20180911' AND '20181111'
            ) o ON s.goods_cd = o.goods_cd
  1. 제일 많이 팔린 상품 TOP 3
SELECT gi.goods_name, COUNT(gi.goods_name) as cnt
FROM tb_sell s
INNER JOIN tb_goods_info gi ON s.goods_cd = gi.goods_cd
GROUP BY gi.goods_name
ORDER BY cnt DESC
LIMIT 3;
  1. 매출 순위 가장 높은 TOP 3 지점명
SELECT s.amt
FROM (
        SELECT chain_cd, SUM(amt) as amt
        FROM tb_sell
        GROUP BY chain_cd
      ) s,
      (
        SELECT chain_cd, chain_name
        FROM tb_chain
      ) c
WHERE s.chain_cd = c.chain_cd
ORDER BY s.amt DESC
LIMIT 3;
  1. 쿠폰 발행을 가장 많이 한 회원 TOP 5
SELECT ci.custom_name
FROM tb_custom_info ci, (
                          SELECT custum_cd, COUNT(custum_cd) AS cnt
                          FROM tb_coupon_history
                          GROUP BY custum_cd
                        ) ll
WHERE ci.custum_id = ll.custum_id
ORDER BY cnt DESC
LIMIT 5;

# MVC

Model, View, Controller의 줄임말로써 S/W디자인을 세가지 요소로 개발하는 것을 말한다.

  1. Model

    • 프로그램의 내부 상태, 즉 프로그램의 정보를 말한다.
    • 데이터 관리?
    • DB에 접근 할 변수들 (Getter setter)
    • 접근은 DAO를 사용
  2. Controller

    • 데이터와 비즈니스 로직 간의 상호작용을 뜻함.
    • 데이터 핸들링?
    • 어떻게 데이터를 사용하고 건네어줄건지?
    • 주소 핸들링
  3. View

    • 사용자 인터페이스 요소를 뜻하며
    • 쉽게말해서 유저에게 보여지는 부분이다
    • JSP

# MVC1

  • JSP페이지에 비즈니스 로직과 웹 브라우저에 보여줄 결과를 위한 코드가 뒤섞여 있는 구조.
  • JSP안에서 모든 정보를 View하고 저장(Model)하고 처리(Control)되므로 유지보수하기가 힘들다.
  • 페이지가 단순하다면 MVC2보다 1이 더 편할 경우가 있다.

# MVC2

MVC1 구조와 달리 웹 브라우저의 요청을 하나의 서블릿이 받게된다. 서블릿은 웹 브라우저의 요청을 알맞게 처리한 후 결과를 JSP페이지로 포워딩해준다.

  • Servlet
    • 서버에서 웹페이지 등을 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바로 작성된 프로그램
    • .java가 확장자
    • 자바코드 안에 HTML태그가 삽입되어있다.
    • 기본적으로 자바에 대한 지식이 필요하다.
  • JSP
    • 반대로 HTML내부에 자바코드를 삽입하는 형식이다.
    • Java Server Page의 준말이며 서블릿 기반의 서버 스크립트 기술이다.
    • <% %> 태그안에 자바 코드를 사용할 수 있음.

각 역할을 나누어 JSP와 서블릿을 동시에 사용하여 개발하는것이 MVC2 특징. 그리하여 JSP는 HTML태그 사용이 편한대신 자바코드 작성이 불편하기 때문에 주로 View단에서 사용한다. Servlet은 자바코드 작성이 편리하기 때문에 Controller단에서 사용한다.

두 줄 요약

  • 보여주는 HTML이 중심인 View는 - JSP
  • 다른 자바 클래스에게 데이터를 넘겨주는 역할은 Controller - Servlet
Last Updated: 8/4/2021, 1:21:06 AM