ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Gin Gonic] Gin Gonic 에서 Query String 처리 방법 알아보기
    Golang/Gin Gonic 2024. 6. 11. 06:35
    728x90
    반응형

     

    - 목차

     

    들어가며.

    Gin Gonic 은 Go 언어 기반의 고성능 웹 프레임워크로, 간결하면서도 강력한 기능을 제공합니다.

    Gin Gonic 은 gin.Context 구조체를 통해서 Query String 을 간단하고 효율적으로 처리할 수 있는 메서드들을 제공합니다.

    이번 글에서는 Query String 처리 방법과 관련된 다양한 사례를 살펴보겠습니다.

     

    Query String 처리하는 주요 메소드 알아보기.

    Gin Gonic 에서는 MiddlewareHandler 에서 요청 URL 의 Query String 을 처리합니다.

    그리고 이 처리 과정에서 gin.Context 구조체가 활용됩니다.

    일반적으로 Gin Gonic 의 Query String 을 처리하는 전반적인 기능은 gin.Context 구조체의 메소드로 구현되어 있다고 생각하셔도 무방합니다.

     

    gin.Context Query

    gin.Context 는 기본적으로 Query 메소드를 제공합니다.

    Query 메소드의 시그니처는 아래와 같습니다.

     

    func (c *Context) Query(key string) string

     

    그리고 gin.Context 의 Query 메소드의 활용 예시는 아래와 같습니다.

    주의할 점은 Query Key 가 존재하지 않는 경우에는 빈 string 이 반환되게 됩니다.

     

    package main
    
    import (
    	"github.com/gin-gonic/gin"
    )
    
    func main() {
    	r := gin.Default()
    
    	r.GET("/search", func(c *gin.Context) {
    		// "q" 키의 쿼리 값을 가져오기
    		query := c.Query("q")
    		limit := c.Query("limit")
    
    		// 응답 반환
    		c.JSON(200, gin.H{
    			"query": query,
    			"limit": limit,
    		})
    	})
    
    	r.Run(":8080")
    }

     

    HTTP 요청 예문은 아래와 같습니다.

     

    curl 'http://localhost:8080/search?q=test&limit=10'
    # {"limit":"10","query":"test"}
    curl 'http://localhost:8080/search?q=test'
    # {"limit":"","query":"test"}

     

     

    gin.Context DefaultQuery.

    gin.ContextQuery 메소드는 존재하지 않는 Query Key 를 조회하게 되면 빈 string 이 반환됩니다.

    반면 DefaultQuery 메소드는 존재하지 않는 Query Key 에 대해서 기본값을 적용시킬 수 있습니다.

     

    DefaultQuery 메소드의 시그니처는 아래와 같습니다.

     

    func (c *Context) DefaultQuery(key, defaultValue string) string

     

    gin.Context 의 DefaultQuery 메소드 활용 예시는 아래와 같습니다.

     

    package main
    
    import (
    	"github.com/gin-gonic/gin"
    )
    
    func main() {
    	r := gin.Default()
    
    	r.GET("/search", func(c *gin.Context) {
    		// "q" 키의 쿼리 값을 가져오기
    		query := c.Query("q")
    		limit := c.DefaultQuery("limit", "10")
    
    		// 응답 반환
    		c.JSON(200, gin.H{
    			"query": query,
    			"limit": limit,
    		})
    	})
    
    	r.Run(":8080")
    }

     

    위 예시에서 "limit" Query Key 에 대해서 Default Value 를 10 으로 설정하였습니다.

    따라서 아래와 같이 "limit" Query Key 이 존재하지 않더라도 기본값인 10 이 출력됩니다.

     

    curl 'http://localhost:8080/search?q=test'
    # {"limit":"10","query":"test"}

     

     

    gin.Context GetQuery.

    GetQuery 메소드는 다른 Query 메소드와 유사하게 특정 Query Key 를 추출합니다.

    하지만 Query 와 DefaultQuery 는 존재하지 않는 Query Key 에 대해서 빈 string 값이나 Default Value 를 반환하지만,

    GetQuery 메소드는 존재하지 않는 Query Key 에 대해서 결과값을 반환하지 않습니다.

     

    GetQuery 시그니처는 아래와 같습니다.

    2개의 반환값이 제공되며, 두번째 반환값인 bool 을 통해서 Query Key 의 존재 유무를 반환합니다.

     

    func (c *Context) GetQuery(key string) (string, bool)

     

    아래의 코드는 gin.Context 의 GetQuery 메소드의 활용 예시입니다.

     

    package main
    
    import (
    	"github.com/gin-gonic/gin"
    )
    
    func main() {
    	r := gin.Default()
    
    	r.GET("/check", func(c *gin.Context) {
    		value, exists := c.GetQuery("key")
    		if exists {
    			c.JSON(200, gin.H{"key": value})
    		} else {
    			c.JSON(400, gin.H{"error": "Key not found"})
    		}
    	})
    
    	r.Run(":8080")
    }

     

    "key" 인 Query Key 가 존재하지 않는 경우에는 아래와 같이 동작하게 됩니다.

     

    curl 'http://localhost:8080/check?q=test'
    # {"error":"Key not found"}

     

    반면 "key" 인 Query Key 가 존재하는 경우에는 아래와 같이 동작합니다.

     

    curl 'http://localhost:8080/check?key=test'
    # {"key":"test"}

     

     

    반응형

    'Golang > Gin Gonic' 카테고리의 다른 글

    [Gin Gonic] API Routing 설정하기  (0) 2024.06.09
Designed by Tistory.