전체 글 383

토끼와 거북이의 경주, 길게 보면 끝에 가서는 거북이가 이길 수 있다

누구나 아는 이솝 우화 토끼와 거북이 이야기토끼와 거북이는 달리기 경주를 벌인다. 토끼는 달리기 경주를 당연히 이길 거라고 생각하고 목표지 중간지쯤 가서 낮잠을 잔다. 토끼가 낮잠을 자는 사이에 거북이는 쉬지 않고 달리고, 결국 거북이가 토끼를 이긴다. 토끼와 거북이의 속도 비교토끼의 최대 빠르기는 75km/h이고, 거북이는 1.5km/h이다. 토끼가 거북이보다 50배나 빠르다. 상식적으로 거북이가 이길 것이라고 기대하기는 쉽지 않다.  토끼는 1시간 동안 75km를 갈 수 있으니, 1시간의 1/10인 6분 동안 전속력으로 달리면 7.5km를 갈 수 있다. 이 거리를 거북이가 가려면 쉬지 않고 5시간 동안 가야 한다. 토끼와 거북이 이야기를 하루짜리 현실적인 이야기로 재구성해보자. 출발지에서 도착지까지 ..

SSAFY 수료생 대상으로 백엔드 개발자 채용 면접하다

최근에 SSAFY 수료생을 대상으로 사내 백엔드 개발자 채용을 위해 면접관 중 한명으로 면접에 참여했다. SSAFY란SSAFY는 Samsung Software Academy For Youth의 약자로 삼성에서 운영하는 청년 SW 아카데미다.아래 13기 공고처럼 1년 동안 소프트웨어 개발을 공부한다. 13기 커리큘럼은 아래와 같다. 면접 전 서류 심사우선 서류를 훑어보았다. 업무 중에 지원서와 포트폴리오를 보다보니 기술스택이 맞는지, 지원 분야에 맞게 포트폴리오를 구성했는지 훑어보고 1차로 추렸다. 백엔드 분야를 모집했는데 포트폴리오 내용에 프론트엔드가 많다면 약간 의구심이 들었다. 백엔드에 관심이 없는데 지원한 것은 아닐까. 팀 내에서 함께 의견을 취합해서 5명을 추렸다. 면접1명 당 50분씩 진행했다...

PostgreSQL과 PGRouting을 활용 전역 경로 계획 속도 개선

# Situation 상황- 자율주행 이동 로봇은 전역 경로 계획Global Path Planning(우리가 지도앱으로 출발지와 도착지를 입력했을 때 나오는 경로를 생각하면 된다)을 바탕으로 자율 주행을 한다.- 기존 전역 경로 계획은 타팀에서 만든 패키지를 활용해 OSM(Open Street Map) 파일을 바탕으로 경로 계획을 했다.- 대규모 지역에서 서비스를 하게 되면서 OSM 파일이 기존 다른 서비스 지역과 비교해 10배 이상으로 커졌다. 전역 경로 계획 시 OSM 파일을 읽어서 그래프 형태로 메모리에 올리는 전처리 과정이 오래 걸리게 되어서 첫 경로 계획은 3초 이상 소요되었다. - 더 큰 지도 파일을 사용할 경우 당연히 전처리 과정이 더 오래 걸려서 첫 경로 계획은 더 오랜 시간이 필요했다.-..

로봇 배달은 배달을 대체할 수 없다

로봇 배달은 배달을 대체할 수 없다로봇 배달은 배달이 아니다. 집 앞 픽업에 더 가깝다. 상점에서 픽업하던 물리적 거리를 단축 시켜줘서 집 앞에서 픽업하는 형태다. 로봇 배달은 배달원을 구하기 어려운 지역과 배달원이 기피하는 근거리 배달을 주로 담당한다. 로봇 배달은 픽업을 대체한다. 로봇 배달은 배달 시장을 더욱 크게 만들 것이다. 하나씩 좀 더 자세히 살펴보자. 로봇 배달은 배달이 아니다우리가 평소 경험하는 배달은 배달원이 택배나 음식을 현관문 앞까지 찾아와서 직접 건네주거나 현관문 옆에 놓고 간다. 로봇 배달은 고객이 건물 앞까지 나와서 로봇의 뚜껑을 열고 직접 물건을 찾아가야 한다. 기존 배달과 다르다. 배달 로봇들은 손이 없다. 따라서 로봇은 직접 물건을 꺼낼 수 없다. 고객이 직접 꺼낼 수밖에..

"로봇 배달은 배달이 아닙니다. 집 앞 픽업입니다." - 송도 요기요 로봇 배달 체험기

송도에서 로봇 배달 시작인천 송도에서 로봇 배달이 시작되었습니다(관련 기사: 박진주, 요기요, 인천 송도에 '로봇배달' 실전 투입, MBC 뉴스, 박진주, 2024. 9. 9.) 요기요와 협업하는 배달 로봇 회사에서 일하고 있기도 하고, 송도에 갈 일이 있어서 요기요 로봇배달 서비스를 직접 이용해 보기로 했습니다. 일반 사용자 입장에서 요기요에서 로봇 배달 시키는 과정을 적어보겠습니다. 요기요에서 로봇 배달 시키는 방법요기요 앱 들어가기요기요 앱에 들어갑니다. 첫 화면에서는 로봇 배달이란 단어를 찾기가 어려웠습니다.  현재 위치로 변경하기먼저 위치를 현재 위치로 변경하기 위해서 맨 왼쪽 상단에 회사라고 적혀 있는 부분을 누릅니다. 주소 설정 화면에 진입해서 현재 위치로 주소 찾기를 클릭합니다.  현재 위..

AWS ECS(Elastic Container Service)를 활용한 HTTP 서버 구축 실습 예시

ECS란?"Amazon Elastic Container Service(Amazon ECS)는 컨테이너 애플리케이션을 쉽게 배포, 관리 및 확대할 수 있도록 도와주는 완전 관리형 컨테이너 오케스트레이션 서비스"(출처: Amazon Elastic Container Service란 무엇입니까?) 쿠버네티스Kubernetes 같은 컨테이너 오케스트레이션을 제공해주되 AWS가 완전 관리해줘서 좀 더 쉽고 편하게 쓸 수 있습니다.   ECS 서비스 화면 들어가기검색창에 ecs를 입력하면 Elastic Container Service가 맨 위에 나옵니다. 해당 서비스를 클릭합니다. 아래 같은 화면이 보입니다. 클러스터 생성실습을 위한 것이니 고민하지 않고 클러스터 이름에 ecs-cluster 라고 입력합니다. 인프라..

깃허브 액션을 활용한 테스트 자동화로 코드 품질 개선

# Situation 상황- 입사 뒤 보니 테스트 코드를 작성하지만 테스트 자동화가 되어 있지 않았다.- PR(Pull Request) 리뷰 때 테스트가 모두 통과되는지 살펴보려면 매번 브랜치를 변경해서 테스트를 돌려야 했다.- 테스트를 실행하는 과정이 번거로워서 지나치게 되었고, 기존 테스트가 실패하는 코드가 통합 개발 브랜치(develop)에 병합되는 일이 발생했다. # Task 과제- PR 오픈 시에 리뷰 전에 미리 기존 테스트와 새로 추가된 테스트가 모두 통과하는지 자동화가 필요했다. # Action 행동- 깃허브 액션을 활용해서 PR 오픈 시 테스트를 자동화했다. # Result 결과- 매번 일일이 브랜치 변경해서 테스트를 돌릴 필요가 없게 되었다.- PR 리뷰 전에 테스트가 실패할 경우 PR ..

개발자 시연으로 QA 시간 감소 및 속도 개선

# Situation 상황- QA 시작일 전날 오후에 staging 서버에 해당 스프린트 작업분 코드를 반영해서 배포했다.- QA 시작 첫날 많은 버그가 나왔다.- 개발자와 PO, PD, QA 등 담당자들이 서로 다르게 기획을 이해해서 뒤늦게 이슈가 되는 경우가 있었다.  # Task 과제- 버그를 줄일 필요가 있었다.- 서로 같게 개발 스토리를 이해하고 있는지 확인하는 단계가 필요했다.  # Action 행동- 전 회사에서 개발자 프리뷰란 이름으로 QA 시작일에 개발자가 직접 기능을 소개하는 시간을 가졌던 것이 떠올랐다.- 동료 팀원과 함께 팀 내에 개발자 시연을 제안했다.- 스프린트 프로세스에 개발자 시연이 추가되어, 가능하면 QA 전에 늦어도 QA 시작일에는 시연을 진행하게 되었다.- 시연 방법은 ..

장고 어드민 도입으로 이슈 처리 속도 개선

# Situation 상황- 기존 어드민이 있었지만 기능이 제한적이었다.- 프런트 엔드 개발자가 부족해서 내부 구성원들을 위한 백오피스 기능 개발은 불가능한 상황이었다.- 타 팀에서 들어온 이슈를 백엔드 개발자가 운영 데이터베이스에 접속해서 변경 처리하는 경우가 많았다.- 백엔드 개발자들은 이슈를 처리하느라 기능 개발 시간이 부족해 추가 근무를 하게 되는 상황이 자주 발생했다.- 백엔드 개발자가 회의에 참여하거나 휴가를 쓰는 경우 이슈 처리가 지연되었다. # Task 과제- 백엔드 개발자가 아닌 누구나 이슈를 처리할 수 있는 백오피스 기능이 필요했다. # Action 행동- 백엔드 프레임워크로 장고 프레임워크를 사용하고 있었고 장고는 장고 어드민이란 기본적인 백오피스 기능을 제공했다. - 팀 내 장고 어..

Q. 파이썬 비공개 패키지를 만들고 다른 프로젝트에서 쓰는 방법은?

언제 비공개 패키지가 필요한가?팀 내에서 여러 저장소에서 사용하는 공통 모듈들이 있다. 공통 모듈을 한 저장소에 모아두고 오픈 소스로 공개하면 쉽게 쓸 수 있다. 하지만 보안상 이유로 공개할 수 없다면 비공개 패키지를 사용하게 된다. 1. Github에서 비공개 저장소 만들기비공개 저장소를 하나 만들자. private-package로 하나 만들었다. 이름은 원하는대로 만들면 된다. 실습을 위해서 아주 간단한 더하기 메소드만 갖고 있는 Calculator 클래스를 하나 추가하자. class Calculator:    def sum(self, a, b):        return a + b pyproject.toml은 아래처럼 간단히 입력하자. name은 패키지명인 calculator와 동일하게 적어야 한다..

슬랙 워크플로우를 통한 요청 통합 관리를 통한 요청 처리 프로세스 개선

# Situation 상황타 팀으로부터 요청이 여러 슬랙 채널에서 "살펴봐주세요", "이것 좀 해결해주세요." 등 짧은 메시지와 함께 @ 멘션 기능을 통해서 들어왔다. 그러다보니 다음과 같은 문제가 발생했다.- 공식 요청 채널이 없으니, 슬랙 DM을 통해서 요청이 오는 경우가 많았다.- 한명한테 요청이 몰리는 경우가 많았다.- 누가 어떤 요청을 받아서, 얼마나 처리하고 있는지 팀원 전체가 파악할 수 없었다.- 요청 내용을 파악하기 어려웠다. 요청을 파악하려면 슬랙 스레드 메시지 전체를 읽어야지만 알 수 있었다.- 요청에 중요도 긴급도 등 정보가 없었다. 따라서 모든 문제를 요청 받은 즉시 해결하게 되어 업무 흐름이 끊겼다. # Task 과제- 요청을 한 곳에 모은다.- 요청자는 요청 내용, 중요도, 긴급..

영어 이력서 어떻게 작성해야 할까 - 구글 직원 이력서 살펴보기

Sahil Gaba의 이력서링크드인에서 구글 직원인데 이력서를 공개한 것을 보았다.Sahil Gaba란 구글 직원의 이력서이다. 출처: Sahil Gaba의 링크드인 포스트 This is the resume that got me into Google. Sahil Gaba 이력서 살펴보기딱 한 장딱 한 장이다. 이력서 작성을 도와주는 사이트를 가도 비슷하고, 구글 드라이브 Google 문서 템플릿 이력서도 비슷하다. 물론 한국 이력서 양식도 한장이긴 하다. Canva에서 이력서 양식을 살펴봐도 보통 한장이다. 한 장 안에 핵심 정보를 다 넣는 것이 필요한 거 같다. 기술 정보부터Sahil Gaba 이력서의 특징은 기술 정보부터 넣었다는 점이다. 채용 담당자 입장에서 학력이 좋아도, 필요한 직무 기술을 갖고..

기타 Etcs 2024.06.22

Q. 파이썬 비공개 패키지 저장소 만들 때 주의사항은?

A. 공개 패키지와 마찬가지로 최상위 패키지는 하나만 있어야 하고, pyproject.toml을 작성해야 한다. tag를 추가하는 것을 추천한다. 비공개 패키지는 언제 사용할까?기업 규모가 커지게 되면, 서비스가 늘어난다. 예를 들어서 장고 프레임워크를 사용한다면, 장고 프레임워크를 사용하는 서비스가 여러 개가 되며, 당연히 저장소도 여러 개가 된다. 이때 유틸리티 성격의 공통 모듈이 늘어나게 된다. slack 메시지 처리, AWS S3 저장 관련 등 오픈 소스 패키지에서 약간만 수정해서 공통으로 쓰는 것들이 그런 예다. 이런 공통 모듈을 비공개 패키지로 분리하면 공통 모듈을 한 곳에서 관리할 수 있어서 생산성이 올라간다. 공개 패키지로 하면 더 편하지만 외부 공개할 수 없는 모듈도 존재할 때 비공개 패..

github, medium 등에서 나타나는 한국 개발자와 외국 개발자의 차이

github, medium에서 외국 개발자와 한국 개발자를 찾아보자 github Google의 People  github NAVER의 People velog.io 첫 페이지 미디엄에서 google로 검색(https://medium.com/search/users?q=google)해서 People 탭을 눌렀을 때 일부화면 캡쳐 차이는?나한테 느껴지는 가장 큰 차이는 바로 사진과 이름이다.외국 개발자들은 자기 얼굴이 담긴 사진을 많이 사용하고, 이름도 자기 이름 그대로 쓰는 경우가 대부분이다. 계정명도 대부분 자기 이름과 비슷하게 사용한다. 자신을 드러내는데 별 부담감을 느끼지 않는 것으로 보인다. 반면 한국 개발자들은 자기 얼굴 사진을 잘 사용하지 않는다. Github의 유명회사 소속인 경우는 자신의 이름을..

셸 스크립트로 오래된 로컬 브랜치 한꺼번에 삭제하기

Git으로 작업을 하다보면 브랜치들이 점점 늘어난다. 일일이 삭제하려면 너무 번거롭다. 이럴 때 셸 스크립트Shell Script를 활용하면 한번에 지울 수 있다. 셸 스크립트 예시다.아래 셸 스크립트를 실행하면 브랜치가 한꺼번에 삭제된다.#!/bin/bashPREFIX_FEATURE="feature/"PREFIX_BUGFIX="bugfix/"PREFIX_RELEASE="release/"branches=`git branch -a`for b in $branchesdo if [[ "$b" == "$PREFIX_FEATURE"* ]] || [[ "$b" == "$PREFIX_BUGFIX"* ]]|| [[ "$b" == "$PREFIX_RELEASE"* ]] then echo $b git branch -D ..

개발 Dev/깃 Git 2024.05.18

Q. OSM 데이터 모델의 기본 구성 요소는?

A. 기본 구성 요소 4가지는 Node, Way, Relation, Tag다(출처: 오픈스트리트맵 위키 Elements). OSM이란?OSM은 Open Street Map의 줄임말로 개방형 지도를 만들고 배포하는 프로젝트명이다(출처: 오픈스트리트맵 위키 처음 화면). OSM 데이터 모델개방형 지도를 만들기 위해서 필요한 데이터를 저장하기 위해 필요한 모델을 데이터 모델이라고 한다. OSM은 지도 데이터를 저장할 때 XML 포맷을 사용한다. 이렇게 저장한 지도 정보 OSM XML 파일을 불러와서 JOSM 같은 프로그램을 통해서 편집할 수 있다. OSM XML 포맷 예시(출처: 오픈스트리트맵 위키 OSM XML) ... ... ... ... ..

gitlab에 있는 저장소를 github로 커밋 포함 전체 복사하기

코드 복사가 필요한 상황Git으로 관리하는 코드를 이 서비스에서 저 서비스로 옮겨야 할 때가 있다예를 들어서 gitlab에 있는 저장소를 github로 옮기고 싶다. 이 때 gitlab 코드를 내려 받고, github에 저장소를 만들고 내려 받은 코드를 복사한 뒤에 새로 커밋하면 기존 커밋 이력이 다 날라간다. 커밋 이력을 포함해서 복사하고 싶다면이때는 remote url을 변경해야 한다. 아래 명령어를 사용해야 한다.$ git remote set-url origin GitHub-저장소-URL 작업 순서 1. 우선 gitlab 저장소를 clone 한다.$ git clone https://gitlab.com/사용자명/저장소명.git 2. github에 저장소를 새로 만든다. 3. 원격 저장소 url을 변경..

개발 Dev/깃 Git 2024.05.15

파이썬 비공개 패키지를 통해 타팀과 협업 및 업무 효율성 개선

# Situation 상황예전에 로봇 플랫폼 서버와 로봇이 주행하게 될 전역 경로 생성 서버가 따로 있었다. 전역 경로 생성 서버가 따로 있는 것이 비효율적이라 로봇 플랫폼 서버와 전역 경로 생성 서버를 하나로 합치면서 코드도 한 저장소로 합치게 되었다. 전역 경로 생성 개발자는 다른 팀이었는데, 백엔드팀 코드 저장소에서 같이 개발하게 되었다. 하지만 전역 경로 생성 개발자는 장고에 대한 이해, 테스트 작성 등 백엔드 개발 관련 지식이 부족했다. 전역 경로 담당자는 예전보다 개발하는데 더 오래 걸리게 되었고, 나와 만날 때 다시 과거로 돌아가 서버 분리를 하면 좋겠다는 이야기를 자주했다. # Task 과제과거로 다시 돌아가 전역 경로 생성 서버를 따로 두는 것은 비효율적이었다. 로봇 플랫폼 서버가 전역 ..