다시 시작 Tap to restart 384

Q. 크롬브라우저에서 사전 등 좀 더 검색을 쉽게 하는 방법은?

A. 브라우저 검색 사이트에 등록하면 좀 더 쉽게 검색할 수 있습니다. 크롬 설정Settings > 검색 엔진Search engine으로 들어갑니다. 거기 보면 Site search가 있습니다. 다음 사전 추가해보기 다음 사전으로 가서 단어를 검색합니다. algorithm을 검색해봤습니다. 주소가 아래처럼 됩니다. https://dic.daum.net/search.do?q=algorithm https://dic.daum.net/search.do?q=단어란 것을 확인 할 수 있습니다! Site search 옆에 Add를 누릅니다. 아래처럼 입력합니다. 그리고 Add를 누릅니다. 검색 창에서 Shortcut으로 등록한 dict까지 입력하고 탭 키를 누릅니다. 그 뒤에 찾을 단어를 입력하면 바로 다음 사전으로..

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

인공지능 관점으로 수학능력시험을 바라본다면?

인공지능에서 딥러닝의 경우 사람 뇌의 작동원리, 신경망을 본땄다. 이름도 인공신경망이다. 인공지능 관점으로 수학능력시험, 수능을 바라본다면 어떨까? 지능과 수학능력, 튜링 테스트와 수학능력시험 지능을 정의하기는 어렵다. 인간이 갖고 있는 지능을 설명하기도 어렵다. 다른 사람들이 지능을 정의하기 위해서 노력하고 있을 때, 앨런 튜링은 다른 방법을 제시했다. 튜링이 제시한 방법은 튜링 테스트다. The Turing test, originally called the imitation game by Alan Turing in 1950, is a test of a machine's ability to exhibit intelligent behaviour equivalent to, or indistinguishab..

어떤 개발자가 되어야 할까? 개발을 잘 하는 개발자가 되어야 한다!

당연한 이야기 맞다. 당연한 소리다. 하지만 가끔 우리는 당연한 것을 본질을 잊고 지낼 때가 많다. 다른 무수한 장점이 있다고 해도 개발자가 개발을 잘 못한다면, 개발 생산성이 떨어진다면 개발자로서 인정받을 수 없다. 스포츠 선수들을 보면 여러 유형의 선수가 있다. 야구를 예로 들면 1. 무뚝뚝하지만 타자로서 타율, OPS(출루율+장타율) 등 주요 지표가 최상위인 선수. 2. 타율 평균. 후배들을 잘 챙기는 리더십이 좋은 선수. 3. 타율 평균에 팀내 분위기 메이커인 선수. 등 선수가 있다. 어떤 선수가 팬, 감독, 다른 선수들한테 가장 인정받을 것인가? 당연히 1번이다. 자 여기 아래처럼 개발자가 있다. 개발 생산성 평균을 3이라고 하자. 1. 성격이 엄청 좋아 주변을 잘 챙기는 개발자. 개발 생산성 ..

HTML을 Markdown으로 바꿔주는 파이썬 팩키지 만들기

HTML을 Markdown으로 바꿀 필요가 생겨서 관련 파이썬 팩키지를 찾아봤다. 찾아보니 몇개 있긴 했지만 수준이 그리 높지 않기도 했고, 간단한 거니 연습삼아 따로 하나 만들어보자는 생각으로 만들었다. 팩키지명은 htmltomd다. pypi 주소는 여기! https://pypi.org/project/htmltomd/ 아래처럼 실행하면 import htmltomd html = """ htmltomd htmltomd is a simple package for converting HTML to Markdown. Getting Started pip install htmltomd Source code github.com/taptorestart/htmltomd Image """ result = htmltomd...

왜 꽤 큰 스타트업 개발팀에서는 코드 리뷰를 할까?

다음 중 코드 리뷰를 하는 이유에 해당하는 것을 모두 고른다면? ① 오류를 줄이기 위해서 ② 개발 속도를 높이기 위해서 ③ 팀원의 성장을 돕기 위해서 ① ② 이유가 크다. ③을 가장 최우선 목적에 두고 코드 리뷰를 하지는 않는다. 부수적 효과에 가깝다. ① 오류를 줄이기 위해서 이 이유가 가장 크다. 꽤 큰 스타트업이라면 이미 사용자가 많다. 아주 사소한 실수로 서비스 장애가 발생할 수도 있다. 이 장애로 인한 손실도 크다. 시간이 들더라도 당연히 미리 점검하는 게 더 이익이다. 코드 리뷰를 통해서 주로 장애 발생 가능성을 살펴보게 된다. 그래서 코드 리뷰 시 단골 사항이 데이터베이스 부하 관련, 메모리 부하 관련, 예외 처리 등이 된다. ② 개발의 속도를 높이기 위해서 단기적으로 코드 리뷰를 하면 개발..

반가산기half adder 회로도 이해하기

반가산기의 회로도 반가산기의 회로도를 보면 아래와 같다. A와 B 값이 입력되면 S와 C값이 출력된다. S는 합Sum, C는 올림수Carry를 뜻한다. 이진수 한자리수 덧셈 컴퓨터는 기본적으로 이진수로 이루어져 있으니 간단한 덧셈을 해보자. 이진수 덧셈을 해보면 아래와 같다. A+B A B 0 0 0 1 0 1 1 1 0 10 1 1 A+B가 S이면 좋겠지만 S는 오직 1과 0만 표현할 수 있다. 그래서 C가 따로 필요하다. 위 A+B를 나눠서 표현해보자. 아래처럼 나눠서 표현할 수 있다. A+B C올림수 S합 00 0 0 01 0 1 01 0 1 10 1 0 C올림수 C올림수의 결과를 다시 A와 B만 가지고 살펴보자. C A B 0 0 0 0 0 1 0 1 0 1 1 1 A와 B가 모두 1일 때만 1이..

Q. 깃허브Github로 나만의 공짜 위키Wiki 만드는 방법은?

A. 공개 저장소를 하나 만들고 위키를 사용하면 됩니다! 위키 검색도 가능합니다! 위키 저장소 만들기 우선 새 저장소를 하나 만들어요. Repository name에 wiki 또는 원하시는대로, Public으로 만들면 됩니다. 무료 계정의 경우 비공개 저장소는 위키를 사용할 수 없습니다. Public으로 하세요. 위키 활성화 Settings를 눌러서 위키를 활성화합니다. 위키 메뉴가 나타납니다. 위키를 눌러서 위키 문법대로 글을 작성하면 됩니다! 위키 페이지 검색 Pages를 보면 Find a page.. 라고 나옵니다. 페이지명 기준 검색입니다. 내용 자체는 검색이 안 됩니다. 위키 안의 콘텐츠 검색 내 깃허브 위키에 작성한 콘텐츠를 검색하고 싶다면 어떻게 해야 할까요? 왼쪽 위에 검색창이 있습니다. ..

Python requests와 pytest로 REST API 서버 테스트하기

자바스크립트 기반인 frisby.js로 REST API 서버 테스트를 할 수도 있지만, 파이썬이 익숙하다면 requests로도 쉽게 구현할 수 있다. 준비: API 서버 실행 우선 FastAPI 예제를 실행한다. 예제코드는 FastAPI - Email Login with Password.. 여기 있다. localhost:8000/docs로 접속했을 때 아래처럼 뜬다면 정상 작동하고 있는 것이다. API 테스트 코드 작성 위에 브라우저로 확인한 것을 그냥 코드로 아래처럼 작성해서 확인할 수도 있다. import requests def test_get_docs(): endpoint = "http://localhost:8000/docs/" response = requests.get(endpoint) asser..

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를 통해서 ..

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

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

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

당근마켓의 매너온도 당근마켓을 쓰면 매너온도라는 게 있다. 첫 온도 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: ..