La foret rouge
Published on

Go #3 웹 애플리케이션 만들기

Authors
  • avatar
    Name
    신주용

공식 문서1를 따라 Go로 웹 애플리케이션을 만들어 봅시다.

  1. 새 디렉토리를 만들고 모듈을 설정합니다.

    GoWeb
  2. 필요한 패키지를 import하고, Page 자료구조를 만듭니다.

    PageTitleBody로 구성됩니다. Bodystring이 아닌 []byte, 바이트 슬라이스 타입으로 선언했는데, io라이브러리가 []byte 타입을 사용할 것이기 때문입니다.

    GoWeb
  3. 위에서 선언한 Page는 데이터가 메모리에 어떻게 저장될지를 나타냅니다. 이를 파일로 만들어 스토리지에 저장하기 위해 save() 메소드를 만듭니다.

    save 메소드는 Page의 포인터 (p *Page)p라는 이름으로 받고, 파라미터는 없고, error를 반환합니다. WriteFile은 파일 이름, 파일에 쓸 내용, permission을 인자로 받고, 처리 과정에 에러가 발생하면 error를, 문제가 없다면 nil을 반환합니다.

    GoWeb
  4. 페이지를 스토리지에 저장했으니 불러오는 함수도 만들어 봅니다. loadPage는 페이지 제목을 파라미터로 받아서 ReadFile을 실행합니다.

    ReadFile은 값 2개를 반환합니다. 첫 번째는 []byte타입의 값이고, 두 번째는 error입니다. 파일을 정상적으로 불러온다면 첫 번째로 파일 내용이 반환되고, 두 번째는 nil일 것입니다.
    하지만, 에러가 발생한다면 두 번째 반환값이 nil이 아닐 것입니다. 이 경우 if문을 사용해 핸들링 합니다.
    (Go는 try-catch문이 없고, if err != nil을 사용2합니다.)

    GoWeb
  5. main함수를 만들고 테스트 해봅시다. 전체 코드는 다음과 같습니다.

    GoWeb GoWeb
  6. 지금까지 한 건 웹사이트가 아닙니다. 이제부터 Go로 웹서버를 만들 수 있는 net/http 패키지를 다뤄봅시다.

    main 함수는 http.HandleFunc을 호출해 /view/라는 url을 viewHandler가 처리하도록 합니다.
    그 다음 http.ListenAndServe를 호출해 서버를 실행합니다. 이 때, 포트 번호를 지정할 수 있습니다.
    r.URL.Path는 요청 URL의 경로를 나타냅니다. [len("/view/"):]는 슬라이스를 만드는 코드입니다. r.URL.Path에서 /view/ 다음부터 끝까지 해당하는 값을 title 변수로 사용한다는 뜻입니다.

    GoWeb
  7. 서버를 실행해봅시다. go run wiki.go를 실행하고 http://localhost:8080/view/TestPage 로 접속합니다. 그러면 아까 생성했던 TestPage.txt가 웹 브라우저에 보일 것입니다.

    GoWeb

Footnotes

  1. "Writing Web Applications". golang.org. https://golang.org/doc/articles/wiki/ (accessed Feb. 26, 2021).

  2. Andrew Gerrand. "Error handling and Go". blog.golang.org. https://blog.golang.org/error-handling-and-go (accessed Feb. 26, 2021).