오늘 인터뷰를 보고 제가 정확하게 http 를 정확히 모르고 있다는 사실을 알게 되었다.
그렇기 때문에 한번 정리 하고 가는게 좋겠다는 생각에 글을 작성하게 되었다.
1. http 란?
html 문서와 같은 리소스를 가져올 수 있도록 해주는 프로토콜입니다.[1]
이 과정에서 http message 를 보내서 서버와 클라이언트가 소통하게 되는데
* request
* response
각, 각 둘을 통해서 소통을 하게 됩니다.
- HTTP Request 요소들
- Start line
Http Method ( GET, PUT,POST )
URL
Http Version - Headers
요청에 대한 정보
어디에서 어떻게 보냈으면 어떤 종류의 데이터를 보내는지에 대한 이야기 - Body
Html 과 같은 Data 를 포함하고 있다.
- Start line
- HTTP Response 요소들
- Status line
프로토콜의 버전, Status code, Status Text ( 사람들이 이해하기 쉽도록 하는 코드를 보내 준다 )
ex) HTTP/1.1 404 Not Found.
위 순차대로 예시를 작성 하였다. - Headers
요청에 대한 정보
어디에서 어떻게 보냈으면 어떤 종류의 데이터를 보내는지에 대한 이야기 - Body
Html 과 같은 Data 를 포함하고 있다.
- Status line
여기 까지 봤을 때는 둘은 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
'Computer language and framework > GO' 카테고리의 다른 글
[GO] 프로그래머스 > 코딩 테스트 입문 > LV.0 컨트롤 제트 문제 (0) | 2024.10.22 |
---|---|
[GO] graceful shutdown 이란? (0) | 2023.02.20 |
[GO] Golang json 사용하기 (0) | 2023.01.15 |
[Go] 간단한 gorm 사용기 (0) | 2022.06.24 |
[Go] Go 자료 구조 (0) | 2020.04.15 |