DX Data School

데이터베이스 연동 4

Kim J 2024. 4. 1. 10:59

1) 웹 서비스를 구현하는 방식

[1] 서버 사이드 랜더링

클라이언트(웹 브라우저)의 요청을 서버가 받아서 처리한 후 서버가 출력하는 코드를 만들어서 클라이언트에게 전송하고 클라이언트는 이 코드를 받아 파싱해서 출력하는 방식

- 서버 코드와 클라이언트 코드를 하나의 프로젝트에 모두 작성함.

서버 코드를 수정 할 때 클라이언트 코드가 영향을 받을 수 있고 반대의 경우도 영향을 받을 수 있어 최근에는 서버 사이드 랜더링을 선호하지 않는다.

서버 사이드 랜더링을 통해 사이트를 만들기 위해서는 템플릿 언어라는 것을 학습해야 한다.

{{ }} 형태의 언어

이전시간에 웹 브라우저를 만들었던 방법이 바로 서버사이드 랜더링 방식이었다

{{item.itemid}} 요런걸 꽤 사용했단 말이지~ 그치만 이제 다른 방식을 또 배워 보자구요

[2] 클라이언트 사이드 랜더링

서버는 클라이언트의 요청을 받아 데이터(예전 : XML > 최근: JSON)를 응답으로 전송, 클라이언트는 받아온 데이터를 통해 출력 코드를 직접 만들어 화면에 랜더링 하는 방식

- 서버 프로그램과 클라이언트 프로그램을 별도로 작성함

**서버 프로그램(Python의 Django, Java의 Spring, JavaScript의 express.js 등)

클라이언트 프로그램(vue.js, react.js > next.js, android[java 나 kotlin], ios-swift 등)

 

서버 코드와 클라이언트 코드가 서로에게 영향을 주지 않고 통신만으로 연동된다.

최근에는 프로그램에 유지보수가 자주 필요하므로 클라이언트 사이드 랜더링과 같은 느슨한 결합(Loosly coupling) 형태로 프로그램을 만드는것을 권장한다.

XML(eXtensible Markup Language) : 데이터를 태그로 표현

현재는 일부 RSS 서비스에서 사용되고 주로 설정 파일에서 많이 사용한다.

<persons>
            <person>
                        <name>아담</name>
                        <age v="53"/>
            </person>
            <person>
                        <name>군계</name>
                        <age v="47"/>
            </person>
</persons>

JSON(JavaScript Object Notation / 자바스크립트 객체 표현법[파이썬과 동일])

최근 데이터 교환에서 가장 많이 사용되고 모바일은 거의 대부분이 JSON 방식이다.

서버 개발자는 JSON을 잘 만들어야 하고, 클라이언트 개발자는 JSON 파싱을 잘 해야한다.

보통 실시간으로 변하는 데이터는 JSON 으로 준다. ↔ (변하지 않는 데이터를 CSV로 준다.)

객체 : {}
배열 : []
[{"name" : "아담", "age" : 53},{"name" : "군계", "age" : 47}]

YAML(야믈)

이메일 표현방식을 이용해 데이터를 표현, 최근 설정 파일에 많이 사용한다.

현재까지 데이터 교환에는 사용되지 않는다.

      person:
                  name: 아담
                  age: 53
      person:
                  name: 군계
                  age: 47

CSV

콤마로 구분한다. 보통 절대로 변하지 않는 데이터를 CSV로 준다. ↔ (실시간으로 변하는 데이터는 XML 또는JSON 으로 준다.)

예전 피쳐폰에서 전화번호를 CSV로 저장했다. 그래서 휴대폰을 바꿀 때 대리점에서 번호를 옮기는 작업이 꽤 걸렸던거 라고 한다. 요즘은 그냥 폰끼리 갖다대면 다 옮겨준다 엄청난 발전이다.

이름,나이
아담,53
군계일학,47

2) Python django에서 json 데이터를 제공하는 방법

[1] dict 또는 list(tuple)로 데이터를 만들어서 직접 리턴하는 방식

[2] 프레임워크를 이용하는 방식

3) 직접 dict 또는 list를 만들어서 리턴하는 방식

- 하나의 인스턴스를 dict로 만들어주는 함수나 클래스를 만들어서 사용하면 편리하다.

person = Person()
person.name = "아담"
person.age = 53
아래 함수로 만들어 준다.

p = {"name" : person.name, "age" : person.age}

4) 전체보기를 JSON으로 출력

- model 클래스의 인스턴스를 dict로 변화시켜주는 파일을 views.py에 작성

def itemTodict(item):
   output = {} # dict를 생성

   # 인스턴스의 속성을 딕셔너리에 저장
   output["itemid"] = item.itemid
   output["itemname"] = item.itemname
   output["price"] = item.price
   output["description"] = item.description
   output["pictuerurl"] = item.pictuerurl
   output["amount"] =item.amount

   return output

- views.py 파일에 전체보기를 처리할 함수를 생성

# JSON으로 RETURN 하기 위한 패키지를 IMPORT
from django.http import JsonResponse

def allItems(request):
   # 전체 데이터 가져오기
   items = Item.objects.all()
   # 여러개의 데이터 이므로 list에 저장하기
   datas = []
   for item in items:
      datas.append(itemTodict(item))
      # list를 JSON으로 리턴
      # JsonResponse는 list를 직접 출력할 수 없어 dict로 변환해서 제공해야 한다.
      return JsonResponse(datas)

- urls.py 파일에 url 과 views.py 의 함수를 연결하는 코드를 작성

from django.contrib import admin
from django.urls import path
from myapp import views


urlpatterns = [
    path("admin/", admin.site.urls),
    path("", views.test),
    path("index/", views.index),
    path("detail/<int:itemid>", views.detail),
    path("allitem/", views.allItems),  # 쉼표를 꼭 찍어주는 습관을 가져
]

이까지 입력을 하고 서버 재구동 후 도메인을 입력하면 아래와 같이 출력된다.

127.0.0.1/allitem/

5) 상세보기 구현

- views.py에 상세보기를 구현할 함수를 작성

def getitem(request,itemid):
    # itemid가 매개변수인 데이터 가져오기
    # 앞의 itemid는 컬럼이름 뒤의 itemid는 매개변수로 넘어온 값
    item = Item.objects.get(itemid=itemid)
    return JsonResponse(itemTodict(item))

- urls.py에 views.py와 연결할 함수를 작성

from django.contrib import admin
from django.urls import path
from myapp import views


urlpatterns = [
    path("admin/", admin.site.urls),
    path("", views.test),
    path("index/", views.index),
    path("detail/<int:itemid>", views.detail),
    path("allitem/", views.allItems),
    path("get/<int:itemid>", views.getitem),
]

작성 했으면 또 테스트 해보면 된다

127.0.0.1/get/1 로 테스트 해보면 알 수 잇따.

휴휴흏~~

오늘도 이렇게 하루가 끝났다 정신없이 시간이 너무 빨리갔다

배운거 같은데 배운거 같지 않으면서 배웠다고 생각하고 있따.

결국은 복습만이 기억을 할 길이다. 복습하러 가야겠다 안냥~~~~~~

기본포트

http : 80

https : 443

네이버 주소는 사실 https://www.naver.com:443 입니다.

몰랐쮸?

 

 

'DX Data School' 카테고리의 다른 글

Numpy  (0) 2024.04.01
Github  (0) 2024.04.01
데이터베이스 연동 3  (1) 2024.01.30
데이터베이스 연동 2  (1) 2024.01.30
데이터베이스 연동  (0) 2024.01.30