반응형

전체 글 388

첫 해외 출장에서 깨달은 것들

미국 마이애미로 해외 출장을 다녀왔다. 첫 해외 출장, 첫 미국 출장. 나에게는 새로운 경험이었다. 체력의 중요성3월 23일 토요일 오후 4시에 인천공항에서 비행기 탑승해서 마이애미 현지 시간 3월 24일 일요일 새벽 5시 경 마이애미 공항에 도착해서 비행기에서 하차하기까지 25시간이 소요되었다. 24일 오전에 도착했으므로 24일 밤이 되기까지 잠을 잘 수 없었다. 다음 날이 월요일이라 바로 쉬지 못한 상태로 출장 일정이 시작되었고, 출장 기간 내내 피곤했다. 다음에 출장을 가게 된다면 시차 적응을 빨리할 수 있는 방법을 찾아보고 적용해봐야 할 거 같다. 계획대로 진행되지 않는 일정모든 일이 그렇겠지만 계획대로 진행되지 않았다. 출장 기간 내내 네트워크 이슈로 계획대로 진행할 수 없는 상황이었다. 모바일..

'어제보다 오늘이 나아지는 세계'

'어제보다 오늘이 나아지는 세계' 김연수 소설가의 책 '우리가 보낸 순간'의 책 끝 부분에 '날마다 글을 쓴다는 것'이란 글에 나온 표현이다. 남들이 봤을 때 김연수 소설가는 스물 셋에 시인으로 등단하고, 스물 넷에 장편 소설로 문학상을 받은 천재 작가다. '날마다 글을 쓴다는 것' 글을 보면 천재 작가인 김연수 소설가도 소설 쓰기를 그만둘까 고민한 적이 있다고 한다. '재능이 없다는 의미' 몇 번 대학에서 글쓰기를 가르치고 난 뒤에 나는 자신에게 생긴 부정적인 일들을 '재능이 없다는 의미'로 받아들이는 사람이 십대 시절의 나뿐이 아니라는 사실을 발견하게 됐다. 소설창작 시간에 관례대로 합평이라는 걸 한 적이 있었다. 칭찬을 오천 번 정도는 받아도 원래의 밝고 창의적인 아이 때의 모습으로 돌아갈 수 있을..

Pytest로 InfluxDB 병렬 테스트 시 fixture와 테스트 코드 예시

InfluxDB를 사용한 코드에 대한 테스트 코드를 작성 PostgreSQL이나 MySQL을 테스트할 때 테스트 데이터베이스를 만들어서 하는 것처럼 실제로 InfluxDB에 데이터를 저장하고 읽어서 테스트를 하고 싶었다. 그래야 코드가 정상 작동하는지 확실하게 테스트할 수 있기 때문이다. InfluxDB 관련 테스트 팩키지 X InfluxDB관련 테스트 팩키지가 따로 없었다. 그래서 fixture로 추가해서 사용하기로 했다. fixture 함수 conftest.py 파일에 아래 함수를 추가했다. def use_influxdb(func): if "INFLUXDB_TEST_TOKEN" not in os.environ: return pytest.mark.skip(reason="INFLUXDB_TEST_TOKE..

GitOps와 AWS ECS 사용 시 베이스 도커 이미지를 활용한 배포 속도 개선 사례

배경 사내에서 DRF로 개발하고 있으며, Github Action과 AWS ECR, ECS를 활용해서 배포를 하고 있다. Github Action에서 배포 실행 버튼을 누르면 아래와 같은 순서로 배포가 진행되었다. 1. 선택한 브랜치의 코드를 바탕으로 도커 이미지 생성해서 ECR로 이미지 업로드 2. 1번에서 업로드한 ECR 이미지로 API 서버, 워커 서버 등 배포 진행 문제 1번이 프로젝트가 커지고 외부 라이브러리나 팩키지 설치가 많아질수록 속도가 오래 걸렸다. 특히 PostGIS를 쓰게 됨에 따라 관련 해서 우분투에 libgdal-dev 팩키지 설치가 필요해졌는데 이 팩키지 설치만 몇 십초 씩 걸려 긴 시간이 소요되었다. 해결 방안 1. requirements.txt를 테스트 관련 팩키지 등을 제외..

ChatGPT로 고급 개발자의 피해가 클까? 초중급 개발자의 피해가 클까?

사람마다 의견이 갈릴 거 같다. 내 의견은 고급 개발자다. 기업의 입장에서 생각하기 기업은 돈을 벌기 위한 조직이다. 투자는 적게 하고, 수익은 많이 나는게 최고다. 기업 입장에서 개발자들은 자원 중 하나다. 그래서 인적 자원(Human Resource, HR)이라고 한다. 기업의 입장에서는 4000만원짜리 개발자 A와 8000만원짜리 개발자 B가 있다면 당연히 두 배 비용을 지불하고 있는 B가 A의 최소 두배만큼 일을 해주길 원할 것이다. ChatGPT 이전 4000만원짜리 개발자 A와 8000만원짜리 개발자 B의 차이가 컸다. 개발자 A가 저연차이고, 개발자 B가 개발 경험이 많은 고연차라면, 그동안 쌓아온 경험의 차이가 실제로 생산성의 차이를 가져왔다. 예를 들면 간단한 리눅스 명령어도 저연차에 경..

ChatGPT로 "비즈니스 모델 특허 출원 명세서와 요약서 작성기" 만든 후기

쉽다! 정말 누구나 할 수 있다 ChatGPT의 GPT 빌더로 비즈니스 모델 특허 출원 명세서와 요약서 작성기를 만들어보았다. 생각보다 굉장히 쉽게 만들 수 있어서 놀랐다. GPTS(https://chat.openai.com/gpts)에서 Create을 누르면 쉽게 만들 수 있다. 단 무료 사용자는 안 되고, 매달 20$ 내는 Plus 사용자이어야 한다. Name, Description, Instructions만 작성하면 만들어진다. 정말 간단했다. 물론 내가 원하는결과가 나오도록 Instructions를 작성하기는 쉽지 않았다. 비즈니스 모델 특허 출원 명세서와 요약서 작성기 비즈니스 모델 특허 출원 명세서와 요약서 작성기 GPT를 만들었다. 실제 사용 예는 아래와 같다. 테스트를 위해서 본 발명은 기..

인공지능 AI 2024.01.21

Q. 슬러그slug란?

A. 보통 URL 끝에 있는 웹 주소의 고유 식별 부분을 뜻한다. 예를 들면 https://en.wikipedia.org/wiki/Clean_URL에서 Clean_URL 부분이 슬러그다. 달팽이를 뜻하는 slug와는 관계가 없다. 제작 중인 신문 기사에 붙이는 짧은 이름을 slug라고 한다(출처: 위키백과 slug) 이쪽에서 파생된 단어로 추정된다. slug 특징 사람이 읽고 파악할 있는 자연어로 되어 있으며 중복 없이 유일하다. 실제 웹 개발에서 slug값을 정의할 때 중복이 발생하지 않도록 unique 설정을 true로 정의한다. 웹 개발 문서에 등장하는 예 웹 개발 문서를 읽다보면 자주 등장한다. Django 예 출처: https://docs.djangoproject.com/en/dev/glossa..

채용 플랫폼이 아니라 홈페이지나 인사팀 메일로 직접 지원하면 결과에 영향이 있을까?

인사 담당자 입장에서 한번 생각해보자. 채용 플랫폼으로 지원하는 것을 더 좋아하지 않을까? 채용 플랫폼을 원티드나 리멤버 등 하나만 이용한다면 관리 차원에서 좋아할 수도 있다. 하지만 보통 채용 플랫폼을 하나만 이용하지는 않는다. 원티드, 사람인, 리멤버, 링크드인 등 여러 플랫폼을 이용하고, 헤드헌터, 사내 추천 등 여러 채널을 이용해서 채용을 진행한다. 직접 지원하면 인사 담당자 입장에서 채용 수수료를 아낄 수 있지 않을까? 채용 수수료를 찾아보자. 원티드 경우 연봉의 7%이다. 프로그래머스의 경우도 연봉의 7%이다. 보통 7% 정도로 생각하면 될 거 같다. 7%가 별 것 아닌 거 같지만 연봉이 5000만원이라면 기업 입장에서는 350만원이나 되는 큰 돈을 수수료로 지불해야 한다. 직접 지원한 경우 ..

벤츠 역사에서 가장 중요한 날, 1886년 7월 3일

세계 최초의 자동차, 벤츠 페이턴트 모터바겐 DDP(동대문디자인플라자)에 가면 아래와 세계 최초의 자동차 모형이 전시되어 있다. 세계 최초의 운전사, 정비사는 베르타 벤츠 세계 최초의 운전사는 칼 벤츠가 아니라 베르타 벤츠다. 왜 칼 벤츠가 아니었을까. "베르타 벤츠는 1888년 8월 어느 날 아침, 남편 카를 벤츠 몰래 자동차를 끌고 나와 두 아들인 오이겐 벤츠, 리하르트 벤츠와 함께 길을 나섰다. 당시 벤츠 가족이 머물고 있던 곳은 독일 서남부의 만하임이었으며, 베르타 벤츠는 그곳에서 약 100km 남쪽으로 떨어진 카를스루에 인근의 포르츠하임의 친정집까지 차를 끌고 갈 계획을 세웠다. 다만 친정집에 가는 건 표면적인 이유였고, 사실 베르타 벤츠는 사실 이동하면서 자동차를 대중에게 유용한 것이라 홍보할..

장고 어드민 무료 테마 Unfold 추천!

기본 장고 어드민 기본 장고 어드민은 예쁘지 않다. 이렇게 생겼다. 모서리도 다 직각이다. 너무 딱딱한 느낌이다. django-unfold Unfold 테마를 적용한 결과다. 기본 장고 어드민 형태를 유지하면서 세련되게 변경된 것을 볼 수 있다. 장고를 웹사이트로 변경해주는 무료 테마도 보이지만, 웹사이트로 쓰는 용도가 아니라 사내 어드민 용도라면 Unfold 테마로도 충분한 거 같다. unfold 적용 시 주의사항 장고 어드민 모델 추가 시 from unfold.admin import ModelAdmin 이용할 것! 기존 장고 from django.contrib.admin import ModelAdmin을 이용하면 안 된다. 그러면 예쁘지 않게 나타난다. 이렇게 보인다. User, Group 등 기본으..

pytest-BDD(Behavior-driven development) REST API 테스트 픽스처fixture 예

BDD(Behavior-driven development)란? BDD는 한국어로 번역하면 행위 주도 개발로, 소프트웨어 개발 방법론 중 하나다. 소프트웨어 기능을 사용자의 행위 중심으로 설명한다. 예를 들면 아래와 같다. Title: Returns and exchanges go to inventory. As a store owner, I want to add items back to inventory when they are returned or exchanged, so that I can sell them again. Scenario 1: Items returned for refund should be added to inventory. Given that a customer previously bou..

야근을 하게 만드는 회사, 야근이 기본인 회사를 최대한 빨리 나와야 하는 이유는?

시간이 지날수록 다른 회사로 갈 수 없고 벗어나기 어려워지기 때문이다. 왜 다른 회사로 갈 수 없을까?이직을 위해서 가장 필요한 것이 무엇일까? 시간이다. 이직을 위해서는 지금까지 작업한 것들을 포트폴리오로 정리도 해야 하고, 이력서도 다듬어야 하고, 구인공고도 찾아보고 지원도 하고 면접도 봐야 한다. 이 모든 것들을 위해서 가장 필요한 것은 바로 시간이다. 여유 시간이 없다면 이직할 수 없다. 야근을 하게 만드는 회사, 야근이 기본인 회사가 빼앗아 가는 것은?당연히 시간이다. 하루 종일 일하고 집에 와서 잠만 자고 다시 일하러 나가는 일상이 반복된다면? 시간이 없다. 주말에는 녹초가 되고, 밀린 집안일을 처리하느라 벅차다. 야근의 굴레에서 벗어나고 싶다는 생각은 스쳐지나가듯 할 수 있지만 실행에 옮길 ..

erdcloud.com에서는 동시에 여러 명이 ERD(Entity Relationship Diagram)를 편집하고 공개된 ERD 예시를 볼 수 있다

erdcloud.com 이란? 클라우드 기반의 ERD(Entity Relationship Diagram) 공유 편집툴이다. 클라우드 기반이라 여러 명이 편집 가능 erdcloud.com에서는 클라우드 기반이라 동시에 여러 명이 편집할 수 있다. 광고를 보면 숫자 제한이 없는 거 같다. 여러 명이 함께 ERD를 설계할 때 유용하다. 공개된 ERD 예시 많아 도움 다른 사람들은 어떻게 데이터베이스 모델링을 하는지 공개된 ERD를 보면서 참고할 수 있다. ERD 옆의 책이 쌓여 있는 아이콘을 누르면 아래처럼 공개된 ERD를 볼 수 있다. 아래 예는 OKKY의 예다. export시 외래키 정보가 사라져 export할 경우 외래키(Foreign Key) 정보가 사라진다. export 한 뒤 import 하면 다시..

Q. 파이썬Python 기본 반올림 함수인 round(0.5)의 결과는?

A. 0이다. 중고등학교 수학시간에 배운 반올림 방식으로 생각하면 1이어야 할 거 같은데 0이 나온다. 그 이유는 파이썬 round는 우리가 수학시간 때 배운 사사오입 방식 4이면 내리고 5이면 올리는 게 아니라 오사오입 방식이기 때문이다. (참고: 반올림 위키백과)오일 때 버리고 그 다음 오는 올린다. 그래서 round(0.5) -> 0, round(1.5) -> 2가 된다. 결과가 짝수로 나온다. round(0.5) -> 0 round(1.5) -> 2 round(2.5) -> 2 round(3.5) -> 4로 가까운 짝수값이 나온다. 소숫점 첫째 자리에서 반올림해봐도 특이하다. round(0.01, 1) -> 0.0 round(0.05, 1) -> 0.1 round(0.15, 1) -> 0.1 ro..

Q. 깃허브github에서 깃플로git-flow와 스쿼시와 병합Squash and merge을 함께 쓰면 안 되는 이유는?

A. release 브랜치에서 main 브랜치로 PR(Pull Request) 요청할 때마다 충돌이 발생한다. 스쿼시와 병합Squash and merge이란?여러 커밋을 하나의 커밋으로 밀어넣어서(squash) 병합(merge)해주는 기능이다. 예를 들어서 feature 브랜치에서 develop 브랜치로 PR을 만들었다고 하자. feature 브랜치에서 작업한 커밋이 10개다. 스쿼시와 병합 기능을 쓰면 단 1개의 커밋으로 10개의 커밋이 합쳐져서 develop에 병합된다. 그래서 커밋 이력이 깔끔해진다. 충돌 예시 add hello title, add hello text란 두 커밋을 하고 feature/add_hello 브랜치에서 develop으로 PR을 만든 경우다. Squash and merge한 ..

개발 Dev/깃 Git 2023.10.11

Q. JOSM에서 한 점을 움직였을 때 여러 선이 한꺼번에 움직이는 원리는?

A. 점node에 id가 부여되어 있기 때문에 가능하다. 아래 그림처럼 한 점을 움직였을 때 해당 점과 관련된 여러 선이 한꺼번에 움직인다. 다른 편집툴은 보통 한꺼번에 움직이지 않는다. OSM 파일을 보면 아래와 같다. 4개의 점node와 2개의 선way로 이루어져 있다. 선way 정보는 변경이 없고, 점node의 좌표값이 변경되는 것이다.

Q. OSM 파일을 GeoJSON으로 변환하면 어떻게 바뀔까?

A. GeoJSON 데이터가 Feature로 바뀐다. osm을 GeoJSON으로 바꿔주는 파이썬 팩키지 osm2geojson을 활용해서 바꿔보자. 코드는 아래와 같다. 예제 코드를 그대로 활용하고 결과인 json을 파일로 저장한 코드다. import codecs import json import osm2geojson with codecs.open('sample.osm', 'r', encoding='utf-8') as data: xml = data.read() geojson = osm2geojson.xml2geojson(xml, filter_used_refs=False, log_level='INFO') with open("result.json", "w") as f: json.dump(geojson, f) ..

JOSM을 데이터베이스에 저장한다면 어떻게 설계해야 할까?

JOSM 구조 그대로 설계할 수 있을 거 같다. 예제 JOSM의 출처는 https://learnosm.org/ko/josm/start-josm/ 다. node node는 위 예처럼 lat, lon 좌표값을 갖고 있고, 태그들을 갖고 있다. 또 태그는 id가 없다. 태그의 경우 shop, shoes를 하나 만들고 계속 쓰기보다는 node에 종속된 느낌이다. node : tag = 1 : n 관계로 표현할 수 있다. 위 내용을 통해서 node 테이블이 필요하고, tag 테이블이 필요하다는 것을 알 수 있다. 테이블 node { id int [pk] created_at timestamp coordinates geometry[Point] } 테이블 node_tag { node_id int [pk] k varch..

JOSM 주요 용어Terminology 살펴보기

JOSM을 제대로 사용하려면 JOSM에서 사용하는 주요 전문 용어를 살펴볼 필요가 있다. JOSM Wiki 첫 소개에 전문 용어부터 나온다. 용어는 총 5가지다. Node, Way, Relation, Area, Tag. 하나씩 원문과 함께 살펴보자. Node A Node is a point. 노드는 하나의 점이다. Way A way is a line connecting multiple nodes. Way, therefore, is a general term for series of joined nodes, not just for roads or ways in reality. 길은 여러 노드들을 연결하는 하나의 선이다. 그래서 길의 실제의 도로나 경로만을 뜻하는 것이 아니라 연결된 노드의 연속을 일반적으로..

Q. JOSM이란?

A. 자바로 만들어진 OpenStreetMap(OSM) 무료 확장 가능한 에디터다. 공식 홈페이지 설명은 다음과 같다. JOSM is an extensible editor for ​OpenStreetMap (OSM) for ​Java 8+.It supports loading GPX tracks, background imagery, and OSM data from local sources as well as from online sources and allows to edit the OSM data (nodes, ways, and relations) and their metadata tags. 출처: josm.openstreetmap.de OSM 에디터 중에서 기능이 많고, 가장 좋은 거 같다. 아래는 오..

반응형