전체 글 794

[flutter] uses-sdk:minSdkVersion 16 cannot be smaller than version 19 오류 해결

개요 flutter에서 빌드 시, 특정 라이브러리가 minsdk버전을 충족하지 못하면 아래와 같은 에러가 발생니다. 해결방법 flutter 2.8이상 사용하는 경우 local.properties에서 minsdkVersiond을 설정하면 됩니다. flutter.minSdkVersion=21 그리고 build.gradle에서 local.properties minsdk설정을 읽을 수 있도록 수정합니다. defaultConfig { ... minSdkVersion localProperties.getProperty('flutter.minSdkVersion').toInteger() ... } 참고자료 stackoverflow: https://stackoverflow.com/questions/52060516/flut..

Elasticsearch 지연 현상

Elasticsearch에서 알 수 없는 이유로 데이터 삽입이 느린 상황을 발견했습니다. Elasticsearch 숙력도가 낮아 어떻게 분석해야할지 몰랐기 때문에 어떤 문제로 속도가 느린지 감이 안왔습니다. 네트워크가 느린건지, 속도가 느린건지 등 어떤 관점에서 분석해야하는지 알 수가 없었죠. 결과론적으로 각 인스턴스 자원(cpu, memory)를 scale up을 해서 지연을 없앴습니다. 컨테이너 로그가 분당 2천만건 이상 Elasticsearch으로 쌓이는 상황이어서, Elasticsearch가 indexing과 데이터를 저장하는 속도가 느린 걸로 판단이 되었습니다. 그렇지만, 앞으로 이런 상황이 나온다면 어떻게 분석을 해서 cpu/memory가 부족한지 판단할지 어려운 것 같습니다.

회고모음 2023.01.05

2022년 회고

1월 1일부터 응급실을 가는 등 2022년은 21년에 비해 기억에 남는 추억이 많았던 해였습니다. 2022년 정리 1. 혼자서 업무 처리하는 방법을 경험 2021년 11월 사수가 퇴사하면서 22.12월까지 사수 없이 혼자 일했던 것 같습니다. 기술적으로 어려웠던 상황도 많이 만났지만 혼자서 사람과 대화하면서 일을 해결해야하는 과정이 너무 힘들었습니다. 우스개소리로 갑-을-병-정 관계에서 정의 위치에 있어서 더욱더 힘들었던 것 같습니다. 당시 생각하면 기술이 어려운 것보다는 사람을 만나는게 두려워서 출근하기 싫은 기억이 떠오릅니다. 하지만, 시간이 약이라고 했나요?. 회사를 대표하여 혼자회의에 참여하는 등 경험이 조금씩 쌓이자 두려웠던 마음이 조금씩 사라졌습니다. 그리고 어느새 주변 동료와 갑-을-병 관계..

회고모음 2023.01.02

Ubuntu symbolic 관리 명령어: update-alternatives

Debian리눅스에서 update-alternatives를 사용하면 symbolic을 쉽게 관리할 수 있습니다. 예를 들어 /usr/bin/python이 python3.6으로 symbolic링크가 걸려있다고 가정해봅시다. python3.7로 수정하려면 기존 symbolic링크를 제거하고 python3.7 symbolic링크를 설정해야 합니다. rm -rf /usr/bin/python ln -s /usr/bin/python /usr/bin/python3.7 update-alternative를 사용하면 한 줄의 명령어로 symbolic명령어를 관리할 수 있습니다. update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2

code-server pod ipynb파일이 안열릴 때

영상: https://youtu.be/27vM4Wa97ow code-server를 https로 배포해야하는 이유 code-server를 쿠버네티스 pod로 배포하면 https프로토콜을 사용하는 편이 좋습니다. https를 사용하지 않으면 몇몇 기능이 동작안할 수 있습니다. code-server에 접근하기 위해 웹 브라우저를 사용해야 합니다. 그리고 웹 브라우저 설정에 code-server기능에 영향을 받게 되고 웹 브라우저의 보안설정때문에 웹 브라우저에서 http프로토콜로 동작하는 기능을 실행 못할 수 있습니다. 대표적인 예가 ipynb파일을 열수 없습니다. 자세한 아키텍처를 모르겠지만 ipynb파일을 여는 기능이 webview로 되어 있지 않을까 생각합니다. ipynb파일을 열면 아래 그림과 같이 아무..

쿠버네티스 Headless 서비스

영상: https://youtu.be/If03sN4isO4 Headless서비스란? Headless서비스는 ClusterIP가 없는 서비스입니다. kubectl로 서비스를 조회하면 ClusterIP가 None으로 표시됩니다. Headless서비스와 일반 서비스 비교 Headless서비스는 kube-proxy가 처리하지 않아서 “서비스”를 이용한 로드 밸런싱 기능은 지원하지 않습니다. 일반 서비스는 kube-proxy가 처리하므로 서비스가 트래픽을 로드밸런싱 합니다. 하지만 headless서비스는 서비스를 거치지 않고 pod에 직접 접근합니다. DNS 쿼리 테스트 테스트를 하기 위해 제 git repo에 있는 쿠버네티스를 배포합니다. kustomize를 이용하여 쉽게 배포할 수 있습니다. 배포가 성공하면 ..

kubernetes에서 code-server 실행

git repo: https://github.com/sungwook-practice/code-server-demo ingress에서 your-host를 도메인으로 수정한 후, 쿠버네티스 리소스를 배포하시면 됩니다. code-server가 web-socket를 사용해서 websocket설정을 annotations에 추가했습니다. apiVersion: apps/v1 kind: Deployment metadata: labels: app: code-server name: code-server namespace: default spec: replicas: 1 selector: matchLabels: app: code-server template: metadata: labels: app: code-server sp..

nginx ingress 존재 때문에 보안 취약점 받은 nginx pod

개요 A팀이 프록시 목적으로 띄운 nginx pod가 취약점이 있어 수정하라고 요구받았습니다. A팀은 nginx pod설정을 고쳐도 권고받은 취약점이 사라지지 않아 저에게 도움을 요청했습니다. 분석 취약점은 405 method not allowd를 에러로 처리하지 않고 그대로 노출시켰다는 것입니다. default 405응답에는 nginx문자이 있었습니다. A팀은 405예외 처리를 했지만 계속 취약점이 발생했습니다. 저는 쿠버네티스라는 환경과 오류응답에 nginx라는 키워드를 보고 nginx ingress controller오류이지 않을 까 생각했습니다. 그래서 먼저 ingress controller가 nginx인지 먼저 확인했습니다. 예상대로 nginx였습니다. 그 다음, nginx ingress con..

회고모음 2022.12.27

컨테이너 로그 수집기준

오늘 회의를 하다가 컨테이너 로그 수집기준에 대해 잠깐 이야기하는 상황이 있었습니다. 이야기 내용이 매우 흥미로웠습니다. 회의 끝에 가장 중요한 기준은 "유실유무"였습니다. 유실되어도 실시간이 중요하다 유실되면 안되고 신뢰성이 중요하다 컨테이너가 갯수가 기하급수적으로 늘어나면 로그 수집에 장애가 생겨 일부 로그가 수집이 안될 수 있습니다. 물론 장애를 완벽히 고치면 좋겠지만, 인원이 한정되어 있고 다른 업무의 우선순위가 높으면 임시적으로 장애를 고칠 수 밖에 없습니다. 그래서 회의에서 "유실유무"라는 기준이 이야기 나왔습니다. 신뢰성이 중요하다면 아키텍처를 확인하고 완충장치(예: 카프카)를 넣기로 검토하기로 했습니다.

회고모음 2022.12.26

로컬 docker build&push 파이프라인 개선

개요 오늘 일을 하다가 우연히 아이디어가 떠올라 불편한 로직을 변경했습니다. docker-compose명령어인 build와 push를 사용하여 행위를 명시적으로 표현할 수 있어. 쉘 스크립트에 비해 의도를 명확하게 했습니다. # 변경 전 /bin/bash deploy.sh # 변경 후 docker-compose build docker-compose push 상세내용 로컬에서 약 40개의 dockerfile을 build하고 push 하는 간단한 쉘 스크립트가 있었습니다. 각 dockerfile이 위치한 경로가 있어 반복문으로 docker build를 수행하는 형태였습니다. TARGETS=" dir1 dir2 dir3 " for target in ${TARGETS}: do docker build -t IMA..

회고모음 2022.12.26