Welcome!
์ข์ ๊ธ์ ๋ง์ฃผ์น๋ฉด ๋ถ๋งํฌ์ฒ๋ผ ์ ๋ฆฌํด ๋๋ ์ ์ฅ์์ ๋๋ค. ์นดํ ๊ณ ๋ฆฌํ๋ฅผ ์ด์ฌํ ํ์ง๋ง, ์๋ฒ ๊ฐ๋ฐ์์ธ ์ ์ ๊ฐ์ธ ๊ณต๋ถ ๊ณผ์ ์์ ๋ฐ๊ฒฌํ ๊ฒ๋ค์ด๋ผ ๊ทธ ํฅ์ด ๋ฐฐ์ด ์์ต๋๋ค.
๊ฐ๋ฐ
ํ๋ก๊ทธ๋๋ฐ
ํจ์
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋?
- What is a pure function?
- Higher-order-function(๊ณ ์ฐจํจ์) with Kotlin
- Currying
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ: partial application๊ณผ curry
- ๋๋ค, ์ต๋ช ํจ์, ํด๋ก์
- ์๋ฐ์คํฌ๋ฆฝํธ์ ํธ์ด์คํ (Hoisting)
- ์ฝ๋ฃจํด ์๊ฐ
- ์ข์ ํจ์ ๋ง๋ค๊ธฐ - ๋ถ์์ฉ๊ณผ ๊ฑฐ๋ฆฌ๋๊ธฐ
- ์ข์ ํจ์ ๋ง๋ค๊ธฐ - ์๋ฌต์ ์ ๋ ฅ/์ถ๋ ฅ
ํ ์คํ
- ์ ๋ํ ์คํธ์ ๋ํ ์๊ฐ
- ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง 80% ๋๊ธด ์ฐ - ํ ์คํ ์ ์ ํ๊ธฐ ์ํ 8ํผ์ผํธ ๊ฐ๋ฐํ์ ์ฝ์ง๊ธฐ
- ํ ์คํธ ์ฝ๋์์ ๋ด๋ถ ๊ตฌํ ๊ฒ์ฆ ํผํ๊ธฐ
- [Jest] ํ๋ผ๋ฏธํฐํ ํ ์คํธ: test.each(), describe.each()
Test Double
- ๋จ์ ํ ์คํธ ์ผ์ด์ค์ ํ ์คํธ ๋๋ธ(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
์ธ์ด๋ก
- 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
- LLVM ํ๋ก์ ํธ
- Advanced C: The UB and optimizations that trick good programmers.
- Building a Programming Language in Twenty-Four Hours
๋์์ธ ํจํด
Singleton
Repository Pattern
- 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?
Dependency Injection
- What is dependency injection?
- Dependency Injection Demystified
- DI ๋?
- Dependency Injection in Python
- Inversion of Control Containers and the Dependency Injection pattern
์ํคํ ์ฒ ํจํด
Hexgonal Architecture
ํด๋ฆฐ ์ฝ๋
๋ฒ์น/์์น
- ๊ฐ๋ฐ์์๊ฒ ์ ์ฉํ ๋ฒ์น, ์ด๋ก , ์์น, ๊ทธ๋ฆฌ๊ณ ํจํด๋ค #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
๋ฐํ
SaaS
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ๊ฐ์ฒด์งํฅ ๊ฐ๋ฐ 5๋ ์๋ฆฌ: SOLID
- Parametric Polymorphism
- ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋(Static Factory Method)๋ ์ ์ฌ์ฉํ ๊น?
์บ์ฑ
Memoization
Replacement
Cache Strategy
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
Python
Fundamentals
- ์ ๋๋ ์ดํฐ์ ์ฝ๋ฃจํด
- ํ์ด์ฌ ์ธ๋์ค์ฝ์ด(_)์ ๋ํ์ฌ
- 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
Concurrent Programming
- ๋น๋๊ธฐ ํ์ด์ฌ
- 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 ๋ค๋ฃจ๊ธฐ
Performance
- 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
Better way
- 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
Version specific
3.7
3.8
Code Style
Linter
Formatter
Environment
pyenv
virtualenv
pipenv
- pipenv๋ ๋ฌด์์ธ๊ฐ
- pipenv๋ก Python ํ๋ก์ ํธ ๊ด๋ฆฌํ๊ธฐ
- Force pipenv to create a new virtualenv
- How to get pipenv running in docker?
poetry
Testing
- ์ฝ๋ ํ ์คํธํ๊ธฐ - 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
Libraries
SQLAlchemy
- SQLAlchemy ์์ํ๊ธฐ - Part 1
- SQLAlchemy ์์ํ๊ธฐ - Part 2
- SQLAlchemy์์ ๋ชจ๋ ํ ์ด๋ธ์ ๋ชจ๋ ์๋ฃ ์ง์ฐ๊ธฐ
ORM
Connection
- 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
Query
- 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
Peewee
- Dynamically defining a database
- How to custom the table name in peewee?
- Performing simple joins
- Joining multiple tables
boto3
- 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?
Go
Fundamentals
Java
Fundamentals
Garbage Collection
Node.js
- Ryan Dahl: ๋ด๊ฐ Node.js์ ๋ํด ํํํ๋ ๊ฒ 10๊ฐ์ง(JSConf EU, 2018)
- no-return-await ๋ ํญ์ ์ ๋ต์ผ๊น
Better way
Environment
Package
- ๋ฆฌ๋ฉค๋ฒ ์น ์๋น์ค ์ข์ถฉ์ฐ๋ Yarn Berry ๋์ ๊ธฐ
- npm, yarn, pnpm ๋น๊ตํด๋ณด๊ธฐ
- Yarn ๋์ pnpm์ผ๋ก ๋์ด๊ฐ 3๊ฐ์ง ์ด์
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ๋ค๋ง ๊ฐ์ ๊ณผ์ : ์ปค๋งจ๋ ํ ์ค๋ก ๋ฒ๋ค๋ง ๋๋ด๊ธฐ
Version Manager
Code Style
Libraries
TypeORM
Rust
ํ์ต
๊ธฐ์ ๋ถ์ฑ
๋ฐฉ๋ฒ๋ก
TDD
- ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ด๋
- Realizing quality improvement through test driven development: results and experiences of four industrial teams
DDD
์ปดํจํฐ๊ณผํ
์ด๋ก ์ปดํจํฐ ๊ณผํ
์คํ ๋งํ ์ด๋ก
FSM
Regex
- ์ ๊ทํํ์์ ๊ฐ๋ ๊ณผ ๊ธฐ์ด ๋ฌธ๋ฒ
- regexr - RegEx Playground
- ๋ถ๊ท์น ์์์ ๊ท์น์ ์ฐพ์๋ด๋ ์ ๊ท ํํ์
- HTML์ ์ ๊ท ํํ์๋ง์ผ๋ก ํ์ฑํ ์ ์์๊น?
- ignore case sensitivity
๊ณ์ฐ ๋ณต์ก๋ ์ด๋ก
์๋ฃ๊ตฌ์กฐ
์ ๊ทผ ํ๊ธฐ๋ฒ
๋์ ๊ณํ๋ฒ
์๊ณ ๋ฆฌ์ฆ
- ๋ฃจํ ๋ถ๋ณ์ฑ
- ๋ถํ ์ ๋ณต
- ํ ์ ๋ ฌ
- ํ์ด์ฌ์ผ๋ก ์ ๋ฆฌํ๋ Quick-Sort
- Dijkstraโs Shortest Path Algorithm in Python
- Levenshtein Distance
- The Algorithms
- 2023 ์นด์นด์ค ์ ์ ๊ณต์ฑ 1์ฐจ ์จ๋ผ์ธ ์ฝ๋ฉ ํ ์คํธ for Tech developers ๋ฌธ์ ํด์ค
- 2023 ์นด์นด์ค ์ ์ ๊ณต์ฑ 2์ฐจ ์จ๋ผ์ธ ์ฝ๋ฉ ํ ์คํธ for Tech developers ๋ฌธ์ ํด์ค
๋ถ์ฐ ์๊ณ ๋ฆฌ์ฆ
์๊ณ ๋ฆฌ์ฆ ํจ๋ฌ๋ค์
์ด์์ฒด์
- ์ปดํจํฐ๊ฐ ์ฝ๋๋ฅผ ์ฝ๋ ์์ฃผ ๊ตฌ์ฒด์ ์ธ ์๋ฆฌ
- Race condition ๋ฐ์์ํค๊ณ Mutex lock์ผ๋ก ํด๊ฒฐํ๊ธฐ
๊ฒ์ ์์ง
- แแ กแแ ตแแ ฅแซแแ ณแ แ ฉ แแ ฎแฏแแ ฅแแ ฉแแ ณแซ แแ กแแ ฎ แแ ตแทแแ ณแฏแแ กแซ แแ ฅแทแแ ขแจแแ ฆแซแแ ตแซแแ ด แแ ฏแซแ แ ต
- ๊ฒ์ ์์ง์ ์ด๋ป๊ฒ ์๋ํ๋๊ฐ
๋คํธ์ํฌ
- ์ฃผ๋์ด ๊ฐ๋ฐ์๋ฅผ ์ํ ์์ฒญ ์ฌ์ด ๋คํธ์ํฌ ์ด์ผ๊ธฐ
- ํ๋ฐฐ ๋ฐฐ์ก ๊ณผ์ ์ผ๋ก ์์๋ณด๋ ์์ฒญ ์ฌ์ด ์ปดํจํฐ ๋คํธ์ํฌ
- Top-Down์ผ๋ก ์ ๊ทผํ๋ ๋คํธ์ํฌ
- What are the advantages and disadvantages of using a content delivery network(CDN)?
Load Balancing
ํ๋์จ์ด
DNS
์ํํธ์จ์ด ๊ณตํ
ํ๋ก์ธ์ค
- How to Write Awesome Tech Specs
- 2023-04๋ถํฐ ์ค์ฒ์ค์ธ ์คํ๋ฆฐํธ ๊ธฐ๋ฐ์ ํ ์ ๋ฌด ํ๋ ์์ํฌ
- ์ ๋น์ ์ ์ผ์ผ ์คํ ๋์ ๋ฏธํ ์ ์คํจํ๋๊ฐ
ํ์ค
Date & Time
- 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
Locale
Identifier
Image
์น ๊ฐ๋ฐ
- What are the differences between server-side and client-side programming?
- Local-First Web Development
- (๋ฒ์ญ) 2023๋ ์น ๊ฐ๋ฐ ํธ๋ ๋ 10๊ฐ์ง
HTTP
CORS
Webserver
- What is the difference between application server and web server?
- Difference between proxy server and reverse proxy server
Polling/Websocket/etcs
- 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
์ค๊ณ
- ์น ๊ธฐ์ ๋ก ๊ตฌํํ๋ Adaptive HTTP Streaming
- Web API Pagination with the 'Timestamp_ID' Continuation Token
์ ์ฉํ ๋๊ตฌ
HTTP API
Security
Design Principle
- 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
- 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
GraphQL
- So whatโs this GraphQL thing I keep hearing about?
- GraphQL์ ์คํดํ๋ค
- Designing GraphQL Mutations
HTTP2/HTTPS
- HTTPS๋ HTTP๋ณด๋ค ๋น ๋ฅด๋ค
- ๋๋ง ๋ชจ๋ฅด๊ณ ์๋ HTTP2
- HTTP/2 ์๊ฐ - Google Developers
- HTTPS๋ ์ด๋ป๊ฒ ๋ค๋ฅผ๊น?
์ธ์ฆ/์ธ๊ฐ
JWT
OAuth
IAM
Framework
Python
Flask
example
boilerplate
Guide
- 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
FastAPI
- Why I'm Leaving Flask
- FastAPI์ ์๋. ์์ง๋ Flask ์ฐ์๋์?
- fastapi-best-practices
- Migrating from Flask to FastAPI
Java/Kotlin
Spring
Tutorial
- ์คํ๋ง๋ถํธ๋ก ์น ์๋น์ค ์ถ์ํ๊ธฐ
- Gradle + SpringBoot + Travis CI + Coveralls + ํ ๋ ๊ทธ๋จ ์ฐ๋ํ๊ธฐ
- ์คํ๋ง ๋ถํธ 2.0 ๋ ํผ๋ฐ์ค ์ฝ๋ฉ
- ์คํ๋ง ๋ถํธ ์์ํ ๋ ์์์ผ ํ๋ ๊ฒ
Auth
Architecture
- MVC ๊ตฌ์กฐ์์ service์ serviceImpl์ ์ ๋ง๋๋๊ฐ
- ํด๋์ํ ์คํ๋ง ์น ์ดํ๋ฆฌ์ผ์ด์ ๊ตฌ์กฐ
JPA
Logging
Performance
Node
Express
NestJS
์น ํ๋ก ํธ์๋
Fundamental
Environment
History
- ํ๋ก ํธ์๋ ์ญ์ฌ์ ๋ฏธ๋, ์ ๋ฌด ๋ถ์ผ ... ๊ทธ๋ฆฌ๊ณ ์ํ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋?
Useful Service
Nocode
Hosting
Optimization
- ์ง์ฐ ์๊ฐ ์์ด ์นํฐํธ ์๋นํ๊ธฐ - Feat. Safari & Edge functions
- Optimize Time to First Byte
- FE ์ฑ๋ฅ๊ฐ์ ๊ธฐ 1๋ถ: ์ฃผ๋ฌธํ๊ธฐ
- FE ์ฑ๋ฅ๊ฐ์ ๊ธฐ 2๋ถ: ์นด์นด์ค ๋น์ฆ๋์คํผ
React
- Learning React ์์ ํ๊ตญ์ด ๋ฒ์ญ
- ํ๊ตญ์ด๋ก ๋ฐฐ์ฐ๋ ๋ฆฌ์ํธ
- React Bit
- Awesome React Components
- ๋ค์ด๋ฒ ๋ฉ์ผ ๋ชจ๋ฐ์ผ์น ๋ฆฌ์ํธ ์ ์ฉ๊ธฐ
- React ์ธ๊ฐ Vue ์ธ๊ฐ?
- [๋ฒ์ญ] React๋ฅผ ๋ณธ๊ฒฉ์ ์ผ๋ก ํ๊ธฐ ์ ์๋ฉด ์ข์ 6๊ฐ์ง
- React ํ๋ก์ ํธ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
- ์นด์นด์คํ์ด์ง ์น React ํฌํ ํ๊ธฐ
- When a rewrite isnโt: rebuilding Slack on the desktop
์ํ ๊ด๋ฆฌ
CSS
PostCSS
SaaS
FlexBox
- (๋ฒ์ญ) CSS flex box 3๋ถ๋ง์ ๋ฐฐ์ฐ๊ธฐ
- ํ๋ ์ค ๋ฐ์ค ๋ ์ด์์
- flexbox๋ก ๋ง๋ค ์ ์๋ 10๊ฐ์ง ๋ ์ด์์
TypeScript
- ์ฐ๋ฆฌ(Reddit)๊ฐ Typescript๋ฅผ ์ ํํ ์ด์
- Conditional types in Typescript
- WebStorm ๋์ VSCode ๋ก TypeScript ํ ์คํธ์ ๋๋ฒ๊น ํด๋ณด๊ธฐ (with Jest)
- Announcing TypeScript 5.0
๋ฐฑ์๋
Low-code
Architecture
- [์ผ์์ ๋ : ๋๋๊ณ ] 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
Troubleshooting
System Design
- 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
Microservice
- Circuit breaker ํจํด์ ์ด์ฉํ ์ฅ์ ์ ๊ฐํ MSA ์๋น์ค ๊ตฌํํ๊ธฐ
- Python ๊ธฐ๋ฐ ๋๊ท๋ชจ ๋ง์ดํฌ๋ก ์๋น์ค์์ Circuit Breaker ๋์ ์ ์ฌ์
Data Pipeline
- ์ ์ฌ ๊ตฌ์ฑ์๋ค์ด ์ฌ์ฉํ๋ ๋ฐฐ์น ๋ฐ์ดํฐ ํ๋ซํผ ๋ง๋ค๊ธฐ - Airflow Advanced
- ์ปฌ๋ฆฌ์ BigQuery ๋์ ๊ธฐ - 1๋ถ
Message Queue
Benchmark
Insight
- ์ฑ์ ํํฉ ์๋ ์ฌ๋ฆฌ๊ธฐ - ์คํํธ๋งํฌ
- ipify: 300์ต ์์ฒญ ์ฒ๋ฆฌ, ๊ทธ ๋๋จธ๋ก
- ์ ์ ๋ฅผ ์ํ ์์คํ ๊ฐ์ ๊ธฐ
- ๋ํ์ ๋ฉํ ๋ง: ์ฐ๋ฌผ ๋ฐ ๋ด๋ค๋ณด๊ธฐ
Postmortem
Protocol
gRPC
Operation
SRE
Scenarios
Recovery/Failover
- Failover & Disaster Recovery
- What is failover?
- What is High Availability?
- Disater Recovery Strategies
Deploy
GitOps
Automation
Cloudformation
Ansible
Terraform
- ํ ๋ผํผ (Terraform) ๊ฐ๋ ์ค๋ช ๋ฐ AWS ์ธ์คํด์ค ์์ฑํ๊ธฐ
- ํ ๋ผํผ(Terraform) ๊ธฐ์ด ํํ ๋ฆฌ์ผ - AWS์ ํ ๋ผํผ์ผ๋ก ๊ตฌํํ๋ Infrastructure as Code
- Terraform์ ์ด์ฉํ Infrastructure as Code ์ค์ ๊ตฌ์ฑํ๊ธฐ
- Ansible vs Terraform: Fight!
Monitoring
SaaS
Stacks
ELK
TICK
Container
Docker
Fundamental
- ์ ๊ตณ์ด ๋์ปค(์ปจํ ์ด๋)๋ฅผ ์จ์ผ ํ๋์?
- ๊ฐ๋ฐ์๊ฐ ์ฒ์ 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
Guide
- ์ด๋ณด๋ฅผ ์ํ ๋์ปค ์๋ด์ - 1. ๋์ปค๋ ๋ฌด์์ธ๊ฐ?
- ์ด๋ณด๋ฅผ ์ํ ๋์ปค ์๋ด์ - 2. ์ค์นํ๊ณ ์ปจํ ์ด๋ ์คํํ๊ธฐ
- ์ด๋ณด๋ฅผ ์ํ ๋์ปค ์๋ด์ - 3. ์ด๋ฏธ์ง ๋ง๋ค๊ณ ๋ฐฐํฌํ๊ธฐ
- ๋์ปค๋ฅผ ์ด์ฉํ ์น์๋น์ค ๋ฌด์ค๋จ ๋ฐฐํฌํ๊ธฐ
- Intro Guide to Dockerfile Best Practices
Compose
Tool
Orchestration
Kubernetes
- Kubernetes Learning Roadmap
- Kubernetes CronJob์ ์ค์ผ์ค ๋ณ๊ฒฝ ์ ์๊ธ ์ ์ฉ๋๋ค?
- 2023๋ ์ฟ ๋ฒ๋คํฐ์ค ํ์ค ์ํคํ ์ฒ
Database
- 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
Operation
Migration
RDB
Fundamental
- 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
Transaction
- DBMS๋ ์ด๋ป๊ฒ ํธ๋์ญ์ ์ ๊ด๋ฆฌํ ๊น?
- Lock์ผ๋ก ์ดํดํ๋ Transaction์ Isolation Level
Index
- How do database indexes work?
- How does database indexing work?
- What do Clustered and Non clustered index actually mean?
Normalization
View
Lock
Sharding/Partitioning
- How does database sharding work?
- DB ํํฐ์ ๋(Partitioning)์ด๋
- ์ฃผ๋ฌธ์๋น์ค ShardingSphere-Proxy ๋์ ๊ธฐ
Pattern
- 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
Optimize
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถํฌ๋(Database Selectivity)
- What are Covering Indexes and Covered Queries in SQL Server?
Vendors
MySQL
Query
- 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?
DDL
- 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
Structure
- Understanding MySQL Storage Engines
- A graph a day, keeps the doctor away ! โ MySQL History List Length
Tips
- MySQL ์ฐ๋ฉด์ ํ์ง ๋ง์์ผ ํ ๊ฒ 17๊ฐ์ง
- MySQL 5.7 FullText Search ์ด์ฉํ๊ธฐ with ngram
- MySQL FullText Search, ์ ๋๋ก ์ดํดํ๊ธฐ
Performance
Transaction
Fault Tolerance
- ์ฅ์ ์ ๊ด๋ จ๋ XtraBackup ์ ์ฉ๊ธฐ
- MySQL MHA(Master High Availability)
- Fault Tolerance ์ํํธ์จ์ด ํจํด
Postgres
- 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
PrestoDB
SQLite
SQL
DML
INSERT
SELECT
Query Plan
WHERE
ORDER BY
JOIN
Functions
UPDATE
DELETE
DDL
CHECK
UNIQUE
NoSQL
Search Engine
Meilisearch
ElasticSearch
Query
- 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
OLAP
Druid
ScyllaDB
- ScyllaDB ๊ธฐ๋ณธ ์ด๋ก ๋ง๋ณด๊ธฐ - NoSQL๊ณผ ScyllaDB
- [Scylla] ์ธ์์์ ๊ฐ์ฅ ๋น ๋ฅธ NoSQL์ Architecture
- ScyllaDB University
RocksDB
Cache
Redis
- Redis ์ค์น, ์ฌ์ฉ ๋ฐฉ๋ฒ, ๋ฐ์ดํฐ ๋ฐฑ์ ์ ์ํ RDB & AOF ๊ฐ๋ ๋ฐ ๊ฐ๋จํ Redis ์ฌ์ฉ ์ฌ๋ก ์ฐ๊ตฌ
- Build Your Own Redis
NewSQL
CockroachDB
- CTO๊ฐ ์ปค๋ฆฌ์ด๋ฅผ ๊ฑธ๊ณ ๋นํธ ๋ ๋ฒจ๊น์ง ๋ด๋ ค๊ฐ์ DB๋ฅผ ํดํนํ๋ ์ด์ผ๊ธฐ
- CockroachDB in Production
Vitess
๋ชจ๋ฐ์ผ
Flutter
- ํ์ฌ๋ ๊ณ ๊ฐ์๊ฒ ํจ๊ณผ์ ์ผ๋ก Flutter ์๊ฐํ๋ ๋ฐฉ๋ฒ์ ์๋ ค๋๋ฆฝ๋๋ค
- ๋ฉ์ฉกํ ์ฑ์ Flutter ์ฑ์ผ๋ก ๋ค์ ์ง ์ด์ - ์ผ๋ณธ 1์ ๋ฐฐ๋ฌ ์ฑ, ๋ ๋ฒ์งธ Recode
Android
- 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
iOS
ํด๋ผ์ฐ๋
AWS
์ปดํจํ
ECS
๋คํธ์ํน
VPC
์คํ ๋ฆฌ์ง
S3
- ๋ฒํท ์ ์ฑ ์์ - ํน์ IP ์ฃผ์ ์ก์ธ์ค ์ ํ
- ๋ฒํท ์ ์ฑ ์์ - Amazon CloudFront ์ค๋ฆฌ์ง ์๊ฒฉ ์ฆ๋ช ์ ๊ถํ ๋ถ์ฌ
- How Canva saves millions annually in Amazon S3 costs
๊ฐ๋ฐ์ ๋๊ตฌ
CodeStar
CodeBuild
CodeDeploy
๋ณด์, ์๊ฒฉ ์ฆ๋ช
- aws-vault ์ฌ์ฉ๋ฒ: AWS์ ์ธ์ฆ ์ ๋ณด ์์ ํ๊ฒ ์ฌ์ฉํ๊ธฐ
- What every developer should know about aws vault
IAM
๋จธ์ ๋ฌ๋
Newral Networks
ํ์
์ฝ๋ ๋ฆฌ๋ทฐ
- kakao Tech : ํจ๊ณผ์ ์ธ ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ์ํ ๋ฆฌ๋ทฐ์ด์ ์์ธ
- ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฌธํ
- LINE Engineering : ํจ๊ณผ์ ์ธ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์ํด์
- Google ์ฝ๋ ๋ฆฌ๋ทฐ ๊ฐ์ด๋ : ํ๊ตญ์ด ๋ฒ์ญ๋ณธ
- ์ฝ๋ ๋ฆฌ๋ทฐ
Git
Fundamental
- What is .gitignore exactly?
- git์ ํด๋๊ฒฝ๋ก๊ฐ ๋ณ๊ฒฝ๋ ๊ฒ์ ์ด๋ป๊ฒ ์ ์ ์์๊น?
- Commits are snapshots, not diffs
Command
How to
- How can one change the timestamp of an old commit in Git?
- How to change the commit author for one specific commit?
Guide
Troubleshooting
- 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
GitHub
- Pull Request๋ฅผ ์ด์ฉํ ๊ฐ๋ฐ ํ๋ฆ์ ์ ์ฉํด ๋ณด๊ณ ๋์
- GitHub์ Pull Request๋ฅผ ๋ก์ปฌ๋ก ๊ฐ์ ธ์ค๊ธฐ
- Reviewing proposed changes in a pull request
์ด์์ฒด์ ๋ณ
Linux
- export, echo ๋ช ๋ น์ด
- lsof ์ฌ์ฉ๋ฒ
- grep ์ฌ์ฉ๋ฒ
- awk ์ฌ์ฉ๋ฒ
- htop Explained Visually
- Crontab ์ฌ์ฉ๋ฒ
- ๋ฆฌ๋ ์ค ๋ช ๋ น์ด sudo, su, su -
- ๋ฆฌ๋ ์ค ์๋ฒ์ TCP ๋คํธ์ํฌ ์ฑ๋ฅ์ ๊ฒฐ์ ์ง๋ ์ปค๋ ํ๋ผ๋ฏธํฐ ์ด์ผ๊ธฐ
Mac
๊ต์/๋ง์ธ๋
- ์ํํธ์จ์ด ํ๋ฉธ๊ฐ(Software disenchantment)
- ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋๊ธฐ๋ ์ ์ด๋ ค์ด๊ฐ?
- [๋ฒ์ญ] ๊ฐ๋ฐ ๋ฐฐ์ฐ๊ธฐ๊ฐ ์ ๋ง ์ด๋ ค์ด ์ด์
- Cognitive Biases in Programming
- ์ฝ๋
- 20 Things Iโve Learned in my 20 Years as a Software Engineer
์ปค๋ฆฌ์ด
- ํ๋ก ํธ์๋ ์์ง๋์ด ์ปค๋ฆฌ์ด ๋ก๋๋งต: ์ฃผ๋์ด๋ฅผ ์ํ 3๊ฐ์ง ์ ๋ฌธ์ฑ ํธ๋
- 1. ์ฐ์ํํ์ ๋ค ๋ถ๊ฒ - ์ ๋ ๋๋์ง
- ๋งํ์๋ ์ด๋ป๊ฒ ํ ๊ฒ์ธ๊ฐ
- ๋๊ตฌ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ ์ ์๋ค
- ์ ์ผ์ํค๊ธฐ
์ฑ์ฅ
- ๊ฐ๋ฐ์์ ์๋ชธ์ผ์ผํค๊ธฐ
- ๋๋ ์ด๋ป๊ฒ ๋ ๋์ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋์๋๊ฐ
- The Forty-Year Programmer
- ์คํํธ์ ์์ ์ฑ์ฅํ๋ค๋ ์ฃผ๋์ด์ ์ฐฉ๊ฐ
- ํ๋ก๊ทธ๋๋ฐ์ ์ข ๋ง
- ๋๊ณ ์๊ฒ ์๊ธฐ vs ์ข๊ณ ๊น๊ฒ ์๊ธฐ
- ๋ ๋ง์ ์ผ์ ํ๋ฉด์ ๋ ๋นจ๋ฆฌ ํ๊ธฐ
- ์ฑ์ฅํ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋๋ ๋ฒ: ์ฃผ๋์ดํธ
Professional
ํ๊ณ
๋ฒ์์ ๊ด๋ จ
์ข์ ๋ธ๋ก๊ทธ
์ข์ ์คํ์์ค
Android
Web Frontend
Backend
Whole Service
๊ธฐํ ๋ฐฐ๊ฒฝ์ง์
JSON
NDJSON
JSONSchema
- JSONSchema
- object - pattern properties
- object - Schema dependencies
- JSON Schema: verifying object's values, without keys
MQTT
RSS
Protobuf
Makefile
์ํ
ํต๊ณํ
- Markov Chains - The University of Auckland
- From โWhat is a Markov Modelโ to โHere is how Markov Models Workโ
๋ฐ์ฌ๋ฆผ
Glossary
Falsehood
๋ณด์
ํดํน
๋คํธ์ํฌ
HTTP
- Permanent URL Hijack Through HTTP 301 Redirect Cache Poisoning
- ์น ๊ฐ๋ฐ์ ์ํด ๊ผญ ์์์ผํ๋ ๋ณด์ ๊ณต๊ฒฉ
์ํธํ
Operation
Insight
๋ง์ผํ
- ๋ชฐ๋ฝ ์ดํ์ ํผํฌ๋จผ์ค ๋ง์ผํ
- ๊ณ ๊ฐ(Customer)์ด ์๋ ๊ด๊ฐ(Audience)์ ๋ชจ์ผ๋ ๊ฒ์ด ์ง์ง ๋ง์ผํ
- What is a tracking link?
- ํผํฌ๋จผ์ค ๋ง์ผํ ์ ์๋ก์ด ์๋
- ์ฌ์ฉ์๋ ๋ฐ๋ณด๊ฐ ์๋์ผ, ๊ธฐ๋ง์ ์ธ ๊ธฐํ๊ณผ ๋ง์ผํ
SEO
- ๊ฒ์์์ง์ต์ ํ(SEO) ์ฌ์ด ๊ฐ์ด๋
- Zero-Click Search ๋ ผ๋, 65%์ ๊ฒ์์ด ํด๋ฆญ์์ด ๋๋๋ค?
- Black Hat - White Hat SEO
- โ์ฝ๊ฒ ์ค๋ช ํโ ๊ตฌ๊ธ์ ํ์ด์ง ๋ญํฌ ์๊ณ ๋ฆฌ์ฆ
- ๊ธฐ์ ๋ธ๋ก๊ทธ๋ฅผ ์ํ SEO
์ ์
UA
Re-engagement
๋ถ์
DAU/MAU
Retention
๊ธฐ์ฌ
๋น์ฆ๋์ค
์ธ์ฌ์ดํธ
- ๋น์ทํด ๋ณด์ด์ง๋ง ์ ํ ๋ค๋ฅธ ๋ ํ์ฌ, ๋ธ๋ก๋ฒ์คํฐ์ ๋ทํ๋ฆญ์ค
- ํ๊ตญ ์ธํฐ๋ท์์ ์๋ชป ๋ผ์์ง ์ฒซ ๋จ์ถ, ๊ทธ ์ด๋ฆ์ ๋ค์ด๋ฒ (NAVER)
- ๋น๊ทผ๋ง์ผ ์ ๋ฌธ๊ฐ๋ชจ๋ ๊ด๊ณ ์ ๊ฐ๋ฅ์ฑ๊ณผ ํ๊ณ
- ์ง์ ๋ง๋ค์ง ๊ทธ๋ฌ์ด
- B2B SaaS์์ ์ธ์ผ์ฆ๋ณด๋ค ๊ณ ๊ฐ์๋น์ค๊ฐ ๋ ์ค์ํ ์ด์
- ๋ณด์ด๋ ๊ฒ ์ ๋ถ๊ฐ ์๋๋ค
- ํ๊ตญ์ธ๋ค์ 7๊ฐ์ง ์ค์
- ๋จ์ด ํด ์ฃผ๋ ์์
- ํ๊ท ์ค์ข ๊ณผ ์ด๋ฒํฐ์นผํ ํ์
์คํํธ์
- The Scoop: Inside Fastโs Rapid Collapse
- ํ๋๋ ฅ์ด ๋ฏธ์น ์ฐฝ์ ํ, ๊ฐ๋ฐ ์์ด MVP ํ ์คํธํ๊ธฐ
- ํผ์น ๋ฑ
- ๋ชจ๋ ์ํํธ์จ์ด ๊ฒฝ์ ์ ๋ต
- We Don't Sell Saddles Here
๊ฒฝ์
Product
- ๊ณ ๊ฐ์ ๋ชจ๋ฅด๋ฉด ํ๋ก๋ํธ๋ ํค๋ฉ๋ผ๊ฐ ๋๋ค
- B2B ํ๋ก๋ํธ ๋์์ด๋๊ฐ ์ ๊ฒฝ ์จ์ผ ํ B2B ํ๋ก๋ํธ์ ํน์ง
- ๊ฐ๋จ์ธ๋๊ฐ ๊ณ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ
- How to develop product sense
- ๋จ์ํ ์ ํ์ ๋ง๋ ๋ค๋ ๊ฒ์ ๋ํด
Management
UI/UX
๋ถ์/๊ฐ์
๊ฒฝ์
- ๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ์คํก์ต์ ์ ๋ชจ๋ ๊ฒ
- ์ ํ์๋ค์ ํญ์ ํ ์ธ ํํ์ ๋ฐ์ ์ ์๋ ๊ฑธ๊น?
Co-working
Management
๊ด๋ฆฌ์ ๋๊ธฐ
- Manager's Playbook
- Delegation 101: Figuring out what to delegate
- ํ์ฅ์ด ๋ ํ์ ์๊ฒ ๋ ๊ฒ๋ค
- ๋ฏธํ ๊ฐ๋ํ ํ์ฅ์ ํ๋ฃจ
- ์คํํธ์ CTO์ ์ผ
- ์ผ์ ๋งก๊ธธ ๋๋ ๊ถํ๊น์ง ๋งก๊ฒจ์ผ ํฉ๋๋ค
์กฐ์ง ๊ด๋ฆฌ
- ๊ท์น์ ๋ง์ง๋ง์ ๊ณ ๋ คํ์ธ์
- ์๋ง ๊ด๋ฆฌํ๊ธฐ
- "๋ฐ๋ฅด์ง ์์ ๊ฑฐ๋ฉด ๋๊ฐ๋ผ"๊ณ ๋งํ๊ธฐ ์ ์
์กฐ์ง ๊ตฌ์ฑ
์กฐ์ง ๋ฌธํ
- 'ํ์ ๊ฑด๊ฐ'์ ์ง๋จํ๋ ๋ฐฉ๋ฒ์ ์งํ
- ์์ด๋น์ค๋น ์์ง๋์ด๊ฐ ์ผํ๋ ๊ฒ ํ๋ณตํ ์ด์
- ๊ธฐ๋ฅ ๊ณต์ฅ์์ ์ผํ๊ณ ์๋ค๋ 12๊ฐ์ง ์ ํธ
- ์ฌ๊ณ ๋ฅผ ์ณ๋ ํผ๋์ง ์๋ ํ์ฌ
- Why Development Teams are Slow
- ๋น์ ์ ๊ฐ๋ฐ์๋ค์ ๊ฒฐ์ฝ ๋๋ฆฌ์ง ์๋ค.
- ์์ฌ๋๊ณผ ์๋ซ์ฌ๋
- ํ์ฌ๋ ๋์ ๋์ดํฐ
- ํ๊ธฐ์ ์ฑ๊ณผ๋ฅผ ๋ด๋ ์คํํธ์ ์ฃผ๊ฐํ์
- ๋๊ตฌ๋ ์ผํ ํ ๊ฐ
- ๋ทํ๋ฆญ์ค์ ๋ฌธํ - ํ์ํจ์ ์ถ๊ตฌํ๋ค
์กฐ์ง ์ฑ์ฅ
- Aligning the company growth
- ์์ฑ๋์ง ์์ ํ์ฌ
- ์คํํธ์ ์ฑ์ฅ์ ๋ฒ์น๊ณผ ์ด๊ธฐ ๋ฉค๋ฒ๋ค์ ์ฌ๋ฆฌ์ ๋ถ์, ๊ทธ๋ฆฌ๊ณ ์ฑ์ฅํต
- ๋ง์ดํฌ๋ก ๋งค๋์ง๋จผํธ์ ์์
์ปค๋ฎค๋์ผ์ด์
ํ๋
๋ง์ธ๋
๊ด๊ณ
์ปค๋ฆฌ์ด
์ฑ์ฅ
- ์ํ๋ ค ํ๋ฉด ์ ์ ๋๋ ์ด์
- ๋ ธ๋ ฅ์ ๋ฐฐ์ ํด๋, ๊ฒ์ผ๋ฆ์ ๋ฐฐ์ ํ์ง ์๋๋ค
- ๋ฌด์กฐ๊ฑด ์์ 10% ์์ ๋๋ ๋ฐฉ๋ฒ
- 90% ์ด๊ธฐ๊ธฐ
- ์ง๊ธ์ด๋ผ๋ ์๊ฒ๋์ด ๋คํ์ธ, ์ํด ๊ณํ ์ ์ธ์ฐ๋ ๋ฒ
- ๊ฒ์ผ๋ฅธ ์ฐ๋ฆฌ๋ฅผ ์ํ ๊ฐ์ ๊ฒ์ํ ํ๋ ์์ํฌ (ft. ์ฐฐ๋ฆฌ์ ๊ฑท๊ธฐ)