반응형

개발 Dev 21

GitOps와 AWS ECS 사용 시 베이스 도커 이미지를 활용한 배포 속도 개선 사례

배경 사내에서 DRF로 개발하고 있으며, Github Action과 AWS ECR, ECS를 활용해서 배포를 하고 있다. Github Action에서 배포 실행 버튼을 누르면 아래와 같은 순서로 배포가 진행되었다. 1. 선택한 브랜치의 코드를 바탕으로 도커 이미지 생성해서 ECR로 이미지 업로드 2. 1번에서 업로드한 ECR 이미지로 API 서버, 워커 서버 등 배포 진행 문제 1번이 프로젝트가 커지고 외부 라이브러리나 팩키지 설치가 많아질수록 속도가 오래 걸렸다. 특히 PostGIS를 쓰게 됨에 따라 관련 해서 우분투에 libgdal-dev 팩키지 설치가 필요해졌는데 이 팩키지 설치만 몇 십초 씩 걸려 긴 시간이 소요되었다. 해결 방안 1. requirements.txt를 테스트 관련 팩키지 등을 제외..

Q. 깃허브github에서 깃플로git-flow와 스쿼시와 병합Squash and merge을 함께 쓰면 안 되는 이유는?

A. release 브랜치에서 main 브랜치로 PR(Pull Request) 요청할 때마다 충돌이 발생한다. 스쿼시와 병합Squash and merge이란?여러 커밋을 하나의 커밋으로 밀어넣어서(squash) 병합(merge)해주는 기능이다. 예를 들어서 feature 브랜치에서 develop 브랜치로 PR을 만들었다고 하자. feature 브랜치에서 작업한 커밋이 10개다. 스쿼시와 병합 기능을 쓰면 단 1개의 커밋으로 10개의 커밋이 합쳐져서 develop에 병합된다. 그래서 커밋 이력이 깔끔해진다. 충돌 예시 add hello title, add hello text란 두 커밋을 하고 feature/add_hello 브랜치에서 develop으로 PR을 만든 경우다. Squash and merge한 ..

개발 Dev/깃 Git 2023.10.11

깃모지gitmoji를 표로 한눈에 정리!

깃모지gitmoji란? Carlos Cuesta가 정리한 깃Git용 이모티콘이다. 커밋 메시지 맨 앞에 이모티콘을 사용한다. 아래 예를 보면 📄 Update LICENSE라고 커밋 메시지를 쓴 게 예이다. 깃모지 표 이모티콘 이모티콘 예약어 영어 뜻 한국어 번역 🎨 :art: Improve structure / format of the code. 구조 / 코드 포맷 개선 ⚡️ :zap: Improve performance. 성능 개선 🔥 :fire: Remove code or files. 코드나 파일 제거 🐛 :bug: Fix a bug. 버그 수정 🚑️ :ambulance: Critical hotfix. 긴급한 수정(핫픽스) ✨ :sparkles: Introduce new features. 새로운 기능..

개발 Dev/깃 Git 2023.10.03

Visual Studio Code 원격 개발 기능으로 서버 접속해서 파이썬 파일 실행, 디버깅 하는 방법

Visual Studio Code 설치 https://code.visualstudio.com/ 여기서 내려받을 수 있다. 내려받아서 설치하자. 실행하면 아래와 같은 화면이 나타난다. 네모가 4개 있는 아이콘이 익스텐션 아이콘이다. 그것을 누른 뒤 검색창에 remote를 누르고 Remote Development를 설치하자. SSH 접속 설정 F1키를 누르자. 아래처럼 최상단에 Remote-SSH: Open SSH Configuration File... 을 클릭한다. 기본 값인 가장 맨 위의 /.ssh/config를 누른다. 아래처럼 파일이 생성된다. 입력 내용에 맞게 입력하면 된다. 내 로컬 AI 서버 접속 설정 정보 예는 다음과 같다. private key를 이용해서 접속하는 경우 아래 예처럼 Ident..

파이참 원격 개발 기능으로 서버 접속해서 파이썬 파일 실행과 디버깅 하는 방법

원격 개발Remote Development이 필요한 상황 백엔드 개발의 경우 개발할 때 로컬에서 주로 개발하므로 원격 개발이 그리 많이 필요하지 않다. 하지만 인공지능 개발을 하다보면 원격 개발 기능을 자주 사용하게 된다. 로컬 컴퓨터에 GPU 성능이 좋지 않아 딥러닝 코드를 실행시키는 것조차 어려운 경우가 많기 때문이다. 그래서 본인 노트북에서 고성능 GPU가 달린 컴퓨터로 접속해서 원격 개발하는 경우가 많다. 파이참PyCharm 원격 개발Remote Development 파이참PyCharm을 실행하면 아래와 같은 화면이 나온다. 아쉽지만 원격 개발은 PyCharm Pro만 지원이 된다. Remote Development를 누르고 SSH를 누르자. SSH 접속 화면이다. 접속 방법 로컬 서버 예 같은 ..

Q. git-flow란? git-flow 활용 방법은?

A. git-flow는 Vincent Driessen이 제안한 깃git 브랜치 활용 모델로 많은 기업들에서 활용하고 있다. Vincent Driessen의 블로그 글 A successful Git branching model에 자세한 설명이 나온다. 주 브랜치(the main branches) gitflow의 주 브랜치는 master와 develop 브랜치다. 원문을 살펴보자. The central repo holds two main branches with an infinite lifetime: master develop The master branch at origin should be familiar to every Git user. Parallel to the master branch, anoth..

개발 Dev/깃 Git 2023.07.31

깃허브 커밋 메시지에서 특정 단어로 검색해서 엑셀 파일로 만들기

배경 팀 내에서, 코드 리뷰를 통해서 커밋을 한 경우 리뷰어의 이름을 커밋 메시지에 반드시 적기로 했다. 예를 들면 taptorestart란 사람이 리뷰를 했다면 커밋 메시지에 "taptorestart 리뷰 반영"이라고 적기로 한 것이다. taptorestart의 리뷰가 반영된 커밋수를 확인하려면 어떻게 해야 할까? 해결방법 git log 명령어로 커밋 메시지에 특정 단어가 들어 있는 커밋을 검색할 수 있다. 예를 들어 git log --grep="flask"라고 검색하면 아래처럼 나오는 것을 볼 수 있다. 매번 일일이 이렇게 확인할 수는 없다. 위 검색 결과를 엑셀로 만들고 싶다면? pandas를 활용해서 액셀 파일로 정리해서 만들 수 있다. 작업 코드 예다. import os import shutil..

개발 Dev/깃 Git 2023.06.17

Q. JetBrains의 제품(IntelliJ, WebStorm 등) 개인 라이선스나, 커뮤니티 에디션으로 회사에서 상업용 제품을 개발해도 될까?

A. 가능하다. 문제 없다. 공식 사이트에 답변을 보자. 개인용 라이선스를 회사와 집에서 사용할 수 있나요? 네, 개인용 라이선스는 회사에서도, 집에서도 사용할 수 있습니다. 회사 프로젝트뿐만 아니라 개인 프로젝트에서도 사용할 수 있습니다. JetBrains EULA에서는 이를 제한하지 않습니다. 개인용 라이선스를 상업적 개발 작업에 사용할 수 있나요? 네, 개인용 라이선스를 모든 종류의 개발 작업에서 사용할 수 있습니다. 단, 본인의 개인용 라이선스를 사용해야 하며 다른 이들과 공유하면 안 됩니다. 또한 회사에서 개인용 라이선스를 대신 결제하거나 상환하거나 어떤 방식으로든 자금을 지원하면 안됩니다. 개인용 라이선스를 회사에서 쓰는 것은 괜찮으나, 회사가 개인용 라이선스 자금을 지원하면 안 된다. 이 문..

개발 Dev 2023.02.19

파이참Pycharm에서 장고Django 중지점Breakpoint 찍어서 디버깅하는 방법

파이참Pycharm 같은 IDE를 사용하는 이유는 자동완성과 디버깅의 편의성 때문이다. 간단한 DRF(Django Rest Framework) 예제 코드다. 실행/디버그 구성 등록 디버깅을 위해서는 Run/Debug Configuration 등록이 필수다. 아래 예처럼 추가해준다. 가장 중요한 것은 환경 변수 등록이다. DJANGO_SETTINGS_MODULE=project.settings을 제대로 등록해야 설정을 읽어와서 실행 가능해진다. 중지점Breakpoint 찍기 원하는 곳에 중지점Breakpoint을 찍자. 사실 필요 없는 코드지만 중지점을 찍기 위해서 원래 정의된 create을 그대로 복사붙여넣기 했다. 디버깅 모드로 실행하기 디버깅 모드로 실행하자. 오른쪽 상단 벌레 아이콘이 디버깅 모드 실..

Q. 깃허브Github 위키Wiki를 로컬에서 Git clone해서 수정할 수 있을까?

A. 수정할 수 있다! 위키 페이지를 가서 보면 Clone this wiki locally라고 적혀 있는 것을 볼 수 있다. https://github.com/taptorestart/wiki.wiki.git 네 깃허브 위키 clone을 위한 주소 예다. 잘 보면 taptorestart/wiki.wiki.git이니 계정명/저장소명.wiki.git이란 것을 알 수 있다. 로컬에서 아래 명령어처럼 입력하면 클론이 된다. $ git clone https://github.com/taptorestart/wiki.wiki.git 수정 작업을 한 뒤에 커밋하고 푸시하면 깃허브에도 반영이 된다. PR은 지원되지 않는다. 로컬에서 하면 이미지나 파일 추가도 다른 곳에 올리지 않고 위키 내에 올려서 쉽게 할 수 있다. wi..

개발 Dev/깃 Git 2022.12.23

Q. 외부에서 내 집 서버에 접속할 수 있게 공유기 포트포워드 설정 방법은?

A. 내부 IP 주소, 외부 포트, 내부 포트를 입력하면 된다. ipTIME 공유기 기준으로 설명해보겠다. 보통 공유기마다 약간씩 다르고 거의다 비슷하다. ipTIME 공유기는 기본 IP 주소가 192.168.0.1이다. 브라우저에 192.168.0.1을 입력해서 들어가자. 변경했다면 변경한 기본 IP 주소를 입력하자. 내 서버 IP 주소 확인 우선 내부 네트워크 설정에서 외부 접속이 되도록 열어줄 서버의 IP 주소를 확인해야 한다. 위 A가 내 서버다. 내부 IP주소는 192.168.0.4다. 포트포워드 설정 위 메뉴탐색기 캡쳐화면에 보이듯 포트포워드 설정이 있다. 이걸 누르자. 내 서버의 SSH 접속 포트가 22이라면 내부 포트는 22, 외부 포트는 원하는대로 하면 된다. 외부 포트도 22로 하자. ..

개발 Dev 2022.07.22

도커로 mysql 컨테이너 만들어서 로컬 개발환경을 구축하기

API 서버 등 백엔드 개발을 하게 되면 데이터베이스가 필수다. 당연히 로컬에 mysql을 설치한다. 이때 설치하는 방법은 여러가지다. 그냥 mysql 사이트에 가서 내려받고 설치해도 되고, macOS 사용자라면 brew로 설치하기도 한다. 단일 사용자라면 괜찮지만, 한 컴퓨터를 여러 사람이 쓰거나 서로 다른 용도로 쓸 경우 문제가 발생한다. 도커Docker가 유용한 상황: 멀티 유저 예를 들어 개인 계정은 A, 회사 업무용 계정은 B라고 하자. A 계정에서 mysql을 brew로 설치했다. B 계정에서 brew로 뭔가 추가로 설치하려면 권한 설정 이슈가 빈번하게 발생한다. 또 서로 다른 계정인데도 데이터베이스도 함께 쓰게 된다. 물론 brew를 멀티 유저로서 문제 없게 쓰는 방법도 있지만 좀 번거롭다...

Q. fork한 github 저장소 브랜치들을 하나만 남기고 일괄 삭제하고 싶다면?

A. shell script를 사용한다. 아래 파일을 내려 받는다. fork한 저장소 디렉터리에 복사한다. $ sh ./remove_branches_except_mine.sh 를 실행하면 브랜치가 모두 삭제된다. 위험하니 꼭 테스트 저장소를 만든 뒤에 해보기를 권한다. #!/bin/bash # 남겨둘 브랜치명 예)dev MY_BRANCH="/dev" SUB="remotes/origin/" branches=`git branch -a` for b in $branches do if [[ "$b" == *"$SUB"* ]] && [[ "$b" != *"$MY_BRANCH" ]] && [[ "$b" != *"main"* ]] then echo $b git push origin --delete ${b/${SUB}/..

개발 Dev/깃 Git 2022.04.03

Q. github에 push해서 데이터베이스 계정과 비밀번호가 노출되었다면 어떻게 해야 할까?

A. git reset --hard {commithash} 하고 나서 git push --force origin 하면 된다. 앗! 비밀번호를 그대로 올린 것을 발견했다. git reset --hard b0ce9e5a10c5f93ec619083db05d6dbd3776d261 위 명령어로 b0ce9e5로 시작하는 Create .gitignore로 reset을 한다. 그렇게 하면 Create .gitignore 다음에 커밋한 내용은 사라지게 된다. 그리고 강제로 push를 한다. --force를 붙여야만 된다. git push --force origin 위 명령어를 깃허브 데스크탑 같은 클라이언트 프로그램을 쓰지 않고 터미널에서 하게 된다면 Username for 'https://github.com': tap..

개발 Dev/깃 Git 2022.02.24

따로 만든 슬랙Slack 업무 진행 과정 표시용 이모티콘Emoticons

슬랙을 업무용으로 주로 쓰다보니 업무를 슬랙 메시지에 적을 일이 많다. 그때 간단히 이모티콘으로 업무 진행 상황을 표시하고 싶어서 추가로 만들었다. 슬랙의 라이트, 다크 테마 양쪽에서 모두 잘 보이도록 하얀색 바탕을 넣었다. 구글 매터리얼 아이콘으로 만든 이모티콘 assignment 업무 배정 의미 done 업무 완료 engineering 업무 중 pending actions 업무 중 pending 업무 중 run 업무 중 열심히.. 출처: Google Fonts Icons 한글로 만든 이모티콘 배달의민족 글꼴을 사용했다. 최대한 글자를 크게 했다. 자주 쓰는 댓글 이모티콘 자주 쓰는 댓글을 이모티콘으로 만들었다. 자유롭게 편하게 쓰셔도 된다. 슬랙에 이모티콘 추가하기 이모티콘을 누르고, 이모티콘 추가를..

개발 Dev 2022.01.23

Q. 소프트웨어나 애플리케이션 버전은 어떻게 적어야 할까?

A. 보통 주Major.부Minor.수Patch로 적는다. Major는 크게 바뀔 때, Minor는 새로운 기능 추가, Patch는 버그 수정할 때 하나씩 올린다. 출처: Semantic Versioning유의적 버전 요약 버전을 주.부.수 숫자로 하고: 기존 버전과 호환되지 않게 API가 바뀌면 “주(主) 버전”을 올리고, 기존 버전과 호환되면서 새로운 기능을 추가할 때는 “부(部) 버전”을 올리고, 기존 버전과 호환되면서 버그를 수정한 것이라면 “수(修) 버전”을 올린다. 주.부.수 형식에 정식배포 전 버전이나 빌드 메타데이터를 위한 라벨을 덧붙이는 방법도 있다. 에 위 그림으로 잘 설명해 놓았다. 만화경의 경우 다음과 같이 한다고 한다. Build Environment의 경우는 만화경에서는 debu..

개발 Dev 2021.04.09

좋은 커밋, 좋은 커밋 메시지Git commit message는 어떤 것일까?

깃Git을 쓰고 커밋commit을 할 때 메시지를 적는다. 메시지를 어떻게 적어야 할까? 커밋 메시지는 훌륭한 협업자를 판단하는 기준 "a commit message shows whether a developer is a good collaborator." - Peter Hutterer. (출처: On commit messages) "커밋 메시지는 개발자가 훌륭한 협업자인지 여부를 보여준다." 말로 훌륭한 협업자라고 주장해봤자 의미는 없다. 언제나 말보다 실제가 중요하니까. 결국 커밋 메시지를 잘 적어야 다른 사람들에게 훌륭한 협업자로 인정받을 수 있게 된다. Peter Hutterer의 주장을 좀 더 살펴보자. (출처: On commit messages) A good commit message shou..

개발 Dev/깃 Git 2021.03.11

git에 이미 추가했던 파일을 더 이상 추적하지 않아 저장소에 저장되지 않도록 하면서, 파일은 남겨 두고 싶다면?

git -rm 을 사용하면 된다 예를 들어 app.yaml 파일이 이미 git에 추가된 상태이다. app.yaml 파일을 삭제하지 않고 남겨 두면서 git에서 추적되지 않게 하고 싶다. .gitignore 파일에 뒤늦게 app.yaml을 추가해도 이미 추가했던 파일이면 적용되지 않는다. 1) git -rm app.yaml 이렇게 하면 app.yaml 파일이 삭제된다. 2) git -rm --cached app.yaml 이렇게 하면 app.yaml 파일이 삭제되지 않고 남아 있다. 더 이상 git에서 추적되지 않게 된다. --cached Use this option to unstage and remove paths only from the index. Working tree files, whether mo..

개발 Dev/깃 Git 2021.01.27

애자일 소프트웨어 개발(agile software development)이란?

애자일agile 뜻은? agile은 사전을 찾아보면 '민첩한, 명민한, 기민한, 재빠른'의 뜻을 가진 형용사이다. 영영사전에 나온 뜻은 'moving quickly and lightly'이다. 애자일 소프트웨어 개발이란? 가볍고 빠르게 개발하자는 의미라고 볼 수 있다. 가장 정확한 것은 애자일 소프트웨어 개발 선언문을 봐야 알 수 있다. Manifesto for Agile Software Development We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value: Individuals and interactions over p..

개발 Dev 2021.01.26

어떤 스택stack으로 개발해야 할까 고민될 때 도움이 되는 사이트 stackshare.io

소프트웨어 스택stack이란? 소프트웨어 서비스 개발을 위해 필수적인 소프트웨어 하위 시스템 또는 구성 요소들을 말한다. 예를 들어 웹 애플리케이션 개발을 위해서 설계자는 운영체제, 웹 서버, 데이터베이스, 프로그래밍 언어로 스택을 정의한다. (참고: 위키백과) LAMP니, MEAN이니 하는 것들이 스택이다. LAMP는 리눅스 (운영 체제) 아파치 (웹 서버) MySQL 또는 MariaDB (데이터베이스) 펄, PHP, 또는 파이썬 (스크립트 언어) MEAN 몽고DB (데이터베이스) Express.js (앱 컨트롤러 서버) AngularJS (웹 앱 애플리케이션) Node.js (웹 서버) 다른 회사 스택stack은 어떻게 되어 있을까? stackshare.io에 가면 볼 수 있다. 호갱노노 예 모바일 ..

개발 Dev 2020.10.12
반응형