한양과학기술고등학교

에듀테크 프로젝트 대시보드

모놀리식 vs 마이크로서비스

하나의 코드베이스, 하나의 프로세스로 배포
🗺️ 요청 흐름 홉 수: 1
"요청 보내기"를 눌러 사용자 요청이 서버 내부를 어떻게 통과하는지 확인해 보세요. 모놀리식은 함수 호출 한 번, 마이크로서비스는 네트워크 홉을 여러 번 거칩니다.
📋 처리 로그 실시간
// 대기 중...

평균 지연 시간(모의) 0 ms
성공 요청 0
장애 영향 범위 -
⚖️ 특성 비교
기준🏛️ 모놀리식🧩 마이크로서비스
배포 단위전체 앱을 통째로 재배포서비스별 독립 배포
장애 격리한 기능 오류가 전체 다운으로 번짐해당 서비스만 영향, 나머지는 생존
통신 방식같은 프로세스 내 함수 호출네트워크 호출(HTTP/gRPC), 지연·실패 가능
확장(스케일링)앱 전체를 통째로 복제트래픽 많은 서비스만 선택적으로 복제
초기 개발 속도빠름 — 코드 하나, 설정 하나느림 — 서비스 간 계약·인프라 필요
디버깅스택 트레이스 하나로 추적 용이여러 서비스에 걸친 분산 트레이싱 필요
데이터베이스보통 하나의 공유 DB서비스마다 자체 DB(Database per Service)
적합한 팀 규모소규모 팀, 초기 스타트업여러 팀이 독립적으로 개발할 때
🐍 모놀리식 예시 main.py 하나
@app.get("/order/{id}") async def get_order(id: int): # 같은 프로세스 안에서 함수 호출만으로 끝남 user = get_user_from_db(order.user_id) stock = check_stock(order.item_id) return {"order": order, "user": user} # 배포: uvicorn main:app 하나만 재시작하면 전체 반영
🧩 마이크로서비스 예시 order-service.py
@app.get("/order/{id}") async def get_order(id: int): # 다른 서비스는 네트워크 너머에 있음 async with httpx.AsyncClient() as client: user = await client.get( f"http://user-service:8002/user/{order.user_id}") stock = await client.get( f"http://stock-service:8003/stock/{order.item_id}") return {"order": order, "user": user.json()} # 배포: order-service만 재시작해도 다른 서비스는 무중단