좋은 글을 마주치면 북마크처럼 정리해 두는 저장소입니다. 새로운 링크 추가, 카테고리 변경이나 깨진 링크 제거와 같은 PR 모두 환영합니다.
- 함수형 프로그래밍이란?
- What is a pure function?
- Higher-order-function(고차함수) with Kotlin
- Currying
- 함수형 프로그래밍: partial application과 curry
- 람다, 익명 함수, 클로저
- 자바스크립트의 호이스팅(Hoisting)
- 코루틴 소개
- 좋은 함수 만들기 - 부작용과 거리두기
- 좋은 함수 만들기 - 암묵적 입력/출력
- 유닛테스트에 대한 생각
- 코드 커버리지 80% 넘긴 썰 - 테스팅을 잘 하기 위한 8퍼센트 개발팀의 삽질기
- 테스트 코드에서 내부 구현 검증 피하기
- [Jest] 파라미터화 테스트: test.each(), describe.each()
- 단위 테스트(Unit Testing)에서 단위의 경계는 무엇인가? (feat. 고전파와 런던파)
- 단위 테스트 케이스와 테스트 더블(Test Double)
- Classical vs Mockist testing
- Mock Object란 무엇인가?
- Testing Without Mocks: A Pattern Language
- What's the difference between a mock & stub?
- Mocks Aren't Stubs
- 효율적인 테스트를 위한 Stub 객체 사용법
- Exression verses Statement
- Static/Dynamic vs Strong/Weak
- Runtime vs Compile time
- A Python Tutorial To Understanding Scopes and Closures
- Difference between Definition and Declaration
- What is the difference between statically typed and dynamically typed languages?
- What is Short Circuiting?
- 자바스크립트 개발자를 위한 AST
- LLVM 프로젝트
- Advanced C: The UB and optimizations that trick good programmers.
- 난해한 프로그래밍 언어 만들어보기
- The super tiny compiler
- How I wrote a self-hosting C compiler in 40 days
- Building a Programming Language in Twenty-Four Hours
- Repository Design Pattern
- repository pattern vs ORM
- Stop using repository pattern with an ORM
- Don't use DAO, use Repository
- Difference between Repository and Service Layer?
- What is dependency injection?
- Dependency Injection Demystified
- DI 란?
- Dependency Injection in Python
- Inversion of Control Containers and the Dependency Injection pattern
- 의존성 주입에 대한 오해와 진실
- 개발자에게 유용한 법칙, 이론, 원칙, 그리고 패턴들 #hackerlaws
- Why Premature Optimization Is the Root of All Evil
- Why is global state so evil?
- 프론트엔드와 SOLID 원칙
- Red-Green-Refactor
- Clean architectures in Python: a step-by-step example
- Clean Code: 5 Essential Takeaways
- 객체지향 개발 5대 원리: SOLID
- Parametric Polymorphism
- 정적 팩토리 메서드(Static Factory Method)는 왜 사용할까?
- Anti-OOP : if 를 피하고 싶어서
- 제너레이터와 코루틴
- 파이썬 언더스코어(_)에 대하여
- Python getitem과 slice의 이해
- 파이썬의 변수
- 시간 복잡도로 살펴보는 파이썬 내장 자료형의 효율적인 활용
- 리얼월드 메타클래스
- Hidden features of Python
- Strings in Python
- What is __pycache__?
- What is the meaning of single and double underscore before an object name?
- Difference between <type 'generator'> and <type 'xrange'>
- Is there a difference between “raise exception()” and “raise exception” without parenthesis?
- What is the difference between range and xrange functions in Python 2.X?
- List comprehension vs map
- Is PYTHONUNBUFFERED=TRUE a good idea?
- Python equivalent of golang's defer statement
- Python - Disable output buffering
- ignoring backslash character in python
- Nicest way to pad zeroes to a string
- How to re-raise an exception in nested try/except blocks?
- Sort a list by multiple attributes?
- How can the built-in range function take a single argument or three?
- Why True/False is capitalized in Python?
- Why is bool a subclass of int?
- In python, why use logging instead of print?
- Why is the order in dictionaries and sets arbitrary?
- wtfpython
- Python 3.x rounding behavior
- How to round float 0.5 up to 1.0, while still rounding 0.45 to 0.0, as the usual school rounding?
- Behaviour of increment and decrement operators in Python
- Removing duplicates in lists
- Difference between append vs. extend list methods in Python
- 비동기 파이썬
- Intro to Threads and Processes in Python
- 파이썬의 새로운 병렬처리 API – Concurrent.futures
- asyncio : 단일 스레드 기반의 Nonblocking 비동기 코루틴 완전 정복
- What does the “yield from” syntax do in asyncio and how is it different from “await”
- Blocking-NonBlocking-Synchronous-Asynchronous
- 비동기 프로그래밍 동작 원리 (asyncio)
- 비동기적으로 Python 다루기
- 백엔드 개발자들이 알아야할 동시성 6 — Coroutine
- async for 구문의 작동 원리
- Exponentials in python x ** y vs math.pow(x, y)
- Dismissing Python Garbage Collection at Instagram
- Python GIL
- Python GC가 작동하는 원리
- __slots__ magic
- How did Python implement the built-in function pow()?
- Memory Management in Python - Part 3: Object Lifetimes and Garbage Collection
- Performance Analysis of Python’s dict() and {}
- Why Do Python Lists Multiply Oddly? Exploring the CPython Source Code
- Better Python 59 Ways
- The Hitchhiker’s Guide to Python
- Intermediate Python
- A collection of design patterns/idioms in Python
- Writing Python like it's Rust
- Stop using utcnow and utcfromtimestamp
- pipenv란 무엇인가
- pipenv로 Python 프로젝트 관리하기
- Force pipenv to create a new virtualenv
- How to get pipenv running in docker?
- 코드 테스트하기 - The Hitchhiker's Guide to Python
- 테스트에 걸리는 시간을 92% 줄이기
- Advanced Python testing techniques
- How should I verify a log message when testing Python code under nose?
- Assert that logging has been called with specific string
- SQLAlchemy: engine, connection and session difference
- Avoiding boilerplate session handling code in SQLAlchemy functions
- Contextual/Thread-local Sessions
- Dealing with duplicate primary keys on insert in SQLAlchemy
- SQLAlchemy Transaction 관리 Practice 공유
- Unbind object from session
- Session Management - Refreshing / Expiring
- How to close sqlalchemy connection in MySQL
- SQLAlchemy에서 쿼리할 때 조인을 직접 명시해야 하는 경우는 별로 없다
- Literal SELECT
- Query 객체로 WHERE절 작성하기(Common filter operators)
- How to pass a not like operator in a sqlalchemy ORM query
- sqlalchemy.orm.query.Query.slice(start, stop)
- How to union two subqueries in SQLAlchemy
- How to execute raw SQL in SQLAlchemy
- 'select as' in SQLAlchemy
- SQLAlchemy simple example of sum, average, min, max
- Get the number of rows in table using SQLAlchemy
- What's the difference between filter and filter_by in SQLAlchemy?
- How to implement a default condition in all SQLAlchemy's queries
- SQLAlchemy Docs - ORM Events - Query Events
- Dynamically defining a database
- How to custom the table name in peewee?
- Performing simple joins
- Joining multiple tables
- When to use a boto3 client and when to use a boto3 resource?
- boto3 - credentials
- Upload-Download File From S3 with Boto3
- How do I get the file/key size in boto S3?
- 리멤버 웹 서비스 좌충우돌 Yarn Berry 도입기
- npm, yarn, pnpm 비교해보기
- Yarn 대신 pnpm으로 넘어간 3가지 이유
- 라이브러리 번들링 개선 과정: 커맨드 한 줄로 번들링 끝내기
- 테스트 주도 개발이란
- Realizing quality improvement through test driven development: results and experiences of four industrial teams
- 정규표현식의 개념과 기초 문법
- regexr - RegEx Playground
- 불규칙 속에서 규칙을 찾아내는 정규 표현식
- HTML을 정규 표현식만으로 파싱할 수 있을까?
- ignore case sensitivity
- A comprehensive guide to the dangers of Regular Expressions in JavaScript
- 프론트엔드의 한글 정규식, 어떻게 쓸 것인가.
- The Algorithms
- Khan Academy - Algorithm
- 루프 불변성
- 분할정복
- Dijkstra’s Shortest Path Algorithm in Python
- Levenshtein Distance
- 2023 카카오 신입 공채 1차 온라인 코딩 테스트 for Tech developers 문제해설
- 2023 카카오 신입 공채 2차 온라인 코딩 테스트 for Tech developers 문제해설
- Python - 스도쿠 문제 풀이
- 파이썬으로 풀어보는 아주 심플한 검색엔진의 원리
- 검색 엔진은 어떻게 작동하는가
- Build a search index in Python
- 주니어 개발자를 위한 엄청 쉬운 네트워크 이야기
- 택배 배송 과정으로 알아보는 엄청 쉬운 컴퓨터 네트워크
- Top-Down으로 접근하는 네트워크
- What are the advantages and disadvantages of using a content delivery network(CDN)?
- How did I get here?
- Load Balancing
- 로드밸런싱(Load Balancing)과 고가용성(HA)
- Load Balancing And Rate Limiting for Dummies (Part 1)
- ISO 8601
- What's the difference between ISO 8601 and RFC 3339 Date Formats?
- Date는 어떻게 주고 받는게 바람직할까요?
- 협정 세계시(UTC)
- 유닉스 시간
- List of tz database time zones
- DateTimeFormat(Joda-Time)
- Deep Dive into DateTime
- The 2038 Problem
- What are the differences between server-side and client-side programming?
- Local-First Web Development
- (번역) 2023년 웹 개발 트렌드 10가지
- What is the difference between application server and web server?
- Difference between proxy server and reverse proxy server
- Spring Websocket & STOMP
- WebSocket과 Socket.io
- Websockets vs Long Polling
- Ajax Polling vs Long-Polling vs WebSockets vs Server-Sent Events
- HTTP/2 Server Push vs Websockets vs Server-Sent Events
- SSE를 이용한 실시간 웹앱
- Scalable Websocket Architecture
- How to (and how not to) design REST APIs
- The Little Manual of API Design
- JSON:API Standard
- GET이냐 POST냐 그것이 문제로다
- HTTP 응답코드 결정 다이어그램
- RESTful API Design. Best Practices in a Nutshell.
- REST API Design: Filtering, Sorting, and Pagination
- Best Practices for Designing a Pragmatic RESTful API
- How to design REST API for export endpoint?
- Is using magic (me/self) resource identifiers going against REST principles?
- RESTfully design /login or /register resources?
- Best way to implement a restful toggle-action?
- REST API 제대로 알고 사용하기
- 그런 REST API로 괜찮은가
- REST 의 Uniform Interface에 대하여
- Architectural Styles and the Design of Network-based Software Architectures - Roy Fielding
- 바쁜 개발자들을 위한 REST 논문 요약
- REST API의 이상향, HATEOAS
- Richardson Maturity Model
- Casbin
- Authorization Policy Showdown: RBAC vs. ABAC vs. ReBAC
- Open-Sourcing AWS Cedar is a Gamechanger for IAM
- Flask 1.0 Quickstart
- Flask 1.0 공식 튜토리얼
- Flask 1.0에서 달라진 점
- Patterns for Flask 1.0
- Pynash: Proxy objects in Flask (and elsewhere)
- What is the purpose of Flask's context stacks?
- Signals
- Why I'm Leaving Flask
- FastAPI의 시대. 아직도 Flask 쓰시나요?
- fastapi-best-practices
- Migrating from Flask to FastAPI
- How to profile a FastAPI asynchronous request
- FastAPI: Depends 톺아보기
- Building Custom Middleware in FastAPI
- 스프링부트로 웹 서비스 출시하기
- Gradle + SpringBoot + Travis CI + Coveralls + 텔레그램 연동하기
- 스프링 부트 2.0 레퍼런스 코딩
- 스프링 부트 시작할 때 알아야 하는 것
- 내가 만든 API를 널리 알리기 - Spring REST Docs 가이드편
- [Kotlin] Spring Rest Docs 적용하기 build.gradle.kts
- OpenAPI Specification을 이용한 더욱 효과적인 API 문서화
- 지연 시간 없이 웹폰트 서빙하기 - Feat. Safari & Edge functions
- Optimize Time to First Byte
- FE 성능개선기 1부: 주문하기
- FE 성능개선기 2부: 카카오 비즈니스폼
- Learning React 예제 한국어 번역
- 한국어로 배우는 리엑트
- React Bit
- Awesome React Components
- 네이버 메일 모바일웹 리엑트 적용기
- React 인가 Vue 인가?
- [번역] React를 본격적으로 하기 전 알면 좋은 6가지
- React 프로젝트의 디렉토리 구조
- 카카오페이지 웹 React 포팅 후기
- When a rewrite isn’t: rebuilding Slack on the desktop
- 우리(Reddit)가 Typescript를 선택한 이유
- Conditional types in Typescript
- WebStorm 대신 VSCode 로 TypeScript 테스트와 디버깅 해보기 (with Jest)
- Announcing TypeScript 5.0
- [야생의 땅: 듀랑고] SPOF 없는 분산 MMORPG 서버
- [야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
- DEVIEW 2016 참가 신청 기능 개발기
- 타다 시스템 아키텍처
- 전 세계 팬들이 모일 수 있는 플랫폼 만들기
- The Architecture Behind A One-Person Tech Startup
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초 정리
- Serverless Architecture
- 서버리스 아키텍쳐(Serverless)란?
- Ticket Servers: Distributed Unique Primary Keys on the Cheap
- CDC 너두 할 수 있어(feat. B2B 알림 서비스에 Kafka CDC 적용하기)
- Real-time Messaging - Slack Engineering
- Startup Infrastructure: Scaling from Zero to Enterprise
- System Design Interview: Scalable Unique ID Generator (Twitter Snowflake or a similar service)
- System Design: Design a Geo-Spatial index for real-time location search
- System Design Primer
- ByteByteGoHq/system-design-101
- ByteByteGo
- Circuit breaker 패턴을 이용한 장애에 강한 MSA 서비스 구현하기
- Python 기반 대규모 마이크로 서비스에서 Circuit Breaker 도입의 여정
- 5 Microservices Design Patterns Every DevOps Team Should Know
- CAP and PACELC : the basic theorem of distributed database system
- CAP Theorem for System Design Interviews
- CAP Twelve Years Later - How the "Rules" Have Changed By Eric Brewer
- Failover & Disaster Recovery
- What is failover?
- What is High Availability?
- Disater Recovery Strategies
- 테라폼 (Terraform) 개념 설명 및 AWS 인스턴스 생성하기
- 테라폼(Terraform) 기초 튜토리얼 - AWS와 테라폼으로 구현하는 Infrastructure as Code
- Terraform을 이용한 Infrastructure as Code 실전 구성하기
- Ansible vs Terraform: Fight!
- 왜 굳이 도커(컨테이너)를 써야 하나요?
- Explaining Docker with Pizza
- 개발자가 처음 Docker 접할때 오는 멘붕 몇가지
- Docker images - types. Slim vs slim-stretch vs stretch vs alpine
- Docker 데이터 볼륨 사용하기
- How to mount a single file in a volume
- How to enter in a Docker container already running with a new TTY
- Docker run vs create
- Docker VOLUME vs COPY vs ADD
- Automation of container creation and creating image with DB packed
- 초보를 위한 도커 안내서 - 1. 도커란 무엇인가?
- 초보를 위한 도커 안내서 - 2. 설치하고 컨테이너 실행하기
- 초보를 위한 도커 안내서 - 3. 이미지 만들고 배포하기
- 도커를 이용한 웹서비스 무중단 배포하기
- Intro Guide to Dockerfile Best Practices
- What is an ORM and where can I learn more about it?
- What are OLTP and OLAP. What is the difference between them?
- MySQL timestamp 와 Y2K38 Problem
- Database Fundamentals
- How do database indexes work?
- How does database indexing work?
- What do Clustered and Non clustered index actually mean?
- Database Indexing Strategies
- 색인(index)의 두 가지 형태 : LSM 트리 & B 트리
- How does database sharding work?
- DB 파티셔닝(Partitioning)이란
- 주문서비스 ShardingSphere-Proxy 도입기
- How to scale your database and when to shard
- Sharding Pinterest: How we scaled our MySQL fleet
- Sharding & IDs at Instagram
- The growing pains of database architecture
- Are soft deletes a good idea?
- Next-Level Database Techniques For Developers
- Are junction tables a good practice?
- The Slotted Counter Pattern
- Reduce MySQL Memory Utilization with ProxySQL
- Time Ranges without Overlapping
- Pagination in MySQL
- MySQL Orderby a number, Nulls last
- Illegal mix of collations for operation 'like'
- Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='
- How to declare a variable in MySQL?
- How to show the last queries executed on MySQL?
- How can I stop a running MySQL query?
- MySQL UNIQUE key not working
- MySQL 중복 키 관리 방법
- MySQL cannot create foreign key constraint
- varchar Fields - Is a Power of Two More Efficient?
- MySQL Integers: INT, BIGINT, and more
- MySQL data types: VARCHAR and CHAR
- Indexing JSON in MySQL
- Understanding Generated Columns
- Understanding MySQL Storage Engines
- A graph a day, keeps the doctor away ! – MySQL History List Length
- Just Use Postgres for Everything
- PostgreSQL Vacuum에 대한 거의 모든 것
- A BEGINNERS GUIDE TO POSTGRESQL’S UPDATE AND AUTOVACUUM
- Nine ways to shoot yourself in the foot with PostgreSQL
- Create an advanced search engine with PostgreSQL
- Postgresql Sequence vs Serial
- How does COPY work and why is it so much faster than INSERT?
- Query and filter context
- ElasticSearch bool query combine
- What is the difference between must and filter Query DSL in ElasticSearch?
- ElasticSearch match vs term query
- Source filter
- Terms Aggregation
- Term level query - range query
- Exclude empty-string, null and non-existant
- Best way to check if a field exist in an Elasticsearch document
- Android 공식 가이드
- Android의 HTTP 클라이언트 라이브러리
- Using Retrofit 2.x as REST client
- Retrofit 2와 함께하는 정말 쉬운 HTTP
- Firebase를 실제 모바일 백엔드로 사용하면 일어날 수 있는 일들
- Android의 ORM
- Android의 이미지로딩 라이브러리
- Android 앱 메모리 최적화
- 안드로이드 BadTokenException의 원인과 해결방법
- Android와 개발 패턴
- 안드로이드의 MVC, MVP, MVVM 종합 안내서
- AWS codebuild + codecov 로 저렴하게 android CI 구축하기
- 클린 아키텍처와 함께하는 배민앱 (Android)
- epoxy
- Use Android Jetpack to Accelerate Your App Development
- 버킷 정책 예제 - 특정 IP 주소 액세스 제한
- 버킷 정책 예제 - Amazon CloudFront 오리진 자격 증명에 권한 부여
- How Canva saves millions annually in Amazon S3 costs
- kakao Tech : 효과적인 코드리뷰를 위한 리뷰어의 자세
- 코드 리뷰 문화
- LINE Engineering : 효과적인 코드 리뷰를 위해서
- Google 코드 리뷰 가이드 : 한국어 번역본
- 코드 리뷰
- How can one change the timestamp of an old commit in Git?
- How to change the commit author for one specific commit?
- Oh shit, git!
- How to resolve merge conflict during pull request?
- How do I update a GitHub forked repository?
- .gitignore is ignored by Git
- git not displaying unicode file names
- Pull Request를 이용한 개발 흐름을 적용해 보고 나서
- GitHub의 Pull Request를 로컬로 가져오기
- Reviewing proposed changes in a pull request
- export, echo 명령어
- lsof 사용법
- grep 사용법
- awk 사용법
- htop Explained Visually
- Crontab 사용법
- 리눅스 명령어 sudo, su, su -
- 리눅스 서버의 TCP 네트워크 성능을 결정짓는 커널 파라미터 이야기
- 소프트웨어 환멸감(Software disenchantment)
- 소프트웨어 개발자 되기는 왜 어려운가?
- [번역] 개발 배우기가 정말 어려운 이유
- Cognitive Biases in Programming
- 코더
- 20 Things I’ve Learned in my 20 Years as a Software Engineer
- 프론트엔드 엔지니어 커리어 로드맵: 주니어를 위한 3가지 전문성 트랙
- 1. 우아한형제들 부검 - 왜 떠나는지
- 망했을때 어떻게 할 것인가
- 누구나 프로그래머가 될 수 있다
- 전염시키기
- The Tech Promotion Algorithm: A Structured Guide to Moving Up
- A Bunch of Programming Advice I’d Give To Myself 15 Years Ago
- 개발자의 윗몸일으키기
- 나는 어떻게 더 나은 프로그래머가 되었는가
- The Forty-Year Programmer
- 스타트업에서 성장한다는 주니어의 착각
- 프로그래밍의 종말
- 넓고 얕게 알기 vs 좁고 깊게 알기
- 더 많은 일을 하면서 더 빨리 하기
- 성장하는 프로그래머가 되는 법: 주니어편
- 무엇이 탁월한 개발자를 만드는가
- JSONSchema
- object - pattern properties
- object - Schema dependencies
- JSON Schema: verifying object's values, without keys
- Markov Chains - The University of Auckland
- From “What is a Markov Model” to “Here is how Markov Models Work”
- Cracking encrypted Lastpass vaults
- How They Bypass Youtube Video Download Throttling
- Exploiting the iPhone 4, Part 1: Gaining Entry
- I looked through attacks in my access logs. Here's what I found
- 몰락 이후의 퍼포먼스 마케팅
- 고객(Customer)이 아닌 관객(Audience)을 모으는 것이 진짜 마케팅
- What is a tracking link?
- 퍼포먼스 마케팅의 새로운 시대
- 사용자는 바보가 아니야, 기만적인 기획과 마케팅
- 검색엔진최적화(SEO) 쉬운 가이드
- Zero-Click Search 논란, 65%의 검색이 클릭없이 끝난다?
- Black Hat - White Hat SEO
- ‘쉽게 설명한’ 구글의 페이지 랭크 알고리즘
- 기술 블로그를 위한 SEO
- 비슷해 보이지만 전혀 다른 두 회사, 블록버스터와 넷플릭스
- 한국 인터넷에서 잘못 끼워진 첫 단추, 그 이름은 네이버 (NAVER)
- 당근마켓 전문가모드 광고의 가능성과 한계
- 직접 만들지 그랬어
- B2B SaaS에서 세일즈보다 고객서비스가 더 중요한 이유
- 보이는 게 전부가 아니다
- 한국인들의 7가지 실수
- 남이 해 주는 숙제
- 평균 실종과 초버티칼화 현상
- The Scoop: Inside Fast’s Rapid Collapse
- 행동력이 미친 창업 팀, 개발 없이 MVP 테스트하기
- 피치 덱
- 모던 소프트웨어 경쟁 전략
- We Don't Sell Saddles Here
- 고객을 모르면 프로덕트는 키메라가 된다
- B2B 프로덕트 디자이너가 신경 써야 할 B2B 프로덕트의 특징
- 강남언니가 고객의 문제를 찾는 방법
- How to develop product sense
- 단순한 제품을 만든다는 것에 대해
- Manager's Playbook
- Delegation 101: Figuring out what to delegate
- 팀장이 된 후에 알게 된 것들
- 미팅 가득한 팀장의 하루
- 스타트업 CTO의 일
- 일을 맡길 때는 권한까지 맡겨야 합니다
- 나는 나 자신의 위선적 상태를 알아차리고 있는가?
- 이끌거나, 따르거나, 아니면 비키거나
- '팀의 건강'을 진단하는 방법의 진화
- 에어비앤비 엔지니어가 일하는 게 행복한 이유
- 기능 공장에서 일하고 있다는 12가지 신호
- 사고를 쳐도 혼나지 않는 회사
- Why Development Teams are Slow
- 당신의 개발자들은 결코 느리지 않다.
- 윗사람과 아랫사람
- 회사는 나의 놀이터
- 획기적 성과를 내는 스타트업 주간회의
- 누구랑 일할텐가
- 넷플릭스의 문화 - 탁월함을 추구하다
- 복지가 좋은 회사
- 우리가 본받을 만한 실리콘밸리의 기업문화