728x90 반응형 전체 글219 Rust 시작해보기 (rustup 설치) - mingw 버전 먼저 scoop 을 설치합니다. PowerShell 에서 다음을 실행합니다.Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUserInvoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expressionscoop 을 이용해서, mingw (GNU C++) 을 설치합니다.> scoop install mingwscoop 을 이용해서 rustup-gnu 를 설치합니다.> scoop install main/rustup-gnu이제 rustc --version 을 실행해서 Rust 설치가 잘 되었는지 확인합니다.D:\work>rustc --versionrustc 1.90.0 (1159e78c4 2025-09-.. 2025. 11. 15. Rust 에서 String에 대한 참조자 대신에 문자열 슬라이스를 매개변수로 하는 함수를 정의하는 것이 좋은 설계인 이유 왜 문자열 슬라이스(&str)가 더 나은가?1. 더 넓은 호환성fn process_text(text: &str) -> usize { text.len()}// 다음과 같은 모든 경우에 사용 가능fn main() { let string_value = String::from("Hello"); let string_literal = "World"; let string_slice = &string_value[0..3]; // "Hel" process_text(&string_value); // String 참조 process_text(string_literal); // 문자열 리터럴 process_text(string_slice); // 문자열 슬라이스 pr.. 2025. 11. 14. 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. 이전 1 2 3 4 ··· 25 다음 728x90 반응형