📝 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.
'WIL (Weekly I Learned)' 카테고리의 다른 글
[TIL] 백준 13300번: 방 배정 (Python) - 시간 복잡도 O(N)으로 풀기 (0) | 2023.01.02 |
---|---|
[WIL] 2021년 9월 넷째 주/ 10월 첫째 주 WIL (0) | 2021.10.15 |
[WIL] 2021년 9월 셋째 주 WIL (0) | 2021.09.20 |
[WIL] 2021년 9월 둘째 주 WIL (0) | 2021.09.13 |