전체 글

   Backend · DevOps    기록을 남기고, 정보를 공유하는
1. 커스텀 훅 사용 장점 재사용성 같은 로직을 여러 컴포넌트에서 재사용할 수 있습니다. 분리된 관심사 로딩 로직을 컴포넌트로부터 분리하여 관리할 수 있습니다. 코드의 중복 최소화 중복되는 코드를 줄일 수 있습니다. 단점 학습 곡선 커스텀 훅을 제대로 이해하고 사용하기 위해선 React 훅에 대한 이해가 필요합니다. 2. 전역 상태 관리 (예: Redux, Context API) 장점 애플리케이션 전반에서 상태 공유 JS 라이브러리의 로드 상태를 앱의 모든 컴포넌트와 공유할 수 있습니다. 중앙 집중식 관리 상태를 한 곳에서 관리하여 일관성을 유지할 수 있습니다. 단점 복잡성 상태 관리 라이브러리의 추가적인 복잡성과 설정이 필요합니다. 오버헤드 작은 애플리케이션의 경우, 전역 상태 관리가 과도하게 느껴질 ..
React 공식 문서를 통한 학습 중, use-immer에 대해 접하게 되었다. 반복적인 코드를 줄이기 위해 use-state 대신 use-immer를 사용할 수 있다는 내용이었다. 그렇다면, 모든 경우에 use-state 대신 use-immer를 사용할 수 있을까? 결론부터 말하자면, use-state와 use-immer를 적절히 혼용해야한다고 판단했다. 이유를 말하기에 앞서, use-immer에 대해 간단히 설명하겠다. use-immer 란? use-immer는 immer 라이브러리를 리액트의 상태 관리와 결합하는 훅을 제공한다. immer는 불변성을 유지하면서 상태를 업데이트하는 것을 간편하게 만들어 주는 도구이며, 복잡한 상태 구조를 가진 애플리케이션에서 특히 유용하다. use-immer의 장점 ..
· Git
이미 올린 PR을 수정하는 방법을 기록하기 위해 작성 코드 수정 수정이 모두 끝났으면 수정한 파일 git add git commit --amend (가장 최근 커밋을 수정) git push -f origin 브랜치명
· Algorithm
분류 너비 우선 탐색, 깊이 우선 탐색, 그래프 이론, 그래프 탐색, 구현, 시뮬레이션 문제 설명 N×M의 모눈종이 위에 아주 얇은 치즈가 과 같이 표시되어 있다. 단, N 은 세로 격자의 수이고, M 은 가로 격자의 수이다. 이 치즈는 냉동 보관을 해야만 하는데 실내온도에 내어놓으면 공기와 접촉하여 천천히 녹는다. 그런데 이러한 모눈종이 모양의 치즈에서 각 치즈 격자(작 은 정사각형 모양)의 4변 중에서 적어도 2변 이상이 실내온도의 공기와 접촉한 것은 정확히 한시간만에 녹아 없어져 버린다. 따라서 아래 모양과 같은 치즈(회색으로 표시된 부분)라면 C로 표시된 모든 치즈 격자는 한 시간 후에 사라진다. 와 같이 치즈 내부에 있는 공간은 치즈 외부 공기와 접촉하지 않는 것으로 가정한다. 그러므 로 이 공..
· Git
작업 전 브랜치를 파고 시작해야하는데, main(또는 dev) 브랜치에서 작업을 했을 경우, 당황하지 말고 다음 작업을 거치자. 혹시, 원래 작업해야 했던 브랜치가 아무런 commit도 되어 있지 않은 새 브랜치인가? 그렇다면 아래 과정을 거치지 않고 바로 git checkout을 하자. 1. 현재 작업 중이던 main(또는 dev) 브랜치에 작업 내용을 commit 2. 원래 작업했어야 할 브랜치 생성 ex) git branch feature/issue-150-sw - 이제, 내가 작업한 내용이 commit된 브랜치가 생성되었다. 3. main(dev) 브랜치에서 git reset을 해준다. - 작업 내용 commit은 새 브랜치에 옮겨두었으니, main(dev) 브랜치에서의 commit은 되돌린다. ..
· Algorithm
목차 문제 링크 1916번: 최소비용 구하기 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 www.acmicpc.net 분류 데이크스트라, 그래프 이론 문제 설명 N개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 M개의 버스가 있다. 우리는 A번째 도시에서 B번째 도시까지 가는데 드는 버스 비용을 최소화 시키려고 한다. A번째 도시에서 B번째 도시까지 가는데 드는 최소비용을 출력하여라. 도시의 번호는 1부터 N까지이다. 입력 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 ..
목차 crypto-js crypto-js 설치 crypto-js 사용 예시 crypto-js crypto-js는 해쉬 함수를 통해 양방향으로 암호화 할 수 있도록 해주는 Node.js 기반 패키지이다. crypto-js 설치 npm i crypto-js crypto-js 사용 예시 내 경우, React 앱 내 src/util/ 경로에 EncryptService.js 파일을 생성해 활용했다. 나는 AES 암호화 방식을 선택했으며, 여기를 참고해 원하는 암호화 방식을 사용해도 상관없다. // EncryptService.js import CryptoJS from "crypto-js"; import { secrets } from "../../secret"; const encryptionKey = secrets...
온프레미스 베어메탈 환경에서 쿠버네티스를 설치해서 사용하면서, PV와 PVC 문제로 파드가 정상적으로 동작하지 않는 상황이 자주 발생했었습니다. PV와 PVC에 대해서 알아보도록 하겠습니다. PersistentVolume(PV) 클러스터의 스토리지 자원을 나타냅니다. PersistentVolumeClaim(PVC) 사용자가 요청한 스토리지 자원을 나타냅니다. 쿠버네티스는 PV와 PVC를 사용하여 파드와 클러스터 스토리지 간의 추상화 레이어를 제공합니다. PV와 PVC의 관계 PV는 클러스터에서 사용 가능한 스토리지를 나타내며, PVC는 파드가 사용할 수 있는 스토리지 요청을 나타냅니다. PVC가 생성되면, 쿠버네티스는 사용 가능한 PV 중에서 PVC의 요구 사항과 일치하는 PV를 찾아 바인딩합니다. 이를..
해당 에러는 Helm v2에서만 발생하는 에러입니다. Helm v3 에서는 잠재적인 보안 문제를 방지하기 위해, Tiller를 사용하지 않도록 변경되었습니다. 이제는, kubeconfig 파일의 RBAC 권한을 따라가게 되어, Tiller를 사용할 필요가 없어졌습니다. 문제 Helm을 통해 Jenkins 차트를 설치하려던 중 다음과 같은 에러가 발생 Error: release jenkins failed: namespaces "dev" is forbidden: User "system:serviceaccount:kube-system:default" cannot get resource "namespaces" in API group "" in the namespace "dev" Tiller : 클러스터에서 He..
k8s 환경을 처음 접하고 공부하면서 구축했던 경험으로 작성했으며, 잘못된 정보를 포함하고 있을 수 있습니다. 피드백 감사히 수용하겠습니다. 쿠버네티스 클러스터 아키텍처 "2개의 EC2 인스턴스를 각각 마스터, 워커노드로 분산해서 사용" "비교적 많은 리소스가 남는 마스터 노드에 데이터베이스를 도커로 배포" "워커노드에는 Spring Cloud Gateway와 마이크로서비스들, 그리고 EFK 스택을 파드로 배포" "마이크로서비스들과 게이트웨이는 파드의 개수를 항상 2개로 유지(replicas = 2)" "비정상 종료 또는 변경 감지 시 쿠버네티스가 롤링업데이트를 수행하도록 설정" *롤링 업데이트 : 파드 인스턴스를 점진적으로 새로운 것으로 업데이트하여 디플로이먼트 업데이트가 서비스 중단 없이 이루어질 수..
EFK Stack EFK stack이란 Elasticsearch, Fluentd, Kibana를 얹은 스택이다. 기존의 ELK stack과의 차이는 로그 파이프라인 역할을 하던 Logstash를 Fluentd로 대체 Fluentd Fluentd는 CNCF의 graduated project 중 하나다. - 규모가 크고 레퍼런스가 많다. Fluentd는 다양한 소스에서 로그를 수집해 중앙화할 수 있는 오픈소스 데이터 콜렉터다. - 다양한 시스템에서 들어오는 여러 로그들을 fluentd 하나로 수집하고 파싱하고 포워딩한다. 기존의 시스템마다 제각각의 로깅 툴을 사용하고 각기 다른 저장 장소에 로그가 흩어져 있던 로깅 아키텍처들을 통합할 수 있다는 장점이 있다. 점점 복잡해지고 있는 MSA 환경에서 이러한 장점..
· Tips
private String getAccessToken() throws IOException { // firebase로 부터 access token을 가져온다. GoogleCredentials googleCredentials = GoogleCredentials .fromStream(new ClassPathResource("firebase/firebase_service_key.json").getInputStream()) .createScoped(Arrays.asList("https://www.googleapis.com/auth/cloud-platform")); googleCredentials.refreshIfExpired(); return googleCredentials.getAccessToken().get..
· Infra
process apparently never started in /home/jenkins/agent/workspace/gateway@tmp/durable-8b1e819f 원인 파이프라인 내 sh 입력 단계에서 스크립트가 시작되지 않았거나, 실행 도중 문제가 발생한 경우에 발생 해결방법 여기서, docker 환경에서 -u root와 같은 root 권한을 주고 해결한 사례를 참고. kubernetes 환경이므로, pipeline에 kubectl 컨테이너 생성 구문을 다음과 같이 수정 - name: kubectl image: bitnami/kubectl:latest command: - cat tty: true workingDir: '/home/jenkins/agent' securityContext: runAs..
· Tips
갤럭시북3 프로를 사용한지 어느새 한 달이 지났어요 '아무리 가벼워도 16인치인데.. 들고 다니긴 힘들지 않을까?' NO! 집에서보다 카페에서 더 자주 사용할 만큼 생각보다 훨씬 가볍워서 전혀 부담없이 들고 다닐 수 있었어요 ! 성능은 두 말할 것도 없이 너무 좋았구요 ^^ (게임하기에도 너무 좋았어요) 성능에 비해서 발열도 적어서 너무 만족했어요 ! 소개 한 번 보시죠 ! 디자인 디스플레이 프로세서 포트/연결성 배터리 에코시스템 세컨드 스크린 멀티 컨트롤 노트북 구매 계획을 세우고 계시다면 . . . 갤럭시 북 3 PRO 적극 추천드려요 ! 본 컨텐츠는 SSAFY 갤럭시 북3 체험단 활동의 일환으로 제작되었습니다
· Tips
ssh 접속 시 오류 발생 원인 이전에 같은 정보를 가지고 서버를 접속했던 적이 있을 때, 그 때와 지금의 키 정보가 다를 때 발생 해결방법 기존에 접속했던 정보를 삭제 ~/.ssh 에 있는 known_hosts 내 내용을 삭제하고 다시 실행
Sungwoo Koo
Koo's Devlog