다시 시작 Tap to restart 386

셸 스크립트로 MySQL 데이터베이스 원격에서 로컬 데이터베이스로 복사하기

백엔드 개발을 하다보면 QA용 테스트 데이터베이스를 내 컴퓨터 로컬 데이터베이스로 복사를 자주하게 된다. DBeaver, Workbench 등 데이터베이스 클라이언트 프로그램을 이용해도 되지만 번거롭다. 매번 복사할 데이터베이스를 선택하고, export 누르고, 다시 로컬 데이터베이스에 접속해서 import 누르는 과정을 진행하는데도 시간이 꽤 걸린다. 자칫 잘못하면 로컬 데이터베이스를 QA 테스트 데이터베이스로 거꾸로 복사할 수도 있으니 집중해야 해서 더 피곤하다. 그래서 셸 스크립트로 만들었다. #!/bin/bash # 원격 데이터베이스 MYSQL_HOST="" MYSQL_USER="" MYSQL_PASSWORD="" # 로컬 데이터베이스 MYSQL_HOST_LOCAL="127.0.0.1" MYSQL..

Q. 장고에 gunicorn을 같이 써야 하는 이유는?

A. CPU가 여러개인 환경에서는 훨씬 빠르기 때문이다. 그밖에 HTTPS 적용 등 다양한 기능을 활용할 수 있다. 먼저 이 글 Q. NGINX, gunicorn없이 Django장고만 실행 가능할까? 을 참고해서 gunicorn 없이 테스트를 진행하자. gunicorn 설치하고 실행하기 아래 명령어를 참고해서 gunicorn을 설치하고 실행하자. $ pip install gunicorn $ sudo GUNICORN_CMD_ARGS="--bind=0.0.0.0:80 --workers=3" ./venv/bin/gunicorn config.wsgi:application 설정 설명을 보면 추천 worker수는 CPU core수의 2~4배다. Worker Processes workers Command line: ..

Q. NGINX, gunicorn없이 Django장고만 실행 가능할까?

A. 보통은 Nginx - gunicorn - Django로 구성한다. 보통 권장되지 않지만 Django장고만 실행할 수도 있다. 로컬에서 테스트할 때처럼 하면 되고 차이점은 서버 실행 명령어다. 실행 방법 직접 해보면 잘 된다. 장고 실행하기 우선 EC2에 장고를 설치하고 실행해보자. django_minimal을 참고하자. 아래 실행 환경은 EC2 Ubuntu 20.04(t2.micro)다. EC2에 접속해서 아래처럼 진행하면 된다. $ sudo apt update $ sudo apt install python3.8-venv $ mkdir django_minimal $ cd django_minimal$ $ python3 -m venv venv $ source ./venv/bin/activate $ pi..

Q. AWS EC2에 설치한 MongoDB를 하루에 한번씩 백업해서 S3에 저장하는 방법은?

A. MongoDB 백업 코드를 작성하고, crontab에 추가해서 날마다 특정시간에 해당 코드가 EC2에서 실행하도록 하면 된다. 아래 글 3개를 차례대로 학습하면 쉽게 구현할 수 있다! Q. MongoDB 데이터베이스 백업Dump과 복원Restore 하는 방법은? Q. Python으로 AWS S3에서 파일 업로드 다운로드 하는 방법은? Q. cron이란? ubuntu에서 crontab 사용법은? S3 버킷 만들기 먼저 S3 버킷을 하나 만든다. 이름은 전세계에서 겹치면 안 되므로, 계정을 붙이든 겹치지 않도록 만들면 된다. 내 경우 taptorestart-mongodb-backup이라고 만들었다. ec2에 접속 mongodb가 설치된 ec2에 접속한다. 또는 다른 ec2에 접속해도 작동한다. 내 경우..

Q. cron이란? ubuntu에서 crontab 사용법은?

A. 우분투 문서에 나온 cron 설명을 번역하면 cron은 "백그라운드에서 지정된 시간에 원하는 작업을 실행하기 위해 사용되는 시스템 데몬"을 뜻한다. "Cron is a system daemon used to execute desired tasks (in the background) at designated times." (출처: CronHowto - Ubuntu documentaion) 언제 사용하는가? 크론은 백그라운드에서 특정 시간에 반복 작업이 필요할 때 쓴다. 예를 들어서 서비스를 운영할 때 일별, 월별로 데이터를 집계해서 데이터베이스에 저장할 필요가 있다. 이때 크론을 쓸 수 있다. 한국 시간 기준 서비스를 운영한다면, 새벽 1시에 전날 데이터를 집계하는 식이다. 또는 간단한 날씨앱 같은 ..

클라우드를 사용한다면 반드시 해야할 일은? MFA! 2차인증 설정하기!

반드시 Mulfi-factor authentication을 해야 한다. 번역하면 다중 요소 인증이다. 간단히 말하면 로그인 + 알파로 OTP든 문자든 2가지 이상으로 인증하는 것을 말한다. 왜 필요한가? 해킹 당해서 해커가 당신의 계정으로 ec2 인스턴스를 막 생성해서 돌리기 시작하면 엄청난 금액이 과금된다. 순식간에 백만원 천만원이 과금될 수 있다. AWS AWS security_credential에 가서 Activate MFA를 하면 된다. 미리 구글 OTP를 전화기에 설치하자. 안드로이드 Playstore나 애플 앱스토어에서 검색해서 앱을 받자. 주의사항은 전화기를 잃어버리면 AWS 접속 불가 상태가 될 수 있다. 전화기를 잃어버리지 않고 초기화해도 마찬가지다. AWS에 전화해서 본인임을 입증해야 ..

클라우드 Cloud 2022.08.05

Q. Python으로 AWS S3에서 파일 업로드 다운로드 하는 방법은?

A. S3 버킷 추가 → S3 업로드 다운로드 권한을 가진 그룹 추가 → S3 사용자 추가해서 Access key ID, Secret access key 얻기 → 업로드 구현 → 다운로드 구현 순으로 진행해보면 된다. S3 버킷 생성하기 먼저 버킷을 생성하자. 버킷 생성하기로 가자. 버킷 이름은 전세계에서 유일해야 한다. 회사이름이나 본인 이름을 접두사로 하거나 본인 도메인을 접두사로 하면 중복을 피할 수 있다. 테스트를 위한 것이니 내 경우 'taptorestart-test-s3'라고 만들었다. S3 업로드 다운로드 권한을 가진 그룹과 사용자 추가하기 우선 그룹을 추가한다. 그룹 명은 S3FullAccess Create group을 눌러서 그룹을 추가한다. 이번에는 사용자를 추가한다. Set permi..

Q. MongoDB 데이터베이스 백업Dump과 복원Restore 하는 방법은?

A. mongodump와 mongorestore 명령어를 활용하면 된다. EC2에 아래 글을 참고해서 우선 MongoDB를 설치하자. 참고할 글: Q. AWS EC2에 MongoDB 설치하고 외부 접속 가능하게 만드는 방법은? 테스트 데이터 입력하기 MongoDB Compass로 접속해서 아래처럼 test란 데이터베이스를 만들고 collection이란 collection을 만들어서 아무 데이터나 하나 넣었다. mongodump 어드민으로 사용자를 추가한 경우 --authenticationDatabase="admin" 를 추가해줘야 한다. mongodump --host="3.35.154.100:27017" --username="taptorestart" --password="password" --db="te..

당신이 긍정적으로 살아야 하는 현실적인 이유는?

긍정적인 사람이 더 잘 번다. 정말이다.무슨 말이냐고 할 수 있다. 긍정적으로 생각하는 것과 수입이 무슨 관계가 있냐고 생각할 수도 있다.여기 긍정적인 사람과 부정적인 사람이 있다.두 사람이 연봉 협상에 임한다. 어떻게 대응할까.긍정적인 사람은 낙관적이니 이직시 연봉을 높게 부를 가능성이 크다. 부정적인 사람은 자신을 낮게 평가하며 일단 자신 정도 실력을 가진 사람의 평균치나 그 이하를 부르고 시작할 가능성이 크다.긍정적인 사람은 높게 불렀으니 좀 깎이더라도 본인 실력으로 받을 수 있는 상한선에 근접한 연봉을 받게 되고, 부정적인 사람은 처음부터 평균 또는 그 이하를 불렀으니 자신의 실력으로 받을 수 있는 하한선에 근접한 연봉을 받게 된다.여기서 끝이 아니라 부정적일 경우 자신의 선택에 따른 결과인데 부..

Q. 유명 개발자들은 파이썬 테스트 코드를 어떻게 작성할까?

A. 사례를 찾아보면 진짜 생각보다 간단하게 짠다. 테스트 코드 작성 어렵다. 작성하면서도 이게 과연 올바른가 의심될 때가 있다. 이럴 때는 유명 개발자들은 어떻게 하는지 찾아보는 것만으로도 큰 도움이 된다. 게다가 개발 바닥은 쉽게 찾을 수 있으니! 구글 구글부터 살펴보자. github에서 구글로 들어가서, 언어는 파이썬, 정렬은 별개수로 하자. 목록 상단에 있는 google / jax를 골랐다. 여기 들어가니 tests 디렉터리가 있다! 여러 테스트 파일 중 core_test.py를 보자. tree_flatten이란 함수를 테스트하는 코드는 아래가 다다. 값은 직접 입력했고, 입력한 값은 아주 간단한 것을 볼 수 있다. 10개가 아니라 1개다. def test_tree_flatten(self): fl..

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

Q. AWS EC2에 외부 접속 가능하게 하려면?

A. AWS EC2 inbound rules와 우분투라면 서버 방화벽 설정을 동시에 해줘야 한다. Inbound rules란? 인바운드, 가상 서버로 들어오는 규칙을 뜻한다. 생성한 EC2의 Security 탭을 누르면 아래와 같은 정보가 나타난다. 인바운드 규칙은 포트는 22번 프로토콜은 TCP만 소스는 0.0.0.0/0이니 아무데나 열어놓은 거다. 현재는 아무 ip주소에서 .pem파일만 있으면 22번 포트로 ssh 접속이 가능한 상태인 거다. Security groups 밑의 파란색 글씨를 누르면 보안 설정을 변경할 수 있다. 아웃바운드 규칙은 포트는 All, 프로토콜도 ALL, 대상도 0.0.0.0/0 아무데나로 되어 있는 걸 확인할 수 있다. 아웃바운드는 해당 서버에서 나가는 규칙이다. 보안 설정..

Q. AWS EC2에 Elastic IP 연결하는 방법은?

Elastic IP는 무엇인가? 고정 IP라고 생각하면 된다. Elastic IP는 왜 연결해야 하는가? 연결하지 않으면 IP주소가 변경될 수 있기 때문이다. 웹서버라면? 어느날 갑자기 IP 주소가 바뀌어서 접속이 안 되는 상황이 발생할 수 있다. Elastic IP 연결하기 연결방법은 어렵지 않다. 우선 EC2를 만들어야 한다. 이전 글 Q. AWS EC2란? EC2 만들고 .pem 파일로 접속하는 방법은?을 참고하자. EC2 Dashboard 대시보드를 보면 Elastic IPs가 보인다. 그걸 누르자. Allocate Elastic IP address란 버튼이 보인다. 그걸 누른다. Allocate을 누른다! 이제 할당 받았다. 할당 받으면 아래처럼 된다. 해당 주소가 Public IP주소다. 위에..

Q. AWS EC2에 MongoDB 설치하고 외부 접속 가능하게 만드는 방법은?

EC2에 MongoDB를 설치해보자. NoSQL로 유명한 MongoDB 연습삼아 무료로 쓰고 싶다면 일단 t2.micro EC2에 설치해서 써볼 수 있다. 사전 작업 아래 글을 보고 그대로 따라하자. 접속까지는 성공해야 한다. Q. AWS EC2란? EC2 만들고 .pem 파일로 접속하는 방법은? MongoDB 설치 잘 나온 튜토리얼이 있다. Install MongoDB Community Edition 일단 접속한 상태에서 아래 순서대로 실행하자. Ubuntu20.04 기준으로 다른 버전의 경우에는 위 튜토리얼을 보고 참고하자. $ wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add - $ echo "deb [ a..

Q. AWS EC2란? EC2 만들고 .pem 파일로 접속하는 방법은?

EC2란? 보통 가상서버라고 부르는 그거다. 전체 명칭은 Elastic Compute Cloud이다. Elastic Compute Cloud를 줄여서 ECC -> C가 2개라서 EC2가 된 거 같다. 서울 리전에 인스턴스를 추가하자 서울 리전 EC2 홈으로 가자. instances를 누른다. ec2 인스턴스 새로 추가 launch instances를 누른다. name에 원하는대로 입력한다. 우분투로 설치할 거라 ubuntu-server로 입력했다. free-tier라고 적혀 있는 걸 고르자. 우분투 20.04 LTS를 골랐다. LTS는 Long Term Service의 줄임말이다. LTS가 붙어 있으면 길게 보안 업데이트 등을 해준다. 기존 security group이 없다면 Create security..

Q. 장고 ORM에서 OneToOneField와 ForeignKey에 unique=True를 한 경우 서로 어떤 차이가 있을까?

A. 데이터베이스 상으로는 차이가 없다. 예제 코드는 DRF CRUD 예제 프로젝트를 활용했다. 데이터베이스 설정만 MySQL로 변경했다. 변경한 예는 아래와 같다. DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'test', 'USER': 'root', 'PASSWORD': 'password', 'HOST': '127.0.0.1', 'PORT': '3306', } } 환경은 장고는 3.2.12 파이썬은 3.8 버전이다. ForeignKey 그냥 ForeignKey 모델이다. from django.db import models class Category(models.Model): name = models.CharField..

Q. Python에서 for문을 돌면서 실행하는 코드를 한 줄로 작성할 수 있을까?

A. 가능하다. 변수에 저장하지 않는 코드라면. 이렇게 두 줄인 코드를 for num in range(10): print(num) 아래처럼 한 줄로 적을 수 있다. [print(n) for n in range(10)] 딱히 리스트를 만들 것은 아니지만 [ ]로 감싸주면 실행가능하다! [ ]를 없애면? 당연히 구문syntax 에러가 난다. 함수를 선언해서 할 수도 있다. 아래처럼 하는 것도 가능하다. def print_num(num): print(num) [print_num(n) for n in range(10)] 변수에 할당하는 건 안 된다. 구문 에러가 발생한다. 아래처럼 하고 싶을 수도 있지만 안 된다. sum = 0 [sum += n for n in range(10)] 뭔가 할당하고 저장하기만 하고..

아마존웹서비스AWS와 구글 클라우드Google Cloud 무료 프로그램 비교

아마존웹서비스의 점유율이 높은 건 바로 이 무료 프로그램 덕분인 거 같다. 2022년 7월 3일 기준 아마존웹서비스 프리 티어 전체 보기 자세히 봐야 한다. 언제나 무료가 있고 12개월 무료가 있다. 가장 많이 쓰는 EC2, S3, RDS의 경우 12개월 무료다. EC2 750시간 하루 24시간 * 31일 = 744시간이므로 EC2 하나는 12개월동안 무료로 쓸 수 있다. 12개월 지나자마자 돈이 나가기 시작한다. 계정 만든 날을 꼭 일정관리에 포함시켜 놓을 것! 구글 클라우드는 300$ 90일 무료 체험이다. 구글 클라우드 무료 프로그램 소개 페이지 무료 프로그램 기준 AWS가 훨씬 좋았다. 일단 1년이나 무료로 테스트할 수 있으니. 구글 클라우드 경우 90일은 금방 다가고 300$ 다 쓰기 쉽지 않았..

클라우드 Cloud 2022.07.03