All
23 posts
Rust for Rustaceans 책에 나오는 학습 리소스 정리

Rust for Rustaceans 책에 나온 학습 리소스 정리 Rust for Rustaceans 책에 대한 리뷰는 언젠가 한번 정리해서 업로드할 수 있도록 하겠다. 이번 포스팅은 저자가 추천하는 큐레이션된 각종 리소스들을 정리해보려 한다. 공식 Rust 블로그 https://blog.rust-lang.org/ Edition 가이드 https://doc.rust-lang.org/edition-guide/ Inside Rust 블로그 - 러스트 개발팀의 ‘비공식’ 블로그 https://blog.rust-lang.org/inside-rust/ 다양한 Rust 작업 그룹 소개 페이지 https://www.rust-lang.org/governance Internals - Rust 토론 커뮤니티 https://internals.rust-lang.org/ Rust 유저 포럼 https://users.rust-lang.org/ Rust 서브레딧 https://www.reddit.com/r/r…

June 09, 2023
rust
Rust

PhantomData 는 struct의 drop에 있어, T타입이 struct에 없어도 있는 것처럼 취급하게 해준다. PhantomData는 사이즈가 zero인 zero-sized-type이다. 이는 drop의 메커니즘을 이해해야 하는데, drop은 어떤 struct에 대해서, 내부 필드에 있는 타입 T가 있을 때 T가 Drop trait을 구현했는지 찾아서 실행한다. 즉, 어떤 복합타입이 있다면 내부 타입에 대해서 전부 Drop Trait을 찾아 이를 같이 실행한다. 그런데 만약 해당 타입이 포인터, 혹은 박스나 스마트 포인터 등으로 T를 가리키고 있다면(즉 소유하지 않는다면) T가 Drop trait을 구현했는지 여와 상관없이 T의 drop을 실행하지 않는다. 따라서 T의 drop을 실행하기 위해서 struct에 별도의 필드를 할당하는데, 이 때 를 할당한다. 컴파일러는 를 보고, T의 Drop trait을 찾아 compount struct를 드랍할 시 drop을 실행한다.…

April 25, 2023
rust
Rust를 알아보자 - 1부

Rust를 알아보자 -1부 rust는 유니코드를 지원 (다국어 가능) 원시자료형 정수형 signed i8,i16,i32,i64,i128, isize isize는 유저 컴퓨터 운영체제의 비트 수를 의미(64비트 or32비트) 변수 타입을 지정하지 않은 정수는 기본적으로 i32로 할당 unsigned u8,u16,u32,u64,u128,usize Rust에서 char 타입으로 변환될 수 있는 정수는 u8 이 유일함. String::len() 함수는 문자열 길이가 아니라 바이트 크기를 반환함 char는 항상 4바이트이지만 문자열은 그 이하일 수도 있음(최소 1바이트) 문자열의 길이를 알려면 String.chars().count()를 호출해야 함. 정수형의 타입을 명시 할 때 다음과 같이 적을수도있음 크기가 다른 정수형(u8, u128) 끼리는 서로 연산할 수 없음 다음의 경우에 rust는 타입을 추론해줌 my_float과 my_other_float의 Add연산에서 매개변수가 f32이므로…

April 22, 2023
Rust
go 시리즈

go는 포인터의 라이프타임이 데이터보다 더 긴 경우, 해당 데이터를 자동으로 힙에 할당해준다. 이를 클로져라고 한다. 예를 들어 이 함수는 클로져를 반환하고, 이 때 클로져의 라이프타임은 fib() 함수의 두 지역변수를 포함하기 때문에 go 컴파일러는 이 두 변수를 힙에 할당한다. 모든 클로저가 포함하는 () 것은 변수의 값이 아니라 변수의 참조/포인터 이다. 따라서 c 언어 등에서는 클로져를 반환할 때 dangling pointer같은 문제가 발생하는 것이다. 슬라이스를 초기화 하지 않으면 nil이다. 그러나 초기화 했지만 아무 원소도 없는 empty slice일 수도 있다. 중요한 건 두 경우 모두 len이 0이라는 점이다. make로 슬라이스를 만들 때 cap을 지정하지 않으면 언제까지고 append할 수 있다. 그러나 cap을 지정한 경우에는 cap 이상으로는 append하더라도 변하지 않는다. 가장 헷갈리는점 : nil map에 무언가를 insert하면 에러가 나지만 n…

April 17, 2023
golang
Layer 2 blockchain

Layer 2 blockchain 기존 레이어1 의 트랜잭션 fee 및 속도 문제를 최적화 하기 위해 으로 작동하는 또다른 계층. 레이어1의 합의 알고리즘과 보안시스템에 의존하기 때문에 레이어1에서 독립적으로 수행할 수 있음. 1.state channel 모든 state을 on-chain상에 기록하지 않고, off-chain 상의 별도의 state machine을 스마트 컨트랙트로 정의함. 이 off-chain 상에서 gas fee없이 state 변경이 일어나고, 시작 state과 최종 state만을 blockchain에 기록하고 해당 변경에 대해서 트랜잭션이 일어남.(예를 들어 게임) payment channel이라고 하기도 함. 예를 들어 월초에 스마트 컨트랙트를 실행하여 payment channel을 열고, 한 달 동안의 요금 집계를 거쳐 월말에 payment channel을 닫은 뒤 요금만큼을 ETH 트랜잭션으로 정산. state channel의 시작과 끝을 제외한 중간 변…

April 09, 2023
blockchain
Rust를 알아보자 - 2부

제네릭 러스트에서 제네릭 함수는 에 타입을 구체화 한다. 런타임에 타입을 구체화하는 타입 소거와는 다르다. 제네릭의 upperbound로써 Trait을 사용하는 것은 매우 자주 있는 일이다. 이는 해당 타입이 해당 Trait을 구현했다는 것을 말하며, 제네릭 함수 내에서 Trait의 메서드를 사용할 수 있게 해준다. 모든 제네릭 타입 T가 Display를 구현했다는 제약 upperbound가 있기 때문에 함수 내에서 로 포매팅이 가능하다. 하나의 upperBound에 여러 조건을 명시할 수도 있다. 이 경우 + syntax로 Trait들을 연결한다. where 문법을 사용하면 타입 파라미터의 제약조건을 분리할 수 있다. rust의 panick은 런타임 익셉션이다. 은 으로써 제네릭하며 자바의 과 동일하다. Option의 값을 꺼내는 메서드는 이다. Optional의 get과 동일하다고 보면 된다. unwrap할 option이 None이면 러스트는 런타임익셉션(패닉이라고 부름)을 …

March 29, 2023
Rust
라이프타임과 변성

Variance 더 긴 라이프타임을 가지는 변수를 해당 타입의 더 짧은 라이프타임에 할당할 수 있다. 이는 서브타입은 적어도 부모타입 만큼의 효용이 있을 때, 공변적이라고 여겨진다. 반면 부모타임이 적어도 서브타입 만큼의 효용이 있을 때 반공변적이라고 여겨진다. 함수는 인자타입에 대해 반공변적이다. 즉 인자에 구상적인 타입을 정의한 함수는 그보다 더 추상적인 타입을 인자로 받는 함수로 대체할 수 있다. 불변 참조 타입은 라이프타임과 T 타입에 대해 모두 공변적이다. 그러나 가변 참조는 라이프타임 a에 대해서는 공변적이지만 T에 대해서는 무공변이다. 즉 가변참조 &‘a mut T는 라이프타임 ‘a는 보다 구체적인(보다 긴) 라이프타임으로 대체할 수 있어 공변적이지만, T 타입은 T의 서브타입으로 대체할 수 없고 정확하게 T 타입만을 소비한다. 그 이유는, 가변참조는 참조를 변경할 수 있고, 이 참조는 공변적으로 참조를 변경할 수 있기 때문에 공변성을 알 수 없다. 즉 는 에…

March 28, 2023
Rust
aws - serverless

서버레스는 을 의미하는 범용적인 개념이다. 애초에는 AWS lambda의 개념으로부터 출발하였으나, 이제는 AWS가 관리해주는 모든 것을 의미한다. 서버레스 서비스에는 AWS Lambda DynamoDB AWS Cognito AWS API gateway Amazon S3 AWS SNS&SQS AWS Kinesis Data Firehose Aurora serverless Step Functions Fargate 등이 있다. AWS lambda ec2는 클라우드 상의 가상 서버로, ram과 cpu 제한이 있으며, 종료되기 전에는 계속 실행된다. 스케일링을 위해서 직접 개입하여 서버를 추가/삭제해야 한다. AWS lambda는 반면 서버가 없는 가상 이다. 짧은 실행시간을 가지며 실행시간에 따라 비용을 지불한다. 사용하지 않을 때에는 실행되지 않는다. 스케일링 또한 별도의 설정없이 자동으로 일어난다. lambda는 요청 횟수와 시간에 따라서만 비용을 지불하며 프리티어도 관대한 편이다.…

March 26, 2023
aws
aws - messaging

AWS messaging 앱 간의 통신 방법에는 직접 통신하는 synchronous(동기) 방식과 중간 매개체로 큐를 사용하는 asynchronous(비동기) 방식이 있다. 동기 방식의 문제점은 갑작스런 트래픽 증가이다. 트래픽이 갑자기 증가하는 경우 수신하는 앱은 트래픽을 처리하기 버거운 상황이 발생한다. 따라서 어플리케이션 간에 결합을 분리하는 것이 좋다. 이를 위해서는 SQS 같은 큐 방식 SNS 등의 pub/sub(구독/발행)모델 Kinesis 등의 실시간 스트리밍 모델 을 사용하는 것이 좋다. SQS 10년 이상된 aws 서비스임, 어플리케이션 간의 결합도를 낮추기 위해 사용. 큐 내부에 저장할 수 있는 메세지의 수 / 한번 에 전송할 수 있는 메세지 수는 제한이 없지만, 메세지의 유효기간은 디폴트 4일 최대 14일 이다. SQS의 지연율은 10ms보다도 작다. 메세지 하나당 256kb의 크기 제한이 있다. 큐의 제약사항으로 메세지가 두 번 연달아 전달될 수 있고, 순…

March 25, 2023
aws
aws - extra storage

AWS의 기타 스토리지 서비스에 대한 문서. 매우 안전한 포터블 디바이스로 aws에서 2가지 유즈케이스가 있음 엣지에서 데이터 처리 origin에서 가까운 edge location에서 데이터를 수집/처리 Snowcone/Snowball Edge/Snowmobile AWS로 데이터를 마이그레이션 Snowcone/Snowball Edge 네트워크 상에서 대량의 데이터를 마이그레이션할 때, 회선의 속도제한이나 대역폭 제한 / 네트워크 사용비용 등의 한계가 존재한다. 이 때 AWS에서 Snow Family에 속한 포터블 디바이스를 직접 클라이언트에게 제공하면 이 장비에 데이터를 load하여 다시 AWS에 장비를 보내면, AWS에 이 데이터를 마이그레이션해주는 것이다. 즉 네트워크 회선의 여러 한계점을 우회하기 위해 사용한다. Snowball Edge 데이터 마이그레이션 용으로 S3 오브젝트 스토리지 및 프라이빗 블록 스토리지 제공 , 42tb의 와 80tb의 옵션 존재. Snowcon…

March 24, 2023
aws
aws - ecs& eks

Amazon ECS 도커 컨테이너를 AWS상에서 실행하게 되면 AWS ECS 클러스터 상에서 ECS 태스크를 하나 실행하게 된다. 이 때 클러스터를 구성하는 방식에 따라 LaunchType이 나뉜다. EC2 Launch type AWS ECS 클러스터는 EC2 인스턴스들로 이루어진 클러스터로 구성하여, EC2 인스턴스를 유저가 직접 프로비져닝하고 관리할 의무가 있다. (자동 스케일링 X). 각각의 EC2 인스턴스는 를 실행하여 와 에 자신을 등록해야 한다. 이 과정이 모두 준비가 된다면, ECS 태스크를 실행하고나서부터 해당 도커 컨테이너를 클러스터 내의 인스턴스에서 시작/중지하는 작업을 AWS 서비스가 모두 관리하게 된다. 이 타입을 사용할 경우 EC2 인스턴스에 대한 프로파일을 정의할 수 있으며, 해당 프로파일은 ECS Agent가 각종 API 호출을 하는 데에 사용된다.(ECS, CloudWatch, ECR, SSM Parameter Store, etc..). Farga…

March 23, 2023
aws
aws - cloudFront

Content Delivery Network(CDN)으로, edge location에 컨텐트를 캐싱함으로서 유저의 읽기 성능을 향상시키는 것 글로벌에 216개의 에지 로케이션이 있으며 계속 증설 중. 유저가 읽기 요청을 하면 트래픽이 edge location에 먼저 전달되고 edge location의 캐시를 먼저 조회. 캐시가 hit하지 않으면 edge location이 트래픽을 읽기 요청의 목적지(이라고 함)에 다시 요청을 하여 응답을 받고 이를 캐싱함. CloudFront이 으로 사용할 수 있는 서비스는 S3 버킷/커스텀 http 등이 있다 . 커스텀 http란 ALB, EC2 인스턴스, S3 정적 웹사이트 등의 AWS 서비스 origin 외에도 어떤 http 백엔드도 가능. Edge Location과 origin은 인터넷이 아닌 프라이빗 네트워크로 통신하기 때문에 매우 빠르고 안전함. S3 버킷 를 사용해 edge location과의 통신에 대한 보안을 설정하며 edge …

March 22, 2023
aws
aws - s3

S3 S3의 유즈 케이스 백업과 스토리지 장애 복구 아카이브 하이브리드 클라우드 스토리지 앱 호스팅 미디어 호스팅 데이터 레이크 & 빅데이터 분석 소프트웨어 배포 정적 웹사이트 S3에서 유저가 파일을 저장하는 디렉토리를 이라고 하며, 버킷의 이름은 유일해야 한다.(모든 리전과 계정을 합쳐서). 다른 계정이라고 해도 중복될 수 없다. 버킷은 리전 레벨에서 정의된다. s3에 이름을 정의하고 오브젝트를 업로드하면 public uri가 생성되는데, 처음에는 이 uri로는 오브젝트에 접근할 수 없고, aws credential을 url로 인코딩한 aws pre-signed url을 통해서만 접근가능하다. S3에 한번에 업로드할 수 있는 파일 크기의 최대는 5gb이며, 그 이상의 크기를 갖는 파일은 multi-part upload를 사용해야 한다. 버킷 내에 폴더를 생성할 수도 있다. S3 보안 user-based IAM-policy: 특정 IAM 유저에게 허용할 api 엔드포인트를 설…

March 22, 2023
aws
aws - vpc

VPC VPC는 리전에 할당되는 리소스로 유저가 리소스를 배포할 수 있는 프라이빗 네트워크이다. 서브넷은 AZ에 할당되는 리소스로 VPC 내의 네트워크를 할 수 있도록 해준다. 퍼블릿 인터넷에서 접근할 수 있는 퍼블릭 서브넷과, 프라이빗 네트워크에서만 접근할 수 있는 프라이빗 서브넷이 있으며 라우팅 테이블에서 서브넷과의 액세스 포인트를 설정한다. 퍼블릭 서브넷과 프라이빗 서브넷이 있다고 하자. 이 둘은 각각 어떻게 인터넷과 프라이빗 네트워크에 연결될까? 퍼블릿 서브넷은 를 통해 인터넷과 연결된다. 라우팅 테이블에서 라우팅을 등록한다. 프라이빗 서브넷은 와 를 통해 인터넷과 연결된다. 프라이빗 서브넷 내의 리소스는 인터넷에 접근할 수 있게 하지만 인터넷에서 프라이빗 서브넷 내의 리소스는 접근할 수 없게끔하는 역할을 하며, 가 퍼블릭 서브넷에 배포되어 프라이빗 서브넷에서 나가는 트래픽을 에 라우팅하고 , 은 다시 이를 에 라우팅함으로써 이를 가능케 한다. 결과적으로 프라이빗…

March 22, 2023
aws
aws - route53

DNS는 ip 주소를 문자열로 번역한 것이다. .으로 구분된 도메인 조각들은 가장 오른쪽의 문자열에서부터 계층형 구조를 이룬다. 즉 www.google.com 은 .com이 최상단 계층, google.com이 그 다음, www.google.com이 그 다음이다. 도메인 등록기관에는 GoDaddy, Amazon Route53 등이 있다. DNS 용어 Zone File - DNS 레코드를 포함한 그룹 네임 서버 - DNS 쿼리에 응답하는 서버 TLD - Top Level Domain - .com, .us 등 SLD - Second Level Domain - google.com, amazon.com 등 http://api.www.google.com 중, api.www.google.com 을 전체 도메인, http를 프로토콜이라고 하며 둘을 합쳐서 url이라고 한다. 가장 첫 DNS 쿼리가 발생하면, 로컬 DNS 서버로부터(ISP 사업자 등이 관리) 항상 루트 서버로 쿼리가 전달된다…

March 20, 2023
aws
aws - Elastic Load Balancer & Auto Scaling Group

수직 스케일링과 수평 스케일링 수직 스케일링: 인스턴스의 크기를 증가시키는 것 수평 스케일링: 인스턴스의 개수를 증가시키는 것 고가용성: 다수의 AZ에 분포된 인스턴스들로 하나의 앱을 실행하는 것. ELB Elastic Load Balancer의 약자. 트래픽을 다수의 서버(예를들어 다수의 ec2 인스턴스)로 포워딩하는 서버 로드 밸런서를 사용함으로서 얻을 수 있는 이점들에는 다음과 같은 것들이 있음: ![[Pasted image 20230318181810.png]] 헬스 체크 트래픽을 인스턴스에 포워딩할 수 있는지 인스턴스가 로드밸런서에 알리는 기능. 엔드포인트와 포트를 별도로 사용하여 (주로 /health 라우팅 ) 이루어짐 로드밸런서 타입 deprecated된 CLB를 제외하고 다음 유형들이 있음 ![[Pasted image 20230318182314.png]] 모든 ELB는 정적 도메인 네임이 부여되며 이를 통해 접근하도록 설계되었다. NLB는 정적 ip까지 부여되니 알아두…

March 19, 2023
aws
aws - ec2

udemy의 aws-certified-solutions-architect-associate-saa-c03 강의 내용 정리 EC2 인스턴스가 시작될 때 실행할 EC2 User Data Script를 정의할 수 있다. 이 스크립트는 root권한으로 실행된다. 인스턴스를 만들때는 보안그룹을 할당하거나 생성하는데, ssh 트래픽을 허용/ 특정 ip에서 허용하거나, 인터넷에서 http 트래픽 허용 / 인터넷에서 https 트래픽 허용 등의 옵션을 사용할 수 있다. “고급 세부 정보” 메뉴에 User Data Script를 정의할 수 있는데, 다음과 같은 시스템 시작시 실행될 스크립트이다. 참고로 인스턴스를 재시작할 때마다 공개 ip는 변경된다. 비공개 ip는 변경되지 않는다. ec2 인스턴스 타입 t: general C: compute-optimized(연산 최적화) R, x1, high memory : memory-optimized(메모리 최적화, 메모리 내에서 대량 데이터 처리하는 데에…

March 18, 2023
aws
inflearn 토비의 스프링 부트

스프링 부트 스프링 부트란 스프링 기반 어플리케이션을 만들 수 있도록 도와주는 도구(기술)이다. 특징은 스프링 기반 standalone 어플리케이션을 만들어주는 도구라는 점이다. 기존에 스프링으로 개발을 시작하는 것은 고민할 지점이 너무 많아 시작을 빠르게 하기가 어려웠다. 고민해야할 선택지가 많았다는 것이다. 스프링부트는 이 선택지를 줄여주는 것이 특징이다. 이러한 빠른 설정을 도와주는 도구들은 초기 어플리케이션이나 MVP 출시에는 적합하지만, 본격적인 엔터프라이즈 어플리케이션으로 확장하는 데에 있어서는 한계에 부딪힌다. 스프링 부트는 을 가지고, 즉시 적용 가능한 기술 조합을 제공하면서 빠르게 어플리케이션을 시작할 수 있게 해줌과 동시에 원한다면 언제나 이를 변경해서 사용할 수 있게 해준다. 스프링 부트의 시작점은 스프링이 컨테이너레스 아키텍쳐를 지원해달라는 어떤 개발자의 요청으로부터 출발했다. Containerless Architecture 란 무엇일까? 이는 와 유…

February 04, 2023
spring
leetcode 1591. Strange Printer II

이 문제를 위상정렬로 풀어낼 수 있는 응용력이 중요한 가장 그래프스러운 문제.

January 16, 2023
algorithm
leetcode 1203.Sort Items by Groups Respecting Dependencies

January 16, 2023
algorithm
leetcode 1136.Parallel Courses

1.BFS 가장 간단하게 위상정렬과 BFS를 사용한 솔루션인데 한 학기에 들을 수 있는 과목의 수가 무제한이므로 queue size에 대해 모두 순회해야 한다. 2.BFS(cycle check+longest path) The number of semesters needed is equal to the length of the longest path  in the graph. stackoverflow 발생 둘을 합친 one-pass 솔루션(dfs로 사이클체크하면서 동시에 최대길이 갱신)

January 15, 2023
algorithm
leetcode 269.Alien Dictionary

위상정렬은 맞는데 구현이 좀 까다롭다.

January 15, 2023
algorithm
spring security

출처: https://www.marcobehler.com/guides/spring-security 아래 글은 위 원문 포스팅의 번역글입니다. 원문 포스팅에는 이해를 돕는 보다 자세한 이미지 스프링 시큐리티 spring security란 무엇인가? 우선 세가지 개념을 확실히 하자 인증 (Authentication) 권한 부여(Authorization) Servlet Filter 인증이란 유저가 접속하는 계정의 주인이 맞는지 하는 행위이다. 권한 부여란 식별된 유저가 접속한 어플리케이션에서 어떤 행위를 할수 있는 권한이 있는지를 하는 행위이다. 스프링의 은 상당히 고전적인 기술로써 http 요청을 클래스에 리다이렉트한다. 기존의 에 적용된 보안은 없다. 또한, 우리는 컨트롤러에서 HTTP auth 헤더에 직접 접근해서 이를 다루고 싶지 않다. 보안이 적용되야하는 최적의 시점은 바로 http요청이 에 도달하기 전이다. 따라서 우리는 를 서블렛의 전방에 배치하여 http 요청…

December 30, 2022
spring