반응형

전체 글 397

Q. C언어에서 ->는 어떤 의미일까?

A. C언어에서 공용체union이나 구조체struct의 포인터 변수에서 해당 공용체나 구조체의 멤버 변수에 접근하고 싶을 때 사용한다. 포인터 변수가 가리키는 변수에 값을 할당하는 예 포인터 변수가 가리키는 변수에 값을 할당할 때 아래 예처럼 *포인터변수 형태로 한다. #include int main() { int num; num = 4; printf("%d\n", num); int* numPointer; numPointer = # *numPointer = 5; printf("%d", num); return 0; } 이 경우 *numPointer = 5;를 통해서 num에 5가 저장되게 된다. 출력 결과는 4 5 포인터 변수가 가리키는 공용체나 구조체에 값 할당 그렇다면 공용체나 구조체에서도 같은..

언어 Language/C 2022.11.06

Q. 장고Django에서 외래키ForeignKey 필드의 id를 얻을 때, field.id를 쓰지 말고 field_id를 써야 하는 이유는?

A. 쓸데 없이 데이터베이스에 Select 쿼리를 날리기 때문이다. 간단히 다음과 같은 장고 모델이 있다고 하자. 전체 코드는 DRF_CRUD 예제에서 확인할 수 있다. from django.db import models class Category(models.Model): name = models.CharField(max_length=200) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Beverage(models.Model): name = models.CharField(max_length=200) category = models.ForeignKey(Cat..

Q. 파이썬 타임존 유명 pytz 팩키지의 서울 타임존이 LMT+08:28:00으로 나오는 이유는?

아래처럼 코드를 실행해보면 from pytz import timezone seoul = timezone('Asia/Seoul') seoul 엉뚱한 결과가 나온다. LMT+8:28:00 STD 아니 서울은 시차가 +9시간인데 왜 +8:30도 아니고 +8:28일까? A. 대한제국 이전을 기준으로 한 것이다. 엄청 많이 쓰는 pytz. 공식 파이썬 팩키지 같지만 아니다. 그냥 개인 프로젝트다. pytz 깃허브 들어가보면 생각보다 별 숫자도 적어서 놀라게 된다. 바로 별을 눌렀다! pytz는 Time Zone Database를 사용하고 있다. 여기 사이트 가서 데이터를 받아서 압축을 풀어서 asia를 열어보자. 아래 같은 정보를 확인할 수 있다. # ZoneNAMESTDOFFRULESFORMAT[UNTIL] Z..

Q. MySQL 데이터베이스 쿼리 비용Query Cost를 확인하는 방법은?

A. MySQL Workbench를 활용하면 쿼리 비용을 확인할 수 있다! MySQL Workbench에서 번개에 돋보기가 있는 아이콘을 누르면 쿼리 비용을 숫자로 확인할 수 있다. 바로 아래 이미지 아이콘이다. 예를 들어서 아래와 같은 쿼리문의 비용을 확인해보자. SELECT beverage.name, beverage.price FROM beverage INNER JOIN category ON beverage.category_id = category.id; 번개돋보기 아이콘을 누르면 아래처럼 쿼리 비용 1.10이라고 나타나는 것을 확인할 수 있다. 이번에는 LEFT JOIN 예이다. SELECT beverage.name, beverage.price FROM beverage LEFT JOIN catego..

Q. MySQL 인덱스 타는지 안 타는지 확인하는 방법은?

A. Explain을 활용하면 쉽게 확인할 수 있다. 예를 들어서 아래와 같은 쿼리문이 인덱스를 타는지 궁금하다. SELECT beverage.name, beverage.price FROM beverage LEFT JOIN category ON beverage.category_id = category.id; 이때 SELECT 앞에 EXPLAIN만 붙여두면 확인할 수 있다. 아래 예처럼 말이다. EXPLAIN SELECT beverage.name, beverage.price FROM beverage LEFT JOIN category ON beverage.category_id = category.id; 실제 실행해보면 아래 예처럼 결과가 나온다. Extra에 나온 정보를 보면 Using index를 통해서 ..

Q. 카카오 장애 뒤 티스토리 방문자가 급감했다면?

A. 구글 서치콘솔 연결을 다시 해야합니다! 카카오 장애로 티스토리까지 장애가 있었죠. 방문자가 급감해서 이상해서 구글 서치콘솔 들어가니 제 티스토리 사이트가 없어졌더군요ㅜㅜ 서치 콘솔 들어가니 새로 추가하라고 뜹니다. 뭐지 이상해서 관리자 메뉴 중 플러그인 - 구글 서치콘솔을 누르니 아래처럼 떴습니다. 다시 계정을 연결합니다. 아래처럼 모두 체크 표시를 하고 계속 버튼을 누릅니다. 변경사항 적용까지 눌러줍니다. 다시 서치콘솔 들어가서 확인합니다. 이제 제대로 뜹니다ㅜㅜ 네이버 서치어드바이저에 등록한 티스토리도 사라졌네요. 다시 추가하시기 바랍니다. 빙 웹마스터에도 등록했다면 거기도 확인이 필요할 거 같네요. 관련 글 Q. 티스토리 블로그 구글 검색에 사이트 등록하는 방법은? Q. 티스토리 블로그 네이버..

첫 직장에서 첫 언어, 첫 직군, 첫 프레임워크는 얼마나 중요할까?

개발자한테 첫 직장에서 첫 언어, 첫 직군, 첫 프레임워크는 대학 입시 때 전공 선택만큼 중요하다. 개발자 경력 전체에 영향을 미치기 때문이다. 우연한 선택과 경로의존성 좋아하는 것 또는 하고 싶은 것이 명확한 친구라면 우연이 영향을 덜 미친다. 하지만 별생각이 없다면 우연한 선택이 인생 전체에 영향을 미친다. 이 글을 읽고 있을 여러분들은 한국어가 모국어인 분들일 것이다. 그렇다면 왜 한국어가 모국어인가? 맞다. 우연이다. 우연히 한국에 태어나서 그런 거다. 대부분 사람들은 평생 한국을 벗어나기 어렵다. 한국이 살기 좋아서가 아니라 한국을 떠나면 포기해야 할 기회비용이 크기 때문이다. 대부분 사람들은 우연한 결과에 따라 경로의존적으로 살아간다. 첫 언어 첫 언어는 정말 중요하다. 그 언어를 중심으로 사..

당근마켓 매너온도가 대단한 이유

당근마켓의 매너온도 당근마켓을 쓰면 매너온도라는 게 있다. 첫 온도 36.5도로 시작해서 점점 올라간다. 별 게 아닌 것처럼 보이지만 정말 멋진, 대단한 기능이라고 생각한다. 이 기능 아이디어 낸 직원은 상을 받아 마땅하다. 매너온도가 대단한 이유 1. 사기 피해 감소 중고 거래를 해본 사람들은 알겠지만 중고 거래는 잘 모르는 사람들끼리 이뤄지는 거래다보니 사기가 많다. 사기를 쳐도 잡기도 쉽지 않다. "사람들에게 사기꾼을 조심하세요"라고 말하는 것은 큰 효과가 없다. 별 것 아닌 저 매너온도는 사기 피해를 줄여준다. 어떤 사람이 사기꾼인지 아닌지 파악할 수 있는 아주 중요한 지표가 되기 때문이다. 매너온도가 높은 사람은 거래건수도 많고 구매자의 만족도도 높은 판매자이다. 당연히 사기꾼일 가능성이 낮아진..

셸 스크립트로 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 아무데나로 되어 있는 걸 확인할 수 있다. 아웃바운드는 해당 서버에서 나가는 규칙이다. 보안 설정..

반응형