나만 읽기 아까운 글이나 문서를 모아두는 공간입니다. 어떤 주제를 공부하거나, 공부의 방향을 잡거나, 그냥 가볍게 읽기 위한 재밌는 글을 원하는 누군가가, 양질의 글에 쉽게 접근할 수 있도록 도와주는 것이 이 저장소의 목적입니다.
대충 나눈 카테고리에, 링크로 이루어진 unordered list 형태로 구성됩니다. 링크 하나마다 커밋 하나씩, commit description으로 해당 링크에 대한 간단한 요약을 적기도 합니다. 조금 길게 공부할만한 것이 생기면 시간 여유가 있을 때 살펴보고 TIL에도 커밋합니다.
여러분도 북마크에서 몇 개만 공유해 주세요. 레포 주인이 공부하는 분야가 넓지 않아서, 별 거 아닌 것처럼 보이는 기여더라도 큰 도움이 됩니다.
- 함수형 프로그래밍이란?
- Higher-order-function(고차함수) with Kotlin
- Currying
- 함수형 프로그래밍: partial application과 curry
- 람다, 익명 함수, 클로저
- 자바스크립트의 호이스팅(Hoisting)
- 코루틴 소개
- What is a pure function?
- 유닛테스트에 대한 생각
- 테스트 주도 개발이란
- 코드 커버리지 80% 넘긴 썰 - 테스팅을 잘 하기 위한 8퍼센트 개발팀의 삽질기
- Realizing quality improvement through test driven development: results and experiences of four industrial teams
- 단위 테스트 케이스와 테스트 더블(Test Double)
- Mock Object란 무엇인가?
- Testing Without Mocks: A Pattern Language
- What's the difference between a mock & stub?
- Mocks Aren't Stubs
- 디자인 패턴 종류
- So Singletons are bad, then what?
- Repository Pattern
- Dependency Injection
- 10가지 소프트웨어 아키텍처 패턴
- Circuit breaker 패턴을 이용한 장애에 강한 MSA 서비스 구현하기
- Clean architectures in Python: a step-by-step example
- What is difference between LRU and LFU?
- WTF is Memoization
- What is the difference between Caching and Memoization?
- 캐시가 동작하는 아주 구체적인 원리
- 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
- The super tiny compiler
- How I wrote a self-hosting C compiler in 40 days
- 개발자에게 유용한 법칙, 이론, 원칙, 그리고 패턴들 #hackerlaws
- The Little Manual of API Design
- Red-Green-Refactor
- Why is global state so evil?
- 점진적인 레거시 웹 어플리케이션 개선 과정
- Clean Code: 5 Essential Takeaways
- Why Premature Optimization Is the Root of All Evil
- 정규표현식의 개념과 기초 문법
- regexr - 정규표현식을 연습할 수 있는 playground
- 불규칙 속에서 규칙을 찾아내는 정규 표현식
- HTML을 정규 표현식만으로 파싱할 수 있을까?
- ignore case sensitivity
- WebSocket과 Socket.io
- Websockets vs Long Polling
- 웹 기술로 구현하는 Adaptive HTTP Streaming
- What are the advantages and disadvantages of using a content delivery network(CDN)?
- GET이냐 POST냐 그것이 문제로다
- API Security Checklist-ko
- API development tools
- HTTP 응답코드 결정 다이어그램
- Web API Pagination with the 'Timestamp_ID' Continuation Token
- JSON:API Standard
- 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
- REST API Design
- REST API Design Tips
- JSONSchema
- object - pattern properties
- object - Schema dependencies
- JSON Schema: verifying object's values, without keys
- 협정 세계시(UTC)
- 유닉스 시간
- List of tz database time zones
- ISO 8601
- What's the difference between ISO 8601 and RFC 3339 Date Formats?
- DateTimeFormat(Joda-Time)
- Deep Dive into DateTime
- 검색엔진최적화(SEO) 쉬운 가이드
- Zero-Click Search 논란, 65%의 검색이 클릭없이 끝난다?
- Black Hat - White Hat SEO
- ‘쉽게 설명한’ 구글의 페이지 랭크 알고리즘
- Oh shit, git!
- How to resolve merge conflict during pull request?
- How do I update a GitHub forked repository?
- .gitignore is ignored by Git
- How can one change the timestamp of an old commit in Git?
- How to change the commit author for one specific commit?
- 좋은 git commit 메시지를 위한 영어 사전
- 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 네트워크 성능을 결정짓는 커널 파라미터 이야기
- 루프 불변성
- 시간 복잡도 빠르게 이해하기
- 점근 표기법
- 분할정복
- 힙 정렬
- 동적 계획법
- 파이썬으로 정리하는 Quick-Sort
- Dijkstra’s Shortest Path Algorithm in Python
- Levenshtein Distance
- The Algorithms
- Markov Chains - The University of Auckland
- From “What is a Markov Model” to “Here is how Markov Models Work”
- User Acquisition - appsflyer
- User Acquisition - Adjust
- Re-Engagement
- What is a tracking link?
- Single-Touch vs. Multi-Touch Marketing Attribution
- Retargeting
- Reattribution
- ARPU / ARPPU
- DAU/MAU Reatio
- 고객(Customer)이 아닌 관객(Audience)을 모으는 것이 진짜 마케팅
- Manager's Playbook
- '팀의 건강'을 진단하는 방법의 진화
- Delegation 101: Figuring out what to delegate
- Engineering Ladders
- 팀장이 된 후에 알게 된 것들
- 미팅 가득한 팀장의 하루
- The Scoop: Inside Fast’s Rapid Collapse
- 스타트업에서 성장한다는 주니어의 착각
- B2B SaaS에서 세일즈보다 고객서비스가 더 중요한 이유
- 직접 만들지 그랬어
- 소프트웨어 환멸감(Software disenchantment)
- 소프트웨어 개발자 되기는 왜 어려운가?
- [번역] 개발 배우기가 정말 어려운 이유
- Cognitive Biases in Programming
- 당신의 개발자들은 결코 느리지 않다.
- 나는 어떻게 더 나은 프로그래머가 되었는가
- Avoiding burnout as an ambitious developer
- The Forty-Year Programmer
- Microservices with gRPC
- The Complete Guide to the ELK Stack - 2018
- How To Install The ELK Stack - 2021
- Time Series Database and Tick Stack
- Failover & Disaster Recovery
- What is failover?
- What is High Availability?
- Disater Recovery Strategies
- 초보를 위한 도커 안내서 - 1. 도커란 무엇인가?
- 초보를 위한 도커 안내서 - 2. 설치하고 컨테이너 실행하기
- 초보를 위한 도커 안내서 - 3. 이미지 만들고 배포하기
- 개발자가 처음 Docker 접할때 오는 멘붕 몇가지
- 도커를 이용한 웹서비스 무중단 배포하기
- 왜 굳이 도커(컨테이너)를 써야 하나요?
- Intro Guide to Dockerfile Best Practices
- 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
- 테라폼(Terraform) 기초 튜토리얼 - AWS와 테라폼으로 구현하는 Infrastructure as Code
- Terraform을 이용한 Infrastructure as Code 실전 구성하기
- Ansible vs Terraform: Fight!
- [야생의 땅: 듀랑고] SPOF 없는 분산 MMORPG 서버
- [야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
- DEVIEW 2016 참가 신청 기능 개발기
- 타다 시스템 아키텍처
- 전 세계 팬들이 모일 수 있는 플랫폼 만들기
- The Architecture Behind A One-Person Tech Startup
- What is the difference between application server and web server?
- Difference between proxy server and reverse proxy server
- What is an ORM and where can I learn more about it?
- DBMS는 어떻게 트랜잭션을 관리할까?
- A Detailed Guide to Database Denormalization with Examples
- How does database indexing work?
- What do Clustered and Non clustered index actually mean?
- Why do you create a View in a database?
- Are soft deletes a good idea?
- What are OLTP and OLAP. What is the difference between them?
- What are Covering Indexes and Covered Queries in SQL Server?
- What is a stored procedure?
- 데이터베이스 분포도(Database Selectivity)
- What are the materialized views?
- Are junction tables a good practice?
- Lock으로 이해하는 Transaction의 Isolation Level
- CAP and PACELC : the basic theorem of distributed database system
- Insert into a MySQL table or update if exists
- SELECT 결과를 INSERT 하기
- Multiple select statements in Single query
- MySQL Orderby a number, Nulls last
- How to check for Is not Null And Is not Empty string in SQL server?
- MySQL UNIQUE key not working
- Illegal mix of collations for operation 'like'
- MySQL 쓰면서 하지 말아야 할 것 17가지
- MySQL 중복 키 관리 방법
- Understanding MySQL Storage Engines
- How to declare a variable in MySQL?
- Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='
- How to show the last queries executed on MySQL?
- MySQL cannot create foreign key constraint
- When to use SELECT … FOR UPDATE?
- 갭락(Gap Lock)과 넥스트 키 락(Next-Key Lock)
- varchar Fields - Is a Power of Two More Efficient?
- MySQL 5.7 FullText Search 이용하기 with ngram
- Date and Time Functions and Operators
- Presto equivalent of MySQL group_concat
- How can I stop a running MySQL query?
- MySQL 성능최적화
- Querying - Overview
- Transforming Dimension Values
- Querying - Aggregations
- Querying - Aggregation Granularity
- 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
- flask-base
- fbone
- cookiecutter-flask
- flask-foundation
- flask-rest-template
- flask-appbuilder
- flask-realworld-example-app
- flask-large-application-example
- 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
- 스프링부트로 웹 서비스 출시하기
- Gradle + SpringBoot + Travis CI + Coveralls + 텔레그램 연동하기
- 스프링 부트 2.0 레퍼런스 코딩
- JWT 기반 로그인 구현 예제
- 폼 기반 인증 구현 튜토리얼
- MVC 구조에서 service와 serviceImpl을 왜 만드는가
- Glossary
- 제너레이터와 코루틴
- 파이썬 언더스코어(_)에 대하여
- Python __getitem__과 slice의 이해
- 파이썬의 변수
- 시간 복잡도로 살펴보는 파이썬 내장 자료형의 효율적인 활용
- 리얼월드 메타클래스
- Why is Python 3.7 fastest
- Better Python 59 Ways
- The Hitchhiker’s Guide to Python
- Hidden features of Python
- Intermediate Python
- A collection of design patterns/idioms in Python
- Strings in Python
- 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?
- Difference between <type 'generator'> and <type 'xrange'>
memo : you should understand that an iterator and an generator are not the same thing. - 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
- Python GIL
- Python GC가 작동하는 원리
- __slots__ magic
- Exponentials in python x ** y vs math.pow(x, y)
- How did Python implement the built-in function pow()?
- Dismissing Python Garbage Collection at Instagram
- Memory Management in Python - Part 3: Object Lifetimes and Garbage Collection
- 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
- 비동기 파이썬
- asyncio : 단일 스레드 기반의 Nonblocking 비동기 코루틴 완전 정복
- What does the “yield from” syntax do in asyncio and how is it different from “await”
- Blocking-NonBlocking-Synchronous-Asynchronous
- 비동기 프로그래밍 동작 원리 (asyncio)
- 비동기적으로 Python 다루기
- datetime
- collections.OrderedDict
- collections.defaultdict
- 얕은 복사(shallow copy) vs 깊은 복사(deep copy)
- enum
- What's the difference between MySQLdb, mysqlclient and MySQL connector/Python?
- mongo-python-driver(pymongo)
- motor
- redis-py
- pymemcache
- SQLAlchemy 시작하기 - Part 1
- SQLAlchemy 시작하기 - Part 2
- Flask-SQLAlchemy docs - Multiple Databases with Binds
- SQLAlchemy에서 모든 테이블의 모든 자료 지우기
memo : truncate하는 raw query는 FK 문제로 인해 잘 안 될 수 있으므로 SQLAlchemy를 통해 극복하는 내용 - 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
- 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
- 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?
- EC2(Elastic Compute Cloud)
- 인스턴스 수명 주기
- 인스턴스 유형
- 인스턴스 구입 옵션
- Application Load Balancer 서비스 공개
- 배치 그룹(Placement Gorup)
- 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