본문 바로가기
Computer language and framework/GO

[GO] Golang http

by WhiteGoblin 2023. 1. 26.
반응형

오늘 인터뷰를 보고 제가 정확하게 http 를 정확히 모르고 있다는 사실을 알게 되었다. 

 

그렇기 때문에 한번 정리 하고 가는게 좋겠다는 생각에 글을 작성하게 되었다. 

 

1. http 란?

 html 문서와 같은 리소스를 가져올 수 있도록 해주는 프로토콜입니다.[1]
이 과정에서 http message 를 보내서 서버와 클라이언트가 소통하게 되는데 

* request 
* response 

각, 각 둘을 통해서 소통을 하게 됩니다. 

request and response2

  • HTTP Request 요소들 
    • Start line
      Http Method ( GET, PUT,POST )
      URL 
      Http Version 

    • Headers
      요청에 대한 정보 
      어디에서 어떻게 보냈으면 어떤 종류의 데이터를 보내는지에 대한 이야기 

    • Body
      Html 과 같은 Data 를 포함하고 있다. 
  • HTTP Response 요소들 

    • Status line 
       
      프로토콜의 버전, Status code, Status Text ( 사람들이 이해하기 쉽도록 하는 코드를 보내 준다 )
      ex) HTTP/1.1 404 Not Found.
      위 순차대로 예시를 작성 하였다. 

    • Headers
      요청에 대한 정보 
      어디에서 어떻게 보냈으면 어떤 종류의 데이터를 보내는지에 대한 이야기 

    • Body
      Html 과 같은 Data 를 포함하고 있다. 

여기 까지 봤을 때는 둘은 header 부분에서 차이가 있고 , start , status line 의 차이가 있는것으로 보인다. 

 

2. Golang 에서의 구현 

package main

import (
	"fmt"
	"log"
	"net/http"
)

func main() {
	port := ":8080"
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("Hello"))
	})
	fmt.Println("Server is running in port 8080")
	if err := http.ListenAndServe(port, nil); err != nil {
		log.Fatal("ListenAndServe: ", err)
	}

}

위와 같이 코드를 짜고 curl 를 통해서 결과를 보게 되면 

 

*   Trying 127.0.0.1:8080...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.86.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Thu, 26 Jan 2023 12:30:29 GMT
< Content-Length: 5
< Content-Type: text/plain; charset=utf-8
<
* Connection #0 to host localhost left intact
Hello%

> 가 request < 가 response 입니다. 

위에서 말한 구조와 같이 요청과 응답이 온다는 것을 알 수 있습니다. 

golang 에서는 

 

http.Request 를 사용 해서 request를 처리 할 수 있고 

reponse 에 http.ResponseWriter 를 통해서 데이터를 적어 보낼 수 있습니다. 

header 를 들어가면 더 자세한 이야기를 알 수 있지만 우선 그 부분에 대해서 추후에 추가적으로 확인 할 것 입니다. 

우선 면접 들어갈 때까지 이러한 기초적인것을 몰랐다는것에 대해서 깊이 반성하며 다시는 이러지 않도록 더 열심히 글을 작성 해야겠습니다. 


틀린 부분이 있으면 언제든지 수정 해주시면 감사하겠습니다~

 

[참고 문헌]

[1] https://developer.mozilla.org/ko/docs/Web/HTTP/Overview

 

HTTP 개요 - HTTP | MDN

HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜입니다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 합니다. 클라이언트-서버

developer.mozilla.org

[2] https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages

반응형