Python 8

그래프 Graph

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

CS/알고리즘 2023.07.18

Python GIL (Global interpreter lock)

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

Python 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

[Backend] 정리 - 1

□ Model 필드 부분 update 포스트 방문 수 측정을 위해 Post 모델의 hits라는 필드를 가지고 있다. class Post(models.Model): ... hits = models.BigIntegerField(default=0) updated_at = models.DateTimeField(auto_now=True) ... 정말 많은 사람들이 방문하고 그랬다면 Redis 서버를 별도로 두어서 카운팅을 하고 스케줄러를 통해 주기적으로 DB에 업데이트해줬을 것이지만 여기서는 그런 주제의 글이 아니기에 패쓰 단순하게 사람들이 방문하면 +1씩 값을 증가시켜주는데 아래와 같이 그냥 save를 호출할 경우, DB에 전체 필드를 그대로 업데이트하게 된다. def retrieve(self, request,..

Intro.

전에 회사다닐 때, 도메인까지 구입하여 블로그를 만든 적이 있었다. (지금은 정말 다양하고 편리한 기능을 제공하는 블로그 사이트들에 반해 진작 접었지만..) 처음 만들었을 당시에는 그래도 내가 직접 만든 사이트에 장기간 좋은 글을 계속 쓴다면 나름 나만의 브랜드 사이트를 만들 수 있다는 상상을 했었던 것 같다. (꿈만 컸네.. 쩝.) 지금은 티스토리에 이렇게 글을 쓰지만 아... 너무 좋은 것 같다. Django Admin에 Ckeditor 붙여서 사용할 때는 뭐 나름 나쁘지는 않았지만 별도 추가 개발을 안하고 너무 기본 기능만 쓰다보니 비교가 되는 건 어쩔 수 없나보다. 이젠 사용하지 않으니 소스코드를 공개로 전환하는 과정에서 조금 고치고 싶은 욕구가 샘솟아 몇 가지를 고치고 전환하였다. 참고로 처음 ..

Intro.

안녕하세요? 뼈빌런 블로그의 뼈빌런입니다. 직장에서 퇴사하고 작게나마 토이 프로젝트를 만들어서 관련하여 블로그 글을 써볼까 합니다. 다른 분들에게 도움이 되면 좋지만 저 역시 배웠던 내용도 정리할 겸 나중에 잊어버릴 경우, 다시 찾아보고 빠르게 이해하기도 좋구요. 진행한 프로젝트 대략적인 개요는 아래와 같습니다. 프로젝트명 : Red Horse (Backend) 분류 : 온라인 데이팅 언어 : Python 3.11 프레임워크 : Django 4.2 + Django Rest Framework 3.14 형상주소 : https://github.com/kimfame/redhorse 온라인 데이팅 서비스. 말이 은근 거창해서 부담스럽긴하나 간단하게 매칭해서 채팅방 만들어주는 서비스라고 보면 될 것 같네요. 대규모..