반응형

다시 시작 Tap to restart 395

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

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

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

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

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 ..

Q. Pycharm에서 파이썬 Black 코드 포맷 자동 적용하는 방법은?

A. File Wathcer에 등록하면 된다. 출처: Black documentation: PyCharm/IntelliJ IDEA As file watcher Black 공식 문서에서는 black 적용 방법으로 As local server, As external tool, As file watcher 3가지 방법을 제시하고 있다. 이 중에서 File watcher가 자동 적용되어서 편하다. black 설치 MacOS 기준이다. 윈도우도 큰 차이는 없으니 위 공식 문서를 참고하자. $ pip install black $ which black black을 설치하고 which로 black 설치 위치를 확인할 수 있다. 내 경우는 파이썬 가상환경을 따로 만들어서 설치했기 때문에 아래와 같다. /Users/tap..

코드 리뷰와 결재 서류

코드 리뷰와 결재 서류를 비교하는 글은 많지 않다. 코드 리뷰는 특별한 무엇처럼 설명한다. 정말 다를까. 용어 비교코드 리뷰와 결재 서류 관련 용어를 살펴보자 코드 리뷰결재 서류작성 내용코드문서작성자개발팀원 누구나부하 직원검토자개발팀원 누구나상사승인 요청 방법코드 병합 요청(PR, Pull Request) 통해서결재 서류를 통해서승인 주체개발팀원 누구나상사 차이점은?결재는 상하관계가 명확하지만 코드 리뷰는 상대적으로 상하관계의 영향을 덜 받는다. 결재는 부하 직원이 상관한테 요청하는 단방향이지만, 코드 리뷰는 팀원이 다른 팀원이나 팀장에게, 팀장이 개발팀원들에게 리뷰를 요청하는 쌍방향이다. 물론 코드 리뷰에서도 당연히 상하관계 영향이 있다. 팀원이 CTO나 팀장의 리뷰를 더 반영하게 된다. 여기까지 보면..

Q. NGINX에서 CORS(Cross-Origin Resource Sharing)처리할 경우 설정 방법은?

A. 요청 메소드 OPTIONS에 대한 설정을 추가하면 된다. CORS 관련 확인을 위해서 사전요청preflight이 발생한다. 이 사전요청은 OPTIONS 요청 메소드로 이루어진다. 그래서 NGINX에서 OPTIONS 요청 메소드 처리를 추가하면 된다. server { ... location / { if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' $http_origin; add_header 'Access-Control-Allow-Methods' 'GET, POST, PATCH, DELETE, OPTIONS'; add_header 'Access-Control-Allow-Credentials' 'true'; add_he..

출처까지 알려줘서 유용한 개발자를 위한 AI 검색엔진! phind.com

phind.com 첫화면The AI search engine for developers. 개발자를 위한 검색엔진. 이란 소개 문구가 보입니다. 실제 사용 예CORS preflight이 무엇인지 물었습니다. 아래 예처럼 생성 답변과 오른쪽에는 생성 답변을 만드는데 사용된 출처가 나타납니다. 생성 답변 끝에 [0] [1] 등을 누르면 새 창으로 출처 링크로 접속합니다. CORS preflight이란? 으로 물어도 영어로 답변이 나옵니다. CORS 사전요청이란 으로 질문하니 한국어로 답변을 얻을 수 있었습니다. 한국어도 지원되는 것을 알 수 있습니다. chatGPT처럼 질문에 따라 코드 예시도 제시해줍니다. 아래 예는 CORS preflight nginx setting이라고 질의한 결과입니다. phind.co..

Q. CORS(Cross-Origin Resource Sharing) 사전요청preflight을 하지 않는 경우는?

A. 브라우저는 다음 조건을 모두 충족하는 요청일 경우에는 CORS 사전요청을 하지 않는다. 1. 메소드Method가 GET, HEAD, POST 중 하나이면서 2. 헤더Headers에 유저 에이전트User Agent가 자동으로 설정한 헤더(User-Agent, Connection)만 있거나, Accept, Accpet-Language, Content-Language만 있거나 Content-Type은 application/x-www-form-urlencoded, multipart/form-data, text/plain 중 하나이거나 조합인 경우다. 더 자세한 설명은 아래 출처를 참고하자. 출처: MDN: Cross-Origin Resource Sharing (CORS) 예를 들어서 요청 메소드를 POST..

Q. CORS(Cross-Origin Resource Sharing)이란?

A. 보통 '교차 출처 리소스 공유'로 번역되며, 브라우저로 웹 애플리케이션에 접속했을 때 리소스(이미지, JSON 등)가 자신의 출처(Origin)와 다름에도 가져오는 경우를 뜻한다. 여기서 출처(Origin)는 도메인, 프로토콜, 포트를 뜻한다. 도메인, 프로토콜, 포트 중 하나라도 다르면 출처가 다른 것이다. 브라우저가 CORS 허용 여부를 확인하며, 확인된 경우 출처가 다른 곳에서 리소스를 가져와서 보여준다. 허용되지 않은 경우는 CORS 에러가 발생한다. 어디서 이슈가 발생할까? 브라우저에서만 발생한다. 브라우저가 CORS 허용 여부를 확인하기 때문이다. Android 앱이나 iOS 앱과는 관계 없다. 언제 이슈가 발생할까? 예를 들어 https://www.taptorestart.com 에 브라..

Q. 메타버스Metaverse의 어원은?

A. 1992년 출간된 닐 스티븐슨의 공상과학 소설 ‘스노 크래시’에서 meta와 universe의 합성어로 처음 사용되었다. 소설 속에서 메타버스가 등장한 부분을 살펴보자. 양쪽 눈에 보이는 모습에 약간의 차이를 두면 그림은 입체적으로 보인다. 1초에 그림을 72번씩 바꿔 주면 그림은 실제로 움직이는 효과를 낸다. 움직이는 입체 그림을 가로 2000픽셀 크기로 보여 주면 사람의 눈이 인식할 수 있는 최대치에 도달한다. 그리고 작은 이어폰을 통해 스트레오 디지털 사운드를 들려주면 움직이는 입체 화면은 완벽히 실제와 같은 배경음을 갖게 된다. 그러니까 히로는 전혀 다른 곳에 존재하는 셈이다. 그는 고글과 이어폰을 통해 컴퓨터가 만들어 낸 전혀 다른 세계에 있다. 이런 가상의 장소를 전문 용어로 ‘메타버스’..

기타 Etcs 2023.04.11

Q. 두 창을 띄워서 한쪽에서 수정 작업 중인데 삭제한다면 어떻게 처리하는 게 좋을까?

A. 알림을 띄우는 게 좋다. 그래야 다른 작업자가 무슨 일을 했는지 알 수 있기 때문이다. 구글 드라이브 예test란 글을 작성했다.다른 창에서 삭제를 했다.바로 알림이 떴다. 티스토리 예두창을 띄우고 카테고리 관리 쪽으로 들어갔다. 테스트 카테고리를 추가했다.테스트를 수정 중이고 다른 창에서는 카테고리를 삭제했다. 변경사항 저장을 눌렀다.수정 확인 버튼을 눌렀는데 해당 카테고리가 사라졌다. 알림은 없었다.

반응형