목록전체 글 (245)
오늘도 한 뼘 더

DevOps 포지션으로 면접을 볼 기회가 생겨 면접을 봤다. 아직은 경험을 많이 쌓아야 하지만 그래도 면접을 지속적으로 보면 내 현재 값을 파악할 수 있다고 해서 기회가 생기면 보려고 하고 있다. # 면접 내용 처음 면접에 대한 설명을 들었을 때 다대일임을 들었고 3대 1 정도로 생각했는데 4대 1이어서 조금 놀랬다. 먼저 자기소개를 진행했다. 면접을 보면 자기소개는 무조건 일단 하고 보는 것 같다. 면접 때 받았던 질문을 끝나고 생각나는 대로 복기해보았다. 순서가 뒤죽박죽이다... ## 면접 질문 회사에서 팀 구성이 어떻게 되어 있는지 DevOps직무는 어떻게 선택하게 되었는지 - 이 직무를 계속하고 싶은 이유 - DevOps는 어떤 직무라고 생각하는지 배포 프로세스에 대한 설명을 해줄 수 있는지 - ..

# 배경 Deployment.yaml파일에 환경변수를 작성하는데 해당 환경변수가 코드에 노출이 되는 것을 보호하고 싶다. # Secret.yaml 환경변수 등을 보호하기 위해서 쿠버네티스에서 secret.yaml을 제공한다. [예시] my-secret.yaml apiVersion: v1 kind: Secret metadata: name: my-secret type: Opaque stringData: JWT_SECRET: 100000223456908359043 TAGGING_DB_PASSWORD: password12345 TZ: Asia/Seoul 해당 파일을 사용하고자 하는 cluster에 접근하여 배포한다. kubectl apply -f my-secret.yaml # Deployment.yaml에 se..

# 배경 Jenkins 에서 dev와 staging 두개의 배포 구성이 같으나 staging은 배포가 되고 dev는 배포가 되지 않는 문제를 발견했다. # 문제 발생 이후 테스트 시도 방법 staging배포용 jenkins job에서 dev를 배포 배포 성공 dev에서 staging배포 배포 실패 새로운 jenkins job을 staging을 복사해서 생성 배포 성공 기존의 dev jenkins job을 삭제하고 새로운 jenkins job의 이름을 변경하여 배포 배포 실패 # 문제 원인 테스트 시도 방법을 통해서 workspace 문제라는 것을 추측할 수 있었다. 배포에 실패한 workspace과 성공한 workspace의 package-lock.json에 에러가 발생한 eslint를 검색하니 서로 내..

# 배경 민감한 정보의 경우 암호화를 해서 저장을 해야 하는데 암호화를 하는 코드를 작성해보도록 하자 # AES 암호화 AES는 Advanced Encryption Standard의 약자로 고급 암호화 표준이라는 의미이다. 암호화 블록의 크기가 128bit이고 암호화 키의 길이가 128, 192, 256 bit인 세 종류로 나뉜다. ## 암호화 코드 func Encrypt(key, text string) (string, error) { plainText := []byte(text) block, err := aes.NewCipher([]byte(key)) if err != nil { return "", nil } cipherText := make([]byte, aes.BlockSize+len(plainTe..

# 칼럼 하나 수정 > UPDATE {테이블명} SET update_at=now() where id={ID값}; # 다중 칼럼 수정 > UPDATE {테이블명} SET update_at=now(), deleted_at=now() where id={ID값};

# 현재 시간 now() : 날짜와 시간 같이 표기 curdate() : 날짜만 표기 # update 쿼리 예시 > UPDATE {테이블명} SET updated_at=now() where id={ID}

# 배경 Jenkins 버전을 업그레이드하는 중간에 다음과 같은 에러가 발생하였다. Please update your scripts to use /usr/bin/tini going forward. The previous path has been preserved for backwards compatibility # 해결 방법 처음에 저 폴더에 무언가를 변경해줘야 하는 건지 해서 계속 저 폴더를 찾아봤는데 script의 내용을 변경해야 했다. 변경 전 FROM jenkins/jenkins:2.332.1 USER root . . . RUN apt-get -y install docker-ce docker-ce-cli containerd.io ENTRYPOINT ["/sbin/tini", "--", "/usr/..

# 배경 AWS ECR에 이미지를 올릴 때 계속 구성에 들어가서 이미지 태그를 바꿨는데 이를 파라미터 값으로 받아서 자동화하고 싶다. # Parameter로 값 받기 String Parameter를 매개변수로 추가하여서 받을 수 있도록 한다. # Pipeline에 적용하기 파라미터 값을 적용할 때 파라미터 값이 들어갈 부분을 큰따옴표(")로 감싸주는 것이 포인트다! node { parameters { string(name: 'TAG', defaultValue: 'latest', description: 'tag') } stage('Build image') { app = docker.build(":${params.TAG}") sh 'docker image prune -f' } }

# 배경 VPC 설정을 하다가 갑자기 배포된 VPC의 모든 리소스에 대한 접근이 막힌 상황이 발생하였다. 원인과 해결방법을 모두 기록하자. # 원인 VPC에 대한 리소스를 외부에서 네트워크로 접근을 하고자 하면 이에 대한 설정이 필요하다. 인터넷 게이트웨이가 연결되어있지 않으면 VPC안의 리소스들이 배포가 되어도 접근이 되지 않는다. # 해결방법 AWS VPC > 라우팅 테이블 퍼블릭 라우팅 테이블을 선택하여 라우팅 편집을 클릭한다. 어디서든 허용을 한다는 "0.0.0.0/0"에 대하여 인터넷 게이트웨이를 선택하여 넣어준다. (연결하고자 하는 VPC 선택)

# 배경 $ curl -X GET {registry_url}/v2/_cataglog Docker Registry에 올라간 이미지를 삭제해야 하는데 이미지 조회가 되지 않고 301 에러가 발생 # 원인 및 해결 방법 Registry를 조회할 때 https로는 조회가 되지 않는 문제이다. url이 https로 리다이렉트 되는 설정을 해제하거나 로컬 주소에서 5000번 포트로 보는 방법이 있다. $ curl -X GET localhost:5000/v2/_catalog