728x90

전체 글 198

[JS] 디자인 패턴(Design Pattern)_공개 모듈 패턴(Revealing Module Pattern)

"JavaScript Design Pattern" 포스팅은 ChatGPT에게 "Essential design patterns for JavaScript developers to learn"로 질문한 뒤 나온 내용에 대해 정리하는 포스팅입니다. 1. 공개 모듈 패턴(Revealing Module Pattern) 공개 모듈 패턴은 모듈 패턴과 유사한 JavaScript의 디자인 패턴이다. 공개 모듈 패턴에서는 모듈 패턴과 마찬가지로 모듈의 비공개 멤버와 함수가 즉시 호출 함수 표현식(IIFE, Immediately Invoked Function Expression)을 사용하여 정의된다. 공개 모듈 패턴은 비공개 변수와 함수가 있는 모듈로 시작한다. 이러한 변수와 함수는 모듈 외부에서 접근할 수 없다. 모듈은..

Web/JS 2023.02.18

[JS] 디자인 패턴(Design Pattern)_모듈 패턴(Module Pattern)

앞으로 작성될 "JavaScript Design Pattern" 포스팅은 ChatGPT에게 "Essential design patterns for JavaScript developers to learn"로 질문한 뒤 나온 내용에 대해 정리하는 포스팅입니다. 전에 디자인 패턴을 공부하고자, 재난 지원금으로 Head First Design Patterns 책을 구입했었다. 알 수 없는 외국 감성과 아직 디자인 패턴이 필요하지 않다고 생각했던(참으로 어리석은 생각) 나는 구입만 하고 책을 책장에 고이고이 모셔 두었다. 이제는 개발(이라고는 하지만 내가 제대로 하고 있는 건지 모르겠다.) 일을 한 지 만 3년이 다 되어가 진짜로 디자인 패턴에 대해 알아야 할 때라는 생각이 들었다. 하지만 개정판은 절대 나올 것..

Web/JS 2023.02.16

[Python] python-daemon에서 logging 모듈로 로그 파일 작성하기

지난 포스팅에 작성했던 python-daemon 패키지를 이용한 데몬 프로세스에서 로그 작성을 txt 파일을 열어 작성하는 것이 아닌 logging 모듈을 이용해서 로그를 작성하려고 하였다. import daemon from daemon.pidfile import PIDLockFile import logging import time log_path = '{파일 경로}/pydaemon.log' logging.basicConfig(filename=log_path, encoding='utf-8', level=logging.DEBUG, format='[%(asctime)s][%(levelname)s] %(message)s', datefmt='%Y/%m/%d %p %l:%M:%S') log = logging.ge..

Python 2023.01.10

[Python] Python으로 간단한 데몬(Daemon) 프로세스 만들기

Python을 이용해서 데몬 프로세스를 만들어야 했다. 찾아보니 python-daemon이라는 패키지를 이용하면 간단한 데몬 프로세스를 만들 수 있었다. $ pip install python-daemon python-daemon 패키지를 설치하게 되면 docutils와 lockfile도 같이 받아지게 된다. python-daemon 패키지를 이용해서 가장 간단하게 데몬 프로세스를 만드는 방법은 다음과 같다. import daemon import time from datetime import datetime def main_program(): while True: with open('{파일 경로}/pydaemon.txt', 'a') as f: write_str = '[{}] pydaemon write.\n..

Python 2023.01.09

[Selenium] Selenium의 Session을 requests 라이브러리에서 사용하기

회사 업무를 위해 Selenium을 열심히 사용하다가 문득 이런 생각이 들었다. "셀레니움으로 로그인만 하고 해당 인증 정보로 requests 라이브러리를 사용해 HTTP 요청을 할 순 없을까?" 사용자 정보 수정을 하기 위해 메뉴를 타고 들어가는 과정을 셀레니움으로 자동화하는 것보다 로그인만 셀레니움으로 시도하여 해당 인증 정보로 바로 사용자 정보 수정 HTTP 요청을 해버리면 메뉴를 이동하다가 발생하는 오류를 방지하는데 도움이 될 것 같았다. selenium의 세션 정보를 requests에서 사용하는 방법은 생각보다 간단하였다. import requests from selenium import webdriver # # driver 생성 후 페이지 로그인 # cookies = driver.get_coo..

Python 2023.01.05

[Selenium] 현재 설치된 Google Chrome에 맞는 chromedriver 자동으로 가져오기 (feat. webdriver-manager)

Selenium을 사용한 프로젝트를 오랜만에 하다 보면 다음과 같은 에러를 마주치는 일이 생긴다. 컴퓨터에 설치된 Google Chrome의 버전과 chromdriver의 버전이 서로 맞지 않을 때 생기는 에러인데, 서로 버전만 맞춰주면 되지만 프로젝트를 실행할 때마다 chromedriver의 버전을 신경 쓰는 일은 생각보다 귀찮다. 이런 귀찮음을 해결해주기 위해 webdriver-manager라는 모듈이 존재한다. 사용 방법은 굉장히 간단하다. 우선 모듈을 사용하기 위해 pip을 사용하여 webdriver-manager를 설치해 준다. pip install webdriver-manager 그런 뒤 기존에 from selenium import webdriver from selenium.webdriver...

Python 2023.01.02

[Selenium] DeprecationWarning: executable_path has been deprecated, please pass in a Service object 해결하기

셀레니움을 회사에서는 예전에 만들어놓은 패키지들로 설치를 했었기에 몰랐었는데, 이번에 본가 데스크톱에 파이썬과 셀레니움을 설치하고 사용해보니 지원 중단 경고가 뜨고 있었다. executable_path가 지원 중단되었으니, 서비스 객체를 넘기라고 되어있는데 이게 무슨 말인가 싶어 찾아보았다. 찾아보니 2021년 10월 22일에 수정된 Selnium 4.0 Beta 1 변경 로그에 드라이버 인스턴스화 시 Options와 Service 인수를 제외한 인수들을 사용하지 않기로 되어 있다고 한다. 그러니까 기존에는 브라우저에 맞는 드라이버를 다운로드한 뒤, 셀레니움 드라이버 인스턴스화 시 해당 브라우저 드라이버의 경로를 executable_path로 전달해주어야 했는데, 4.0 버전 이후부터는 Service 인..

Python 2023.01.01

[2022. 12. 31] 잘 가요 2022, 어서 와요 2023

급성요추염좌로 시작한 2022년이 벌써 끝이나 버렸다. 코로나에 조갑주위염까지, 그리고 계속해서 자잘한 감기까지 많이 앓은 2022년이었다. 2022년이 시작할 때까지만 해도 반 장난식으로 '2023년은 언제 오지'라는 생각을 했는데 정신 차려보니 2023년을 코 앞에 두고 있게 되었다. 오늘은 2022년의 마지막 날이자, 여자친구와 함께한 지 2800일이 되는 날이었다. 같이 카페에서 2022년 동안 찍은 사진들을 돌아보았는데, 하나하나 되돌아보니 한참 전 일들인 것 같으면서도, 얼마 되지 않은 느낌이 들었다. 요즘은 연말 연초에 대해 별 느낌이 없었는데 이렇게 되돌아보는 시간을 갖게 되니 '연말이네~'하는 느낌이 들었다. 아쉬움도 함께 느껴졌다. 익숙함이 사라지는 느낌. 하지만 익숙함이 그리움이 되는..

잡담 2022.12.31

[Selenium] Selenium 화면에서 요소가 사라질 때까지 대기하기

다음에 포스팅할 항목을 테스트하기 위해 서울시 전자도서관에 Selenium을 사용하여 로그인하려고 하는데 다음과 같은 에러가 발생하였다. 원인은 서울시 전자도서관에 처음 접속하게 되면 추천 도서 목록을 가져오는 데 걸리는 시간이 길어 해당 목록을 가져올 때까지 로딩바를 표시하게 된다. 로딩바가 표시되는 동안에 요소들을 클릭할 수 없는데, 이때 클릭 이벤트가 발생하여 의도했던 요소가 아닌 다른 요소가 해당 클릭 이벤트를 수신하게 되어 에러가 발생하였다. 에러 로그를 읽어보면 Other element would receive the click: ...라고 되어있다. 즉, 우리는 저 이 사라질 때까지 대기하였다가 로그인 버튼을 클릭하면 되는 것이다. 물론 presence_of_element_located가 아..

Python 2022.12.20

[2022. 12. 03] 생인손이 생긴 손

조갑주위염 혹은 생인손이라고 들어는 봤는가? 아마 나처럼 손톱 옆에 거스러미가 생겼을 경우 아무 생각 없이 뜯어내는 사람들이 많을 것이다. 회사에서 퇴근 시간만을 기다리던 나는 왼손 네 번째 손가락에 거스러미가 생긴 것을 발견하였고, 여느 때와 같이 집게손으로 잡아 뜯어버렸다. 처음에는 늘 뜯던 그 느낌 그대로였다. 손가락 주위가 살짝 아리기 시작했고, 신경을 쓰지 않았더니 괜찮아지는 듯싶었다. 하지만 며칠 뒤 거스러미를 제거했던 손가락이 땡땡해짐을 느꼈고, 뭔가 이상하다 싶었다. 평소에 그런 적이 없었지만 그래도 조금 있으면 나아지겠지~ 하고 넘겨버렸다. 손가락 주위 색이 변해가는 것 같았는데, 색약이 있는 나는 그걸 제대로 알아차리지 못했다. 그러다 어제, 여자친구와 밤에 영상통화를 하면서 손가락이 ..

잡담 2022.12.04
728x90