본문 바로가기
728x90
반응형

전체 글217

Rust 바이너리 작게 만들기 Cargo.toml 에 다음을 추가하고,...[profile.release]strip = true # Automatically strip symbols from the bianryopt-level = "s" # Optimize for sizelto = true # Enable link time optimizationcodegen-units = 1 # Maximize size reduction optimizationsrelease 모드로 컴파일 한다.$ cargo build --release 2025. 1. 3.
Rust: Auto-Reloading Development Server (개발서버 자동 리로딩) cargo-watch 를 설치한다.$ cargo install cargo-watch원하는 프로젝트 폴더로 이동해서 아래와 같이 실행하면 라이브 리로딩 서버가 실행된다.$ cargo-watch -x run 2025. 1. 3.
Gin framework (3) : MySQL 연결하기 이번에는 Gin 프레임워크에 MySQL 을 붙여서 동작시켜보자. https://gauryan.tistory.com/241 을 참고하여 MySQL을 설치하기 바랍니다. 이제, mysql 을 이용해서 DB 서버에 접속해보자. mysql -u root -p 라고 입력하고, 비밀번호(test123)까지 입력해보자.일단 새로운 User를 하나 생성해봅시다.-- CREATE USER '아이디'@'%' IDENTIFIED BY '비밀번호';CREATE USER 'test_user'@'%' IDENTIFIED BY 'test123';자... 그러면... 이제 Database 를 생성해봅시다.-- CREATE DATABASE 디비이름;CREATE DATABASE test_db;test_user 가 test_db 를 사용.. 2025. 1. 3.
Gin framework (2) : 컨트롤러 확장하기 지난 글에서 간단한 Gin 프레임워크를 이용한 서버를 만들어보았습니다. 그런데, 핸들러가 늘어날 수록 main.go 가 복잡해지는 문제가 있었어요. 이 핸들러를 별도의 폴더로 이동해서 서비스별로 구분을 하면, 조금 더 관리하기 수월해질 것입니다. 이렇게 분리하는 것을 컨트롤러라고 보통 부릅니다. 그래서, controller 폴더를 먼저 만들겠습니다. controller 폴더 하위에는 svc1 과 svc2 폴더도 만듭니다.그리고, svc1 폴더에 svc1.go 파일을 만들고, 다음과 같이 작성해줍니다.package svc1import "github.com/gin-gonic/gin"func Req1(c *gin.Context) { c.JSON(200, gin.H{ "SVC1": "REQ1", })}func.. 2025. 1. 1.
Gin framework (1) : 시작해보기 Go언어에서 가장 유명한 프레임워크 Gin 과 Fiber 가 있습니다. 이 중에서 훨씬 더 유명한 Gin을 먼저 알아보겠습니다. Gin의 홈페이지는 https://gin-gonic.com/ 입니다. C:\work\gapi 폴더를 만들고, 그 안에서 go mod init gapi 를 실행합니다. Gin 프레임워크 모듈을 설치해줍니다. go get -u github.com/gin-gonic/gin 을 실행합니다. 그리고, main.go 를 작성해봅시다.package mainimport "github.com/gin-gonic/gin"func main() { app := gin.Default() app.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{ "hello".. 2024. 12. 27.
Refresh Token 재사용 방지(Reuse Detection) Refresh Token 재사용 방지(Reuse Detection)는 Refresh Token이 도난당해 악의적인 사용자가 이를 재사용하려는 경우를 감지하고 차단하는 기술입니다. 이를 구현하려면 아래의 메커니즘을 사용할 수 있습니다.1. Refresh Token 저장소 사용Refresh Token의 상태를 서버에서 관리하여 사용 기록을 검증하는 방식입니다.구현 흐름:Refresh Token 저장 및 관리:Refresh Token 발급 시, 이를 서버의 데이터베이스(DB) 또는 캐시(Redis 등)에 저장합니다.저장 시 각 토큰에 고유한 식별자(UUID)와 사용자 정보, 만료 시간, 생성 시간을 기록합니다.토큰 사용 검증:클라이언트가 Refresh Token을 전송할 때마다, 서버는 DB 또는 캐시에서 해.. 2024. 12. 26.
JWT에서 Refresh Token은 어떻게 넘겨주나? JWT에서 Refresh Token을 전달하는 방식은 구현 목적, 보안 요구 사항, 클라이언트-서버 간 통신 방식에 따라 다양합니다. 일반적으로 두 가지 주요 방식이 사용됩니다:1. HTTP-Only Cookie로 전달이 방법은 가장 안전한 방법 중 하나로, Refresh Token을 HTTP-Only 쿠키에 저장하고, 클라이언트가 자동으로 서버로 전송하도록 설정합니다.장점:XSS(Cross-Site Scripting) 공격에 안전합니다.브라우저가 자동으로 쿠키를 관리하므로 클라이언트 코드에서 Refresh Token을 다룰 필요가 없습니다.구현 예시:(1) 서버에서 쿠키 설정:res.cookie('refreshToken', token, { httpOnly: true, // JavaScript로 접.. 2024. 12. 26.
HTTPS 통신에서 데이터가 탈취될 수 있을까? 실제 사례와 대응 방안 "HTTPS는 안전하니까 걱정할 필요 없다"는 이야기를 많이 들어보셨을 겁니다. 하지만 현실은 조금 다릅니다. HTTPS는 데이터를 암호화해 전송 중 탈취를 방지하는 중요한 기술이지만, 약점이 없는 건 아닙니다. 이번 글에서는 HTTPS 통신에서 데이터가 실제로 탈취된 사례와 이를 예방하기 위한 방법을 살펴보겠습니다.HTTPS는 왜 안전하다고 말할까?HTTPS(HTTP Secure)는 HTTP 프로토콜에 TLS(Transport Layer Security)를 결합해 보안을 강화한 통신 방식입니다. 이를 통해 데이터를 암호화하고, 서버의 신원을 검증하며, 데이터가 변조되지 않았음을 보장합니다. 이러한 강력한 보호 덕분에 HTTPS는 현재 가장 신뢰받는 웹 통신 방식으로 자리 잡았습니다.그렇다면, HTTPS.. 2024. 12. 23.
JWT 에서 토큰을 전달할때 Header의 Authorizaion 을 사용해야만 하는가? 아닙니다. JWT 토큰을 전달할 때 꼭 HTTP Header의 Authorization 헤더를 사용해야 하는 것은 아닙니다. Authorization 헤더는 가장 일반적이고 권장되는 방법 중 하나일 뿐입니다. 다른 방법도 상황에 따라 적절히 사용할 수 있습니다. 아래에서 각 방법과 장단점을 설명합니다.1. Authorization 헤더 사용 (권장)JWT를 전달할 때, 아래와 같이 Authorization 헤더에 Bearer 토큰으로 포함하는 방법이 일반적입니다.Authorization: Bearer 장점표준화: 대부분의 인증 라이브러리와 프레임워크에서 기본적으로 지원.보안: 토큰이 헤더에 포함되므로 민감한 데이터와 혼합되지 않음.캐싱 방지: HTTP 캐시 메커니즘에 의해 민감한 데이터가 캐시되는 문제를.. 2024. 12. 23.
728x90
반응형