웹개발일지

HTTP란 무엇일까요? 본문

컴퓨터공학 지식/네트워크

HTTP란 무엇일까요?

hee_log 2023. 1. 16. 11:26
728x90

 이 글은 웹을 공부한다면 반드시 알고있어야 할 기초지식, HTTP 에 대해 조사한 자료를 정리한 내용입니다. 

들어가기 앞서, 

 HTTP는 웹 공부를 하고있다면 반드시 알고 들어가야할 개념입니다. 그리고 HTTP 가 가진 메서드에는 어떤 것들이 있는지, 어떤 역할을 하는지 아는 것이 필수적입니다. 

 

 클라이언트가 웹 브라우저에서 동작을 요청하면 그 요청을 받은 서버는 응답을 주기 위해 어떻게 동작할까요? 이것이 바로 HTTP를 이해하는 핵심 내용입니다. 

 

✏️ HTTP란? 

 HTTP란, 웹에서 동작하는 리소스들을 가져올 수 있도록 해주는 프로토콜입니다. 프로토콜이란 리소스를 주고받는데 필요한 규약들을 정해놓은 것을 말합니다. 한 마디로 통신 규약입니다. HTTP는 웹에서 이루어지는 모든 데이터 교환이 기초이며, '클라이언트-서버 프로토콜'이라고 부르기도 합니다. HTTP를 이해하는데 클라이언트와 서버와의 구조를 이해해야합니다. 

 

 클라이언트와 서버들은 데이터 개별적인 메시지 교환에 의해 통신합니다. 보통 브라우저인 클라이언트에 의해 전송되는 메시지를 요청(requests)라고 부르며, 그에 대해 서버에서 응답으로 전송되는 메시지를 응답(responses)이라고 부릅니다. 클라이언트가 서버에 요청을 할 때는 무엇을 어떻게 전달할지 정하게 되고 이것을 url과 메소드라고 합니다. url은 대상이되고 메소드는 동작이 되는 것입니다. GET()이라는 메서드와 POST()라는 메서드의 동작 차이를 통해 HTTP와 메서드 동작원리에 대해 좀 더 알아보겠습니다. 

 

✏️ GET()과 POST()의 개념

 GET() 메소드는, 클라이언트에게 요청받은 데이터를 서버로부터 받아옵니다. 즉, 데이터의 '조회'를 도와주는 동작입니다. 대표적인 형태로 자료를 검색하거나 게시판의 게시글을 조회, 특정 상품의 데이터를 조회하는 행위가 있습니다. 

 

 POST()메소드는, 클라이언트에서 서버로 리소스를 '생성'하거나 업데이트 합니다. 클라이언트에서 서버로 데이터를 보낼 때 사용하는 것입니다. 데이터베이스에 새로운 데이터가 쓰여지는 것이죠. 게시판에 글을 새로 작성하는 작업이 그 예시입니다. 

 

✏️ GET()과 POST()의 데이터 전달방식 

 GET()은 url에 쿼리스트링 방식으로 리소스를 전달하며 POST()는 http body로 리소스를 전달합니다. 

쿼리란, url의 한 구성 요소로서 요청하는 자원에 대한 정보를 나타냅니다. ?id=1과 같은 형태로 url 끝에 붙습니다. 

 

 


  코드를 짜다보면 이 둘의 사용 구분이 모호한 것 같다는 생각에 별도로 찾아보게 되었다. 웹 동작 방식에 대한 이해가 얕아 개념을 외우는 것 만으로 코드에 대한 이해가 잘 이뤄지지 않았다. 이렇게 정리를 하고 나면 이해를 한 층 높일 수 있다. 

 

package api

import (
	"comento/works/internal/global"
	"fmt"
	// "mime/multipart"
	"net/http"
	"strconv"
	"github.com/gin-gonic/gin"
)



// get요청이 들어왔을 때 실행될 함수 
func ServeFile(c *gin.Context) {
	file, _ := c.FormFile("file")
	c.JSON(http.StatusCreated, file.Filename)
}

type Response struct {
	Res string `json:"res"`
}

type RequestFile struct{
	File string `json:"file"`
}

// POST 요청시 실행될 함수 
func CreateImage(c *gin.Context) { 
	req := RequestFile{}  
	file,_ := c.FormFile("file")
	if err := c.ShouldBind(&req); err != nil { 
		fmt.Println(err)
		c.JSON(http.StatusBadRequest, Response{Res:"file is not valid"})  
		return   
	}
	if err := c.SaveUploadedFile(file, "file/"+strconv.FormatInt(global.MaxImageNumber, 10)); err != nil{  
		fmt.Println(err)
		c.JSON(http.StatusBadRequest, Response{Res: "file can't be served"})
		
		return
	}
	global.MaxImageNumber++
	c.JSON(http.StatusOK, Response{Res:"successed to served the file." + strconv.FormatInt(global.MaxImageNumber,10)})
}



type RequestURI struct { 
	ImageId string `uri:"id"`
}



func Update(c *gin.Context) {
	file, _ := c.FormFile("file")
	fmt.Println(file.Filename + "file is uploaded to folder")
	
	c.Data(http.StatusOK, "image/", []byte(file.Filename))
} 

func DeleteImage(c *gin.Context) {

}