전체 글 52

애자일, 어디서부터 시작되었을까

전 직장 동료의 부탁으로 삼육대 K-디지털 트레이닝 과정 학생들 대상으로 '애자일, 어디서부터 시작되었을까'란 주제로 특강을 진행했습니다. 개인적으로 애자일에 대해 계속 정리해오던 내용을 발표 자료로 구성해보는 좋은 기회가 되었습니다. 애자일Agile, 어디서부터 시작되었을까 from Tap ToRestart 발표 자료만으로는 이해가 잘 안 될 수 있어서 발표 설명을 각 장마다 적어 봅니다. 애자일은 어디서부터 시작되었을까요? 애자일이 무엇일까요? 모두 한번쯤은 들어봤을 것입니다. 소프트웨어 공학 수업 때 여러 개발 방법론 중 하나로 꼭 나오죠. 대부분 스타트업들이 애자일 방법론으로 개발한다고 말하고요. 한번쯤은 봤을 애자일 소프트웨어 개발 선언문 영어 원..

익스트림 프로그래밍과 도요타 생산방식의 연관성 연구

I. 서론1. 연구 배경 및 목적애자일 선언문 저자 중 한 명인 켄트 벡(Kent Beck)의 책 익스트림 프로그래밍 19장에서 도요타 생산방식을 소개하고 있다. 켄트 벡이 도요타 생산방식에서 영감을 받았음을 확인할 수 있다. 2. 연구 목적자동차 제조업 분야에서 혁신적인 생산방식으로 인정받은 도요타 생산방식(Toyota Production System, TPS)과 애자일(Agile Manifesto) 소프트웨어 개발 철학의 구현 방법론 중 하나인 익스트림 프로그래밍(eXtreme Programming, XP)의 핵심 철학과 연관성을 분석하고자 한다. II. 이론적 배경1. 익스트림 프로그래밍의 핵심 개념켄트 벡은 익스트림 프로그래밍이 다른 개발 방법론과 다른 점으로 짧은 개발 주기, 점진적 계획 접근방..

개방-폐쇄 원칙(The Open Closed Principle, OCP)이란?

The Open Closed Principle(OCP)란?The Open Closed Principle(OCP)는 개방-폐쇄 원칙을 말한다. 로버트 C 마틴의 글에서 소개되었다. (출처: Design Principles and Design Patterns(https://web.archive.org/web/20150906155800/http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf)) The Open Closed Principle (OCP) A module should be open for extension but closed for modification.Of all the principles of object orien..

Alan Kay에게 Object-Oriented Programming이란 어떤 의미일까?

Alan Curtis Kay는 누구?Object-Oriented Programming(OOP)이란 용어를 처음으로 만든 사람이다. OOP 개념의 창시자다. OOP를 명확히 이해하려면 만든 사람이 어떤 생각을 갖고 만들었는지 이해할 필요가 있다. Alan Kay에게 OOP란 어떤 개념이었을까?2003년 7월 23일 Stefan Ram(베를린 자유 대학 교수로 추정)이란 사람이 Alan Kay와 주고 받은 메일이 있다.  출처: http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_enDate: Wed, 23 Jul 2003 09:33:31 -0800To: Stefan Ram [removed for privacy]From: Alan Kay [re..

가상 로봇 이동을 통해 개발 생산성 향상 및 QA 시간 단축

# Situation 상황- 로봇 관제 플랫폼 내에 자율주행 로봇의 전역 경로 생성의 바탕이 되는 지도를 스마트폰을 활용해서 실제 로봇을 움직여 가면서 만들 수 있는 기능 개발을 담당했다.- 구현 뒤에 테스트를 위해서는 실제 로봇을 끌고 테스트 장소에 갔다 왔다 하는데만 2시간이 걸렸다. 매번 실제 로봇으로 테스트를 할 수가 없다보니 버그가 뒤늦게 QA 때 발견되었다.- 버그를 수정하면 QA 담당자가 다시 로봇을 끌고 나가서 테스트하는 것이 반복되었다. QA를 모두 통과하는데 보통 3~4일이 걸렸다. # Task 과제- 실제 로봇을 끌고 밖에 나가지 않고도 손쉽게 테스트할 수 있어야 했다.  # Action 행동- 주말에 시간을 내서 가상 로봇 이동을 구현하기로 마음먹었다.- 로봇이 가상으로 이동하면 되..

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

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

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 행동- 백엔드 프레임워크로 장고 프레임워크를 사용하고 있었고 장고는 장고 어드민이란 기본적인 백오피스 기능을 제공했다. - 팀 내 장고 어..

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

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

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

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

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

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

내가 이룬 작은 개선과 성취를 STAR 기법으로 꾸준히 기록하기

피하고 싶지만 피할 수 없는 면접취업준비생이라면 절대 피할 수 없는 게 면접이다. 재직자라도 언제든 맞딱뜨리게 될 일이 바로 면접이다. 기업의 수명은 짧기 때문이다. 운 좋게 대기업에 다니고 있다면 좀 더 길겠지만 스타트업에 다니고 있다면 수명이 정말 짧다. 경제 위기 등 외부 요인으로 기업은 언제든 휘청일 수 있다. 내 의지나 노력과 관계 없이 권고사직을 당해서 다시 취업을 준비해야 하는 상황에 처할 수도 있다. 면접, 자기 홍보가 필요한 상황취업을 준비해야 하는 상황이 되었을 때 면접 시 우리를 평가하는 면접자는 우리를 모른다. 우리가 어떤 장점을 갖고 있는지 말이다. 경력자라 하더라도 지난 회사들에서 어떻게 일해왔는지, 문제를 일으키지는 않았는지, 어떤 성취를 얻었는지 모른다. 자기 스스로 자신의 ..

삼육대 학생들에게 테스트 주도 개발을 강의하다

전 회사 친구로부터 받은 부탁전 회사 친구가 삼육대 학생들을 대상으로 백엔드 강의를 하고 있어서 테스트 주도 개발 특강 부탁을 받았다. 처음에는 호기롭게 하겠다고 했는데, 시간이 다가오자 무슨 말을 어떻게 해야 할지 고민이 많아졌다. 그 친구들한테 뭔가 남았으면 좋겠는데, 시간만 뺐는 것은 아닌지, 별로 도움이 안 되는 것은 아닌지 등등 말이다. 고민테스트 주도 개발을 어떻게 하면 하게 만들 수 있을까. 테스트 주도 개발이 사실 쉽지는 않다. 특강이 끝난 뒤에 바로 시도하지는 못해도, 반드시 하고 싶게 만들려면 어떻게 하는 게 좋을지 고민이 되었다. 평범한 개발자인 내가 하는 말이 설득력이 생기려면 어떻게 해야할까 고민이 컸다. 결국 객관적인 자료나 사례를 바탕으로 설득을 해야겠다고 생각했다. 이야기 시..

켄트 벡의 테스트 주도 개발 예제대로 따라해보기

켄트 백의 테스트 주도 개발 책에 나온 예제대로 조금만 따라해보면 테스트 주도 개발을 이해할 수 있다.  준비: IntelliJ IDEA 설치하기먼저 IntelliJ IDEA를 내려받는다.https://www.jetbrains.com/idea/download/?section=mac Community Edition을 내려받으면 공짜로 사용할 수 있다. 실행하면 이런 화면이 나온다. New Project를 누르고 TDD라고 적자. Create을 누르면 이 상태가 된다.  테스트 만들기테스트 주도 개발은 테스트부터 만드는 것이다. 책에 나온 간단한 곱셈 예제는 아래와 같다.    public void testMultiplication(){        Dollar five = new Dollar(5);    ..

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

미국 마이애미로 해외 출장을 다녀왔다. 첫 해외 출장, 첫 미국 출장. 나에게는 새로운 경험이었다. 체력의 중요성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..