[Go 공식문서 한국어 정리] ⓪25. Go로 웹 애플리케이션 작성하기
[Go 공식문서 한국어 정리] ⓪25. Go로 웹 애플리케이션 작성하기
원문 제목: Writing Web Applications
작성자: Go Team
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
이 튜토리얼은 Go의 net/http, html/template, regexp 패키지를 사용하여 간단한 위키 웹 애플리케이션을 만드는 방법을 설명합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 2. 핵심 개념
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① 데이터 구조
Page struct는 Title(string)과 Body([]byte)를 가집니다.
save 메서드로 파일에 저장하고, loadPage 함수로 파일에서 로드합니다.
② net/http 패키지
http.HandleFunc로 핸들러 등록
http.ListenAndServe로 서버 시작
http.ResponseWriter로 응답 작성
http.Request로 요청 정보 접근
③ html/template
템플릿을 별도 파일로 관리하여 HTML과 Go 코드 분리
{{.Title}}, {{.Body}}와 같이 템플릿 변수 사용
자동 HTML 이스케이프로 XSS 방지
template.ParseFiles로 템플릿 파싱
template.Execute로 렌더링
④ regexp
regexp.MustCompile로 정규표현식 컴파일
FindStringSubmatch로 URL 경로 검증
괄호로 그룹화하여 서브매치 추출
⑤ 클로저
makeHandler 함수가 핸들러를 감싸는 클로저 반환
중복 코드 제거 및 공통 작업(타이틀 추출, 유효성 검사) 추상화
⑥ 에러 처리
http.Error로 HTTP 에러 응답
http.Redirect로 리다이렉트
http.NotFound로 404 응답
⑦ 템플릿 캐싱
프로그램 초기화 시 모든 템플릿 한 번 파싱
template.Must로 에러 시 패닉
ExecuteTemplate로 특정 템플릿 렌더링
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
데이터 구조와 저장:
Page struct의 Body는 []byte 타입으로, io 라이브러리와 호환됩니다.
os.WriteFile로 파일 저장, os.ReadFile로 파일 로드.
파일 권한 0600은 소유자만 읽기/쓰기 가능.
핸들러 구현:
viewHandler: 페이지 조회, 없으면 edit로 리다이렉트
editHandler: 편집 폼 표시, 없으면 빈 페이지 생성
saveHandler: 폼 데이터 저장 후 view로 리다이렉트
보안:
regexp로 URL 경로 검증하여 임의 파일 접근 방지
^/(edit|save|view)/([a-zA-Z0-9]+)$ 패턴 사용
클로저 활용:
makeHandler가 핸들러를 감싸서 공통 로직(타이틀 추출, 유효성 검사) 처리
fn 인자를 클로저로 캡처하여 실제 핸들러 호출
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 4. 실전 활용 / 예시
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Go의 표준 라이브러리만으로 완전한 웹 애플리케이션을 구축할 수 있습니다.
html/template은 자동 이스케이프로 보안을 강화합니다.
클로저를 활용하면 핸들러 코드를 간결하고 재사용 가능하게 만듭니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Go의 net/http, html/template, regexp를 조합하면 별도 프레임워크 없이도 안전한 웹 애플리케이션을 만들 수 있습니다.
데이터 구조, 핸들러, 템플릿, 보안 검증의 전체 흐름을 학습할 수 있는 실용적인 튜토리얼입니다.
📎 출처 링크
https://go.dev/doc/articles/wiki/
#Go #Golang #web #http #template #공식문서

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30