전체 글
-
[Python] OAuth2와 JWT — 인증과 인가를 이해하는 올바른 시작점IT 2026. 1. 26. 17:54
인증과 인가를 이해하는 올바른 시작점백엔드 개발을 하다보면! 즉 로그인 기능을 만들다보면 또는 인터넷에 로그인 기능 만들기라고 해보면 반드시 마주치는 단어들이 있습니다.OAuth2, JWT, Access Token, Refresh Token.이 개념들이 자주 등장하지만, 실제로는 서로 다른 문제를 해결하기 위해 만들어진 기술 입니다.그런데 많은 글과 강의에서 이 둘을 섞어서 설명하다 보니, 구조가 잘보이지 않습니다. 저 또한 많이 두개에 대해서 헷갈려합니다. 하지만 이블로그를 통해서 더 이상 헷갈리지 않는 개발자가 되어봅니다. 먼저 짚고 가야 할 개념: 인증과 인가이 둘은 비슷해 보이지만 완전히 다릅니다. 인증(Authentication): 너는 누구인가?인가(Authorization): 너는 무엇을 할..
-
[Python] Asyncio Vs Threading Vs Multiprocessing — 무엇을 선택해야 할까IT 2026. 1. 23. 11:41
무엇을 선택해야 할까파이썬에서 동시성 이야기를 시작하면 반드시 마주치는 질문이 있습니다.“이건 asyncio로 해야 하나요, threading으로 해야 하나요?” “multiprocessing은 언제 쓰는 거죠?”이 질문이 어려운 이유는, 세 기술이 겉으로는 비슷해 보이지만 전혀 다른 문제를 해결하기 때문입니다. 이 글에서는 성능 비교보다는, 사고 기준을 중심으로 어떤 상황에서 무엇을 선택해야 하는지 정리해보겠습니다.먼저 한 문장으로 요약하면asyncio는 기다림을 잘 다루기 위한 도구입니다threading은 막아두지 않고 같이 일하게 하는 도구입니다multiprocessing은 CPU를 더 쓰기 위한 도구입니다이 문장을 이해하면 선택의 절반은 끝난 셈입니다.asyncio — 기다림이 많은 문제를 다룰 ..
-
[Python] Async 코드가 느려지는 순간들 — 실무에서 가장 많이 하는 실수들IT 2026. 1. 23. 11:39
async 코드가 느려지는 순간들실무에서 가장 많이 하는 실수들async / await를 도입하면 많은 사람들이 이렇게 기대합니다.“이제 우리 서비스는 빨라질 거야.”하지만 실제 현장에서는 종종 정반대의 경험을 하게 됩니다. async로 바꿨는데 오히려 느려졌거나, CPU 사용률이 치솟거나, 이유 없이 응답이 밀리는 상황을 만납니다.이 글에서는 async 자체의 문제가 아니라, 실무에서 정말 자주 발생하는 패턴들을 중심으로, async 코드가 느려지는 이유를 정리해보려 합니다.1. async 함수 안에 CPU-bound 로직이 있을 때가장 흔하면서도 가장 치명적인 경우입니다.async def handler(): result = 0 for i in range(10**7): resul..
-
[Python] 왜 Asyncio에는 Executor가 필요한가 — Async와 Cpu-bound의 경계IT 2026. 1. 23. 11:35
async와 CPU-bound의 경계async / await를 어느 정도 이해하고 나면, 결국 이런 질문에 도달하게 됩니다.async로 작성했는데, 왜 어떤 코드는 여전히 느릴까?그리고 조금 더 파고들면, run_in_executor 혹은 ThreadPoolExecutor, ProcessPoolExecutor 같은 존재를 만나게 됩니다. 이 글에서는 executor를 문법이나 사용법이 아니라, 왜 asyncio 세계에 이런 장치가 필요했는지라는 관점에서 정리해보려 합니다.async는 모든 문제를 해결하지 않는다async는 강력하지만, 만능은 아닙니다. async가 잘 해결하는 문제는 명확합니다.네트워크 I/O파일 I/O대기 시간이 많은 작업이들의 공통점은 CPU를 거의 사용하지 않는다는 점입니다. asy..
-
[Python] 이벤트 루프는 어떻게 동작하는가 — Pseudo-code로 보는 Asyncio의 내부IT 2026. 1. 23. 11:33
pseudo-code로 보는 asyncio의 내부이전 글에서 우리는 이벤트 루프가 “무언가를 실행하는 엔진”이 아니라, 실행 시점을 관리하는 관리자라는 이야기를 했습니다. 그렇다면 이제 이런 질문이 자연스럽게 이어집니다.이벤트 루프는 실제로 어떤 순서로, 무엇을 보고 판단할까?이번 글에서는 asyncio의 실제 소스코드를 따라가지는 않습니다. 대신 개념을 이해하기에 충분한 수준의 pseudo-code로 이벤트 루프의 동작을 풀어보려 합니다.이벤트 루프를 한 문장으로 줄이면이벤트 루프는 결국 이것을 무한히 반복합니다.지금 실행할 수 있는 작업이 있는가?없다면, 언제까지 기다려야 하는가?준비된 작업이 생기면 실행한다이걸 코드로 상상하면, 놀라울 정도로 단순한 구조가 됩니다.가장 단순한 이벤트 루프의 형태개념..
-
[Python] Async 핵심 개념 3부작 — 이벤트 루프, 동시성, 블로킹IT 2026. 1. 23. 11:19
이벤트 루프는 무엇을 하는가async / await를 사용하다 보면 자연스럽게 이런 의문이 생깁니다.이벤트 루프는 정확히 어떤 일을 하고 있을까?이벤트 루프는 흔히 오해되듯이 “비동기 작업을 실행하는 엔진”이 아닙니다. 오히려 이벤트 루프는 작업을 언제 실행할지 결정하는 스케줄러에 가깝습니다.이벤트 루프의 역할이벤트 루프의 핵심 역할은 다음 세 가지로 정리할 수 있습니다.실행 가능한 코루틴을 선택한다실행이 불가능한 작업(I/O 대기 등)은 대기 상태로 둔다준비가 된 작업이 생기면 다시 실행 기회를 준다이 과정을 이벤트 루프는 끊임없이 반복합니다. 내부 구현은 복잡하지만, 개념적으로는 하나의 큰 반복문이라고 이해해도 무방합니다.await의 의미await는 단순히 “결과를 기다린다”는 의미가 아닙니다. aw..
-
[Python] GIL — 파이썬은 왜 멀티코어를 막아놓았을까IT 2026. 1. 23. 11:16
파이썬으로 어느 정도 개발을 하다 보면, 언젠가 반드시 이 질문을 만나게 됩니다.“왜 파이썬은 멀티스레드를 써도 CPU를 하나만 쓰는 것 같지?”그리고 곧이어 등장하는 단어가 바로 GIL(Global Interpreter Lock) 입니다. 이 글에서는 GIL을 단순히 ‘파이썬의 한계’로 설명하지 않고, 왜 이런 선택이 나왔는지, 그리고 우리가 어떻게 받아들이고 활용해야 하는지를 중심으로 풀어보려 합니다.GIL이란 무엇인가GIL은 말 그대로 전역 인터프리터 락입니다.CPython 인터프리터는 내부적으로 한 시점에 하나의 스레드만이 바이트코드를 실행할 수 있도록 설계되어 있습니다. 이 제약을 강제하는 장치가 바로 GIL입니다.즉,멀티스레드를 만들 수는 있지만동시에 파이썬 코드를 실행할 수는 없다라는 구조입..
-
[Python] 서브루틴과 코루틴 — 흐름을 누가 쥐고 있는가IT 2026. 1. 23. 11:12
프로그램을 작성할 때 우리는 끊임없이 함수를 호출합니다. 너무 자연스럽게 쓰다 보니, 보통은 이런 질문을 하지 않습니다.“함수를 호출하면, 흐름은 누가 가지고 있을까?”서브루틴과 코루틴의 차이는 문법의 차이가 아니라, 바로 이 제어 흐름(control flow) 에 대한 관점 차이에서 시작됩니다. 이 글에서는 두 개념을 비동기 문법이나 구현 세부가 아니라, 프로그램이 어떻게 실행을 이어가는가라는 큰 그림에서 풀어보려 합니다.우리가 익숙한 함수는 서브루틴이다우리가 일반적으로 사용하는 함수는 모두 서브루틴(subroutine) 입니다.def add(a, b): return a + bresult = add(1, 2) 이 코드에서 흐름은 명확합니다.add를 호출하면호출한 쪽의 실행은 멈추고함수가 끝날 때까..