{
    "componentChunkName": "component---src-templates-blog-template-js",
    "path": "/2026-05-24-python-asyncio-기초/",
    "result": {"data":{"cur":{"id":"c69493be-8a51-511f-83d4-7fa580f0470b","html":"<h2 id=\"핵심-개념-왜-필요한가\" style=\"position:relative;\"><a href=\"#%ED%95%B5%EC%8B%AC-%EA%B0%9C%EB%85%90-%EC%99%9C-%ED%95%84%EC%9A%94%ED%95%9C%EA%B0%80\" aria-label=\"핵심 개념 왜 필요한가 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>핵심 개념 (왜 필요한가)</h2>\n<p><code class=\"language-text\">asyncio</code>는 <strong>대기 시간이 긴 작업을 겹쳐서 처리</strong>할 때 강력하다. 특히 HTTP 호출, DB 드라이버, 메시지 큐처럼 CPU보다 <strong>I/O 대기</strong>가 많은 백엔드 작업에서 요청 처리량을 높이는 데 유용하다.<br>\n실무에서는 “빠른 코드”라기보다, <strong>같은 시간에 더 많은 대기 작업을 처리하는 방식</strong>으로 이해하면 가장 정확하다.</p>\n<h2 id=\"기본-사용법\" style=\"position:relative;\"><a href=\"#%EA%B8%B0%EB%B3%B8-%EC%82%AC%EC%9A%A9%EB%B2%95\" aria-label=\"기본 사용법 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>기본 사용법</h2>\n<p><code class=\"language-text\">asyncio</code>의 핵심은 <code class=\"language-text\">async def</code>, <code class=\"language-text\">await</code>, 그리고 이벤트 루프다. <code class=\"language-text\">await</code>는 시간이 걸리는 작업이 끝날 때까지 <strong>스레드를 붙잡지 않고</strong> 다른 코루틴에 실행 기회를 넘긴다.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> asyncio\n<span class=\"token keyword\">import</span> time\n\n<span class=\"token keyword\">async</span> <span class=\"token keyword\">def</span> <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span>name<span class=\"token punctuation\">:</span> <span class=\"token builtin\">str</span><span class=\"token punctuation\">,</span> delay<span class=\"token punctuation\">:</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token builtin\">str</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f\"</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>name<span class=\"token punctuation\">}</span></span><span class=\"token string\"> 시작\"</span></span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">await</span> asyncio<span class=\"token punctuation\">.</span>sleep<span class=\"token punctuation\">(</span>delay<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f\"</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>name<span class=\"token punctuation\">}</span></span><span class=\"token string\"> 완료\"</span></span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string-interpolation\"><span class=\"token string\">f\"</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>name<span class=\"token punctuation\">}</span></span><span class=\"token string\"> 결과\"</span></span>\n\n<span class=\"token keyword\">async</span> <span class=\"token keyword\">def</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    start <span class=\"token operator\">=</span> time<span class=\"token punctuation\">.</span>perf_counter<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n    results <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> asyncio<span class=\"token punctuation\">.</span>gather<span class=\"token punctuation\">(</span>\n        fetch<span class=\"token punctuation\">(</span><span class=\"token string\">\"A\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        fetch<span class=\"token punctuation\">(</span><span class=\"token string\">\"B\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        fetch<span class=\"token punctuation\">(</span><span class=\"token string\">\"C\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">)</span>\n\n    elapsed <span class=\"token operator\">=</span> time<span class=\"token punctuation\">.</span>perf_counter<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> start\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"결과:\"</span><span class=\"token punctuation\">,</span> results<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f\"총 소요 시간: </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>elapsed<span class=\"token punctuation\">:</span><span class=\"token format-spec\">.2f</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">초\"</span></span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">if</span> __name__ <span class=\"token operator\">==</span> <span class=\"token string\">\"__main__\"</span><span class=\"token punctuation\">:</span>\n    asyncio<span class=\"token punctuation\">.</span>run<span class=\"token punctuation\">(</span>main<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>실행해보면 2초 + 1초 + 3초가 아니라, <strong>가장 오래 걸린 3초 정도</strong>만 걸린다.<br>\n이게 <code class=\"language-text\">asyncio</code>의 가장 중요한 포인트다. 순차 처리 대신 <strong>동시 대기</strong>를 만든다.</p>\n<p><code class=\"language-text\">gather()</code>는 여러 코루틴을 한 번에 실행하고 결과를 순서대로 모아준다. 백엔드에서 외부 API 여러 개를 병렬 호출할 때 자주 쓴다.</p>\n<h2 id=\"실전-예제\" style=\"position:relative;\"><a href=\"#%EC%8B%A4%EC%A0%84-%EC%98%88%EC%A0%9C\" aria-label=\"실전 예제 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>실전 예제</h2>\n<p>실무에서 흔한 패턴은 “여러 API를 동시에 호출하되, 실패를 안전하게 처리”하는 형태다. 아래 예시는 외부 서비스 호출을 흉내 낸 코드다.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> asyncio\n<span class=\"token keyword\">import</span> random\n\n<span class=\"token keyword\">async</span> <span class=\"token keyword\">def</span> <span class=\"token function\">call_api</span><span class=\"token punctuation\">(</span>user_id<span class=\"token punctuation\">:</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token builtin\">dict</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">await</span> asyncio<span class=\"token punctuation\">.</span>sleep<span class=\"token punctuation\">(</span>random<span class=\"token punctuation\">.</span>uniform<span class=\"token punctuation\">(</span><span class=\"token number\">0.5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1.5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">if</span> user_id <span class=\"token operator\">==</span> <span class=\"token number\">3</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">raise</span> RuntimeError<span class=\"token punctuation\">(</span><span class=\"token string\">\"외부 API 오류\"</span><span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"user_id\"</span><span class=\"token punctuation\">:</span> user_id<span class=\"token punctuation\">,</span> <span class=\"token string\">\"status\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"ok\"</span><span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">async</span> <span class=\"token keyword\">def</span> <span class=\"token function\">safe_call</span><span class=\"token punctuation\">(</span>user_id<span class=\"token punctuation\">:</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token builtin\">dict</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">try</span><span class=\"token punctuation\">:</span>\n        result <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> call_api<span class=\"token punctuation\">(</span>user_id<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"success\"</span><span class=\"token punctuation\">:</span> <span class=\"token boolean\">True</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"data\"</span><span class=\"token punctuation\">:</span> result<span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">except</span> Exception <span class=\"token keyword\">as</span> e<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"success\"</span><span class=\"token punctuation\">:</span> <span class=\"token boolean\">False</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"user_id\"</span><span class=\"token punctuation\">:</span> user_id<span class=\"token punctuation\">,</span> <span class=\"token string\">\"error\"</span><span class=\"token punctuation\">:</span> <span class=\"token builtin\">str</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">async</span> <span class=\"token keyword\">def</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    user_ids <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">]</span>\n\n    tasks <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>safe_call<span class=\"token punctuation\">(</span>user_id<span class=\"token punctuation\">)</span> <span class=\"token keyword\">for</span> user_id <span class=\"token keyword\">in</span> user_ids<span class=\"token punctuation\">]</span>\n    results <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> asyncio<span class=\"token punctuation\">.</span>gather<span class=\"token punctuation\">(</span><span class=\"token operator\">*</span>tasks<span class=\"token punctuation\">)</span>\n\n    success_count <span class=\"token operator\">=</span> <span class=\"token builtin\">sum</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span> <span class=\"token keyword\">for</span> r <span class=\"token keyword\">in</span> results <span class=\"token keyword\">if</span> r<span class=\"token punctuation\">[</span><span class=\"token string\">\"success\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n    fail_count <span class=\"token operator\">=</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>results<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> success_count\n\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"처리 결과\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">for</span> r <span class=\"token keyword\">in</span> results<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>r<span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f\"성공: </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>success_count<span class=\"token punctuation\">}</span></span><span class=\"token string\">, 실패: </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>fail_count<span class=\"token punctuation\">}</span></span><span class=\"token string\">\"</span></span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">if</span> __name__ <span class=\"token operator\">==</span> <span class=\"token string\">\"__main__\"</span><span class=\"token punctuation\">:</span>\n    asyncio<span class=\"token punctuation\">.</span>run<span class=\"token punctuation\">(</span>main<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>현업에서는 <code class=\"language-text\">gather()</code>에 코루틴을 바로 넘기기도 하지만, <strong>예외 전파 전략을 먼저 정하는 것</strong>이 중요하다.<br>\n한 작업의 실패가 전체 실패여야 하는지, 아니면 부분 성공을 허용할지에 따라 구현이 달라진다. 개인적으로 외부 API 집계 서비스에서는 <code class=\"language-text\">safe_call()</code>처럼 <strong>실패를 결과 객체로 바꾸는 패턴</strong>을 자주 사용했다.</p>\n<p>동시성 제한도 자주 필요하다. 외부 API나 DB 커넥션은 무한정 동시에 호출하면 오히려 장애를 만든다.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> asyncio\n\nsemaphore <span class=\"token operator\">=</span> asyncio<span class=\"token punctuation\">.</span>Semaphore<span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">async</span> <span class=\"token keyword\">def</span> <span class=\"token function\">limited_task</span><span class=\"token punctuation\">(</span>name<span class=\"token punctuation\">:</span> <span class=\"token builtin\">str</span><span class=\"token punctuation\">,</span> delay<span class=\"token punctuation\">:</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">async</span> <span class=\"token keyword\">with</span> semaphore<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f\"</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>name<span class=\"token punctuation\">}</span></span><span class=\"token string\"> 시작\"</span></span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">await</span> asyncio<span class=\"token punctuation\">.</span>sleep<span class=\"token punctuation\">(</span>delay<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f\"</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>name<span class=\"token punctuation\">}</span></span><span class=\"token string\"> 완료\"</span></span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">async</span> <span class=\"token keyword\">def</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">await</span> asyncio<span class=\"token punctuation\">.</span>gather<span class=\"token punctuation\">(</span>\n        limited_task<span class=\"token punctuation\">(</span><span class=\"token string\">\"task-1\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        limited_task<span class=\"token punctuation\">(</span><span class=\"token string\">\"task-2\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        limited_task<span class=\"token punctuation\">(</span><span class=\"token string\">\"task-3\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        limited_task<span class=\"token punctuation\">(</span><span class=\"token string\">\"task-4\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">if</span> __name__ <span class=\"token operator\">==</span> <span class=\"token string\">\"__main__\"</span><span class=\"token punctuation\">:</span>\n    asyncio<span class=\"token punctuation\">.</span>run<span class=\"token punctuation\">(</span>main<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>위 코드는 한 번에 2개씩만 실행된다. 실서비스에서 트래픽이 튀는 순간, 이런 제한 하나가 장애 예방에 꽤 큰 차이를 만든다.</p>\n<h2 id=\"주의사항\" style=\"position:relative;\"><a href=\"#%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD\" aria-label=\"주의사항 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>주의사항</h2>\n<h3 id=\"1-cpu-바운드-작업에는-큰-효과가-없다\" style=\"position:relative;\"><a href=\"#1-cpu-%EB%B0%94%EC%9A%B4%EB%93%9C-%EC%9E%91%EC%97%85%EC%97%90%EB%8A%94-%ED%81%B0-%ED%9A%A8%EA%B3%BC%EA%B0%80-%EC%97%86%EB%8B%A4\" aria-label=\"1 cpu 바운드 작업에는 큰 효과가 없다 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. CPU 바운드 작업에는 큰 효과가 없다</h3>\n<p><code class=\"language-text\">asyncio</code>는 이미지 처리, 압축, 복잡한 계산처럼 CPU를 오래 쓰는 작업에는 적합하지 않다. 그런 경우는 멀티프로세싱이나 작업 큐를 고려하는 편이 낫다.</p>\n<h3 id=\"2-code-classlanguage-texttimesleepcode를-쓰면-이벤트-루프가-멈춘다\" style=\"position:relative;\"><a href=\"#2-code-classlanguage-texttimesleepcode%EB%A5%BC-%EC%93%B0%EB%A9%B4-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%A3%A8%ED%94%84%EA%B0%80-%EB%A9%88%EC%B6%98%EB%8B%A4\" aria-label=\"2 code classlanguage texttimesleepcode를 쓰면 이벤트 루프가 멈춘다 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. <code class=\"language-text\">time.sleep()</code>를 쓰면 이벤트 루프가 멈춘다</h3>\n<p>비동기 함수 안에서 <code class=\"language-text\">time.sleep()</code>를 쓰면 전체가 막힌다. 반드시 <code class=\"language-text\">await asyncio.sleep()</code>를 사용해야 한다.</p>\n<h3 id=\"3-아무-라이브러리나-비동기로-바뀌지-않는다\" style=\"position:relative;\"><a href=\"#3-%EC%95%84%EB%AC%B4-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EB%82%98-%EB%B9%84%EB%8F%99%EA%B8%B0%EB%A1%9C-%EB%B0%94%EB%80%8C%EC%A7%80-%EC%95%8A%EB%8A%94%EB%8B%A4\" aria-label=\"3 아무 라이브러리나 비동기로 바뀌지 않는다 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. 아무 라이브러리나 비동기로 바뀌지 않는다</h3>\n<p>함수에 <code class=\"language-text\">async</code>만 붙인다고 빨라지지 않는다. HTTP 클라이언트, DB 드라이버도 <strong>비동기 지원 라이브러리</strong>여야 한다. 예: <code class=\"language-text\">aiohttp</code>, <code class=\"language-text\">httpx.AsyncClient</code>, async DB 드라이버.</p>\n<h3 id=\"4-너무-많은-태스크-생성은-위험하다\" style=\"position:relative;\"><a href=\"#4-%EB%84%88%EB%AC%B4-%EB%A7%8E%EC%9D%80-%ED%83%9C%EC%8A%A4%ED%81%AC-%EC%83%9D%EC%84%B1%EC%9D%80-%EC%9C%84%ED%97%98%ED%95%98%EB%8B%A4\" aria-label=\"4 너무 많은 태스크 생성은 위험하다 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. 너무 많은 태스크 생성은 위험하다</h3>\n<p>수천, 수만 개 코루틴을 한 번에 만들면 메모리 사용량과 외부 시스템 부하가 커진다. <code class=\"language-text\">Semaphore</code>나 배치 처리로 상한을 두는 게 안전하다.</p>\n<h3 id=\"5-예외-처리를-빼먹기-쉽다\" style=\"position:relative;\"><a href=\"#5-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC%EB%A5%BC-%EB%B9%BC%EB%A8%B9%EA%B8%B0-%EC%89%BD%EB%8B%A4\" aria-label=\"5 예외 처리를 빼먹기 쉽다 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. 예외 처리를 빼먹기 쉽다</h3>\n<p><code class=\"language-text\">gather()</code>는 기본적으로 하나의 예외가 전체 흐름에 영향을 줄 수 있다. 운영 환경에서는 로깅, 타임아웃, 재시도 정책까지 같이 설계해야 한다.</p>\n<h2 id=\"정리\" style=\"position:relative;\"><a href=\"#%EC%A0%95%EB%A6%AC\" aria-label=\"정리 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>정리</h2>\n<ul>\n<li><code class=\"language-text\">asyncio</code>는 I/O 대기 시간이 많은 작업에서 효율적이다.</li>\n<li>핵심 도구는 <code class=\"language-text\">async def</code>, <code class=\"language-text\">await</code>, <code class=\"language-text\">asyncio.run()</code>, <code class=\"language-text\">asyncio.gather()</code>다.</li>\n<li>외부 API, DB, 메시지 큐 처리에서는 동시성 제한이 중요하다.</li>\n<li><code class=\"language-text\">time.sleep()</code> 같은 동기 코드를 섞으면 비동기의 장점이 사라진다.</li>\n<li>실패 전략과 타임아웃 설계가 실무 품질을 좌우한다.</li>\n</ul>\n<p>다음 단계로는 <code class=\"language-text\">asyncio.create_task()</code>, <code class=\"language-text\">asyncio.wait_for()</code>를 이용한 타임아웃 처리, 그리고 <code class=\"language-text\">aiohttp</code>나 <code class=\"language-text\">httpx</code>로 실제 HTTP 비동기 클라이언트를 다뤄보면 좋다.</p>\n<div class=\"table-of-contents\">\n<ul>\n<li>\n<p><a href=\"#%ED%95%B5%EC%8B%AC-%EA%B0%9C%EB%85%90-%EC%99%9C-%ED%95%84%EC%9A%94%ED%95%9C%EA%B0%80\">핵심 개념 (왜 필요한가)</a></p>\n</li>\n<li>\n<p><a href=\"#%EA%B8%B0%EB%B3%B8-%EC%82%AC%EC%9A%A9%EB%B2%95\">기본 사용법</a></p>\n</li>\n<li>\n<p><a href=\"#%EC%8B%A4%EC%A0%84-%EC%98%88%EC%A0%9C\">실전 예제</a></p>\n</li>\n<li>\n<p><a href=\"#%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD\">주의사항</a></p>\n<ul>\n<li><a href=\"#1-cpu-%EB%B0%94%EC%9A%B4%EB%93%9C-%EC%9E%91%EC%97%85%EC%97%90%EB%8A%94-%ED%81%B0-%ED%9A%A8%EA%B3%BC%EA%B0%80-%EC%97%86%EB%8B%A4\">1. CPU 바운드 작업에는 큰 효과가 없다</a></li>\n<li><a href=\"#2-timesleep%EB%A5%BC-%EC%93%B0%EB%A9%B4-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%A3%A8%ED%94%84%EA%B0%80-%EB%A9%88%EC%B6%98%EB%8B%A4\">2. <code class=\"language-text\">time.sleep()</code>를 쓰면 이벤트 루프가 멈춘다</a></li>\n<li><a href=\"#3-%EC%95%84%EB%AC%B4-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EB%82%98-%EB%B9%84%EB%8F%99%EA%B8%B0%EB%A1%9C-%EB%B0%94%EB%80%8C%EC%A7%80-%EC%95%8A%EB%8A%94%EB%8B%A4\">3. 아무 라이브러리나 비동기로 바뀌지 않는다</a></li>\n<li><a href=\"#4-%EB%84%88%EB%AC%B4-%EB%A7%8E%EC%9D%80-%ED%83%9C%EC%8A%A4%ED%81%AC-%EC%83%9D%EC%84%B1%EC%9D%80-%EC%9C%84%ED%97%98%ED%95%98%EB%8B%A4\">4. 너무 많은 태스크 생성은 위험하다</a></li>\n<li><a href=\"#5-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC%EB%A5%BC-%EB%B9%BC%EB%A8%B9%EA%B8%B0-%EC%89%BD%EB%8B%A4\">5. 예외 처리를 빼먹기 쉽다</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"#%EC%A0%95%EB%A6%AC\">정리</a></p>\n</li>\n</ul>\n</div>","excerpt":"핵심 개념 (왜 필요한가) 는 대기 시간이 긴 작업을 겹쳐서 처리할 때 강력하다. 특히 HTTP 호출, DB 드라이버, 메시지 큐처럼 CPU보다 I/O 대기가 많은 백엔드 작업에서 요청 처리량을 높이는 데 유용하다. 실무에서는 “빠른 코드”라기보다, 같은 시간에 더 많은 대기 작업을 처리하는 방식으로 이해하면 가장 정확하다. 기본 사용법 의 핵심은 , , 그리고 이벤트 루프다. 는 시간이 걸리는 작업이 끝날 때까지 스레드를 붙잡지 않고 다른 코루틴에 실행 기회를 넘긴다. 실행해보면 2초 + 1초 + 3초가 아니라, 가장 오래 걸린 3초 정도만 걸린다. 이게 의 가장 중요한 포인트다. 순차 처리 대신 동시 대기를 만든다. 는 여러 코루틴을 한 번에 실행하고 결과를 순서대로 모아준다. 백엔드에서 외부 API 여러 개를 병렬 호출할 때 자주 쓴다. 실전 예제 실무에서 흔한 패턴은 “여러 API를 동시에 호출하되, 실패를 안전하게 처리”하는 형태다. 아래 예시는 외부 서비스 호출을 흉내 …","frontmatter":{"date":"May 24, 2026","title":"Python asyncio 기초","categories":"Python","author":"손(Son/손민기)","emoji":"🎓"},"fields":{"slug":"/2026-05-24-python-asyncio-기초/"}},"next":{"id":"fc512e82-be5b-501a-808d-41fd957bd1b7","html":"<h2 id=\"백엔드-개발-면접-질문2\" style=\"position:relative;\"><a href=\"#%EB%B0%B1%EC%97%94%EB%93%9C-%EA%B0%9C%EB%B0%9C-%EB%A9%B4%EC%A0%91-%EC%A7%88%EB%AC%B82\" aria-label=\"백엔드 개발 면접 질문2 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>👿백엔드 개발 면접 질문2</h2>\n<p>👿백엔드 개발 면접에는 가장 일반적인 답변을 원하는 기본적인 질문과 <strong>우리가 함께할 수 있도록</strong> 도움을 줄 수 있는 기타 질문들이 있다.</p>\n<h3 id=\"1-백엔드에서-가장-많이-사용하는-언어는-무엇인가요\" style=\"position:relative;\"><a href=\"#1-%EB%B0%B1%EC%97%94%EB%93%9C%EC%97%90%EC%84%9C-%EA%B0%80%EC%9E%A5-%EB%A7%8E%EC%9D%B4-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%96%B8%EC%96%B4%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\" aria-label=\"1 백엔드에서 가장 많이 사용하는 언어는 무엇인가요 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. 백엔드에서 가장 많이 사용하는 언어는 무엇인가요?</h3>\n<ul>\n<li>대부분의 백엔드에서는 Java, Python, Ruby, Kotlin, Node.js 등을 사용합니다.</li>\n</ul>\n<p>이 중에서 Java가 가장 많이 사용됩니다. Java는 객체 지향 프로그래밍 언어이며, 안정성과 확장성이 높아 대규모 애플리케이션에 적합합니다. 하지만 Kotlin 많이 이관하는 추세입니다.</p>\n<h3 id=\"2-rest-api와-soap의-차이점은-무엇인가요\" style=\"position:relative;\"><a href=\"#2-rest-api%EC%99%80-soap%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\" aria-label=\"2 rest api와 soap의 차이점은 무엇인가요 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. REST API와 SOAP의 차이점은 무엇인가요?</h3>\n<ul>\n<li>\n<p>REST API는 HTTP 프로토콜을 사용하고, SOAP는 XML을 사용합니다. 또한 REST API는 간결하고 가벼우며, SOAP는 보안이 강화되고 표준화된 인터페이스를 제공합니다.</p>\n</li>\n<li>\n<p>REST API는 간단하고 확장성이 뛰어나며, 사용이 쉽지만, 복잡한 트랜잭션을 처리하는데는 한계가 있습니다. 반면 SOAP는 보안성과 안정성이 높으며, 대규모 시스템에서 사용하기 좋습니다.</p>\n</li>\n</ul>\n<h3 id=\"3-마이크로서비스-아키텍처란-무엇인가요\" style=\"position:relative;\"><a href=\"#3-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\" aria-label=\"3 마이크로서비스 아키텍처란 무엇인가요 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. 마이크로서비스 아키텍처란 무엇인가요?</h3>\n<ul>\n<li>\n<p>마이크로서비스 아키텍처는 작고 독립적인 서비스들이 모여서 하나의 애플리케이션을 구성하는 아키텍처입니다.</p>\n</li>\n<li>\n<p>아키텍처는 각각의 서비스가 서로 다른 기술 스택을 사용할 수 있어 개발자의 자유도가 높고, 서비스 간의 결합도가 낮아 유연성이 높습니다. 또한, 서비스가 분리되어 있어 단일 서비스의 장애가 전체 시스템에 영향을 미치지 않습니다.</p>\n</li>\n</ul>\n<h3 id=\"4-nosql과-rdbms의-차이점은-무엇인가요\" style=\"position:relative;\"><a href=\"#4-nosql%EA%B3%BC-rdbms%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\" aria-label=\"4 nosql과 rdbms의 차이점은 무엇인가요 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. NoSQL과 RDBMS의 차이점은 무엇인가요?</h3>\n<ul>\n<li>\n<p>NoSQL은 스키마가 없거나 유연한 스키마를 가지며, 확장성과 가용성이 높습니다. RDBMS는 정확한 스키마를 가지며, 안정성과 일관성이 높습니다.</p>\n</li>\n<li>\n<p>NoSQL은 데이터의 유형이나 형식을 바꾸는 경우에도 비교적 자유롭지만, RDBMS는 변경에 대한 엄격한 검증 절차가 필요합니다.</p>\n</li>\n</ul>\n<h3 id=\"5-인증과-인가의-차이점은-무엇인가요\" style=\"position:relative;\"><a href=\"#5-%EC%9D%B8%EC%A6%9D%EA%B3%BC-%EC%9D%B8%EA%B0%80%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\" aria-label=\"5 인증과 인가의 차이점은 무엇인가요 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. 인증과 인가의 차이점은 무엇인가요?</h3>\n<ul>\n<li>\n<p>인증은 제품이나 서비스의 기능이나 특성을 검증하는 과정이고, 인가는 권한을 부여하는 과정입니다.</p>\n</li>\n<li>\n<p>예를 들어, 제품이 CE 인증을 받는다는 것은 제품이 EU 기준을 충족한다는 것을 의미합니다. 반면에, 인가는 예를 들어 시스템 관리자가 특정 서버에 접근한 권한을 부여하는 것입니다.</p>\n</li>\n</ul>\n<h3 id=\"6-세션과-쿠키의-차이점은-무엇인가요\" style=\"position:relative;\"><a href=\"#6-%EC%84%B8%EC%85%98%EA%B3%BC-%EC%BF%A0%ED%82%A4%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\" aria-label=\"6 세션과 쿠키의 차이점은 무엇인가요 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6. 세션과 쿠키의 차이점은 무엇인가요?</h3>\n<ul>\n<li>\n<p>세션은 서버 측에서 데이터를 저장하고, 쿠키는 클라이언트 측에서 데이터를 저장합니다.</p>\n</li>\n<li>\n<p>세션은 클라이언트가 서버에 접속할 때 생성되며, 서버에 의해 유지됩니다.</p>\n</li>\n<li>\n<p>쿠키는 브라우저에 저장되며, 만료 기간이 설정되면 삭제됩니다.</p>\n</li>\n<li>\n<p>세션은 중요한 데이터를 저장하기에 적합하고, 쿠키는 세션 ID나 사용자 기본 설정과 같은 정보를 저장하기에 적합합니다.</p>\n</li>\n</ul>\n<h3 id=\"7-http와-https의-차이점은-무엇인가요\" style=\"position:relative;\"><a href=\"#7-http%EC%99%80-https%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\" aria-label=\"7 http와 https의 차이점은 무엇인가요 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7. HTTP와 HTTPS의 차이점은 무엇인가요?</h3>\n<ul>\n<li>\n<p>HTTP는 암호화되지 않은 텍스트 기반 프로토콜이고, HTTPS는 암호화된 데이터 전송을 제공하는 HTTP의 보안 버전입니다.</p>\n</li>\n<li>\n<p>HTTPS는 SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security) 프로토콜을 사용하여 데이터를 암호화하고 보호합니다.</p>\n</li>\n</ul>\n<h3 id=\"8-서버리스-아키텍처란-무엇인가요\" style=\"position:relative;\"><a href=\"#8-%EC%84%9C%EB%B2%84%EB%A6%AC%EC%8A%A4-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\" aria-label=\"8 서버리스 아키텍처란 무엇인가요 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8. 서버리스 아키텍처란 무엇인가요?</h3>\n<ul>\n<li>\n<p>서버리스 아키텍처는 개발자가 서버의 관리나 운영에 대한 부담을 줄이기 위해 고안된 아키텍처입니다.</p>\n</li>\n<li>\n<p>서버리스 아키텍처에서는 서버가 필요하지 않으며, 함수를 실행하는 서비스가 제공됩니다. 이를 통해 개발자는 코드를 작성하고 배포하는 것에 집중할 수 있습니다.</p>\n</li>\n</ul>\n<h3 id=\"9-mvc-패턴이란-무엇인가요\" style=\"position:relative;\"><a href=\"#9-mvc-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\" aria-label=\"9 mvc 패턴이란 무엇인가요 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9. MVC 패턴이란 무엇인가요?</h3>\n<ul>\n<li>\n<p>MVC는 Model-View-Controller의 약자로, 애플리케이션의 구성 요소를 모델, 뷰, 컨트롤러로 나누어서 설계하는 패턴입니다.</p>\n</li>\n<li>\n<p>모델은 데이터와 비즈니스 로직을 처리하고, 뷰는 사용자에게 정보를 보여주는 역할을 하며, 컨트롤러는 모델과 뷰 사이에서 조율하는 역할을 합니다.</p>\n</li>\n</ul>\n<h3 id=\"10-orm이란-무엇인가요\" style=\"position:relative;\"><a href=\"#10-orm%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\" aria-label=\"10 orm이란 무엇인가요 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>10. ORM이란 무엇인가요?</h3>\n<ul>\n<li>\n<p>ORM은 Object-Relational Mapping의 약자로, 객체와 관계형 데이터베이스 간의 매핑을 자동화하는 프레임워크입니다.</p>\n</li>\n<li>\n<p>ORM을 사용하면 SQL 쿼리를 직접 작성하지 않아도 객체를 데이터베이스에 저장하거나 조회할 수 있습니다.</p>\n</li>\n<li>\n<p>ex) JPA (Hibernate)…</p>\n</li>\n</ul>\n<h3 id=\"11-sql-injection과-같은-보안-취약점을-방지하기-위한-방법은-무엇인가요\" style=\"position:relative;\"><a href=\"#11-sql-injection%EA%B3%BC-%EA%B0%99%EC%9D%80-%EB%B3%B4%EC%95%88-%EC%B7%A8%EC%95%BD%EC%A0%90%EC%9D%84-%EB%B0%A9%EC%A7%80%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-%EB%B0%A9%EB%B2%95%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\" aria-label=\"11 sql injection과 같은 보안 취약점을 방지하기 위한 방법은 무엇인가요 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>11. SQL injection과 같은 보안 취약점을 방지하기 위한 방법은 무엇인가요?</h3>\n<ul>\n<li>\n<p>SQL 인젝션은 악의적인 사용자가 입력한 데이터를 이용하여 데이터베이스에 액세스하는 공격입니다.</p>\n</li>\n<li>\n<p>SQL 인젝션을 방지하기 위해, 입력 데이터를 검증하고 이스케이프 문자열 처리를 해야 합니다. 또한, 프리페어드 스테이트먼트를 사용하여 SQL 쿼리를 작성하고, 권한을 최소화하는 등의 방법을 사용할 수 있습니다.</p>\n</li>\n</ul>\n<h3 id=\"12-cdn이란-무엇인가요\" style=\"position:relative;\"><a href=\"#12-cdn%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\" aria-label=\"12 cdn이란 무엇인가요 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>12. CDN이란 무엇인가요?</h3>\n<ul>\n<li>CDN은 Content Delivery Network의 약자로, 전 세계에 분산된 서버 네트워크를 통해 콘텐츠를 제공하는 시스템입니다.</li>\n<li>CDN은 웹사이트의 로딩 속도를 빠르게 하고, 대역폭을 절약할 수 있습니다.</li>\n</ul>\n<h3 id=\"13-aws와-같은-클라우드-서비스를-사용해본-경험이-있나요-있으면-장점도-말해주세요\" style=\"position:relative;\"><a href=\"#13-aws%EC%99%80-%EA%B0%99%EC%9D%80-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EC%84%9C%EB%B9%84%EC%8A%A4%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B8-%EA%B2%BD%ED%97%98%EC%9D%B4-%EC%9E%88%EB%82%98%EC%9A%94-%EC%9E%88%EC%9C%BC%EB%A9%B4-%EC%9E%A5%EC%A0%90%EB%8F%84-%EB%A7%90%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94\" aria-label=\"13 aws와 같은 클라우드 서비스를 사용해본 경험이 있나요 있으면 장점도 말해주세요 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>13. AWS와 같은 클라우드 서비스를 사용해본 경험이 있나요? 있으면 장점도 말해주세요.</h3>\n<ul>\n<li>\n<p>예, 저는 AWS를 사용해본 경험이 있습니다.</p>\n</li>\n<li>\n<p>AWS는 클라우드 컴퓨팅 서비스를 제공하는 아마존의 플랫폼입니다. AWS를 사용하면 서버, 데이터베이스, 스토리지 등을 쉽게 구축하고 관리할 수 있습니다.</p>\n</li>\n</ul>\n<h3 id=\"14-빅데이터-처리를-위해-자주-사용하는-기술은-무엇인가요\" style=\"position:relative;\"><a href=\"#14-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%B2%98%EB%A6%AC%EB%A5%BC-%EC%9C%84%ED%95%B4-%EC%9E%90%EC%A3%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EA%B8%B0%EC%88%A0%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\" aria-label=\"14 빅데이터 처리를 위해 자주 사용하는 기술은 무엇인가요 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>14. 빅데이터 처리를 위해 자주 사용하는 기술은 무엇인가요?</h3>\n<ul>\n<li>\n<p>대용량 데이터 처리를 위해 저는 하둡, 스파크 등의 기술을 주로 사용합니다.</p>\n</li>\n<li>\n<p>하둡은 대용량 데이터를 분산 저장하고 처리하는 데 사용되는 오픈소스 소프트웨어 프레임워크입니다.</p>\n</li>\n<li>\n<p>스파크는 하둡과 유사한 기능을 제공하지만, 인메모리 처리와 스트림 처리 등의 추가 기능을 제공합니다.</p>\n</li>\n</ul>\n<h3 id=\"15-도커와-쿠버네티스에-대해-설명해주세요\" style=\"position:relative;\"><a href=\"#15-%EB%8F%84%EC%BB%A4%EC%99%80-%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4%EC%97%90-%EB%8C%80%ED%95%B4-%EC%84%A4%EB%AA%85%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94\" aria-label=\"15 도커와 쿠버네티스에 대해 설명해주세요 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>15. 도커와 쿠버네티스에 대해 설명해주세요.</h3>\n<ul>\n<li>\n<p>도커는 컨테이너 기반 가상화 플랫폼으로, 애플리케이션을 컨테이너에 패키징하여 독립적으로 실행할 수 있습니다.</p>\n</li>\n<li>\n<p>쿠버네티스는 컨테이너 오케스트레이션 툴로, 도커와 같은 컨테이너 기술을 사용하는 애플리케이션을 자동으로 배포, 확장, 관리할 수 있습니다.</p>\n</li>\n<li>\n<p>쿠버네티스는 여러 대의 서버에 컨테이너를 분산 배치하여 고가용성, 확장성 등의 이점을 제공합니다.</p>\n</li>\n</ul>\n<h3 id=\"16-도커와-vm-차이점을-설명해주세요\" style=\"position:relative;\"><a href=\"#16-%EB%8F%84%EC%BB%A4%EC%99%80-vm-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%84-%EC%84%A4%EB%AA%85%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94\" aria-label=\"16 도커와 vm 차이점을 설명해주세요 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>16. 도커와 VM 차이점을 설명해주세요.</h3>\n<ul>\n<li>\n<p>VM은 전체 시스템을 가상화하는 반면 Docker 컨테이너는 개별 애플리케이션을 가상화합니다.</p>\n</li>\n<li>\n<p>VM은 서로 다른 운영 체제 간에 완전한 격리를 제공하는 반면 Docker 컨테이너는 호스트 시스템의 운영 체제 커널을 공유하여 효율성과 속도를 높입니다.</p>\n</li>\n</ul>\n<p>간단하게 적어서 혼돈되는 내용 댓글로 달아주시면 자세하게 설명하겠습니다.</p>\n<p>끝!</p>\n<div class=\"table-of-contents\">\n<ul>\n<li>\n<p><a href=\"#%EB%B0%B1%EC%97%94%EB%93%9C-%EA%B0%9C%EB%B0%9C-%EB%A9%B4%EC%A0%91-%EC%A7%88%EB%AC%B82\">👿백엔드 개발 면접 질문2</a></p>\n<ul>\n<li><a href=\"#1-%EB%B0%B1%EC%97%94%EB%93%9C%EC%97%90%EC%84%9C-%EA%B0%80%EC%9E%A5-%EB%A7%8E%EC%9D%B4-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%96%B8%EC%96%B4%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\">1. 백엔드에서 가장 많이 사용하는 언어는 무엇인가요?</a></li>\n<li><a href=\"#2-rest-api%EC%99%80-soap%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\">2. REST API와 SOAP의 차이점은 무엇인가요?</a></li>\n<li><a href=\"#3-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\">3. 마이크로서비스 아키텍처란 무엇인가요?</a></li>\n<li><a href=\"#4-nosql%EA%B3%BC-rdbms%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\">4. NoSQL과 RDBMS의 차이점은 무엇인가요?</a></li>\n<li><a href=\"#5-%EC%9D%B8%EC%A6%9D%EA%B3%BC-%EC%9D%B8%EA%B0%80%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\">5. 인증과 인가의 차이점은 무엇인가요?</a></li>\n<li><a href=\"#6-%EC%84%B8%EC%85%98%EA%B3%BC-%EC%BF%A0%ED%82%A4%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\">6. 세션과 쿠키의 차이점은 무엇인가요?</a></li>\n<li><a href=\"#7-http%EC%99%80-https%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\">7. HTTP와 HTTPS의 차이점은 무엇인가요?</a></li>\n<li><a href=\"#8-%EC%84%9C%EB%B2%84%EB%A6%AC%EC%8A%A4-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\">8. 서버리스 아키텍처란 무엇인가요?</a></li>\n<li><a href=\"#9-mvc-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\">9. MVC 패턴이란 무엇인가요?</a></li>\n<li><a href=\"#10-orm%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\">10. ORM이란 무엇인가요?</a></li>\n<li><a href=\"#11-sql-injection%EA%B3%BC-%EA%B0%99%EC%9D%80-%EB%B3%B4%EC%95%88-%EC%B7%A8%EC%95%BD%EC%A0%90%EC%9D%84-%EB%B0%A9%EC%A7%80%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-%EB%B0%A9%EB%B2%95%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\">11. SQL injection과 같은 보안 취약점을 방지하기 위한 방법은 무엇인가요?</a></li>\n<li><a href=\"#12-cdn%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\">12. CDN이란 무엇인가요?</a></li>\n<li><a href=\"#13-aws%EC%99%80-%EA%B0%99%EC%9D%80-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EC%84%9C%EB%B9%84%EC%8A%A4%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B8-%EA%B2%BD%ED%97%98%EC%9D%B4-%EC%9E%88%EB%82%98%EC%9A%94-%EC%9E%88%EC%9C%BC%EB%A9%B4-%EC%9E%A5%EC%A0%90%EB%8F%84-%EB%A7%90%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94\">13. AWS와 같은 클라우드 서비스를 사용해본 경험이 있나요? 있으면 장점도 말해주세요.</a></li>\n<li><a href=\"#14-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%B2%98%EB%A6%AC%EB%A5%BC-%EC%9C%84%ED%95%B4-%EC%9E%90%EC%A3%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EA%B8%B0%EC%88%A0%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94\">14. 빅데이터 처리를 위해 자주 사용하는 기술은 무엇인가요?</a></li>\n<li><a href=\"#15-%EB%8F%84%EC%BB%A4%EC%99%80-%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4%EC%97%90-%EB%8C%80%ED%95%B4-%EC%84%A4%EB%AA%85%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94\">15. 도커와 쿠버네티스에 대해 설명해주세요.</a></li>\n<li><a href=\"#16-%EB%8F%84%EC%BB%A4%EC%99%80-vm-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%84-%EC%84%A4%EB%AA%85%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94\">16. 도커와 VM 차이점을 설명해주세요.</a></li>\n</ul>\n</li>\n</ul>\n</div>","frontmatter":{"date":"April 26, 2023","title":"👿백엔드 개발 면접 질문2","categories":"CS","author":"손(Son/손민기)","emoji":"😱"},"fields":{"slug":"/CS/backend-interview2/"}},"prev":null,"site":{"siteMetadata":{"siteUrl":"https://smk692.github.io","comments":{"utterances":{"repo":"smk692/blog-comments"}}}}},"pageContext":{"slug":"/2026-05-24-python-asyncio-기초/","nextSlug":"/CS/backend-interview2/","prevSlug":"","readingTime":6,"keywords":["python","asyncio","asyncawait","비동기처리","이벤트루프","코루틴","gather","동시성","비동기프로그래밍","iobound"],"series":null,"seriesPosts":[],"updatedDate":"2026-05-24 17:25:27"}},
    "staticQueryHashes": ["1073350324","1956554647","2938748437"]}