diff --git a/_posts/2024-10-02-creating-web-interface.md b/_posts/2024-10-02-creating-web-interface.md
new file mode 100644
index 0000000..4590bf0
--- /dev/null
+++ b/_posts/2024-10-02-creating-web-interface.md
@@ -0,0 +1,151 @@
+---
+layout: post
+title: "Gradio 기반 NL2SQL 챗봇 만들기 - Part 2: 웹 인터페이스 만들기"
+author: chaewon
+categories: [NLP, Web]
+image: assets/images/gradio_free.png
+---
+
+안녕하세요🤗 오늘은 Hugging Face에서 개발한 Gradio 라이브러리를 사용하여 머신러닝 모델을 위한 웹 인터페이스를 쉽고 빠르게 만드는 방법을 알아보겠습니다. Gradio를 사용하면 복잡한 웹 개발 지식 없이도 데모나 인터페이스를 빠르게 제작할 수 있습니다.
+
+## 1. Gradio 소개
+
+Gradio는 머신러닝 모델이나 Python 함수를 위한 웹 기반 GUI를 몇 줄의 코드로 만들 수 있게 해주는 강력한 도구입니다. 주요 특징은 다음과 같아요.
+
+- 다양한 입력/출력 컴포넌트 지원 (텍스트, 이미지, 오디오 등)
+- 간단한 Python API
+- 로컬 호스팅 및 클라우드 배포 옵션
+- 다양한 머신러닝 프레임워크와의 호환성
+
+## 2. 기본 사용법: Hello World 예제
+
+먼저, 가장 기본적인 Gradio 애플리케이션을 만들어 보겠습니다. 이 예제에서는 사용자의 이름을 입력받아 인사말을 반환하는 간단한 함수를 만들고, 이를 웹 인터페이스로 구현해볼 것입니다.
+
+```python
+import gradio as gr
+
+def greet(name):
+ return "Hello " + name + "!"
+
+demo = gr.Interface(fn=greet, inputs="textbox", outputs="textbox")
+
+if __name__ == "__main__":
+ demo.launch()
+```
+
+이 코드를 실행하면, 로컬 서버가 시작되고 웹 브라우저에서 인터페이스를 볼 수 있습니다. 텍스트 상자에 이름을 입력하고 'Submit' 버튼을 클릭하면, 인사말이 출력됩니다.
+
+## 3. Gradio Interface 클래스 상세 설명
+
+Gradio의 핵심은 `Interface` 클래스입니다. 이 클래스를 사용하여 함수와 입력/출력 컴포넌트를 연결하고 웹 인터페이스를 생성합니다.
+
+### 주요 매개변수
+
+- `fn`: 인터페이스로 감싸고자 하는 함수
+- `inputs`: 입력 컴포넌트 (예: "textbox", "image" 등)
+- `outputs`: 출력 컴포넌트
+- `examples`: 예제 입력값 리스트
+- `title`: 인터페이스 제목
+- `description`: 인터페이스 설명
+
+## 4. 고급 예제: 이미지 분류기
+
+이번에는 조금 더 복잡한 예제로, 이미지 분류기를 위한 인터페이스를 만들어 보겠습니다.
+
+```python
+import gradio as gr
+import torch
+from torchvision import models, transforms
+from PIL import Image
+
+# 사전 훈련된 ResNet50 모델 로드
+model = models.resnet50(pretrained=True)
+model.eval()
+
+# 이미지 전처리를 위한 변환 정의
+preprocess = transforms.Compose([
+ transforms.Resize(256),
+ transforms.CenterCrop(224),
+ transforms.ToTensor(),
+ transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
+])
+
+# ImageNet 클래스 레이블 로드
+with open('imagenet_classes.txt', 'r') as f:
+ labels = [line.strip() for line in f.readlines()]
+
+def image_classifier(img):
+ # 이미지 전처리
+ input_tensor = preprocess(img)
+ input_batch = input_tensor.unsqueeze(0)
+
+ # 추론
+ with torch.no_grad():
+ output = model(input_batch)
+
+ # 결과 처리
+ probabilities = torch.nn.functional.softmax(output[0], dim=0)
+ top5_prob, top5_catid = torch.topk(probabilities, 5)
+
+ # 결과를 사전 형식으로 변환
+ results = {}
+ for i in range(top5_prob.size(0)):
+ results[labels[top5_catid[i]]] = float(top5_prob[i])
+
+ return results
+
+demo = gr.Interface(
+ fn=image_classifier,
+ inputs=gr.Image(type="pil"),
+ outputs=gr.Label(num_top_classes=5),
+ title="이미지 분류기",
+ description="이미지를 업로드하면 상위 5개의 예측 클래스와 확률을 보여줍니다."
+)
+
+if __name__ == "__main__":
+ demo.launch()
+```
+
+이 예제에서는 이미지를 입력으로 받아 상위 5개의 예측 클래스와 확률 출력하는 인터페이스를 만들었습니다.
+
+## 5. 인터페이스 실행하기
+
+`launch()` 메서드를 사용하여 인터페이스를 실행할 수 있습니다. 다양한 옵션을 제공하여 실행 방식을 커스터마이즈할 수 있습니다.
+
+```python
+demo.launch(
+ share=True, # 공유 가능한 링크 생성
+ auth=("username", "password"), # 기본 인증 설정
+ server_port=7860 # 서버 포트 지정
+)
+```
+
+## 6. 큐 시스템 활용하기
+
+Gradio는 큐 시스템을 제공하여 동시 요청을 관리하고 사용자 경험을 향상시킬 수 있습니다.
+
+```python
+demo = gr.Interface(image_classifier, gr.Image(), gr.Label())
+demo.queue(max_size=50) # 최대 50개의 요청을 큐에 저장
+demo.launch()
+```
+
+이렇게 하면 동시에 들어오는 요청을 효과적으로 관리하고, 사용자에게 대기 시간을 알려줄 수 있습니다.
+
+## 결론
+
+Gradio를 사용하면 복잡한 머신러닝 모델도 쉽게 웹 인터페이스로 만들 수 있습니다. 이 튜토리얼에서는 기본적인 사용법부터 고급 기능까지 살펴보았습니다. Gradio의 다양한 컴포넌트와 옵션을 활용하여 여러분의 프로젝트에 맞는 인터페이스를 만들어보세요!
+
+다음 포스팅에서는 이러한 Gradio의 기능을 활용하여 Text-to-SQL 챗봇을 구현해볼 예정입니다. 이 챗봇은 다음과 같은 특징을 가질 예정이에요.
+
+- 자연어 질문을 SQL 쿼리로 변환하는 NLP 모델 통합
+- 데이터베이스 스키마 정보를 컨텍스트로 활용
+- 생성된 SQL 쿼리와 실행 결과를 동시에 표시하는 다중 출력 인터페이스
+- 대화 기록을 유지하는 채팅 인터페이스 구현
+
+Gradio의 다양한 컴포넌트와 옵션을 활용하면, 이러한 복잡한 기능도 비교적 적은 코드로 구현할 수 있습니다. 여러분의 프로젝트에 맞는 고유한 인터페이스를 만들어보세요!
+
+## 참고 자료
+
+- [Gradio 공식 문서](https://www.gradio.app/docs/)
+- [Gradio GitHub 저장소](https://github.com/gradio-app/gradio)
\ No newline at end of file