[N434] 시간과 부호화

쥬쥬스·2023년 4월 5일
0

section4

목록 보기
14/15
시간과 부호화를 왜 알아야하는가!!!!
1. 데이터에 맞게 시간을 저장하기 위해서
2. 가져온 데이터를 이해하기 위해서 (log데이터, 시계열 데이터 : 주식)

1. 시간 (UTC, KST)

Q. 시간을 주의해야하는 상황?
1. 서비스에서 시간을 이용하는 경우 (API, 라이브러리에 따라)
2. 시간을 저장하는 경우
3. 여러 노드에서 시간을 발생시키는 경우

  1. 내 컴퓨터 혹은 서버의 Localtime
    date ▶ 2023년 04월 5일 수 오후 1:56:33

  2. UTC (협정 세계시)
    영국을 기준으로 시차를 규정한 시간으로 KST는 UTC+9
    date -u ▶ 2023년 04월 5일 수 오전 4:57:51

  3. 국제 표준 ISO 8601
    날짜와 시간과 관련된 데이터 교환을 다루는 국제 표준
    date -u +"%Y-%m-%dT %H:%M:%SZ" ▶ 2023-04-05T 05:02:38Z

  • 년,월,일,시간,분,초,Timezone 기준으로 작성
  • 연도를 제외한 날짜와 시간은 두 개의 숫자로 구성 (1월 1일이면 0101)
  • 확장형으로 구분자(-,:,Z(Timezone),T(시간))가 사용될 수 있음
  1. Unix Time, Epoch Time
    시간 자체보다 시간을 이용한 연산에 활용
    date +%s ▶ 1680671220
  • 특정 시간을 기준으로 시간이 표현됨
  • Epoch : 영국의 1970년 1월 1일 0시 0분 0초
  • Epoch 이후 1초 이후의 시간을 1을 더해서 표기하고, 1초 이전 시간을 -1로 표기
  • TimeZone을 추가하지 않는다면 UTC+0을 기준으로 표기
  1. 파이썬에서 확인
import datetime
datetime.datetime.now() # datetime.datetime(2023, 4, 5, 5, 9, 33, 538881
datetime.datetime.utcnow() # datetime.datetime(2023, 4, 5, 5, 9, 8, 129014)

import time
time.time() # 1680671303.7994893

2. 스케줄링

Q. 왜 스케줄링이 필요할까?
A. 과거든 미래든 상관없이 특정 시점을 기준으로 어떤 업무를 실행하기 위해서

두가지 방식

APSchedulercron
파이썬 라이브러리유닉스 도구
어플리케이션단으로 많이 사용운영체제 기반으로 많이 사용
쉽게 사용 가능많은 곳에서 많은 사람들이 사용중

APScheduler 공식문서
Cronjob 공식문서

스케줄러 선언

스케줄러가 프로그램의 목적이 되는 경우

  • BlockingScheduler

다른 애플리케이션의 실행이 주 목적, 스케줄러는 부가기능인 경우

  • BackgroundScheduler
  • AsyncIOSchedule
  • GeventScheduler
  • TornadoScheduler
  • TwistedScheduler
  • QtScheduler

BlockingScheduler를 사용해보기

# pip install apscheduler
# 스케줄러 선언
from apscheduler.schedulers.blocking import BlockingScheduler

# UTC+0 기반으로 실행 Timezone에 매개변수 선언 후 사용
scheduler = BlockingScheduler({'apscheduler.timezome':'UTC'})
# KST 기반으로 실행
# scheduler = BlockingScheduler({'apscheduler.timezone':'Asia/seoul'})

# 스케줄러에 사용될 job 선언
def hello():
  print("나는 5초마다 실행돼")

scheduler.add_job(func=hello,trigger='interval',seconds=5)
# trigger 옵션 : date(특정시점에 한번), interval(고정된 간격), cron(cron 문법사용)

# 스케줄러 시작하기
scheduler.start()

❗ 가상환경에서 스케줄러 설치했음에도 파이썬에서 인식이 안되면서 문법오류가 생길때는 ctrl+shift+p -> select interprter 입력 -> enter path to~ 누르기 -> which python으로 나온 위치로 설정 해주기

3. 부호화

  • 부호화 : 데이터를 저장하거나 전송하기 쉽게 변환화는 과정
  • 복호화 : 부호화된 데이터를 해석하는 과정

◎ 그외 ... 다른 표현들
인코딩 - 디코딩
직렬화 - 역직렬화
피클링 - 역피클링
마샬링 - 언마샬링
JSON 직렬화 - JSON 역직렬화
CSV 직렬화 - CSV 역직렬화

◎ 두가지 방식
인메모리 방식

  • 파이썬 코드가 실행되고 있는 메모리 안에서 표현되는 방식
  • 메모리 안에서 작동하기 편한 방식으로 CPU가 데이터를 효율적으로 처리하기 편함

바이트열 방식

  • 데이터를 파일에 쓰거나, 네트워크에서 전송되기 위한 표현 방식
  • 보관하기 쉽고, 전달하기 좋아진다

❗ 주의
직렬화-역직렬화 같은 경우에 만약 데이터베이스 트랜젝션을 대상으로 쓴다면 위의 부호화,복호화 의미와는 다름! 트랜젝션의 순서를 맞추기 위해 '직렬화'라고 표현

모델을 부호화 (dump)

pickle 라이브러리 이용 파이썬 공식문서-pickle

import pickle

# wb : 바이트형 쓰기 모드
with open('model.pkl','wb') as pickle_file:
    pickle.dump(model, pickle_file)

모델을 복호화 (load)

import pickle

model = None
with open('model.pkl','rb') as pickle_file:
   model = pickle.load(pickle_file)

JSON 데이터로 부호화

data = {
    "first_value": {
        "name": "odee",
        "album": "ZIPLOC"
    }
}

import json

# json으로 부호화한 뒤, 객체에 읽을 때
json_data = json.dumps(data)

# json으로 부호화한 뒤, 파일에 쓸 때
# josn 라이브러리는 항상 str로 객체 생성, 따라서 w 사용
with open('json_file.json','w') as json_file:
    json.dump(data,json_file)

JSON 데이터를 복호화

import json

str_1 = None

with open('json_file.json','r') as json_file:
    str_1 = json.load(json_file)

print(str_1)

💌 회고

프로젝트 하기 전에 쉬어가는 시간인듯...ㅎ... 많이 사용하게 될 것 같진 않은데 알아두면 좋을 것 같은거랄까...? 오늘 회고는 짧게. 복호화는 많이 쓸 수도 있겠다 싶음. 스케쥴링은 반복해둘때. 그 날씨 정보 불러오기 이런거 했을 때 사용할 수 있지 않을까?????

profile
느려도... 꾸준히.....🐌

0개의 댓글