본문 바로가기

WIL (Weekly I Learned)

[WIL] 2021년 9월 첫째 주 WIL

📝 8월 30일 (월)

 

◾️  Boj 알고리즘 단계별 - 함수 (Github TIL 레포 - 함수)

  • 155962_정수N개의합
  • 4673_셀프넘버

◾️  AWS 무료 티어 시작하기

  • 사이드 프로젝트였던 서비스의 모델을 개선시키고 웹앱으로 배포까지 진행시키기 위해 클라우드 서비스를 이용해보고자함
  • 무료로 시작 할 수 있는 AWS의 EC2(Elastic Compute Cloud) 인스턴스를 생성하고 SSH를 통해 접근 (게시글로 이동)

Ref.

◾️  코드 리팩토링

  • main에서는 중요한 프로세스만 확인할 수 있도록
  • 특정 기능은 따로 파일을 분리해서 관리
  • 다른 모듈 import시 전체 * 보다는 해당 파일에서 사용하고자하는 모듈명만 명확히
  • 파이썬은 클래스에 캐멀 케이스, 함수나 변수명은 스네이크 케이스를 권고
  • 함수의 파라미터나 리턴타입 어노테이션
    • 인자 타입에 어노테이션 할 때는 <인자>: <인자 타입> = <기본값>
    • 리턴 타입에 어노테이션 할 때는 화살표(->) 사용

Ref.

 

 


 

📝 8월 31일 (화)

 

◾️ Boj 알고리즘 단계별 - 함수 (Github TIL 레포 - 함수)

  • 1065_한수

◾️ 웹 앱 관련

  • 플젝 서비스 기능 중 웹앱에서 웹부분만 다른 url페이지를 임베딩할 수 있는지 고민
  • PWA를 통해 구현 시 iframe을 사용하면 가능
    • iframe 을 통해 현재 문서 안에 다른 HTML삽입 가능
    • 블로그 글 속 유튜브 영상, 지도 등이 모두 임베딩된 컨텐츠
    • 단점 : 실행시간이 매우 느려질 수 있음

◾️ Github Access Token Issue

  • Git Hub에서 ID/PW기반의 Basic Authentication 인증을 금지하고, ID/Personal Access Token 방식 Token Authentication 인증을 요구
  • 소스 코드 push/clone시 토큰을 이용해서 인증진행 해주어야함
git clone https://계정이름:토큰@클론할 깃 주소

 

◾️ Python 상대경로 import 및 -m실행옵션

➜  inkling git:(10-wiki-corpus-build-up) ✗ python -m src.preprocessor
Traceback (most recent call last):
  File "/usr/lib64/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib64/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/data1/home/hy.jin/git/inkling/src/preprocessor.py", line 6, in <module>
    from tunip.nugget_api import Nugget
ModuleNotFoundError: No module named 'tunip'
  • clone을 했다고 모듈을 바로 import할 수 있는게 아니었다.
  • 해당 폴더로 이동 후 pip install . 을 해주어야 한다.
  • 나는 vscode를 사용중인데 python interpreter가 바라보는 라이브러리 위치는 고정되어있기 때문에 그 위치에 제대로 install 되어야한다.
    • /python버전/site-packages 내에 모듈이 잘 들어가졌다면 성공

 

 


 

📝 9월 2일 (목)

 

◾️ Python에서 설정값 관리하기

  • configuration, setting, preference : 서비스를 구현하는 데 꼭 필요하지만 프로그램 소스코드라고 하기에는 애매한 정보들
  • 대표적인 설정 파일 포맷에는 ini, json, yaml , py 가 있고, 그중 인간이 읽기 가장 편안한 형식은 yaml

 

yaml 파일 형식 (conf.yaml)

1st_key: value_1
2nd_key: value_2

 

python에서 yaml파일 읽기

import yaml

with open('conf.yaml', 'r') as f:
    config = yaml.load(f)
print(config['1st_key']) # value_1

 

◾️ GIT commit message

  • 프로그램 작성 시 naming이 중요하듯 커밋 메시지도 길어지는 문장보다 필요한 내용을 간결하게 작성하는 것이 중요하다.
  • 오타수정은 Fix typo
  • 자주 사용되는 prefix은 Fix , Add , Remove ,Use, Refactor (전면수정), Simplify (Refactor보다 약한 수정), Update (Fix와 달리 정상동작하지만 추가보완개념), Improve , Make (기존 동작 변경명시)

Ref.

https://blog.ull.im/engineering/2019/03/10/logs-on-git.html

 

 


 

📝 9월 3일 (금)

 

◾️ Python 클래스

추상 클래스 (abstract class)

  • 메서드의 목록만 가진 클래스이며, 상속받는 클래스에서 메서드 구현을 강제하기 위해 사용함
  • 추상 클래스를 상속받았다면 추상 메서드를 모두 구현 해야 함
from abc import *

class StudentBase(metaclass=ABCMeta):
    @abstractmethod
    def study(self):
        pass

    @abstractmethod
    def go_to_school(self):
        pass

class Student(StudentBase):
    def study(self):
        print('공부하기')

    def go_to_school(self):
        print('학교가기')

james = Student()
james.study()
james.go_to_school()

 

⚠️ 추상 클래스는 인스턴스로 만들 수 없음

⇒ 추상 메서드도 호출 할 일이 없음

⇒ 따라서 추상 메서드에 pass만 넣어서 빈 메서드로 만듦

 

dataclass

  • 파이썬 3.7부터 표준 라이브러리로 등재
  • 데이터 클래스를 보다 용이하게 선언해주는 데코레이터
    • Type Annotation 지원
  • 데코레이터 @dataclass 를 사용하지 않으면 __init __ 메소드로 변수를 받지 않기 때문에 에러가 발생함

 

 


 

📝 9/5 (토)

 

 

◾️ Boj 알고리즘 단계별 - 문자열

◾️ AWS

 


 

📝 9/6 (일)

 

 

◾️ Python  웹 크롤링

date time

  • strptime ()은 문자열 날짜를 날짜/시간 객체로 변환하는 데 사용. 이 함수는 두 개의 인수를 취한다.
    • param1 : 문자열 형식의 날짜
    • param2 : 지정된 문자열의 날짜 패턴
  • date () 함수는 객체에서 시간 초과를 필터링하고 날짜만 가져옴
import time
from datetime import datetime

request_meta = '2021.09.01 19:50'

print(request_meta.split()[0]) # 2021.09.01

datetime_obj = datetime.strptime(request_meta, '%Y.%m.%d %H:%M')
print(datetime_obj.date()) # 2021-09-01

특정 날짜가 두 날짜 범위 내에 있는지 확인하는 방법

from datetime import datetime
def isBetween(date1, date2, date3):
    d1 = datetime.strptime(date1, '%d/%m/%y').date()
    d2 = datetime.strptime(date2, '%d/%m/%y').date()
    d3 = datetime.strptime(date3, '%d/%m/%y').date()
    return d1 < d2 < d3

Ref.

https://pythondocs.net/selenium/셀레니움-크롤러-기본-사용법/

https://www.python2.net/questions-615323.htm