열심히 끝까지

디바이스 융합 자바(Java) day24 - 웹크롤링+E-martmall과자코너크롤링 본문

디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(수업내용)

디바이스 융합 자바(Java) day24 - 웹크롤링+E-martmall과자코너크롤링

노유림 2022. 7. 14. 19:15

어제 막혀서 못 올린 예제까지 시작!

[7/13]

 

VO=========================

package class05;

public class VO {
	private int eid;
	private String name;
	private int price;
	private int num;
	
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public int getEid() {
		return eid;
	}
	public void setEid(int eid) {
		this.eid = eid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "VO [eid=" + eid + ", name=" + name + ", price=" + price + ", num=" + num + "]";
	}
	
	
}

 

DAO================================

package class05;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class DAO {
	Connection conn;
	PreparedStatement pstmt;
	final String sql_insert="INSERT INTO EMART VALUES((SELECT NVL(MAX(EID),0)+1 FROM EMART),?,?,?)";
	final String sql_selectAll="SELECT * FROM EMART";
	final String sql_selectOne="SELECT * FROM EMART WHERE EID=?";
	final String sql_delete="";
	
	
	public boolean insert(VO vo) {
		conn=JDBCUtil.connect();
		try {
			pstmt=conn.prepareStatement(sql_insert);
			pstmt.setString(1, vo.getName());
			pstmt.setInt(2, vo.getPrice());
			pstmt.setInt(3, vo.getNum());
			pstmt.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}finally {
			JDBCUtil.disconnect(pstmt, conn);
		}
		return true;
	}
	
	// selectAll(VO)
	public ArrayList<VO> selectAll(VO vo){
		ArrayList<VO> datas = new ArrayList<VO>();
		conn=JDBCUtil.connect();
		try {
			pstmt=conn.prepareStatement(sql_selectAll);
			ResultSet rs = pstmt.executeQuery();
			while(rs.next()) {
				VO data = new VO();
				data.setEid(rs.getInt("eid"));
				data.setName(rs.getString("name"));
				data.setPrice(rs.getInt("price"));
				datas.add(data);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			JDBCUtil.disconnect(pstmt, conn);
		}
		return datas;
	}
}

 

Crawling============================================

[고생의 흔적]

1

package class05;

import java.io.IOException;
import java.util.Iterator;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Test01 {
	public static void main(String[] args) {
		
		// 크롤러
		// Jsoup 사용 <- 기본 제공되는 친구가 아니다..
		// 타켓 URL와 연결 -> conn 확보 (DBMS 처럼 connection 확보)
		Document doc = null; // scope 이슈
		final String url = "https://comic.naver.com/index";
		Jsoup.connect(url); // 크롤러 사용 = import 불가
		try {
			doc = Jsoup.connect(url).get();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		// System.out.println(doc); // 시간에 따라 다르게 생긴 html이 탄생할 수 있다. 
		// Jsoup으로 HTML 전체 문서를 받아옴
		
		Elements eles = doc.select("ul > li > div > h6 > a > span"); // output = Elements(요소들)
		// 하나 있을 수도 있고 여러 개 있을 수 있다.
		// System.out.println(eles);
		DAO dao = new DAO();
		Iterator<Element> itr=eles.iterator(); // 제네릭 넣어주면 .text() 사용 가능
		while(itr.hasNext()) {
			// str = str.substring(6);
			// System.out.println(itr.next()); // 요소 자체 출력
			String str = itr.next().text(); // text() 태그를 쓰면 자동으로 떼어준다.
			System.out.println(str);
			VO vo= new VO();
//			vo.setTitle(str);
//			dao.insert(vo);
			
			
		}
		System.out.println("로그 : DB에 저장완료!");
		
//		for(int i=0; i < vo.size(); i++) {
//			
//		}
		
		
	}
}

2

package class05;

import java.io.IOException;
import java.util.Iterator;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Test02 {
	public static void main(String[] args) {
		
		final String url = "https://emart.ssg.com/best/main.ssg?Egnb=best#ajaxmore";
		Document doc = null;
		try {
			doc = Jsoup.connect(url).get(); // document 받아오기
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		DAO dao = new DAO();
//		String idstr = "ul#genreRecommand";
//		String classStr="div.genreRecomInfo2";
		//Elements eles=doc.select(classStr);
		
		// Elements eles=doc.select("ul > li > div > h6 > a > span");
		// System.out.println(eles);
//		Elements eles=doc.select("ul > li > div > div > div > a > em");

//		System.out.println(eles);
		
		
//		String idstr = "ul#best_10";
//		String classStr="div.title";
//		String classStr="em.tx_ko";
		String classStr="div.title > a > em.tx_ko";
//		String price="div.opt_price";
		String price="div.cunit_price > div.opt_price > em.ssg_price";
//		String preview="div.cunit_app > div.rating > span.rate_tx > em";
		
		Elements eles1 = doc.select(classStr);
		Elements eles2 = doc.select(price);
//		Elements eles3 = doc.select(preview);)
		
		Iterator<Element> itr1 = eles1.iterator();
		Iterator<Element> itr2 = eles2.iterator();
//		Iterator<Element> itr3 = eles3.iterator();
		
		while(itr1.hasNext()) {
			
			String name = itr1.next().text();
			System.out.print(name + "\t");
//			String proPrice = itr2.next().text();
//			System.out.println(proPrice);
//			String use = itr3.next().text();
//			System.out.println(use);
			VO vo = new VO();
			vo.setName(name);
//			vo.setPrice(proPrice);
			dao.insert(vo);
			
		}
		System.out.println("로그 : DB에 저장 완료!");
		
		for(VO v:dao.selectAll(null)) {
			System.out.println(v);
		}
	}
}

3

package class05;

import java.io.IOException;
import java.util.Iterator;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Test3 {
	public static void main(String[] args) {
		final String url = "https://emart.ssg.com/best/main.ssg?Egnb=best#ajaxmore";
		Document doc = null;
		try {
			doc = Jsoup.connect(url).get(); // document 받아오기
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		DAO dao = new DAO();
		String classStr= "div.title > a > em.tx_ko";
		String price="div.cunit_price > div.opt_price > em.ssg_price";
		String preview="div.cunit_app > div.rating > span.rate_tx";

		
		Elements eles1 = doc.select(classStr);
		Elements eles2 = doc.select(price);
		Elements eles3 = doc.select(preview);
		
		Iterator<Element> itr1 = eles1.iterator();
		Iterator<Element> itr2 = eles2.iterator();
		Iterator<Element> itr3 = eles3.iterator();

		
		while(itr1.hasNext()) {
			
			String name = itr1.next().text();
			System.out.print(name + "\t");
			String proPrice = itr2.next().text();
//			System.out.println(proPrice);
			String use = itr3.next().text();
//			System.out.println(use);
			VO vo = new VO();
			vo.setName(name);
			vo.setPrice(Integer.parseInt(proPrice.replaceAll("[^0-9]","")));
			dao.insert(vo);
			
		}
		System.out.println("로그 : DB에 저장 완료!");
		
		for(VO v:dao.selectAll(null)) {
			System.out.println(v);
		}
	}
}

 

[7/14]  최종정리==============================

EMART 과자코너 정리하기

 

EmartVO=======================

package model;

public class EmartVO {
	private int eid;
	private String name;
	private int price;
	private float score;
	private int num;
	
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public int getEid() {
		return eid;
	}
	public void setEid(int eid) {
		this.eid = eid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	public float getScore() {
		return score;
	}
	public void setScore(float score) {
		this.score = score;
	}
	@Override
	public String toString() {
		return eid + " 상품 이름 :" + name + ", 가격 : " + price + ", 별점 : " + score + ", 리뷰개수 : " + num;
	}

}

EmartDAO=======================

package model;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class EmartDAO {
	Connection conn;
	PreparedStatement pstmt;
	final String sql_insert="INSERT INTO EMART VALUES((SELECT NVL(MAX(EID),0)+1 FROM EMART),?,?,?,?)";
	final String sql_selectAll ="SELECT * FROM EMART WHERE NAME LIKE '%'||?||'%' ORDER BY EID ASC";
	final String sql_selectOne="SELECT * FROM EMART WHERE EID=?";
	final String sql_delete="DELETE FROM EMART WHERE EID=?";
	final String sql_update="UPDATE EMART SET PRICE=? WHERE EID=?";
	final String sql_sample="SELECT COUNT(*) AS CNT FROM EMART";
	
	
	// 데이터 추가
	public boolean insert(EmartVO vo) {
		conn=JDBCUtil.connect(); // JDBC 연결
		try {
			pstmt=conn.prepareStatement(sql_insert); 
			
			pstmt.setString(1, vo.getName()); // 이름
			pstmt.setInt(2, vo.getPrice()); // 가격
			pstmt.setFloat(3, vo.getScore()); // 평점
			pstmt.setInt(4, vo.getNum()); // 리뷰개수
			pstmt.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false; // 값을 못 넣은 것 > 실패로 판단
		}finally {
			JDBCUtil.disconnect(pstmt, conn); // JDBC 연결 해제
		}
		System.out.println("\t로그 : 상품 추가를 완료하였습니다.");
		return true;
	}
	
	// selectAll(VO) 전체 선택
	public ArrayList<EmartVO> selectAll(EmartVO vo){
		ArrayList<EmartVO> datas = new ArrayList<EmartVO>();
		conn=JDBCUtil.connect();
		try {
			pstmt=conn.prepareStatement(sql_selectAll);
			pstmt.setString(1, vo.getName());
			ResultSet rs = pstmt.executeQuery();
			
			while(rs.next()) {
				EmartVO data = new EmartVO();
				
				data.setEid(rs.getInt("EID"));
				data.setName(rs.getString("NAME"));
				data.setPrice(rs.getInt("PRICE"));
				data.setScore(rs.getFloat("SCORE"));
				data.setNum(rs.getInt("CNT"));
				datas.add(data);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			JDBCUtil.disconnect(pstmt, conn);
		}
		return datas;
	}
	
	// 상품 하나만 보이기
	public EmartVO selectOne(EmartVO vo){
		conn=JDBCUtil.connect();
		ResultSet rs = null; // scope 공부
		try {
			pstmt = conn.prepareStatement(sql_selectOne);
			pstmt.setInt(1, vo.getEid());
			rs = pstmt.executeQuery();

			if(rs.next()) {
                vo.setName(rs.getString("NAME"));
                vo.setPrice(rs.getInt("PRICE"));
                vo.setScore(rs.getFloat("SCORE"));
                vo.setNum(rs.getInt("CNT")); 
                // 이놈때문에 고생했습니다... "NUM"으로 되어 있을 줄은..
                // 웃긴건 위에껀 잘 설정해줬다는겁니다;
            }
			
			else {
				return null;
			}
		}catch(SQLException e) {
			e.printStackTrace();
			return null;
		}finally {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			JDBCUtil.disconnect(pstmt, conn);
		}
		return vo;
	}
	
	// 삭제 로직
	public boolean productDelete(EmartVO vo){
		conn=JDBCUtil.connect();
		try {
			pstmt = conn.prepareStatement(sql_delete);
			pstmt.setInt(1, vo.getEid());
			int res = pstmt.executeUpdate();

			if(res == 0) {
				return false;
			}
		}catch(SQLException e) {
			e.printStackTrace();
			return false;
		}finally {
			JDBCUtil.disconnect(pstmt, conn);
		}
		return true;
	}
	
	// 업데이트 로직
	public boolean productUpdate(EmartVO vo){
		conn=JDBCUtil.connect();
		try {
			pstmt = conn.prepareStatement(sql_update);
			pstmt.setInt(2, vo.getEid()); // 값 가져오기 eid
			pstmt.setInt(1, vo.getPrice()); // 값 설정 price
			int res = pstmt.executeUpdate();

			if(res == 0) {
				return false;
			}
		}catch(SQLException e) {
			e.printStackTrace();
			return false;
		}finally {
			JDBCUtil.disconnect(pstmt, conn);
		}
		return true;
	}
	
	// hasSample 로직
	public boolean hasSample(EmartVO vo) {
		conn = JDBCUtil.connect();
		
		try {
			pstmt=conn.prepareStatement(sql_sample);
			ResultSet rs = pstmt.executeQuery();
			rs.next();
			int cnt = rs.getInt("CNT");
			if(cnt>=5) {
				return true;
			}
			return false;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
		finally {
			JDBCUtil.disconnect(pstmt, conn);
		}
		
	}
	
}

EmartView=======================

package view;

import java.util.ArrayList;
import java.util.Scanner;

import model.EmartDAO;
import model.EmartVO;

public class EmartView {

	Scanner sc = new Scanner(System.in);
	EmartVO eVO = new EmartVO();
	EmartDAO eDAO = new EmartDAO();
	public int action;

	// 메인메뉴 로직=====================================
	public void mainmenu() { 
		while(true) {
			System.out.println();
			System.out.println("===이마트 과자코너===");
			System.out.println("   1. 상품 목록");
			System.out.println("   2. 상품 검색");
			System.out.println("   3. 상품 구매 < 점검 예정");
			System.out.println("   4. 종료");
			System.out.println("  [관리자버튼 = 5]");
			System.out.println("==================");
			System.out.print("번호 입력 : ");
			
			try {
				action = sc.nextInt();
				if(action==3) {
					System.out.println("현재 점검중입니다. 다른 서비스를 이용하세요.");
					continue;
				}
				if(action > 0 && action < 6) {
					break;
				}
				System.out.println();
				System.out.println("잘못된 입력입니다. 다시 입력해주세요.");
				continue;
			}catch(Exception e) {
				e.printStackTrace();
				System.out.println();
				System.out.println("잘못된 입력입니다. 다시 입력해주세요.");
				continue;
			}
		}
	}
	
	// 관리자 로직=====================================
	public void adminmenu() {
		while(true) {
			System.out.println();
			System.out.println("===이마트 과자코너 관리자===");
			System.out.println("   1. 상품 삭제");
			System.out.println("   2. 상품 가격 변경");
			System.out.println("   3. 상품 전체 확인");
			System.out.println("   4. 종료");
			System.out.println("=======================");
			System.out.print("번호 입력 : ");
			
			try {
				action = sc.nextInt();
				if(action > 0 && action < 5) {
					break;
				}
				System.out.println();
				System.out.println("잘못된 입력입니다. 다시 입력해주세요.");
				continue;
			}catch(Exception e) {
				e.printStackTrace();
				System.out.println();
				System.out.println("잘못된 입력입니다. 다시 입력해주세요.");
			}
		}
	}
	
	// 상품목록 로직
	public void proList() {
		System.out.println();
		System.out.println("=====상품목록=====");
		EmartVO eVO = new EmartVO();
		ArrayList<EmartVO> datas = eDAO.selectAll(eVO);
		for (EmartVO data : datas) {
			System.out.println(data);
		}
	}
	public void stringPro(int i) {
		EmartVO vo = new EmartVO();
		vo.setEid(i);
		EmartVO data = eDAO.selectOne(vo);
		System.out.println();
		System.out.println("검색결과");
		System.out.println(data);
	}
	
	// 상품 검색 로직
	public void proSearch() {
		System.out.println();
		System.out.println("=====상품 검색=====");
		System.out.print("상품 번호 검색 >> ");
	}
	
	// 상품 구매 로직
	public void buyProduct() {
		System.out.println();
		System.out.println("=====상품 구매=====");
	}
	
	// 상품 삭제 로직
	public void deleteProduct() {
		System.out.println();
		System.out.println("=====상품 삭제=====");
		System.out.print("삭제할 번호 입력 : ");
	}
	
	// 삭제 후 로직
	public void deleteAfter(int i) {
		EmartVO vo = new EmartVO();
		vo.setEid(i);
		
		if(eDAO.productDelete(vo)) {
			System.out.println("성공!");
		}
		else {
			System.out.println("실패...");
		}
	}
	
	// 상품 가격 변경 로직
	public void updateProduct() {
		System.out.println();
		System.out.println("=====상품 변경=====");
		System.out.print("변경할 제품 번호 입력 : ");
	}
	
	public void endMessage() {
		System.out.println();
		System.out.println("프로그램을 종료합니다.");
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	// 가격 변경 로직
	public void changeNum() {
		System.out.print("바꿀 가격 입력 : ");
	}
	
	// 잘못된 번호 입력 시 출력
	public void wrong() {
		System.out.println("잘못된 번호 입력..");
		System.out.println("다시 입력하세요");
	}
	
	// 성공로직
	public void victory() {
		System.out.println("성공!");
	}
	
	// 실패 로직
	public void fail() {
		System.out.println("실패...");
	}
	
	// 정수 입력 로직
	public int inputInt() {
		sc.nextLine();
		int i = sc.nextInt();
		return i;
	}
	
	// 문자열 입력 로직
	public String inputString() {
		sc.nextLine();
		String s = sc.nextLine();
		return s;
	}
	
}

EmartController=======================

package controller;


import model.EmartDAO;
import model.EmartVO;
import view.EmartView;

public class EmartController {
	EmartDAO eDAO;
	EmartView eView;

	public EmartController() {
		eDAO = new EmartDAO();
		eView = new EmartView();
		if(!eDAO.hasSample(null)) {
			EmartTest.sample();
		}
	}
	public void startApp() {
		while(true) {
			eView.mainmenu();
			if(eView.action==1) { // 목록
				eView.proList();
				continue;
			}
			else if(eView.action==2) { // 검색
				eView.proSearch();
				int i = eView.inputInt();
				eView.stringPro(i);
				continue;
			}
			else if(eView.action==3) { // 구매 하지만 지금 업데이트 중
				continue;
			}
			else if(eView.action==4) { // 종료
				eView.endMessage();
				break;
			}
			else {
				appAdmin();
			}



		}
	}
	public void appAdmin() {
		while(true) {
			eView.adminmenu();
			if(eView.action==1) { // 삭제
				eView.deleteProduct();
				int i = 0;
				try {
					i = eView.inputInt();
				}catch(Exception e) {
					eView.wrong();
					continue;
				}
				eView.deleteAfter(i);
				continue;
			}
			else if(eView.action==2) { // 가격 변경
				eView.updateProduct();
				int eid = eView.inputInt();
				eView.changeNum();
				int price = eView.inputInt();
				
				EmartVO vo = new EmartVO();
				vo.setEid(eid);
				vo.setPrice(price);

				if(eDAO.productUpdate(vo)) {
					eView.victory();
				}else {
					eView.fail();
				}
				continue;

			}
			else if(eView.action==3) { // 전체 출력
				eView.proList();
				continue;
			}
			else if(eView.action==4) { // 종료
				eView.endMessage();
				break;
			}
		}
	}

}

EmartTest - 크롤링=======================

package controller;

import java.io.IOException;
import java.util.Iterator;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import model.EmartDAO;
import model.EmartVO;

public class EmartTest {
	public static void sample() {
		// 주소 가져오기
		final String url = "https://emart.ssg.com/category/listCategoryItem.ssg?dispCtgId=6000095859";
		Document doc = null;
		try {
			doc = Jsoup.connect(url).get(); // document 받아오기
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		EmartDAO eDAO = new EmartDAO();
		
		// 이름 가져오기
		//ul#best1 > div.title > a > em.tx_ko 경로 베스트항목
		//ul#food_item_list > li > div > div > div > a > em.tx_ko  경로 BEST항목
		String classStr= "ul.cunit_thmb_lst > li > div > div > div > a > em.tx_ko";
		
		// 가격 가져오기
		//ul#best1 > div.cunit_price > div.opt_price > em.ssg_price
		//ul#food_item_list > li > div > div > div > em.ssg_price
		String price="ul.cunit_thmb_lst > li > div > div > div > em.ssg_price";
		
		// 별점 가져오기
		//ul#best1 > div.cunt_app > div.rating > div.rate_bg > span.blind
		//ul#food_item_list > li > div > div > div > div > span > span.blind
		String score="ul.cunit_thmb_lst > li > div > div > div > div > span > span.blind";
		
		// 리뷰개수
		//ul#best1 > div.cunit_app > div.rating > span.rate_tx
		//ul#food_item_list > li > div > div.cunit_app > div.rating > span.rate_tx > em
		String preview="ul.cunit_thmb_lst > li > div > div.cunit_app > div.rating > span.rate_tx > em";

		
		Elements eles1 = doc.select(classStr); // 이름
		Elements eles2 = doc.select(price); // 가격
		Elements eles3 = doc.select(score); // 점수
		Elements eles4 = doc.select(preview); // 리뷰
		
		Iterator<Element> itr1 = eles1.iterator();
		Iterator<Element> itr2 = eles2.iterator();
		Iterator<Element> itr3 = eles3.iterator();
		Iterator<Element> itr4 = eles4.iterator();

		
		while(itr4.hasNext()) {
			
			String name = itr1.next().text();
//			System.out.print(name + "\t");
			
			String proPrice = itr2.next().text();
//			System.out.print(proPrice+ "\t");
			
			String sScore = itr3.next().text();
//			System.out.print(sScore+"\t");
			
			String use = itr4.next().text();
//			System.out.println(use);
			
			EmartVO eVO = new EmartVO();
			eVO.setName(name);
			eVO.setPrice(Integer.parseInt(proPrice.replaceAll("[^0-9]",""))); // 숫자를 제외한 모든 걸 공백
			eVO.setScore(Float.parseFloat(sScore.replaceAll("[^0-9, .]",""))); // 숫자,.을 제외한 모든 걸 공백
			eVO.setNum(Integer.parseInt(use.replaceAll("[^0-9]",""))); // 숫자를 제외한 모든걸 공백
			eDAO.insert(eVO); // 추가
			
		}
		System.out.println("로그 : DB에 저장 완료!");
		
		for(EmartVO v:eDAO.selectAll(null)) {
			System.out.println(v);
		}
	}
}

Client=======================

package controller;

public class Client {
	public static void main(String[] args) {
		EmartController app = new EmartController();
		app.startApp();
	}
}

SQL문=====================

CREATE TABLE EMART(
  EID INT PRIMARY KEY, -- "번호",
  NAME VARCHAR(200) NOT NULL, --상품 이름
  PRICE INT NOT NULL, ----상품 가격
  SCORE FLOAT, --상품 평점 // 존재하지 않을 수도 있기 때문에 공백도 혀용
  CNT INT --리뷰 개수 // 존재하지 않을 수도 있기 때문에 공백도 혀용
);

SELECT EID AS 번호, NAME AS "상품 이름", PRICE AS 가격, SCORE AS "평점", CNT AS "리뷰 개수" FROM EMART;

DROP TABLE EMART;