전체 글 386

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

왕초보를 위한 구글 스프레드시트 사용법 무료 온라인책

초보자를 위한 구글 스프레드시트 Google Spreadsheet 사용법을 위키독스에 작성 중입니다. 여기 Restart! 구글 스프레드시트에서 무료로 볼 수 있습니다. 대상스프레드시트에 대해서 아무 것도 모르는 분, 스프레드시트가 어려워서 포기했던 분들을 위한 책입니다. 내용정말 기초적인 부분부터 다룹니다. 이 책을 보고 그대로 따라하다보면 어느새 실력이 늘어서 책을 읽기 전과 다른 사람이 되어 있을 것입니다. 읽기 순서순서대로 읽지 않으셔도 좋습니다. 필요한 부분만 찾아서 보셔도 됩니다. 학습 방법먼저 따라 해보시고 친구들, 가족들, 직장 동료들에게 가르쳐 주세요. 주변 사람들한테 설명하고 가르친 내용은 잊혀지지 않습니다. 여러분들 뇌에 깊이 새겨질 것입니다.

입사 지원 등 중요한 용도로 쓰는 이메일 주소 관리의 중요성

이메일의 중요성전화, 문자 등 다양한 연락 매체가 있지만 여전히 이메일은 중요하다. 이메일은 글이라 공식적인 기록이 남기 때문이다. 보통 오퍼레터Offer Letter라고 부르는 입사 제안도 당연히 메일로 온다. 메일로 연락을 주면서, 메일을 확인하라고 문자로도 연락을 주면 좋겠지만 문자 연락은 없이 메일로만 보내주는 경우가 많다. 메일 확인을 못한다면?기회가 날라간다. 내 경우 메일 확인을 못해서 서류 합격하고도 코딩 테스트를 못 봤다. 아쉽지만 할 수 없다. 입사 제안 메일도 이틀 지나서야 확인했다. 메일이나 연락이 올 때가 된 거 같은데 하고 메일함을 뒤지다가 겨우 확인했다. 인사팀 담당자도 메일 혹시 못 받았냐고 연락을 주셨다. 천만다행이었다. 원인은?여러 메일링 리스트에 등록하고 링크드인 같은 ..

회사 생활에서 낙인烙印과 스탬프Stamp

낙인낙인烙印. 쇠붙이를 불로 달구어 찍는 도장을 낙인이라고 한다. 소나 돼지 같은 가축에 주로 찍고 과거 큰 범죄를 저지른 사람한테 찍기도 했다. 당연히 현대 사회에서 사람한테 직접 도장을 찍지는 않는다. '너 찍혔어', '나 찍혔나봐'흔히 말하는 찍혔다는 표현이 바로 낙인이다. 학창 생활 때 주변 친구들이든 본인이든 듣게 되는 말, "너 선생님한테 찍힌 거 같아"처럼 말이다. 선생님이 '문제 학생', '떠드는 학생' 등이라고 도장을 찍은 상황일 때 쓰게 된다. 낙인과 브랜드, 강화 효과나이키 등 유명 브랜드 옷은 로고가 크게 박혀 있어 멀리서도 잘 보인다. 낙인도 비슷하다. 선생님은 멀리서 보기만 해도 바로 '문제 학생'을 떠올리고 A와 B가 같은 행동을 해도 반응이 다르다. 같은 행동을 했는데 공부 ..

큰 개발 조직에서 경험과 시도

큰 개발 조직 백엔드만 10명이 넘고, 프런트, 앱(안드로이드, iOS) 개발자, DBA, 데이터 관련 개발자, 시스템 엔지니어, QA 등까지 합치면 50명이 넘는 큰 개발 조직에서 백엔드 개발자로 1년 좀 넘게 일했다. 내가 일했던 곳 중 가장 큰 개발 조직을 갖고 있는 기업에서 퇴사하게 되어 이곳에서 경험과 시도를 적어본다. 경험 분업과 깊이 조직이 크니 당연하겠지만 각자 전문 분야가 있고, 그 해당 업무만 담당한다. 예를 들면 내 경우 백엔드 개발자로서 주로 서비스에 필요한 데이터베이스 테이블 모델을 설계하고 API를 개발하고 운영 이슈 등을 처리했다. 데이터베이스와 API 개발에 대해서 이전보다 깊이 있게 살펴볼 수 있었다. 일일 활성 사용자Daily Active Users(DAU)가 많은 서비스..

컴퓨터공학 비전공자라면 방송통신대학교 편입학 추천!

소프트웨어 개발 분야는 비전공자가 많다국비 지원 학원에서 배워서 취업하는 경우도 많고, 요즘에는 부트캠프라고도 불리는 유료 학원에서 3~6개월 배워서 취업하는 경우도 많다. 다른 공학과 달리 값비싼 실험 도구 없이 컴퓨터만 있으면 실습 및 학습이 가능하기 때문이다. 분야에 따라 기간이 다르지만, 리액트, 안드로이드, iOS 개발 등 특정 프레임워크만 배운다면 6개월 정도면 어느 정도 익숙해져서 현업에서 일할 수 있다. 비전공자란 꼬리표소프트웨어 개발 분야는 워낙 비전공자가 많고 비전공자지만 실력이 뛰어난 사람이 많기 때문에 비전공자란 이유로 차별이 많지는 않다. 하지만 괜한 자격지심이 생기기도 하고, 뭔가 꼬리표 같은 느낌이 들 때가 많다. 만약 전공자라면 의심 받지 않을 지식도, 의심 받는 상황에 처하..

반복되는 코드 리뷰를 코딩 가이드로 정리하면 어떨까?

코드 리뷰를 하다보면 같은 얘기를 반복해서 적게 된다. 리뷰어 입장같은 얘기를 약간씩 다른 코드에 적게 된다. 리뷰를 하는 리뷰어 입장에서는 처음에는 길게 친절히 적더라도 시간이 지날수록 간략하게 또는 대충 적게 된다. 이미 자신은 다 알고 있는 상황을 적는 것이고, 상대방도 같은 팀 구성원이라면 당연히 알아야 한다고 가정하고 적기 때문이다(참조: 지식의 저주). 예를 들면 "n+1 이슈 있는지 확인 부탁드려요."라는 리뷰가 있다. 리뷰어 입장에서는 꽤 친절하게 적었다고 생각할 수도 있다. 어느 부분이 문제인지 코드 영역을 표시했고, 핵심만 간단히 적었으며, 어떠한 감정도 실지 않았으니까. 하지만 코드 작성자가 n+1 이슈가 무엇인지 모른다면 어떻게 될까. 코드 작성자 입장코드 작성자는 당혹스러운 경우가..

DRF(Django REST Framework) API 문서 자동화 패키지, drf-spectacular 설정 방법은?

DRF와 API 문서 자동화, drf-spectacularDRF(Django REST Framework)란?Django만으로 API 서버를 개발할 수도 있지만 Django에 DRF 패키지를 추가로 설치하면 REST API 서버를 좀 더 쉽게 개발할 수 있다.  API 문서는?API 사용법을 알려주는 문서를 말한다. 아래 YouTube DATA API 문서가 그 예다. API 문서를 프런트 개발자한테 공유해야 프런트 개발자가 웹페이지를 개발할 수 있다.  API 문서 자동화가 필요한 이유는?API 문서를 일일이 PDF로 작성하든 위키로 작성하든 굉장히 시간이 많이 걸린다. 또 코드는 변경했지만 문서 변경은 깜빡하는 경우가 많아서 API 문서가 현재 API 서버 작동과 다른 경우도 많이 발생한다. API 문..

dbdiagram.io를 활용해서 쉽고 간편하게 데이터베이스 모델링하기

dbdiagram.io란 DBML(Database Markup Language)이란 언어를 사용해서 관계형 데이터베이스 논리적 설계를 돕는 무료 툴이다. ORM(Object Relational Mapping) 또는 SQL DDL(Data Definition Language)을 활용한 물리적 설계 전에 미리 간편하게 설계해서 시간을 절약할 수 있다. DBML(Database Markup Language)이란? 아래 예처럼 SQL DDL을 좀 더 간소화한 것에 가깝다. 딱 설계에 필요한 정보만 남겨 DDL보다 훨씬 파악하기 쉽다. Table users { id integer username varchar role varchar created_at timestamp } Table posts { id integ..

지식의 저주와 의사소통의 어려움

지식의 저주지식의 저주(curse of knowledge)란 다른 사람들과 의사소통을 할 때 다른 사람도 내가 갖고 있는 배경 지식을 가지고 있다고 자신도 모르게 추측하여 발생하는 인식적 편견이다(출처: 위키백과). 쉽게 말하면 내가 알고 있는 것을 내 얘기를 듣는 상대방도 알고 있을 것으로 가정하는 것이다. 지식의 저주 예"GET은 POST에서 못 가져오는 거 알죠?" 내가 전에 팀장한테 들었던 이야기다. 무슨 이야기를 하시는 건가 생각했다. 'HTTP 요청 메소드 중 하나인 GET 메소드는 POST 메소드를 못 가져온다는 말일까? 무슨 말이지'라고 생각하고 있었다. 내가 못 알아듣자, 그것도 모르냐는 눈빛으로 바라보면서 한숨을 쉬었다. 그리고는 풀어서 설명하기 시작했다. 그때서야 이해할 수 있었다. ..

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

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

개발 Dev/깃 Git 2023.06.17

전통적인 개발과 테스트 주도 개발, 그리고 애자일

팀내에서 전통적인 개발과 테스트 주도 개발, 그리고 애자일을 주제로 발표를 했다. 요며칠 밤마다 작업한 결과물이다. 슬라이드쉐어에 발표자료를 올려 놓았다. 긴 문장도 넣었지만, 짧은 문장으로 표현한 것도 있어서 잘 이해가 안 될 수도 있어 발표 설명을 각 장마다 적어 본다. 발표 슬라이드https://www.slideshare.net/taptorestart/ss-258182158   발표 스크립트지금 여기 모인 대부분의 개발자들이 하는 개발 방식은 전통적인 개발에 가깝습니다. 전통적인 개발에서는 기능 구현부터 합니다. 기능을 구현하고, POSTMan 같은 테스트 툴, 웹 등을 활용해서 기능을 구현한 부분을 개발자가 직접 테스트합니다.  그림 속 네모 칸은 기능을 뜻합니다. 이미 구현한 기능이 2개이고, ..

Q. 테스트 주도 개발Test-Driven Development(TDD)란?

A. 켄트 벡이 창시한 개발 방법론으로 테스트부터 작성하는 개발 방법론이다. 먼저 통과하지 못할 테스트를 작성하고 테스트를 통과하도록 코드를 작성한다. 그 뒤 코드를 개선, 리팩터링하고 테스트하는 과정을 반복하는 식이다. 테스트 주도 개발 테스트 주도 개발의 목표 작동하는 깔끔한 코드(clean code that works). 론 제프리즈(Ron Jeffries)의 핵심을 찌르는 이 한마디가 바로 테스트 주도 개발의 궁긍적인 목표다. 출처: 켄트 벡, 「테스트 주도 개발」, 김창준, 강규역 역, (주)도서출판인사이트, 2005, 21p. 테스트 주도 개발의 규칙 테스트 주도 개발에서는 ● 오직 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성한다. ● 중복을 제거한다 는 두 가지 단순한 규칙만을 따른..

Q. 장고Django에서 테스트 코드 작성 시 개발팀 내 관습convention으로 정해야 할 사항들은?

A. 테스트 팩키지, 테스트 파일의 위치, 테스트 파일명, 테스트 클래스명, 테스트 메소드명, 테스트 함수명, 테스트 코드 작성 방식 등을 미리 정해두는 게 좋다. 미리 정하지 않으면 각자 방식대로 하게 되고, 추후 유지보수가 어렵다. 처음 시작할 때 각자 테스트를 해보고 의견을 취합해서 정하는 것이 좋다. 한번 정하면 바꾸기 쉽지 않고, 기존 테스트 코드가 있기 때문에 관성에 따라 정한 방식대로 작성하게 되기 때문이다. 테스트 팩키지pytest: 파이썬 계열 대표 테스트 팩키지. pytest 없이도 django에서 기본 제공하는 django.test로 테스트 가능하다. pytest를 사용할지 말지 논의가 필요하다. pytest-django: pytest를 활용하면서 장고django 테스트할 때 쓰는 팩..

일일 활성 사용자Daily Active Users(DAU)가 많은 서비스의 백엔드는 어떻게 개발할까?

일일 활성 사용자Daily Active Users(DAU)가 많은 경우 어떻게 개발할지 궁금했다. 그래서 DAU가 백만이 넘는 회사에 입사해서 살펴봤다. 개인적인 경험이라 기업마다 차이가 있을 수 있다. DAU가 많다는 의미 DAU가 많다는 건 결국 백엔드 입장에서는 요청Request이 많다는 것이다. 그것도 굉장히 많이. 간단히 비유하면 손님이 끊이지 않고 줄서서 먹는 맛집 같다. 음식을 빠르게 대접해야 일일평균 최대한 많은 손님을 처리할 수 있고 음식 맛이 일정해야 손님이 끊이지 않게 된다. API 서버 기준으로 설명하면 손님이 오래 기다리지 않도록 빠르게 대접하는 건 응답 속도이고, 맛이 일정한 것은 오류 없이 응답을 제공하는 것으로 볼 수 있다. 식당과 차이는 식당은 손님을 오래 기다리게 할 수는..

백엔드 Back-end 2023.05.19

Q. 웹서비스 운영 중 가장 비싼 자원은?

A. 데이터베이스다. 최소로 웹서비스를 운영해도 웹 서버와 관계형 데이터베이스 서버, 파일 서버 정도는 필요하다. 이 중 데이터베이스가 제일 비싸다. 비슷한 사양일 때 웹서버에 비해서 2배 이상 비싸다. 파일 서버는 파일량에 비례하기 때문에 비용이 초기에 적게 든다. 가상서버(EC2)와 관계형 데이터베이스 서버 가격 비교 AWS 비용을 살펴보자. OS Linux ec2 t2.2xlarge의 경우 8 vCPUs에 Memory 32GiB인 경우 1시간당 0.4608$다. 이번에는 AWS MySQL 가격을 살펴보자. 비슷한 사양인 db.m4.2xlarge의 경우 vCPU 8, Memory 32 GiB인데 1시간 당 0.966 USD 달러다. 비슷한 사양의 ec2의 거의 두배다. 한 달 기준 705.18 USD..

Q. 장고 어드민Django admin에서 큰 크기의 csv 또는 엑셀 파일 내려받기를 구현할 수 있을까?

A. celery를 활용해 비동기 처리하면 구현할 수 있다. 장고 어드민 사이트The Django admin site란? 장고에서 기본 제공해주는 관리자 화면이다. 웹페이지가 기본 구현되어 있어서 몇가지 어드민 관련 설정만 해주면 되어서 편하다. 아래 예가 그 예이다. 사용자 등 장고 모델과 연관되어 데이터 추가 삭제 수정을 아주 쉽게 관리할 수 있다. 초기 스타트업에서 장고로 서비스를 구현했을 때 보통 백오피스(back office)라고 많이 부르는 내부 직원용 페이지를 굳이 따로 만들지 않고 장고 어드민을 많이 활용한다. 큰 크기의 csv나 엑셀 파일을 내려받는 경우와 관련 이슈 데이터베이스 접근은 백엔드 개발자 등 일부만 가능하다. 따라서 분석 등을 위해서 데이터를 csv 파일이나 엑셀 파일로 받을..

Q. Python에서 함수나 구문의 속도를 측정하는 방법은?

A. cProfile을 이용해서 측정할 수 있다.출처: 파이썬 프로파일러 인라인 리스트 예아래 같은 코드를 추가하고 실행해보자.import cProfile def get_number_list(): number_list = [] for i in range(1000000): number_list.append(i) return number_list cProfile.run(statement="get_number_list()") cProfile.run(statement="[i for i in range(1000000)]") 실행결과 같은 숫자 배열을 얻는 경우인데, 인라인으로 처리한 경우가 약 4배 빠른 것을 확인할 수 있다. not A and not B와 not (A or B) 비교 예not A and not ..