study_log blog

2022년 2학기 과제로 Embedded SQL을 수행한 결과물이다.

파이썬 및 웹에서 MySQL을 활용해 데이터베이스를 연동할 수 있도록 했다.

카페 운영을 위한 프로그램을 기획하여 제작하였고

table은 4개, 각각 데이터는 10개 이상으로 작성했다.

 

**3일만에 완성한 과제로 SQL에 대한 지식이 충분치 않아 결과물이 미숙할 수 있습니다**

 

ESQL-파이썬-웹-로고

 

 

 

High Level Language 1개와 Web 언어를 선택해서 수행하는 과제였는데,

나는 Python과 Php를 선택해서 제작했다. (Java와 JSP를 사용하는 사람들도 많았음)

 


기획

 

주제로는 카페 관리 시스템을 만들기로 했다.

채점 기준에는 크게 2가지가 있었는데, 다음과 같다.

  1. 테이블을 4개 이상 만들고, 각 테이블에 key값과 10개 이상의 data 필요
  2. 전체 4개 테이블을 Join하는 내용이 포함되어야 함(즉, 3중 Join이 필요함)

 

그래서 만들게 된 테이블은 총 4개로,

각각 재고 관리 테이블, 메뉴 관리 테이블, 주문 관리 테이블, 고객 평가 테이블이다.

각각의 테이블과 data는 다음과 같다.

 

Stock

SNUM SNAME SCOST SQTY
S1 CostaRicaBean(g) 300000 6000
S2 BrazilBean(g) 280000 5000
S3 GuatemalaBean(g) 330000 5000
S4 EthiopiaBean(g) 350000 6000
S5 PeruBean(g) 260000 4000
S6 Milk(ml) 125000 50000
S7 Cup 370000 10000
S8 ColdCup 440000 10000
S9 Spoon 55000 500
S10 Straw 45000 10000
S11 ChocolateSyrup(g) 90000 9000

좌측부터 고유번호 - 재료명 - 재고량 - 개수이다.

전부 NOT NULL로 설정, SNUM과 SNAME은

varchar(10), varchar(20)으로 설정하고 나머지는 int로 설정하였다.

또한, SNUM을 PRIMARY KEY로 설정하였다.

 

Menu

MNUM MNAME SNUM MCOST
M1 Americano S3 2000
M2 Latte S6 2500
M3 Mocha S1 3000
M4 Espresso S2 1500
M5 Cappuccino S4 3000
M6 Macchiato S3 3000
M7 ColdBrew S5 3000
M8 MilkShake S6 3500
M9 Apoccatto S6 4000
M10 Chocolate S11 3000

좌측부터 고유번호 - 메뉴명 - 사용된 재료의 고유번호 - 가격이다.

전부 NOT NULL로 설정, MCOST는 int로 설정하고 나머지는 varchar(10)으로 설정하였다.

또한, MNUM을 PRIMARY KEY로 설정하고 SNUM을 FOREIGN KEY로 설정하였다.

 

Order

ONUM MNUM OTAKE OHOTCOLD
O1 M5 Yes Cold
O2 M4 No Hot
O3 M7 Yes Cold
O4 M9 No Cold
O5 M3 No Cold
O6 M2 No Hot
O7 M1 Yes Hot
O8 M1 No Cold
O9 M2 Yes Hot
O10 M1 Yes Cold
주문 고유번호 - 주문된 메뉴의 고유번호 - 테이크아웃 여부 - 해당 메뉴의 온도

 

전부 NOT NULL에 varchar(10)으로 설정하였다.

또한, ONUM을 PRIMARY KEY로, MNUM을 FOREIGN KEY로 설정했다.

 

Review

RNUM RSCORE RDATE ONUM MNUM SNUM
R1 5.0 2022-05-05 O5 M3 S1
R2 4.0 2022-05-06 O7 M1 S3
R3 4.0 2022-05-06 O8 M1 S3
R4 5.0 2022-05-07 O4 M9 S6
R5 2.5 2022-05-07 O1 M5 S4
R6 3.0 2022-05-08 O2 M4 S2
R7 4.0 2022-05-10 O3 M7 S5
R8 5.0 2022-05-13 O9 M2 S6
R9 5.0 2022-05-13 O10 M1 S3
R10 3.0 2022-05-13 O6 M2 S6

좌측부터 후기 고유번호 - 점수 - 등록날짜 - 주문의 고유번호 -

해당 메뉴의 고유번호 - 사용된 재료의 고유번호이다.

전부 NOT NULL로 설정,  RSCORE는 float(2,1)로,

RDATE는 data로 설정한 뒤 나머지는 varchar(10)으로 설정한다.

RNUM을 PRIMARY KEY로 설정하고

ONUM, MNUM, SNUM을 FOREIGN KEY로 설정한다.

 

급히 만드느라 실용성을 고려하지는 못했다.

원래는 Order 테이블에서 MNUM도 여러 개 설정하고,

Review 테이블에서 개인 의견도 적을 수 있도록 하려 했으나

시간 부족으로 추가 수정하지는 못했다.

 

 


개발 시 고려한 사항들

 

1. Python : tkinter와 pymysql 사용

검색해 보니 tkinter를 많이 사용하는 것 같길래 급하게 배워서 사용했다.

Java를 배웠다면 활용하기 어렵지는 않을 것이다. 거의 유사함.

어차피 SQL서버 접속하는 것은 pymysql을 따로 사용하니까 사실 다른 GUI framework를 써도 상관없을 것 같다.

 

pymysql을 사용하는 이유는 설치가 가장 쉽기 때문이다.

https://yurimkoo.github.io/python/2019/09/14/connect-db-with-python.html

위 링크를 활용해서 모듈 설치 및 활용을 시도해보면 좋을 것 같다.

 

 

파이썬 구현에서 고려한 사항은 다음과 같다.

  1. 메인 창에서 버튼을 누르면 각 테이블 관리를 위한 창이 뜨게 할 것
  2. 각 테이블 관리 창에서는 INSERT, DELETE, UPDATE 기능이 가능하게 할 것
  3. 각 기능에 대한 예외 처리를 구현할 것
  4. 4개 테이블에 대한 JOIN 연산이 들어간 창을 만들 것

구현 중 추가로 고려한 사항은 다음과 같다.

  1. 버튼이 3개인 것이 비율상 좋지 않아 보여서 해당 창을 종료하는 QUIT 버튼을 추가했다.
  2. 창이 뜨는 위치가 적당히 가운데가 될 수 있도록 조정하고, 네 개의 테이블 관리 창을 한 번에 띄울 수도 있는 경우를 고려해 적당히 데이터가 잘 보일 수 있도록 위치를 조정했다.
  3. 각 버튼, 글자 등의 디자인 요소는 눈에 잘 보일 수 있도록 색상을 조정하였다.
  4. 입력 후 버튼을 누른 경우 해당하는 쿼리가 제대로 수행되었는지 아닌지를 확인하고자 메세지 박스를 띄우도록 했다.
  5. UPDATE 쿼리의 경우 조건 및 변경할 내용이 제대로 구분되어야 한다고 생각해서 새 창을 띄우도록 했다.
  6. JOIN 연산은 시간이 부족하니 단순 SELECT 쿼리에 활용하기로 했다. RNUM을 기준으로 RDATE, SNAME, MNAME, OTAKE, OHOTCOLD를 확인할 수 있는 창을 새로 띄우도록 했다. 메인 페이지에서 버튼을 누를 때 뜨도록 설정했다.

다음 링크의 코드를 참조하였다.

https://engplay.tistory.com/category/IT%20%26%20%EC%9D%B8%ED%84%B0%EB%84%B7

 

'IT & 인터넷' 카테고리의 글 목록

베이킹과 다양한 요리를 좋아하고, 영어학습에 관심 많은 블로거 입니다 :)

engplay.tistory.com

 

파이썬-ESQL-캡쳐-1
파이썬 결과물 샘플 1
파이썬-ESQL-캡쳐-2
파이썬 결과물 샘플 2

2. Web : php 사용

html은 배웠었는데, php는 배우지 않아서 노베이스 상태에서 시작했다.

사실 아직까지도 뭐가 뭔지는 정확히 모르겠다

어차피 거의 html + css에다가 php는 SQL 접속 시에만 사용하므로 어렵진 않았다.

 

아파치 서버를 설치해서 사용했다.

https://loy124.tistory.com/302

 

WAMP 설치하기 및 php 실행해보기

bitnami wamp를 사용해서 php를 사용할 웹 서버를 구축하기로 하였다 bitnami.com/stack/wamp/installer Install WAMP, Download WAMP show MD5 2546fbf796a57704538f9695e1701527 SHA1 00e63a4a67e7e2bf22d47e141..

loy124.tistory.com

위 링크를 사용해서 WAMP를 설치하고 시도해보면 좋을 것 같다.

 

php 구현 시 고려한 사항은 다음과 같다.

  1. python에서 구현한 요소들이 전부 웹 상에 표현될 수 있도록 만들 것

구현 중 추가로 고려한 사항은 다음과 같다.

  1. 구글 폰트 중 나눔명조를 활용하여 디자인적 요소를 추가했다. 
  2. 각 기능을 수행하기 위한 입력 칸에 placeholder를 통해 예시를 만들어 두었다.
  3. UPDATE 쿼리를 수행하기 위해서 파이썬에서는 새 창을 띄우도록 했는데, 웹에서도 똑같이 하면 번거로울 듯 싶어서 미리 안내 문구를 만들어 두어 동일한 입력 칸을 사용할 수 있도록 했다.
  4. ORDER 칸을 만들어서, INSERT, DELETE, UPDATE 중 하나를 선택해 SEND하면 쿼리문을 수행하도록 구성했다.
  5. 메세지 박스 대신 새 창을 열어 해당 쿼리가 성공했는지 실패했는지 파악할 수 있도록 했고, 이전 페이지로 돌아가기 하이퍼링크를 누르면 돌아감과 동시에 변경사항이 적용될 수 있도록 했다.

다음 링크의 코드를 참조하였다.

https://www.codingfactory.net/11405#i-6

 

PHP / MariaDB / 데이터베이스 값 가져와서 출력하기

이 강좌에서 사용하는 데이터베이스는 employees입니다. (employees 설치 하기) employees 출력하기 employees 테이블에는 직원 목록이 있습니다. 그 목록을 가져와서 출력해보겠습니다. 데이터베이스 연

www.codingfactory.net

https://url.kr/m8fjg3

 

PHP 변수 전달 / PHP 자료 넘기기 / HTML 자료 넘기기 / POST, GET 방식 차이 / PHP 기초, HTML 기초

PHP 변수 전달 !! PHP페이지에서 다른 PHP페이지로 자료를 넘기는 방법은 2가지가 있습니다. 1. POST 방식 2. GET방식 POST방식은 주소표시줄에 값이 노출되지 않고, GET방식은 주소표시줄에 값이 노출된

manniz.tistory.com

 
웹-ESQL-캡쳐-1
웹 결과물 샘플 1
웹-ESQL-캡쳐-2
웹 결과물 샘플 2
웹-ESQL-캡쳐-3
웹 결과물 샘플 3

 

 

 

결과물과 코드는 다음 글에서 확인할 수 있다.

2022.06.21 - [coding] - MySQL 웹 및 Python에서 사용하기(ESQL) 2 : Python

 

MySQL 웹 및 Python에서 사용하기(ESQL) 2 : Python

2022년 2학기 과제로 Embedded SQL을 수행한 결과물이다. **3일만에 완성한 과제로 SQL에 대한 지식이 충분치 않아 결과물이 미숙할 수 있습니다** 맨 위부터 Python, SQL(테이블 제작 및 데이터 입력 관련

seeya-study.tistory.com

2022.06.22 - [coding] - MySQL 웹 및 Python에서 사용하기(ESQL) 3 : Php

 

MySQL 웹 및 Python에서 사용하기(ESQL) 3 : Php

2022년 2학기 과제로 Embedded SQL을 수행한 결과물이다. **3일만에 완성한 과제로 SQL에 대한 지식이 충분치 않아 결과물이 미숙할 수 있습니다** 맨 위부터 Php, SQL(테이블 제작 및 데이터 입력 관련 파

seeya-study.tistory.com