
Same-origin과 Same-site same-site와 same-origin은 다르다. scheme과 host name, port의 조합이 모두 같을 경우 same-origin이고, host name이 같을 경우 same-site라고 한다. origin https://sample.com:8080 라는 사이트가 있다는 것을 기준으로 origin을 비교해 볼 경우 origin compare 내용 https://sample1.com:8080 cross-origin domain이 다름 http://sample.com:8080 cross-origin scheme이 다름 https://sample.com:8081 cross-origin port가 다름 https://blog.sample.com:8080 cro..
https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/ Find First and Last Position of Element in Sorted Array - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 정렬된 number타입 배열과 number타입 value가 들어온다. 배열에서 value가 존재하는 start index와 end index를 return 한다..
캐시 메모리, Cache Memory 캐시 메모리는 CPU와 주 기억장치(Memory, ram)의 속도차이를 극복하기 위하여 CPU ↔ 주기억장치 사이에 존재하는 고속의 버퍼 메모리이다. 캐시 메모리를 사용하여 CPU가 작업을 빠르게 처리할 수 있다. CPU는 캐시 메모리에 접근하여 연산에 필요한 명령과 데이터를 읽어 들인다. 만약, CPU가 캐시 메모리에 접근할 때 원하는 데이터가 없다면 캐시 메모리는 주기억장치에 접근하여 데이터를 캐시 메모리에 올려야 된다. -> CPU가 원하는 데이터가 캐시 메모리에 있을 수 있도록 하는 것을 의미한다. 캐시의 작동 원리 원본 데이터와 별개로 자주 쓰이는 데이터들을 복사해둘 캐시 메모리를 만든다. 데이터 요청이 들어올 경우 캐시 메모리 먼저 탐색한다. 캐시에 원하는..
https://leetcode.com/problems/find-kth-bit-in-nth-binary-string/ Find Kth Bit in Nth Binary String - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com input으로 n, k를 준다. n을 이용하여 binary string을 만든다. string이 만들어지는 규칙은 S1 = "0"; S2 = S1 + "1" + reverse(invert(S1)); ... Si = Si-1 + "1" + ..

vector는 한번에 하나의 타입만 보관할 수 있다. 만약 라이브러리 사용자가 특정 상황에서 유효한 타입 묶음을 확장할 수 있도록 하길 원할 수 있다. 예를 들어보자 아이템 리스트에 걸쳐 각각에 대하여 draw메소드를 호출하여 이를 화면에 그리는 GUI 도구를 활용할 수 있다. GUI도구를 만든다는 가정을 해보자. draw라는 메소드를 가지고 있는 component라는 객체를 정의한다. 다른 클래스들은 Component를 상속받고 draw메서드를 물려받게 된다. 이들은 각각 draw 메소드를 오버라이딩하여 고유동작으로 정의할 수 있으나, framework는 모든 유형을 마치 Component인 것 처럼 다룰 수 있고 draw를 호출할 수 있다. rust는 상속이 없으므로 사용자들이 새로운 타입을 정의하고..

최단경로 구하기 하나의 정점을 기준으로 다른 정점까지의 최단거리를 측정하는 알고리즘이다. 특정 지역에서 다른 지역까지의 최단 경로를 구하는 지도를 사용하는 application에서 사용할 수 있다. node와 가중치(node 사이의 거리)가 있는 간선으로 표현되는 그래프에서 사용한다. 1번 노드에서 부터 6번 노드까지의 최단거리를 구해야 된다고 생각해보자. 모든 경우의 수에 대하여 계산해보자. (Brute force solution) 1 -> 2 -> 3 -> 4 -> 6 => 20 1 -> 2 -> 4 -> 6 => 15 1 -> 2 -> 5 -> 6 => 9 1 -> 3 -> 4 -> 6 => 13 최단경로는 3번째 경우의 수가 된다. 하지만 모든 경우의 수를 계산하는 방식은 시간이 많이 걸린다. =..

러스트에서 모든 참조자는 life time(이하 라이프타임)을 갖는다. 여기서 라이프타임은 참조자가 유효한 scope을 의미한다. 대부분 경우에서 타입이 추론되는것과 마찬가지로, 대부분 경우 라이프타임 또한 암묵적이며, 추론된다. 여러가지 타입이 가능하기 때문에 우리가 타입을 명시해야 하는 때와 비슷하게 참조자의 라이프타임이 몇몇 다른 방식으로 연관될 수 있는 경우들이 있으므로, rust는 우리에게 제네릭 라이프타임 파라미터를 이용하여 이 관계들을 명시하길 요구하며 런타임에 실제 참조자가 확실히 유효하도록 한다. 라이프타임은 타 언어와는 다른 독특한 기능이다. 댕글링 참조자 방지 라이프타임의 주목적은 댕글링 참조자(dangling reference)를 방지하는 것이다. 댕글링 참조자는 프로그램이 참조하기..

현재 재직중인 회사에서 yarn workspace를 활용하여 모노레포(MonoRepo) 프론트엔드 시스템을 구축하고 있습니다. 제가 하는 업무는 기존 서비스하는 application의 공통적으로 사용되는 컴포넌트를 storybook에 작성한 뒤 storybook 컴포넌트를 기존 컴포넌트와 교체하는 작업입니다. 이러한 업무를 진행하던 중 이슈가 발생하여 기록해놓고자 합니다. Monorepo 여러개의 프로젝트를 하나의(mono) 저장소(repository)로 관리하는 시스템을 의미합니다. 각각 패키지를 하나의 Root Package 아래에 묶어 하나의 저장소로 관리합니다. 기존 멀티레포 시스템에서 모노레포 시스템으로 프로젝트를 구축하며 다음과 같은 이점을 얻기를 원하고 있습니다. 중복되는 패키지에 대한 공간..