

→쿠버네티스에서 배포했기 때문에 vscode에서 py [app.py](<http://app.py>)를 실행하지 않아도 자동으로 운영이 되는 것을 확인할 수 있습니다.
Backend: Python, Flask (예상), gTTS 모듈
Database: MySQL (interview_db)
ALTER DATABASE interview_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE interview_db;
CREATE TABLE IF NOT EXISTS questions (
id INT AUTO_INCREMENT PRIMARY KEY,
question TEXT NOT NULL,
model_answer TEXT NOT NULL,
category VARCHAR(50) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS answers (
id INT AUTO_INCREMENT PRIMARY KEY,
question_id INT NOT NULL,
answer TEXT,
feedback TEXT,
session_no INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (question_id) REFERENCES questions(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
SET NAMES utf8mb4;
USE interview_db;
INSERT INTO questions (question, model_answer, category) VALUES
-- ==========================================
-- 1. 네트워크(1계층) - 물리 계층
-- ==========================================
('OSI 7계층 중 1계층(물리 계층)의 주요 역할은 무엇인가요?', '데이터(0과 1의 비트열)를 전기적, 광학적 신호로 변환하여 통신 케이블 등의 물리적 매체를 통해 전송하는 역할을 합니다.', '네트워크(1계층)'),
('1계층에서 데이터를 전송하는 단위(PDU)는 무엇인가요?', '1계층의 데이터 전송 단위는 비트(Bit)입니다. 전기 신호의 On/Off 상태를 의미합니다.', '네트워크(1계층)'),
('리피터(Repeater)의 역할은 무엇인가요?', '물리적 매체를 통해 전송되면서 약해진 전기 신호를 증폭시키고 재생하여 전송 거리를 연장해 주는 1계층 장비입니다.', '네트워크(1계층)'),
('허브(Hub)의 동작 방식과 단점은 무엇인가요?', '허브는 수신한 신호를 연결된 모든 포트로 브로드캐스트(플러딩)합니다. 목적지를 구별하지 못해 충돌(Collision)이 자주 발생하고 네트워크 대역폭이 낭비됩니다.', '네트워크(1계층)'),
('더미 허브와 스위칭 허브의 차이점은 무엇인가요?', '더미 허브는 1계층 장비로 단순 신호 증폭 및 전체 브로드캐스트만 수행하지만, 스위칭 허브(L2 스위치)는 2계층 장비로 MAC 주소를 인식해 목적지에만 유니캐스트 통신을 합니다.', '네트워크(1계층)'),
('UTP 케이블과 STP 케이블의 차이는 무엇인가요?', 'UTP는 쉴드(보호막)가 없는 꼬임선으로 가격이 저렴해 일반 LAN 환경에 쓰이며, STP는 내부 쉴드가 있어 전자기 간섭(EMI)을 막아주어 노이즈가 심한 공장 등에서 사용됩니다.', '네트워크(1계층)'),
('네트워크 토폴로지 중 스타(Star) 토폴로지의 장단점은?', '중앙의 허브나 스위치에 모든 노드가 연결된 형태입니다. 노드 추가/삭제가 쉽고 특정 노드 장애가 전체에 영향을 주지 않지만, 중앙 장비(스위치) 장애 시 전체 네트워크가 마비됩니다.', '네트워크(1계층)'),
('망형(Mesh) 토폴로지의 특징은 무엇인가요?', '모든 노드가 서로 1:1로 연결된 형태입니다. 특정 회선에 장애가 발생해도 우회 경로가 있어 가용성이 매우 높지만, 케이블 구축 비용이 가장 비쌉니다.', '네트워크(1계층)'),
('베이스밴드(Baseband)와 브로드밴드(Broadband) 전송의 차이는?', '베이스밴드는 디지털 신호를 변조 없이 직접 전송하며 주로 LAN에서 씁니다. 브로드밴드는 신호를 아날로그로 변조해 여러 주파수 대역으로 분할 전송하며 장거리 통신(WAN)에 쓰입니다.', '네트워크(1계층)'),
('네트워크 트러블슈팅 시 1계층(물리 계층)에서 주로 확인하는 장애 요인은?', '랜 케이블의 단선, 커넥터(RJ-45) 접촉 불량, 포트의 물리적 손상, 장비 전원 꺼짐 등 물리적 연결 상태를 가장 먼저 점검합니다.', '네트워크(1계층)'),
('NIC(Network Interface Card)는 OSI 몇 계층 장비인가요?', '물리적인 신호 변환을 수행하므로 1계층에 속하면서, 동시에 고유한 MAC 주소를 가지고 프레임을 처리하므로 2계층(데이터링크 계층)에도 속하는 장비입니다.', '네트워크(1계층)'),
('CSMA/CD에서 충돌 감지(Collision Detection)는 주로 어느 계층에서 물리적으로 감지하나요?', '충돌 감지 자체는 케이블 상의 전압 변화를 통해 1계층(물리 계층)에서 이루어지며, 이후 백오프 알고리즘 등 제어는 2계층(MAC 하위 계층)에서 처리됩니다.', '네트워크(1계층)'),
-- ==========================================
-- 2. 네트워크(2계층) - 데이터 링크 계층
-- ==========================================
('2계층(데이터 링크 계층)의 주요 역할은 무엇인가요?', '직접 연결된 인접 노드 간의 신뢰성 있는 데이터 전송을 담당합니다. 물리적 주소(MAC)를 사용하며 오류 제어와 흐름 제어를 수행합니다.', '네트워크(2계층)'),
....이하생략
AI: Google Gemini API
Infrastructure: Docker, Kubernetes (Local 환경)
[명령어 흐름]
1. docker build -t [이미지명] . (이미지 굽기)
2. docker tag [기존이미지명] [도커허브ID]/[레포지토리]:[태그] (이름표 달기)
3. docker push [도커허브ID]/[레포지토리]:[태그] (레지스트리에 올리기)
4. docker run --name [컨테이너명] -d -p [호스트포트]:[컨테이너포트] [이미지명] (실행하기)
5. docker ps (실행 중인 컨테이너 확인)
본 프로젝트는 단일 서버 배포를 넘어, MSA(Microservices Architecture) 관점의 컨테이너 오케스트레이션을 적용하여 설계되었습니다.(PV와 PVC를 추가 구축하여 깃허브에 업데이트,노션은 업데이트 예정)

네트워크 분리 및 접근 제어:
보안 및 환경 변수 관리 (K8s Resources):
Secret: MySQL 비밀번호, DB 포트 번호(3306), Gemini API 키 등 유출 시 치명적인 민감 정보는 Kubernetes Secret(app-secret) 리소스를 생성하여 암호화된 상태로 주입했습니다.
create secret generic app-secret --from-literal=DB_PASSWORD=**** --from-literal=GEMINI_API_KEY=**** --from-literal=DB_PORT=3306
ConfigMap: DB_USER, DB_HOST 등 애플리케이션 구동에 필요하지만 상대적으로 민감하지 않은 설정값은 ConfigMap으로 분리하여 관리 효율성을 높였습니다.

서비스 노출 (Service):
NodePort 타입으로 노출하여 외부 브라우저 통신을 구현했습니다.






1. 라우팅 오류 (Request URL Not Found) 및 빌드 파이프라인 점검