다시 시작 Tap to restart 392

한국 전자책도 출처 표기용 페이지 표시 기능이 있으면 좋겠다

한국 전자책은 출처 표기가 어렵다한국 전자책 앱(리디북스, 예스24, 교보문고, 밀리의 서재 등)은 글자 크기에 따라 페이지가 달라지거나, % 진행률만 표시된다. 이 때문에 전자책을 인용할 때 페이지를 적을 수 없어서 어느 장이라고만 적어야 한다. 해당 출처를 확인하는 사람은 해당 장에서 일일이 찾거나 검색해야 한다. 아마존 킨들은 페이지 표시가 있다아마존 킨들은 글자 크기에 따라 페이지가 달라지지 않는다. 아래 예처럼 글자 크기가 달라졌지만 전체 페이지는 259로 같은 것을 확인할 수 있다. 또 복사/붙여넣기만 해도 아래 예처럼 책 제목과 함께 페이지가 자동으로 표기된다.Extreme Programming (XP) is about social change.Beck, Kent; Andres, Cynth..

[디자인 패턴] 추상 팩토리 패턴과 파이썬 예제 코드

추상 팩토리 패턴(Abstract Factory Pattern)은?생성 패턴 중 하나로 추상 팩토리 패턴은 관련성 있는 여러 제품군을 한 번에 생성할 수 있도록 도와주는 패턴이다. 팩토리 메소드 패턴은 단일 제품군을 다루지만 추상 팩토리 패턴은 여러 제품군을 한 번에 생성한다. 언제 사용하는가?서로 관련 있는 여러 객체를 한 번에 생성하고 싶을 때 사용한다. 팩토리 메소드 패턴은 예를 들면 소셜 로그인처럼 하나만 다루지만, 추상 팩토리 패턴은 로그인 서비스와 결제 서비스처럼 연관된 여러 제품군을 함께 다루는데 적합하다. 카카오 플랫폼에서는 카카오 로그인과 카카오페이를, 네이버 플랫폼에서는 네이버 로그인과 네이버페이를 함께 사용해야 한다. 이 경우 추상 팩토리 패턴을 사용하면 카카오 제품군과 네이버 제품군..

[디자인 패턴] 팩토리 메소드 패턴과 파이썬 예제 코드

팩토리 메소드 패턴(Factory Method Pattern)은?생성 패턴 중 하나로 팩토리 메소드 패턴은 객체 생성을 서브클래스에 위임해서, 클라이언트 코드가 구체 클래스에 직접 의존하지 않도록 만드는 생성 패턴이다. 객체 생성 코드를 분리함으로써 새로운 타입이 추가되더라도 기존 클라이언트 코드를 수정할 필요 없이 확장할 수 있다. 언제 사용하는가?팩토리Factory란 이름처럼 자동차 공장에서 세단, SUV, 트럭 등 다양한 차를 생산하는 경우를 떠올릴 수 있다. 이처럼 상황에 따라 다른 객체를 생성해야 할 때 유용하다.예를 들어, 소셜 로그인 연동 기능을 구현할 때, 카카오 로그인, 네이버 로그인, 구글 로그인 등 다양한 외부 서비스와 연동이 필요하다. 이때 팩토리 메소드 패턴을 사용하면 객체 생성과..

[디자인 패턴] 심플 팩토리 패턴과 파이썬 예제 코드

심플 팩토리 패턴(Simple Factory Pattern)은?생성 패턴 중 하나로 심플 팩토리 패턴은 클라이언트가 입력한 인자에 따라 객체를 분기해서 생성하는 패턴이다. 클라이언트는 직접 객체를 생성하지 않고, 공장 역할을 하는 클래스에 생성을 위임한다. 언제 사용하는가?팩토리Factory란 이름처럼 자동차 공장에서 세단, SUV, 트럭 등 다양한 차를 생산하는 경우를 떠올릴 수 있다. 이처럼 상황에 따라 다른 객체를 생성해야 할 때 유용하다. 예를 들어, 소셜 로그인 연동 기능을 구현할 때, 카카오 로그인, 네이버 로그인, 구글 로그인 등 다양한 외부 서비스와 연동이 필요하다. 이때 심플 팩토리 패턴을 사용하면, 클라이언트는 어떤 클래스가 생성되는지 알 필요 없이 공장 클래스(Factory Class..

[디자인 패턴] 싱글턴 패턴과 파이썬 예제 코드

싱글턴 패턴은?생성 패턴 중 하나로 전역에서 접근 가능한 하나의 객체를 제공하는 패턴이다. 언제 사용하는가?로깅이나 데이터베이스 작업, 설정값처럼 단일 객체가 필요한 경우에 사용한다.설정값을 예로 들어보자. 설정은 프로그램 전역에서 사용하며 당연히 같은 값을 반환해야 한다. 굳이 여러 객체를 만들어서 사용해야 할 이유가 없다. 사례파이썬 웹프레임워크인 장고의 설정 사례를 살펴보자.장고에서 설정값을 불러와서 사용할 때from django.conf import settings식으로 불러와서 사용하게 된다. 이 settings가 싱글턴 패턴으로 되어 있다. django/conf/__init__.py 파일을 보면 아래처럼 선언되어 있다.settings = LazySettings() 출처: https://gith..

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

언어 Language 2025.03.30

느린 사무실 무선 인터넷 속도 개선기 - 문제에 대한 관심의 중요성

느린 무선 인터넷 속도인원이 늘어서 우리팀은 본사 사무실이 아니라 근처 공유 오피스에 있었다. 지난 2024년 12월 투자 실패로 인원이 줄어 다시 본사 사무실로 돌아왔다. 거의 8개월만에 왔는데 여전히 무선 인터넷 속도가 개선되지 않았다. 예전에도 느렸지만 더 느려져서 웹페이지 들어가면 이미지가 뚝뚝 끊어져 나오는 수준으로 느렸다. 도무지 업무를 보기 어려울 정도였다. 팀 내에서 IT기업 사무실 인터넷 속도가 이렇게 느릴 수 있냐고 한마디씩 하기 시작했다. 팀 리드로서 뭔가 개선을 해야겠다는 생각이 들었다. HR팀에 문의기존에도 사무실 인터넷에 문제가 발생했을 때 사람들은 HR에 항의를 하고, 개선을 요구했다. HR팀에 문의했을 때 답변은 Wifi는 느리니 제공된 유선랜을 쓰라는 것이었다. 유선랜을 쓰..

구라 가불假拂의 생성과정

구라와 가불구라는 거짓말을 속되게 이르는 우리말이다. 가불은 봉급을 정한 날짜 전에 지불하는 것을 뜻한다. 다음달 급여를 미리 받는 것을 보통 가불이라고 한다. 기업 내 구라가 만들어지는 과정회사를 다니다보면 대표든 팀장이든 일정을 묻는다. 팀장: "OO 기능 개발 언제 시작했죠?"팀원: "두 달 전쯤 시작했습니다."팀장: "언제쯤 완료될까요?" 팀원은 생각한다. 이미 두 달이나 보냈지만 진척이 많지는 않은 상태라 다시 두 달 걸리겠다고 말하기에는 부담스럽다. 두 달이 더 필요해보이지만 팀장에게 능력 없는 모습을 보이고 싶지 않고, 신뢰를 얻기 위해서 미래의 자신의 시간을 땡겨서 쓰자란 생각에 아래처럼 말해버린다. 팀원: "한 달 정도 더 하면 완료할 수 있을 거 같습니다." 팀장은 OO 기능 한 달 뒤..

축구팀과 스타트업은 닮았다

목표축구팀의 목표는 상위 리그로의 승격이다. 리그가 올라갈수록 팀의 위상이 높아져 더 많은 수익과 스폰서십을 확보할 수 있기 때문이다.스타트업의 목표는 단계별 성장을 거쳐 IPO를 통해 상장하거나 유니콘 기업이 되는 것이다. 시드, Pre-A, Series A 등 투자 단계를 거치며 점차 규모를 키운다. 멤버축구선수의 목표는 상위 리그로 올라가서 EPL 같은 세계적인 리그에서 뛰는 것이다.스타트업 멤버는 스타트업과 함께 성장하거나 다음 단계 스타트업으로 이직해 구글, 마이크로소프트 같은 글로벌 기업에서 일하는 것을 목표로 삼는다. 또는 경험을 쌓아 유니콘 기업을 꿈꾸며 자신의 스타트업을 창업하기도 한다. 평가축구선수는 팀의 성과와 개인 지표로 평가받는다. 리그 우승, 골, 어시스트, 패스 성공률 등이 주..

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

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

내란 사태, 정리 해고, 그리고 평화의 중요성

12월 3일 계엄, 12월 14일 탄핵안 가결12월 3일 갑자기 비상계엄이 선포되었다. 목숨을 걸고 국회로 달려간 시민들과 국회의원들 덕분에 계엄은 바로 해제되었다. 정말 그분들께 감사드리고 싶다. 언제든 다시 계엄이 선포될 수 있는 상황이 지속되다가 12월 14일에야 윤석열 대통령 탄핵안이 가결되었다. 투자 취소 및 정리 해고내가 다니는 스타트업은 거의 확정되었던 투자가 계엄과 탄핵안 가결 사이에 급작스럽게 취소되었다. 한 투자사가 투자를 취소하면서 줄줄이 투자가 취소되었고, 정리해고가 발표되었다. 12월 8일에 투자가 취소되기 시작했으니 12월 7일에 탄핵안이 가결되었다면 달라지지 않았을까. 그 어떤 투자사도 계엄 때문에 투자를 취소했다고는 말하지 않을 거 같다. 경제는 정치와 엮이는 것을 싫어하니까..

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

누구나 아는 이솝 우화 토끼와 거북이 이야기토끼와 거북이는 달리기 경주를 벌인다. 토끼는 달리기 경주를 당연히 이길 거라고 생각하고 목표지 중간지쯤 가서 낮잠을 잔다. 토끼가 낮잠을 자는 사이에 거북이는 쉬지 않고 달리고, 결국 거북이가 토끼를 이긴다. 토끼와 거북이의 속도 비교토끼의 최대 빠르기는 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 ..