전체 글(120)
-
if Let
Rust에서는 if let 표현식을 통해 관심 있는 베리언트에만 매칭하고 다른 것을 무시 할 수 있습니다. 예를 들어 아래와 같이 String이 있을 때 물음표(?) 뒤의 second만 가져오는 예제가 있습니다. fn main() { let some_str = String::from("first?second"); let mut second_str = None; match some_str.find('?') { Some(i) => { second_str = Some(&some_str[i + 1..]); } None => {} } } 위와 같이 second_str을 None으로 정의 후 '?'를 찾아 찾은 index + 1 ..을 통해 second라는 String을 가져 올 수 있..
2023.06.03 -
JWT의 Access Token과 Refresh Token
소개 JWT를 사용하여 로그인을 구현하게 되면 아래와 같은 문제점에 부딪히게 됩니다. Token 방식의 인증은 제 3자에게 탈취 당할 경우 보안에 매우 취약합니다. 보안 상의 이유로 Access Token의 만료기간을 짧게 가진다면 사용자는 Token이 만료 될 때마다 매번 로그인을 새롭게 해야합니다. 만료기간을 늘리면, Token을 탈취 당했을 때 보안에 더 취약해집니다. 유효기간을 짧게 하면서 좋은 방법이 있을까?라는 질문에 답은 바로 Refresh Token을 사용하는 방법 입니다. Access Token과 Refresh Token의 재발급 원리 1. 로그인을 하게 되면 Access Token과 Refresh Token을 모두 발급합니다. Refresh Token은 서버쪽에서 DB에 저장하며, 클라..
2023.06.02 -
JWT(Json Web Token)
소개 개발을 하다 보면 로그인 관련 기능을 만드는 경우가 많습니다. 로그인은 쿠키(Cookie), 세션(Sessions) 등으로 많이 구현하는데, 토큰(Token)을 사용하는 방법도 있습니다. 토큰을 사용하는 방법 중 JWT를 많이 사용하기에 JWT에 대해 정리하려고 합니다. JWT JWT(JSON Web Token)는 일반적으로 클라이언트(App FrontEnd)와 서버(App BackEnd)간에 정보를 공유하는 데 사용되는 개방형 산업 표준(RFC7519)입니다. JWT는 Token 자체를 정보로 사용하는 Self-Contained 방식이며, 필요한 모든 정보를 Token에 저장하기 때문에 서버와의 커뮤니케이션에서 오버헤드를 최소화 할 수 있습니다. 또한 JSON Content(JWT Claim이라고..
2023.06.02 -
Visitor 패턴
소개 패턴을 활용한 리팩터링이라는 책에서 Switch 문을 좀더 객체지향적인, 다향성을 이용하도록 리팩터링 하기 위해서 Visitor 패턴을 도입하면, 조건 로직도 필요 없어지고 설계도 더 융통성 있게 할 수 있다고 소개한다. 방문자 패턴(Visitor Pattern) Visitor는 사전적인 의미로 어떤 장소에 찾아오는 사람이라는 의미를 가지고 있다. 방문자 패턴에서는 데이터 구조와 처리를 분리한다. 데이터 구조 안을 돌아다니는 주체인 방문자를 나타내는 클래스를 준비해서 처리를 맡긴다. 새로운 처리를 추가하고 싶을 땐 새로운 방문자를 만들고 데이터 구조는 방문자를 받아들이면 된다. 방문자 패턴은 개방-패쇠 원칙을 적용하는 방법 중 한 가지 입니다. 확장에 대해 열려있다. 클래스를 설계할 때, 특별한 이..
2023.06.01 -
페이지 교체 기법
소개 메모리 관리 배경 각각의 프로세스는 독립된 메모리 공간을 갖고, 운영체제 혹은 다른 프로세스의 메모리 공간에 접근할 수 없는 제한이 걸려있다. 단지, 운영체제만이 운영체제 메모리 영역과 사용자 메모리 영역에 접근을 제약을 받지 않는다. 페이징 하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 업애는 메모리 관리 방법이다. 외부 단편화와 압축 작업을 해소하기 위해 생긴 방법론으로, 물리 메모리는 Frame이라는 고정 크기로 분리되어 있고, 논리 메모리(프로세스가 점유하는)는 페이지라 불리는 고정 크기의 블록으로 분리 된다. 페이징 기법을 사용함으로써 논리 메모리를 물리 메모리에 저장될 때, 연속되어 저장될 필요가 없고 물리 메모리의 남는 프레임에 적절히 배치됨으로 외부 단편화를 해결..
2023.06.01 -
상속에서 Dispose 패턴
소개 C#에서는 가비즈 컬렉터(GC)가 메모리를 자동으로 관리합니다. 필요없는 클래스의 인스턴스를 메모리에서 바로 지우는 것이나라, 조건을 만족할 때까지 기다렸다가 지우기 때문에 클래스를 지웠다고 해도 메모리가 바로 해제 되지 않는다. 일반적인 메모리라면 GC에 맡겨도 상관 없지만, 관리되지 않는(Unmanaged, Native)리소스는 즉각 해제해야 하는 경우가 생기는데, 그럴때 필요한 것이 Dispose다. IDisposable 인터페이스 C#에서는 개발자가 명시적으로 메모리를 해제하기 위해서는 IDisposable 인터페이스를 상속 받아 구현한다. IDisposable에서는 Dispose() 하나의 메서드만 제공한다. public interface IDisposable { void Dispose()..
2023.05.31