분류 전체보기 34

Template Method

상위 클래스에서 필요한 Method들을 가지고 특정한 기능 수행을 위한 절차 또는 코드는 이미 구현되어있고 하위 클래스에서 각 절차에 필요한 Method들을 구현하는 패턴 Template Method 패턴은 이름 그대로 Template 형판, 견본이 있는 Method가 있고 각각에 필요한 메소드는 하위클래스에서 구현해준다. 예제 파일을 입력받아 데이터 내용만을 추출해야하는 기능이 있는데 파일 종류가 PDF, Excel, Word, txt 여러 종류가 있으면 데이터 타입에 따라 읽는 방식은 달라진다. 예를 들어, txt는 그냥 그대로 읽어오면 되지만 Excel 같은 경우, 쉼표로 각 데이터가 구분되어 있으니 쉼표를 구분자로 파싱을 해줘야한다. public abstract class AbstractExtra..

CS/디자인 패턴 2023.09.16

그래프 Graph

그래프 자료구조를 설명할 때, 노드와 간선을 이용하여 설명하는데 비유를 하면 네이버 지도의 길찾기와 같은 느낌인 것 같다. 대중교통으로 어떤 길을 찾아갈 때, 어느 지점(노드)에 버스를 타서 어느 지점에 내려서 어느 지점에 지하철을 타서 어느 지점에 지하철을 내려서 도착. 각 지점이 노드고 각 지점 사이는 간선이라고 볼 수 있다. 이 그래프를 표현할 때, 딕셔너리 + 리스트를 이용한다. 지점은 딕셔너리의 키 값을 이용하고, 해당 지점과 연결된 노드들은 딕셔너리의 값을 리스트를 이용하여 저장한다. (참고로 이 표현은 고정된 방식은 아니고 다른 방식도 가능하다. '배열 + 링크드리스트' 조합도 가능하고 '2차원 배열'을 이용하여도 표현이 가능하다. 여기서는 아주 개인적으로 자주 봤던 조합을 이용하였다.) g..

CS/알고리즘 2023.07.18

Python GIL (Global interpreter lock)

한 줄로 요약하자면 파이썬 인터프리터를 동시에 사용하지 못하도록 만드는 것. 자바에도 그렇듯 파이썬에도 가비지 컬렉터(Garbage Collector)가 있다. 이 가비지 컬렉터는 참조하지 않는 객체들을 메모리에서 제거하는 역할을 하는데 문제는 멀티스레드의 경우, 그것을 카운팅하는 것이 쉽지 않다는 것이다. 전문 용어로 경쟁 상태(Race Condition)로 동시 참조문제로 인해 이 카운팅이 꼬일 수가 있다. 그렇다고 이것을 해결하기 위해 모든 객체에다가 뮤텍스 같은 잠금장치를 걸어놓고 한 사람에 한 명씩 들어오세용~ 하다간 성능 저하 + 개발자의 폭발적인 실수가 예상될 듯 뻔하다. 아 참 그리고 파이썬 인터프린터는 프로세스 당 하나씩 있으므로 한 순간에 프로세스 안에 한 스레드를 실행시켜줄 수 있다...

Python 2023.07.10

loop argument must agree with lock 해결 방법

2021년 12월 29일자 기준 Python version : 3.10.0 Django Channels 튜토리얼 진행하다가 아주 킹받는 상황을 맞이했다. 파트 2에서 redis 연동 및 테스트 진행하는데 Python 쉘에서 아래와 같은 redis 테스트 진행하다가 >>> async_to_sync(channel_layer.send)('test_channel', {'type': 'hello'}) 아래와 같은 에러를 토해냈다. ... self._cond = asyncio.Condition(lock=Lock()) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/locks.py", line 234, in __init__..

Python/Django 2023.07.10

Python을 이용한 Slack API 사용해보기 (단순 메시지 삭제 기능 구현)

1:1 대화 방에 있는 자신의 대화 삭제 방법 1. 접속 후 로그인 https://api.slack.com/ 2. 사이트 이동 https://api.slack.com/apps 3. 앱 생성 (1) 'Create an App' 클릭 (2) 'From scratch' 클릭 (3) 입력 필드 입력 후 'Create App' 클릭 - App name : 원하는 이름으로 지정 - Pick a workspace to develop your app in: 리스트에 나오는 Workspace 중 하나 선택 4. 프로젝트가 만들어지면 오른쪽 목차에 'OAuth & Permissions' 클릭 5. 해당 페이지 내의 Scopes 단락으로 이동 6. Bot, User 중 원하는 기능에서의 Scope(권한 범위)를 지정 - 이..

Python 2023.07.10

actions/create-release@v1 사용 시, Resource not accessible by integration 해결방법

Github action 사용하면서 Release 자동 생성 step을 넣어줬었는데 Resource not accessible by integration 에러가 났었다. 아래와 같이 create-release 공식 예제 소스를 넣었는데도 에러가 났다. - name: Create Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref }} release_name: Release ${{ github.ref }} body: | Changes in this Release - First Change - Second Change..

Python/Deploy 2023.07.10