본문 바로가기

전체 글192

Terraform Backend 생성하기 (S3 버킷) 테라폼 backend용 s3 버킷 생성 provider "aws" { region = "ap-northeast-2" } resource "aws_s3_bucket" "example" { bucket = "iac-serverce1" tags = { Name = "iac-service1" Environment = "Dev" Management = "Terraform" CreatedBy = "hwan001" } } 2023. 10. 22.
Jira label 필드 추가하기 label 필드 레이블 필드를 추가해두면 지라 검색 시 관련된 이슈를 편하게 찾을 수 있다. 티켓의 수가 많을 경우, 레이블을 하나씩 손으로 작성해주기는 귀찮기 때문에 파이썬의 JIRA Package를 활용해서 추가해줬다. from jira import JIRA class JiraAPI: def __init__(self, url:str, auth:set): self.options = {'server': url} self.jira = JIRA(self.options, basic_auth=auth) def set_labels(self, issue_ids:str, labels:list): for issue_id in issue_ids: issue = self.jira.issue(issue_id) for lab.. 2023. 10. 22.
Dockerfile 작성하기 Dockerfile? Dockerfile은 원하는 Docker Container Image를 생성하기 위한 스크립트 파일이다. Docker는 build 옵션을 통해 Dockerfile에 나열된 명령문을 차례대로 수행하며 Container Image를 생성해준다. Dockerfile을 읽을 줄 안다는 것은 해당 이미지가 어떻게 구성되어 있는지 알 수 있다는 의미이다. Dockerfile 작성 방법 키워드 FROM: 시작점이 될 베이스 이미지를 지정한다. MAINTAINER: 이미지를 생성한 개발자의 정보를 표시한다. (1.13.0 이후에는 권장되지 않고, LABEL을 사용하는 것이 좋다.) LABEL: 이미지에 메타데이터를 추가한다. key-value 형태로 지정된다. RUN: 이미지 내에서 명령어를 실행.. 2023. 9. 16.
쿠버네티스 네임스페이스 확인하고 변경하기 네임스페이스 확인 kubectl get namespace 네임스페이스 변경하기 kubectl config set-context --current --namespace={NAMESPCE} 2023. 8. 27.
[T1012] Week 6. 테라폼으로 협업하기 Git과 PR(Pull Request)을 활용한 협업 인프라의 규모가 확장되면서 여러 팀원들과 함께 작업하는 상황에서는 동일한 상태 파일을 공유하고 동기화하는 것이 중요해졌다. 유형 1은 직접 .tf 파일과 tfstate 파일을 공유하는 방식이다. 이런 방식으로 파일을 공유할 수는 있지만, 수동으로 관리하는 데에는 여러 번거로운 작업들이 포함된다. 이 과정에서 인간의 실수나 정보의 누락이 발생할 수 있기 때문에 이러한 문제점을 해결하고자 버전 관리 시스템(VCS)의 도입이 필요해졌다. 유형 2에서는 VCS(예: git, svn)를 사용하여 해당 파일들을 효율적으로 관리한다. 이를 통해 변경 이력을 체계적으로 추적할 수 있으며, 필요한 경우 이전 버전으로 쉽게 롤백할 수 있게 되었다. 유형 3은 git을 .. 2023. 8. 13.
Jenkins에 설치된 플러그인 목록 얻기 젠킨스에 설치된 Plugin 목록 얻기 아래 명령어로 젠킨스에 설치된 플러그인의 목록을 얻을 수 있다. USERNAME과 PASSWORD은 젠킨스에 로그인이 가능한 계정 정보, SERVER IP와 PORT는 조회를 원하는 젠킨스 서버의 정보이다. 위 내용에 특수기호가 들어가는 경우는 \를 붙여 사용한다. (PASSWORD가 passwd! 일 경우, passwd\!) SERVER IP에는 https등을 제외하고 아이피만 넣어주어야 한다. JENKINS_HOST="USERNAME:PASSWORD@SERVER_IP:PORT"; curl -sSL "http://$JENKINS_HOST/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper.. 2023. 8. 10.
[T1012] Week 4. State & module State file 상태 파일은 terraform apply시에 생성되는 .tfstate 파일이다. 해당 파일은 인프라의 상태를 json 형태로 가지고 있는데, 테라폼 내부에서만 사용하기 위한 파일이기 때문에 테라폼 상태 파일을 직접 편집하거나 직접 읽는 코드로 작성해서는 안된다. 팀 단위로 작업하는 경우 아래 조건이 갖춰져야 한다. 상태 파일을 저장하는 공유 스토리지 (Shared storage for state files) 각 팀원이 동일한 테라폼 상태 파일 사용을 위해서, 공유 위치에 저장이 필요 상태 파일 잠금 (Locking state files) 잠금 기능 없이 동시에 테라폼 실행 시 여러 테라폼 프로세스가 상태 파일을 동시에 업데이트하여 경쟁 상태(race condition)로 인한 충돌 가.. 2023. 7. 29.
[T1012] Week 3. 테라폼 기본 사용법 정리 (3/3) 조건문 Terraform에는 다른 언어처럼 조건문을 위한 if 키워드가 없기 때문에 3항 연산자를 사용하여 조건문을 작성해야 한다. 예를들면 아래처럼 환경에 대한 정보를 변수로 입력받아 product 환경일 경우 5번, 아닐 경우 1번만 리소스를 생성하도록 할 수 있다. resource "aws_instance" "hwan001_instance" { count = var.env == "prod" ? 5 : 1 } 만약 dev 환경일 경우에만 리소스를 생성하고 싶다면 아래처럼 작성할 수 있다. provider "aws" { region = "ap-northeast-2" } data "aws_ami" "ubuntu" { most_recent = true filter { name = "name" values .. 2023. 7. 22.
[T1012] Week 2. 테라폼 기본 사용법 정리 (2/3) 데이터 소스 Terraform의 데이터 소스는 테라폼 설정 내에서 읽기 전용의 값들을 제공한다. 이 값을 활용하면 이미 존재하는 리소스의 세부사항이나 외부 데이터를 참조할 수 있다. 데이터 소스 블록은 아래처럼 data로 시작하고 ‘데이터 소스 유형’과 '이름'을 정의한다. data "" "" { = } # 참조 : data... # 사용가능한 메타인수: # depends_on : 종속성 선언 # count : 선언된 개수만큼 리소스를 생성 # for_each : map또는 set 타입 변수로 리소스 반복 생성 # lifecycle : 리소스 수명주기 예를 들면 아래 코드는 aws의 az 정보를 얻어와 각 az에 subnet을 생성할 수 있다. data "aws_availability_zones" "av.. 2023. 7. 15.
[T1012] Week 1. 테라폼 기본 사용법 정리 (1/3) Terraform HashiCorp사의 Terraform은 버전화, 재사용 및 공유할 수 있는 사람이 읽을 수 있는 구성 파일에서 클라우드 및 온프레미스 리소스를 모두 정의할 수 있는 코드형 인프라(IaC) 도구로 Amazon Web Services(AWS), Azure, Google Cloud Platform(GCP), Kubernetes, Helm, GitHub, Splunk, DataDog 등 수천여개의 다양한 Provider를 제공한다. Provider 테라폼을 적용할 대상으로 한번에 하나의 프로비저닝만 가능하며 terraform init을 통해 설치된다. (aws 구성을 azure로 변경하는 등의 작업은 불가함, 프로바이더에 대한 자세한 정보는 아래 링크 참조) https://registry.t.. 2023. 7. 8.
C++ 17에서 폴더/파일 구분하기 경로를 입력받아 폴더인지 파일인지 확인하기 C++ 17로 윈도우에서 프로그램을 만들면서 폴더와 파일을 구분해야하는 경우가 생겨 아래 코드를 찾게되었다. 찾은 코드는 테스트 시 작동에는 문제가 없었지만 문자열을 LPCWSTR (WCHAR *)로 받아야 한다는 사소한 단점이 있었다. 혹시 String 클래스를 사용해 입력받은 경로가 폴더인지 파일인지 구분할 수 있는 방법이 있는지도 찾아봤지만, 검색을 해봐도 찾지 못했다.. int isFolder(LPCWSTR path) { /* args: LPCWSTR fileName : 파일의 full path return: int code : 폴더는 1, 파일은 0, 에러는 -1 summary: 폴더인지 파일인지 구분 */ WIN32_FIND_DATA wInfo; HA.. 2023. 5. 19.
Casablanka 빌드용 Dockerfile 프로그램을 만들면서 Python 서버와 REST로 연결하기 위해 라이브러리를 찾아봤다. 구글 검색을 통해 C++로 작성된 HTTP 클라이언트/서버 애플리케이션을 개발할 때 도움를 주는 C++ REST SDK (또는 Casablanca) 라이브러리를 찾았다. 해당 라이브러리는 microsoft의 공식 라이브러리로 깃 허브에 올라와 있었기 때문에, 빌드를 위해 아래 Dockerfile을 작성했다. casablanka.Dockerfile FROM ubuntu:latest AS env RUN apt-get update RUN apt-get upgrade -y RUN apt-get install -y sudo RUN apt-get install -y g++ git libboost-atomic-dev libboos.. 2023. 4. 26.
QR-CODE 생성하기 python으로 QR-CODE 생성하려면 아래 qrcode[pil] 패키지를 import 한다. pip install qrcode[pil] 아래 코드를 사용하면 png 형식으로 qrcode를 만들 수 있다. import qrcode img_url = qrcode.make("https://hwan001.co.kr/") img_url.save("qrcode.png") 2023. 3. 29.
2023년 AWS 서비스 종류 별 기능 요약 ** 아래 내용에 아직 정리 안된 서비스들도 많지만 공부하면서 하나씩 추가로 정리할 예정입니다. AWS (Amazon Web Services) AWS를 공부하면서 어떤 제품들이 있는지 정리를 해보고 싶어졌다. 하지만 아래 이미지에 있는 기초 서비스들 외에도 많은 서비스들이 있고, 새로운 서비스가 계속 출시되기 때문에 모든 서비스를 정리하진 못했다. 추후에 하나씩 공부하면서 정리할 예정이다. 아래 이미지는 AWS 홈페이지의 서비스 카테고리를 기준으로 만들었는데, 정리하면서 같이 업데이트해보려고 한다. EC2 : 가상 머신 역할로 Amazon의 가장 중심 서비스이다. S3 : 정적 파일 (사진, 비디오, 문서 등 또는 frontend 코드와 Lambda 함수 코드도 해당) 스토리지 서비스의 솔루션 IAM (.. 2023. 3. 28.
JSON Parsing request와 json 패키지를 사용해서 JSON 데이터를 파싱할 때, 각 키의 데이터를 수정하려면 아래처럼 dictionary 형태로 변환시켜 value를 수정한다.data = {"key1":"value1"} data["key1"] = "value2" 전체 데이터를 스캔하여 특정 값을 가진 키를 찾으려고 한다. 아래 코드로 (for, if로) 전체를 확인하면서 원하는 값을 가진 키를 찾았다.data = { "key1":"value1", "key2":"value2", "key3":"value3", "key4":"value4", "key5":"value5", } for key in data: if "value3" == data[key]: print(key) break 간단한 데이터라면 위 방식으로도 충분.. 2023. 3. 19.
DevOps 로드맵 정리 로드맵을 기준으로 DevOps 분야에 대한 공부 방향성과 현재 지식 수준을 점검해보려고 한다. 기준은 구글에 검색해서 나온 이미지 중 정리가 잘 되었다고 생각한 이미지이다. https://dev.to/ankit01oss/the-complete-devops-roadmap-28n1 The complete DevOps roadmap 🚀 Hi there, This is Ankit, your friendly DevOps content curator. I read a lot of articles about... dev.to 기본적인 내용이나 활용 등 어느정도 알고 있다고 생각한 항목은 내용을 작성했고, 애매하게 알고있다고 생각한 내용은 주황색, 잘 모른다고 생각한 항목은 빨간색으로 강조했다. Learn a Prog.. 2023. 3. 12.
옵시디언과 제텔카스텐 제텔카스텐 (Zettelaksten) 제텔카스텐은 독일어로 메모를 뜻하는 제텔과 상자라는 뜻의 카스텐을 합쳐서 만든 단어로, 독일 빌레펠트 대학 사회학 교수인 니클라스 루만이 개발한 지식 관리 시스템이다. 니클라스 루만 교수는 잘 정리된 제텔카스텐 체계를 활용해 약 30년 간 9만 개의 메모를 작성했고, 350편의 논문과 58권의 책을 집필했다고 한다. 블로그나 노션에 내용을 정리하다보면 카테고리를 분류하기 어려운 경우가 종종 있다. 예를들면 Python과 MongoDB 연동하기, Ubuntu에 Docker 설치하기 등 2가지 이상의 주제가 한 개의 글에 겹칠 때인데 블로그나 노션, 책과 같은 일반적인 글들은 목차와 범주가 있어 트리 구조로 글이 분류되어 있기 때문이다. 하지만 제텔카스텐은 원자화된 메모.. 2023. 3. 5.
FastAPI와 Ajax로 SSH 서버 상태 체크하는 웹 서버 만들기 개요 및 구성 웹 페이지에서 여러 대의 SSH 서버가 연결이 가능한지 여부를 UI로 확인하고 싶어서 만들었다. 구성은 Front, Back, SSH Server로 되어 있고 Front, Back은 Ajax를 사용하여 Json으로 데이터를 주고 받는다. Front는 HTML과 Javascript, jquery-3.6.3.js의 ajax, Back은 FastAPI로 작성해 두었고 서버의 SSH 연결 상태를 확인하기 위해서 paramiko 패키지를 사용한다. 아래는 서버의 1대의 상태를 체크하는 과정을 요약한 그림이다. Front UI는 Server Count에 서버의 대수를 입력하면 아래처럼 해당 수에 맞춰 인터페이스가 추가된다. localStorage를 사용했기 때문에 페이지가 새로 고침되어도 해당 인터페.. 2023. 2. 19.
[Python] requirements.txt로 패키지 설치하기 requirements.txt 파이썬으로 만든 코드에서 필요한 패키지를 쉽게 표현하기 위해 사용된다. 내부는 아래처럼 필요한 패키지들의 이름을 적어준다. pandas==1.3.5 numpy tensorflow tqdm pandas_datareader finance-datareader beautifulsoup4 yfinance pymongo yahoo_fin requests_html flask flask-cors flask_restx pytest == 을 사용하여 필요한 버전을 명시해줄 수도 있다. 패키지 설치 Python에서 패키지를 설치할 땐 pip 명령어를 사용한다. 위의 파일을 사용하여 패키지를 설치하려면 아래 명령어를 사용하면 된다. pip install -r requirements.txt 하지만.. 2023. 1. 12.
FastAPI FastAPI FastAPI는 Python 3.6이상의 API를 빌드하기 위한 빠르고 현대적인 웹 프레임워크이다. 웹 부분을 위한 Starlette와 데이터 부분을 위한 Pydantic 덕분에 NodeJS와 Go에 대등할 정도로 높은 성능을 가지고 있으며, 빠른 코드 작성이 가능하다. 직관적이고 쉬운 코드로 인해 휴먼 에러가 약 40%(내부 개발팀 테스트 기준) 감소했다고 한다. 또한 API에 완전히 호환되는 개방형 표준을 기반으로 하여 Swagger(OpenAPI)와 json Schema를 지원한다. 개인적으로는 Flask와 문법이 비슷하지만 기본적으로 추가된 기능이 많고 Django보다는 자동화(?)는 덜 되었지만 훨씬 가볍고 빠르다는 느낌을 받았다. 자세한 내용은 아래 공식문서를 참고 https:/.. 2023. 1. 12.