본문 바로가기

전체 글123

[파이썬 공식문서] 3. Data model 파이썬 공식 홈페이지 내 Data model 문서에 정의된 내용을 정리해본다. 1. 객체, 값 그리고 타입 객체란 파이썬의 데이터 추상화 방식이다. 모든 데이터는 객체, 혹은 객체들 사이의 관계로 정의된다. (폰 노이만의 프로그램 내장방식 모델에 따라, 코드도 또한 객체로 표현될 수 있다.) 모든 객체는 본질을 갖는데, 그게 바로 값과 타입이다. 파이썬에서 한번 객체가 생성된 후, 이 값과 타입은 절대 바뀌지 않는다. CPython 구현 디테일 CPython에서 id(x)는 x가 저장된 주소를 나타낸다. 파이썬에서 타입은 객체가 한번 정의된 후 바뀌지 않는데, 값을 바뀔 수 있다. 정확히는 바뀌는 값이 있고(mutable), 바뀌지 않는 값이 있다(immutable). 이러한 객체의 mutability는.. 2022. 7. 19.
파이썬 GIL이란 무엇인가? 최근 파이썬으로 서비스 개발을 하며 퍼포먼스에 대한 여러가지 시행착오를 겪고, 성능 병목을 만드는 GIL에 대해 공부하게 되었다. 완전하진 않지만 나에게 필요한 부분 위주로 글을 정리해본다. 파이썬 GIL이란? GIL은 Global Interpreter Lock의 약어로, 여러 개의 스레드가 파이썬 바이트코드를 한번에 하나만 사용할 수 있게 락을 거는 것을 의미한다. 쉽게 말해서 하나의 스레드만 파이썬 인터프리터를 제어할 수 있도록 하는 뮤텍스라고 보면 된다. 이게 무슨 의미냐면, 파이썬 프로그램은 특정 시점에 오직 하나의 스레드만 실행된다는 것이다. 파이썬 멀티 스레드 프로그램에서 멀티 스레드가 싱글 스레드처럼 동작하는 성능병목 현상을 발견할 수 있다. 몇몇의 개발자들은(혹은 대다수?) 이러한 GIL의.. 2022. 5. 31.
Git Commit / Branch / Merge 로 프로젝트 관리하기 개발자로 협업할 때 Git을 사용하는 것은 아무리 잘써도 부족하지가 않은데, 최근에 이에 관련하여 좋은 조언들을 많이 얻었고 스스로 복기하고자 한다. 항상 Best Practice일 수는 없지만, Worst Practice는 최소한 피해보자는 마음에 해당 글을 작성해본다. Git Commit 커밋 메세지 작성하기 - 커밋의 단위는 최대한 작은 작업 단위로 - 한번에 몰아서 하는 대신에 여러번 자주 - 커밋 메세지는 남들에게 보여주는 규칙이다 One Line Comment ``` line feed ``` Detailed Description - 위와 같은 구조가 되면 좋은데, 예를 들면 이런 식이다 Refactor A module to fix B error This commit is dealing with.. 2022. 5. 12.
[파이썬 공식문서] 4. Execution model 파이썬 공식 홈페이지 내 Execution model 문서에 정의된 내용을 정리해본다. 1. 프로그램의 구조 파이썬 프로그램의 기본 구성단위는 코드 블럭이다. 여기서 블럭은 파이썬 프로그램 텍스트가 실행되는 단위를 나타내는데, 모듈, 함수 바디, 클래스 정의부 등이 될 수 있다. 모든 입력된 인터랙티브한 커맨드는 블럭이 된다. 아래와 같이 말이다. print('Hello World!') # 하나의 블럭 > Hello World! 이러한 코드 블럭은 실행 프레임(Execution frame)에서 실행된다. 프레임은 관리정보 등을 가지고 어디서 어떻게 실행이 이어지고 코드 블럭이 실행된 후에는 어떻게 종료할 것인지를 결정한다. 2. 이름과 바인딩 규칙 이름 바인딩하기 파이썬에서 이름(Names)은 오브젝트를.. 2022. 4. 9.
[백준 14427] 수열과 쿼리 15(C++: Updatable PQ) A. 문제설명 https://www.acmicpc.net/problem/14427 14427번: 수열과 쿼리 15 길이가 N인 수열 A1, A2, ..., AN이 주어진다. 이때, 다음 쿼리를 수행하는 프로그램을 작성하시오. 1 i v : Ai를 v로 바꾼다. (1 ≤ i ≤ N, 1 ≤ v ≤ 109) 2 : 수열에서 크기가 가장 작은 값의 인덱스를 www.acmicpc.net 문제 설명은 다음과 같다. 길이가 N인 수열 A1, A2, ..., AN이 주어진다. 이때, 다음 쿼리를 수행하는 프로그램을 작성하시오. 1 i v : Ai를 v로 바꾼다. (1 ≤ i ≤ N, 1 ≤ v ≤ 109) 2 : 수열에서 크기가 가장 작은 값의 인덱스를 출력한다. 그러한 값이 여러 개인 경우에는 인덱스가 작은 것을 .. 2021. 12. 10.
우선순위 큐(priority_queue) 잘 써보기 PS와 우선순위 큐 알고리즘 문제를 풀다보면 끊임없이 만나는 자료구조가 있다. 바로 우선순위 큐이다. C++에서 priority_queue를 사용하다보면 강력함도 느끼고, 동시에 한계도 많이 느낀다. 오늘은 이에 대해 다루어보려고 한다. 우선순위 큐의 활용 LeetCode - Find Median from Data Stream Find Median from Data Stream - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 위 문제를 한번 풀어보겠다. 문제조.. 2021. 11. 19.
XPS 13 9360 알리발 배터리 자가교체 실패 후 성공후기 서문 배터리 교체를 할 시기가 다가왔음을 알게되었다. 기존에 사용하던 배터리가 충전기없이는 5분도 못버티는 상황이었다. 극한의 귀차니즘으로 미루고 미루다가 이번에 마음을 먹고 배터리를 자가교체하기로 하였다. Aliexpress에 King Sener라는 꽤 오래된 셀러를 알게되었고, XPS 13 모델용 배터리팩을 주문하게 되엇다. 배터리 교체시도 그러나 실패 King Sener 업체에서 발송한 배터리가 2주만에 도착하였다. 가격은 $35 언저리였다. 유튜브의 XPS 배터리 자가교체 영상을 참고해서 교체를 시도하였다. 배터리 교체후 부팅까지는 성공적이었다. 그러나... 부팅 시도시 바이오스에서 이런 경고 메세지가 발생했다. 배터리 호환이 안맞아 화재 등 위험의 가능성이 있다는 메세지이다. 부팅이 차단되어 O.. 2021. 11. 6.
WSL2, 리눅스용 윈도우 서브시스템 설치하기 기존에 사용하던 윈도우/리눅스 듀얼부트를 공장초기화로 밀면서 모든 개발환경을 다시 셋업하고 있었다. 리눅스 가상서버로는 부족함을 느꼈던 개발환경에 고민 중이었는데, 뒤늦게 WSL2를 알게 되어 직접 설치해보고 경험 해본 후기를 간단하게 적어보려고 한다. WSL이란 무엇인가? 일단 WSL2를 설명하기에 앞서, WSL에 대해 이야기하자면 WSL(Windows Subsystem for Linux)이란 말 그대로 리눅스용 윈도우 서브시스템이고 기존 버전의 WSL은 2017년 릴리즈되었다. WSL2는 쉽게 말하자면, 그 WSL의 개선된 버전이라고 볼 수 있는데 2019년 릴리즈되었고, 퍼포먼스 면에서나 성능 면에서 VM에 비해서 훨씬 Seamless하다고 강조한다. WSL과 WSL2의 비교 WSL2에 대해 이야기.. 2021. 10. 16.
Notion, 에버노트 대신 써보면 어떨까? Notion이라는 앱을 알게되었다. 에버노트와 비슷한 류의 생산성 소프트웨어라고 한다. 처음에 동기교육 중에 우연히 다른 사람이 사용하는 것을 보게 되었는데, 수려하면서 미니멀한 UI에 눈에 가게 되었다. Notion이란? 대략 2016년 가량 첫 런칭하여, 2017년도부터 윈도우와 ios 등에 서비스하기 시작한 신생 생산성 앱이라고 한다. 메모, 데이터베이스, 칸반보드, 달력 등 서비스를 제공한다고 하는데 사실 그 기능들을 다 잘 쓸지는 만무하고, 나의 경우 스터디 노트 등으로 활용해보려고 한다. Notion, 왜 좋은가? 처음 Notion에 대해서 알아보고자 여러 사이트를 인터넷에서 찾아보게 되었다. 주로 다른 서비스들과 비교하는 제품 비교글들이 많았는데, 그 중에서 내가 사용해본 에버노트와 트렐로와.. 2021. 10. 7.
[블로그 개발 기록-6] Atom 에디터 로컬에서 아마존 Lightsail Remote-FTP로 연동하기 아마존 AWS 서버내 코드 작업을 할때 내 로컬 환경의 Atom 에디터에 FTP로 연동하여 코드를 가져오고 올리는 방식을 소개한다. 먼저, FTP 통신 연동을 위해 서버의 SSH 키를 가져온다. 인스턴스의 SSH키 가져오기 아마존 Lightsail의 계정설정에서 SSH 키 설정을 가져올 수 있다. 우측 하단의 다운로드 키를 클릭하여 .pem 파일을 다운로드한다. 아톰 Remote-FTP 패키지 설치하기 그 다음 아톰 에디터에서 서버와 FTP 연동을 지원하는 플러그인을 받아주어야 한다. Ctrl + , 로 패키지를 검색하여 remote-ftp 플러그인을 설치한다. 이후 Ctrl + Shift + P 로 remote-ftp를 토글하여 좌측 토글창의 Edit configuration을 클릭한다. 이제, 아톰 .. 2021. 7. 25.
티스토리 Disqus 댓글 위젯 설치하기 디스커스 recent_comments_widget JS 코드 본 블로그의 경우 티스토리 자체 댓글 시스템이 아닌 디스커스 댓글 시스템을 사용하기 때문에 디스커스 서버에서 최근 댓글 목록을 받아와야 한다. 티스토리 테마 HTML 편집 페이지에서 디스커스 최근댓글 위젯은 따로 제공되지 않아 다음의 HTML 코드를 사용하도록 한다. 디스커스 Shortname 적용하기 여기서 호출하는 디스커스 최근댓글 Div 내 자바스크립트 링크는 아래와 같이 자신의 계정의 Shortname을 입력해주어야 한다. https://디스커스ShortName.disqus.com/recent_comments_widget.js?num_items=5&hide_mods=0&hide_avatars=0&avatar_size=32&excerpt_.. 2021. 7. 21.
[책 리뷰] 리처드 도킨스의 이기적 유전자와 공동 조상 알고리즘을 이용한 근연도 구하기 리처드 도킨스는 이기적 유전자가 이타적 행동을 하는 것이 유전자 풀(Pool) 속에 그 수를 늘리고자 하는 유전자의 궁극적 목표를 달성하기 위한 이기적 행동이라고 설명한다. 가령, 어떤 특정 A라는 유전자가 본인의 친족을 살리기 위해 이타적인 행동을 하는 것은 본인의 유전자를 보존한 친족 여럿을 살려 그 유전자를 더 살릴 수 있다면 이것은 개체의 이타주의로 나타나겠지만, 그것은 어디까지나 유전자의 이기주의에서 생겨난 것이라는 것이다. 근연도(Relatedness) 친족관계인 개체에 대해서 멀거나 가깝거나 관계없이 이와 같은 식으로 계산할 수 있다. 본인이 유전자 H의 사본을 한 개 가지고 있다면, 자식들이 그 유전자를 갖게 될 확률은 50%이다. 두 사람의 혈연자가 한 개의 유전자를 공유할 확률을 근연도.. 2021. 7. 20.
티스토리 Disqus 댓글 연동 오류 해결하기 나는 현재 블로그에 Disqus 댓글 시스템을 이용중이다. 티스토리 플랫폼에 독립적으로 Disqus 엔진을 사용하면 SNS 계정 연동이나 Notification 등의 이점이 있어 사용해왔는데, 분명히 블로그에 달린 Disqus 댓글이 블로그에서 조회시 보이지 않는 문제가 있었다. Disqus 홈에서 아래와 같이 분명히 보이는 댓글이 실제 페이지에 들어가서 확인해보면, 위와 같이 아무것도 보이지 않는 것이 아닌가. 구글링 끝에 문제의 원인을 찾았는데, 이유는 크게 두가지로 볼 수 있다. 1) 내 블로그에서 사용하는 1차 도메인(algolstudy.tistory.com)과 2차 도메인(bloofer.net)이 따로 리디렉션 없이 혼재된 것 2) Disqus 시스템의 도메인을 활용한 댓글 정보 연동방식(내 블.. 2021. 7. 20.
[블로그 개발 기록-5] .kr 도메인 구매 및 certbot HTTPS 인증서 설치 .kr 도메인 구매 고정 IP만으로 블로그를 운영할 수 없기에 필요에 따라 도메인을 구매하게 되었다. 구매한 도메인을 아마존 Lightsail 가상서버에 적용하는 방법은 다음과 같다. 먼저 계정설정의 네트워킹 항목에 접근한다. 그리고 나의 인스턴스에 해당하는 DNS 레코드에 구매한 도메인을 연결해준다. A 레코드를 선택, 하위 도메인은 @.내도메인을 입력하고 나의 고정 IP와 연동한다. 이후, Lightsail을 사용하여 도메인에 대한 DNS 레코드를 관리하기 위해 아마존에서 제공하는 네임서버를 사용하여 도메인 정보를 알려야한다. 나의 경우 hosting.kr에서 도메인을 구매하여 홈페이지 내 구매한 도메인의 DNS 서버를 아래와 같이 등록하였다. 아마존 네임서버 4개를 모두 등록한 후 5분 정도 이후 .. 2021. 7. 14.
[블로그 개발 기록-4] Bootstrap 테마를 이용한 반응형 블로그 만들기 Bootstrap 무료 테마 이용하기 Start Bootstrap 페이지에서는 양질의 Bootstrap 테마 페이지를 무료로 제공한다. 여기서, 유료 테마를 구매해도 되지만 무료를 사용하여 틀을 잡고 이후 내맘대로 꾸며보고자 한다. 나는 아래 링크의 Clean Blog 테마를 사용하였다. Jekyll 기반의 깔끔한 블로그형 테마가 마음에 들었다. https://github.com/startbootstrap/startbootstrap-clean-blog StartBootstrap/startbootstrap-clean-blog A clean Bootstrap blog theme created by Start Bootstrap - StartBootstrap/startbootstrap-clean-blog git.. 2021. 7. 13.