전체 글
Happy Hacking!
-
들어가면서 사내에서 사용하는 함수 중 @redis_cache라는 함수가 있다. 함수의 FQCN과 input을 기억해놓고 캐싱하는 역할의 함수이다. 이 함수를 사용하는데, 자꾸만 TypeError가 발생했다. TypeError라고 해서 인자 타입이 잘못된 것인줄 알았는데 Python의 TypeError는 호출하려는 함수의 시그니처가 다를 경우 발생하기도 한다. @redis_cache def get_feeds(feed_pk: int) { ... } Python에서는 시그니처 검사시 타입을 검사하지 않고 인수의 수만 검사한다. 동적 언어기 때문에 식별자에 담긴 타입이 언제든지 변할 수 있고, 참조값을 저장하기 때문에 타입 검사가 의미 없기 때문이다. 실제로 feed_pk에서 타입 힌팅을 int로 주고 있지만 ..
Python Decorator 선언시 호출하지 않으면 TypeError 발생했던 이유들어가면서 사내에서 사용하는 함수 중 @redis_cache라는 함수가 있다. 함수의 FQCN과 input을 기억해놓고 캐싱하는 역할의 함수이다. 이 함수를 사용하는데, 자꾸만 TypeError가 발생했다. TypeError라고 해서 인자 타입이 잘못된 것인줄 알았는데 Python의 TypeError는 호출하려는 함수의 시그니처가 다를 경우 발생하기도 한다. @redis_cache def get_feeds(feed_pk: int) { ... } Python에서는 시그니처 검사시 타입을 검사하지 않고 인수의 수만 검사한다. 동적 언어기 때문에 식별자에 담긴 타입이 언제든지 변할 수 있고, 참조값을 저장하기 때문에 타입 검사가 의미 없기 때문이다. 실제로 feed_pk에서 타입 힌팅을 int로 주고 있지만 ..
2024.02.04 -
들어가기 앞서 인프런 강의 MySQL 성능 최적화 강의를 들으면서 들었던 생각, 궁금한 내용 등을 정리한 글입니다 https://www.inflearn.com/course/mysql-%EC%84%B1%EB%8A%A5-%EC%B5%9C%EC%A0%81%ED%99%94/dashboard MySQL 성능 최적화 강의 - 인프런 라인, 구글, 당근, 카카오 등의 회사에서 실제로 MySQL 성능을 개선한 사례들을 배워볼거에요. 단순한 성능 최적화 가이드를 떠나서 MySQL 의 내부 동작을 이해하고, 효율적으로 쓰는 방법에 대해 www.inflearn.com Q: 공부하면서 제가 궁금함을 느꼈던 부분입니다 P: 전에 알고 있었던 개념 / 키워드 등에 대해 다시 찾아보고 정리한 부분입니다 Multiple-Column..
MySQL 성능 최적화 섹션 1 ~ 3들어가기 앞서 인프런 강의 MySQL 성능 최적화 강의를 들으면서 들었던 생각, 궁금한 내용 등을 정리한 글입니다 https://www.inflearn.com/course/mysql-%EC%84%B1%EB%8A%A5-%EC%B5%9C%EC%A0%81%ED%99%94/dashboard MySQL 성능 최적화 강의 - 인프런 라인, 구글, 당근, 카카오 등의 회사에서 실제로 MySQL 성능을 개선한 사례들을 배워볼거에요. 단순한 성능 최적화 가이드를 떠나서 MySQL 의 내부 동작을 이해하고, 효율적으로 쓰는 방법에 대해 www.inflearn.com Q: 공부하면서 제가 궁금함을 느꼈던 부분입니다 P: 전에 알고 있었던 개념 / 키워드 등에 대해 다시 찾아보고 정리한 부분입니다 Multiple-Column..
2024.01.27 -
들어가면서 최근 회사에서 Django를 만지면서, 또 핸즈온 장고라는 책을 읽으면서 ORM 자체에 대한 이해도도 늘었다. (Django ORM을 공부하면서 JPA 실력이 는 기분이라니...) 이번 기회에 내가 새롭게 느낀 것들에 대해서 이야기 해보려 한다 N + 1 문제에 대한 오해 이전에는 N + 1 문제 발생의 원인이 단순히 기술적 한계라고 생각했고, 다른 한 편으로는 그렇게 그 이유에 대해 뭉뚱그려서 생각하니까 복잡한 것이라 생각했고, 해결하기 복잡한 것이라 생각했다. 이 생각은 사실 저번주 까지도 유효했고, 이번에 처리한 티켓에서 N+1 문제를 해결하면서 성능을 많이 이끌어 내면서 아 N + 1 이란게 RDBMS 구조상 당연히 일어나는 것이고 별로 어려운 문제도 아님을 느끼게 되었다. 우선 내가 ..
3주간 Django ORM 써보면서 느낀 점들어가면서 최근 회사에서 Django를 만지면서, 또 핸즈온 장고라는 책을 읽으면서 ORM 자체에 대한 이해도도 늘었다. (Django ORM을 공부하면서 JPA 실력이 는 기분이라니...) 이번 기회에 내가 새롭게 느낀 것들에 대해서 이야기 해보려 한다 N + 1 문제에 대한 오해 이전에는 N + 1 문제 발생의 원인이 단순히 기술적 한계라고 생각했고, 다른 한 편으로는 그렇게 그 이유에 대해 뭉뚱그려서 생각하니까 복잡한 것이라 생각했고, 해결하기 복잡한 것이라 생각했다. 이 생각은 사실 저번주 까지도 유효했고, 이번에 처리한 티켓에서 N+1 문제를 해결하면서 성능을 많이 이끌어 내면서 아 N + 1 이란게 RDBMS 구조상 당연히 일어나는 것이고 별로 어려운 문제도 아님을 느끼게 되었다. 우선 내가 ..
2024.01.20 -
이 글은 이 책의 내용을 요약하는 것이 아닌, 읽으면서 어떤 생각이 들었던 부분들에 대해 적은 글입니다. Chapter 2. 파이썬이 프로그램을 실행하는 방법 "파이썬에서 컴파일러는 항상 런타임에 나타나며, 프로그램을 실행시키는 시스템의 일부다." -p. 41 파이썬도 컴파일을 한다. 그런데 미리 해두고 사용하는 것이 아니라, import 문을 읽는 시점에 해당 소스를 컴파일한다. 이때 컴파일해서 나온 파일이 .pyc인데, 파이썬 바이트코드 형태로 쓰여져 있다. 그렇다면 같은 파일을 import할 때마다 매번 컴파일할까? 그건 아니다. 컴파일하기 전에 버전을 체크해서 이 소스가 이미 컴파일된 것은 아닌지, 컴파일된 이후에 변경점은 있는지를 체크한다. 여기서 들었던 생각은 2가지가 있다. 1. 확실히 빌드..
러닝 파이썬 읽으며 들었던 생각들 chapter1에서 4까지이 글은 이 책의 내용을 요약하는 것이 아닌, 읽으면서 어떤 생각이 들었던 부분들에 대해 적은 글입니다. Chapter 2. 파이썬이 프로그램을 실행하는 방법 "파이썬에서 컴파일러는 항상 런타임에 나타나며, 프로그램을 실행시키는 시스템의 일부다." -p. 41 파이썬도 컴파일을 한다. 그런데 미리 해두고 사용하는 것이 아니라, import 문을 읽는 시점에 해당 소스를 컴파일한다. 이때 컴파일해서 나온 파일이 .pyc인데, 파이썬 바이트코드 형태로 쓰여져 있다. 그렇다면 같은 파일을 import할 때마다 매번 컴파일할까? 그건 아니다. 컴파일하기 전에 버전을 체크해서 이 소스가 이미 컴파일된 것은 아닌지, 컴파일된 이후에 변경점은 있는지를 체크한다. 여기서 들었던 생각은 2가지가 있다. 1. 확실히 빌드..
2024.01.13 -
공부한 이유 Java나 Kotlin으로 코딩할 때는 메서드 오버라이딩을 자주 한다. 특히 많이 쓰는 경우는 1. 주 / 부생성자를 생성할 때 2. 테스트하기 쉽도록 인자를 쪼갤 때다 테스트하기 쉽도록 쪼갠다는 건 무슨 의미냐면, 예를 들어 다음과 같은 코드가 있을 수 있을 수 있다 void go(RandomNumberGenerator randomNumberGenerator) { if (randomNumberGenerator.get() > 5) { this.state++; } } 위와 같은 코드에서 테스트 하고싶은 관심사는 RandomNumberGenerator.get()이 아니라, 5 이상일 때 state++하는 로직이다. 위와 같은 코드에서 인터페이스를 뽑아서 해결할 수도 있지만 나는 다음과 같은 식으..
Python에서 메서드 오버로딩하기공부한 이유 Java나 Kotlin으로 코딩할 때는 메서드 오버라이딩을 자주 한다. 특히 많이 쓰는 경우는 1. 주 / 부생성자를 생성할 때 2. 테스트하기 쉽도록 인자를 쪼갤 때다 테스트하기 쉽도록 쪼갠다는 건 무슨 의미냐면, 예를 들어 다음과 같은 코드가 있을 수 있을 수 있다 void go(RandomNumberGenerator randomNumberGenerator) { if (randomNumberGenerator.get() > 5) { this.state++; } } 위와 같은 코드에서 테스트 하고싶은 관심사는 RandomNumberGenerator.get()이 아니라, 5 이상일 때 state++하는 로직이다. 위와 같은 코드에서 인터페이스를 뽑아서 해결할 수도 있지만 나는 다음과 같은 식으..
2023.12.30 -
Engineering Ladders? SW 엔지니어링 매니저들이 직속 부하와 함께 포지션별 기대치에 관한 커리어 사다리에서 다음 단계를 위해 이야기해볼 수 있도록 도와주는 프레임워크다. https://zenyr.github.io/engineeringladders/ko/ 소개 A framework for Engineering Managers zenyr.github.io 위 블로그에서 참고해서 직접 해볼 수도 있다. 최근 지인이 본인이 그리고 싶은 커리어를 위해 자신이 어떤 역량을 키워야 할지 도움을 준다고 해서 해보았다. 여기서 역량 기준은 최근에 합격한 인턴 회사를 기준으로 내가 낼 수 있는 퍼포먼스를 (나름) 객관적으로 체크했다. 그러다 보니 전반적으로 점수가 다 낮게 나왔는데 이게 자신감 / 자존감이..
내 Engineering LaddersEngineering Ladders? SW 엔지니어링 매니저들이 직속 부하와 함께 포지션별 기대치에 관한 커리어 사다리에서 다음 단계를 위해 이야기해볼 수 있도록 도와주는 프레임워크다. https://zenyr.github.io/engineeringladders/ko/ 소개 A framework for Engineering Managers zenyr.github.io 위 블로그에서 참고해서 직접 해볼 수도 있다. 최근 지인이 본인이 그리고 싶은 커리어를 위해 자신이 어떤 역량을 키워야 할지 도움을 준다고 해서 해보았다. 여기서 역량 기준은 최근에 합격한 인턴 회사를 기준으로 내가 낼 수 있는 퍼포먼스를 (나름) 객관적으로 체크했다. 그러다 보니 전반적으로 점수가 다 낮게 나왔는데 이게 자신감 / 자존감이..
2023.12.22