본문 바로가기
개발

Go 언어로 ECHO 프레임워크를 이용한 JWT 인증 시스템 구현 방법

by hes3518 2024. 11. 12.
728x90
반응형

Go 언어로 JWT 인증 구현하기: ECHO 프레임워크 활용

안녕하세요 모두들! 오늘은 프로그래밍과 웹 개발을 즐기는 여러분을 위해 Go 언어를 사용하여 JWT(Json Web Token) 기반의 인증 시스템을 구현하는 방법을 공유해보려 합니다. 특히 ECHO 프레임워크를 이용한 쉽고 효율적인 방법에 대해 알아볼 것입니다.

들어가며

요즘 웹 애플리케이션을 구축할 때 보안은 필수 요소 중 하나입니다. JWT는 클라이언트가 서버에 인증 정보를 안전하게 전송할 수 있는 방법을 제공합니다. 효율적인 인증 시스템을 원하신다면,JWT와 ECHO 프레임워크의 조합을 고려해보세요. 이 시스템은 여러분의 애플리케이션에 대한 보안을 높이고, 여러 서버 환경에서도 잘 작동합니다.

JWT란?

JWT는 JSON 데이터의 서명 기반의 웹 토큰으로, 사용자의 인증 정보를 클라이언트와 서버 간에 안전하게 전달하는 데 사용됩니다. 일반적으로 JWT는 세 가지 부분으로 구성됩니다: Header, Payload, Signature. 각각의 구성요소가 어떻게 작동하는지 살펴보겠습니다.

  • Header: 사용되는 암호화 알고리즘을 지정합니다.
  • Payload: 사용자 정보나 인가에 필요한 정보가 포함됩니다.
  • Signature: Header와 Payload를 조합해 비밀키로 서명한 값입니다.

ECHO 프레임워크와 JWT의 장점

ECHO 프레임워크는 Go 언어로 작성된 웹 서버 모듈이며, 경량화되어 있어 빠른 응답 속도를 제공합니다. JWT와 결합하면, 세션 관리의 복잡성을 제거하고 인증 과정을 간소화할 수 있습니다.

프로젝트 구조

아래는 JWT 인증 시스템을 구현하기 위한 Go 프로젝트 구조입니다.

├── client
│   ├── go.mod
│   └── main.go
├── go.work
└── server
    ├── auth
    │   └── auth.go
    ├── handler
    │   ├── auth_handler.go
    │   └── user_handler.go
    └── main.go

구현하기

이제 JWT 인증을 생성하는 코드를 살펴보겠습니다. 먼저 auth/auth.go 파일에서 JWT 발급과 관련된 코드를 작성합니다.

package auth

import (
   "github.com/golang-jwt/jwt"
   "github.com/labstack/echo/v4"
   "net/http"
   "os"
   "time"
)

type Claims struct {
   UserName string `json:"user_name"`
   jwt.StandardClaims
}

func GenerateToken(username string) (string, error) {
   claims := Claims{
      UserName: username,
      StandardClaims: jwt.StandardClaims{
         ExpiresAt: time.Now().Add(time.Minute * 30).Unix(),
      },
   }

   token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
   signedToken, err := token.SignedString([]byte(os.Getenv("JWT_SECRET")))
   if err != nil {
      return "", err
   }
   return signedToken, nil
}

func VerifyUser(username, password string) bool {
   return username == "admin" && password == "password" // 간단한 예시
}

로그인 핸들러

로그인 요청을 받아 토큰을 발급하는 기능을 auth_handler.go에 추가해보겠습니다.

package handler

import (
   "net/http"
   "github.com/labstack/echo/v4"
   "server/auth"
)

func Login(c echo.Context) error {
   username := c.FormValue("username")
   password := c.FormValue("password")

   if !auth.VerifyUser(username, password) {
      return echo.ErrUnauthorized
   }

   token, err := auth.GenerateToken(username)
   if err != nil {
      return c.JSON(http.StatusInternalServerError, echo.Map{"message": "Error generating token"})
   }

   return c.JSON(http.StatusOK, echo.Map{"token": token})
}

사용자 정보 가져오기

JWT를 기반으로 사용자 정보를 추출하는 API를 구현합니다.

func UserInfo(c echo.Context) error {
   user := c.Get("user").(*jwt.Token)
   claims := user.Claims.(*auth.Claims)
   return c.JSON(http.StatusOK, echo.Map{"username": claims.UserName})
}

마무리

오늘은 Go 언어와 ECHO 프레임워크를 활용하여 JWT 기반 인증 시스템을 구현하는 방법을 살펴보았습니다. JWT는 보안성이 높고, 여러 서버 환경에서도 매끄럽게 작동하는 장점이 있습니다. 여러분도 이 튜토리얼을 통해 자신만의 인증 시스템을 구축해보시길 바랍니다!

질문이 있다면 언제든지 댓글을 통해 문의하세요. 다음글에서는 JWT의 보안 측면에 대해 더 깊이 있게 다뤄보겠습니다.

공유하기: 이 정보를 필요한 친구들에게도 전달하면 좋겠어요! 그럼 다음 포스트에서 만나요!

728x90
반응형