"다농"의 두 판 사이의 차이

cdc wiki
이동: 둘러보기, 검색
(이론적 계산 및 시뮬레이션)
(구성원 및 추진체계)
 
(같은 사용자의 중간 판 28개는 보이지 않습니다)
179번째 줄: 179번째 줄:
 
◇ 오광석: 보고서작성 및 정리, Front End, 설계  
 
◇ 오광석: 보고서작성 및 정리, Front End, 설계  
  
◇ 이창용: 프로젝트 제안, 프로토타입
+
◇ 이창용: 프로젝트 제안, 프로토타입, 사업자등록
  
 
◇ 최대은: Web Page Design, Front end, 설계
 
◇ 최대은: Web Page Design, Front end, 설계
248번째 줄: 248번째 줄:
  
 
(2) CORS(교차 출처 리소스 공유; Cross-Origin Resource Sharing)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제입니다. 보안 상의 이유로, 브라우저는 스크립트에서 시작한 교차 출처 HTTP 요청을 제한합니다.
 
(2) CORS(교차 출처 리소스 공유; Cross-Origin Resource Sharing)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제입니다. 보안 상의 이유로, 브라우저는 스크립트에서 시작한 교차 출처 HTTP 요청을 제한합니다.
 +
  
 
(3) 해결책 : 개발환경별 분리
 
(3) 해결책 : 개발환경별 분리
266번째 줄: 267번째 줄:
  
 
===상세설계 내용===
 
===상세설계 내용===
내용
+
 
 +
 
 +
 
 +
'''**DB 설계**'''
 +
 
 +
◇User
 +
    user_id : 이용자 번호, integer, primary key, NOT NULL,
 +
    category : 유저 종류(판매자, 구매자), varchar(10), NOT NULL,
 +
    email :  이메일, varchar(100), NOT NULL
 +
    password : 비밀번호, varchar(255), NOT NULL
 +
    name : 실명, varchar(20), NULL
 +
    zip : 우편번호, varchar(20) NULL
 +
    address : 주소, varchar(255), NULL
 +
    address_detail : 주소상세, varchar(255), NULL
 +
    phone : 전화번호, varchar(255), NULL
 +
    gender : 성별, varchar(255), NULL
 +
    career: 농사경력, varchar(255), NULL
 +
 
 +
◇Wish
 +
    wish_id : 관심목록 번호, integer, primary key, NOT NULL,
 +
    user_id : 이용자 번호, integer, Foreign key, NOT NULL,
 +
    product_ id: 상품 번호, integer, Foreign key, NOT NULL,
 +
 
 +
◇Product
 +
    product_id : 상품 번호, integer, Primary key, NOT NULL,
 +
    buyer_id : 판매자 번호, integer, Foreign key, NOT NULL,
 +
    product_type : 상품 종류', varchar(15), NOT NULL,
 +
    name : 상품 이름, varchar(50), not null
 +
    address : 농작지 주소, varchar(255), not null
 +
    price : 가격, integer, not null
 +
    view_count : 조회수, integer, not null, default=1
 +
    description : 상품설명, text, not null
 +
    image_url : 대표 이미지 url, varchar(500), NOT NULL
 +
    created : 생성시점, DateTime, not null, default=datetime.now
 +
    updated : 갱신시점, DateTime, not null, default=datetime.now
 +
    is_hide : 공개 여부, boolean, not null, default=true
 +
 
 +
    lat : 위도, varchar(50), not null
 +
    lng : 경도, varchar(50), not null
 +
 
 +
 
 +
◇ProductOption
 +
    product_option_id = 상품 옵션 번호, integer, Primary key, NOT NULL,
 +
    product_id : 상품 번호, integer, Foreign key, NOT NULL,
 +
    order : 옵션 순서, 번호, integer, NOT NULL, default=0
 +
    volumn : 용량, varchar(255), not null
 +
    price : 가격, integer, not null
 +
 
 +
    unique index - product_id, order
 +
 
 +
◇Purchase
 +
    purchase_id = 구매내역 번호, integer, Primary key, NOT NULL,
 +
    seller_id = 구매자 번호, integer, Foreign key, NOT NULL,
 +
    product_option_id = 구매옵션 번호, integer, Foreign key, NOT NULL,
 +
    qty = 구매수량, integer, NOT NULL,
 +
    amount = 지불가격, integer, NOT NULL,
 +
    imp_id = 결제모듈의 해당 구매내역 id, varchar(255), null
 +
    merchant_id = 결제번호, varchar(255), null
 +
    type = 결제 수단, varchar(20), not null,
 +
    status = 결제 상태, varchar(30), not null, default='UNPAYMENT'
 +
    created = 결제일시, DateTime, not null, default=datetime.now
 +
 
 +
◇Review
 +
    review_id : 리뷰 번호, integer, Primary key, NOT NULL,
 +
    product_id : 상품 번호, integer, Foreign key, NOT NULL,
 +
    seller_id : 구매자 번호, integer, Foreign key, NOT NULL,
 +
    rating : 별점, integer, not null,
 +
    text : 내용, varchar(500), not null
 +
    created : 작성일시, DateTime, not null, default=datetime.now
 +
 
 +
[[파일:다농_상세설계.png]]
 +
 
 +
 
 +
◇ 크게 세 부분의 모듈로 분리하여 나타냄.
 +
 
 +
◇ 고객 모듈에서 로그인과 회원가입은 카카오톡 등의 API를 활용하여 소셜 로그인 기능을 제공한다.
 +
 
 +
◇ 또한 고객 모듈에서 회원가입과 로그인에 필요한 정보를 서버에서 가지고 있으며 소셜로그인 API도 활용한다.
 +
 
 +
◇ 지도 모듈에서 위치 기반 기능과 필터링 기능을 제공한다.
 +
 
 +
◇ 필터는 품목, 환경적합도, 품목 등이 있다.
 +
 
 +
 
 +
'''**Authentication 구현**'''
 +
 
 +
[[파일:다농_인증구현1.png]]
 +
 
 +
[[파일:다농_인증구현2.png]]
 +
 
 +
[[파일:다농_인증구현3.png]]
  
 
==결과 및 평가==
 
==결과 및 평가==
 
===완료 작품의 소개===
 
===완료 작품의 소개===
 
====프로토타입 사진 혹은 작동 장면====
 
====프로토타입 사진 혹은 작동 장면====
내용
+
 
 +
[[파일:다농_메인페이지.png]]
 +
[[파일:다농_구현1.png]]
 +
[[파일:다농_구현2.png]]
 +
[[파일:다농_구현3.png]]
 +
[[파일:다농_구현4.png]]
 +
[[파일:다농_구현5.png]]
 +
[[파일:다농_구현6.png]]
 +
[[파일:다농_구현7.png]]
 +
[[파일:다농_구현8.png]]
 +
[[파일:다농_구현9.png]]
 +
[[파일:다농_구현10.png]]
 +
[[파일:다농_구현11.png]]
 +
[[파일:다농_배포1.png]]
 +
[[파일:다농_배포2.png]]
 +
 
 
====포스터====
 
====포스터====
내용
+
[[파일:다농_포스터터.png]]
  
 
===관련사업비 내역서===
 
===관련사업비 내역서===
내용
+
 
 +
AWS를 사용하면 1년 서버비를 무료로 쓸 수 있는 옵션이 있다. 개발에 들어간 비용은 소프트웨어 개발이기 때문에 비용요소가 없다. 그래서 사용한 '''비용은 0원'''이다.
  
 
===완료작품의 평가===
 
===완료작품의 평가===
내용
+
 
 +
[[파일:다농_평가.png]]
  
 
===향후계획===
 
===향후계획===
내용
+
 
 +
 
 +
◇ UI를 더 깔끔하게 개선
 +
◇ 모바일 환경에서 UI 배치 개선
 +
◇ 상품 복수등록 가능하도록 개선
 +
 
 +
[애로사항]
 +
 
 +
◇  기존에 흑토람(농촌진흥청 소속) API를 사용하려 했지만 문의 결과, API를 사용하기 위해서는 국가 정보를 활용하는 것이기 때문에 공공기관에 공문을 보내고 심사, 비밀서약서를 작성하는 등의 절차가 필요하여 다른 대안을 알아보게 되었음.
 +
◇  같은 농촌진흥청의 사이트인 ‘농사로’에 알아보고자하는 지역을 입력하면 작물별 토양적성도와 토양검정정보를 알 수 있다는 것을 찾아냄.
 +
◇  기존의 흑토람의 토양지도 대신에 상품 주소에 따른 토양도를 조회한 결과를 python selenium을 이용해 크롤링해서 기재. 여러 가지 토양정보 중에 토양의 적성등급, 경작지 구분과, 배수상태 등을 가져와 상품페이지에 각 수치별 등급을 시각화하여 표현.
 +
◇  원래 구성하려했던 지도로 보는 토양도 조회가 어려워졌지만 주소 값에 따른 토양적합도를 사용해서 토양등급을 사용자들에게 보여줄 수 있게 됨.
 +
◇  개발 완료 후 ‘농사로’ 사이트가 리뉴얼되어서 오류가 발생했다. 재배지를 조회할 수 없게 되어서 조치를 취했다.
  
 
===특허 출원 내용===
 
===특허 출원 내용===
내용
+
내용

2020년 12월 21일 (월) 06:46 기준 최신판

프로젝트 개요

기술개발 과제

국문 : 농수축산물 직거래 웹 플랫폼

영문 : Direct trading web platform for agricultural products

과제 팀명

다농

지도교수

이동희 교수님

개발기간

2020년 9월 ~ 2020년 12월 (총 4개월)

구성원 소개

서울시립대학교 컴퓨터과학부 2012920038 오광석(팀장)

서울시립대학교 컴퓨터과학부 2012920030 송경원

서울시립대학교 컴퓨터과학부 2012920058 최대은

서울시립대학교 컴퓨터과학부 2012920046 이창용

서론

개발 과제의 개요

개발 과제 요약

◇ 온라인 사이트를 활용해 농축수산물 직거래 기능을 구현한다. 
◇ 불투명했던 산지정보를 소비자에게 알려주어 산지 신뢰성을 보장한다. 
◇ 산지정보를 제공하기위해 흙토람에서 제공하는 정보를 API로 활용한다. 
◇ 복잡한 유통과정을 최소화시켜서 유통시간과 비용을 줄인다. 
◇ 소비자에게 농산물의 상세정보를 제공한다. 
◇ 위치정보를 이용한 농산물 검색 기능을 제공한다. 
◇ 재배환경에 따른 상품정보 필터링 기능을 구현한다. 
◇ 거래 및 결제기능을 개발한다. 
◇ 웹 사이트로 구현하여 모바일에서도, pc에서도 접근할 수 있게 한다. 
◇ 회원가입은 카카오톡 등과 연계하여 회원가입할 수 있도록 한다. 
◇ 농가 데이터베이스를 정보화한다.

개발 과제의 배경

[배경]

기존의 농수산물 거래환경은 복잡한 유통구조로 인해 가격이 비싸고, 불투명한 산지정보로 신뢰성이 부족하다.

[효과]

◇ 중간 유통비용 절감

◇ 산지 신뢰성 보장

◇ 공공데이터를 통한 자세하고 투명한 서비스 제공

개발 과제의 목표 및 내용

◇ 번거로운 회원가입절차의 간소화를 위해 카톡연계 가입기능을 구현한다. GPS동의, 본인인증, 산지정보 등의 정보를 수집한다.

◇ 위치기반서비스(핵심목표1) : 산지 직접 선택하여 상품정보/상세필터, 지도화면, 품목분류 를 통해 원하는 정보를 제공한다.

◇ 농가 DB 정보화(핵심목표2) : 산지/상품정보 외부 api 사용한다.

◇ 결제모듈을 구현한다.

관련 기술의 현황

관련 기술의 현황 및 분석(State of art)

  • 전 세계적인 기술현황

◇ 이미 다양한 분야의 거래플랫폼이 존재하므로 필요기술 자체는 고급 기술은 아님.

◇ 다만, 현재 농산물 직거래에 관한 경쟁력 있는 다른 제품이 없다고 판단.


  • 특허조사 및 특허 전략 분석

[특허조사]

◇ 특허정보사이트 이용 http://www.kipris.or.kr/khome/main.jsp

◇ 유사한 등록특허 여러 개 발견

◇ 레시피 콘텐츠 기반 농산물 직거래 네트워크 서비스 제공 방법 (10-1816878), 농작물 직거래 방법(10-1753995) 등 다수.


[특허전략]

◇ 특허 등록공고문에 위치/지도 api, 산지정보 api 등을 활용한다는 문구 검색 불가

◇ API활용을 근거로 특허등록문제 해결


  • 기술 로드맵

◇ 네이버 맵 개발자API / 농촌진흥청 '흙토람' 정보시스템 API 이용

◇ 서버운영, 프레임워크 적용 (Python, Django)

◇ 웹페이지 프로그래밍 (Javascript)

◇ 배포 (AWS)

◇ Github 사용

시장상황에 대한 분석

  • 경쟁제품 조사 비교

◇ 농수야 https://www.nongsooya.com/ - 산지 불명확 - 농가 정보 없음 (상품상세정보 미제공) - 지도기반 서비스 없음

◇ 오아시스 https://www.oasis.co.kr/product/list?categoryId=1 - 산지 불명확 - 농가 정보 부족 (상품상세정보 탭 있으나 데이터 입력X) - 지도기반 서비스 없음

◇ 바로정보 https://www.baroinfo.com/front/M000000000/index.do#homePage - 산지 정보 자세히 제공 - 농가 정보 제공 - 지도기반 서비스 제공 - 산지/농사/상품목록/지도기반 서비스 모두 있으나 온라인 거래 기능 없음


  • 마케팅 전략 제시

◇ 타사와 비교하여 다음과 같은 경쟁력을 홍보한다.

◇ vs 농수야, 오아시스 - 판매자(농가) 회원가입시 농가/산지정보 입력을 통한 농가 신뢰성 향상 (+농가평점기능) - 농촌진흥청 api (토양적성도, 지하수등급) DB제공을 통한 산지 신뢰성 향상 - 지도기반서비스를 통한 구매자 편의 제공

◇ vs 바로정보 - 온라인 거래 기능

개발과제의 기대효과

기술적 기대효과

◇ 지도와 판매 기능을 결합한 공간정보의 활용. 
◇ sns를 활용한 로그인 기능으로 접근성 향상. 
◇ 결제 모듈 구현으로, 직접 서비스 가능. 
◇ 농가 DB 정보화로 빅 데이터로도 활용 가능. 
◇ 외부 사이트에서 API를 제공하지 않더라도 크롤링을 통해 원하는 정보를 얻을 수 있다. 
◇ Naver map API를 활용해 지도정보를 불러들어와 검색 가능하다. 
◇ 로그인 및 회원가입 시 에러체크 기능으로 보안성 및 편의성이 강화되었다.

경제적, 사회적 기대 및 파급효과

◇ 중간 유통비용 절감

◇ 산지 신뢰성 보장

◇ 공공데이터를 통한 자세하고 투명한 서비스 제공

기술개발 일정 및 추진체계

개발 일정

다농 개발일정.png

구성원 및 추진체계

◇ 송경원: Server, DB, 설계

◇ 오광석: 보고서작성 및 정리, Front End, 설계

◇ 이창용: 프로젝트 제안, 프로토타입, 사업자등록

◇ 최대은: Web Page Design, Front end, 설계

설계

설계사양

제품의 요구사항

다농 요구사항.png

설계 사양

◇ F1: PG사 결제연동 서비스 Iamport 사용해서 실제 카드거래가 가능하도록 구성. 
◇ F2: 카카오 API 연계 회원가입
◇ F3: Naver map API 사용 위치조회 및 클러스터링
◇ F4: 농촌진층청 API 이용 토양적성도 공개

개념설계안

[Server]

◇ Programming Language: python 3.6
◇ Framework: django 3.0
◇ Data Base: Maria DB

[Front End]

◇ Programming Language: Javascript, ECMAScript 8
◇ Library: React, Material-UI

[Release]

◇ AWS Git 연동


다농 목적계통도.png


다농 개념설계1.png


다농 개념설계2.png


다농 개념설계3.png

이론적 계산 및 시뮬레이션

2.5.1. Authentication 구현

Authentication(인증)은 타인의 개인정보를 보호하기 위해 웹에서 중요한 절차이다. 인증은 클라이언트 관점에서는 사용자의 로그인, 회원가입과 같이 사용자의 도입 부분이고, 서버 관점에서는 모든 API요청에 대해 사용자를 확인하는 작업이다. 이때 사용자 정보의 임시 저장을 서버상에서 관리하면 세션이고 브라우저의 메모리에서 관리하면 쿠키이다. Danong 서비스는 SPA & Rest API 구성으로 위의 세션, 쿠키 기반 인증이 어려우므로 토큰 기반 인증을 사용하였다.

(1) 기본 과정

1) 유저가 아이디와 비밀번호로 로그인 시도

2) 서버 측에서 해당 계정정보를 검증. 계정정보가 정확하다면 서버 측에서 유저에게 토큰을 발급.

3) 클라이언트 측에서는 전달받은 토큰을 저장해두고 서버에 요청 시, 해당 토큰을 함께 서버에 전달.

4) 서버는 토큰을 검증하고 요청에 응답합니다.


2.5.2. 위협과 대응

(1) CSRF(Cross Stie Request Forgery) : 사이트간 요청 위조

웹 애플리케이션 취약점 중 하나로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 하여 특정 웹페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격방법을 의미한다.
방어 방법 중 가장 간편한 방법은 Referer 체크를 하는 방법이 있다. Referer는 HTTP 헤더에 있는 정보로 해당 요청이 요청된 페이지의 정보를 가지고 있는데 같은 도메인 상에서 요청이 들어오지 않는다면 차단하도록 하는 것이다.


(2) CORS(교차 출처 리소스 공유; Cross-Origin Resource Sharing)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제입니다. 보안 상의 이유로, 브라우저는 스크립트에서 시작한 교차 출처 HTTP 요청을 제한합니다.


(3) 해결책 : 개발환경별 분리

1) development level <develoent.py>

다농 시뮬1.png

CORS, CSRF 전체 허용

2) production level <production.py>

React App이 배포된 S3에서의 요청만 허용

다농 시뮬2.png

상세설계 내용

**DB 설계**

◇User
   user_id : 이용자 번호, integer, primary key, NOT NULL, 
   category : 유저 종류(판매자, 구매자), varchar(10), NOT NULL,
   email :  이메일, varchar(100), NOT NULL
   password : 비밀번호, varchar(255), NOT NULL
   name : 실명, varchar(20), NULL
   zip : 우편번호, varchar(20) NULL
   address : 주소, varchar(255), NULL
   address_detail : 주소상세, varchar(255), NULL
   phone : 전화번호, varchar(255), NULL
   gender : 성별, varchar(255), NULL
   career: 농사경력, varchar(255), NULL
◇Wish
   wish_id : 관심목록 번호, integer, primary key, NOT NULL, 
   user_id : 이용자 번호, integer, Foreign key, NOT NULL, 
   product_ id: 상품 번호, integer, Foreign key, NOT NULL, 
◇Product
   product_id : 상품 번호, integer, Primary key, NOT NULL, 
   buyer_id : 판매자 번호, integer, Foreign key, NOT NULL, 
   product_type : 상품 종류', varchar(15), NOT NULL,
   name : 상품 이름, varchar(50), not null
   address : 농작지 주소, varchar(255), not null
   price : 가격, integer, not null
   view_count : 조회수, integer, not null, default=1
   description : 상품설명, text, not null
   image_url : 대표 이미지 url, varchar(500), NOT NULL
   created : 생성시점, DateTime, not null, default=datetime.now
   updated : 갱신시점, DateTime, not null, default=datetime.now
   is_hide : 공개 여부, boolean, not null, default=true
   lat : 위도, varchar(50), not null 
   lng : 경도, varchar(50), not null 


◇ProductOption
   product_option_id = 상품 옵션 번호, integer, Primary key, NOT NULL, 
   product_id : 상품 번호, integer, Foreign key, NOT NULL, 
   order : 옵션 순서, 번호, integer, NOT NULL, default=0
   volumn : 용량, varchar(255), not null
   price : 가격, integer, not null
   unique index - product_id, order
◇Purchase
   purchase_id = 구매내역 번호, integer, Primary key, NOT NULL, 
   seller_id = 구매자 번호, integer, Foreign key, NOT NULL, 
   product_option_id = 구매옵션 번호, integer, Foreign key, NOT NULL, 
   qty = 구매수량, integer, NOT NULL, 
   amount = 지불가격, integer, NOT NULL, 
   imp_id = 결제모듈의 해당 구매내역 id, varchar(255), null 
   merchant_id = 결제번호, varchar(255), null
   type = 결제 수단, varchar(20), not null,
   status = 결제 상태, varchar(30), not null, default='UNPAYMENT'
   created = 결제일시, DateTime, not null, default=datetime.now
◇Review
   review_id : 리뷰 번호, integer, Primary key, NOT NULL, 
   product_id : 상품 번호, integer, Foreign key, NOT NULL, 
   seller_id : 구매자 번호, integer, Foreign key, NOT NULL, 
   rating : 별점, integer, not null,
   text : 내용, varchar(500), not null
   created : 작성일시, DateTime, not null, default=datetime.now

다농 상세설계.png


◇ 크게 세 부분의 모듈로 분리하여 나타냄.

◇ 고객 모듈에서 로그인과 회원가입은 카카오톡 등의 API를 활용하여 소셜 로그인 기능을 제공한다.

◇ 또한 고객 모듈에서 회원가입과 로그인에 필요한 정보를 서버에서 가지고 있으며 소셜로그인 API도 활용한다.

◇ 지도 모듈에서 위치 기반 기능과 필터링 기능을 제공한다.

◇ 필터는 품목, 환경적합도, 품목 등이 있다.


**Authentication 구현**

다농 인증구현1.png

다농 인증구현2.png

다농 인증구현3.png

결과 및 평가

완료 작품의 소개

프로토타입 사진 혹은 작동 장면

다농 메인페이지.png 다농 구현1.png 다농 구현2.png 다농 구현3.png 다농 구현4.png 다농 구현5.png 다농 구현6.png 다농 구현7.png 다농 구현8.png 다농 구현9.png 다농 구현10.png 다농 구현11.png 다농 배포1.png 다농 배포2.png

포스터

다농 포스터터.png

관련사업비 내역서

AWS를 사용하면 1년 서버비를 무료로 쓸 수 있는 옵션이 있다. 개발에 들어간 비용은 소프트웨어 개발이기 때문에 비용요소가 없다. 그래서 사용한 비용은 0원이다.

완료작품의 평가

다농 평가.png

향후계획

◇ UI를 더 깔끔하게 개선
◇ 모바일 환경에서 UI 배치 개선
◇ 상품 복수등록 가능하도록 개선

[애로사항]

◇   기존에 흑토람(농촌진흥청 소속) API를 사용하려 했지만 문의 결과, API를 사용하기 위해서는 국가 정보를 활용하는 것이기 때문에 공공기관에 공문을 보내고 심사, 비밀서약서를 작성하는 등의 절차가 필요하여 다른 대안을 알아보게 되었음.
◇   같은 농촌진흥청의 사이트인 ‘농사로’에 알아보고자하는 지역을 입력하면 작물별 토양적성도와 토양검정정보를 알 수 있다는 것을 찾아냄.
◇   기존의 흑토람의 토양지도 대신에 상품 주소에 따른 토양도를 조회한 결과를 python selenium을 이용해 크롤링해서 기재. 여러 가지 토양정보 중에 토양의 적성등급, 경작지 구분과, 배수상태 등을 가져와 상품페이지에 각 수치별 등급을 시각화하여 표현.
◇   원래 구성하려했던 지도로 보는 토양도 조회가 어려워졌지만 주소 값에 따른 토양적합도를 사용해서 토양등급을 사용자들에게 보여줄 수 있게 됨.
◇   개발 완료 후 ‘농사로’ 사이트가 리뉴얼되어서 오류가 발생했다. 재배지를 조회할 수 없게 되어서 조치를 취했다.

특허 출원 내용

내용 무