개발
-
Cannot find module or its corresponding type declarations 오류 (feat. package.jso개발/Front-end 2024. 4. 5. 16:56
최근 typescript로 개발된 라이브러리를 배포했습니다. 번들러는 tsup을 이용했습니다. rollup과 고민하다가 tsup을 선택했는데 나중에 이 부분도 정리해서 올리도록 하겠습니다. (다짐) 오늘 다룰 부분은 배포한 라이브러리를 서비스에서 사용할 때 겪은 이슈입니다. 오류에 대해 자세히 말씀드리면, Nextjs로 만들어진 서비스에서 B 라이브러리를 Install하고 페이지 코드에서 `import B from '@library/b/subpath-a' 를 했습니다. 그 외 한 게 없습니다. 근데, Cannot find module @library/b/subpath-a' or its corresponding type declarations 에러가 떴습니다. 타입 에러가 났지만 사용하는데 문제는 없었습니..
-
리트코드 6번: Zigzag Conversion개발/알고리즘 2024. 3. 24. 18:24
문제 The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility) (주어진 문자열을 주어진 로우 수만큼 지그재그 형태로 만든 후 첫번째 라인부터 왼쪽에서 오른쪽으로 읽은 값을 출력하기) P A H N A P L S I I G Y I R And then read line by line: "PAHNAPLSIIGYIR" 예제 Input: s = "PAYPALISHIRING", numRows = 4 Output: "PINALSIGYAHRPI" P I N A L S I..
-
리트코드 5번: Longest Palindromic Substring개발/알고리즘 2024. 2. 29. 00:29
문제 Given a string s, return the longest palindromic substring in s. (앞에서부터 읽어도 뒤에서부터 읽어도 같은 문자열 중 가장 긴 문자열 찾기) 예시 Input: s = "babad" Output: "bab" Explanation: "aba" is also a valid answer. Input: s = "cbbd" Output: "bb" 내 풀이 내 생각의 흐름 1. 음... 모르겠다 2. 힌트를 보자. https://youtu.be/UflHuQj6MVA 영상을 보고 깨달음을 얻음 3. 후다닥 구현 /** * @param {string} s * @return {string} */ var longestPalindrome = function (s) { ..
-
리트코드 3번: Longest Substring Without Repeating Characters개발/알고리즘 2024. 2. 27. 00:41
문제 Given a string s, find the length of the longest substring without repeating characters. 예시 Input: s = "abcabcbb" Output: 3 Explanation: The answer is "abc", with the length of 3. Input: s = "bbbbb" Output: 1 Explanation: The answer is "b", with the length of 1. Input: s = "pwwkew" Output: 3 Explanation: The answer is "wke", with the length of 3. Notice that the answer must be a substring, "p..
-
클린코드 리뷰개발/개발서적 2022. 5. 22. 22:31
ch 06. 객체와 자료 구조 읽고 정리한 글입니다. private variable를 사용하는 이유 A 클래스의 public member 변수 m이 있다고 가정해보자. 변수 m은 public이므로 B 클래스에서 접근할 수 있다. B 클래스에서 변수 m을 사용하고 있는 상황에서 A 클래스의 변수 m의 타입이나 이름 등을 변경하면 어떻게 될까? 우리는 B 클래스 내에서 변수 m을 사용하고 있는 부분을 수정해야한다. 또한, 변수 m을 사용하고 있을지도 모르는 다른 클래스들도 찾아봐야 한다. 만약 member 변수 m이 private 변수라면 어떨까? 변경의 여파를 신경쓸 필요 없이 변수 m의 타입과 이름을 맘대로 바꿀 수 있다. 만약 버그가 생긴다고 해도 우리는 A 클래스의 구현 위주로 살펴보면 된다. 그렇다..
-
SOLID 원칙 - LSP, ISP, DIP개발/개발서적 2021. 10. 21. 00:24
클린 아키텍쳐 3부 LSP 리스코프 치환 원칙 치환 원칙과 하위타입 S 타입의 객체 o1에 대응하는 T 타입의 객체 o2가 있다. T 타입을 이용한 프로그램 P에서 o2의 자리에 o1을 치환하더라도 P의 행위가 변하지 않는다면, S는 T의 하위타입이다. LSP를 준수하는 설계(상속) Billing Application ---> License - caleFee() Rectangle - setH(), setW() Framework F ---> Database D, 프레임워크가 반드시 D 데이터베이스를 사용해야된다면 S는 F를 의존하고 F는 D를 의존한다. S와는 전혀 관계 없는 기능이 D에 포함되어있다고 가정해보면, 그 기능이 변경되면 D가 바뀌어 F를 심지어는 S를 재배포해야하는 경우가 생길 수 있다. D..
-
SOLID 원칙 - SRP, OCP개발/개발서적 2021. 10. 18. 23:53
클린 아키텍쳐 3부 SOLID 원칙을 정리하였다. SOLID 원칙은 함수와 데이터 구조를 클래스로 배치하는 방법과 이들 클래스를 서로 결합하는 방법을 설명한다. 중간 수준의 소프트웨어 구조를 [변경에 유연하고, 이해하기 쉽고, 컴포넌트 기반이 되도록] 만드는 것이 SOLID의 목적이다. 여기서 중간 수준이란 모듈 수준으로 즉, SOLID 원칙은 모듈과 컴포넌트 내부에서 사용되는 소프트웨어 구조를 정의하는 데 적용할 수 있다. SRP: 단일 책임 원칙, 소프트웨어 모듈은 변경의 이유가 단 하나여야한다. OCP: 개방-폐쇄 원칙, 기존 코드를 변경하기 보다는 반드시 새로운 코드를 추가하는 방식이여야 한다. LSP: 리스코프 치환 원칙, 상호대체 가능한 구성요소를 이용해 시스템을 만들 수 있으려면 구성 요소는..
-
[k8s] Component개발/Infra 2021. 8. 7. 10:32
대세는 쿠버네티스 [초급~중급] 강의를 보고 정리한 글입니다. [중급 편] 아키텍쳐 Components (pod creation) master 노드의 /etc/kubernetes/manifests 에는 kube-apiserver.yaml, etcd.yaml, kube-scheduler.yaml 이 있다. k8s 구동 시 이 파일을 읽어서 각 컴포넌트를 pod 형태로 띄운다. worker 노드에는 k8s 설치될 때 같은 설치되는 kublet과 Container Runtime인 docker가 구동된 상태이며 /etc/kubernetes/manifests/kube-proxy.yaml 을 이용하여 각 노드에 kube-proxy도 띄운다. Pod 생성 과정 사용자가 kubectl로 pod 생성을 요청한다. kub..