# Phase 1, Task 2: Frontend Inquiry Form Pseudocode 이 문서는 AIROUM 랜딩 페이지의 프론트엔드 '문의하기' 폼의 구조와 동작을 정의합니다. - **기술 스택:** HTML, CSS, Vanilla JavaScript --- ## 1. HTML 구조 (`templates/index.html`) - '문의하기' 섹션에 포함될 폼의 기본 구조입니다. ```html

문의 및 신청

``` --- ## 2. JavaScript 로직 (`static/js/main.js`) ### 2.1. 메인 실행 로직 - 페이지 로드 완료 시, 이벤트 리스너를 설정합니다. ```pseudocode DOCUMENT is ready: // 폼 요소 가져오기 inquiry_form = get_element_by_id("inquiry-form") email_input = get_element_by_id("email") // 폼 제출 이벤트 리스너 추가 ADD_EVENT_LISTENER to inquiry_form for "submit" event, call handle_form_submit // TEST: 폼 제출 시 handle_form_submit 함수가 호출되는지 확인 // 이메일 필드 실시간 유효성 검사 리스너 추가 ADD_EVENT_LISTENER to email_input for "input" event, call validate_email_realtime // TEST: 이메일 필드에 입력 시 validate_email_realtime 함수가 호출되는지 확인 ``` ### 2.2. 폼 제출 핸들러 - '제출하기' 버튼 클릭 시 실행될 로직입니다. ```pseudocode FUNCTION handle_form_submit(event): // 기본 폼 제출 동작 방지 PREVENT_DEFAULT_ACTION for event // 제출 버튼 비활성화 및 로딩 상태 표시 submit_button = get_element_by_id("submit-button") SET_ATTRIBUTE of submit_button to "disabled", TRUE SET_INNER_HTML of submit_button to "전송 중..." // TEST: 제출 버튼 클릭 시 버튼이 비활성화되고 텍스트가 변경되는지 확인 // 폼 데이터 가져오기 form_data = { name: get_value_from_element("name"), email: get_value_from_element("email"), phone: get_value_from_element("phone"), message: get_value_from_element("message") } // API로 데이터 전송 CALL send_inquiry_to_api(form_data) ``` ### 2.3. API 통신 함수 - 백엔드 API로 데이터를 전송합니다. ```pseudocode ASYNC FUNCTION send_inquiry_to_api(data): TRY: // '/api/inquiry'로 POST 요청 response = AWAIT fetch("/api/inquiry", { method: "POST", headers: { "Content-Type": "application/json" }, body: convert_to_json(data) }) // 응답 데이터를 JSON으로 파싱 result = AWAIT response.json() IF response.status is 201: // 성공 CALL show_feedback_message("문의가 성공적으로 접수되었습니다.", "success") RESET inquiry_form // TEST: API 응답이 성공(201)일 때, 성공 메시지를 표시하고 폼을 초기화하는지 확인 ELSE: // 실패 (e.g., 400 Bad Request) error_message = result.message IF result.errors: // 필드별 에러 메시지 추가 error_message += format_errors(result.errors) END IF CALL show_feedback_message(error_message, "error") // TEST: API 응답이 실패(400)일 때, 에러 메시지를 정확히 표시하는지 확인 END IF CATCH network_error: CALL show_feedback_message("네트워크 오류가 발생했습니다. 다시 시도해주세요.", "error") // TEST: 네트워크 오류 발생 시, 적절한 에러 메시지를 표시하는지 확인 FINALLY: // 제출 버튼 다시 활성화 submit_button = get_element_by_id("submit-button") SET_ATTRIBUTE of submit_button to "disabled", FALSE SET_INNER_HTML of submit_button to "제출하기" // TEST: API 통신 완료 후(성공/실패 무관) 제출 버튼이 다시 활성화되는지 확인 END TRY ``` ### 2.4. 헬퍼 함수 (Helper Functions) ```pseudocode // 실시간 이메일 유효성 검사 함수 FUNCTION validate_email_realtime(event): email = event.target.value email_error_element = get_element_by_id("email-error") IF is_valid_email_format(email) OR email IS EMPTY: SET_INNER_HTML of email_error_element to "" ELSE: SET_INNER_HTML of email_error_element to "올바른 이메일 형식이 아닙니다." END IF // TEST: 유효하지 않은 이메일 입력 시 실시간으로 에러 메시지가 표시되는지 확인 // TEST: 유효한 이메일 입력 시 에러 메시지가 사라지는지 확인 // 사용자 피드백 표시 함수 FUNCTION show_feedback_message(message, type): feedback_element = get_element_by_id("form-feedback") SET_INNER_HTML of feedback_element to message SET_CLASS of feedback_element to type // 'success' 또는 'error' 클래스 추가 // TEST: 'success' 타입으로 호출 시 성공 메시지가 올바른 스타일로 표시되는지 확인 // TEST: 'error' 타입으로 호출 시 에러 메시지가 올바른 스타일로 표시되는지 확인