<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>만년 꼴지 공대생 세상 이야기</title>
    <link>https://ojt90902.tistory.com/</link>
    <description>여행 정보, 건강 정보, 그리고 다양한 정보를 다룹니다.</description>
    <language>ko</language>
    <pubDate>Wed, 15 Apr 2026 00:07:51 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>ChickenChickenLove</managingEditor>
    <item>
      <title>Kafka Producer Transaction 관련 정리</title>
      <link>https://ojt90902.tistory.com/1908</link>
      <description>들어가기 전
이 글은 Kafka Producer Transaction이 동작하는 방식에 대해 Producer Client의 내부 코드를 확인하며 어떻게 동작하는지를 정리한 글입니다. 틀린 부분은 언제나 조언 환영합니다.
이 글에서 사용된 코드는 apach Kafka 4.3.0-SNAPSHOT 버전의 trunk 브랜치를 기준으로 작성되었습니다.&amp;nbsp;

&amp;nbsp;
Producer Transaction 관련 API

initTransactions()
..</description>
      <category>Kafka eco-system/Kafka</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1908</guid>
      <comments>https://ojt90902.tistory.com/1908#entry1908comment</comments>
      <pubDate>Wed, 31 Dec 2025 13:43:00 +0900</pubDate>
    </item>
    <item>
      <title>Rust : 클로저 (Closure)</title>
      <link>https://ojt90902.tistory.com/1824</link>
      <description>들어가기 전
이 글은 프로그래밍 러스트를 공부하며 작성한 글입니다.
&amp;nbsp;

간단 요약

클로저

클로저는 익명 함수다. 따라서 각 클로저마다 서로 다른 별개의 타입을 가진다.
클로저는 값을 캡쳐할 수 있고, 다른 함수에게 인자로 전달될 수 있다.


클로저의 종류 (메모리 관점)

포착 클로저 : 변수가 캡쳐되기 때문에 스택 프레임에서 구조체 형식으로 관리됨.
비포착 클로저 : 컴파일러가 함수 포인터처럼 변경해 줌.&amp;nbsp;


클로저의 종류
..</description>
      <category>프로그래밍 언어/Rust</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1824</guid>
      <comments>https://ojt90902.tistory.com/1824#entry1824comment</comments>
      <pubDate>Sun, 13 Jul 2025 13:28:19 +0900</pubDate>
    </item>
    <item>
      <title>Stateless ACL vs Stateful ACL</title>
      <link>https://ojt90902.tistory.com/1879</link>
      <description>들어가기 전
트래픽에 대한 ACL을 관리하는 모델로는 크게 Stateless ACL과 Stateful ACL이 존재한다. 이 게시글에서는 개발자 관점에서 해당 토픽에 대해 비교해서 알아보려고 한다.

Stateful ACL
Stateful ACL은 특정 패킷이 들어왔을 때 패킷을 처리할 때의 '상태'를 기억하고, 다음에 들어오는 패킷을 처리할 때 이전에 기억해두었던 '상태'를 바탕으로 패킷을 처리하는 모델을 의미한다.&amp;nbsp;

Stateful ACL..</description>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1879</guid>
      <comments>https://ojt90902.tistory.com/1879#entry1879comment</comments>
      <pubDate>Sun, 6 Jul 2025 00:30:05 +0900</pubDate>
    </item>
    <item>
      <title>TroubleShooting : OOM in Pod</title>
      <link>https://ojt90902.tistory.com/1857</link>
      <description>상황

플랫폼 A의 k8s에서 플랫폼 B의 k8s로 옮기는 작업 도중에 발생함.
Pod A에서는 컨테이너 A1, A2가 존재함.

컨테이너 A1 : 메인 컨테이너. CLI Management를 위한 컨테이너다. 그리고 파이썬 Daemon Process가 하나 가동중이다.
컨테이너 A2 : 인증정보를 업데이트 하기 위한 Sidecar




문제
$ k get pod
NAME                           READY   STATUS    ..</description>
      <category>프로그래밍 삽질/디버깅</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1857</guid>
      <comments>https://ojt90902.tistory.com/1857#entry1857comment</comments>
      <pubDate>Thu, 3 Apr 2025 18:16:06 +0900</pubDate>
    </item>
    <item>
      <title>Distributed Consensus Algorithm : RAFT 합의 알고리즘</title>
      <link>https://ojt90902.tistory.com/1855</link>
      <description>들어가기 전
이 글은 RAFT 알고리즘 논문을 공부하며 개인적으로 정리한 글입니다. 틀린 부분이 있을 수 있으니 이해에 참고만 하시고, 피드백 주실만한 부분은 언제든 댓글로 부탁드립니다.&amp;nbsp;

알고리즘 논문
 erlang으로 구현한 학습용 코드

&amp;nbsp;

1. RAFT Introduction
Consensus 알고리즘은 여러 노드로 구성된 클러스터에서 일부 노드가 장애를 겪고 있더라도, 클러스터가 일관된 상태로 잘 동작할 수 있도록 지원한다..</description>
      <category>Distributed System</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1855</guid>
      <comments>https://ojt90902.tistory.com/1855#entry1855comment</comments>
      <pubDate>Sun, 9 Mar 2025 22:50:44 +0900</pubDate>
    </item>
    <item>
      <title>Distributed Membership Protocol : HyParView 프로토콜</title>
      <link>https://ojt90902.tistory.com/1839</link>
      <description>들어가기 전
이 글은 다음 포스팅을 참고하여 공부하며 작성한 글입니다. erlang으로 구현된 학습용 코드는 이곳에서 확인할 수 있습니다.

1. 시작
이전 게시글에서 간단하고 직관적인 멤버쉽 프로토콜인 SWIM을 공부했다. 그러나 초기 SWIM 프로토콜은 Full Membership을 유지하기 때문에 규모가 큰 클러스터로의 확장은 상대적으로 제한된다. 이번 글에서는 HyParView(Hybrid Partial View) 프로토콜을 다룬다. HyParV..</description>
      <category>Distributed System</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1839</guid>
      <comments>https://ojt90902.tistory.com/1839#entry1839comment</comments>
      <pubDate>Sat, 15 Feb 2025 16:38:11 +0900</pubDate>
    </item>
    <item>
      <title>Distributed Gossip Protocol : Plum tree 프로토콜</title>
      <link>https://ojt90902.tistory.com/1840</link>
      <description>들어가기 전
이 글은 다음&amp;nbsp;블로그 글을 보고 공부하며 작성한 글입니다. 이 글에서 다룰 plum tree는 Gossip Protocol이지만, 특정 클러스터 내에서 함께 동작하기 때문에 최종적으로는 Distributed Membership Protocol에 Integrated 되는 형태로 작성될 것입니다. 이 블로그에서 작성한 Distributed Membership Protocol은 다음 글들을 참고해주세요.

SWIM Membership p..</description>
      <category>Distributed System</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1840</guid>
      <comments>https://ojt90902.tistory.com/1840#entry1840comment</comments>
      <pubDate>Fri, 14 Feb 2025 07:01:13 +0900</pubDate>
    </item>
    <item>
      <title>Distributed Membership Protocol : SWIM 프로토콜</title>
      <link>https://ojt90902.tistory.com/1683</link>
      <description>들어가기 전

이 글은 이 블로그 글을 참고로 학습한 글입니다.
원글은 SWIM 프로토콜을 F#으로 구현한 코드를 제공합니다.
이 글에서는 erlang으로 SWIM 프로토콜을 구현하였으며, 원글에서는 구현되지 않았던 suspect - alive 반박, SWIM 프로토콜 메세지 사이의 동시성 문제를 해결하기 위해 Incarnation을 고려한 코드를 추가했습니다.&amp;nbsp;
제가 구현한 코드는 이곳에 있습니다.&amp;nbsp;

&amp;nbsp;

1. 클러스터란 ..</description>
      <category>Distributed System</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1683</guid>
      <comments>https://ojt90902.tistory.com/1683#entry1683comment</comments>
      <pubDate>Fri, 31 Jan 2025 15:19:04 +0900</pubDate>
    </item>
    <item>
      <title>Rust Chapter11: Trait</title>
      <link>https://ojt90902.tistory.com/1836</link>
      <description>들어가기 전&amp;nbsp;
이 글은 프로그래밍 러스트 책을 공부하고 정리한 글입니다.&amp;nbsp;

요약

Trait은 인터페이스 의미를 가짐. Type은 Struct, i32 같은 것들을 의미함.

Trait을 타입으로 사용할 수 없다. Trait 자체가 타입이 아니기 때문이다.
Trait을 타입과 연관해서 사용하고 싶다면 다음 방법이 있다.

제네릭 Bound - 성능이 중요하고, 컴파일 시점에 타입이 정해져도 되는 경우.
Trait Object - 여러..</description>
      <category>프로그래밍 언어/Rust</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1836</guid>
      <comments>https://ojt90902.tistory.com/1836#entry1836comment</comments>
      <pubDate>Sat, 25 Jan 2025 17:30:55 +0900</pubDate>
    </item>
    <item>
      <title>Rust Chapter9 : Struct</title>
      <link>https://ojt90902.tistory.com/1834</link>
      <description>들어가기 전
이 글은 프로그래밍 러스트 2판을 공부하며 작성한 글입니다.&amp;nbsp;
&amp;nbsp;

9. 스트럭트 (Struct)

Struct 자바, 파이썬에서 제공하는 클래스와 거의 유사한 개념이다.
Struct는 크게 다음 세 종류가 존재한다.

필드형 Struct : 주로 많이 사용함.
튜플형 Struct : 타입 검사를 좀 더 Strict 하게 하기 위해 NewType을 생성할 때 주로 사용.
유닛형 Struct : 주로 Trait과 함께 사용할..</description>
      <category>프로그래밍 언어/Rust</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1834</guid>
      <comments>https://ojt90902.tistory.com/1834#entry1834comment</comments>
      <pubDate>Sat, 4 Jan 2025 23:23:01 +0900</pubDate>
    </item>
    <item>
      <title>Rust : 레퍼런스(Reference)</title>
      <link>https://ojt90902.tistory.com/1830</link>
      <description>들어가기 전
이 글은 Oreily에서 나온 프로그래밍 러스트를 공부하며 작성한 글입니다.
&amp;nbsp;

레퍼런스란?

스마트 포인터 : 소유권을 가지는 포인터다. 스마트 포인터가 해제되는 시점에 포인터가 가리키는 값도 해제된다.
레퍼런스 : 소유권을 가지지 않는 포인터다. 소유권은 Borrow 된다.&amp;nbsp;

레퍼런스 특징

레퍼런스는 자신이 가리키는 대상보다 오래 살아있으면 안됨. 레퍼런스가 안전하게 살아있을 수 있는 범위를 라이프타임이라고 함.&amp;..</description>
      <category>프로그래밍 언어/Rust</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1830</guid>
      <comments>https://ojt90902.tistory.com/1830#entry1830comment</comments>
      <pubDate>Sat, 21 Dec 2024 18:12:38 +0900</pubDate>
    </item>
    <item>
      <title>Rust : 소유와 이동</title>
      <link>https://ojt90902.tistory.com/1828</link>
      <description>들어가기 전
이 글은 프로그래밍 러스트(Oreilly)를 공부하며 작성한 글입니다.
&amp;nbsp;

소유권 (Ownership)

러스트에서 소유권은 컴파일 시점에 검증된다.&amp;nbsp;
소유권은 아래 메모리 안정성을 위해 러스트 컴파일러가 제공한다.

Dangling Pointer가 없도록 한다.
원하는 시점에 메모리가 해제되도록 한다.


모든 값은 하나의 소유자를 가진다.&amp;nbsp; (Rc, Arc는 복수 소유자가 존재 가능)
소유자는 자신의 구성 요..</description>
      <category>프로그래밍 언어/Rust</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1828</guid>
      <comments>https://ojt90902.tistory.com/1828#entry1828comment</comments>
      <pubDate>Sat, 14 Dec 2024 23:39:47 +0900</pubDate>
    </item>
    <item>
      <title>소켓/파일 디스크립터는 OS에서 메모리를 얼만큼 차지할까?</title>
      <link>https://ojt90902.tistory.com/1807</link>
      <description>들어가기 전
많은 TCP Connection이 생성되면, 파일 디스크립터가 많이 생성되어 서버에 영향을 준다라는 생각을 했다. 그런데 TCP Connection이 1개 생겼을 때 얼마만큼의 리소스를 사용하기 때문에 서버에 영향을 미치는지는 잘 알지 못했다. 이 부분을 잘 이해해보려고 글을 작성한다.&amp;nbsp;
&amp;nbsp;

파일 디스크립터란?&amp;nbsp;
파일 디스크립터는 OS가 프로세스 내에서 파일 / 다른 입출력 자원을 가리키는 역할을 하는 정수값이다..</description>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1807</guid>
      <comments>https://ojt90902.tistory.com/1807#entry1807comment</comments>
      <pubDate>Sun, 1 Sep 2024 11:47:23 +0900</pubDate>
    </item>
    <item>
      <title>TCP, 소켓, 파일 디스크립터는 어떻게 연관되어 있을까?</title>
      <link>https://ojt90902.tistory.com/1805</link>
      <description>들어가기 전
이전 글에서 파일 디스크립터에 대해 알게 되어 공부하던 중 한 가지 의문점이 생겼다. 

TCP 커넥션은 어느 레벨에서 처리가 되는걸까?
서버쪽 소켓은 하나만 열리는데, 수백 대의 클라이언트가 요청을 보내면 서버는 하나의 소켓만으로 모든 읽기 / 쓰기 작업을 처리하는 것일까?
소켓은 어느 레벨에서 관리되는 것일까?

위 질문에 대해서 알고 싶어서 전반적인 내용을 공부하고, 코드로 작성하고 디버깅하면서 실제로 그런지를 확인해보려고 한다.
&amp;n..</description>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1805</guid>
      <comments>https://ojt90902.tistory.com/1805#entry1805comment</comments>
      <pubDate>Sat, 31 Aug 2024 15:53:44 +0900</pubDate>
    </item>
    <item>
      <title>만들면서 익히는 TCP 터널링</title>
      <link>https://ojt90902.tistory.com/1804</link>
      <description>들어가기 전
얼마 전, HTTP/HTTPS Proxy 서버를 만드는 방법 중에는 HTTP의 'CONNECT 메서드'를 이용한 TCP 터널링 방식이 있다는 이야기를 들었다. 그러나 나는 이런 쪽에 지식이 전혀 없어서 알아 들을 수 없었다. 백문이 불여일견이라고 만들어보면서 TCP 터널링이 어떤 개념인지 알아보려고 한다. 이 글에서는 파이썬을 이용해 간단하게나마 구현해보고 개념을 이해해본다.&amp;nbsp;
&amp;nbsp;

HTTP / HTTPS Proxy 서버란..</description>
      <category>ㅅ</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1804</guid>
      <comments>https://ojt90902.tistory.com/1804#entry1804comment</comments>
      <pubDate>Wed, 28 Aug 2024 23:44:14 +0900</pubDate>
    </item>
    <item>
      <title>SSH는 어떻게 동작하는가?</title>
      <link>https://ojt90902.tistory.com/1797</link>
      <description>1. Establish TCP Connection
클라이언트가 서버에게 SSH 요청을 보내면 가장 먼저 서버 - 클라이언트 간의 TCP 연결이 이루어진다. 서버는 주로 Port 22를 listen하고 있고, 클라이언트는 임의의 Port에 바인딩 되어서 TCP Connection이 생성된다. TCP Connection이 생성되면, SSH 세션이 생성된다. 이 SSH 세션 내에서 다음 작업들을 진행하게 될 것이다

세션 초기화
클라이언트 - 서버 키 교환
..</description>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1797</guid>
      <comments>https://ojt90902.tistory.com/1797#entry1797comment</comments>
      <pubDate>Sat, 24 Aug 2024 23:14:44 +0900</pubDate>
    </item>
    <item>
      <title>Pytest Fixture 관련 공부</title>
      <link>https://ojt90902.tistory.com/1772</link>
      <description>Fixture
Fixture는 테스트가 시작하기 전 필요한 인자를 제공하거나, 상태를 정의하는데 사용한다. 예를 들어 다음과 같은 역할에 사용할 수 있다.&amp;nbsp;

SUT를 생성과 협력 관계의 인스턴스를 미리 설정된 조건으로 생성하고 제공한다.&amp;nbsp;
SUT, 혹은 통제할 수 없는 외부 인스턴스의 행동을 미리 지정한다. (Mocking 형태)

&amp;nbsp;

Basic Fixture 생성해보기

class Fruit:
    def __init_..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1772</guid>
      <comments>https://ojt90902.tistory.com/1772#entry1772comment</comments>
      <pubDate>Thu, 27 Jun 2024 17:48:44 +0900</pubDate>
    </item>
    <item>
      <title>HTTP/2 In action : HTTP/2 프로토콜 기초 - HTTP/2인 이유</title>
      <link>https://ojt90902.tistory.com/1766</link>
      <description>들어가기 전
이 글은 HTTP/2 in action 4장을 읽으며 공부한 글입니다.
&amp;nbsp;

4.1 HTTP/1.2가 아니라 HTTP/2인 이유

바이너리 프로토콜 (프레임 기반으로 메세지를 주고 받음)
동기적이 아니라 다중화 (한 커넥션에서 여러 스트림을 보낼 수 있음)&amp;nbsp;
흐름 제어 (TCP 수준이 아니라 HTTP/2 수준)
스트림 우선순위화
헤더 압축 (HTTP/1.1까지는 헤더압축 없음)&amp;nbsp;
서버 푸시

HTTP/2는 HTTP..</description>
      <category>CS/네트워크</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1766</guid>
      <comments>https://ojt90902.tistory.com/1766#entry1766comment</comments>
      <pubDate>Sun, 12 May 2024 23:18:59 +0900</pubDate>
    </item>
    <item>
      <title>c</title>
      <link>https://ojt90902.tistory.com/1747</link>
      <description>https://armeria.dev/docs/server-annotated-service/#parameter-injection Annotated services — Armeria documentationAnnotated services Visit armeria-examples to find a fully working example. Armeria provides a way to write an HTTP service using annotations. ..</description>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1747</guid>
      <comments>https://ojt90902.tistory.com/1747#entry1747comment</comments>
      <pubDate>Tue, 26 Mar 2024 23:09:56 +0900</pubDate>
    </item>
    <item>
      <title>분산 컴퓨팅 10. 벡터 시계와 스냅샷 찍기</title>
      <link>https://ojt90902.tistory.com/1740</link>
      <description>들어가기 전

이 글은 핵심 이론부터 프로그래밍 실습까지 분산 컴퓨팅을 읽고 정리한 글입니다.&amp;nbsp;
몇몇 참고 글도 있습니다.

&amp;nbsp;

요약

분산 시스템의 스냅샷은 프로세스 / 채널 State가 모두 포함됨.
분산 시스템의 스냅샷을 챈디 - 램포트 알고리즘을 통해서 작성할 수 있음.&amp;nbsp;
챈디 - 램포트 알고리즘은 마커를 이용해서 채널의 State를 정확히 기록함.&amp;nbsp;

&amp;nbsp;
&amp;nbsp;
&amp;nbsp;

10.1 단체 메..</description>
      <category>Distributed System</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1740</guid>
      <comments>https://ojt90902.tistory.com/1740#entry1740comment</comments>
      <pubDate>Sun, 17 Mar 2024 21:00:11 +0900</pubDate>
    </item>
    <item>
      <title>분산 컴퓨팅 3. 시간 동기화 문제와 논리적 시계 (램포트 시계)</title>
      <link>https://ojt90902.tistory.com/1738</link>
      <description>들어가기 전

이 글은 핵심 이론부터 프로그래밍 실습까지 분산 컴퓨팅을 읽고 정리한 글입니다.&amp;nbsp;
몇몇 참고 글도 있습니다.


요약

분산 시스템의 참여자들은 시간 동기화가 되어야 하는 경우가 많음.
분산 시스템에서 시간 동기화가 이루어지지 않는다면, Data Inconsistency가 발생할 수 있음.
분산 시스템의 완전한 시간 동기화는 '절대적 시간' 기준으로는 달성하기 어려움.&amp;nbsp;
분산 시스템의 시간 동기화는 '램포트 시계'를 기준..</description>
      <category>Distributed System</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1738</guid>
      <comments>https://ojt90902.tistory.com/1738#entry1738comment</comments>
      <pubDate>Sun, 17 Mar 2024 13:32:28 +0900</pubDate>
    </item>
    <item>
      <title>분산 컴퓨팅 2. 중재자와 2단계 커밋 프로토콜</title>
      <link>https://ojt90902.tistory.com/1734</link>
      <description>들어가기 전

이 글은 핵심 이론부터 프로그래밍 실습까지 분산 컴퓨팅을 읽고 정리한 글입니다.&amp;nbsp;

&amp;nbsp;
&amp;nbsp;
핵심 요약
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;

2.1 계좌 이체 문제
A &amp;rarr; B로 1,000원을 이체하는 경우를 고려해보자. 이를 위해서는 다음 두 가지 동작이 원자적으로 일어나야 한다.

A 계좌에서 1,000원 감소.
B 계좌에서 1,000원 증가&amp;nbsp;

A, B가 서로 직접 소통하는 경우에는 이 작업..</description>
      <category>Distributed System</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1734</guid>
      <comments>https://ojt90902.tistory.com/1734#entry1734comment</comments>
      <pubDate>Sun, 10 Mar 2024 22:53:10 +0900</pubDate>
    </item>
    <item>
      <title>분산 컴퓨팅 1. 분산 컴퓨팅이란 무엇인가?</title>
      <link>https://ojt90902.tistory.com/1735</link>
      <description>들어가기 전

이 글은 핵심 이론부터 프로그래밍 실습까지 분산 컴퓨팅을 읽고 정리한 글입니다.&amp;nbsp;

&amp;nbsp;

요약

분산된 서버들끼리 네트워크 상에서 메세지를 주고 받으며 작업하는 것을 분산 컴퓨팅이라고 함.&amp;nbsp;
비동기 통신은 네트워크를 통해서 보내진 메세지가 정해진 시간 내에 상대 서버에 전달되는 것을 보장할 수 없음을 의미함.&amp;nbsp;
비동기 통신으로 메세지를 주고 받는 두 서버는 완전한 합의에 이를 수 없음. (무한히 상대방의..</description>
      <category>Distributed System</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1735</guid>
      <comments>https://ojt90902.tistory.com/1735#entry1735comment</comments>
      <pubDate>Sun, 10 Mar 2024 22:40:11 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 40. super로 부모 클래스를 초기화 하라.</title>
      <link>https://ojt90902.tistory.com/1732</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다.
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item40

&amp;nbsp;

요약

파이썬에서는 부모 클래스가 자동으로 초기화 되지 않는다. 
다중 상속보다는 믹스인 클래스로 합성해라.&amp;nbsp;
다중 상속을 사용할 경우, 메서드의 실행 순서는 mro를 따른다. (Class.mro() 호출한 순서대로 메서드..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1732</guid>
      <comments>https://ojt90902.tistory.com/1732#entry1732comment</comments>
      <pubDate>Mon, 26 Feb 2024 22:57:55 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 66. 재사용 가능한 try/finally 동작을 원한다면 contextlib과 with문을 사용하라.</title>
      <link>https://ojt90902.tistory.com/1733</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다.&amp;nbsp;
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item66

&amp;nbsp;

요약

contextlib.contextmanager 데코레이터를 이용하면 __enter__, __exit__ 구현없이 with 절에서 사용할 수 있음.&amp;nbsp;
with 절은 with절 블록 안과 밖을 격리시키는 역할..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1733</guid>
      <comments>https://ojt90902.tistory.com/1733#entry1733comment</comments>
      <pubDate>Tue, 20 Feb 2024 23:33:44 +0900</pubDate>
    </item>
    <item>
      <title>erlang : 여러 Case / If 문이 내포되었을 때 복잡도 감소?</title>
      <link>https://ojt90902.tistory.com/1718</link>
      <description>요약

중첩 Case 문을 사용하는 것은 코드를 읽기 어렵게 만듦.&amp;nbsp;
중첩 Case 문의 컨텍스트를 유지할 필요가 없다면, Case문에 Case를 중첩하지 말고 메서드로 빼서 Flat한 Case를 만드는 것이 좋을 것으로 판단됨.&amp;nbsp;


함수로 풀어내기
이 코드는 리트코드 72번 문제를 풀면서 작성한 코드다.&amp;nbsp;
sol(_, _, I1, I2, DP) when I1 == 0 orelse I2 == 0-&amp;gt;
  {abs(I2-I..</description>
      <category>프로그래밍 언어/erlang</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1718</guid>
      <comments>https://ojt90902.tistory.com/1718#entry1718comment</comments>
      <pubDate>Tue, 20 Feb 2024 21:42:09 +0900</pubDate>
    </item>
    <item>
      <title>erlang : 코테 풀면서 문법 정리</title>
      <link>https://ojt90902.tistory.com/1691</link>
      <description>1. 가드 절에는 다양한 함수가 올 순 없음
가드 절에서는 사용자 정의 함수를 사용할 수는 없다. 가드 절에서 사용할 수 있도록 정의된 몇몇 함수만 호출할 수 있다.
&amp;nbsp;
2. If 절에서 마지막 부분은 항상 true로 처리
case ... of 문을 이용할 때, '아무거나 와도 상관없음'을 '_'로 표현했지만, If절은 'true'로 처리한다. If절은 패턴 매칭이 아니라 true / false를 판단하기 때문인 듯.&amp;nbsp;
&amp;nbsp;
3..</description>
      <category>프로그래밍 언어/erlang</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1691</guid>
      <comments>https://ojt90902.tistory.com/1691#entry1691comment</comments>
      <pubDate>Mon, 19 Feb 2024 23:41:00 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 37. 내장 타입을 여러 단계로 내포시키기보다는 클래스를 합성하라.</title>
      <link>https://ojt90902.tistory.com/1719</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다.
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item37

&amp;nbsp;

요약

딕셔너리, 긴 튜플이 여러 Depth로 내포되는 경우 클래스로 분리해 가독성 확보, 캡슐화를 하는 것이 필수다.

&amp;nbsp;

Item 37. 내장 타입을 여러 단계로 내포시키기보다는 클래스를 합성하라.
파이썬은 딕셔너리 ..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1719</guid>
      <comments>https://ojt90902.tistory.com/1719#entry1719comment</comments>
      <pubDate>Sat, 17 Feb 2024 18:45:08 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 3.11에 추가된 것들 살펴보기</title>
      <link>https://ojt90902.tistory.com/1731</link>
      <description>&amp;nbsp;
참고

https://docs.python.org/ko/3.11/whatsnew/3.11.html

&amp;nbsp;
&amp;nbsp;

TypedDict에 Required / Non-Required 인자 추가&amp;nbsp;
from typing import TypedDict, Required, NotRequired

class Movie(TypedDict):
   title: str
   year: NotRequired[int]

m1: Movie = ..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1731</guid>
      <comments>https://ojt90902.tistory.com/1731#entry1731comment</comments>
      <pubDate>Sat, 17 Feb 2024 17:53:19 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 41. 기능을 합성할 때는 믹스인 클래스를 사용하라</title>
      <link>https://ojt90902.tistory.com/1727</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item41

&amp;nbsp;

요약

믹스인 클래스는 다음을 의미함.

공통으로 사용할 메서드만 몇개 구현함.&amp;nbsp;
믹스인 클래스는 멤버 변수가 없음. 따라서 __init__()를 구현할 필요가 없음.&amp;nbsp;


파이썬의 다중상속은 디버깅에 어려움을 가져..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1727</guid>
      <comments>https://ojt90902.tistory.com/1727#entry1727comment</comments>
      <pubDate>Fri, 16 Feb 2024 00:00:10 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 51. 합성 가능한 클래스 확장이 필요하면 메타클래스보다는 클래스 데코레이터를 사용하라.</title>
      <link>https://ojt90902.tistory.com/1730</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다.
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item51

&amp;nbsp;

요약

클래스 데코레이터는 class 인스턴스를 파라미터로 받아서 이 클래스를 변경한 클래스나 새로운 클래스를 반환해주는 간단한 함수다.
준비 코드를 최소화하면서 클래스 내부의 모든 메서드나 어트리뷰트를 변경하고 싶을 때, 클레스 ..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1730</guid>
      <comments>https://ojt90902.tistory.com/1730#entry1730comment</comments>
      <pubDate>Mon, 12 Feb 2024 17:03:28 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 47. 지연 계산 어트리뷰트가 필요하면 __getattr__, __getattribute__, __setattr__을 사용하라</title>
      <link>https://ojt90902.tistory.com/1728</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다.&amp;nbsp;
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item47

&amp;nbsp;

요약

인스턴스 어트리뷰트에 접근(hello.value, hasattr 등)하면 항상 __getattribute__() 메서드가 호출됨.&amp;nbsp;
__getattribute__()를 호출했을 때, 어트리뷰트가 없으면 A..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1728</guid>
      <comments>https://ojt90902.tistory.com/1728#entry1728comment</comments>
      <pubDate>Mon, 12 Feb 2024 00:14:07 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 39. @classmethod를 통해 클래스 다형성을 이용해라.</title>
      <link>https://ojt90902.tistory.com/1726</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item39

&amp;nbsp;

요약

파이썬 클래스에서는 생성자가 __init__ 메서드 뿐이다.
@classmethod를 사용하면 클래스에 다른 생성자를 정의할 수 있다.&amp;nbsp;
클래스 메서드 다형성을 활용하면 여러 구체적인 하위 클래스의 객체를 만들고 연결..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1726</guid>
      <comments>https://ojt90902.tistory.com/1726#entry1726comment</comments>
      <pubDate>Mon, 5 Feb 2024 00:04:33 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 38. 간단한 인터페이스의 경우 클래스 대신 함수를 받아라.</title>
      <link>https://ojt90902.tistory.com/1725</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다.&amp;nbsp;
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item38

&amp;nbsp;

요약

Hook 등에 함수를 전달해야할 때, 상태없는 함수의 경우는 함수를 정의해서 사용하는 것이 좋음.
만약 클로저를 이용해 상태있는 함수를 사용해야 한다면, 함수 대신 클래스를 정의해서 사용하는 것이 좋음. (가독성 ..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1725</guid>
      <comments>https://ojt90902.tistory.com/1725#entry1725comment</comments>
      <pubDate>Sun, 4 Feb 2024 22:24:39 +0900</pubDate>
    </item>
    <item>
      <title>가상 호스트와 SNI</title>
      <link>https://ojt90902.tistory.com/1722</link>
      <description>들어가기 전
istio를 사용할 때 VHOST와 SNI 키워드가 많이 나왔었다. 그런데 내가 이것들에 대해서 정확히 잘 모르고 있어서, 이 부분을 조금 보충해보고 싶어 글을 작성한다.
&amp;nbsp;

가상 호스트 (Virtual Host)
가상 호스트는 하나의 서버를 이용해 여러 서비스를 제공하고자 사용하는 개념이다. 이 때 서버는 Physical Machine 1대가 될 수도 있고, Pod 1개가 될 수도 있고, 컨테이너 1개가 될 수도 있다.&amp;nbsp..</description>
      <category>etc/진짜 잡다</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1722</guid>
      <comments>https://ojt90902.tistory.com/1722#entry1722comment</comments>
      <pubDate>Wed, 31 Jan 2024 19:36:05 +0900</pubDate>
    </item>
    <item>
      <title>DNS : CNAME vs A record</title>
      <link>https://ojt90902.tistory.com/1720</link>
      <description>들어가기 전
어제 회사에서 세미나를 듣는데 DNS의 CNAME, A Record 키워드가 나왔다. 그런데 어떤 내용인지 정확히 알지 못하기 때문에 부족한 지식을 보충하고자 이 글을 작성한다.&amp;nbsp;
&amp;nbsp;

DNS
IP는 192.0.0.1 같은 형식의 숫자 조합이다. 특정 서버의 주소를 의미하는 값이지만, 연관관계 없는 숫자가 나열되어 있는 형식이기 때문에 사람이 외우기 쉽지 않다. IP 주소를 기억하기 쉽도록 이름을 붙여주는 것을 도메인이라고..</description>
      <category>etc/진짜 잡다</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1720</guid>
      <comments>https://ojt90902.tistory.com/1720#entry1720comment</comments>
      <pubDate>Wed, 31 Jan 2024 19:14:16 +0900</pubDate>
    </item>
    <item>
      <title>TLS / mTLS란?</title>
      <link>https://ojt90902.tistory.com/1724</link>
      <description>들어가기 전
mTLS는 kubernetes, istio 같은 것들을 이용할 때 많이 등장하는 키워드다. 그런데 정확히 어떤 내용인지 모르기 때문에 간략히 배경 지식을 알아보자.&amp;nbsp;
&amp;nbsp;

TLS 통신
TLS 통신은 다음과 같이 진행된다.

서버는 자신의 공개키 / 개인키를 만든다.
서버는 인증서에 자신의 공개키를 담아서 배포한다.&amp;nbsp;
클라이언트는 인증서에서 서버의 공개키를 획득한다.&amp;nbsp;
클라이언트는 서버의 공개키를 이용해 랜..</description>
      <category>etc/진짜 잡다</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1724</guid>
      <comments>https://ojt90902.tistory.com/1724#entry1724comment</comments>
      <pubDate>Wed, 31 Jan 2024 18:53:32 +0900</pubDate>
    </item>
    <item>
      <title>얼랭 가드절의 패턴매칭</title>
      <link>https://ojt90902.tistory.com/1717</link>
      <description>&amp;nbsp;
% 두 코드는 같은 패턴 매칭을 의미함.
% 즉, ';'는 'orelse'로 동작
sol(_, _, I1, I2, DP) when I1 == 0 orelse I2 == 0-&amp;gt;
sol(_, _, I1, I2, DP) when I1 == 0; I2 == 0-&amp;gt;


% 두 코드는 같은 패턴 매칭을 의미함.
% 즉, ','는 'andalso'로 동작
sol(_, _, I1, I2, DP) when I1 == 0 andalso I2 == ..</description>
      <category>프로그래밍 언어/erlang</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1717</guid>
      <comments>https://ojt90902.tistory.com/1717#entry1717comment</comments>
      <pubDate>Sun, 21 Jan 2024 23:06:19 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 35. 제네레이터 안에서 throw로 상태를 변화시키지 마라.</title>
      <link>https://ojt90902.tistory.com/1716</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다.
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item35

&amp;nbsp;

요약

throw 메서드를 사용하면 제네레이터가 마지막으로 실행한 yield 식의 위치에서 예외를 다시 발생시킬 수 있음.&amp;nbsp;
throw를 사용하면 가독성이 나빠짐. 예외를 잡아내고 다시 발생시키는 데 준비 코드가 필요하며,..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1716</guid>
      <comments>https://ojt90902.tistory.com/1716#entry1716comment</comments>
      <pubDate>Sun, 21 Jan 2024 22:10:46 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 34. send로 제네레이터에 데이터를 주입하지 마라.</title>
      <link>https://ojt90902.tistory.com/1715</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다.
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item34

&amp;nbsp;

요약

send()를 이용하면 제네레이터에 데이터를 전송할 수 있음. 즉, 제네레이터와 양방향 소통이 가능함.&amp;nbsp;
send() 메서드는 일반적인 이터레이션(For, next())와 다른 방식으로 동작함.&amp;nbsp;

제네레이..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1715</guid>
      <comments>https://ojt90902.tistory.com/1715#entry1715comment</comments>
      <pubDate>Sun, 21 Jan 2024 20:52:15 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 33. yield from을 사용해 여러 제네레이터를 합성하라.</title>
      <link>https://ojt90902.tistory.com/1713</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item33


요약

yield from을 사용하면 여러 제네레이터를 합성해서 하나의 제네레이터를 만들 수 있음.&amp;nbsp;
직접 내포된 제네레이터를 이터레이션하면서 각 제네레이터의 출력을 내보내는 것보다 yield from을 사용하는 것이 성능 면에서 더 좋..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1713</guid>
      <comments>https://ojt90902.tistory.com/1713#entry1713comment</comments>
      <pubDate>Sat, 20 Jan 2024 23:55:05 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 32. 긴 리스트 컴프리헨션보다는 제네레이터 식을 사용하라.</title>
      <link>https://ojt90902.tistory.com/1714</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item32


요약

리스트 컴프리헨션에서 입력이 크면 메모리 문제가 발생할 수 있음.&amp;nbsp;
제네레이터 식은 한 번에 제네레이터가 반환되기 때문에 메모리를 효율적으로 사용할 수 있음.&amp;nbsp;
제네레이터 식에 다른 제네레이터를 내포할 수 있음. 이를 통..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1714</guid>
      <comments>https://ojt90902.tistory.com/1714#entry1714comment</comments>
      <pubDate>Sat, 20 Jan 2024 23:29:53 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 30. 리스트를 반환하기보다는 제너레이터를 사용하라</title>
      <link>https://ojt90902.tistory.com/1711</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다.
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item30

&amp;nbsp;

요약

제네레이터를 사용하면 결과를 리스트에 합쳐서 반환하는 것보다 더 깔끔함.&amp;nbsp;
제네레이터를 사용하면, 결과를 리스트로 반환하는 것에 비해 적은 메모리로 작업 가능함. (OOM Kill 방지)
처음 제네레이터 함수가 호출..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1711</guid>
      <comments>https://ojt90902.tistory.com/1711#entry1711comment</comments>
      <pubDate>Mon, 15 Jan 2024 23:51:06 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 29. 대입식을 사용해 컴프리헨션 안에서 반복작업을 피해라.</title>
      <link>https://ojt90902.tistory.com/1710</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item29

&amp;nbsp;

요약

왈러스 연산자를 이용해 컴프리헨션에서 반복 작업을 제거할 수 있음. 이를 통해 가독성 + 성능 향상이 가능함.&amp;nbsp;
컴프리헨션에서 왈러스 연산자를 통해서 선언된 변수는 컴프리헨션 외부 Scope으로 노출됨. 이 부분을 고..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1710</guid>
      <comments>https://ojt90902.tistory.com/1710#entry1710comment</comments>
      <pubDate>Sun, 14 Jan 2024 19:40:30 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 16. 딕셔너리 Key에 대한 접근은 get을 사용하라.</title>
      <link>https://ojt90902.tistory.com/1709</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item16

&amp;nbsp;

요약

 딕셔너리에 특정 Key에 접근해야하고, 특정 Key가 존재하지 않을 때 기본값을 정의하고 싶다면 항상 get()을 사용해라.&amp;nbsp;
sefdefault를 사용하는 것이 더 좋은 경우가 있다면, defaultdict을 사용..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1709</guid>
      <comments>https://ojt90902.tistory.com/1709#entry1709comment</comments>
      <pubDate>Sun, 14 Jan 2024 18:55:55 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 10. 왈러스 연산자를 이용해 반복을 피하라</title>
      <link>https://ojt90902.tistory.com/1708</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다.&amp;nbsp;
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item10

&amp;nbsp;

요약

왈러스 연산자를 사용해서 대입식 중복을 줄일 수 있음.
왈러스 연산자는 값을 대입 &amp;rarr; 식평가 순서로 처리됨.
왈러스 연산자를 이용해 중복 제거, 무한 루프(While문) 등을 가독성 있게 처리할 수 있음...</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1708</guid>
      <comments>https://ojt90902.tistory.com/1708#entry1708comment</comments>
      <pubDate>Sun, 14 Jan 2024 18:28:57 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 28. 컴프리헨션 내부에는 수식을 2개까지만 써라</title>
      <link>https://ojt90902.tistory.com/1707</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item28

&amp;nbsp;

요약

컴프리헨션 내부에는 식을 2개 까지만 사용해라. (루프문 2개 / 루프문1 + 조건문1..)
컴프리헨션 내부에 2개의 루프식이 있는 경우, 왼쪽부터 실행된다. (이중 For문이라고 생각하면 편함. )


Item 28. 컴프리..</description>
      <category>프로그래밍 언어/파이썬</category>
      <category>상상해보</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1707</guid>
      <comments>https://ojt90902.tistory.com/1707#entry1707comment</comments>
      <pubDate>Sat, 13 Jan 2024 22:37:07 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 45. 어트리뷰트를 리팩토링하는 대신 @property를 사용하라</title>
      <link>https://ojt90902.tistory.com/1706</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다.&amp;nbsp;
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item45 

&amp;nbsp;

요약

특정 어트리뷰트에 요구사항이 추가되고, 이를 호출하는 외부 클라이언트에 영향을 주지 않고 확장하고 싶은 경우 @property는 좋은 선택이 될 수 있음.
@property를 사용해 데이터 모델을 점진적으로 개선..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1706</guid>
      <comments>https://ojt90902.tistory.com/1706#entry1706comment</comments>
      <pubDate>Sat, 13 Jan 2024 22:02:21 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 44. Setter, Getter 대신 Attribute를 사용하라.</title>
      <link>https://ojt90902.tistory.com/1705</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다.&amp;nbsp;
코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item44

&amp;nbsp;

요약

새로운 클래스 인터페이스를 정의할 때, 간단히 public attribute도 시작하고 Setter / Getter를 가급적이면 사용하지 마라.&amp;nbsp;
객체에 있는 Attribute에 접근할 때, 부가 기능이 ..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1705</guid>
      <comments>https://ojt90902.tistory.com/1705#entry1705comment</comments>
      <pubDate>Sat, 13 Jan 2024 17:36:06 +0900</pubDate>
    </item>
    <item>
      <title>Effective Python Item 36. Iterator / Generator를 다룰 때는 itertools를 사용하라</title>
      <link>https://ojt90902.tistory.com/1704</link>
      <description>들어가기 전

이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다.&amp;nbsp;

&amp;nbsp;

1. Itertools 라이브러리&amp;nbsp;
Itertools 라이브러리에는 이터레이터를 위한 몇 가지 기능들이 추가되어있다. 이터레이터와 관련된 코드가 복잡해지는 경우라면, itertools 라이브러리에서 원하는 기능을 지원하는지 살펴보는 것이 좋을 수 있다.
&amp;nbsp;

2. 여러 이터레이터 연결하기&amp;nbsp;
itertools에는 여러 이터레이터를 하나..</description>
      <category>프로그래밍 언어/파이썬</category>
      <author>ChickenChickenLove</author>
      <guid isPermaLink="true">https://ojt90902.tistory.com/1704</guid>
      <comments>https://ojt90902.tistory.com/1704#entry1704comment</comments>
      <pubDate>Sat, 13 Jan 2024 16:43:38 +0900</pubDate>
    </item>
  </channel>
</rss>