All in One SEO v4.9.3에서 생성된 이 파일은 llms.txt 파일로, LLM이 사이트를 색인화하는 데 사용됩니다. # 우아한형제들 기술블로그 ## Sitemaps - [XML Sitemap](https://10.147.128.150/sitemap.xml): Contains all public & indexable URLs for this website. ## 글 - [기술이 없던 곳에 기술 더하기: 사내 해커톤 플랫폼 만들기](https://10.147.128.150/26624/) - 그 어느 때보다 시스템이 필요해진 순간 우아한형제들에는 '우아톤'이라는 사내 해커톤이 있습니다. 구성원들이 무박 2일 동안 밤을 새워 가며 저마다 품어 온 아이디어를 마음껏 펼쳐 보는 무대입니다. 2019년 처음 열려 올해 7회를 맞았고, 어느새 사내 문화로 자리 잡았습니다. 올해는 회사 전체가 AI 활용을 넓혀 가자는 흐름에 맞춰 변화를 줬습니다. "AI와 함께 업무는 더 스마트하게, 서비스는 더 - [멀티 어카운트 NACL 차단 자동화 도구 운영 및 개선 경험](https://10.147.128.150/26492/) - 0x00 들어가며 보안팀의 중요한 일 중 하나는 공격 IP를 지금 당장 막는 일 입니다. SOC에서 수상한 트래픽이 잡혔을 때, SOAR가 자동으로 차단 액션을 트리거할 때, 분석가가 직접 손으로 차단 요청을 넣을 때. 단일 AWS 계정 환경이라면 NACL이나 Security Group에 룰 하나 추가하면 끝나는 단순한 일이지만, 운영 중인 AWS 계정이 수십 개에 이르면 이야기가 달라집니다. 우아한형제들은 - [AI가 내 프롬프트를 흘려듣는 이유: 원리부터 다시 본 컨텍스트 엔지니어링](https://10.147.128.150/26459/) - #분명 가이드에 다 적었는데, 왜 안 될까요? 분명 가이드에 다 적어놨습니다. 그런데 AI는 또 엉뚱한 코드를 내놓았습니다. 저는 디자인 시스템 안에서 MCP(Model Context Protocol) 서버 개발을 주도하고 있었습니다. AI가 우리 디자인 시스템 규칙에 맞는 코드를 생성하도록 가이드하는 게 목적이었고, 그러려면 우리가 원하는 코드가 무엇인지를 모델에게 정확히 전달해야 했습니다. 가이드라인을 짜고 실제 데이터를 넣어가며 테스트했지만 원하는 - [한 번 성공하니 다음도 쉬울 줄 알았다: 최소주문금액바 4번의 A/B실험](https://10.147.128.150/26379/) - 들어가며 2024년 10월, 배달의민족 장보기·쇼핑 서비스에 ‘최소주문금액바’라는 스낵바 형태의 UI를 도입했습니다. 퀵커머스는 빠른 배달이 강점이지만, 그만큼 배달 비용도 높습니다. 라이더가 한 번에 배달할 수 있는 주문 수가 제한적이기 때문입니다. 그래서 퀵커머스 서비스에는 일정 금액 이상 주문해야 하는 ‘최소주문금액’이 존재합니다. 최소주문금액바는 고객이 이 기준까지 얼마나 남았는지를 쉽게 알 수 있도록 만든 기능이었어요. 우리의 목표는 - [사람도 AI도 놓친 번역 누락, ESLint 플러그인을 만들어 해결하기](https://10.147.128.150/26388/) - 여는 글 대 AI의 시대를 맞이하며 배달의민족 앱에 다국어 지원의 바람이 불었습니다. AI의 빠른 번역 속도는 몇 년 동안 잊혀진 다국어 지원의 실현을 앞당겼고, B마트와 장보기쇼핑을 비롯한 커머스 서비스도 예외는 아니었습니다. 이에 맞춰 커머스 웹프론트에서는 한글 문구를 체계적으로 관리 및 번역하고자, 유명한 다국어 프레임워크 i18next와 react-i18next 생태계에 기반한 커스텀 라이브러리 @lib/i18n을 구현했습니다. 그리고 빈틈없는 번역과 - [Spring Statemachine 도입기](https://10.147.128.150/19491/) - 로봇과 함께 배달하는 서비스의 필요 우아한형제들 로보틱스LAB의 로봇딜리버리플랫폼팀에서는, 로봇으로 배달을 하기 위해 필요한 여러 서비스를 개발하고 있습니다. 이러한 서비스들 중에는 로봇의 배달 수행 과정을 관리하는 서비스가 있습니다. 이 서비스는 배달 요청을 수신한 후 가용 로봇을 찾아 그 로봇에게 배달 임무를 할당합니다. 임무를 받은 로봇은 배달을 시작하게 되고, 이렇게 시작된 로봇의 배달 과정 전체를 이 서비스가 - [전체 서비스를 관통하는 도메인 모듈을 안전하게 분리하기](https://10.147.128.150/22151/) - 도메인의 복잡성과 의존성 문제를 해결하기 위해 도메인 분리와 헥사고널 아키텍처를 적용한 기술 개선 과정을 상세히 설명합니다. 시스템 안정성과 개발 생산성을 높이기 위한 구조 개편, 단계별 리팩토링, 테스트 전략, 팀 내 지식 공유 활동까지 아우르며, 개선 효과도 함께 제시합니다. - ['대략'이 아닌 '정확한' 데이터로!: 생산성 측정 지표 개발기](https://10.147.128.150/20029/) - SUPER2 어드민은 사장님이 제출한 입점 신청 및 정보 수정 요청을 승인하는 시스템을 제공하고 있어요. (자세한 요청 승인 과정이 궁금하시면 기술블로그 "승인 프로세스 뒤에 숨겨진 일꾼들: 사장님 입점요청 승인툴 고도화 프로젝트 경험담" 을 참고해 주세요.) 그래서 SUPER2 어드민의 주요 사용자 중 하나는 승인 작업자인데요. 이 작업자분들의 관리자는 리소스를 적재적소에 배정해서 업무를 효율적으로 할 수 있도록 하고 - [우아한공방의 새로운 동료, 시스템 맥락을 가진 챗봇서비스 개발기(feat. RAG)](https://10.147.128.150/26319/) - 왼쪽 예시처럼 디자인시스템과 무관한 질문을 하거나, 오른쪽 예시처럼 특정 인물에 대한 평가를 요청하는 질의들이 들어오기 시작했습니다. 문제는 이러한 응답이 단순한 재미 요소를 넘어, 우아한공방 챗봇이 의도한 서비스 범주 밖의 답변까지 생성하고 있었다는 점입니다. 서비스의 역할과 무관한 응답이 계속 생성될 경우 사용자 경험과 응답 신뢰도에도 영향을 줄 수 있었기 때문에, 답변 범위를 명확히 제한할 필요가 있었습니다. - [배민 앱 리뷰 품질을 향상시킨 방법은? 머신 러닝 X 네트워크 탐지 모델 도입](https://10.147.128.150/11829/) - 배경 배민 앱에서는 많은 음식점 중 선택을 해야 하는 사용자들의 고민을 덜어 주고자 리뷰 서비스를 제공합니다. 사용자들은 작성된 리뷰 내용 및 평점을 참고하여 메뉴를 선택하는 경우가 많습니다. 높은 평점과 후기가 좋은 리뷰를 확보하는 게 중요하다 보니, 리뷰 작성 대행 업체나 다수의 계정을 동원해 허위 리뷰를 작성하는 일이 발생합니다. 이렇게 작성된 허위 리뷰를 그대로 방치하면 어떻게 - [하네스 엔지니어링(harness engineering)으로 팀 맞춤형 AI 환경 구축하기](https://10.147.128.150/26177/) - 개요 최근 팀에서 AI 코딩 도구를 활용하는 빈도가 늘어나면서, AI가 프로젝트의 고유한 맥락(context)과 컨벤션을 인지하지 못해 같은 설명을 매번 반복해야 하는 비효율을 자주 겪었습니다. 예를 들어 "user 조회 React Query 훅 만들어줘"라고 요청하면, 규칙을 모르는 AI는 공식 문서에 나올 법한 기초적인 형태로 코드를 짜줍니다. 결국 원하는 코드를 얻기 위해 매번 이런 설명을 덧붙여야 했습니다. 이 - [5년 동안 못 푼 배민 다국어 숙제, AI와 함께 한 달 만에 끝내기](https://10.147.128.150/26162/) - 들어가며 한국을 찾는 외국인이 연간 약 2천만 명을 넘어선 지금, 배민 앱은 이들을 위해 준비되어 있었을까? 메뉴를 주문하려면 우선 가게 이름과 메뉴명을 읽을 수 있어야 합니다. 하지만 한국어만 제공되는 배민 앱에서 외국인이 경험하는 첫 번째 장벽이 바로 여기 있었습니다. 배민은 이 문제를 알고 있었고, 5년 전부터 해결하려 해왔습니다. 그리고 매년 멈췄습니다. 2026년 1월, 우리는 다시 - [pnpm 모노레포에서 React 19 마이그레이션하기: 숨겨진 호이스팅 레이어가 만든 타입 충돌 트러블슈팅](https://10.147.128.150/26128/) - 배경: React 19 마이그레이션과 pnpm Catalogs pnpm workspace 기반의 모노레포 환경을 구축하여 프론트엔드 애플리케이션을 운영하고 있습니다. 기존에는 모노레포 내 여러 워크스페이스(앱)의 라이브러리 파편화를 막기 위해, 모든 의존성을 최상단(root)에서 일괄 관리해 왔습니다. 이에 따라 모든 앱이 동일하게 React 18 버전을 사용하고 있었으나, 최근 React 19로의 마이그레이션을 계획하게 되었습니다. 하지만 규모가 큰 모노레포 특성상 모든 앱을 한 - [별점 뒤에 숨겨진 리뷰의 온도, LLM으로 한 끗 차이가 다른 추천 만들기](https://10.147.128.150/25888/) - 추천프로덕트팀은 데이터 기반의 추천 알고리즘과 정교한 탐색 설계를 통해 사용자가 고민 없이 최적의 맛집을 발견하도록 돕는 조직입니다. 여기에 LLM과 다양한 AI 모델을 활용해 실질적인 서비스 문제를 해결하는 AI프로덕트팀이 긴밀하게 호흡을 맞췄습니다. 이번에 소개할 내용은 위 두 팀이 협업하여 고객의 맛집 탐색 고민을 성공적으로 덜어낸 프로젝트에 대한 이야기입니다. 서비스 내에 가득한 별점 5점 리뷰들 사이에서 진짜 - [흩어져 있는 AI 자산, 'MCP stdio'로 헤쳐모여!](https://10.147.128.150/25986/) - 그 프롬프트... 어딨더라? 우리는 여러 사람이 각자의 장비로 여러 개의 서비스와 저장소를 관리하고, 또한 여러 개의 도구를 사용합니다. 모두가 다른 환경에서 각자 작업하면서도, 일관된 방식으로 일을 하거나 결과물을 만드는 것은 아주 중요한 만큼 우리에게 익숙한 과정입니다. AI 자산이란? 여기서 자산이란 영어 단어 assets를 번역한 표현입니다. 일반적으로 쓰이는 용어는 아니나 이 문서에서는 AI 도구를 활용하기 위해 - [실험 0건인 조직에서, 가장 실험을 활발하게 하는 조직 되기 (B마트의 실험문화 빌드업 과정)](https://10.147.128.150/13726/) - 오늘은 과거 사례를 기반으로 B마트에서 실험 문화의 성숙단계를 지나온 과정들을 돌아보며, 이야기를 나눠보고자 합니다. 들어가기 전에 오늘 이 글에서 다루는 실험에 대한 개념을 잠깐 짚고 시작하겠습니다. 본 글에서 다루는 '실험'이란? '온라인 종합 대조 실험'을 이야기할 예정입니다. 온라인 종합 대조 실험은 때로 A/B 테스트, 다중변형테스트, 분할 테스트라고 불리기도 합니다. 신뢰할 수 있는 데이터를 수집하고, 함정을 탐지하는데에 - [우아한선물하기 초초초 클로즈 베타 개발이야기](https://10.147.128.150/7225/) - 안녕하세요. 라이브선물스쿼드에서 프론트엔드 개발하는 송요창입니다. 우아콘2021에서 발표했던 우아한선물하기 초초초 클로즈베타 개발 이야기 내용을 바탕으로 재구성하여 저희가 어떻게 일하는지 소개하려고 합니다. 첫 돌 지난 배민선물하기 우아한선물하기를 소개하려면 먼저 배민선물하기를 설명해야합니다. 자세한 소개는 강미경님의 배민선물하기 다시 만들기 발표를 보시면 더 자세히 아실 수 있습니다. 여기서는 간단히 소개하겠습니다. 배민선물하기는 작년(2020년 10월)에 선보인 서비스입니다. 첫 돌 지나고 걸음마하는 아이라고 - [코드리뷰가 쏘아올린 작은공](https://10.147.128.150/2712/) - 안녕하세요. 우아한형제들 배민선물하기팀에서 프론트엔드 프로그래밍하는 송요창입니다. 코드리뷰 도입한 배경과 이후 찾아온 변화에 관해 이야기하려고 합니다. 뜨거웠던 개발 후 외로운 사람들 저희 팀은 작년 하반기에 사전예약 프로젝트를 진행했습니다. 기존 서비스와 다른 부분이 많아 전시영역부터 결제, 대사까지 여러 팀과 협업하며 새롭게 만들어야 했습니다. 적은 일손으로 진행하다 보니 정말 모든 팀원이 바쁘게 일했습니다. 배민 내 서비스는 사용자가 주문한 - [AI로 바뀐 건 업무가 아니라 사람이었습니다](https://10.147.128.150/26034/) - 시작은 옆자리 동료의 한숨이었습니다 "이번 주말도 반납해야 할 것 같아요." PM으로 일하는 동료는 일요일 밤이면 미리 출근을 했습니다. 평일에 일이 너무 많아서 불안했거든요. 특히 회의록 정리에 시간을 많이 뺏겼습니다. 회의가 끝나면 녹음 파일을 돌려보고, 내용을 정리하고, 요약해서 공유해야 하는데, 그 과정에만 30분씩 걸렸습니다. 하루에 회의가 서너 개면 정리만 하다 하루가 갑니다. 정작 중요한 기획 업무는 - [RAG, 들어는 봤는데... 내 서비스엔 어떻게 쓰지?](https://10.147.128.150/25900/) - RAG을 들어는 봤는데, 내 서비스엔 어떻게 적용하지? 직접 구현하며 겪은 교육운영 RAG 사례를 바탕으로, 필요성 평가부터 색인·생성·평가 파이프라인까지 6단계 구축 가이드와 유의사항을 공유합니다. - [AWS에서 보안 감사 및 이상징후 탐지](https://10.147.128.150/2603/) - Introduction Summary AWS에서는 유용하게 사용 할 수 있는 log들이 있다. 그 중에서도 cloudtrail log를 수집/분석하여 정보보안 및 운영의 효율성을 높이는데에 도움이 되는 기술을 공유하고자 한다. Backbround AWS의 모든 서비스와 기능들은 서로 API로 연동되어 동작하고, API로 사용자와 상호 작용이 이뤄진다. 그렇기때문에 API들의 흐름을 제대로 파악해야 보안 감사가 가능하고, 이슈가 생겼을때 대응이 가능하다. cloudtrail log는 AWS의 모든 - [AWS에서 네트워크 공격 자동차단 하기](https://10.147.128.150/2558/) - Introduction Summary 최근 Public cloud 시장이 활성화 되면서 많은 기업들이 Cloud 도입을 시작하고 있으며, 한국의 경우 대표적으로 Amazon Web Service(AWS)를 사용하고 있다. 그리고 한국의 Seoul region(ap-northeast2)은 2017년 12월 기준으로 AWS Global 매출 TOP 5에 포함된 만큼 폭팔적으로 사용량이 늘어나고 있다. 그러나 Legacy환경의 IDC과 너무도 다른 환경에서의 보안은 쉽지 않기때문에 본 글에서는 우아한형제들의 AWS에서 기술적인 보안 - [Hybrid-Cloud 환경에서 보안인증 준비 하기](https://10.147.128.150/2565/) - 들어가며... 지난 2월 오석윤님이 포스팅해주신 [AWS에서 네트워크 공격 자동차단하기]의 Summary에서 내용을 일부 가져오고자 합니다. “Public Cloud 환경에서의 서비스 운영은 Legacy 환경의 IDC 서비스 운영과는 너무도 다르기 때문에 보안이 쉽지 않다.”. 하지만 공개되어 있는 공간이므로 실제 심사 결과의 취약점은 다루지 않고 심사를 준비하며 겪었던 내용을 바탕으로 포스팅해보겠습니다. 솔직히 기술적인 부분이 많이 들어가지 않은 글을 기술 블로그에 - [AWS에서 서버(EC2) 패킷 미러링 하기](https://10.147.128.150/2580/) - Introduction Summary Public cloud의 문제점중 하나는, 가시성 확보가 어렵다 이다. 보안을 위해서 여러 Layer의 가시성 확보가 필요한대, 특히 Network 트래픽 데이터에 대해서는 필수이다. on-premise 환경에서는 TAP hardware 장비등을 이용하여 가시성 확보가 가능 했지만, Public cloud에서는 hardware를 사용할 수 없기때문에 다른 방법을 사용해야 한다. 리눅스 서버의 경우 iptables의 TEE module을 사용하여 간편하게 네트워크 트래픽을 미러링 할 - [AWS 멀티 계정 환경에서 취약한 Security Group 설정 모니터링](https://10.147.128.150/2665/) - 들어가며 클라우드 서비스의 장점은 리소스의 탄력적 사용, 비용 절감, 운영에 대한 부담 감소에 있다. 하지만 보안 관점에서는 이러한 클라우드 서비스의 장점이 취약점으로 작용한다. 클라우드 환경에서는 개발자가 직접 리소스를 관리할 수도 있다. 이는 편하고 빠르게 개발할 수 있다는 장점이 되지만, 반대로 보안을 챙기는 사람 입장에서는 시시각각 변화하는 리소스를 어떻게 안전하게 보호할 수 있는지에 대해 고민이 될 - [사례별로 알아본 안전한 S3 사용 가이드](https://10.147.128.150/6217/) - 우아한형제들 인프라보안팀에서 근무하고 있는 이주호입니다. ‘S3를 왜 안전하게 사용해야 하는지 이해’하고 몇 가지 사례를 예시로 들어 ‘더욱 안전하게 사용하기 위해 설정해야 하는 기능’과 ‘사용 가이드’를 제시하여 많은 클라우드 관련 개발 및 보안 엔지니어분들에게 도움이 되고자 합니다. - [코파일럿 “열일”하게 만드는 방법](https://10.147.128.150/21240/) - 깃허브 코파일럿(Github Copilot)은 IDE에서 사용할 수 있는 AI 페어 프로그래밍 도구입니다. 2021년에 최초로 공개된 비교적 젊은 툴이지만, 이제는 단 한 번이라도 사용해 본 적 없는 개발자를 찾기가 어려울 정도로 프로그래밍 필수 준비물이 되었는데요. 우아한형제들에서는 개발직군 구성원들이 코파일럿을 사용할 수 있도록 유료 구독을 지원하고 있습니다. 처음에는 저도 코드 자동완성 기능만 사용했는데요. 코파일럿에 점점 익숙해지다 보니 어떻게 - [데이터카탈로그 PM이 '데이터 디스커버리'라는 가치를 풀어내는 방법](https://10.147.128.150/21353/) - 데이터 디스커버리란 조직 내에 존재하는 다양한 데이터를 쉽게 찾고 이해하여 분석에 활용할 수 있도록 돕는 과정입니다. 사용자 입장에서 이는 마치 거대한 서점에서 필요한 책을 찾는 것과 비슷합니다. 서점에는 수많은 책들이 있지만 이름만 알고 정확한 위치를 모르면 찾는 데 많은 시간이 걸립니다. 어떨 땐 정확한 이름도 모르는 상태에서 우선 둘러만 보려고 서점에 가기도 합니다. 데이터 디스커버리 - [Spring Cache(@Cacheable) + Spring Data Redis 사용 시 record 직렬화 오류 원인과 해결](https://10.147.128.150/22767/) - 이 글은 Spring Data Redis에서 GenericJackson2JsonRedisSerializer를 사용할 때 발생할 수 있는 직렬화 문제를 다룹니다. 직렬화 방식에 따라 문제가 나타나지 않을 수도 있으므로, 다른 직렬화기를 사용하는 경우에는 영향을 받지 않을 수 있습니다. 최근 프로젝트에서 record와 Spring의 @Cacheable을 함께 사용하던 중, 예상치 못한 문제를 마주했습니다. 처음에는 단순한 캐시 설정 이슈로 보였지만, 원인을 추적하던 중 Spring Data Redis와 - [안녕하세요! AI UX라이터 제민희입니다. 무엇을 도와드릴까요?](https://10.147.128.150/23836/) - ➊ '진짜' 문제 정의하기 "라이팅 업무 효율성을 개선할 거예요!"라는 두루뭉술한 이야기 말고요. 서로를 이해하기 위한 첫 단추는 어떤 문제를 해결할지 범위를 구체적으로 정의해보는 것이었습니다. 문제의 실체를 확인하면 기술적 가능과 불가능도 보다 정확히 가늠할 수 있을 테니까요. 실제 UX라이팅 검토 지원 요청 전체를 분석해 봤습니다. '가이드 원칙의 일관성 체크'와 '의미 전달을 명확히 하기 위한 문구 수정' - [배달의민족 주문접수 채널에 Flutter를 도입하며 고민한 것](https://10.147.128.150/24337/) - 들어가며 배달의민족 주문접수 채널은 파트너의 주문 관리를 돕기 위해 매일 수백만 건의 주문을 실시간으로 처리하며, 다양한 디바이스를 지원하고 있습니다. 점차 다양해지는 디바이스 생태계에 대응하고자, 신규 제품에 Flutter + Clean Architecture를 선택했고, 나아가 비즈니스 요구사항에 더 빠르게 대응하기 위해 웹뷰 기반 컨테이너 앱(App Shell)으로 전환까지 진행 중입니다. 이 글에서는 Flutter 도입 과정과 아키텍처 설계 경험을 공유합니다. - [좋은 DB 엔지니어가 되기 위한 습관 만들기](https://10.147.128.150/5869/) - mysql> SHOW SESSION STATUS LIKE 'sort_rows'; +--------------------+--------+ | Variable_name | Value | +--------------------+--------+ | Sort_rows | 0 | +--------------------+--------+ 1 row in set (0.01 sec) 안녕하세요~! 저는 클라우드스토리지개발팀에 2021년 2월에 주니어 DB 엔지니어로 팀에 합류하게 된 손구영입니다. 입사 후 시니어 팀원분들에 비해 부족한 역량을 채우기 위해 여러 테스트와 작업을 하며 Feedback을 받고 있습니다. 여러 시니어분들의 - [구름톡 업데이트 48시간 전, 그 치열함에 대하여](https://10.147.128.150/7949/) - 안녕하세요. 우아한형제들에서 만화경 안드로이드 앱을 개발하고 있는 채상아 입니다. 이전 글에서 말씀드렸듯이 Android 구름톡을 가지고 돌아왔습니다. 지난 2월, 구름톡 성과를 가지고 전사 발표까지 하게 됐는데요. 정말 영광이었습니다. 발표를 하고 나서 가장 공감받았던 부분은 바로 “정말 힘들었습니다” (한숨) 부분이었습니다. 오늘은 도대체 어떤 점이 힘들었고, 어떻게 해결했는지 이야기해 보려 합니다. 웹툰을 보다가 감정을 표현하고 싶을 때, 반응하고 - [장애 대응의 성패를 가르는 First Action: 우아한형제들의 장애 관리 라이프사이클](https://10.147.128.150/25189/) - 우아한형제들이 장애 대응의 핵심 지점으로 왜 첫 대응 조치인 First Action을 보게 되었는지와 이를 추적하기 위해 장애 관리 라이프사이클을 정립하게 된 배경, 그리고 실제 라이프사이클과 주요 추적 메트릭을 함께 설명합니다. - [사이드 프로젝트는 사이드가 아니다](https://10.147.128.150/16158/) - 사이드 프로젝트는 새로운 디자인과 기술을 시도하고, 검증하고, 시행착오를 겪을 수 있는 정말 좋은 방법의 하나입니다. 거듭된 실수와 실패의 경험으로 더 성공적인 결과를 만들 수 있게 해주는 수많은 사이드 프로젝트야말로 더 나은 세상을 만들기 위한 메인 프로젝트가 아닐까, 생각합니다. 저는 틈틈이 회사 안팎으로 사이드 프로젝트를 만들고 있는데요, 여기 몇 가지 작업을 소개합니다. 우아한 웹 툴킷 – - [B마트 주문 유실을 없애보자: 네트워크 편](https://10.147.128.150/17911/) - 안녕하세요 오랜만에 인프라 네트워크와 관련된 경험을 공유하고자 글을 쓰게 되었습니다. 우아한형제들은 퀵커머스 사업에 집중하면서 배민비마트 서비스는 비약적으로 사업 규모가 커졌습니다. 이는 곧 네트워크 가용성이 비즈니스 성과에 직접적으로 영향을 미칠 수 있다고 볼 수 있습니다. 이 글은 비마트 비즈니스 연속성을 높이기 위해 네트워크 인프라에 어떤 노력을 기울였고, 최근 1년의 운영 성과는 어땠는지 공유드리려 합니다. 글 순서는 - [Redis New Connection 증가 이슈 돌아보기](https://10.147.128.150/23121/) - 서비스 성능을 높이기 위해 여러 영역에서 캐싱을 활용하고 있습니다. 그중 사용자 맞춤 데이터를 빠르게 제공하기 위해 Redis를 사용하고 있는데요. Redis 관련 지표를 모니터링 하던 중 신규 커넥션 생성이 많은 현상을 발견하였습니다. 처음엔 단순한 설정 문제로 생각했지만, 원인을 추적하는 과정에서 Redis와 Lettuce, Elasticache의 동작 방식을 깊이 이해하게 되었습니다. 이번 글에서는 그 과정을 공유하려 합니다. 프로젝트 환경 - [우아한 디버깅 툴 2부: 좀 더 편하게 일하기 위한 개선들](https://10.147.128.150/23457/) - 지난 글 "우아한 디버깅 툴 1부: 웹뷰/웹페이지 원격으로 디버깅하기"에서는 이슈 정보를 쉽게 기록하고 공유하는 방법에 대해 다뤘습니다. 하지만 QA를 더 원활하게 진행하기 위해서는 아직 개선해야 할 부분이 많았습니다. 이번 글에서는 QA 업무 생산성 향상을 위해 추가한 기능들을 소개합니다. 들어가기 전 복습하기 기록방 : 원격 디바이스에서 기록한 데이터를 크롬 개발자 도구의 UI로 조회할 수 있는 페이지 - [코드 리뷰 봇으로 시작된 팀 문화의 변화](https://10.147.128.150/23639/) - 들어가며 WMS플랫폼팀은 B마트 서비스의 물류 플랫폼 중에서도 WMS(Warehouse Management System)를 담당하고 있습니다. WMS는 창고의 상태를 가시화하고, 무엇이, 어디에, 얼마나 있는지를 신뢰할 수 있는 데이터로 관리하는 시스템입니다. 이 목적을 달성하기 위해 다양한 기능과 프로세스를 제공하고 있습니다. WMS에 대한 조금 더 자세한 설명은 전체 서비스를 관통하는 도메인 모듈을 안전하게 분리하기를 참고 해주세요. 팀에서는 하나의 스프린트를 2주로 산정하고 - [Jira Automation으로 반복 업무를 효율적으로 관리해보자](https://10.147.128.150/23377/) - 반복적인 Jira 수동 작업에서 벗어나세요. 코드 없는 Jira Automation을 활용해 업무 효율을 극대화하고 집중력을 높이는 실전 노하우와 Smart Value, 웹 요청(Slack 알림) 연동 방법을 상세히 소개합니다. - [Server-Sent Events로 실시간 알림 전달하기](https://10.147.128.150/23199/) - 들어가며 식당에 있다 보면 “배달의민족 주문~!” 알림을 한 번쯤 들어보셨을 거예요. 이 알림은 주문이 들어올 때 사장님이 빠르게 확인하고 처리할 수 있도록 도와주는 주문 접수 프로그램에서 발생합니다. 이 프로그램을 만드는 팀이 바로 주문접수채널팀으로, Windows·macOS PC, 모바일 앱(Android, iOS), Android POS 등 다양한 환경에서 사용할 수 있도록 개발하고 있습니다. 그동안 알림 시스템은 큰 문제 없이 잘 - [100만 TPS 로그 시스템, KEDA를 이용한 오토스케일링 적용기](https://10.147.128.150/24405/) - 들어가는 글 우아한형제들의 수많은 시스템에서 남는 로그는 매우 방대한 양을 자랑합니다. 운영환경 기준으로 하루 수십TB의 데이터가 처리되고 있고, 피크타임 기준으로 초당 레코드 수는 100만 단위를 가뿐히 넘기고 있습니다. 이렇게 데이터가 많은 것만으로도 버거운데, 한 술 더 떠서 우아한형제들 서비스 트래픽은 극심한 변동성을 자랑합니다. 사용자의 요청이 많아질수록 로그도 증가하기 마련인데, 우형의 대표적인 서비스 ‘배달의민족’은 점심, 저녁 - [우리 팀엔 자바스크립트 상차만 하는 프런트엔드가 있었다](https://10.147.128.150/24066/) - 들어가며 세일즈서비스팀에는 아주 오래된 기술 부채가 한 가지 있었습니다. 프런트엔드 개발자라면 취업 준비할 때부터 당연하게 다루는 index.html 파일이 프런트엔드 리포지터리에 존재하지 않는 것이었죠. 프런트엔드 개발자로 입사하고 팀 프런트엔드 리포지터리를 구경하던 중 가장 의아하게 생각했던 점이었는데요. 알고 보니 index.html 파일은 백엔드 리포지터리에서 관리하고 있었고, 프런트엔드 개발자의 역할은 webpack과 같은 모듈 번들러로 빌드한 자바스크립트 파일을 백엔드 HTML - [장시간 비동기 작업, Kafka 대신 RDB 기반 Task Queue로 해결하기](https://10.147.128.150/23625/) - 장시간 비동기 작업, Kafka 대신 RDB 기반 Task Queue로 해결하기 | 전자계약서 시스템에서는 다양한 업무 목적에 따라 여러 형태의 대용량 엑셀 파일을 생성할 수 있습니다. 예를 들어 생산성 지표 엑셀, 근무 관리 엑셀, 행정 처분 추정 업주 엑셀, 계약현황 엑셀 등 각기 다른 조건과 데이터로 구성된 엑셀을 이메일로 받아볼 수 있는 기능인데요. 데이터 조건에 따라 엑셀 생성 시간이 오래 걸려, 화면에서 결과를 기다리지 않게 Kafka를 이용한 - [웹과 네이티브, 조화로운 공존은 가능한가? 플로팅웹뷰 도입으로 찾은 희망](https://10.147.128.150/24165/) - 여는 글 B마트, 장보기·쇼핑, 전국특가를 비롯한 배달의민족의 커머스 서비스는 끊임없이 진화하고 있습니다. 가게와 상품을 탐색하는 UX를 개선하기 위해서, 커머스 페이지에 다양한 UI 디자인을 연구하고 적용해 왔는데요, 이러한 활동의 일환으로 최근에 페이지에서 웹과 네이티브 영역을 적절히 섞어 구현해야 하는 상황이 생겼습니다. 이때 웹과 네이티브가 혼재된 영역보다 상위에 겹쳐서 띄우는 투명한 웹뷰를 사용하였고, 이를 '플로팅웹뷰'로 부르기로 하였습니다. - [우아한형제들이 장애를 놓치지 않고 탐지하는 방법](https://10.147.128.150/24488/) - 배달의민족을 사용하는 고객들은 늘 오늘의 식사를 기대합니다. 점심시간에 맞춰 미리 떡볶이를 주문하고, 저녁에는 치킨과 함께 축구 경기를 즐길 계획을 세우며 퇴근합니다. 하지만 주문을 하려는 순간 시스템 장애가 발생한다면 어떨까요? 단순히 메뉴를 바꾸는 번거로움에서 끝나는 게 아니라 기대했던 행복한 시간이 한순간에 무너져버릴 수 있습니다. 특히 월드컵 결승전을 치킨 없이 보는 것은 상상만으로도 괴로운 일이죠. 그래서 우리는 - [AI와 함께하는 테스트 자동화: 플러그인 개발기](https://10.147.128.150/24568/) - 프롤로그 저희 팀에서 관리하는 레포지토리는 7개입니다. 빠른 비즈니스 과제를 해내가며 필수 테스트코드만 작성하다 보니 커버리지가 부족한 레포지토리가 생겼습니다. 특히 엣지케이스나 예외 상황에 대한 테스트가 부족했고, 이는 운영 안정성을 떨어뜨리는 원인이 되었습니다. 30분 만에 100개 테스트 자동 생성, 어떻게 했을까? 100개의 단위 테스트를 작성하고, 실제로 동작하는지 검증까지 완료하는 데 30분이 걸렸습니다. BUILD SUCCESSFUL 총 테스트: 100개 - ["함께 구매하면 좋은 상품" 추천 모델 고도화](https://10.147.128.150/24434/) - 배달의민족에서는 음식 배달뿐만 아니라 장보기도 당일 배송이 가능하다는 사실, 알고 계셨나요? 배민의 장보기·쇼핑 서비스는 배민B마트를 비롯해 마트, 편의점, 꽃, 전자제품 등 다양한 셀러가 입점해 있어 다양한 물건을 빠르게 받아보실 수 있는데요. 고객이 서비스에 진입한 순간부터 구매를 완료하는 여정까지 최적의 상품을 발견할 수 있도록 개인화 추천, 함께 본 상품 추천, 실시간 트렌드 랭킹, 장바구니 추천, 결제 배달의민족에서는 음식 배달뿐만 아니라 장보기도 당일 배송이 가능하다는 사실, 알고 계셨나요? 배민의 장보기·쇼핑 서비스는 배민B마트를 비롯해 마트, 편의점, 꽃, 전자제품 등 다양한 셀러가 입점해 있어 다양한 물건을 빠르게 받아보실 수 있는데요. 고객이 서비스에 진입한 순간부터 구매를 완료하는 여정까지 최적의 상품을 발견할 수 있도록 개인화 추천, 함께 본 상품 추천, 실시간 트렌드 랭킹, 장바구니 추천, 결제 - [디자인 생산성을 높이는 피그마 플러그인을 만들어보자 1부: 디자인 편](https://10.147.128.150/21918/) - 이번 글에서는 디자인옵스TF의 프로젝트 중 하나인, 피그마 플러그인 ‘데이터브릿지’ 개발 과정을 중심으로, 어떤 고민들을 했고, 반복적인 디자인 작업과 불편한 리소스 수급을 어떻게 해결해 나갔는지 공유하려 합니다😀 ‘디자인옵스’라는 단어가 다소 생소하실 수 있을 것 같은데요. 저희도 아직 디자인옵스 TF에 대한 명확한 정의를 내리기엔 경험이 부족하지만, 작게는 일과 일 사이의 불편을 해소하며 디자인 프로세스를 개선하고, 더 나아가 - [디자인 생산성을 높이는 피그마 플러그인을 만들어보자 2부: 개발 편](https://10.147.128.150/21850/) - 들어가며 "디자이너님! 혹시 다음 기획 피그마 시안 나왔을까요?" 프론트엔드 개발자라면 한 번쯤 남겨봤을 질문일 겁니다. 디자이너는 UI/UX를 설계하고 프론트엔드 개발자는 이를 구현합니다. 두 역할은 밀접하게 연결되어 있지만, 서로의 작업 방식과 프로세스를 깊이 이해하기는 쉽지 않죠. 개발자들은 반복 작업을 자동화하는 스크립트를 작성하거나 필요한 도구를 직접 구현하며 생산성을 높이기 위해 노력합니다. 디자이너도 마찬가지입니다. 비효율적인 과정을 개선하고자 끊임없이 - [RADIUS 인증 실패 분석 및 해결 사례](https://10.147.128.150/21324/) - RADIUS 네트워크 인증 환경에서는 보안 강화를 위해 공인인증서를 사용하며, 공인인증서는 매해 갱신 작업이 필요합니다. 하지만 인증서 갱신 과정에서 예상치 못한 클라이언트 인증 실패가 발생하였습니다. 이 글에서는 공인인증서(Globalsign) 갱신 이후 발생한 RADIUS 인증 실패 사례를 분석하고, 원인과 해결 과정을 공유합니다. 공인인증서 갱신 후 RADIUS 인증 실패 문제를 경험했거나, RADIUS 인증 프로세스, 인증서 체계에 관심 있는 독자에게 - [우아한형제들 네트워크 인증시스템 교체기](https://10.147.128.150/9694/) - 네트워크 인증시스템 교체는 일년 동안(2021.05 - 2022.05) 진행한 프로젝트입니다. 담고 싶은 내용이 많지만 우아한형제들에서는 네트워크 인증시스템 변경을 통해 ‘무엇을 하고 싶었는지’ 그리고 ‘단계별로 어느 것을 고려하였는지’ 간략히 그 내용을 공유해보려 합니다. 배경과 목적 우아한형제들에서 기존에 사용한 네트워크 인증 방식은 맥 주소 인증방식입니다. 많은 회사에서 일반적으로 사용하는 방식입니다. 하지만 보안 취약점과 개인정보보호 중요성이 심화됨에 따라 대다수의 - [[모집] Hero Tech Course 2025, 글로벌 교육생을 모집합니다](https://10.147.128.150/21647/) - 우아한테크코스가 글로벌로 확장됩니다! 우아한테크코스의 백엔드 커리큘럼 학습부터 글로벌 기업 인턴십 기회까지, 2025년 여름, Hero Tech Course가 새롭게 시작됩니다.🚀 Hero Tech Course를 소개해요. Hero Tech Course는 우아한테크코스의 교육 철학을 기반으로 글로벌 환경에서 성장할 개발자들을 양성하는 교육프로그램입니다. 우아한테크코스는 ‘소프트웨어 생태계에 선한 영향력을’이라는 비전을 가지고, 소프트웨어 장인 정신을 갖춘 인재 양성을 목표로 우아한형제들이 운영하는 개발자 교육 기관입니다.(👉 우아한테크코스 - [Store에서 비동기 통신 분리하기 (feat. React Query)](https://10.147.128.150/6339/) - 오늘은 주문에서 사용하는 FE 프로덕트의 구조 개편을 준비하며 FE에서 사용하는 Store에 대해 개인적인 고민 및 팀원들과 검토하고 논의했던 내용을 소개합니다. 이 과정에서 생긴 여러 가지 의문과 도달한 생각, 그리고 React Query를 도입하기로 했던 배경을 소개하고자 합니다. - [Aurora MySQL를 운영하면서 알면 좋을 것 같은 미세한 팁](https://10.147.128.150/2653/) - 들어가며 안녕하세요. 우아한형제들에서 DBA로 근무하고 있는 유영근입니다. 저희는 AWS환경에서 RDS로 수많은 요청을 처리하고 저장하며 Aurora MySQL을 주력으로 사용하고 있습니다. 한정된 사람구하기 힘든 DBA로 수많은 DBMS를 효율적으로 운영하고 있으며 입사 이후 DB를 운영하면서 겪었던 몇가지 사례를 공유하고자 글을 쓰게 되었습니다. Aurora MySQL 데이터베이스의 특성을 이해하기 Aurora는 MySQL을 기반으로 개발되었지만 RDS MySQL 이나 On-Premise 환경에서와는 달리 운영을 - [가입은 쉽게, 로그인은 실패 없이! 휴대폰번호로 계속하기](https://10.147.128.150/15895/) - 회원 가입을 하려다 귀찮아서 포기한 적 있으신가요? 로그인 비밀번호를 잊어버려서 답답한 적 있으신가요? 배민에는 이메일, 카카오, 네이버, 페이스북 로그인을 비롯해 다양한 가입/로그인 수단이 있는데요. 바로 얼마 전까지 가장 큰 비중을 차지했던 것은 다름 아닌 ‘이메일 가입/로그인’이었습니다. (불과 1년 전, 이메일 가입/로그인이 메인이었던 배민) 그런데 이메일 가입/로그인은 아픈 손가락이었어요. 이메일 가입을 시도하는 사용자가 10명이라면 6명은 가입을 - [끊김 없는 사용 경험을 위하여 : 카카오톡 선물함 속 교환권을 배달의민족 주문으로 연결한 여정](https://10.147.128.150/25049/) - 플랫폼 간의 장벽을 허물어 고객의 잠든 카카오톡 교환권을 배달의민족의 주문 경험으로 전환하고, 대내외 복잡한 이해관계를 조율하며 사용자 편의성을 극대화한 여정을 소개합니다. - [WOOWACON 2025 미니게임 WOOWA POP!](https://10.147.128.150/24999/) - 지난 WOOWACON 2025 기술 콘퍼런스에서 미니게임을 운영했습니다. 우아팝(WOOWA POP!)이라는 이름의 수박 라이크(Suika-like) 게임이었습니다. 우아콘 세션 간에 플레이할 수 있고 미션이나 상위 랭킹을 달성하면 상품을 받을 수 있었습니다. 이렇게 쓰고 보니 별로 특별할 것 없는 프로젝트처럼 보입니다. 그런데 서문을 준비하며 개연성에 대해 찬찬히 고민해보니 아주 할 말이 없는 것도 아니더군요. 작은 우려에서 시작된 우아팝 개발에 관한 - [Delivering the Future: 글로벌 해커톤 2025, 준비부터 운영까지](https://10.147.128.150/24940/) - 들어가며 딜리버리히어로는 우아한형제들을 포함해 전 세계 70여 개국에서 다양한 브랜드를 운영하고 있습니다. 국가와 시장은 서로 다르지만 ‘더 나은 고객 경험’이라는 공통된 미션을 위해 모두 각자의 자리에서 기술로 다양한 도전을 해오고 있습니다. 이런 도전들을 더 단단하게 연결하기 위한 자리로, 올해 8월 글로벌 해커톤 2025가 진행되었습니다. 딜리버리히어로 본사가 위치한 독일 베를린을 베이스캠프로, 7개 엔티티, 60개 팀, 약 - [GPT를 활용한 카탈로그 아이템 생성](https://10.147.128.150/21294/) - 배달의민족, 그리고 AI가 만드는 상품 카탈로그 우아한형제들의 서비스 비전은 "문 앞으로 배달되는 일상의 행복"입니다. 배달의민족은 고객이 원하는 음식을 빠르고 안전하게 배달하며 성장해 왔습니다. 이제는 그동안의 경험을 바탕으로 식자재, 생필품, 가전제품 등 다양한 상품으로 서비스 범위를 확장하고 있으며, 이에 따라, 배달의민족을 통해 음식을 주문하는 것처럼, 생필품이나 생활용품을 구매하는 경우도 점점 많아지고 있습니다. 급하게 필요한 수건이나 양말 - [로봇 ML 모델의 경량화 1부: 훈련 후 양자화](https://10.147.128.150/18980/) - 오늘날 머신러닝(machine learning, ML) 모델 개발은 대부분 NVIDIA의 데이터센터 GPU(예: A100)나 워크스테이션 GPU(예: RTX4090)가 장착된 고성능 서버 환경에서 이루어집니다. 우아한형제들 로보틱스LAB에서도, 실외 배달 로봇의 자율주행에 사용할 ML 모델을 개발할 때 이러한 고성능 서버들을 사용합니다. 덕분에 매우 큰 데이터셋들과 다양한 고성능 ML 모델들을 손쉽게 다루고 있죠. 그러나 여기엔 한 가지 문제점이 있는데, 바로 고성능 서버 환경에서 - [AI 데이터 분석가 '물어보새' 등장 - 2부. Data Discovery](https://10.147.128.150/18362/) - 1부. RAG와 Text-To-SQL 활용에서는 구성원의 데이터 리터러시 향상을 돕는 AI 데이터 분석가 물어보새의 개발 계기, 목적, 핵심 기능, 그리고 RAG, LLMOps, Text-to-SQL과 같은 기술의 구현 방법에 대해 자세히 다루었습니다. 2부에서는 Text-to-SQL을 넘어, LLM을 활용해 사내의 다양한 데이터를 탐색하고 이해하여 유의미한 인사이트를 도출하는 물어보새의 Data Discovery 기능에 대해 설명하겠습니다. 1. 우리는 '왜' Data Discovery 영역으로 확장했을까? - [AI 데이터 분석가 ‘물어보새’- 3부. Agent로 더 넓고 깊은 지식 공유하기](https://10.147.128.150/23273/) - 프롤로그 AI 기술을 활용해 구성원의 의사결정을 지원하는 BADA(Baemin Advanced Data Analytics)팀은 우아한형제들 구성원의 데이터 리터러시와 업무 생산성 높이는 ‘물어보새’를 비롯해 다양한 AI 기반 데이터 프로덕트를 개발하고 있습니다. 2024년에 AI 데이터 분석가 ‘물어보새’를 공개한 이후 많은 분들이 BADA팀에 관심을 보내주셨습니다. 특히 “BADA팀은 지금 어디까지 왔나요?”라는 질문을 자주 받았습니다. 이 질문에 답하기 위해 이번 3부를 준비했습니다. 1부에서는 - [우리는 코드처럼 문화도 리팩토링한다](https://10.147.128.150/24820/) - 커머스웹프론트팀의 업무 프로세스 개선, 비동기 소통(불판), Jira/Sentry 자동화, 아키텍처 결정 기록(ADR) 도입 사례. 지속적인 배포처럼 문화를 개선하는 팀의 이야기 - [신입 백엔드 개발자 혼돈의 파일럿 프로젝트 돌아보기 (feat.정산플랫폼팀)](https://10.147.128.150/7828/) - 안녕하세요. 이제 막 파일럿을 끝내고 정산플랫폼팀에 합류한 신입 개발자 김윤정입니다. 길고 고되지만 재밌었던 우아한테크코스 교육을 끝내고 마침내 우아한형제들에 입사하게 되면서 행복 시작인 줄 알았지만...😅 듣기만 하던 파일럿 프로젝트를 시작하니 정신없는 하루의 연속이었습니다. (물론 여전히 행복했습니다 ㅎㅎ) 정산플랫폼팀(전 정산시스템팀)의 파일럿은 입사하기 전부터 유명하여 우아한형제들 개발 블로그 파일럿 회고를 여러 차례 읽어보았습니다. 세희님, 태현님, 우빈님, 시영님의 파일럿 글을 읽으면서 만약 내가 파일럿을 하게 된다면 그쯤에는 글에 나와 있는 것들을 다 아는 상태일 줄 알았는데…. 막상 파일럿을 시작할 때가 되니 여전히 아무것도 모르는 상태에서 맨땅에 헤딩하는 기분이었습니다. 이 글은 정산플랫폼팀 파일럿 프로젝트를 끝내고 돌아보며 간략히 배운 - [우당탕탕 정산어드민 시스템 파일럿 프로젝트 도전기(feat. 정산플랫폼팀)](https://10.147.128.150/8357/) - 들어가기 전에 안녕하세요🙂 우아한테크캠프pro(3기)를 수료하고 얼마 전 정산플랫폼팀에 합류하게 된 최영진입니다. 우아한형제들 기술블로그를 통해 자주 도움을 얻고 긍정적인 영향을 많이 받아왔었는데, 제가 정산플랫폼팀의 일원으로서 이곳에 글을 쓰고 있다니 정말 꿈만 같습니다! 이미지 출처: 영화 "나의 결혼 원정기" 팀에 합류한 후 약 4주간 소문으로만 듣던 정산 파일럿 프로젝트를 진행하였는데요, 소문(?)대로 쉽지 않은 과정이었지만 그만큼 많이 배우고 저의 - [Kotlin 테스트 코드 자동화 Intellij 플러그인 개발기](https://10.147.128.150/9440/) - 개발을 하다 보면 코드의 신뢰성을 검증하거나 내용을 전달하는 목적으로 테스트 코드를 많이 작성하게 되는데요. 다른 테스트 코드를 작성하는 것보다 단위 테스트(unit test) 코드를 작성하는 데에 가장 많은 시간을 투여하게 됩니다. 단위 테스트는 하나의 기능만 테스트하는 것이기 때문에 영향을 받는 부분이 매우 적으며, 비용이 저렴하기 때문입니다. 단위 테스트에서 반복되는 보일러 플레이트 코드 팀 내에서 이러한 테스트 - [기술블로그를 책으로, "요즘 우아한 AI 개발" 출간!](https://10.147.128.150/21584/) - 이번엔 AI 이야기 "요즘 우아한 AI 개발" 우아한형제들의 기술블로그 글을 엮은 두 번째 책, "요즘 우아한 AI 개발"을 소개합니다! 2023년 기술블로그 글을 엮어 펴낸 첫 책 "요즘 우아한 개발"이 좋은 반응을 얻은 데 힘입어, 이번에는 AI·데이터·로봇 이야기를 담은 시리즈 2탄, "요즘 우아한 AI 개발"을 출간했습니다. 🎉 로봇 개발 과정에서 얻은 실무 경험을 두루 담았습니다. AI - [기획부터 개발까지 전부 직접 했습니다 - 우테코 7기 크루 서비스 론칭!](https://10.147.128.150/24251/) - 우아한테크코스(이하 우테코)는 우아한형제들이 운영하는 10개월 과정 개발자 교육 프로그램입니다. 개발자 교육에서 기술만 배우면 될까요? 우테코는 소프트 스킬도 중요하게 생각하고 있습니다. 그래서 웹 백엔드, 웹 프론트엔드, 모바일 안드로이드와 같은 기술적인 과정뿐만 아니라 말하기와 글쓰기 교육을 같이 진행하고 있습니다. 커리큘럼은 5단계의 레벨로 구성되어 있는데요. 레벨 1, 2에서는 프로그래밍 기초와 프레임워크를 배우고, 레벨 3, 4에서는 기획부터 디자인, 개발까지 - [잃어버린 접근성을 찾아서](https://10.147.128.150/24605/) - 개발한 서비스의 접근성을 직접 확인해 보신 적 있나요? 바쁜 일정 속에 각종 요구사항을 반영하다 보면, 접근성은 흔히 '언젠가 챙겨야 할 착한 일' 정도로 치부되곤 합니다. 부끄럽지만 저희도 마찬가지였습니다. 그러나 접근성을 소홀히 하면 실제 사용 과정에서 예상보다 큰 불편이 생길 수 있습니다. 가령 상품을 구매하고자 화면을 수백 번 터치해야 한다면, 과연 그 서비스를 정상적인 서비스라고 부를 - [Delivering the Future, WOOWACON 2025](https://10.147.128.150/24289/) - 10월 28일, 가을 햇살이 포근하게 비추던 화요일 아침. 삼성동 그랜드 인터컨티넨탈 파르나스 연회장은 이른 시간부터 밝은 목소리와 긴장감으로 가득했습니다. 우아한형제들의 기술 콘퍼런스, “WOOWACON 2025”가 막을 올렸습니다. 올해의 주제는 “Delivering the Future.” ‘미래를 배달한다’는 이 문장에는, 우리가 만드는 기술이 세상을 더 따뜻하게 바꾸고, 내일을 조금 더 가까이 전달하고자 하는 마음이 담겨 있습니다. 🌟 기술, 사람, 그리고 - [Vite에서 CSS 우선순위를 지키는 법: 우아한공방의 문제 해결기](https://10.147.128.150/23866/) - 들어가며 우아한공방은 배달의민족을 비롯해 다양한 우아한형제들 서비스 전반에서 일관된 UI/UX를 제공하기 위해 구축된 디자인 시스템입니다. 참고: "우아한형제들의 새로운 디자인 시스템 '우아한공방'을 소개합니다: 개발 편", WOOWACON 2023 발표 영상 이번 글에서는 Vite 환경에서 발생한 CSS 우선순위 문제를 어떻게 해결해 나갔는지 그 과정을 자세히 풀어보려고 하는데요, 실제로 우아한공방에서 겪은 스타일 우선순위 충돌 이슈가 무엇이었는지, 이를 해결하기 위해 - [[공지] 우아한형제들 기술블로그 개인정보처리방침 일부 변경에 관한 안내](https://10.147.128.150/24005/) - 안녕하세요. 주식회사 우아한형제들 기술블로그 개인정보처리방침을 일부 변경하게 되어 이를 알려드립니다. ◼︎ 개정 사유 개인정보의 수집·이용 및 보유 및 이용 기간 개인정보의 파기절차 및 방법 현행화 쿠키 허용/차단 방법 현행화 ◼︎ 개정 일자 공고 일자: 2025년 11월 12일 시행 일자: 2025년 11월 20일 ◼︎ 개정 세부 내용 ◼︎ 개정 세부 내용 구분 개정 전 개정 후 - [LLMOps로 확장하는 AI플랫폼 2.0](https://10.147.128.150/22839/) - AI 기술은 빠르게 진화하고 있습니다. 우아한형제들 AI플랫폼팀은 그동안 AI플랫폼 1.0을 통해 머신러닝(ML) 모델을 개발·배포·운영을 지원하는 MLOps 플랫폼을 구축해 왔습니다. AI플랫폼 1.0의 상세 내용은 아래 글에서 다뤘습니다. 배민 앱에도 AI 서비스가? AI 서비스와 MLOps 도입기 제목은 안정적인 AI 서빙 시스템으로 하겠습니다. 근데 이제 자동화를 곁들인… 대규모 언어 모델(LLM)의 등장은 AI 개발 환경을 근본적으로 변화시켰습니다. 이제는 모델을 - [복잡한 LLM 연동, GenAI SDK 하나로 끝내기](https://10.147.128.150/23667/) - 쏟아지는 LLM provider들, 어떻게 관리하시나요? LiteLLM과 Langfuse를 기반으로 API 호출, 키 관리, 로깅, 프롬프트 관리를 하나로 통합한 우아한형제들의 GenAI SDK 개발기를 만나보세요. - [제목은 안정적인 AI 서빙 시스템으로 하겠습니다. 근데 이제 자동화를 곁들인...](https://10.147.128.150/19548/) - 우아한형제들의 AI플랫폼에서 AI서비스를 빠르게 서빙하기 위한 자동화 시스템을 소개합니다. 이를 통해 모델 학습에만 집중하고 나머지 작업은 신경 쓰지 않아도 되도록 구성한 방법을 알아봅니다. 자동 배포부터 모니터링, 알림, 장애 대처까지 자세히 살펴보겠습니다. - [우아한 디버깅 툴 1부: 웹뷰/웹페이지 원격으로 디버깅하기](https://10.147.128.150/23343/) - 버그 재현, 생각보다 쉽지 않습니다 버그가 발견되었을 때 프론트엔드 개발자가 가장 많이 하는 말이 있습니다. “제 기기에선 잘 되는데요…?” 이슈가 발생하면 우리는 가장 먼저 상황을 똑같이 재현해보려 합니다. 하지만 재현이 항상 되는 건 아닙니다. 간헐적으로만 나타나거나, 특정 계정·환경에서만 발생하는 경우도 많죠. 예시 상황으로 알아보기 예를 들어, ‘기석이네 상점’에서 ‘첫구매 전용’ 상품을 주문한 뒤 반품을 시도했는데, - [이제 Redis를 멈춰보겠습니다: @CacheEvict 파헤치기](https://10.147.128.150/23138/) - @CacheEvict의 allEntries=true 사용 시 Keys가 호출된다. 이는 금지 명령어로 실패하거나 서비스 지연(Block)으로 이어진다. Bean 재정의로 Scan 변경 방법과 실무에서 allEntries를 피해야 하는 이유에 대해서 살펴본다. - [우아한 Cloud FinOps 여정](https://10.147.128.150/22855/) - 클라우드는 이제 기업의 성장과 혁신을 뒷받침하는 핵심 인프라로 자리 잡았습니다. 새로운 서비스를 빠르게 실험하고, 트래픽 변화에 따라 유연하게 확장하며, 글로벌 시장에도 손쉽게 진출할 수 있도록 해주죠. 하지만 비용 측면에서는 기존 온프레미스 환경과 전혀 다른 도전에 직면하게 되었습니다. 과거에는 서버를 직접 구매해 데이터센터에 설치했기 때문에 예산에 맞춰 지출을 통제하기가 비교적 쉬웠습니다. 반면 클라우드는 필요한 만큼 빌려 - [[마감] WOOWACON 2025에 지금 등록하세요!](https://10.147.128.150/23037/) - 우아한형제들의 기술 콘퍼런스, WOOWACON 2025가 오는 10월 28일(화), 삼성동 그랜드 인터컨티넨탈 서울 파르나스 호텔에서 개최됩니다 🙌 근본적인 가치를 다지고 더 큰 변화를 향해 나아가는 배민 2.0의 기술적 도전과 함께 백엔드, AI/ML, 데이터, 프런트엔드, 모바일 앱, 로봇, PM, 디자인/UX, 보안, 문화/성장 등 다양한 분야의 발표 세션이 준비되어 있어요. 발표 세션뿐 아니라 작년에 뜨거운 관심을 받은 참여형 - [우아한테크코스 8기: AI가 코드 짜는 시대, 그래도 개발자가 되시겠습니까?](https://10.147.128.150/22828/) - "AI가 코딩을 대신하는데, 지금 개발을 시작해도 의미가 있을까?" 개발자를 꿈꾸는 여러분의 마음속에 이런 불안감이 자리 잡고 있을지 모릅니다. 미래는 정답이 없고, 어디로 튈지 모르는 공처럼 불확실하기만 하죠. 이러한 막막함 때문에 모든 것을 완벽하게 준비하려고만 하다가, 정작 시작조차 하지 못하고 있지는 않나요? 하지만 우리는 믿습니다. 이런 불확실한 시대일수록, 도전 정신이야말로 가장 중요한 역량입니다. 우아한테크코스는 지난 7년간 - [우리 서비스와 연결된 MCP Server 빠르게 구현해보기: MCP 해커톤 후기](https://10.147.128.150/22342/) - 들어가며 LLM, 그리고 AI Agent에 관한 관심이 뜨거운 요즈음입니다. 우아한형제들에서도 사내 지원으로 LLM ChatBot이나 AI Code Generate 도구를 지원하고, 구성원들이 자발적으로 사내 메신저에 AI TIL (Today I Learned) 채널을 만들어 정보를 교류하는 등 변화하는 흐름에 주목하고 있습니다. 이러한 분위기 속에 AI에 관심을 가진 개발자 몇몇이 모여 MCP(Model Context Protocol) 서버 해커톤을 진행했는데요. 이 행사에 참여한 - [우아~한 장애대응](https://10.147.128.150/4886/) - 안녕하세요. 우아한형제들 시스템신뢰성개발팀 박주희입니다. 얼마 전에 시스템신뢰성개발팀에 대해서 소개한 적이 있습니다. 그때, 팀 소개에서 시스템신뢰성개발팀에서 가장 중요한 업무 중 하나는 장애 대응이라고 설명했는데, 오늘은 이 장애 대응에 대해서 조금 더 자세하게 설명해보려고 합니다. 우아한형제들에게 장애란? 많은 서비스회사가 장애에 민감하게 반응하고 있습니다. 장애로 인해 금전적 손해가 발생하기 때문이기도 하지만, 그보다 더 큰 이유는 장애로 인한 고객 - [가정의 달 이벤트가 쏘아올린 배민선물하기 대란.ssul](https://10.147.128.150/5073/) - 안녕하세요. 우아한형제들 배민선물하기팀에서 서비스기획을 담당하고 있는 진예령입니다. 기술블로그는 처음이지만 저희만 알고 있기엔 살짝 억울한(?) 프로젝트가 있어서 스리슬쩍 프로젝트 하나를 공유해보려고 합니다. 😂 저는 원래 프랜차이즈시스템팀에서 브랜드관 기획을 맡고 있었는데요. 작년 10월을 전후로 팀원 전체가 배민서비스실로 이동하게 되었어요. 올해 상반기까지만 해도 브랜드관 개편이 진행 중이었기 때문에, 선물하기팀으로 조직개편이 되었어도 계속 브랜드관을 안정시키는 데에 전념하고 있었어요. 3월에 - [외부 시스템 장애에 대처하는 우리의 자세](https://10.147.128.150/6447/) - 공통기술전략팀 박주희입니다. ‘한 아이를 키우려면 온 마을이 필요하다’라는 아프리카 속담 들어보셨나요? 이 속담이 IT업계에도 딱 맞는다는 생각을 자주 하게 되는데, 하나의 서비스를 잘 키우기 위해서 수많은 외부 시스템의 도움이 필요하기 때문이죠. 그럼 외부 시스템 연동은 왜 하나요? - [우아한테크코스 교육의 확대](https://10.147.128.150/9395/) - 우아한테크코스 5기를 모집합니다. 안녕하세요, 테크코스교육개발팀의 박재성(Jason)입니다. 우아한테크코스 4기 모집이 엊그제 같은데 벌써 5기 모집이 시작되었네요. 4기에는 모집 인원을 2배로 늘리는 등의 변화가 있었다면, 이번 5기부터는 모바일 안드로이드 교육 분야가 추가됩니다. 웹 백엔드 교육, 웹 프론트엔드 교육, 모바일 안드로이드 교육까지 총 3개의 교육 분야를 운영할 예정이며, 모집 인원은 각각 100명, 50명, 25명으로 총모집 인원도 4기보다 25명이 - [사장님용 통계 데이터 서빙하기](https://10.147.128.150/8240/) - 사장님용 통계 데이터 서비스, 우리가게NOW 프로젝트 작업기 - [Hygen을 이용한 컴포넌트 템플릿 만들기](https://10.147.128.150/12548/) - 이 글에서 다루는 것 이 글을 따라가기 위해서는 React에 대한 가벼운 지식과 CLI를 활용할 수 있는 환경이 필요합니다. 이 글은 Node.js 환경에서 직접 작성한 템플릿을 이용해 컴포넌트를 생성할 수 있는 CLI 기반 시스템 구축 방법을 담고 있습니다. 글을 따라가면 아래와 같은 CLI 기반 파일 생성 템플릿을 구축할 수 있습니다. 완성된 데모는 GitHub 리포지토리에서 확인하실 수 - [실시간 인덱싱을 위한 Elasticsearch 구조를 찾아서](https://10.147.128.150/7425/) - 안녕하세요, 우아한형제들 검색플랫폼팀 이윤재입니다. 저희 팀에서는 배달의민족 검색 시스템을 담당하고 있고, 사용자가 원하는 실시간 결과를 빠르게 제공하기 위해 노력하고 있습니다. 원하는 조건에 맞는 문서만 필터링하는 단계로, 개념 상 ES 에서는 query phase 에 대응됩니다. Decision step 필터링 된 문서를 대상으로, 정렬 및 페이징을 진행하여 최종 문서를 결정하는 과정입니다. Fetch step 최종 문서의 필드를 가져오고, highlighting - [메시지 발송 이중화 여정기](https://10.147.128.150/7724/) - 안녕하세요! 우아한형제들 공통시스템개발팀에서 메시지플랫폼을 개발하고 있는 이재훈입니다. 이 글에서는 작년에 진행한 SMS 발송 외부 시스템 이중화 프로젝트 이야기를 담아보았습니다. 어떤 이유로 이중화를 하게 되었고, 어떻게 이 과제를 해결할 수 있었는지에 대한 여정기를 담은 글입니다. 무슨 내용인가요? 작년에 진행한 SMS 발송 이중화 프로젝트의 여정을 담은 이야기입니다. SMS 발송 이중화를 하기 위해 어떤 난관이 있었고 이를 풀어가는 - [배민광고리스팅 개발기(feat. 코프링과 DSL 그리고 코루틴)](https://10.147.128.150/7349/) - 안녕하세요. 배민상품시스템팀에서 배민광고리스팅을 만들어나가고 있는 박세종입니다. 배민광고리스팅 서비스는 배민앱의 큐레이션이나 배달탭의 한식과 같은 화면에 가게광고리스트를 제공하는 역할을 담당하고 있습니다. 사용자의 요청과 각 화면에 맞추어 최적화된 가게들의 리스트를 추출하고 반환하고 있습니다. - it[shop] = ShopDetail(...) 와 같은 형태는 oeprator set 함수로 정의할 수 있습니다. - T 타입을 받아 필드의 타입과 value의 타입이 일치하도록 제한했습니다. 앞선 업데이트 - [웹툰도 같이 봐요: 만화경 구름톡](https://10.147.128.150/6803/) - 안녕하세요! 우아한형제들에서 만화경 앱 서비스를 만들고 있는 구지민, 안윤경입니다. 지난 11월 17일에 iOS 기종의 만화경 앱에서 구름톡이라는 새로운 기능을 추가했는데요, 만들게 된 계기와 과정을 공유하고 싶어서 이렇게 기술 블로그를 작성하게 되었습니다. - [Aurora MySQL vs Aurora PostgreSQL](https://10.147.128.150/6550/) - 안녕하세요, 클라우드스토리지개발팀 정지원 입니다. 최근 저희 팀에서는 Aurora MySQL로 운영되고 있던 대량 통계성 DB를 Aurora PostgreSQL로 이관하는 것을 검토중입니다. 그래서 오늘은 준비 과정에서 정리했던 내용들을 공유하고자 합니다. - [제품 운영 잘하기](https://10.147.128.150/6465/) - 저는 초보 아빠입니다. 일과를 마친 뒤 잠자는 자녀를 보면 "좋은 아빠가 될 거야"라고 다짐하게 됩니다. 건강하게 낳는 것뿐만 아니라 바르게 기르는 것도 부모의 역할입니다. 아이 발을 받치는 손, 출처: Omar Lopez on Unsplash 그 동안 소프트웨어 제품을 여러 개 만들었는데요, 신규 프로젝트를 출시하는 일은 재밌고 설레는 일입니다. 반면 출시한 제품을 오랫동안 운영해 보진 못했는데 개발자로서 - [우리는 모의장애훈련에 진심입니다 - Part 1](https://10.147.128.150/6557/) - 안녕하세요. 우아한형제들에서 TPM(Technical Project Manager)을 맡고 있는 임성현 입니다. 이번 글을 통해 이제까지 시도했고 지금도 진행 중인 모의장애훈련을 소개하려 합니다. 일상적으로, 딱딱하게 진행 할 수도 있는 이 작업을 어떻게 회사의 문화를 녹여 진행했는지 설명 드리려 합니다. 이번 글은 모의장애훈련을 어떻게 진행할지 구체적으로 알고 싶은 분도 좋고, 우아한형제들은 어떻게 장애대응과 같은 프로세스를 조직에 스며들게 하는지 사례가 - [셀프서비스 디자인시스템 #2 – 개발자 편](https://10.147.128.150/5327/) - 안녕하세요. 우아한형제들에서 웹프론트엔드 개발을 담당하고 있는 이미라, 이윤희, 임보영입니다. 셀프서비스를 만들면서 적용했던 디자인시스템에 관한 이야기를 공유하려고 합니다. 디자이너 입장에서의 디자인시스템이 필요했던 이유, 팀의 일하는 방식의 변화, 적용후기 등 디자인시스템의 개념적인 이야기는 디자이너편에 있으니, 이 글에서는 디자인시스템을 개발자 관점에서 코드 중심으로 다뤄보겠습니다. 디자인시스템을 이해하기 전에 시스템이란 무엇인지 알아보겠습니다. 시스템이라고 하면 컴퓨터 구조 내에서의 무엇인가를 생각하기 마련인데요. - [셀프서비스 디자인시스템 #1 - 디자이너 편](https://10.147.128.150/6305/) - 안녕하세요. 저는 우아한형제들 배민사장님디자인팀 플랫폼디자이너 태주희입니다. (아마도 디자이너로서는 테크 블로그에 처음으로 글을 쓰는 것 같네요.) 저는 1년 전 셀프서비스팀의 프로덕트 디자이너로 일할 때 셀프서비스 디자인시스템을 만들었던 이야기와 그로부터 1년 후인 지금은 어떤 변화가 있었는지에 대한 이야기를 해보려고 합니다. 배달의민족 서비스에는 앱을 통해 음식을 주문하시는 B2C고객과, B2B고객인 가게를 운영하는 업주님들이 계십니다. 셀프서비스팀은 B2B고객인 업주님들이 배달의민족을 잘 - [한명의 개발자를 양성하기까지](https://10.147.128.150/5977/) - 우아한테크코스 4기를 모집합니다. 안녕하세요. 테크코스교육개발팀 이동규입니다. 포비(우아한테크코스 백엔드 캡틴)와 함께 1기 모집을 시작했던 게 얼마 전인 거 같은데, 벌써 4기 모집을 시작하네요. 2021년은 프론트엔드 과정을 추가했는데요. 덕분에 올해 프로젝트는 예년보다 더 뜨거웠던 거 같네요. 작년에 이어 올해도 깜짝 소식을 전할 부분이 있는데요. 4기부터는 잠실 외에도 선릉 캠퍼스가 열립니다. 인원은 3기의 2배로 모집하여, 백엔드 100명 내외, - [가파르게 성장하는 서비스를 담당한, 한 품질담당자의 회고](https://10.147.128.150/9220/) - 그 어느 때보다 빠르게 지나간 지난 날의 QA 업무 회고 - [만들어 가며 알아보는 React: React는 왜 성공했나](https://10.147.128.150/8311/) - npm trends(npm에 등록된 패키지의 트렌드를 확인하고 비교할 수 있는 사이트) 기준 프런트엔드 UI 개발 라이브러리 순위는 1.React, 2.jQuery, 3.Vue입니다 불과 몇 년 전만 하더라도 UI 개발 라이브러리는 jQuery가 가장 인기가 있었습니다. 2018년 즈음부터 React가 jQuery를 앞서기 시작했는데요(npm trends 기준) 왜 jQuery에서 React로 프런트엔드 UI 개발 라이브러리의 흐름이 변경되었는지 간단히 알아보고, React의 기능들을 JavaScript로 직접 구현해 - [Actuator 안전하게 사용하기](https://10.147.128.150/9232/) - 안녕하세요, 우아한형제들 SOC팀에서 Application Security를 담당하고 있는 권현준입니다. 오늘 준비한 주제는 개발자에게 편리함을 제공하나, 잘못 사용하면 매우 위험한 Actuator를 안전하게 사용하는 방법입니다. 이 글이 개발자분들이나 보안담당자분들께 조금이나마 도움이 되었으면 좋겠습니다. 바로 내용 들어가죠! 🍀 Spring Actuator란 Spring Actuator는 org.springframework.boot:spring-boot-starter-actuator 패키지를 Dependency에 추가만 해주면 바로 사용할 수 있는 기능으로, Spring boot를 사용하여 Backend를 구현할 경우 애플리케이션 - [PostgreSQL Vacuum에 대한 거의 모든 것](https://10.147.128.150/9478/) - PostgreSQL을 사용하신다면 반드시 알아야 하는 개념! Vacuum에 대해 같이 알아봅시다 - [콘텐츠 브로드캐스팅이 가능한 CMS 만들기: 배민외식업광장 슬롯화](https://10.147.128.150/9521/) - 2022년 10월, 길다면 길고 짧다면 짧은 3개월간에 걸친 CMS(Content Management System) 슬롯화 프로젝트를 오픈했습니다. CMS 슬롯화가 어떤 프로젝트인지 또, 배민외식업광장은 앞으로 CMS를 어떻게 발전시켜 나가려고 하는지 공유하고 싶어 기술 블로그에 글을 쓰게 되었어요. 들어가기 전에 배민외식업광장에는 사장님들이 창업부터 가게를 관리하고 운영하는 과정에서 겪는 여러가지 어려움을 해결하는 데 도움이 되는 콘텐츠들이 매일 생산되고 있고, 이렇게 지금까지 - [절대적 Rule을 지켜 - Config Checker 개발기](https://10.147.128.150/7242/) - 안녕하세요, 시스템신뢰성개발팀에서 개발 중인 남윤서입니다. SRE팀에선 다양한 활동을 통해 장애 탐지, 예방, 복구, 사후처리를 하고 있는데요, 그중 장애 예방을 위해 Spring Boot 애플리케이션 설정값을 체크하는 시스템(Config Checker) 개발 경험을 공유하려고 합니다. - [공통시스템개발팀 코드 리뷰 문화 개선 이야기](https://10.147.128.150/7152/) - 안녕하세요. 공통시스템개발팀 배대준입니다. Merge Request(Pull Request)를 생성했는데 리뷰어는 묵묵부답이고 직접 요청하자니 업무를 방해하는 건 아닌가 걱정하신 적이 있으신가요? 작년에 저희도 Merge Request(이하 MR)가 쌓이면서 같은 고민을 시작했고 지난 1년간 코드 리뷰를 잘하기 위해서 코드 리뷰 문화를 개선한 과정을 이야기하려 합니다. 1년 전.. MR은 쌓여가는데 리뷰가 늦어서 직접 요청하는 경우가 자주 있었습니다. 그에 따라 리뷰이는 리뷰를 - [내가 경험한 B마트 프론트엔드의 온보딩 프로세스](https://10.147.128.150/6851/) - B마트 프론트엔드 신규 입사자의 온보딩 프로세스를 끝마치며 안녕하세요! 10월 26일 우아한형제들 B마트서비스팀의 웹 프론트엔드 개발자로 합류하게 된 권기석입니다. 오늘은 B마트 프론트엔드 챕터에서 진행하고 있는 신규 입사자를 위한 온보딩 프로세스에 대해서 이제 막 온보딩을 졸업한 신규 입사자 관점으로 함께 회고하는 시간을 가져보려 합니다! 🤩 프로젝트의 기술적인 이야기를 주로 말씀드리기보다는 신입 개발자가 온보딩 프로세스를 진행하면서 바라본 B마트 - [Java야..., 우리 그만 헤어져. Kotlin으로 환승연애](https://10.147.128.150/22586/) - 들어가며 배민페이플랫폼팀은 2025년 상반기 Java 기반의 레거시 시스템을 Kotlin으로 전환하는 프로젝트를 진행했습니다. 이번 전환은 단순한 언어 변경이 아니라, 테스트 기반 강화, 기술 부채 해소, 팀 내 개발 언어 통일 등 다양한 목표를 함께 담은 변화였습니다. 이 글은 그 과정에서 마주한 기술적 이슈와 해결 전략, 그리고 실제로 얻은 정량적·정성적 성과들을 담고 있습니다. 유사한 상황에서 Kotlin 전환을 - [갤럭시 S24가 찾아준 배민커넥트 Android 성능 이슈 해결기(feat. React Native)](https://10.147.128.150/15883/) - 우아한형제들에서는 배달의민족 앱뿐만 아니라 고객, 사장님, 라이더 사용할 수 있는 다양한 앱들을 개발하고 있는데요. 라이더서비스팀에서는 라이더를 위한 '배민커넥트 앱'을 react-native로 개발하고 있습니다. 이 글에서는 최근 출시된 갤럭시 S24와 관련하여 발생했던 Android 성능 이슈와 해결에 관해 이야기를 해보고자 합니다. 💡 프론트엔드 개발자 4명이 어떻게 앱을 개발하고 있는지 궁금하시다면, WOOWACON 2023 "배민도 React Native 해요?: 웹개발자들이 만들어 - [배차 정확도를 높이는 실거리 시스템 구축하기: OSRM, Kafka, 그리고 Redis](https://10.147.128.150/22396/) - 들어가며 배민커넥트 배차시스템에서는, 배차에 활용되는 거리를 단순한 직선거리에서 실제 경로 기반의 실거리로 고도화하는 작업을 진행했습니다. 고도화 과정에서 이벤트 드리븐 아키텍처를 도입하고 대량의 트래픽을 효율적으로 처리하기 위해 Redis를 다방면으로 활용했습니다. 이 글은 배차시스템팀에서 얻은 경험과 지식을 정리한 것으로, 유사한 서비스를 개발하시는 분들께 많은 도움이 되는 글이 되었으면 좋겠습니다. ㅤ 배차시스템이란? 배차시스템 소개 배차시스템은 배달을 고객에게 전달할 - [B마트 OMS의 물류주문관리를 통한 출고 최적화](https://10.147.128.150/22263/) - 우아한형제들의 B마트 OMS는 물류주문 관리 고도화를 통해 퀵커머스 운영 효율을 높이고 있습니다. 이번 사례에서는 예약배달 주문의 출고 분산 처리와 출고예정시각의 동적 산정을 통해 고객 수령 만족도는 물론, 라이더 대기시간과 현장 작업자 효율까지 함께 개선한 과정을 소개합니다. - [JavaScript Proxy를 활용한 상태 추적 도구 개발기](https://10.147.128.150/22246/) - 1. 레거시가 주는 고통 세일즈서비스팀에서는 사장님의 배달의민족 입점을 도와드리기 위한 입점신청, 계약 검수 및 승인 시스템, 전자계약서' 등 여러 지면을 개발하고 있습니다. 그중 전자계약서는 업주 정보, 가게 정보, 광고 정보 등을 입력하고 전자 서명을 통해 계약을 완료하는 핵심 지면입니다. 하지만 이 지면은 상태 관리 라이브러리(Redux, Zustand 등) 없이, 거대한 단일 객체에 모든 계약 관련 데이터를 - [우아한형제들 PM들이 추천하는 책(ver.2025)](https://10.147.128.150/22211/) - 우아한형제들 PM(Product Manager)들이 추천하는 책들을 기억하시나요? 우아한형제들 PM들은 어떤 책을 읽을까? PM을 준비하고 계신 분들, 또는 PM 업무를 더 잘하고 싶은 분들을 위해 2025년 버전으로 업데이트해 보았습니다. CPO 기호 님의 추천 책도 있으니 꼭 한번 보시면 좋을 것 같아요. (참고: 본문의 책 이미지를 클릭하면, 책 소개 사이트로 이동합니다.) 오래된 책이지만, 최근에 다시 읽은 애덤 그랜트의 - [B마트 테마관 개선기 : 오픈이 끝? No. 함께하는 동료들과 프로덕트 꾸준히 발전시키기](https://10.147.128.150/18719/) - 여러분, B마트에서 '신선관'과 '뷰티관'을 보신 적 있으신가요? 이 두 지면은 여러가지 카테고리 상품들을 하나의 테마로 모아둔 ‘테마관’인데요. 테마관은 여러 상품들을 하나의 테마로 모아서 보여주는 B마트 만의 큐레이션 지면입니다. 이 글에서는 테마관을 오픈한 것에 그치는 것이 아니라 개선하는 과정을 보여드리려고 해요. 데이터로 가설을 도출하는 방법부터 유관부서와 협력하는 과정, 성과 공유까지 있으니 다양한 경험이 비슷한 고민이 있는 - [로봇을 위한 MLOps #2: 엣지 파이프라인의 구성](https://10.147.128.150/17827/) - "로봇을 위한 MLOps #1: Edge device와 K3s, Airflow" 편에서는 로봇을 위한 머신러닝 모델을 개발하는 과정을 소개하고 이를 위해 MLOps 인프라스트럭처를 어떻게 구축하였는지를 설명하였습니다. GPU workstation 및 엣지 디바이스(edge device)들에 워커(worker) 노드를 설치하고 Kubernetes 및 Airflow를 사용해 이들 노드에서 전체 파이프라인을 실행하는 방법을 살펴보았습니다. 이번 편에서는 엣지 디바이스에서 작동하는 엣지 파이프라인(edge pipeline)의 구성, 그리고 이 파이프라인에서 - [이 과제의 성과는 뭔가요? 지표 중심 커뮤니케이션이 불러온 변화](https://10.147.128.150/20386/) - 배민앱에는 동네 사람들이 직접 추천하는 오프라인 가게와, 단골들이 남긴 후기를 주제별로 모아 볼 수 있는 서비스가 있습니다. 바로 "우리동네" 서비스인데요. 현재 송파구와 광진구에서 시범 운영하면서 전국으로 서비스 범위를 확장하기 전에 고객 가치와 품질을 높여가는 작업들을 하고 있습니다. "우리동네" 서비스를 만드는 배민우리동네팀은 기획자와 개발자가 한 팀인 목적 조직으로 이루어져있습니다. 매일 만나서 과제를 점검하고, 빠르게 기획-개발-배포-수정하며 '저세상' - [검색 성능 개선을 위한 Elasticsearch 인덱스 구조와 쿼리 최적화](https://10.147.128.150/20161/) - 2023년 12월, 배달의민족 앱 상단 검색 기능에 장보기•쇼핑 탭이 추가되었습니다. 검색 창에 검색어를 입력하고 장보기•쇼핑 탭을 누르면 비마트와 배민스토어 상품만 검색할 수 있는 기능입니다. 커머스검색개발파트에서는 Elasticsearch(이하 ES)를 활용해 커머스 검색과 상품 목록 페이지를 제공하는 리스팅 API를 개발하고 운영하고 있으며, ES를 보다 효율적으로 활용하기 위해 다양한 최적화 작업을 진행하고 있습니다. 비마트와 배민스토어 상품만 검색할 수 있는 - [만드는 사람이 수고로우면 쓰는 사람이 편하다: 사용자경험관리TF 활동 이야기](https://10.147.128.150/19575/) - 안녕하세요, 여러분 😀 올해 초 배민은 사용자들에게 ‘행복하고 편리한’ 앱 사용 경험을 제공하기 위해 사용자경험관리TF를 만들었어요. 오늘은 TF가 어떻게 시작되었고, 어떤 역할을 하고자 하는지, 그리고 실제 어떤 활동들을 해왔는지 등의 이야기를 해볼까 해요. 과거에 사용자를 위한 최적의 앱을 만들기 위해 많은 고민을 나누었던 기억이 있어요. 그때 우리는 이런 이야기를 자주 나눴죠. “자판기처럼 동전만 넣으면 음료수가 - [우리 팀은 카프카를 어떻게 사용하고 있을까](https://10.147.128.150/17386/) - 누가 읽으면 좋을까? 카프카(Kafka)가 무엇인지 알고 있는 독자를 대상으로 합니다. 기술적 구현방식을 다루기보단 카프카를 기반으로 한 다양한 기술적 개념에 대해서 얇고 넓게 소개하고, 우리팀에서 어떻게 적용하는지 사례를 공유합니다. 기술적 내용에 대해 자세히 알고 싶다면 공식문서나 다른 기술블로그를 참고해 주세요. 글 하단 "참고 자료"에 관련 링크도 첨부하였습니다. 아래와 같은 키워드가 등장합니다. 각 문단에서 개념을 간단하게 설명하며 - [WOOWACON 2024 발표 영상, 지금 바로 만나 보세요!](https://10.147.128.150/20789/) - 지난 10월 30일 많은 분들이 함께한 우아한형제들의 기술 콘퍼런스, WOOWACON 2024 발표 영상이 공개되었습니다.✨ 오프닝노트를 비롯해 백엔드, AI/ML, 프런트엔드, 로봇, PM, 디자인, 문화/성장, 이그나이트, 멘토링 세션 등 현장의 생생한 이야기를 영상으로 다시 만날 수 있습니다. 우아한테크 YouTube 채널 또는 WOOWACON 2024 웹 사이트에서, 지금 바로 관심 있는 세션을 확인해 보세요! 👉 우아한테크 YouTube 채널 👉 - [GuardDuty 이벤트 분석으로 살펴보는 침해대응 아키텍처 고도화 사례](https://10.147.128.150/21544/) - 갈수록 정교해지는 보안 위협은 고도화된 보안 아키텍처를 설계하고 구현하는 능력을 더욱 중요하게 만들고 있습니다. 이러한 보안 위협에 대응하기 위해 우아한형제들에서는 적절한 보안 서비스 모니터링 환경을 구축하고 위협 인텔리전스를 적극적으로 활용하고 있습니다. 본 글은 AWS GuardDuty에서 탐지된 아웃바운드 통신 이벤트를 중심으로, 위협 탐지 가시성 확보, 대응 자동화, 잠재적 위협 가시화 등 침해 대응 체계 고도화 과정을 - [실시간 마케팅을 위한 PoC 개발기](https://10.147.128.150/22043/) - 우아한형제들의 BUDS(Baemin User Data System) 팀은 배달의민족과 Delivery Hero 고객에게 더 나은 맞춤형 마케팅 경험을 제공하고자 Segmentum이라는 타깃팅 서비스를 개발하여 운영 중입니다. Segmentum은 그동안 일 단위로 데이터를 갱신해 왔으나, 실시간 마케팅에 대한 요구가 증가함에 따라 실시간으로 데이터를 업데이트해야 할 필요성이 생겼습니다. 이에 따라 실시간으로 데이터 갱신을 위한 데이터 파이프라인 아키텍처를 만들게 되었고, 이를 검증하고자 PoC(Proof - [Gemini와 삽질로 개발자의 뒤죽박죽, 뒤죽박죽 업무 메모 AI로 심폐소생시키기](https://10.147.128.150/21905/) - 개발자나 기획자라면 누구나 자신만의 방식으로 업무를 기록하고 추적합니다. 노션, 에버노트, 심지어 그냥 메모장(.txt)까지, 사용하는 툴은 각양각색이지만 많은 분들이 비슷한 방식으로 메모를 남깁니다. 바로 로그(log) 형식으로요. 오늘 있었던 일, 새로 결정된 사항들을 기존 메모 밑에 쭉 이어서 쓰는 거죠. 물론 이상적으로는 모든 정보가 완벽하게 정리되고 구조화된 '현행화 문서'가 항상 존재하면 좋겠습니다만 매일 쏟아지는 변경 사항에 대해서 - [타입 안전한 API 모킹으로 프론트엔드 생산성 높이기](https://10.147.128.150/22127/) - TypeScript 기반 API 모킹으로 프론트엔드 개발의 타입 안정성과 유지보수 효율을 높인 사례를 소개합니다. - [IllegalArgumentException은 400 Bad Request인가?](https://10.147.128.150/21686/) - 들어가며 API 개발을 하다 보면 예외가 발생할 때 어떤 HTTP Status Code를 응답해야 할지 고민하게 됩니다. 스프링 프레임워크를 사용하면 @ExceptionHandler와 @ResponseStatus를 이용해 예외 클래스의 응답을 매핑할 수 있죠. @RestControllerAdvice public class GlobalDefaultExceptionHandler { @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(IllegalArgumentException.class) public ErrorResponse onException(IllegalArgumentException exception) { ... } } 혹시 IllegalArgumentException을 400 Bad Request로 매핑하시나요? 이 예외는 주로 잘못된 인수로 발생하기 - [선제적 장애 대응을 위한 Sentry 최적화 적용기](https://10.147.128.150/21604/) - 서비스가 커질수록 중요해지는 장애 대응, 어떻게 하고 계시나요? Sentry를 통해 장애를 빠르게 인지하고 대응하기 위한 여정을 공유합니다. 선제적 장애 대응을 위한 에러 수집 고도화부터 담당자 알림까지 목표 수립과 달성을 위한 Sentry 최적화 적용기. 지금 시작합니다. - [생성형 AI 서비스: 게이트웨이로 쉽게 시작하기](https://10.147.128.150/19915/) - 생성형 AI는 현재 인공지능 분야에서 가장 주목받는 기술 트렌드 중 하나입니다. 특히 ChatGPT, DALL-E, Midjourney 등의 텍스트 및 이미지 생성 도구들이 대중에게 공개되면서, 전 세계적으로 기업들의 생성형 AI 도입 사례가 급증하고 있습니다. 우아한형제들의 AI플랫폼팀은 생성형 AI 기술을 효율적으로 활용할 수 있는 환경을 제공하여 서비스 개발의 생산성과 품질을 향상시키고자 합니다. 그 첫 단계로 AI API Gateway(이하, - [WMS 재고 이관을 위한 분산 락 사용기](https://10.147.128.150/17416/) - WMS 재고 이관 과정에서 발생한 동시성 이슈를 분산 락(Distributed Lock)을 사용해 해결한 경험을 공유하는 글입니다. 본 글은 분산 락에 대해 알고 있는 분들을 대상으로 작성되었습니다. 제가 경험한 내용들이 여러분들의 비즈니스에 도움이 되는 글이 되길 바랍니다. WMS란? 물류에서 사용되는 용어로 상품을 구별하기 위한 고유의 식별 코드입니다. 예를 들어, 인천DC(출발지)에서 송파잠실PPC(목적지)로 배달이 피규어(SKU: S01234)를 10개(이관 수량) 이관하기 - [데이터카탈로그에서 DataHub를 이용하는 방법](https://10.147.128.150/21434/) - 사내 데이터 디스커버리 도구인 데이터카탈로그는 DataHub를 기반으로 구축되었습니다. DataHub는 다양한 플랫폼과 연동되는 활발한 오픈소스 프로젝트로, 필요한 기능들을 새로 개발하지 않고도 활용할 수 있다는 장점이 있습니다. 그러나 DataHub를 처음 도입했을 때, 사내 구성원들로부터 UI/UX가 불편하다는 피드백을 받았습니다. 특히 데이터에 익숙하지 않은 사용자들에게는 DataHub의 다양한 기능들이 오히려 진입 장벽이 되었습니다. 저희는 사용자들이 원하는 데이터를 쉽게 찾고 활용하는 - [로봇 ML 모델의 경량화 2부: 양자화 인식 훈련](https://10.147.128.150/21176/) - "로봇 ML 모델의 경량화 1부: 훈련 후 양자화" 편에서는 Jetson 플랫폼의 특징, 양자화와 훈련 후 양자화에 대한 개념, TensorRT를 이용해 최적화를 하는 방법과 그 결과까지 알아봤습니다. 이번 편에서는 양자화로 인한 성능 저하를 막는 또 하나의 방법, 양자화 인식 훈련(Quantization Aware Training, QAT)에 대해 알아보겠습니다. 본격적인 내용에 앞서, 우아콘에서 발표한 "자율주행 로봇을 위한 머신러닝 모델의 추론 - [실시간 반응형 추천 개발 일지 2부: 벡터 검색, 그리고 숨겨진 요구사항과 기술 도입 의사 결정을 다루는 방법](https://10.147.128.150/21027/) - "실시간 반응형 추천 개발 일지 1부: 프로젝트 소개" 편을 읽고 2편을 기다려주신 여러분, 반갑습니다. (아직 안 읽으셨다면 읽고 오셔도 됩니다. 여기서 기다리고 있을 테니까요.) 오늘은 1편에 이어 실시간 행동 이력을 활용한 실시간 반응형 추천 시스템 의 개발에 대해 더 깊이 들어가 보도록 하겠습니다. 제 소개를 드려야겠네요. 저는 우아한형제들 추천프로덕트팀에서 AI/ML, Data Engineer를 하고 있는 정현입니다. - [프로덕트 전략, 어떻게 시작해야 할까?](https://10.147.128.150/21115/) - "이 방향이 맞을까?" 연말, 연초가 되면 많은 PM과 리더들은 내년도 로드맵과 서비스 방향성을 고민하며 이 질문을 스스로에게 던집니다. 무엇을 우선순위에 두어야 할지, 어떤 문제를 해결해야 할지, 그리고 그 문제를 어떻게 풀어나가야 할지에 대한 답을 찾는 과정은 설레면서도 막막함을 동반하죠. 규모가 크고 복잡한 제품을 관리할수록 이러한 고민은 더 깊어질 수밖에 없습니다. 조직을 같은 방향으로 이끄는 전략이 - [실시간 반응형 추천 개발 일지 1부: 프로젝트 소개](https://10.147.128.150/17383/) - 실시간 반응형 추천 개발 일지 1부: 프로젝트 소개 - [카프카 컨슈머에 동적 쓰로틀링 적용하기](https://10.147.128.150/20156/) - 이 글은 카프카(Kafka)를 사용하는 스프링 환경에서 메시지 처리 속도를 동적으로 조절해야하는 상황과 여러 쓰로틀링 기법들을 소개합니다. 카프카를 사용하는 스프링 프레임워크 환경에 익숙하고, 카프카의 기본 개념 및 컨슈머와 컨슈머 그룹, 파티션 구조를 이해하는 독자를 대상으로 작성되었습니다. 모든 예제의 전체 소스코드는 GitHub 저장소에서 확인하실 수 있습니다. 분산 서버에서 대규모의 요청이 발생할 때 수평 확장을 통해 처리량을 늘릴 - [이젠 보내줄 때가 되었다. 대규모 트래픽의 C++ 시스템 Java로 전환하기](https://10.147.128.150/20763/) - 사용자의 배달 주소를 기반으로 어느 행정동/법정동에 속해 있는지를 판단하기 위해 기존에는 C++로 작성된 웹 서버를 사용하였습니다. 서버 한 대당 피크 시간 기준 2000TPS를 상회하는 많은 요청을 10ms 이하 시간으로 응답할 수 있는 높은 성능을 제공했지만, C++의 특성상 여러가지 단점이 존재했습니다. 이를 Java 및 Spring Boot 기반으로 전환하기까지의 경험을 공유합니다. 배경 배달의민족에서는 배달 주소를 기반으로 어느 - [2024 선물카드 제목 짓기 대회가 탄생하기까지: 운영, PM, 개발 이야기](https://10.147.128.150/20938/) - 배민선물하기에서는 생일과 같은 일반적인 상황뿐만 아니라 집들이나 이직 같은 다양한 축하 상황, 출산이나 입원 등 몸보신에 어울리는 상황까지 모두 아우를 수 있도록 1천 개 이상의 카드를 제공하고 있습니다. 이 중 사용자의 참여로 만들어진 카드도 52개 제공되었습니다. 오늘은 이 52개의 특별한 카드가 함께 서비스될 수 있었던 흥미로운 이야기를 공유하고자 합니다. 특히 이번 글에서는 PM, 서버, 프론트, - [프롬프트 엔지니어링으로 메뉴 이미지 품질 검수하기: GPT 기반 업무 자동화](https://10.147.128.150/20408/) - GPT의 등장으로 생성형 AI 기술은 대화, 검색, 추천 등 다양한 분야에서 활용되며 빠르게 보편화되고 있습니다. 2024년 10월 기준, 국내 ChatGPT 사용자는 520만 명을 넘어서며 10명 중 1명 이상이 생성형 AI를 활용하고 있습니다. 하지만 기업의 실제 업무 환경에서 이 기술을 안정적으로 적용하기에는 다양한 과제들이 남아있습니다. 배달의민족은 지난 4월부터 GPT를 활용한 AI 이미지 검수 기능을 도입했는데요. 이번 - [[다시 보기] 12월 우아한테크세미나: 올해의 기술 콘퍼런스, 핵심만 골라봤습니다 - LLM 편](https://10.147.128.150/20702/) - 올해의 기술 콘퍼런스, 핵심만 골라봤습니다 - LLM 편 ㅤ 🎬 12월 우아한테크세미나 다시보기 2024년 12월 우아한테크세미나 주제는 "올해의 기술 콘퍼런스, 핵심만 골라봤습니다 - LLM 편"입니다. 올 한 해에도 정말 다양하고 혁신적인 기술 소식들이 매일 같이 이어졌는데요. 특히 AI 분야의 실용화 사례들이 많이 생겨나면서, 기술 콘퍼런스를 통해 각 회사의 사례를 소개하는 자리가 많이 있었습니다. 하지만 아쉽게도 - [우아한히트텍: 직군을 넘어, 개발자를 하나로 잇다](https://10.147.128.150/20841/) - 들어가며 우아한형제들 TX(Tech eXperience)팀은 개발자 경험을 중심으로 교육과 성장을 지원하는 팀입니다. '개발조직의 전문성 강화를 통해 조직 생산성 및 국내외 시장 경쟁력을 확보한다.'는 미션을 기반으로 개발 리더십/기술 교육, 네트워킹/교류 프로그램, 글로벌 협업 지원 등 다양한 프로그램을 기획하고 실행하며 개발자의 생산성 향상과 성장을 돕기 위해 고민하고 있습니다. 이번 우아한형제들의 전사 개발자 밋업 ‘우아한히트텍’은 TX팀의 이러한 고민과 노력이 - [리뷰를 재료로 GPT가 뚝딱뚝딱 만들어낸 메뉴추천, 메뉴뚝딱AI](https://10.147.128.150/16877/) - GPT 2023년 2월, OpenAI에서 개발한 ChatGPT의 등장으로 ‘생성AI’에 대한 관심이 비약적으로 증가했습니다. 인간과 유사한 대화가 가능해진 것을 경험하게 되면서 다양한 분야에서 생성AI 활용 가능성에 대한 기대감이 높아졌죠. 하지만 한편으로는 많은 회사에서 이것이 단순한 유행에 그치는 것은 아닌지, 실제 비즈니스에 어떤 가치를 가져다 줄 수 있을지 하는 의문도 있었습니다. 채팅을 통해 GPT 기술을 경험할 수 있는 - [postgres_fdw로 마이그레이션 생산성 높이기](https://10.147.128.150/20371/) - 배달의민족 커머스 서비스들의 ‘상품’ 도메인 시스템 통합 프로젝트를 하며 postgres_fdw를 이용해 PostgreSQL DB 간의 별도 배치 애플리케이션 없이 마이그레이션을 경험했던 실제 사례 및 결과와 주의사항, 느낀 점들을 공유하고자 합니다. 배달의민족 앱에서 아이폰을 주문해 보신 적 있으신가요? 음식뿐 아니라 장보기・쇼핑, B마트, 전국별미, 배민상회, 대용량특가 등 다양한 커머스 서비스의 상품을 주문해서 배달 또는 배송으로 받아보실 수 있습니다. - [최적화된 인스턴스 추천을 위한 Rightsizing Recommendations 시스템 개발 여정](https://10.147.128.150/19685/) - 우아한형제들의 클라우드 인프라가 빠르게 성장함에 따라, 효율적인 비용 관리는 중요한 과제가 되었습니다. 이를 해결하기 위해, 팀은 인스턴스 비용 최적화를 목표로 Rightsizing Recommendations 시스템을 개발했습니다. 이 시스템은 클라우드 리소스 사용량을 분석하여 최적의 인스턴스 타입을 추천하고, 비용 효율성을 향상하는 데 중점을 두고 있습니다. 이 글에서는 Rightsizing Recommendations 시스템을 개발하게 된 배경과 시스템 설계 과정, 적용 방법과 이를 - [PM, 디자이너, 개발자가 함께한 배달의민족 입점 과정 개선기](https://10.147.128.150/20627/) - 01. 들어가며 안녕하세요! 세일즈서비스팀은 '사장님이 고민하지 않고 신속하게 배달의민족에서 장사할 수 있는 서비스를 제공한다.'는 비전을 바탕으로 배달의민족의 입점할 수 있는 두 가지 방법인 전자계약서와 온라인 입점신청을 담당하고 있습니다. 전자계약서는 오프라인에서 활동하는 영업매니저가 배달의민족 입점을 희망하시는 사장님을 찾아가 현장에서 직접 작성하게 됩니다. 반면 온라인 입점신청은 사장님이 배민외식업광장1) 웹사이트에 접속하여 '온라인 입점신청' 메뉴에서 입점에 필요한 정보를 직접 - [WOOWACON 2024, 배달 기술의 모든 것을 담다](https://10.147.128.150/20430/) - 기술로 세상을 더 나은 곳으로 만들겠다는 여정을 이어가는 우아한형제들. 그 특별한 하루, WOOWACON 2024가 10월 30일 그랜드 인터컨티넨탈 서울 파르나스에서 열렸습니다. 우아콘의 정식 명칭은 ‘우아한테크콘퍼런스’로, 우아한형제들의 기술, 서비스, 비전, 가치를 나누는 자리인데요. 2020년에 시작해 올해로 5주년을 맞이했습니다. 올해 우아콘도 개발자, 디자이너, PM이 한자리에 모여 '한 번의 배달을 위해 필요한 모든 기술들'을 주제로 함께 배우고 나눈 - [[다시 보기] 8월 우아한테크세미나: 생성AI로 똑똑하게 일하는 법](https://10.147.128.150/19317/) - 8월 우아한테크세미나 : 생성AI로 똑똑하게 일하는 법 🎬 8월 우아한테크세미나 다시보기 📅 일정 2024. 8. 28.(수) 저녁 6시, 약 90분간 우아한테크 YouTube 채널 실시간 스트리밍 🖇️ https://youtube.com/@woowatech 📝 주요 내용 ㅤ 여러분들께서는 업무나 개인 용무를 하며 생성형 AI를 얼마나 활용하시나요? 8월 우아한테크세미나에서는 생성형 AI에 대해 더 가깝게 다가가는 시간을 준비했습니다. 1부에서는 우리가 어떻게 하면 생성형 - [왜 이미지만 700MB를 다운로드하는 거죠?: 배민우리동네 콘텐츠 피드 이미지 최적화 사례](https://10.147.128.150/20228/) - 이 메시지를 받았을 때 대수롭지 않게 생각했습니다. 에이 얼마나 느리겠어. 문제가 있어도 와이파이 문제겠지! 그리고 분석도구를 이용해서 확인해보니 이미지만 도합 700MB를 다운로드하고 있었습니다. 😱 단단히 잘못된 게 있겠네요! 배민우리동네 콘텐츠 피드 만들기 배민우리동네팀에서는 2024년 10월부터 서울 송파구에서 단골의 추천을 수집하고 있습니다. 지금은 서울 광진구에서도 수집중이며, 향후 더 많은 지역에서 단골의 추천을 수집할 예정에 있습니다. 저희팀은 - [우아콘 웹사이트에 사용된 폰트는 무엇일까?](https://10.147.128.150/20142/) - 텍스트는 UI를 구성하는 가장 기본적인 요소 중 하나입니다. 그리고 좋은 폰트로 좋은 사용자 경험을 제공하는 것은 매우 중요한 기술이죠. 우리 회사는 주기적으로 예쁜 폰트를 만들고 무료로 배포합니다. 폰트를 사랑하는 저에겐 큰 의미와 가치가 있는 문화고, 이 폰트들을 활용해 에브리모지와 쓰면글림체를 만들기도 했습니다. 아쉽게도 배달의민족 폰트는 생김새가 독특하고 여러 가지 굵기를 지원하지 않기 때문에 작은 글씨나 - [API 모킹으로 테스트를 더 편리하게, Mock Service GUI 소개](https://10.147.128.150/20154/) - 여러분은 프론트엔드의 API 모킹 환경을 어떤 방식으로 구축하고, 사용하고 계신가요? 이 글에서는 API 모킹 환경을 개발자 친화적으로 개선해 나가는 과정을 다루며, 2023 우아한테크콘퍼런스에서 발표되었던 mock-service-gui의 최신 업데이트와 그 활용 사례들을 함께 소개합니다. 예상 독자 API 모킹 환경이 구축되어 있으나, 더 효과적으로 활용하고 싶은 분들 무분별하게 늘어가는 목(Mock) 데이터로 인해 피로감을 느끼는 분들 프로젝트에서 API 모킹 - [How Our Team Uses Kafka](https://10.147.128.150/20078/) - 🗒️일러두기: 이 글은 글로벌 독자를 고려해 2024년 5월 발행한 "우리 팀은 카프카를 어떻게 사용하고 있을까"를 영문화한 글입니다. Who Should Read This? This article is for those who already know about Kafka. Rather than focusing on technical implementations, it provides a quick and broad overview of Kafka-based technical concepts and shares how our team applies them - [우아한형제들 디자인 시스템에 시각적 회귀 테스트 적용하기](https://10.147.128.150/17081/) - 들어가며 안녕하세요, 우아한형제들 디자인 시스템 ‘우아한공방’의 웹 프론트엔드 개발자 금교영, 이수정입니다. 우아한공방은 우아한형제들에서 운영하는 다양한 웹/앱 프로덕트에서 사용되고 있는데요. (참고: 우아한형제들의 새로운 디자인 시스템 '우아한공방'을 소개합니다: 개발 편) 이번 글에서는 우아한공방에 시각적 회귀 테스트를 도입한 과정에 대해 이야기해 보려고 합니다. ‎ 우아한공방은 총 115가지의 UI 컴포넌트를 제공하고 있어요. 우아한공방의 컴포넌트 단위 테스트의 커버리지를 91%로 유지하고 - [배민 앱에도 AI 서비스가? AI 서비스와 MLOps 도입기](https://10.147.128.150/11582/) - ChatGPT의 등장으로 전 세계적으로 AI 서비스에 대한 관심이 높아졌습니다. 과연 ChatGPT와 유사한 AI 서비스가 우아한형제들에서도 있을까요? 없을까요? 🤔 (생각할 시간 3초 …) 정답은 있습니다!! 😎 우아한형제들 서비스 이곳저곳에 '누가 허위로 리뷰를 작성을 하는지 예측', '음식이 언제 도착하는지 예측' 등 수십 개의 AI 서비스가 이미 적용되어 있습니다. [그림 1] 배민 앱에 적용된 AI 서비스 '음식이 언제 - [승인 프로세스 뒤에 숨겨진 일꾼들: 사장님 입점요청 승인툴 고도화 프로젝트 경험담](https://10.147.128.150/19415/) - 사장님이 배민에서 장사를 시작하기 전, 어떤 것들을 준비할까요? 우리가 보는 배민앱에서 가게가 노출되고 주문을 받기위해서, 사장님은 조금 길고 험난한 준비과정을 거쳐야 합니다. 사장님과 가게에 대한 기본 정보 입점 계약을 체결하기 위한 ‘사업자정보’와 ‘영업신고증' 을 비롯한 각종 인허가 서류 입력 배민앱에 노출될 가게의 영업시간, 휴무정보, 매장 사진 배달팁, 배달시간, 배달지역 정보 군침 싹 도는 메뉴 사진과 - [[신청 마감] WOOWACON 2024에 지금 등록하세요!](https://10.147.128.150/19470/) - 많은 분들이 기다려주신 소식! 우아한테크콘퍼런스, 'WOOWACON 2024'가 오는 10월 30일 개최됩니다 🙌 WOOWACON 2024에는 백엔드, AI/ML, 프런트엔드, 로봇, PM, 디자인, 문화/성장 등 다양한 분야의 발표 세션이 준비되어 있어요. 올해는 발표 세션 뿐만 아니라, 참여형 세션을 새롭게 선보입니다. 우아콘에 직접 참여할 기회를 얻어보세요! 먼저, 이그나이트 트랙에서는 5분 발표와 토론 시간으로 구성된 참여형 세션을 준비했어요. 발표자는 간단한 - [프론트엔드 통합 테스트로 더 안전한 웹 서비스 개발하기](https://10.147.128.150/19509/) - 여러분의 테스트코드를 얼마나 신뢰하시나요? 오늘날 많은 웹 서비스가 성장하면서 UI/UX의 중요성이 더욱 강조되고, 프론트엔드에서 처리되는 비즈니스 로직도 증가하고 있습니다. 이에 따라 프론트엔드 테스트의 중요성도 자연스럽게 커지고 있습니다. 개발자들은 다양한 테스트 방법을 적용하여 코드의 안정성과 신뢰성을 확보하고 있습니다. 그 중에서도 일반적으로 작성되는 테스트 방식은 단위 테스트(Unit Test)입니다. 아래는 필수 약관의 동의 여부를 반환하는 함수와 약관 체크박스의 - [AI 데이터 분석가 '물어보새' 등장 - 1부. RAG와 Text-To-SQL 활용](https://10.147.128.150/18144/) - AI 데이터 분석가 '물어보새'는 생성형 AI를 주제로 한 우아톤 2023(우아한형제들 구성원 누구나 참여할 수 있는 사내 해커톤)을 계기로 탄생한 프로덕트입니다. 당시 '코드 없이 데이터 추출과 시각화를 자동으로 해주는 서비스'로 1등을 차지했습니다. 우아톤 이후에도 구성원들의 요구와 관심이 지속되어 2024년 1월에 본격적인 개발을 위한 언지니어 태스크포스(TF)가 구성되었습니다. 지난 6개월 동안 TF를 통해 '물어보새'는 더욱 발전하여 쿼리문 생성뿐만 - [Elasticsearch 병렬 테스트를 향한 여정](https://10.147.128.150/18486/) - 여정에 앞서서 🧳 안녕하세요! 이번 글에서는 검색팀에 도입되어 2배 이상의 성능 향상을 이룬 병렬 테스트에 대해서 공유하고자 합니다. 특히, Elasticsearch에 의존하는 환경에서 병렬 테스트를 효과적으로 수행하기 위한 격리 전략에 대해 자세히 다룰 예정입니다. 병렬 테스트로 가는 여정에 앞서 저희 검색 시스템에 대해서 간략하게 설명하겠습니다. 저희는 검색엔진으로 Elasticsearch(이하 ES)를 사용합니다. 대부분의 코드가 ES에 의존하고 있으며, 테스트 - [우아한테크캠프 7기: 데모데이 1위 팀의 로그 매니저 프로젝트를 소개합니다!](https://10.147.128.150/19370/) - 유난히 길었던 지난 여름, 우아한형제들에서는 서버 개발자 양성을 위한 우아한테크캠프(이하 우테캠) 7기가 진행되었습니다. 10주간 실력을 갈고 닦은 교육생들은 한곳에 모여 데모데이에서 열정을 불태웠는데요. 이번 우테캠 데모데이에서는 앞서 3주간 개발한 Spring 기반의 프로젝트를 선보였고, 부스를 방문하는 분들이 직접 마음에 드는 서비스에 투표할 수 있었습니다. 현장에서 가장 많은 표를 얻은 프로젝트를 소개합니다! 프로젝트 소개 우아한테크캠프 7기 데모데이에서 - [Vite로 구버전 브라우저 지원하기](https://10.147.128.150/17710/) - Vite 레거시 플러그인을 활용하여 구버전 브라우저 이슈를 해결하고, 모던 브라우저와 레거시 브라우저 모두에서 안정적으로 동작하는 웹 애플리케이션을 개발한 경험을 공유합니다. - [Polars로 데이터 처리를 더 빠르고 가볍게 with 실무 적용기](https://10.147.128.150/18632/) - 배달시간예측서비스팀은 배달의민족 앱 내의 각종 서비스(배민배달, 비마트, 배민스토어 등)에서 볼 수 있는 배달 예상 시간과 주문 후 고객에게 전달되기까지의 시간을 데이터와 AI를 활용하여 예측하는 시스템을 개발합니다. 고객, 라이더, 사장님의 만족을 위해 앱 사용자에게 보이지 않는 다양한 시간과 리소스도 함께 예측합니다. 팀 내에서 데이터를 더 효율적이고 빠르게 처리하기 위해 고민했던 내용과 이를 해결하기 위해 Polars라는 라이브러리를 - [로봇을 위한 MLOps #1: Edge device와 K3s, Airflow](https://10.147.128.150/17647/) - 들어가며 최근 AI를 비롯한 다양한 기술의 발전에 힘입어 자율주행이 급속도로 발전하고 있습니다. 우아한형제들 역시 자율주행 배달 로봇 기술에 적극적으로 투자하여 실외 배달 로봇인 '딜리(Dilly)'를 자체 개발하였고, 2023년부터 테헤란로 등 여러 장소에서 로봇 배달 시범 서비스를 시행하고 있습니다. 자율주행 로봇에는 다양한 기술이 필요한데, 그중 대표적인 것으로는 머신러닝을 이용해 주변 환경을 인지하고 대응하는 기술이 있습니다. 딜리의 인지 - [마케팅 타깃팅 툴 BUDS 제작기, 탄생부터 수출 역군이 되기까지](https://10.147.128.150/17765/) - 1.BUDS란? 개인화 마케팅을 들어보셨나요? 개인화 마케팅은 고객의 특성과 선호도를 반영하여 맞춤형 메세지와 경험을 제공하는 마케팅 전략입니다. 맞춤형 메세지와 경험을 고객에게 전달하려면 특정 조건을 가진 고객을 타깃팅 할 수 있어야 하는데요, 이 때 활용하는 것이 BUDS입니다. BUDS는 쿼리 작성 없이 클릭만으로 원하는 고객 집단(이하 세그먼트)을 찾아 저장하고 업무에 활용할 수 있도록 지원합니다. 아래 이미지와 같이 고객을 - [운송 관리 시스템(TMS)의 탄생부터 현장에서 사용하기까지](https://10.147.128.150/17466/) - 우아한형제들의 B마트 서비스는 고객님이 주문한 상품을 물류센터를 통해 문 앞까지 배달해 드리고 있습니다. 이 때문에 센터 관리, 간선 운송 관리 등의 역할이 필요합니다. 지난 2024년 3월 물류플랫폼 TMS(운송관리시스템)가 '배차 시스템화 프로젝트' 오픈과 함께 대대적으로 개편되었습니다. 기술블로그를 통해 TMS의 탄생부터 현장에서 사용되기까지 지난 1년간 저희가 진행했던 노력과 성과, 그리고 배운 점을 공유드리고자 합니다. 1. TMS와 탄생 - [실시간 배달 상황이 궁금해! 배달 인프라 레벨 구축 경험담](https://10.147.128.150/18254/) - 여러분은 오늘 컨디션을 표현해본다면 어떻게 하시겠어요? 개인마다 답이 다를 수 있죠. 좋다, 나쁘다를 비롯하여 1~100에 대입하여 표현할 수도 있고요. 배달상황도 마찬가지에요. 지금 비가 오는데 배달상황이 어떻지? 이처럼 주관적인 배달상황을 측정 가능한 지표로 새롭게 정의한 "배달 인프라 레벨"구축 경험담을 풀어볼게요😊 늘 그렇듯, 사용자 인터뷰를 시작으로 문제정의 하기 딜리버리서비스팀에서는 배달 도메인을 담당하고 있고, 주 사용자로는 라이더 및 - [[다시 보기] 6월 우아한테크세미나 : 글로벌 개발자로 성장하는 법](https://10.147.128.150/17713/) - 6월 우아한테크세미나 : 글로벌 개발자로 성장하는 법 🎬 6월 우아한테크세미나 다시보기 ㅤ 📅 일정 2024. 6. 3.(월) 저녁 6시, 약 90분간 우아한테크 YouTube 채널 실시간 스트리밍 🖇️ https://youtube.com/@woowatech 📝 주요 내용 ㅤ 우리는 늘 커리어에 대한 고민을 안고 살아갑니다. "나는 지금 잘 하고 있는 걸까?"라는 고민에서부터 시작해서 "어떻게 하는 게 잘하는 걸까?", "계속 일할 수 - [맞춤형 콘텐츠, 배민은 사장님께 어떻게 제공할까? : 배민외식업광장 세그먼트 적용기](https://10.147.128.150/17980/) - 안녕하세요. 배민외식업광장서비스팀 강경림입니다. 2022년 12월 CMS(Content Management System) 슬롯화 프로젝트로 기술 블로그를 찾아왔었는데요. 1년 6개월이라는 시간이 흐르는 동안 배민외식업광장 CMS에는 어떤 변화들이 있었는지, 어떻게 발전되어 왔는지를 공유드리고 싶어 다시 한번 기술 블로그에 문을 두드리게 되었습니다. 들어가기 전에 배민외식업광장 CMS는 슬롯화를 통해 배민외식업광장에 접속하는 사장님들에게 다양한 디자인으로 시의적절한 다양한 콘텐츠를 제공할 수 있게 되었지만, 모든 사용자가 - [야, 너도 WireMock으로 테스트할 수 있어](https://10.147.128.150/17674/) - 통합 테스트(Integration Test)를 작성할 때 외부 API를 호출하는 로직이 들어가 있어서 테스트 코드를 작성하기 난감했던 적 없으신가요? 혹은 외부 API가 비정상적인 응답을 반환했을 때에 대한 테스트를 작성하고 싶었지만, 비정상 응답을 발생시킬 수 없어서 포기했던 적은 없으신가요? 개발 과정에서 테스트는 매우 중요한 역할을 합니다. 테스트에는 기능 테스트, 단위 테스트, 통합 테스트 등 여러 종류가 있는데, 그 - [[모집 마감] 우아한스터디 2024 여름시즌](https://10.147.128.150/17328/) - 이 글은 PC 환경에 최적화되어 있습니다. 모바일 환경에서는 우아한스터디 2024 여름시즌 페이지와 우아한스터디 2024 여름시즌 신청서를 참고하세요. - [코드와 함께 살펴보는 프론트엔드 단위 테스트 - Part 2. 실전 편](https://10.147.128.150/17721/) - “책상 앞에서만 존재하는 지식은 의미 없다.” from 지금도 책상 앞에 앉아있는 내가 한 말 “Part 1. 이론 편”에서 소개한 내용들은 여러분에게 도움이 되셨나요? Part 1에서는 본격적으로 테스트 코드를 작성하기 전 알고 있으면 도움이 되는 내용을 다루었습니다. 말미에서 언급한 것처럼 이제는 머리로 배운 것을 손으로 테스트 코드를 작성하면서 익힐 때가 되었습니다. 저는 글의 시작에 있는 문장처럼 - [웹 애플리케이션 페이지를 패키지로 개발해 본 경험](https://10.147.128.150/16910/) - 웹 애플리케이션의 일부 페이지를 다른 레포지토리에서 개발하고 적용해 본 경험이 있으신가요? Module Federation이나 iframe 활용 등 여러 방법이 생각나실 텐데요. 이 글에서는 배민 사장님들께 제공되는 서비스인 배민 셀프서비스 내의 상품관리 페이지를 패키지 형태로 배포해 본 경험기를 공유합니다. 개발 배경 보통, 웹 애플리케이션에 새로운 페이지를 추가해야 하면 하나의 레포지토리에서 개발을 진행합니다. 하지만 새로운 페이지를 추가해야 하는데 - [코드와 함께 살펴보는 프론트엔드 단위 테스트 - Part 1. 이론 편](https://10.147.128.150/17404/) - "테스트 코드 작성은 파일을 만들어서 한 글자 쓰기 전까지 엄청 귀찮다." from 언젠가 내가 데일리 스크럼에서 한 말 개발자들에게 테스트 코드 작성은 해야 하지만 손이 잘 가지 않는 숙제 같은 일입니다. 테스트 코드를 쓰면 쓸수록 귀찮다고 얘기하는 분도 본 것 같습니다. (ㅋㅋㅋㅋ) 그럼에도 테스트의 중요성을 부정하는 개발자분은 없을 것으로 생각하는데요. 클린코드, 리팩터링을 비롯한 많은 개발 - [프론트엔드 개발자들의 즐거운 상상 🎈 - 쓰면글림체 사이드 프로젝트 이야기](https://10.147.128.150/16547/) - 상상만으로도 마음 한편이 설레는 순간이 있나요? 영감이 솟구치고 미소가 절로 번지는 그런 순간이요. ㅤ ㅤ 글의 순서 𝟎 어떤 경험을 만들게 될까 𝟏 가장 핵심이 되는 기술부터 𝟐 깜빡이는 Cursor 직접 만들기 𝟑 웹 UI에 손 그림 한 스푼 𝟒 세상에 공개하는 순간 ㅤ ㅤ 𝟎 어떤 경험을 만들게 될까 두 달 전, 동료 개발자 - [우아한스터디 2023 여름시즌 후기: 쏙쏙 들어오는 함수형 코딩](https://10.147.128.150/15660/) - 우아한스터디 2024 여름시즌 모집이 방금 시작되었습니다. 우아한스터디에서는 어떤 활동을 하는지 궁금하시면 "우아한스터디 2023 여름 시즌" 후기도 확인해 보세요! 이 글은 2023년 6월부터 두 달간 진행한 "쏙쏙 들어오는 함수형 코딩" 스터디 후기를 인터뷰 형식으로 정리한 글입니다. 우아한스터디에 관심 있는 분들과 스터디를 효율적으로 진행하는 방법을 고민하고 계신 분께 도움이 되길 바랍니다. 우아한 스터디 2023 여름 시즌 멤버들의 - [[모집 마감] 2024 우아한테크캠프 7기](https://10.147.128.150/16979/) - 기존보다 2주 늘어난 교육 기간부터 글로벌 개발자가 될 수 있는 기회까지! 새롭게 꽃단장한 우아한테크캠프 7기 모집을 시작합니다. 모집일정 우아한테크캠프 7기는 4월 3일부터 프로그래머스 사전접수 페이지를 통해 진행합니다. ✅전형단계 사전접수 > 1차 코딩테스트 > 2차 과제테스트 > 서류접수 > 면접 > 우아한테크캠프 *서류접수는 2차 과제테스트 합격자에 한해 안내드립니다. ✅전형일정 (1) 사전 접수 : 4/3(수) 13시 ~ - [작고 아기자기하지만, 개발조직의 문화 만들기 [ep 3. 소소한 단기 프로젝트]](https://10.147.128.150/9766/) - 지난 두 번째 에피소드에서 찬호 님이 웹프론트개발그룹 운영진(이하 운영진)의 장기간 진행된 프로젝트를 소개해 주었는데요, 놀랍게도 아직 할 얘기가 많이 남아 있어요. 운영진의 소소한 단기 프로젝트 이야기를 담은 세 번째 에피소드, 지금 시작합니다. 개발자의 잡담 시간을 챙겨드려요! ‘코시국'에 생긴 큰 변화 중 하나는, 다른 개발자분들과 잡담할 기회가 줄었다는 거에요. 재택 근무 환경에서는 집에서 혼자 책상 앞에만 - [배민선물하기 AI 메시지 제작기: 생성 AI가 센스 있는 선물 메시지를 대신 쓰기까지](https://10.147.128.150/17241/) - 여러분은 생성 AI를 적용한 서비스를 만들어본 적이 있으신가요? 배민선물하기팀에서는 만우절을 맞이하여 배민선물하기 서비스 내 생성 AI를 활용한 ‘AI 메시지’ 기능을 오픈했습니다. AI 메시지는 배달의민족 앱 내 선물하기 서비스에서 선물할 때, 선택한 카드에 어울리는 메시지를 AI가 대신 작성해주는 기능입니다. AI 메시지는 만우절을 맞이하여 유머러스한 메시지를 추천해주었으며, 3월 28일부터 4월 1일까지 서비스되었습니다. 배민선물하기에서 AI 메시지를 만들게 된 - [JPA에서 아이디를 자동증가 값으로 사용 시 하이버네이트의 @NaturalId 사용해 보기](https://10.147.128.150/17221/) - DB에서 기본키를 자동증가 값으로 설정하여 사용 시 운영 환경과 베타 환경의 아이디값이 일치하지 않을 때, @Id를 선언하지 않은 필드를 @Id를 선언한 필드와 유사하게 동작하게 하는 하이버네이트의 @NaturalId를 사용해 해결할 수 있는 방법을 공유해 보려 합니다. 신규 테이블 생성 시 기본키 생성은 어떻게 하고 계시나요? 저희팀에서는 기본 RDBMS 로 MySQL을 사용하고 있습니다. MySQL의 경우 기본키를 Clustered - [스프링부트에서 DbUnit 을 이용하여 DB 테스트해 보기](https://10.147.128.150/2650/) - 안녕하세요. 상품시스템팀 권순규입니다. 저희 팀에서 DB 테스트를 위해 사용하고 있는 DbUnit 의 설정 및 사용에 대해 알려드리고자 합니다. DbUnit 을 사용하지 않고 스프링부트만을 이용하여 테스트하기 아래와 같은 관계를 가진 User 와 Company 가 있습니다.(예제코드) 새로운 User 를 등록하기 위해서는 UserService 클래스의 register() 를 호출하여 등록하면 되는데, register() 내부에서는 기존에 등록되어 있는 Company 를 조회하여 User - [MySQL 환경의 스프링부트에 하이버네이트 배치 설정해 보기](https://10.147.128.150/2695/) - 안녕하세요. 배민상품시스템팀 권순규 입니다. 저희팀에서 하이버네이트 배치 설정을 통해 대량 insert/update 시의 속도개선을 경험하여 공유드리고자 합니다. 전체 예제 파일은 github 에서 확인 할 수 있습니다. 하이버네이트 배치 배치 작업은 보통 대량의 작업을 한번에 처리하는 경우를 말합니다. 이와 유사하게 하이버네이트 배치는 JDBC 에서 제공하는 배치기능을 활용합니다. 하이버네이트 배치기능을 적용하게 되면 설정한 배치 갯수에 도달할때 까지 PreparedStatement.addBatch() - [데이터 베이스의 자동증가 값을 기본키로 사용할 수 없을 때는?](https://10.147.128.150/2607/) - 안녕하세요. 비즈상품 개발팀 권순규 입니다. 작년에 입사한 이후로 매번 주변 동료분들에게 배움을 얻기만 해왔는데, 이번에는 배운 내용을 공유해보고자 합니다. 이제껏 해온 기본키 매핑 엔티티에 기본키를 매핑할때 간편하게 매핑할 수 있고, 비즈니스 환경이 변하더라도 기본키를 바꿀 필요가 없다는 이유 등으로 주로 데이터베이스의 자동 증가값을 아래와 같이 매핑 하여 사용해왔습니다. @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) - [MySQL을 이용한 분산락으로 여러 서버에 걸친 동시성 관리](https://10.147.128.150/2631/) - 안녕하세요. 비즈인프라개발팀 권순규입니다. 현재 광고시스템에서 사용하고 있는 MySQL을 이용한 분산락에 대해 설명드리고자 합니다. 분산락을 적용하게된 원인 현재 테이블은 아래 그림과 같이 User 테이블과 Card 테이블이 있고, User 테이블과 Card 테이블은 1 : N 의 구조로 생성 되어있습니다.(예제코드) 하지만 User 객체는 2개의 Card 만을 가질수 있도록 구현되어 있습니다. @Entity @Getter @NoArgsConstructor @ToString @Table(name = "user") @EqualsAndHashCode(onlyExplicitlyIncluded - [우리 팀을 위한 ESLint, Prettier 공유 컨피그 만들어보기](https://10.147.128.150/15903/) - 최종 코드 예제는 Github 예제 프로젝트에서 확인할 수 있습니다. 서론 ESLint와 Prettier는 JavaScript나 TypeScript의 코드 품질을 높이고 일관된 형식을 유지하는 데 자주 사용하는 도구입니다. ESLint를 사용하면 잠재적인 문제를 빠르게 확인할 수 있고, Prettier를 사용하면 코드 서식에 신경쓰지 않고 코드 작성에만 집중할 수 있어 편리합니다. 하지만, 매번 프로젝트를 생성할 때마다 ESLint/Prettier 등을 설정하는 작업은 꽤 번거롭습니다. - [[다시 보기] 4월 우아한테크세미나: Java의 미래, Virtual Thread](https://10.147.128.150/17163/) - 4월 우아한테크세미나 : Java의 미래, Virtual Thread 🎬 4월 우아한테크세미나 다시보기 📅 일정 2024. 4. 23.(화) 저녁 6시, 약 90분간 우아한테크 YouTube 채널 실시간 스트리밍 🖇️ https://youtube.com/@woowatech 📝 주요 내용 ㅤ Virtual Thread는 기존 Java의 스레드 모델을 탈바꿈하여, 긴 I/O blocking time, 잦은 Context switching이 발생하는 서버 환경에 맞는 경량 스레드 기술입니다. 2023년에 JDK21에 정식 - [우아한형제들 PM들은 어떤 책을 읽을까?](https://10.147.128.150/16917/) - 우아한형제들 PM(Product Manager)은 평소 어떤 책을 읽고 서비스와 플랫폼을 만들어 나가고 있을까요? PM을 준비하고 계시는 분들, 또는 PM 업무를 더 효과적으로 수행하기 위해 고민인 분들을 위해 도움받을 수 있는 책은 어떤 것들이 있는지 직접 추천 받아 보았습니다. (참고: 본문의 책 이미지를 클릭하시면, 책 소개 사이트로 이동 합니다.) PM 직문뿐만 아니라, product가 마련되고 운영하고 성장하는 데 - [개발자 의식의 흐름대로 적용해보는 서킷브레이커](https://10.147.128.150/15694/) - 서비스가 확장되고 IT기업의 규모가 커짐에 따라서, 같은 회사 혹은 조직에서 동일한 기능을 개발하고 운영하게 되는 경우가 많습니다. 사실 한가지 IT 서비스를 구성하기 위해서는 여러가지 기능의 조합으로 전체 기능을 구성하게 되므로, 실제로 서로 다른 조직에서 동일한 기본적인 기능을 구현하는 경우는 매우 흔한 상황입니다. 조직이 성장하여 처음 서비스를 분화할 때는 공통적인 기능에 대한 정의도 되어 있질 않고, - [셀프서비스, 챗봇에게 물어보세요](https://10.147.128.150/16021/) - 서비스 이용을 도와주는 챗봇, 사용해보신 적 있으신가요? 지난 12월 배달의민족의 사장님 서비스, '배민셀프서비스'에서도 챗봇 기능을 오픈했는데요, 이번 글에선 프론트, 서버 개발자가 함께 챗봇을 개발하며 고민했던 내용들을 소개드리겠습니다. 배민셀프서비스는요 셀프서비스에서는 배민 사장님들의 장사를 돕기 위해 다양한 정보를 제공하고 있습니다. 기본적인 가게관리 및 메뉴 관리, 리뷰 작성과 쿠폰 발행을 비롯하여 배달의민족 정산금액을 확인하실 수도 있죠. 자연스레 서비스에서 - [셸 스크립트를 몰라도 자동화는 하고 싶어, ChatGPT를 활용한 git flow 관리 스크립트 자동화 진행기](https://10.147.128.150/16044/) - 들어가며 본 글은 OpenAI의 GPT-4(이하 'ChatGPT')를 활용하여 git 관리 스크립트를 작성한 경험을 다루는 수기입니다. 아래 주제에 대해선 다루지 않습니다. 시중에 출시된 대규모 언어 모델(Large Language Model) 간의 비교분석 효과적인 프롬프트 엔지니어링 기타 우리의 인생을 휘리릭 바꿔줄 AI Magic 대신 아래의 주제에 대해서 다룹니다. 자동화는 하고 싶지만 IDE 밖으로 벗어나기는 싫어하던 개발자의 ChatGPT와의 협업 이야기 지금부터 - [배민앱에서 대용량특가를 만나기까지](https://10.147.128.150/15268/) - 이제 배달의 민족앱에서도 대용량상품을 택배로 주문할 수 있다는 사실을 알고 계셨나요? 지난 8월! 배민의 새로운 서비스, 🎉 대용량특가가 오픈되었습니다. 아직 소식을 접하지 못하신 분들을 위해 우리 서비스를 소개해드릴게요!! '많이 쓰는 상품 더 저렴하게' 대용량특가에서는 쟁여놓기 좋은 대용량의 상품들을 특가 또는 최저가로 만나보실 수 있습니다. 다만, 부피가 큰 상품들을 취급하기 때문에 주문이 완료되면 라이더배달이 아닌 택배로 - [서버사이드 테스트 파랑새를 찾아서](https://10.147.128.150/14874/) - 현실에서 만난 테스트 문제와 트레이드 오프 그리고 더 효율적인 테스트 환경을 위한 여정 - [[모여서 각자 글쓰기] 온라인 출판기념회](https://10.147.128.150/12947/) - 안녕하세요. 배민우리동네서비스팀 송요창입니다. 지난 6월 1일부터 시작한 우아한스터디의 "모여서 각자 글쓰기"에 8주간 참여한 5분의 후기와 작성 글을 소개합니다. 🗒️우아한스터디는 우아한형제들 개발자와 타사 개발자가 함께 모여 공부하는 소규모 스터디 프로그램입니다. 스터디에 진심인 개발자 누구나 참여할 수 있습니다. 2023년 우아한스터디 모여서 각자 글쓰기 약 8주 동안 매주 목요일 밤에 온라인으로 만나 글을 작성한 초보 작가들의 후기와 각자 - [우아한형제들에서 PM끼리 소통하는 법 - 카르페피엠](https://10.147.128.150/11642/) - 우아한형제들에서 PM(Product Manager)의 직무는 아래와 같이 정의 하고 있습니다. "고객에 대한 이해를 바탕으로 프로덕트 전략과 방향을 제시하고, 이에 대한 구체적인 실행방안을 수립하며, 필요한 모든 자원을 활용하여 이를 실행함으로써 더 나은 고객가치를 창출합니다" PM은 서비스, 플랫폼에 대해서 요구사항 분석을 시작으로 프로젝트 목표를 설정하고, 해결방안 제시를 하며 그 결과 측정을 하게 되는데요. 전반적으로 서비스에 대해 A to - [우아한형제들 PM의 이야기- "배민 기획자의 일"](https://10.147.128.150/13027/) - PM을 한다는 것은 매년, 어쩌면 매달 바뀌어 가는 새로운 기술∙시장∙삶의 변화에 맞추어 끊임없이 서비스가 제공될 환경을 분석하고, 서비스와 함께 성장해가는 일인 것 같습니다. 한편으로는 그 점이 매력으로 다가오기도 해요. ‘배민 기획자의 일’ 中 '배민 기획자의 일'을 읽다 보면 PM(Product Manager)의 매력에 대해 다시 한번 생각하게 되고, 공감이 가는 부분들이 많았는데요. 그 중 한 문장을 가져와 - [나 4년 차 서버개발자, 배달의민족의 지리 체계를 뒤흔들다](https://10.147.128.150/11238/) - 포스팅 목적 어느덧 서버개발자로 일한 지 4년 차, 그중 최근 가장 큰 규모의 프로젝트인 '지리 관리 기준 체계 변경 프로젝트'를 진행하게 되었습니다. '지리 관리 기준 체계 변경 프로젝트'는 규모도 컸을 뿐 아니라 많은 경험도 할 수 있었던 프로젝트였기에 경험한 내용을 정리하고 싶었고, 많은 분들에게 경험을 공유하고 싶어 이 글도 작성하게 되었습니다. 먼저, 제가 속한 '셀러시스템팀'부터 - [표준 개발 환경 개선 되돌아보기](https://10.147.128.150/15572/) - 개발을 하면서 자신의 코드를 많이 보게 되지만 그보다 더 많이 보게 되는 것이 다른 사람 또는 팀이 작성한 코드입니다. 하지만 다른 사람의 코드를 보는 것이 항상 쉽진 않았을 것입니다. 각자 익숙한 방식으로 코딩을 하다 보니 다른 사람의 코드를 이해하기 어려운 경우가 있는데요. 팀 내에서도 비슷한 일을 겪고 있었습니다. 코어웹프론트개발팀은 올해 5월부터 새로운 팀 표준 개발 - [Java의 미래, Virtual Thread](https://10.147.128.150/15398/) - JDK21에 공식 feature로 추가된 Virtual Thread에 대해 알아보고, Thread, Reactive Programming, Kotlin coroutines와 비교해봅니다. - [3월 우아한 Tech 세미나](https://10.147.128.150/2616/) - 안녕하세요, 배민 앱의 귀한 분이자, 우아한 형제들의 Developer Relations 담당자 문수민입니다. 우아한 형제들에 입사한지 어느덧 한 달, 회사 덕질의 매력을 물씬 느끼고 있는 요즘입니다 :) 이 글을 통해 우아한 형제들이 긴 시간 고민하고 계획해 온 DR 활동의 시작을 알리고자 합니다. Developer Relations 담당자로서의 자세 입사한 첫 주, 부문장님과의 첫 식사 자리에서 저는 이런 질문을 했습니다. - [서로 다른 소속 개발자가 모여 함께한 우아한멘토링 후기](https://10.147.128.150/8196/) - 여러분이 알고 있는 “멘토링”은 어떤 것인가요? '지도자와 조언을 구하는 자? 스승과 제자? 팀장과 신입사원..?' 이 글에서는 많은 분들이 알고 있는 멘토링 방식과는 조금 다를 수도 있는, 이게 멘토링 맞아? 라고 할 수도 있는.. “우아한멘토링”에 참여했던 개발자분들과의 인터뷰 내용을 보여드리고자 합니다. 우아한멘토링은 우아한형제들 개발자 5명을 필두로 시도해 본 그룹 멘토링 프로그램인데요. “다양한 환경, 다양한 시각을 가진 - [[다시 보기] 2월 우아한테크세미나: 글로벌 개발자로 성장하는 소프트웨어 실무 영어](https://10.147.128.150/15983/) - 2월 우아한테크세미나 : 글로벌 개발자로 성장하는 소프트웨어 실무 영어 🎬 2월 우아한테크세미나 다시보기 📅 일정 2024. 2. 22.(목) 저녁 6시, 약 90분간 우아한테크 YouTube 채널 실시간 스트리밍 🖇️ https://youtube.com/@woowatech 📝 주요 내용 ㅤ "반복문을 빠져나오다", "인자의 제곱을 반환하다"를 영어로 어떻게 표현할까요? 프로그래밍에 매일 사용하는 "중괄호"와 "물결표"를 영어로 어떻게 표현할까요? 소프트웨어 실무 영어는 비즈니스 영어, 시험 - [배달의민족 광고데이터 이관기](https://10.147.128.150/14041/) - 이 글은 배달의민족 플랫폼 내에서 광고데이터를 이관한 작업 과정을 소개한 글입니다. 광고데이터 이관 작업은 고객 경험에는 직접적인 변화를 주지 않았지만, 시스템 측면에서는 상당한 위험도를 안고 진행된 중대한 과제였습니다. 고객 입장에서 변화가 없는 작업이지만 해야만 했던 이유가 있었습니다. 그 배경을 설명드리기 전에 먼저 광고데이터가 배달의민족앱 내에서 어떻게 활용되고 있는지 간단히 살펴보겠습니다. 광고데이터가 활용되는 곳 예를 들어 - [Spring Rest Docs 적용](https://10.147.128.150/2597/) - 안녕하세요? 우아한형제들에서 정산시스템을 개발하고 있는 이호진입니다. 지금부터 정산시스템 API 문서를 wiki 에서 Spring Rest Docs 로 전환한 이야기를 해보려고 합니다. 1. 전환하는 이유 현재 정산시스템은 API 문서를 wiki 로 공유하고 있었습니다. 며칠 전 API 에 필드를 추가하고 API 문서를 확인해보니 변경된 코드와 달랐습니다. 있어야 할 필드가 없었고 없어야 할 필드가 있었으며 같은 값을 주는 필드가 - [웹 접근성 준수를 통한 모두에게 배달되는 일상의 행복](https://10.147.128.150/15541/) - 들어가며 웹 접근성, 다들 잘 지키고 계신가요? 늘 지켜야지 하는 마음은 굴뚝이지만 바쁜 일정에 조금씩 미룬 경험은 없으셨나요? 배민페이 관리 지면 개편이 그랬는데, 이미 완성된 사이트를 접근성에 맞춰 수정하기는 쉽지 않았습니다. 오랜 시간을 들여 수정해야 했고, 부분적 수정이 아닌 라이브러리나 구조를 갈아엎는 대대적인 수정이 생기기도 했어요. 하지만 개발 단계에서 조금만 더 신경 쓴다면 이런 불상사를 - [고르곤졸라는 되지만 고르곤 졸라는 안 돼! 배달의민족에서 금칙어를 관리하는 방법](https://10.147.128.150/15764/) - 안녕하세요! 셀러시스템팀에서 서버 개발을 하고 있는 김예빈이라고 합니다. 배달의민족에는 금칙어를 관리하는 "통합금칙어시스템"이라는 것이 있습니다. 금칙어란? 법 혹은 규칙으로 사용이 제한된 말을 뜻하며, 서비스에서는 사용자로 하여금 사용을 제한하는 단어를 의미합니다. ‎ 배달의민족에서는 통합금칙어시스템을 통해 부적절한 단어를 사전에 제한하고 있는데요. 이번 글에서는 통합금칙어시스템이 어떻게 개발되었는지 그 과정과 개발 중 겪었던 시행착오들을 소개해 보려고 합니다. ‎‎ 들어가기 전에 - [Developers of Woowa, how do they grow? (a.k.a. system and culture of the development organization)](https://10.147.128.150/10538/) - 🗒️일러두기: 이 글은 글로벌 관계사와 독자를 위해 2022년 8월 발행한 "우아한 개발자들, 어떻게 성장해요?(a.k.a. 개발조직의 제도와 문화)"를 영문화한 글입니다. How does Woowa Brothers support growth for its developer members in terms of system and organizational culture? Here is a variety of systems that enable every developer who joins Woowa Brothers to have a pleasant experience - [우아한 개발자들, 어떻게 성장해요?(a.k.a. 개발조직의 제도와 문화)](https://10.147.128.150/9059/) - 우아한형제들에서는 어떤 조직문화와 제도로 개발직군 구성원들의 성장을 지원하고 있을까요?우아한형제들에 합류하는 모든 개발직군 구성원이좋은 채용 경험을 하고, 합류한 이후에도 만족하며 일하고,우아한형제들 기술 조직 안에서 지속적으로 성장할 수 있도록 하는 다양한 제도를 소개합니다. 들어가기 전에 이 글에서는 테크HR실 테크HR채용팀과 DR팀 담당자 네 분의 인터뷰를 통해 우아한형제들의 개발조직의 문화와 성장을 위해 지원되고 있는 사내 제도들과 개발 문화에 대해 - [[다시 보기] 12월 우아한테크세미나: WOOWACON 2023 리캡](https://10.147.128.150/15488/) - 12월 우아한테크세미나 : WOOWACON 2023 리캡 🎬 12월 우아한테크세미나 다시보기 📅 일정 2023. 12. 20.(수) 저녁 7시, 약 90분간 우아한테크 YouTube 채널 실시간 스트리밍 🖇️ https://youtube.com/@woowatech 📝 주요 내용 지난 11월 15일, 우아한형제들 기술 콘퍼런스인 '우아콘2023'이 많은 분들의 관심과 참여와 함께 진행되었습니다. 아쉽게도 현장에서 함께하지 못하신 분들을 위하여, 세션 발표 영상들은 12월 내 유튜브 '우아한테크'채널에 - [따끈따끈한 전사 로그 시스템 전환기: ELK Stack에서 Loki로 전환한 이유](https://10.147.128.150/14505/) - 안녕하세요. 클라우드모니터링플랫폼팀의 이연수입니다. 우아한형제들의 모니터링시스템 구축 및 관리, 운영을 하고 있습니다. 작년부터 올해 초까지 팀에서 전사 로그 시스템을 전환을 진행했던 계기와 전환 후 성과에 대해 이야기를 나누어보겠습니다. 로그 시스템은 항상 도전 과제를 안겨줍니다. 각 서비스에서 발생하는 대부분의 로그를 수집해야하기 때문에 종류가 많고 비용이 많이 발생하지 않는지, 시스템 운영을 효율적으로 하고 있는지, 데이터를 효율적으로 저장하고 있는지 - [[트러블슈팅기] CSR에서 동적 OG 메타태그 적용하기](https://10.147.128.150/15469/) - 이 글은 Client Side Rendering(CSR)과 CSR 시 인프라 구성환경 중 AWS CloudFront+S3 조합에서의 트러블슈팅기입니다. OpenGraph(OG) 가 뭐지? 글을 시작하기 전에, OpenGraph(OG)가 익숙하지 않으신 분들을 위해서 스크린숏 하나를 보여 드리겠습니다. 요즘 웹페이지 주소를 공유하면 잠시 후 그 밑에 이미지와 문구가 표현되는 것 보셨으리라 생각합니다. 이 이미지와 문구들은 공유한 주소에 접근한 후, 그 페이지에서 양식에 맞는 정보를 - [결제는 계속된다: 결제 담당자가 장애에 대응하는 방법](https://10.147.128.150/15236/) - 우아한형제들에서는 배달의민족 앱의 배달, 장보기와 같은 서비스와 더불어서 배달의민족 앱 외부에서 제공되는 배민상회 등 다양한 서비스 들이 제공되고 있습니다. 이러한 서비스들이 공통점으로 가지고 있는 것이 있는데요. 그것은 바로 "결제"입니다. 고객이 주문을 완료하기 위해서는 결제는 필수적으로 구현해야 하는 중요한 요소 중 하나입니다. 서비스의 비즈니스 구조, 지향하는 목표에 따라 내부적으로 주문시스템이 분리되어 있는데요. 각 주문시스템을 담당하는 부서에서 - [웹프론트개발팀에서 배민 커머스 어드민을 개발하는 방법](https://10.147.128.150/15084/) - 순수 프론트엔드 개발자로만 구성된 팀에서는 어떤 방식으로 어드민을 개발하는지 소개합니다. - ["일단 백로그에 넣어두고 여유 있을 때 보는 걸로 할까요?" : 백로그를 백로그로 두지 않는 법](https://10.147.128.150/14484/) - 안녕하세요! 배민선물하기 서비스를 만들고 있는 PM 곽민경입니다. 프로덕트를 개발하다 보면 마치 세포분열이라도 하듯 할 일들이 늘어납니다. 그러다 보면 PM이든, 개발자든 습관적으로 자주 하게 되는 말이 있죠. "일단 백로그에 넣어두고 여유 있을 때 보는 걸로 할까요?" 백로그(Backlog). 단어가 주는 느낌 때문인지 어쩐지 해야 할 일을 뒤로 미뤄두는 느낌이 듭니다. 당장 시간이 없다는 이유로 해야 할 일을 - [스토리지 최적의 스펙 관리 시스템 만들기](https://10.147.128.150/13539/) - 스펙 관리 시스템 도입 배경 DB 스토리지 서비스를 운영하면서, 장애를 겪지 않기 위해 할 수 있는 보편적인 방법은 어떤 걸까요? 기존에 사용하는 서비스의 모니터링 지표(CPU, 트래픽, Connection ...)를 고려하여 서비스 안정성을 보장하는 방법 중 고스펙 장비를 사용하여 여유 있는 리소스를 준비하는 것이 보편적이라고 생각합니다. 실제로 우아한형제들에서도, 장애 영향도가 큰 서비스의 경우 예기치 못한 장애 상황을 - [너 혹시 T(Tester)야? : 테스트 효율을 높이는 Charles 툴 활용기](https://10.147.128.150/14550/) - 테스트 데이터를 효율적으로 쌓기 위해 Charles라는 프록시 툴을 도입하였습니다. 프록시 : 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것을 가리킴 (출처 : 위키백과) Charles 툴은 시스템과 인터넷 간의 모든 HTTP 및 SSL/HTTPS 트래픽을 보고 가로채고 분석할 수 있는 웹 디버깅 프록시 기능에 특화되어 있습니다. 요청, 응답을 확인하는 것만이 아니라 일반적으로는 재현할 수 없는 상황을 만들거나 - [요즘 협업 잘하는 팀은 이렇게 일합니다.](https://10.147.128.150/14671/) - 일을 하면서 '혼자 일하고 싶다' 라는 생각을 한번도 해보지 않은 분들은 아마 없을 것이라 생각합니다. 이런 마음은 협업에서 오는 시너지를 체감하지 못할 때 불쑥 튀어나오는데요. 저희가 속해있는 세일즈서비스팀에서는 이왕 함께 일하는 거, '혼자 일하고 싶다' 보다는 '함께 일해서 다행이다'는 마음이 들 수 있도록 최고의 팀웍을 기반으로 협업하기 위한 다양한 시도를 전개하고 있습니다. 세일즈서비스팀은 사장님의 배달의민족 - [우아한테크캠프 6기 교육생들의 최종 회고](https://10.147.128.150/14969/) - 우아한테크캠프 6기가 진행된 여름이 지나가고, 어느덧 겨울의 한가운데로 향하고 있습니다. 이번 우아한테크캠프(우테캠)의 여정은 교육생분들의 많은 도전과 성취, 그리고 협업 과정에서의 소중한 경험들로 가득 찼는데요. 저희 운영진도 오리엔테이션부터 데모데이와 수료식까지 교육생분들의 성장을 지켜보며, 열정이 빛나는 순간에 함께할 수 있어 기뻤습니다. 지난여름을 되돌아보며 수료생분들이 우테캠 과정에 대한 최종 회고글을 남겼습니다. 개발을 향한 열정과 미래에 대한 에너지가 돋보이는 - [우아한테크콘퍼런스, WOOWACON 2023에 지금 등록하세요!](https://10.147.128.150/14644/) - WOOWACON 2023 - [[다시 보기] 10월 우아한테크세미나: 글 쓰는 우아한 개발자](https://10.147.128.150/14513/) - 🎥 10월 우아한테크세미나 : 글 쓰는 우아한 개발자 🎬 10월 우아한테크세미나 1부 다시보기 🎬 10월 우아한테크세미나 2부 다시보기 지식과 경험을 명확하게 전달하는 글쓰기 능력은 직무 역량을 키우고 또 가늠하는 핵심 요소가 되는 만큼, 중요합니다. 우아한형제들은 단순히 '글을 잘 써라', '지식을 유통해 선한 영향력을 확대해라'의 구호에 그치지 않고, 실제 글을 잘 쓰게 하기 위해 구성원들의 역량과 - [[모집 마감] 우아한스터디 2023 겨울시즌](https://10.147.128.150/14224/) - 이 글은 PC 환경에 최적화되어 있습니다. 모바일 환경에서는 우아한스터디 2023 겨울시즌 페이지와 우아한스터디 2023 겨울시즌 신청서를 참고하세요. - [[다시 보기] 8월 우아한테크세미나: 행정동을 법정동으로, 배민 지리 체계 프로젝트 살펴보기](https://10.147.128.150/13547/) - 🎥 8월 우아한테크세미나 : 행정동을 법정동으로, 배민 지리 체계 프로젝트 살펴보기 🎬 8월 우아한테크세미나 다시보기 📅 일정 2023. 8. 31.(목) 저녁 7시, 약 90분간 우아한테크 YouTube 채널 실시간 스트리밍 🖇️ https://youtube.com/@woowatech 📝 주요 내용 프로젝트 배경 1) 지리 체계 소개 (행정동 vs 법정동) 2) 지리 관리 기준 체계를 행정동으로 관리했을 때의 문제점 프로젝트 검토 1) - [굴러가는 자동차에 안전하게 타이어 교체하기(w. CMS 기능 개발)](https://10.147.128.150/14301/) - 📃 배경 배민외식업광장서비스팀은 외식업 사장님에게 도움이 되는 콘텐츠와 기능을 제공하는 '배민외식업광장' 포털사이트를 개발하고 있습니다. 더하여, 배민외식업광장 포털사이트에는 콘텐츠를 노출할 영역을 관리할 수 있는 서비스를 가지고 있습니다. 이 글에서는 배민외식업광장 사이트에서 노출중인 콘텐츠에 부작용 없이 안전하게 특정 기능을 개발했던 경험을 공유하고자 합니다. 특정 영역에 어떤 콘텐츠를 노출할 것인지 관리하는 서비스를 CMS(Content Managment System)라고 부르며, 이해관계자 분들과 - [레퍼런스 없이 000 만들기, 아이디어는 어디에서 왔을까?](https://10.147.128.150/14107/) - 우아한형제들 구성원들이 하루도 빠짐없이 쓰는 프로덕트는 무엇일까요? 바로 그룹웨어입니다. 얼마 전 우아한형제들의 그룹웨어 ‘우아한오피스'를 5년 만에 리뉴얼했습니다. 입사 후 담당 PM으로 진행했던 개편 프로젝트는 이번이 처음이 아니었어요. 우아한닷컴, 브랜드 온라인샵 등 각종 대외 사이트들도 변화 방향에 맞는 새로운 모습으로 개편을 진행해왔었지만, 그중에서도 이번 프로젝트는 난이도 상이었습니다. 그 이유는 레퍼런스 찾기가 거의 불가능하다는 점 때문이었어요. 일반적으로 - [[모집] 우아한테크코스 2024 신입생을 모집합니다](https://10.147.128.150/14072/) - 소프트웨어 장인을 꿈꾸는 모든 분들을 위한 우아한테크코스 2024 신입생 모집을 시작합니다! 우아한테크코스(이하, 우테코)가 5기를 지나 어느덧 신입생(6기)을 맞이할 시간이 다가왔네요. 5기를 시작한 게 엊그제 같은데 벌써 신입생 모집이라니, 시간이 눈코 뜰 새 없이 빠르게 흘러가는 것 같습니다. 2024년 신입 기수는 지난 기수와 동일하게 웹 백엔드, 웹 프론트엔드, 모바일 안드로이드 교육까지 총 3개의 교육 분야를 운영할 - [로그 및 SQL 진입점 정보 추가 여정](https://10.147.128.150/13429/) - SQL과 로그에서 해당 로그를 남기면서 그 코드/SQL를 유발한 진입점을 남겨서 추적성을 높였습니다. - [[종료] 우아한스터디 2023 여름시즌](https://10.147.128.150/11528/) - 이 글은 PC 환경에 최적화되어 있습니다. 모바일 환경에서는 우아한스터디 2023 여름시즌 페이지와 우아한스터디 2023 신청서를 참고하세요. - [Spring Boot에서 S3에 파일을 업로드하는 세 가지 방법](https://10.147.128.150/11392/) - Spring Boot에서 S3에 파일을 업로드하는 세 가지 방법 | 안녕하세요. 세일즈서비스팀에서 전자계약서 시스템을 개발하고 있는 박민규입니다. 최근 저는 Spring Boot + Kotlin을 활용한 프로젝트에서 특별한 도전과제에 직면했습니다. 바로 최대 3GB의 파일을 안정적으로 업로드하는 기능을 구현하는 것이었습니다. 대용량 파일 업로드에는 다양한 고려 사항과 복잡성이 따르기 때문에 많은 고민이 필요했습니다. 그 과정에서 다양한 방법을 탐색하게 되었고, 대부분 아래 세 가지 방법에서 기술적으로 크게 벗어나지 않다는 것을 - [PM스터디 그것이 알고싶다. 오늘의 PM, 내일의 서비스](https://10.147.128.150/13977/) - PM들은 어떤 스터디를 할까? 개발자들의 스터디는 활성화되어 있고 다양한데 그에 반면 PM은 PM스터디를 찾는 것도, 다양한 주제의 PM스터디를 하고 싶지만, 기회를 얻기에도 어려웠습니다. 이러한 어려움을 타파하고자 내부에서는 PM들의 성장을 돕기 위해 적극적으로 PM들의 스터디를 지원하고 있는데요! 저도 "피그마 고수되기", "why 잘하기"와 같은 다양한 스터디에 참여하면서 성장에 대한 니즈를 채우고 다른 PM분들이 하는 걸 보면서 자극을 - [우아한형제들에서 시니어 개발자로 일하면 어떨까? – (2) 문화](https://10.147.128.150/12292/) - 2. 문화 2.1. 개발문화: 공유에 대한 허들이 낮고, 심리적 안정감을 느끼게 해주는 것 🙋 조직문화 좋다는 이야기는 들었는데 개발문화는 어때요? 흔히 ‘개발문화는 팀바팀이다’라고 얘기하고는 합니다. 네, 사실 맞는 것 같아요. 이렇게 큰 조직에서 모든 팀이 동일한 개발문화를 가지고 있지는 않습니다. 하지만 분명 전사적으로 공통으로 가진 DNA는 존재합니다. 인터뷰이들이 만장일치로 뽑아준 우리 개발문화 DNA는 바로 ‘공유'였어요. - [밤샘의 추억, 생성 AI 해커톤 "우아톤 2023"](https://10.147.128.150/13929/) - 우아톤은 우아한형제들 구성원 누구나 참여할 수 있는 사내 해커톤으로, 구성원 3~5명이 한 팀을 이뤄 24시간 안에 프로토타입으로 서비스를 구현해 내는 행사입니다. 업무에서 벗어나 새로운 아이디어를 실현해 볼 수 있는 시간을 드리고, 수상 팀에게는 상금과 실제 배민 서비스에 적용할 수 있는 기회를 제공합니다. 운영하는 DR팀 입장에서 다른 행사보다 특히 우아톤이 기억에 남는 이유는, 밤샘 행사인 만큼 - [우아한테크코스 5기 크루들의 서비스 출시!](https://10.147.128.150/13604/) - 안녕하세요. 테크코스교육개발실 이원미입니다. 어느덧 무더운 여름을 지나 선선한 가을이 다가오고 있네요. 우아한테크코스(이하, 우테코) 크루들은 레벨3 기간 동안 '찐한 협업'을 목적으로 둔 팀 프로젝트를 진행합니다. 무더운 여름의 날씨만큼 크루들도 서비스 개발을 위해 뜨거운 열정을 불태웠는데요. 이번 5기 크루들은 각자 만들고 싶은 서비스를 직접 기획하면서, '프로그래밍'과 더불어 '사용자'에 대한 고민을 깊게 하는 경험을 함께 하였어요. 우리가 만들어 - [누구나 할 수 있는 10배 더 빠른 배치 만들기](https://10.147.128.150/13569/) - 최근 셀러시스템팀에서는 하루 한 번 주기로 실행되는 배치를 최적화하는 과제를 진행했습니다. 작업 결과 좋은 성과를 얻었고 최적화를 검토하는 의사 결정 과정 자체로도 의미 있는 사례라고 생각해 경험을 공유하고자 합니다. 먼저 셀러시스템에서 관리하는 비운영 시간 데이터 설명부터 시작해 보겠습니다. ‎ 비운영 시간 데이터 셀러시스템에서는 가게와 업주에 대한 다양한 데이터를 관리합니다. 배달의민족에 입점한 사장님들이 가게의 요일별 휴무일, - [[배민스토어] 우리만의 자유로운 WebFlux Practices](https://10.147.128.150/12903/) - 혹시 배민에서 음식 말고 다른 것들을 주문해 보신 적 있나요? 배민은 각종 전자기기부터 꽃, 화장품, 건강기능식품 등을 배달 받아볼 수 있는 배민스토어 서비스를 운영하고 있습니다. 얼마 전 배민스토어가 개편되면서 지역에서 품질 좋은 꽃이나 정육 등을 판매하는 사장님들도 입점할 수 있게 되었습니다. 이때 화면도 개편되었지만, 코드 차원에서도 아예 저장소를 새로 만들어서 대부분의 기능을 재개발하는 야심찬 공수를 - [[배민스토어] 서비스개발 팀장의 일반셀러 프로젝트 진행기](https://10.147.128.150/13030/) - 배달의민족 앱에는 ‘배민스토어’라는 서비스가 있습니다. 유명 브랜드부터 동네 상점까지 다양한 가게의 상품들을 배달하는 서비스예요. 이 글에서는 배민스토어 서비스를 확장하면서 두 마리 토끼(비즈니스와 기술)를 잡기 위해 고군분투하는 배민스토어서비스개발팀의 에피소드와 그 과정에서 만들어간 팀 문화에 대한 이야기를 해 볼까 합니다. 배민스토어란? 먼저, 배민스토어는 어떤 서비스인지 소개해 보겠습니다. 필요한 모든 것을 오늘 문 앞으로 “필요한 모든 것을 오늘 - [현실 타협은 후퇴다! 안 되는 일을 되게 만드는 PM이란?](https://10.147.128.150/13249/) - 들어가며, 안녕하세요. 셀러시스템팀에서 팀원 분들의 사랑을 듬뿍 받아 무럭무럭 자라고 있는 막내 PM(Product Manager) 이송인이라고 해요! >.O 셀러시스템팀은 입점 심사를 위해 필요한 사업자 정보부터 가게 운영에 필요한 다양한 정보를 관리하고, 빠르게 변화하는 시장의 요구에 맞춰 정보를 효율적으로 관리하는 역할을 하고 있어요. 프로젝트를 진행하면서 예상치 못한 문제상황이 생겼을 때, 지혜롭게 이슈를 해결해 나간 경험과 배운 점을 공유드리고자 - [팀 프로젝트가 나에게 남긴 것](https://10.147.128.150/9162/) - 안녕하세요. 테크코스교육개발팀 이원미입니다 : ) 지난 8월 19일, 8주간의 팀 프로젝트 기간이 끝나고 우테코 4기도 막바지를 향해 달려가고 있습니다. 팀 프로젝트 기간 동안 밤낮으로 고생하며 프로젝트를 만들어가던 크루들의 모습을 잊을 수가 없는데요. 우테코의 팀 프로젝트는 단순히 하나의 서비스를 개발해 내는 경험만이 있는 것은 아닙니다. 레벨 1, 2에서 배운 개념들을 적용해야 하고, 미션처럼 주어지는 요구사항을 반영시키고, - [우아한테크캠프 6기 교육생들의 7월 회고](https://10.147.128.150/13374/) - 6월 말 풋풋한 오리엔테이션으로 처음 인사를 나눈 우아한테크캠프 6기가 시작된 지 벌써 한 달이 훌쩍 지나가고 있습니다. 이번 우테캠은 Java 언어 기반의 백엔드 교육으로 구성되어, 지난 7월 동안 강의와 함께 미니 프로젝트를 개발하는 형식으로 활발히 진행되었는데요. 뜨거웠던 7월을 마무리하는 시점에 교육생 각자의 관점으로 바라본 캠프 활동을 회고에 담아내었습니다. 솔직하고 진솔한 경험의 흔적이 담겨있기도 하고, 스스로 - [Slack에 ChatGPT를 연결하여 업무에 활용해 보기](https://10.147.128.150/11072/) - 2022년 11월 ChatGPT가 세상에 등장하고 벌써 몇 달이 지났습니다. 새로운 AI 모델의 등장에 환영하는 사람도 있었고, 신기술의 잘못된 사용을 우려하는 목소리도 있었습니다. 하지만 지금은 ChatGPT를 한 번도 사용해 보지 않은 사람은 있어도 한 번만 써본 사람은 없을 정도로 다양한 분야에서 대화형 인공지능을 활용하고자 하는 시도가 계속 늘고 있습니다. 진짜 쓸만한 거 맞아? 우리들 대부분은 "챗봇"이라는 - [함께 배달주문할 때는? 함께주문! (함께주문 오픈 이야기)](https://10.147.128.150/10232/) - 가족, 친구, 동료들과 함께 음식을 주문할 때 배민 앱을 켜고 핸드폰을 돌려가며 메뉴를 골라본 경험이 있으신가요? 아니면 메신저로 함께 먹을 메뉴를 취합하고 주문하신 경험이 있으신가요? 이제는 핸드폰을 돌리거나 메신저로 메뉴를 취합할 필요없이 배민 앱에서 ‘함께주문' 기능을 사용하시면 됩니다. 함께주문은 함께 먹을 가게를 공유하고 각자의 핸드폰에서 메뉴를 담을 수 있는 기능으로 사용법은 간단합니다. 1) 가게 상세 - [[배민스토어] 신입 개발자 배민스토어 6개월 생존기](https://10.147.128.150/12987/) - 어떤글인가요? 안녕하세요. 작년 겨울, 우아한테크코스를 수료하고 올해 1월에 배민스토어서비스개발팀으로 입사한 유현호입니다. 이제 막 6개월간의 수습 기간을 마치고 배민스토어에서 느꼈던 경험들과 배웠던 것들을 되돌아보고자 합니다. 기술적인 설명을 하는 글보단 팀원들과 함께 문제를 해결했던 경험과 배민스토어에서 느낀 점들을 회고하는 느낌으로 작성해 보았습니다! 가벼운 마음으로 읽어주시면 감사하겠습니다. 😀 입사 후 한 달간 그리고 담당한 기능들 입사 후 한 - [[배민스토어] 배민스토어에 이벤트 기반 아키텍처를 곁들인...](https://10.147.128.150/13101/) - 배민스토어는 뷰티, 가전, 책, 패션, 꽃, 반찬 등 다양한 카테고리의 상품을 제공하는 서비스입니다. 지난 배민스토어 글 두 편에서 배민스토어 서비스와 개발 과정 일부를 자세히 소개해 드렸는데요. 이번 글에서는 배민스토어 전시 영역의 아키텍처를 간단히 소개하고자 합니다. 이전 글 참고 [배민스토어] 서비스개발 팀장의 일반셀러 프로젝트 진행기 [배민스토어] 우리만의 자유로운 WebFlux Practices 시작하기에 앞서, 대표로 전시 아키텍처 글을 - [뭐 이런 것도 다 픽업 되나요? (배민스토어 픽업 고객 서비스편)](https://10.147.128.150/10567/) - 2023년 1월 5일, 배민스토어 픽업 서비스가 세상 밖으로 나오게 되었습니다. 주변에서 픽업의 ‘픽'자만 들려도 귀를 쫑긋하던 4개월이 쏜살같이 지나갔네요. 저는 픽업을 하기 위해 고객이 배민 앱에서 거쳐야 하는 모든 접점(배민스토어 홈, 각 셀러 홈, 상품상세, 장바구니, 주문서, 주문내역, 픽업현황, 알림)을 담당하는 PM이었어요. 이전에는 장바구니부터의 고객 경험을 다루는 주문 업무를 하다가, 배민스토어 전시기획팀에 온 뒤 긴 - [뭐 이런 것도 다 픽업됩니다!(배민스토어 픽업 플랫폼 및 셀러서비스편)](https://10.147.128.150/10593/) - 배민스토어는 고객 경험을 만들어가는 고객서비스, 셀러의 경험을 만들어가는 셀러서비스, 배민스토어의 기반인 플랫폼으로 나뉘어 있는데요. 배민스토어셀러기획팀은 셀러의 경험을 만들어가는 셀러서비스와 배민스토어의 기반인 플랫폼을 담당하고 있습니다. 배민스토어 픽업서비스 1탄 고객 관점에서의 픽업서비스 소개에 이어 이번 편에서는 배민스토어 픽업서비스를 고객에게 제공하기 위한 첫 시작인 플랫폼 및 셀러들의 이야기해 보려고 합니다. 저는 이번 픽업 프로젝트에서 셀러서비스 및 픽업을 담기 - [[다시 보기] 7월 우아한테크세미나: MLOps를 활용한 AI 서비스 개발 스토리](https://10.147.128.150/12924/) - 7월 우아한테크세미나 : MLOps를 활용한 AI 서비스 개발 스토리 🎬 7월 우아한테크세미나 다시보기 📅 일정 2023. 7. 27.(목) 저녁 7시, 약 90분간 우아한테크 YouTube 채널 실시간 스트리밍 🖇️ https://youtube.com/@woowatech 📝 주요 내용 우아한형제들의 AI 서비스 AI 서비스를 적용할 때의 어려움 이 어려움을 해결하기 위한 MLOps 구축 우아한형제들이 생각하는 MLOps MLOps를 이용한 서비스 개발 과정 Q&A - [[다시 보기] 6월 우아한테크세미나: GenAI의 시대, 치열해진 시장의 미래 전략](https://10.147.128.150/12745/) - 🎬 6월 우아한테크세미나 다시보기 📅 일정 2023. 6. 29.(목) 저녁 7시, 약 90분간 우아한테크 YouTube 채널 실시간 스트리밍 🖇️ https://youtube.com/@woowatech 📝 주요 내용 Generative AI와 GPT-4의 등장 Generative AI(이하 GenAI)와 튜링 테스트, 중국어 방 실험, 무서운 AI의 발전 속도 놀라운 GenAI 성능, Stable Diffusion GenAI는 어떻게 인간처럼 대답할 수 있을까? 모두를 놀라게 한 GPT-4, GPT-5는 - [Spring Boot Kotlin Multi Module로 구성해보는 헥사고날 아키텍처](https://10.147.128.150/12720/) - 들어가는 말 백엔드 개발자들은 프로젝트를 처음 구성할 때 사용할 기술에 관해 많은 고민을 합니다. 우리 데이터베이스(DB)로 CockroachDB가 요즘 흥한다던데 이걸 사용해 보는 건 어떨까? HTTP 클라이언트로 Retrofit이 좋을까 Feign을 사용하는 것이 좋을까? MySQL은 좀 진부하지 않아? 새로운 걸 좀 해볼까? 이 과정은 짧게는 개발자들 사이의 갑론을박에서 길게는 윗선의 결정까지 적지 않은 시간적 비용이 소모됩니다. 문제는 - [디자인 전공 출신 신입, 백엔드 PM 으로 살아남기](https://10.147.128.150/12044/) - 안녕하세요! 우아한인턴 1기를 거쳐 현재 결제정산프로덕트실 정산플랫폼팀 PM으로 근무하고 있는 황유진입니다. 아직 신입이라고 생각되는데 벌써 입사한 지 1년 하고도 2개월을 지나고 있네요.😭 짧다면 짧은 기간이지만 우아한형제들에 신입 PM으로서 첫발을 딛으며 했던 신입만의 고민을 공유해보고자 합니다. 제 경험상 서비스기획에 대한 도서나 아티클은 많지만, 백엔드,플랫폼 PM에 대해서는 많은 정보가 없고 경력 PM들의 사례들이 비교적 많아서 아쉬웠습니다. 비단 - [배민쇼핑라이브를 만드는 기술: 채팅 편](https://10.147.128.150/5268/) - 2021-10-14 | 라이브선물스쿼드의 오지산입니다. 이 글에서는 저희 배민쇼핑라이브에서 "채팅을 자체 구현하게 된 배경"과, "기술적인 부분"을 설명드리려고 합니다. 배민쇼핑라이브에서 채팅은 스태프와 고객 사이의 주요한 소통 창구가 되며, 구매인증 이벤트의 수단이기도 합니다. - [PM이 사용자가 아닌 서비스는 어떻게 만들까? : 배민외식업광장 '장사캘린더' 오픈부터 개선까지](https://10.147.128.150/12417/) - 안녕하세요. 배민외식업광장 Product Manager 권자경입니다. 배민외식업광장팀은 외식업 사장님들을 위한 서비스인 '배민외식업광장'(a.k.a.배외광)을 담당하고 있습니다. 외식업 사장님에 대해서 잘 모르시겠다고요? 처음 팀에 입사했던 제 심정이 딱 그랬습니다. '내가 절대 사용자가 될 수 없는 서비스'를 만든다는 데에서 부담감이 있었거든요. 지금은 부담감은 내려놓고, 어떻게 사장님들의 요구사항을 파악하고 도움이 되는 서비스를 만들지 배우는 중입니다. 어디선가 저처럼 'PM이 사용자가 아닌 서비스를 - [자동화된 UI 회귀테스트 도입하기](https://10.147.128.150/6460/) - 안녕하세요, 사장님들의 주문처리를 위한 Windows Application 개발, 운영 및 보수를 하고 있는 장정환입니다. 이번 글은 사용자와 상호작용하는 Front-end의 검증 간 활용 가능한 'UI 자동화 Test 도입 배경'과 '준비 과정의 경험'을 공유코자 작성하였습니다. - [[모집] 2023 우아한테크캠프 6기](https://10.147.128.150/11427/) - 우아한개발자가 되고 싶은 분들을 위한 2023 우아한테크캠프 6기 모집이 시작됩니다! 올해 우아한테크캠프 6기는요! 🏝 여름방학 8주 동안 💡 Java 언어 기반의 백엔드 교육 👩🏽‍💻🧑🏽‍💻 자기주도형 프로젝트 기반 교육 🤝 우아한개발자와의 최종 프로젝트 데모데이 🎉 신입 개발자로 채용의 기회까지 Java 언어 기반의 백엔드 교육 이번 우아한테크캠프는 Java 언어 기반의 백엔드 교육으로 진행하게 됩니다. 1-6주차의 교육은 강의와 - [[다시보기] 3월 우아한테크세미나|실시간 음식배달 플랫폼에서 활용한 분산 이벤트 스트리밍](https://10.147.128.150/7894/) - ❓대량 실시간 트랜잭션 문제 해결을 위한 아키택트, 알고리즘, 다양한 라이브러리. 궁금하신가요? 배달은 보통 30분 내외로 이루어 집니다. 주문이 발생하고, 가게와 고객, 라이더 사이에서도 여러번의 트랜잭션이 이루어지게 되고, 결국 하루동안 주문수의 수십배의 트랜잭션이 이루어지게 됩니다. 데이터의 상태변경도 주문마다 30분간 이뤄지죠! 이런 대량의 트랜잭션 문제를 어떻게 해결했는지 소개합니다. ❗카프카 스트림즈를 적극 활용하는 분산 이벤트 처리를 경험해보세요. 주문 - [[다시보기] 4월 우아한테크세미나|지속가능한 SW개발을 위한 코드리뷰](https://10.147.128.150/8159/) - ❓왜 코드리뷰를 해야할까요? 많은 개발자들은 흔히들 말하는 “백발의 개발자"를 꿈꿉니다. 그렇게 되기 위해서는 경력이 쌓이는 만큼 그에 걸맞은 개발자로서의 역량을 갖추어야 합니다. 학교에서 교수님에게서 배운 것으로 SW 개발 역량은 부족합니다. 현업에서 개발자들의 역할은 자신의 이론이나 알고리즘을 구현하는 것으로 끝나는 것이 아니라 첫 출시(Delivery) 후에 지속적으로 요구되는 기능 변경, 추가 등의 요구사항을 안정적으로 빠르게 반영하는 운영성 - [[다시보기] 5월 우아한테크세미나 토크쇼 | 우아한형제들 개발자가 푸는, 공부하고 성장하는 노하우?!](https://10.147.128.150/8298/) - 5월 30일 월요일 저녁 7시! 알림설정하고 본방사수하세요 혼자서는 성장할 수 없는 시대! 함께 공부하고 성장하기 위해 우아한형제들이 고민한 방법은?! 그리고 우아한형제들 개발자들이 풀어내는 그 소소하지만 알찬 경험과 노하우! 다 함께 편안한 분위기에서 이야기 나눠보아요 🔔위의 유튜브 링크를 클릭하고 "알림설정"을 클릭하세요🔔 🎥토크순서 WELCOME! 모두의 무럭무럭 성장을 위하여! (19:00~19:20) Developer Relations팀 조은옥&구은희 오늘의 토크쇼 패널 소개 (19:20~19:35) - [[다시보기] 7월 우아한테크세미나 토크쇼 | 개발자도 글을 잘 써야 한다고요?!: 개발자를 위한 글쓰기 코칭의 시간](https://10.147.128.150/8917/) - 📅세미나 들여다 보기 2022. 7. 27.(수) 저녁 7시~9시 우아한Tech YouTube 라이브 개발자는 개발만 잘 하면 되는 줄 알았는데 말이죠🤔 그런데 웬걸! 써야 할 글이 왜 이리 많을까요. 요구 사항을 정확하게 정리해야 하고 협업 과정에서 문제없이 의사소통을 해야 하고 사용자를 위해 오류 메시지를 직접 써야 할 때도 있고 개발 가이드를 써야 할 때도 있고...! 그거 아시나요? - [[다시보기] 8월 우아한테크세미나 | 개발자가 꼭 알아야 할 애플리케이션 보안: 입문부터 놓치면 안될 트렌드까지?!](https://10.147.128.150/9135/) - 📅세미나 들여다 보기 2022. 8. 31.(수) 저녁 7시~9시 우아한Tech YouTube 라이브 애플리케이션 보안, 즉 흔히 말하는 취약점 진단은 안전한 앱 운영을 위해 꼭 필요하죠. 그러나 개발 vs 보안...! 이 관계는 숙명적으로 부딪힐 수 밖에 없는데...🤔 우아한형제들의 보안 담당자가 말합니다. 개발자가 꼭 알아둬야 할 보안은 무엇일까요? 앱 보안을 위해 해야하는 일은 어떤 것이 있을까요? 취약점 진단은 - [[다시보기] 9월 우아한테크세미나 | 디벨로퍼 릴레이션! 개발자, 커뮤니티, 기업을 잇다](https://10.147.128.150/9199/) - 📅세미나 들여다 보기 2022. 9. 29.(목) 저녁 7시 우아한Tech 유튜브 라이브 기술 커뮤니티의 가치. 개발자분들이라면 이미 잘 알고 계시겠죠? 우리는 커뮤니티를 통해 성장하고, 공부하고, 때로는 커리어를 키워가고 있습니다. 그렇다면 기업에게 있어 기술 커뮤니티는 어떤 가치가 있을까요? 최근 많은 관심을 받고있는 '디벨로퍼 릴레이션'은 무엇일까요? 개발자, 기술커뮤니티, 그리고 기업을 잇기 위해 디벨로퍼 릴레이션은 어떤 일을 하는지 등장배경부터 - [[다시보기] 2월 우아한테크세미나: 우아한형제들의 RDS Aurora Graviton2 성능 이슈 해결 사례와 RDS를 모니터링하는 방법](https://10.147.128.150/10645/) - 🎬 2월 우아한테크세미나 다시보기 우아한형제들의 RDS Aurora Graviton2 성능 이슈 해결 사례와 RDS를 모니터링하는 방법 2월 세미나에서는 우아한형제들에서 Aurora에 Gravtion2 적용 시 write performance 이슈를 어떻게 해결했는지 알려드리고, 우아한형제들에서는 어떻게 RDS를 모니터링하는지 설명해 드립니다. 2월 28일(화) 저녁 7시, 우아한테크 YouTube 채널에서 만나요! 🖇️ https://youtube.com/@woowatech 📌 신청 기간 2023. 2. 28.(화)까지 신청하신 분께는 세미나가 끝난 뒤 - [[다시 보기] 5월 우아한테크세미나: 사례별로 알아보는 안전한 S3 보안 가이드](https://10.147.128.150/12200/) - 🎬 5월 우아한테크세미나 다시보기 🖇️ https://youtube.com/@woowatech 📖 참고 블로그: 사례별로 알아본 안전한 S3 사용 가이드 📝 주요 내용 AWS Simple Storage Service(S3) 간단 소개 보안 관점에서 살펴보는 S3 S3의 보안 가이드가 어려운 이유 사례별로 알아보는 S3 보안 가이드 정적 웹 호스팅 버킷 정적 리소스 파일 서빙용 버킷 원격 파일 저장용 버킷 Presigned url을 활용한 버킷 - [우아한형제들에서 시니어 개발자로 일하면 어떨까? - (1) 일](https://10.147.128.150/12250/) - 0. 들어가기 이 시리즈는 ‘우아한형제들에서 시니어 개발자로 일하면 어떨까?’에 대한 답을 찾는 데 도움을 드리고자 시작했습니다. 우아한형제들의 성장/동료/개발문화/근무환경에 대해 ‘시니어 개발자’에 초점을 두고 한눈에 볼 수 있는 콘텐츠가 없었거든요. 무엇보다 이 콘텐츠를 전달함에 있어 현직자의 생생한 목소리로 우리의 일과 문화를 설명하는 것이 좋을 것 같아, 다양한 직군의 9명의 시니어 개발자를 만났습니다. 그리고 9명의 시니어 개발자가 - [배민상회와 검색플랫폼 연동기](https://10.147.128.150/11732/) - 배민상회와 사장님 그리고 그 사이에 검색 배민상회는 외식업 사장님들을 위한 쇼핑몰입니다. 즉, 쇼핑 자체가 업무의 일환인 사용자들이 이용합니다. 그러다 보니 상품을 하나하나 탐색하고 찾아가는 즐거움보다 빠르게 원하는 상품을 검색하는 것이 중요합니다. 배민상회는 사장님들의 “업무"를 돕기 위해 어떤 방식으로 검색을 하고 있었을까요? 배민상회 서비스 화면(출처: https://mart.baemin.com) 초기에 배민상회는 DB에 저장된 상품정보를 like 검색을 이용하여 찾고 있었고, - [Yarn berry workspace를 활용한 프론트엔드 모노레포 구축기](https://10.147.128.150/7976/) - 안녕하세요 우아한형제들 딜리버리프로덕트실 DH로컬라이징스쿼드 입니다. 저희 조직에서는 백오피스 애플리케이션, 크로스플랫폼 모바일 애플리케이션 등 다양한 프론트엔드 프로덕트들을 개발, 운영하고 있습니다. 이 글을 통해 저희 조직에서 프론트엔드 개발 환경을 개선하기 위해 고민했던 모노레포 기술과 구축했던 경험을 공유하려고 합니다. 모노레포 도입을 고민할 수밖에 없었던 열악했던 상황을 먼저 이야기하고, 모노레포 구축에서 느낀 어려운 점과 해결방안을 소개하겠습니다. 작업을 하고 나서 - [왕초보 신입 개발자의 우당탕탕 이력서 작성기](https://10.147.128.150/11998/) - 🚨 이 글은 우아한형제들의 공식적인 의견이 아닌, 개인의 경험과 의견을 서술한 글입니다. 🚨 서론 안녕하세요. 올해 1월, 우아한형제들에 신입으로 입사해 배민상회개발팀에서 일하고 있는 권시연입니다.😊 오늘은 개발자의 이력서에 대한 이야기를 하려고 합니다. 사실, 개발자 이력서에 대한 이야기는 이미 인터넷에 자료가 방대합니다. 아쉬운 점을 굳이 하나만 꼽자면 저같은 경험 없는 신입에게는 경력이 없다보니 인터넷의 모든 자료들을 참고하기는 - [작고 아기자기하지만, 개발조직의 문화 만들기 [ep 1. 웹프론트개발그룹 운영진을 소개합니다]](https://10.147.128.150/9347/) - 2022년 1월 5일 평온한 오후, 저는 재택근무를 하며 업무에 집중하고 있었습니다. ‘띠릭' 갑자기 정적을 깨며 울리는 슬랙 알람 소리. “웹프론트개발그룹 2022 운영진을 모집합니다!” 알람이 울렸던 곳은 바로 웹프론트개발그룹 채널이었습니다. 100명이 넘게 초대되어 있는 이 채널에 이렇게 ‘@here’ 멘션이 오는 경우는 보기 드문 일이었습니다. 어떤 중요한 일이 벌어지는 걸까요? ( 두근두근 ) 예? 웹프론트개발그룹 운영진이요? 웹프론트개발그룹은 - [[다시 보기] 4월 우아한테크세미나: 우아한 테크리더 4인의 "공감 토크쇼"](https://10.147.128.150/11323/) - 🎬 4월 우아한테크세미나 다시보기 ‘어느샌가 시니어 개발자가 되었고, 어느덧 수년간을 리더로 살아왔다.’ 4월 우아한테크세미나는 우아한형제들 테크리더 4인을 모시고, 시니어 개발자로 살아가면서 느끼는 고민들을 함께 공유하고 공감하는 교류의 장을 준비했습니다. 테크 리더분들은 현재 어떤 고민을 안고 앞으로를 준비하고 있을까요? ‘조직의 성과와 개발자의 성장/동기부여 어떻게 하면 얻을 수 있을까’를 고민합니다. 단 하나의 주문도 소중하다는 마음으로, 배달의민족 고객의 - [2023 우아한테크캠프, 'Java 백엔드 교육'으로 새롭게 돌아옵니다.](https://10.147.128.150/11411/) - 안녕하세요. 우아한테크캠프에 관심을 가지고 계신 분들께 새 소식을 전해드립니다. 우아한형제들은 지난 우아한테크캠프의 교육 과정을 면밀히 검토하였고, 올해는 더 나은 형태로 진행하고자 고민을 거듭했습니다. 그리고 무엇보다 많은 분들께서 우아한테크캠프를 기다려 주시는 것을 알기에 개발자 양성 교육에 대한 진심을 가지고 새로운 계획을 마련하게 되었습니다. 2023년 여름, 우아한테크캠프는 *넥스트스텝과 함께 백엔드 개발 교육으로 진행합니다! 기존에는 프론트엔드 개발 교육으로 - [우아한테크코스 한 달 생활기](https://10.147.128.150/11309/) - 안녕하세요. 테크코스교육개발실 이원미입니다. 우아한테크코스(이하, 우테코)는 2019년을 시작으로 벌써 다섯 번째 기수를 맞이하게 되었습니다. 벌써 5기라니 감회가 남다르네요.🙂 올해에는 크게 두 가지 변화가 있었습니다. 새로운 교육 분야의 신설과 선발 과정에서의 변화인데요. '모바일 안드로이드' 교육이 새로 신설되면서 총 3개의 교육 분야를 운영하게 되었고, 선발 과정에서는 온라인 코딩 테스트를 없애고 모든 지원자에게 프리코스 과정에 참여할 기회를 제공했었죠. 교육 - [[다시보기] 3월 우아한테크세미나: 테크 리더 3인이 전하는 "개발자 원칙"](https://10.147.128.150/11045/) - 🎬 3월 우아한테크세미나 다시보기 테크 리더 3인이 전하는 "개발자 원칙" 3월 세미나에서는 "개발자 원칙"의 저자 이동욱, 박미정, 박성철 님을 직접 모시고 개발자의 생존과 성장 원칙에 관해 깊이 있는 이야기를 나눕니다. 인프랩, 무신사, 컬리에서 테크 리더로 활약 중인 분들이 어떤 고민과 경험을 통해 지금의 원칙을 세우고 걸어 나갈 수 있었을까요? 세 분의 이야기에 함께해 보세요. 이번 - [실험과 기능플래그를 위한 실험플랫폼 구축하기](https://10.147.128.150/9935/) - 실험과 기능 플래그란? 실험(AB 테스트)과 기능 플래그(Feature Flag 혹은 Feature Toggle)에 대해 알고 계신가요? 실험은 대조군(A)과 실험군(B)을 나누어 유입되는 사용자들의 반응을 통해 어떤 방법이 가장 효과적인지를 검증하는 과정입니다. 서비스에서는 사소한 변화 하나가 생각보다 큰 영향을 미칠 수 있습니다. 실험을 통해 어느것이 가장 효과적인 방법인지 검증하고 적용한다면 그에 따른 사용자의 이탈이나 비용 낭비를 최소화할 수 있습니다. - [프로모션 시스템 엿보기: 파일럿 프로젝트](https://10.147.128.150/10795/) - 안녕하세요. 1월 3일, 2023년 새해를 맞아 배민푸드서비스개발팀 신입 개발자로 합류하게 된 김동규입니다. “우아한형제들 기술블로그"를 보면서 언젠가 제 이름으로 된 글을 올리겠다는 꿈을 가지고 있었는데요! 오늘 파일럿 프로젝트 글을 통해 그 꿈을 이루게 되어 너무 감격스럽습니다. 오늘은 신입으로서 파일럿 프로젝트를 통해 팀에 어떻게 적응해나갔는지 이야기를 풀어보려고 합니다. 프로모션 시스템 구현하기 파일럿 프로젝트로 프로모션 시스템 API 서버 - [리뷰프로덕트팀 신입 개발자의 파일럿 프로젝트](https://10.147.128.150/10600/) - 안녕하세요! 우아한테크코스 교육을 수료하고 리뷰프로덕트팀에 입사한 신입 개발자 유재서입니다. 😃 교육받을 때 우아한형제들 기술 블로그에서 많은 도움을 받았었는데, 블로그에 글을 기재할 수 있게 되어서 너무 영광입니다. ㅎㅎ 새로운 지식과 방법들을 학습하며 진행한 프로젝트이다 보니 부족한 부분이 많은데, 성장 일기로 봐주시면 감사하겠습니다! 🙂 미니 리뷰 프로젝트 구현하기 파일럿의 주제는 미니 리뷰 프로젝트를 구현해 보는 것이었는데요. 요구사항을 - [병아리 개발자의 첫 웹뷰 개발기: 파일럿 프로젝트](https://10.147.128.150/10774/) - 안녕하세요! 지난 1월 3일 푸드서비스개발팀에 웹 프론트엔드 신입 개발자로 합류한 전소이입니다. 입사가 정말 실감 나지 않았는데, 입사한 지도 벌써 두 달이 지나가고 있네요. 🥹 오늘은 입사 첫 달 동안 진행한 파일럿 프로젝트 후기를 공유하고자 합니다. 좋은 파일럿 프로젝트 경험을 위해, 그리고 신입 팀원으로 잘 적응하기 위해 제가 노력했던 부분들과 느낀 점을 담아보려 하는데요. 곧 파일럿 - [[다시보기] 1월 우아한테크세미나: 배민송년회 퀴즈 서비스, 한 달 안에 만들기](https://10.147.128.150/10430/) - 🎬 1월 우아한테크세미나 다시보기 2,000명이 함께한 배민송년회 퀴즈 서비스, 한 달 안에 만들기 배민송년회에서 오직 구성원만을 위해 선보인 2,000명 동접 퀴즈 서비스 개발기를, 기획자와 개발자가 직접 들려 드립니다. 더불어 베일에 싸여 있던 배민송년회의 변천사와 매년 뜻깊은 송년회를 고민하며 준비한 과정도 살짝 보여 드립니다. 우아한형제들의 조직 문화와 사이드 프로젝트 경험담을 함께 접할 수 있는 이번 기회, - [우아콘2022 비하인드: 작은 경험도 괜찮아, 기술로 함께 문제를 풀어가는 이야기](https://10.147.128.150/9524/) - "나의 작은 경험이, 누군가의 성장이 되기를." 그런 마음으로 올해도 우아한형제들이 준비한 우아콘2022의 막이 내렸습니다. 우아콘이 뭐예요? 우아콘은 우아한형제들의 기술, 서비스, 비전, 가치를 나누는 콘퍼런스입니다. 풀네임은 '우아한테크콘서트'. (우아한형제들 콘퍼런스가 아니었다!?) 딱딱한 콘퍼런스가 아니라, 무대를 통해 모두가 함께 즐기고 소통할 수 있는 '콘서트'같은 경험 공유의 장이 되기를 바라는 마음을 담은 이름이랍니다. 기술 콘퍼런스지만... 우아콘에서는 개발에 대한 이야기 - [EKS Anywhere 구축기](https://10.147.128.150/10221/) - 안녕하세요. 데이터플랫폼팀에서 전사 데이터 플랫폼을 구축, 운영하고 있는 신승엽입니다. 2022년에 데이터플랫폼팀에서는 AWS 이관으로 인해 사용성이 줄어든 온프레미스 Hadoop 클러스터 인프라를 재정비하여 MLOps 플랫폼으로 전환하는 프로젝트를 수행하였습니다. MLOps 플랫폼 내 컨테이너를 관리하기 위한 도구로 EKS Anywhere를 채택하였습니다. 이 글에서는 EKS Anywhere의 소개와 함께 구축하면서 마주했던 문제들과 이를 해결한 과정에 대해 공유드리고자 합니다. 천상계로의 배달 그 이후… - [Building event-driven architecture for member system](https://10.147.128.150/10320/) - 🗒️일러두기: 이 글은 글로벌 관계사와 독자를 위해 2022년 4월 발행한 권용근 님의 "회원시스템 이벤트기반 아키텍처 구축하기"를 영문화한 글입니다. At first, Baemin was created as a single project. Our orders grew rapidly, with the growth charted out as a J curve, and the traffic naturally grew as the number of orders increased. The exploding traffic was - [원하는 곳 어디서든 일할 수 있다면, 근무지 자율선택제](https://10.147.128.150/10504/) - 🗒️일러두기: 이 글은 배민다움의 글을 발췌한 것으로, 전문은 "원하는 곳 어디서든 일할 수 있다면"에서 확인할 수 있습니다. 우아한형제들의 근무지 자율선택제 올해부터 우아한형제들 구성원은 자율적으로 근무지를 선택할 수 있게 되었습니다. 🏖️🏡🏢🏝️🏜️ 업무에 지장이 없는 협업 가능한 환경이라면 제주든 유럽이든 발리든 어디든 다 가능한데요. 당연히 재택도 가능하고 사무실도 늘 열려 있어요. 2023년을 시작하며 제주도, 네덜란드, 호주, 일본, - [회원시스템 이벤트기반 아키텍처 구축하기](https://10.147.128.150/7835/) - 최초의 배달의민족은 하나의 프로젝트로 만들어졌습니다. 배달의민족의 주문수는 J 커브를 그리는 빠른 속도로 성장했고, 주문수가 커지면서 자연스럽게 트래픽 또한 매우 커졌습니다. 하나의 시스템, 하나의 데이터베이스로 폭발적으로 늘어가는 트래픽을 감당하지 못하고, 결국 배달의민족은 대장애 시대를 맞이했습니다. 이에 배달의민족은 마이크로서비스로 전환을 시도하였고, 2019년 11월 1일 모든 시스템이 분리되며 마이크로서비스를 완성하였고 시스템의 안정화를 찾을 수 있었습니다. “우아콘2020” 의 김영한님의 - [Spark on Kubernetes로 이관하기](https://10.147.128.150/10291/) - 안녕하세요, 우아한형제들 데이터플랫폼팀 박준영입니다. 이번 글에서는 Spark on Kubernetes 환경 도입 과정과 운영 경험에 대해 소개해 드리려 합니다. 데이터플랫폼팀은 다양한 서비스 데이터를 수집하고 처리, 분석할 수 있는 환경을 제공하고 있습니다. 지난 몇 년간 대용량 데이터 처리를 위해 AWS EMR 기반의 Spark를 사용해왔습니다. 운영하면서 여러 개선 작업을 진행했지만 크게 두 가지 측면에서 근본적인 문제를 마주치게 되었습니다. - [HDCON 해킹방어대회 대상! 'ㅋㅋ팀'을 만나 듣는 그 뒷 이야기](https://10.147.128.150/7239/) - 2021 HDCON 해킹방어대회에서 과학기술정보통신부장관상을 수상한 ‘ㅋㅋ팀’! 1등을 거머쥔 이 팀이 실은 우아한형제들 인프라보안팀이라는 사실이 밝혀지는데...(두둥) 많은 기업들이 직면하고 있는 보안문제에 대한 해결책을 제안하는 아이디어 공모전 형태로 진행된 2021 HDCON 해킹방어대회. 인프라보안팀의 강정진, 권현준, 송수호, 이주호님으로부터 수상 비하인드와 도전기를 들어보았습니다. 지금 함께 만나보시죠! 1. ㅋㅋ팀을 만나다! Q. 참가한 는 어떤 대회인가요? KISA에서 개최해온 국내 보안문제에 대한 해결책을 제안하는 아이디어 공모전 형태로 진행된 2021 HDCON 해킹방어대회. 1등을 수상한 인프라보안팀의 강정진, 권현준, 송수호, 이주호님으로부터 수상 비하인드와 도전기를 들어보았습니다. 지금 함께 만나보시죠! - [만드는 사람이 수고로운 UX 개발기](https://10.147.128.150/10145/) - [그림 2-1] keynote 사례. 편집됨 표기 [그림 2-2] SCM에 반영한 편집됨 표기 SCM은 정보가 많은 데이터를 다루기 때문에 데이터를 입력하는 도중에 페이지를 새로고침 하거나, 모달에서 작업 중일 때 모달을 닫으면 데이터가 날아갈 수 있습니다. 이를 방지하기 위해 사용자 입력이 있는 곳마다 편집됨 상태를 넣었습니다. [그림 3-1] vscode 사례. 닫기 방지 컨펌 [그림 3-2] SCM에 반영한 - [작고 아기자기하지만, 개발조직의 문화 만들기 [ep 4. 정기 밋업]](https://10.147.128.150/10182/) - TL;DR; 밋업은 아이스브레이킹 퀴즈 신규 입사자 소개 시니어와의 수다타임 세션발표 우리팀을 소개합니다 운영진 활동공유 로 구성됩니다. 지난 글, 작고 아기자기하지만, 개발조직의 문화 만들기 [ep 3. 소소한 단기 프로젝트]에서는 운영진이 진행해왔던 단기 프로젝트들에 대한 소개를 드렸었습니다. 4편에 걸친 대장정의 끝으로 본 글에서는 저희의 정기 콘텐츠인 밋업에 대해서 자세하게 설명해 드리려고 합니다. 밋업이란? 밋업이라는 단어에 익숙하지 않으신 - [CDC 너두 할 수 있어(feat. B2B 알림 서비스에 Kafka CDC 적용하기)](https://10.147.128.150/10000/) - "어 이거 CDC 적용하면 딱이겠는데요? 한번 CDC로 해보면 어때요?" B2B 알림서비스 기획 리뷰 도중 제안받은 의견입니다. 저는 이때까지만 해도 CDC가 무엇인지 잘 모르는 상태였지만, 저 의견 덕분에 '그럼 한번 해볼까?' 하는 생각이 들어 흔쾌히 동의하였고, 그로 인해 B2B 알림 서비스에 CDC를 도입하게 되었습니다. 물론 적용 하는 게 쉽진 않았지만, 개발하면서 겪었던 경험을 여러분과 공유하면서 어떤 - [우리 팀의 우아한 타입스크립트 컨벤션 정하기 여정](https://10.147.128.150/9804/) - 팀에서의 코딩 컨벤션 여러 명이 코드를 같이 작성하는 프로젝트에서는 개인마다 다른 코딩 스타일, 생각들이 반영된 코드가 작성될 수 있습니다. 그렇게 되면서 점차 코드가 읽기 어려워지기도 합니다. 탭 또는 스페이스, 스페이스면 2칸 또는 4칸, 세미콜론을 쓰냐, 안 쓰냐 등의 취향을 탈 수 있는 것부터 변경하지 않는 변수는 let이 아니라 const로 선언하기, 사용하지 않는 import 문은 지워주기, - [작고 아기자기하지만, 개발조직의 문화 만들기 [ep 2. 장기프로젝트 기획하고 운영하기]](https://10.147.128.150/9644/) - 들어가며 지난 글 "작고 아기자기하지만, 개발조직의 문화 만들기 [ep 1. 웹프론트개발그룹 운영진을 소개합니다]"에서는 우아한형제들 웹프론트개발그룹 운영진이 출범했고, 조직문화를 만들기위해 무슨 일을 했는지 이야기했습니다. 이번 글에서는 운영진 활동 중 2022년에 운영한 장기프로젝트인 글쓰기 모임과 우아한 사이드 프로젝트(우사프)를 공유합니다. 어떤 이유로 이런 프로그램을 기획했는지, 장기 프로젝트를 더 잘 운영하기 위한 팁, 운영하면서 겪었던 시행착오를 낱낱이 소개합니다! ✍🏻 - [[모집] 2022우아한테크캠프 5기](https://10.147.128.150/8154/) - 우아한개발자가 되고 싶은 분들을 위한 우아한테크캠프 5기 모집이 시작됩니다! 우아한테크캠프는 여름 방학기간을 활용해 진행되는 채용 연계형 교육 프로그램입니다. 교육은 온/오프라인 병행으로 계획하고 있으나, 사회적 상황에 따라 안전하고 유연한 교육방식을 준비하고 있습니다. 올해 우아한테크캠프 5기는요! 🏝 여름방학 8주 동안 💡 웹프론트엔드 중심 풀스택 & 모바일 안드로이드 👩🏽‍💻🧑🏽‍💻 자기주도형 프로젝트 기반 교육 🤝 우아한개발자와 함께하는 멘토링 🎉 - [내가 꿈꾸는 프로그래머로서의 삶](https://10.147.128.150/9433/) - 안녕하세요. 테크코스교육개발실 이원미입니다. 다가오는 11월 25일, 우아한테크코스 (이하, 우테코) 4기 크루들이 수료합니다. 크루로서 10개월간의 대장정을 마치고, 개발자 동료로서 만날 날을 앞두고 있는데요 : ) 우테코의 남은 한 달, 즉 레벨 5 기간은 개인 학습과 취업 준비 기간으로, 아래와 같은 활동들을 주로 합니다. ✔️ 레벨1~레벨4 과정에서 부족한 부분에 대한 개인별 추가 학습을 합니다. ✔️ 이력서 작성, - [우아콘 2022에 지금 등록하세요!](https://10.147.128.150/9249/) - "뭐? 배민이 ㅇㅇ도 한다고?!" 우아한형제들의 기술, 서비스, 비전, 가치를 전해드리는 우아한테크콘서트, 우아콘 2022에 여러분을 초대합니다🙌 배민이 무엇을 하는지, ㅇㅇ이 궁금하다면? 지금 우아콘에 등록하고 확인해보세요😉 진지한 고민에 위트 한 스푼! 완벽하거나 성공한 사례가 아니더라도 우당탕탕 고군분투 좌충우돌 과정에 대한 이야기를 통해 경험과 노하우를 나눠봅니다 기술개발 뿐만 아니라 디자인, 협업, 문화, 커리어 등 프로덕트를 둘러싼 다양한 주제를 - [우리는 모의장애훈련에 진심입니다 - Part 2](https://10.147.128.150/9314/) - 안녕하세요. 저는 우아한형제들에서 TPM으로 일하고 있는 임성현입니다. 지난 4월 "우리는 모의장애훈련에 진심입니다 - Part 1."에서 모의장애훈련을 소개한 이후, 많은 분들이 관심을 보여주셨는데요. 이번 Part 2 글에서는 Part 1에 이어 구체적인 모의장애훈련 사례를 공유하고자 합니다. Part 1 글에서 모의장애훈련이 무엇인지, 참가자별 역할과 진행 과정, 모의장애훈련 평가, 수확과 계속되는 고민을 말씀드렸습니다. 마지막에는 독자분들이 적용해 볼 만한 소소한 - [[함께 일하기] 온라인 근무와 회고](https://10.147.128.150/2713/) - 온라인 근무를 길게 하게 되면서, 팀이 함께 일하기 위해 고민했던 것들을 공유합니다. 뒤돌면 있던 팀원들이 없는 환경에서 보다 더 많이 이야기 하고 더 많은 의견을 나누기 위해 노력했던 내용들입니다. 짝 프로그래밍 그리고 온라인 근무 2019년에 먼데이라는 프로젝트가 있었습니다. 몇 달간 주말 출근도 불사했어야 하는 고강도의 프로젝트였습니다. 그 당시 우리팀(배민 상품시스템팀)은 짝 프로그래밍을 했었는데, 일정 압박과 - [단위 테스트로 복잡한 도메인의 프론트 프로젝트 정복하기(feat. Jest)](https://10.147.128.150/8942/) - 최근 저는 복잡한 도메인의 서비스를 개발하는 개발자라면 공감할 만한 문제를 겪고 있었습니다. 찬호 님, 서비스가 비마트일 때, 공급사 반품 상세페이지에서 공급사 계정으로 로그인한 사용자가 역분개한 상품의 마감일을 변경할 수 있나요? 개발을 하다 보면 PM으로부터 이런 질문이 자주 들어오는데, 예전 같으면 제가 아는 선에서 바로 대답할 수 있었을 간단한 질문에도 최소 10분은 하던 일을 멈추고 확인해야 - [React 개발자를 위한 피그마 플러그인 개발(feat. 온보딩)](https://10.147.128.150/8339/) - 안녕하세요, 우아한테크캠프 4기를 마치고 2022년 1월에 회사 생활을 시작한 신입 개발자 황윤서입니다. 긴장했던 첫 회사 생활은 온보딩 프로젝트와 함께 시작되었습니다. '쌩신입'에서 신입으로 레벨 업을 하기 위한 필수 단계죠. 같은 팀 입사 동기 분과 함께 진행한 온보딩 프로젝트는 피그마 플러그인에 대한 리서치 그 자체였습니다. 추후 팀에서 필요로 할 것 같은 지식을 미리 확보해두는 것이 목표인, 나름 - [[다시보기] 6월 우아한테크세미나 토크쇼 | 프로덕트를 만드는 사람들: 안 된다고 하지 말아요, 개발자/디자이너/기획자 삼파전](https://10.147.128.150/8617/) - 📅세미나 들여다 보기 2022. 6. 29.(수) 저녁 7시~9시 YouTube 라이브 정말 개발자는 다 안 된다고 할까요? 🤔 디자이너는 정말 1px에 집착할까요? 👀✨ 기획자는 스펙도 일정도 자주 바꾸는 변덕쟁이라구요? 🤪 프로덕트는 어떤 사람들이 만드는 지 궁금한 분들을 위해 우아한형제들에서 서비스하고 있는 웹툰 플랫폼, '만화경'을 만들고 있는 개발자, 디자이너, 기획자를 모셨습니다. 회의 때 분명 같은 이야기를 한다고 - [나의 첫 프론트엔드 개발팀 이야기](https://10.147.128.150/8649/) - 안녕하세요, 우아한형제들 신입 프론트엔드 개발자 김하루입니다. 저는 우아한형제들 만다오팀에서 개발자로서의 첫 커리어를 시작하게 되었어요. 이 글을 통해 1) 채용과정에서 만다오팀을 추천받았던 이야기와, 2) 만다오팀에서 적응과정이 얼마나 즐거웠는지, 그리고 3) 만다오팀에서는 얼마나 다양한 일을 하는지 순서로 말씀드려 볼 거예요. 이 글은 만다오팀의 매력을 소개하는 글이기도 하답니다. 이 글을 읽고 나면, '우아한형제들에 이렇게 특색 있고 재미있는 팀이 - [[이벤트] 우아한테크세미나 알찬 후기 공모전!](https://10.147.128.150/8878/) - [EVENT] 우아한테크세미나 후기 쓰고 로지텍 키보드를 GET! 한 달에 한 번씩 우아한형제들의 기술이야기를 전해드리는 월간 매월 알찬 이야기로 여러분을 찾아뵙고 있는데요, 점점 많은 분들이 참여해주시는 성원에 힘입어! 그리고 열심히 공부하는 개발자 여러분을 위해! 이벤트를 준비했습니다😎 이름하야 참여방법? 2022년 1월~6월 우아한테크세미나 중 한 편을 보고 후기를 쓴 블로그 링크를 dev_relations@woowahan.com으로 보내 - [우테코에서 찾은 나만의 효과적인 공부법](https://10.147.128.150/8484/) - 안녕하세요. 테크코스교육개발팀 이원미입니다. 어느덧 우아한테크코스 (이하, 우테코) 4기도 과정의 중반을 지나가고 있습니다.(시간이 왜 이렇게 빠르게 흘러가는지..) 기수가 더해 갈수록 새로운 얼굴들과 더 많아진 인원으로 글쓰기의 소재나 내용들이 점점 다양해지고 있는데요. 글쓰기 교육을 담당하는 저로서는 정말 즐거운 일이 아닐 수 없습니다 😊 레벨 1에 이어, 레벨 2 글쓰기의 주제는 “우테코에서 찾은 나만의 효과적인 공부법”입니다. 매해 같은 - [훈련은 실전처럼, 실전은…… 싫어요](https://10.147.128.150/7346/) - 소설가가 입사했다 무라카미 하루키가 맥주 공장 이야기를 쓰고, 알랭 드 보통이 히드로 공항 이야기를 쓴 것처럼 소설가가 우리 회사 이야기를 쓴다면? 우리들이 좋아하는 이 시대의 젊은 작가. 소설가 박서련이 직접 경험하고 쓴 다섯 편의 우아한형제들 이야기 이렇게 시작해보면 어떨까…… 우아한형제들에서 제안한 글감과 가제 가운데에 이런 게 있었다. “흰 것은 코드요, 검은 것은 화면이다”. 반대인가? 까만 - [내가 꿈꾸는 프로그래머로서의 삶](https://10.147.128.150/6401/) - 안녕하세요. 테크코스교육개발팀 이원미입니다. 우테코 3기도 마무리할 시간이 한 달이 채 남지 않았네요. 기수가 쌓일수록 시간은 더 빠르게 흘러가는 것 같아 아쉬움이 큽니다.😢 지난 10월 29일, 크루들이 밤낮으로 고생하며 완성한 프로젝트의 최종 데모데이를 진행했습니다. 게더타운으로 진행한 데모데이에 많은 분이 참여해 서비스 구경도 하고, 여러 질문을 주고받으며 즐거운 시간을 보냈는데요 : ) 크루들과 참여해 주신 모든 분들께 - [스프링에서 코틀린 스타일 테스트 코드 작성하기](https://10.147.128.150/5825/) - 안녕하세요 저는 공통시스템개발팀에서 플랫폼 개발을 담당하고 있는 김규남이라고 합니다. 이 글은 올해 사내에서 진행한 코틀린 밋업에서 스프링에서 코틀린 스타일 테스트 코드 작성하기라는 주제로 발표한 내용을 바탕으로 작성한 글입니다. 코틀린에서 테스트를 작성하기 위한 여러 도구들 및 기능들에 대해 간단하게 소개하는 내용이라 코틀린을 잘 모르거나 막 시작하시는 분들이 가볍게 봐주시면 좋을 것 같네요. 개요 스프링 기반 프로젝트에서 - [만화경 Android App 설정하고 개발하기](https://10.147.128.150/2706/) - 소개 안녕하세요. 신사업부문 만화경셀 안드로이드 개발자 오재환입니다. 만화경은 우아한형제들의 웹툰 플랫폼으로서 2020년 5월 구글피처드, 2020올해를 빛낸 인기 앱 우수상, 2020 올해를 빛낸 엔터테인먼트 앱 우수상을 받았습니다! 자랑 좀 하고 싶었어요 저는 2019년 3월에 입사하여 지금까지 만화경 안드로이드를 개발하고 있는데요 이 글은 저처럼 앱을 처음부터 개발하시는 분들을 위해 제가 어떤 부분을 고민하고 신경 써서 앱을 개발했는지를 - [별로 안 궁금했지만 막상 들어보니 은근 궁금했던 개발 이야기](https://10.147.128.150/6042/) - 안녕하세요! 정산시스템팀의 박우빈입니다.오늘은 팀 내에서 진행했던 세미나 이야기를 한번 들고 와봤습니다.가볍게 읽어주시면 감사하겠습니다. :) 목적 중심의 팀 정산시스템팀은 목적 중심의 팀으로, 직군별로 나뉘는 '역할 중심의 팀'과는 달리 기획자, 개발자가 '하나의 목적을 영위하기 위해 모여있는 팀'입니다.그렇기 때문에 저희 팀에서는 하나의 도메인, 프로젝트 내에서 통용되는 유비쿼터스 언어(Ubiquitous Language)가 매우 중요한데요.모든 팀원이 다 같이 문맥을 공유하는 유비쿼터스 언어가 - [크롬 익스텐션에서 데이터를 어떻게 다룰 것인가? (피트스탑과제 - 크롬 익스텐션 개발기)](https://10.147.128.150/5900/) - 안녕하세요, 우아한형제들에서 웹프론트엔드 개발을 담당하고 있는 배민셀프서비스팀의 남현우입니다. 피트스탑 기간에 정환님, 미라님, 민희님과 함께 팀 생산성을 높이기 위해 만든 크롬 익스텐션 개발에 대한 이야기를 공유하려고 합니다. 목표 배민셀프서비스팀에서는 피트스탑 과제로 다양한 형태의 폼을 자동으로 채울 수 있게 하는 크롬 익스텐션을 개발하기로 했습니다. (피트스탑은 F1 레이싱 중 차량을 정비하는 것과 같이, 사내에서 프로덕트 개발보다 안정성과 생산성 - [2021 우아한형제들 경력 개발자 인터뷰 #2편](https://10.147.128.150/5345/) - 좋은 음식을 먹고 싶은 곳에서! 우아한형제들의 도전은 오늘도 계속됩니다. 고객 만족과 창출을 위한 여정에서 끊임없이 도전하고 성장하는 개발자분들, 그중 일곱 분을 만나봤습니다. - [2021 우아한형제들 경력 개발자 인터뷰 #1편](https://10.147.128.150/2714/) - 좋은 것을 더 좋게! 우아한형제들의 도전은 오늘도 계속됩니다.우아한형제들의 서비스를 더 가치있게 만들기 위해대용량 트래픽과 대규모 인프라를 관리하며 도전하는 우아한형제들의 개발자분들,그 중 여섯분을 인재영입팀에서 만나봤습니다. 들어가기 전에 안녕하세요 인재영입팀 입니다. 이번 직무인터뷰 과정을 통해 우아한형제들의 개발자는 어떻게 일하고 있으며,또 어떤 도전 과제들을 수행하며 성장하고 있는지그들의 성장 과정을 엿볼 수 있었습니다. 배민 개발자로서의 생활과 면접 꿀팁은 덤! - [우아한형제들 기획자 소개와 개발자와의 협업문화 인터뷰](https://10.147.128.150/4122/) - 끊임없이 도전하고 혁신하는 우아한형제들!그 중심에는 가치 있는 서비스를 설계하며‘좋은 것을 더 좋게’ 만들기 위해 도전하는 기획자분들이 있습니다. 이번 인터뷰에서는 기획자분들을 만나보겠습니다. 이번에는 두 가지 컨셉의 인터뷰를 진행하였습니다. 첫 번째 컨셉, 우아한형제들 기획자 단독 인터뷰우아한형제들의 기획자분들이 가치 있는 서비스를 설계하기 위해도전 과제의 목표와 목적을 어떻게 정의하고 문제를 해결하며 일하고 있는지 인터뷰를 통해 알아봤습니다.기획 문화와 기획자분들의 성장스토리, - [우아한테크러닝 4기 후기](https://10.147.128.150/5240/) - 우아한형제들에서는 내외부 개발자가 함께 성장하기 위한 단기 교육 “우아한테크러닝”을 매년 진행하고 있습니다. 매회차 진행시 마다 뜨거운 관심으로 수용인원의 4배에서 5배 인원이 신청해주고 계신데요, 이 자리를 빌어 감사의 말씀을 드립니다 :) 올해는 우형의 기술이사&웹프론트엔드개발그룹장 김민태님의 리드로, “나만의 노션 만들기”를 주제로 주니어 웹프론트엔드 개발자 100명과 함께 온라인으로 진행했는데요. 서비스나 제품을 만들 때 기술선택부터 설계, 구현까지 함께 만들어나가는 - [시스템신뢰성개발팀을 소개합니다.](https://10.147.128.150/2716/) - 안녕하세요. 우아한형제들 시스템신뢰성개발팀 박주희입니다. 사회생활 N년차, 여러 업무를 해봤지만, 개인적으로 가장 힘들다고 생각하는 것은 바로 자기소개입니다. 특히, 최근에 업무를 진행하면서 처음 만나는 분들께 '안녕하세요. 우아한형제들 시스템신뢰성개발팀 박주희입니다.' 라고 인사를 하면, 상대의 얼굴에는 물음표만 가득합니다. 흔하지 않은 팀이름에, 어떤 일을 하고 있는지 짐작조차 못 하는 사람이 대부분입니다. 개발자분들에게는 SRE팀이라고 한 번 더 소개하면 '아!' 하는 반응을 - [AWS KMS를 이용한 암호화 API 구축하기](https://10.147.128.150/2518/) - 서버 없이 쉽고 빠르게 암복호화 API서비스를 만들어 봅니다. 지난해 우아한형제들은 정보보호관리체계(ISMS)인증 심사를 준비하며 개인정보 암호화 키를 물리적으로 분리하여 보다 안전하게 관리할 수 있는 AWS Key Management Service(이하 KMS) 도입을 결정했습니다. 그리고 운영 리소스를 최소화하고 트래픽에 유연하게 대처하기 위해 AWS 서버리스 서비스들을 적극적으로 활용하여 암복호화 API를 구현했습니다. API 서비스를 구축함에 있어 인프라 이슈를 배제하고 로직에 집중할 - [AWS WAF 운영에 대한 이야기](https://10.147.128.150/2699/) - 안녕하세요. 우아한형제들 정보보안팀에서 근무하고 있는 이주호라고 합니다. 퍼블릭 클라우드 환경에서의 보안을 책임지는 보안팀은 클라우드 환경에서의 보안 수준을 IDC 환경 보안 수준과 동일 또는 그 이상의 수준으로 만드는 데에서 어려움을 겪고 있습니다. 그중 인프라 보안을 책임지는 WAF는 웹, 앱 서비스를 하는 기업이라면 필수로 도입해야 하는 보안 솔루션 중 하나입니다. 이 글을 통해 AWS WAF 운영 경험을 - [How to onboard a new hire / 신규입사자 조직안착 과정](https://10.147.128.150/2648/) - 안녕하세요, 우아한형제들 Developer Relations 담당자 문수민입니다. 제가 우아한형제들에 입사하여 경험한 "온보딩 프로세스(Onboarding process) - 조직이 신규 입사자를 채용하고 조직에 적응하기 까지 지원하는 일련의 과정"는 초기 연인 관계 (썸…? 혹은 삼귀는 사이…?) 와 닮아있었습니다. 영화 는 흔히 말하는 연인의 썸 단계를 담고 있는데요, 남자주인공 톰이 여자주인공 썸머를 보고 첫눈에 반합니다. 그런데 그녀와는 더 깊은 연인 - [팀 프로젝트가 나에게 남긴 것](https://10.147.128.150/5226/) - 안녕하세요. 테크코스교육개발팀 이원미입니다. 우테코 3기도 어느덧 중반을 지나고 있습니다 : ) 올해는 온라인으로 소통하는 상황이 많아지고, 크루들의 얼굴을 잘 보지 못해서인지 시간이 더욱더 빠르게 흘러가는 것 같아 안타까운데요. 이런 상황 속에서도 본인들이 직접 기획하고 만들어보는 프로젝트 미션을 열심히 진행하면서, 조금 더 현업에 가까운 학습을 하고 있을 크루들을 저는 쭉 응원해 주고 싶네요. 레벨 3 글쓰기 - [Spring Boot에서 Repository로 DynamoDB 조작하기 (1) - 설정부터 실행까지](https://10.147.128.150/2633/) - 안녕하세요, 미래사업부문 김명재입니다. 작년 10월에 우아한형제들에 입사하고 행복한 주니어 개발자 생활을 하고 있습니다. 현재 개발중인 시스템의 NoSQL DB를 MongoDB에서 DynamoDB로 교체하면서 배운 것을 공유하려고 글을 쓰게 되었습니다. 이 글에서는 DynamoDB를 조작하는 다양한 방법들을 예제를 통해 소개합니다. aws cli -> curl -> AmazonDynamoDB 클래스 -> DynamoDBMapper 클래스 -> spring-data-dynamodb 순서로 진행하니, 쿼리 메서드만 궁금하신 분들은 spring-data-dynamodb로 - [Spring Boot에서 Repository로 DynamoDB 조작하기 (2) - Gradle을 활용해 실행 & 테스팅 환경 구축](https://10.147.128.150/2634/) - 이전 글에서 DynamoDB를 조작할 수 있는 다양한 API를 알아봤습니다. 애플리케이션을 실행하거나 테스트하기 위해 docker로 DynamoDB를 띄우는 것이 번거로우니, 이번에는 Gradle을 활용해 실행 및 테스팅 환경 셋팅을 자동화 하겠습니다. https://github.com/myeongjae-kim/guestbook/tree/complete-first-chapter 이 브랜치는 1부를 끝낸 상태의 스냅샷입니다. 여기서부터 시작합니다. 목차 docker-compose docker-compose로 DynamoDB 실행, 종료하기 Gradle로 docker-compose 조작하기 dependsOn, finalizedBy로 DynamoDB 실행, 종료하기 Gradle로 테이블 생성/삭제하기 리팩토링 - [Dll을 이용하여 배달대행 주문정보 연동](https://10.147.128.150/2635/) - 우아한형제들에도 Windows 개발자가 있습니다. 저는 주문중계시스템팀에서 PC 어플리케이션을 개발하고 있습니다. 대부분 우아한형제들에서 PC 어플리케이션을 개발한다는 것 자체를 모르시는 분이 많겠지만 우아한형제들에는 Windows Application 개발자가 있습니다. 믿기 힘들겠지만 사원증 사진 이 개발자는 업주님들이 주문을 받고 영수증을 출력하는 등의 작업을 하는 아래와 같은 PC접수 프로그램을 개발합니다. 가끔 음식점에서 “배달의 민족 쭈문~”이라는 소리 들어보신적 있으신가요? 아래의 이것이 바로 - [우아한테크코스 : 항해의 시작](https://10.147.128.150/2636/) - 안녕하세요. 교육코스개발팀 이원미입니다. 많은 분들이 알고 계시다시피, 우아한형제들에서는 개발자 양성 교육 '우아한테크코스(이하, 우테코)' 를 진행하고 있습니다. 빠르게 흘러가는 시간 덕인지, 우테코를 시작한 지 어느덧 두 달이 되어 가네요 : ) 총 46명의 크루 (우테코 교육생들을 크루라고 부릅니다.) 와 함께 저희 팀도 무럭무럭 성장하고 있음을 느끼고 있는 요즘입니다. 독특하게도 우테코는 웹 백엔드 교육뿐만 아니라, 개발자라면 모두가 - [멀티모듈 설계 이야기 with Spring, Gradle](https://10.147.128.150/2637/) - 멀티 모듈 설계 이야기 안녕하세요. 배달의민족 프론트 서버를 개발하고 있는 권용근입니다. 멀티 모듈의 개념을 처음알게 되었을 때부터 현재까지 겪었던 문제점들과 그것을 어떻게 해결해나갔는지를 이야기해보려고 합니다. 아래 내용은 모두 Gradle 과 Spring Framework 를 사용한 경험들로 작성되었습니다. 멀티 모듈 프로젝트란? 멀티 모듈 프로젝트를 처음 알게된 건 2017년 초였습니다. 당시에 저는 단일 프로젝트를 사용하고 있었습니다. 예를 들어 - [LocalStack을 활용한 Integration Test 환경 만들기](https://10.147.128.150/2638/) - 안녕하세요. 주문마케팅서비스팀 송정훈입니다. 이 글에서는 AWS 서비스를 활용하는 웹 어플리케이션이 클라우드 환경이 아닌, 로컬개발환경에서 쉽게 실행하고 테스트할 수 있는 방법에 대해서 설명하고자 합니다. 우리의 Integration Test 를 방해하는 것은 무엇일까? 배달의민족의 주문시스템은 AWS 에서 제공하는 다양한 서비스(sns, sqs, dynamodb 등)를 활용하고 있습니다. AWS 는 무척 좋은서비스였지만 개발과정에서 이와 관련하여 몇가지 제약사항들이 생겼는데요. 이로인하여 로컬개발환경에서 발생하는 - [Dagger 적용기](https://10.147.128.150/2639/) - Dagger 적용기 최근 적용한 dagger에 대해서 이야기합니다 시작하며 DI 좋은건 다들 알지만 하나하나 만들어가자면 손이 너무 많이가는 것도 사실입니다. 그래서 많은 안드로이드 프로젝트에서 Dagger 또는 코틀린을 적용한 프로젝트라면 koin 등을 사용하고 있습니다. 저희는 설계 초기에 Dagger를 적용하기로 결정하고 그에 따른 크고 작은 작업들을 진행해 왔습니다. 환경설정 같은 내용은 다른 글들이 많이 있으니 넘어가고 바로 적용한 - [결팀소: 결제시스템팀을 소개합니다.](https://10.147.128.150/2640/) - 소개 우아한형제들 결제시스템팀에서 근무하고 있는 이주현이라고 합니다. 제가 입사하고 이 팀에서 일한 지 3년이 넘었습니다. 지금은 회사, 사람, 팀, 인프라, 코드, 문화 등 다양한 변화에 적응하고 있는 구성원이지만 한 때 우아한형제들은 너무나 가고 싶은 회사였습니다. 지금도 저는 다른 회사를 외부에서 바라보면 궁금한 점이 많습니다. '저 회사는 어떤 언어를 사용할까?, 어떤 인프라를 가지고 있을까?, 배포는 어떻게 - [SwiftLint와 Git Hook을 이용해서 코딩 스타일 관리하기](https://10.147.128.150/2641/) - 안녕하세요. 우아한형제들 앱서비스팀에서 iOS 앱을 만들고 있는 김민호입니다. 이번에 저희 팀에서 코딩 스타일을 맞추기 위해 Git Hook을 적용한 경험을 공유드리려고 합니다. iOS 앱을 만들고 있는 많은 팀에서 코딩 스타일을 관리하기 위해 SwiftLint를 도입해서 사용하고 있는데요. 저희 팀 역시 SwiftLint를 이용하고 있지만 엄격하게 적용하고 있지는 않고 권장하는 정도로 사용하고 있었습니다. 그러다 점점 프로젝트 참여 인원이 많아지고, - [회사 눈치 안 보고 투잡하기](https://10.147.128.150/2642/) - 소개 안녕하세요 우아한형제들에서 백엔드 개발자로 일하고 있는 강현구입니다.🙇‍ 저는 개발 외에도 다른 일을 하고 있는데요, 바로 우아한테크코스(이하 우테코)에서 코드 리뷰어로 활동하고 있습니다. 코드 리뷰어는 우테코에 참여중인 크루(우테코는 교육생을 학생이 아닌 크루라 부릅니다)들이 미션 결과물로 작성한 코드를 리뷰하는 일을 합니다. 코드를 보고 개발 관련 가이드, 코칭 역할을 하는 것이죠. 현장의 개발팀에서 하는 코드 리뷰와 비슷하게 생각하면 - [우아한테크코스 : 나만의 항로 찾기](https://10.147.128.150/2643/) - 안녕하세요. 교육코스개발팀 이원미입니다. 지난 6월, 우아한테크코스 (이하, 우테코) 의 글쓰기 교육에 대한 소개를 드렸습니다. 한 달 생활기에 이어, 우테코에서 찾은 나만의 효과적인 학습법 이라는 주제를 가지고 두 번째 글쓰기를 진행하였는데요. 4개월이라는 적지 않은 시간을 보낸 크루들이 우테코에 오기 전과 후, 본인의 학습 방법과 학습 태도가 어떻게 변화했는지에 대해 본인만의 방식으로 재밌게 작성해주었습니다. 스스로 학습하며 개발자로서 - [병아리 개발자의 걸음마 한 발짝 (feat. 파일럿 프로젝트)](https://10.147.128.150/2644/) - 지원서에서 발췌한 내용 ... 나름대로 제일 좋은 방법이라고 생각했던 해결책이 경험 많은 개발자분들이 보시기에는 어떤지, 시니어 개발자분들은 문제가 생겼을 때 어떻게 접근하고 어떻게 해결하는지 등도 항상 궁금해 왔습니다. ... 파일럿 프로젝트를 하며 조심스레 내린 코드리뷰의 정의 코드리뷰란, 나름대로 제일 좋은 방법이라고 생각했던 해결책이 제일 좋은 방법이 아닐 수 있다는 것을 깨닫게 되는 고된 시간 동시에, - [개발자 머피의 법칙](https://10.147.128.150/2645/) - 안녕하세요, 우아한형제들 광고시스템팀의 손권남입니다. 이 글은 기술적인 내용도 아니고 우아한형제들 회사에 관한 이야기도 아닌, 순전히 저의 개인적인 경험을 다룹니다. 매우 긴 글이므로, 맨 앞과 맨 뒤, 그리고 제목 정도만 읽어도 대략의 핵심 주제는 파악 가능합니다. 본문의 내용은 회사의 의견과 다를 수 있습니다. 본문 내용이 마치 어떤 eCommerce 회사의 특정 팀 얘기 처럼 느껴질 수 있으나 - [좌충우돌 Terraform 입문기](https://10.147.128.150/2646/) - 안녕하세요, 저는 신사업부문의 오지산이라고 합니다. 저희 신사업부문은 배달의민족과는 조금 다른... 시장의 문제를 해결하기 위해 다양한 신규 서비스들이 개발되는 곳입니다. 그 중에는 아직 출시되지 않은 서비스도 있고, 배달의민족과 비교적 관련성이 적은 서비스들도 있는데요. 저희 조직은 둘 모두에 속하는 서비스를 개발하고 있고, 맡은 도메인의 문제를 해결하기 위해 배달의민족에서 사용되지 않는 기술도 여럿 도입해서 사용하고 있습니다. 다양한 기술을 - [주니어 개발자의 클린 아키텍처 맛보기](https://10.147.128.150/2647/) - 안녕하세요 딜리버리플랫폼팀 송인태입니다. 우아한테크캠프를 마치고 팀에서 들어온 지 1년 정도 되면서 개발을 할 때 어떻게 하면 유지 보수하기 쉽게 개발할지 고민을 하던 도중 Robert C. Martin이 블로그에 기재한 Clean Architecture라는 글을 읽게 되었습니다. 이 글을 저 나름대로 이해해 보고 이러한 내용이 실제 프로젝트에 어떻게 적용되며, 더 나아가 고민할 점이 무엇인지 생각하게 되었습니다. 지금부터 아래에서 언급하는 - ['우아한테크코스 - 웹 백엔드' 2기 과정에 참여할 사람을 모집합니다.](https://10.147.128.150/2649/) - '우아한테크코스 - 웹 백엔드' 2기를 모집합니다. 아무 것도 없는 상태에서 우아한테크코스 1기 모집 글을 쓸 때가 어제 일 같은데 벌써 2기 모집 글을 쓰네요. 1기 모집 글을 쓸 때는 막막함과 약간의 두려움이 있었다면 2기 모집 글을 쓰는 지금은 더 좋은 품질의 교육을 만들고 싶다는 욕심이 크네요. 우아한테크코스가 걸어가려고 하는 지향점은 크게 달라지지 않았기 때문에 우아한테크코스 - [대놓고 자랑하는 글](https://10.147.128.150/2651/) - **경고 : 해당 글은 겨울방학 공지 받은 우아한형제들 구성원이 애사심에 충만하여 작성한 글입니다. 안녕하세요, 우아한형제들 Developer Relations 담당자 문수민입니다. 지난 11월 8일 금요일 우아한형제들 월간 전사 회의에서 대대적인 공지가 있었습니다. 바로바로바로 두구두구두구 2019년 12월 21일 - 2020년 1월 1일 우아한형제들 전사 구성원 겨.울.방.학 12월 21일부터 1월1일까지 주말 포함 총 12일에 걸쳐 전사 구성원이 함께 쉬는 - [우아한테크코스 : 나의 북극성을 찾아서](https://10.147.128.150/2652/) - 안녕하세요. 교육코스개발팀 이원미입니다. 따뜻했던 날씨가 훌쩍 추워진 만큼 우아한테크코스(이하, 우테코) 1기도 어느덧 막바지를 향해 달려가고 있습니다. 크루들에게 주어진 세 번째 글쓰기 주제는 ‘내가 꿈꾸는 프로그래머로서의 삶’입니다. 우테코를 지원할 때의 마음을 되돌아보며 자신이 어떤 마음으로 프로그래머가 되고 싶어 했는지, 최종적으로 꿈꾸는 프로그래머로서의 삶은 무엇인지 꾸밈없이 진솔하게 작성해 주었는데요. 이 글을 통해 여러분도 정작 중요하게 생각해야 할 - [이 회사, 이 세상 쿨함이 아니다](https://10.147.128.150/2654/) - 안녕하세요. 우아한형제들에서 ‘우아한테크코스(이하, 우테코)’ 교육을 진행하고 있는 교육코스개발팀입니다. 이달 말, 우테코 1기 교육생들이 8개월간의 대장정을 마치고 드디어 수료를 합니다. 짝짝짝! ‘시원섭섭하다’는 감정이 어떤 감정인지 다시 한번 느끼게 되는 요즘입니다. 최고가 되어 떠나라! 지난 11월 초, 우아한Tech 페이스북에는 한 장의 포스터와 다소 생뚱맞은 글이 올라옵니다. 오픈 리크루팅 데이? 공개 채용의 장! 우테코에서 해당 교육을 지원하는 우아한형제들이 - [Spock Extension과 Elasticsearch + Kibana 조합으로 테스트 결과를 빠르게 피드백 받기](https://10.147.128.150/2655/) - 안녕하세요. 우아한형제들 주문마케팅회원서비스팀 장진우입니다. 모든 테스트는 중요하고 가치가 높은 활동입니다. 특히 개발을 지원하기 위한 기술 중심의 테스트가 조금 더 중요하고 가능하다면 이런 테스트를 더 많이 해야 한다고 생각해 왔습니다. 왜냐하면, 버그가 나타나는 시점은 코드가 개발된 직후입니다. 이때 테스트가 수행되고 테스트 수행 결과를 피드백 받는 시간 간격이 짧을수록 버그의 원인을 쉽고 빠르게 찾을 수 있기 때문입니다. - [메인 데이터베이스 IDC 탈출 성공기](https://10.147.128.150/2656/) - 안녕하세요. 우아한형제들 시스템신뢰성개발팀 박주희입니다. 2019년을 마무리하는 시점에 우아한형제들이 어떻게 메인 데이터베이스를 IDC 환경에서 탈출시켰는지, 그 과정을 공유하려고 합니다. 발단 2010년 6월 출범한 배달의민족은 (2018년 12월 기준) 앱 누적 다운로드 4000만 돌파, 월간 순 방문자 수 900만명, 전국 등록 업소 수 30여만개, 거래액 기준 연간 약 5조 원의 배달 주문을 처리하고 있습니다. 이런 성장을 뒷받침하기 위해 - [feign 좀더 나아가기](https://10.147.128.150/2657/) - 안녕하세요. 저는 상품시스템팀에서 개발하고 있는 고정섭입니다. 이 글에서는 배달의민족 광고시스템 백엔드에서 feign 을 적용하면서 겪었던 것들에 대해서 공유 하고자 합니다. 이 글은 이전에 작성된 게시글에서 추가 보완사항에 대해서 작성되었습니다. 예제소스 http client feign 에서 지원하는 http client 는 ApacheHttpClient 와 OkHttpClient 가 있습니다. default 는 feign.Client.Default#Default 에서 생성된 것입니다. HttpClientFeignLoadBalancedConfiguration 와 OkHttpFeignLoadBalancedConfiguration 을 볼면 알 - [Cucumber + Appium을 통해 Android 앱 테스트](https://10.147.128.150/2658/) - 안녕하세요! Android 앱이 UI 자동화 테스트되는 과정의 일부에 대한 동영상입니다 :) 저는 앱서비스팀에서 Android/iOS의 배달의민족 앱 QA를 담당하고 있는 최윤주입니다. 배달의 민족 앱은 2주 단위로 정기 업데이트를 합니다. 정기 업데이트에는 사용자가 인지할 수 있을 만큼 큰 기능 변화가 있기도 하고, 왜 업데이트를 받았는지 의아할 정도로 작은 기능의 변화가 있기도 합니다. 전자이든 후자이든 사용자들은 먹고 싶은 - [ELK 셋팅부터 알람까지](https://10.147.128.150/2659/) - 안녕하세요. 저는 상품시스템팀에서 개발업무를 맡고 있는 이중석입니다. 최근 팀 내에서 로그엔트리를 ELK 로 전환하고 필요한 알람을 셋팅하는 작업을 진행했습니다. 이 과정중 알람을 설정하는 부분이 어렵진 않지만 쉽지도 않았습니다. 그 과정에서 알게된 것들이 다른분께 도움이 될까 싶어 글을 남깁니다. ELK로 로그 쌓아보기 (feat. 스프링 배치) Local 에서 ELK 띄우기 ELK 는 Docker Compose 를 사용하여 실행할 - [모두를 위한 배달의민족](https://10.147.128.150/2660/) - 모두를 위한 앱 개발 스토리 2019년, 배달의민족 앱서비스팀은 ready… set… 마침내... GO! Accessibili-----ty! 했던 한 해였습니다. 서비스 초기부터 접근성 개선을 위해 조금씩 작업했고, 그 노하우가 쌓이고 구성원들의 열정이 더해져 올해는 이전보다 추진력 있게 접근성을 개선하고자 노력했습니다. 진행 과정만으로 의미 있는 일이지만, 그 중에도 WOOWA!😍 (brothers?) 감탄사가 나올 결과물도 있었는데요. 2020년 1월 30일 구글 플레이 스토어에 - [Gradle 프로젝트에 JaCoCo 설정하기](https://10.147.128.150/2661/) - 안녕하세요. 상품시스템팀에서 서버 개발(..새발)을 하고 있는 연철입니다. 프로젝트 세팅 중에 찾아보고 삽질했던 내용들이 도움이 될까 하여 남깁니다. JaCoCo는 Java 코드의 커버리지를 체크하는 라이브러리입니다. 테스트코드를 돌리고 그 커버리지 결과를 눈으로 보기 좋도록 html이나 xml, csv 같은 리포트로 생성합니다. 그리고 테스트 결과가 내가 설정한 커버리지 기준을 만족하는지 확인하는 기능도 있습니다. 저희팀 같은 경우는 프로젝트의 커버리지가 올라갈 때 - [Spring Batch와 Querydsl](https://10.147.128.150/2662/) - Spring Batch와 QuerydslItemReader 안녕하세요 우아한형제들 정산시스템팀 이동욱입니다. 올해는 무슨 글을 기술 블로그에 쓸까 고민하다가, 1월초까지 생각했던 것은 팀에 관련된 주제였습니다. 결팀소: 결제시스템팀을 소개합니다와 같은 "정팀소: 정산시스템팀을 소개합니다" 혹은 "정개추: 정산에서개발을추구하면안되는걸까" (던만추 컨셉) 등이였죠. (던만추) 팀에 관련된 이야기라면 뭐니뭐니해도 팀장님 얘기가 빠질수가 없는데, 주제를 정하자마자 조직개편으로 팀장님이 다른 팀으로 발령났습니다. 정권이 교체되었으니 라인 환승도 해야하고, 우아한테크코스 - [HikariCP Dead lock에서 벗어나기 (실전편)](https://10.147.128.150/2663/) - 1부 HikariCP Dead lock에서 벗어나기 (이론편)은 잘 보셨나요? 2부 HikariCP Dead lock에서 벗어나기 (실전편)에서는 실제 장애 사례를 기반으로 장애 원인을 설명하고 해결 사례를 공유하고자 합니다. 그럼 시작하도록 하겠습니다! 1부의 Dead lock 예시는 이해가 갔는데, 실제 상황은 뭐였나요? 사실, 예제가 실제 상황이었습니다. 장애 환경에 대한 Thread count와 maximum pool size의 조건은 아래와 같습니다 CPU Core : - [HikariCP Dead lock에서 벗어나기 (이론편)](https://10.147.128.150/2664/) - 안녕하세요! 공통시스템개발팀에서 메세지 플랫폼 개발을 하고 있는 이재훈입니다. 메세지 플랫폼 운영 장애를 바탕으로 HikariCP에서 Dead lock이 발생할 수 있는 case와 Dead lock을 회피할 수 있는 maximum pool size를 구하는 방법을 공유하고자 합니다. 동일한 이슈를 해결하기 위해 고생하시는 분들께 도움이 되길 바라며 글을 작성하였습니다. 추가적으로 이 문제를 해결하면서 발견한 JPA / hibernate 관련 내용까지 추가하였습니다. 글이 - [우아한형제들 Developer Relations 2019 회고](https://10.147.128.150/2666/) - 안녕하세요, 우아한형제들 Developer Relations담당 문수민입니다. 작년 2019년 3월에 작성한 "3월 우아한Tech세미나" 라는 글을 통해 2019년 DR 활동에 대한 계획을 공유하였습니다. 당시 저는 배민 앱의 귀한분이자 우아한형제들의 Developer Relations담당자로 저를 소개하였는데요, 2020년 2월의 저는 천생연분이라는 배민의 VIP가 되었습니다. (무려 세 달 연속ㅎㅎㅎ) 천생연분도 모자라 작년 "대놓고 자랑하는 글" 로 회사 덕질의 꾸준함을 보였던 제가 2019년 DR - [배달의민족 최전방 시스템! '가게노출 시스템'을 소개합니다.](https://10.147.128.150/2667/) - 안녕하세요 우아한형제들 프론트검색서비스팀 권용근입니다. 저는 "먼데이 프로젝트" 라는 2019년 대형 프로젝트에서 요란하게 탄생하였고, 탄생한 순간부터 지금까지 배달의민족 최전방에서 활약 중인 2019년 4월 1일생 가게노출 시스템 을 소개하려고 합니다. 가게노출 시스템이란? 가게노출 시스템 은 배달의민족 최전방에서 사용자에게 가게를 노출하는 시스템입니다. 2. 데이터 스토어 두번째 도전은 새로운 저장소 아키텍처 입니다. 배달의민족은 MSA 를 추구하고 있고, 현재 거의 - [정산지기를 향한 첫걸음 (feat. 파일럿 프로젝트)](https://10.147.128.150/2668/) - 안녕하세요-! 우아한형제들 정산시스템팀 신입 개발자 박우빈입니다. 예전부터 계속 눈팅만 하면서 구경하던 우아한형제들 기술블로그에 제가 지금 localhost:4000을 띄우고 글을 작성하고 있다니 쉽게 믿기지 않네요ㅎㅎ 오늘은 제가 입사한 후 팀 내에서 진행했던 정산 어드민 파일럿 프로젝트에 대해 나눠보려고 합니다. 많은 분들이 이미 잘 아시는 내용이겠지만, 주니어 개발자의 성장기라고 생각하면서 읽어주시면 감사하겠습니다 :-) 입사 전... 팀이 정해지고 나서 - [알람에 관하여](https://10.147.128.150/2669/) - 안녕하세요. 우아한형제들에서 DBA로 근무하고 있는 이재웅입니다. 오늘은 누구나 알고 있는 알람에 관해 이야기를 하려고 합니다. 인프라나 데이터베이스를 운영하게 되면 수많은 알람을 만나게 됩니다. 우아한형제들의 데이터베이스 또한 많은 알람이 설정되어 있습니다. 사실 알람이란건 핸드폰 알람처럼 간단하고 생활에 밀접한 도구이지만 이걸 더 잘 쓰기 위해선 좀 더 알아볼 필요가 있습니다. 현재 우아한형제들의 데이터베이스에는 운영 환경 기준으로만 약 - [우아한테크코스 : 새로운 시작](https://10.147.128.150/2670/) - 우테크루즈 : 우아한개발자가 되기위한 크루들이 탄 우주선 Cruise의 사전적 의미는 '순항하다, 정속으로 나아가다' 로, 우테크루즈는 '각자의 속도로 목표를 향해 꾸준히 나아가자'는 의미로 크루가 직접 지은 이름 안녕하세요. 교육코스개발팀 이원미입니다. 작년 12월 우아한테크코스(이하, 우테코) 1기 크루들을 시원섭섭한 마음으로 보내고 (잘 지내고 있지?), 우테코는 또 다른 개발 꿈나무들을 맞이했습니다. (짝짝짝!!) 눈이 내리던 지난겨울, 새로운 51명의 크루들을 처음 - [[모집] 우아한테크캠프 3기](https://10.147.128.150/2671/) - 우아한개발자가 되고 싶은 이들을 위한 우아한테크캠프 3기 모집이 시작됩니다. 우아한테크캠프는 여름방학 기간에 맞춰 진행되며 정해진 커리큘럼에 따라 개발 관련 지식을 공부하고, 다양한 미니 프로젝트를 통해 실제 서비스를 만들며 개발 지식을 익히는 교육형 인턴 과정입니다. 최근 코로나19의 영향으로 우아한테크캠프 2020의 일정이 조정/취소되는지 문의가 많았는데요, 우아한테크캠프는 신입 개발자 양성이라는 목적과 취지에 따라, 계획대로 진행될 예정입니다. 다만, 사회적 - [교육코스개발팀의 항해 일지](https://10.147.128.150/2674/) - 안녕하세요. 교육코스개발팀 이원미입니다. 교육코스개발팀 5명의 개발자와 개발자를 꿈꾸는 약 50명의 우아한테크코스(이하, 우테코) 교육생(이하, 크루)들 속에서 유일하게 비 개발자로 살고 있는 저는, 하루하루를 신기한 경험 속에서 살고 있습니다. 개발자도 아닌 제가 개발자 교육에 몸담고, 교육자로서 그리고 멘토로서의 제 꿈을 이 안에서 키워나가고 있는 이유는 저희 팀원들과 크루들 덕분인 것 같습니다. 꿈을 향해 열심히 달려가는 크루들과 좋은 - [코틀린에서 하이버네이트를 사용할 수 있을까?](https://10.147.128.150/2675/) - 신규 시스템을 개발하면서 코틀린과 하이버네이트를 함께 사용한 경험을 나누기 위해 작성해봅니다. 안녕하세요! 서비스플랫폼 팀에서 서버 개발을 하는 김지희, 김석홍입니다. 저희 팀은 이번에 사장님이 혜택을 관리할 수 있는 신규 프로젝트를 진행하면서 개발 언어로 코틀린을 사용하기로 했습니다. 코틀린은 JetBrain에서 만든 언어로 JVM에서 구동할 수 있으며, 자바와 상호운용이 가능한 정적 타입 지정 언어입니다. 간결한 표현과 NPE 방지, 함수가 - [우아한테크코스 교육 설명회에 초대합니다.](https://10.147.128.150/2676/) - 나는 왜 교육자로 살고 있는가? 저는 20대 후반에 본격적으로 프로그래밍 학습을 시작했는데요. 제가 프로그래밍을 통해 무엇인가를 만들고, 문제를 해결하는 과정이 너무 재미있더라고요. 제가 앞으로 걸어가야할 길은 이 길이다라는 확신이 들었고, 정말 재미있는 시간을 보냈던 것 같아요. 가끔씩 지칠 때도 있었지만 개발자로 사는 것은 정말 흥분되고, 재미있게 문제를 해결하면서 돈까지 받을 수 있는 좋은 직업이라고 생각하며 - [팀 문화의 탄생](https://10.147.128.150/2677/) - 안녕하세요, 우아한형제들 상품시스템팀의 손권남입니다. 가끔씩 저는 우리팀의 팀 문화에 대한 질문을 받곤 합니다. 그때마다 매번 단편적인 답을 드리곤 하면서 한 번 정도 우리의 팀문화를 정리했으면 좋겠다고 생각했습니다. 하지만 우리팀이 행하는 팀 문화 자체보다는 그 문화가 형성되어 가는 과정이 더 중요하지 않을까 하는 생각이 들어 그 둘을 함께 정리해보았습니다. 언제나 그렇듯, 이 글은 개인적인 경험과 의견을 - [Spring REST Docs에 날개를... (feat: Popup)](https://10.147.128.150/2678/) - 안녕하세요? 우아한형제들에서 정산시스템을 개발하고 있는 이호진입니다. 2018년 12월 Spring REST Docs를 주제로 사내 블로그를 작성 후... 1년 이상이 지났습니다. Spring REST Docs를 적용 후 빠르게 타 시스템에 API 스펙을 제공할 수 있다는 장점을 누렸던 반면 API 가 늘어날수록 단점이 부각 되었고 이 단점을 해소하기 위해 방법(꼼수)을 연구 했습니다. 또 이걸 우려 먹을 생각을 하니 민망(두근두근)하지만 - [간단하게 만드는 이상한 알람](https://10.147.128.150/2679/) - 안녕하세요. 우아한형제들에서 DBA로 근무하고 있는 이재웅입니다. 오늘은 간단한 이상점 탐지를 이야기 하려고 합니다. 장애 사례를 한가지 들어볼께요. 오전 8시 서버 배포 이후 DB의 CPU 사용률이 전일 대비 10% 정도 높아졌습니다. [3일간의 CPU 사용률 패턴] 아침에는 서비스 트래픽이 적어 평소보다 CPU 사용률이 약간 높은 상태로만 유지되어 알람 임계치인 50%, 70%에 도달하지 않았습니다. 그래서 특이점을 인지 못했고 - [코드리뷰 모음 서비스를 소개합니다.](https://10.147.128.150/2680/) - layout: post title: "코드리뷰 모음 서비스를 소개합니다." description: "코드리뷰 피드백 모음 서비스 javable" author: brown date: 2020-06-05 14:00:00 +0900 categories: techcourse published: true 안녕하세요. 교육코스개발팀 류성현입니다. 우아한테크코스(이하, 우테코)가 시작된 지 1년이 조금 넘었습니다. 그동안 100명에 가까운 크루(수강생)들이 우테코와 함께 생활했고 지금도 함께 하고 있어요. 크루들 대부분은 우테코에서의 경험을 다양한 형태의 컨텐츠로 만들어 공유하고 있는데, 단순히 - [입사 후, 벌써 1년](https://10.147.128.150/2632/) - 작은 SI 회사 개발자에서 우아한형제들로 이직 1년 안녕하세요. 배민플랫폼실 결제정산개발팀에서 정산 업무를 맡고 있는 이호진입니다. 이 글은 SI 회사에서 우아한형제들로 이직한 후 1년간 있었던 변화에 대한 이야기입니다. 5월 14일, 입사 1년이 되는 날을 맞아 지난 1년을 돌아보겠습니다. 배민플랫폼실을 지원한 이유 배민플랫폼실을 지원한 가장 큰 계기는 제가 원하는 기술스택을 사용하고 있기 때문이었습니다. SpringBoot, JPA, QueryDsl SI - [우아한 feign 적용기](https://10.147.128.150/2630/) - 안녕하세요. 저는 비즈인프라개발팀에서 개발하고 있는 고정섭입니다. 이 글에서는 배달의민족 광고시스템 백엔드에서 feign 을 적용하면서 겪었던 것들에 대해서 공유 하고자 합니다. 소개 Feign 은 Netflix 에서 개발된 Http client binder 입니다. Feign 을 사용하면 웹 서비스 클라이언트를 보다 쉽게 작성할 수 있습니다. Feign 을 사용하기 위해서는 interface 를 작성하고 annotation 을 선언 하기만 하면됩니다. 마치 Spring - [우아한테크캠프는 2020년에 진행됩니다.](https://10.147.128.150/2629/) - 2017년, 2018년에 진행되었던 우아한테크캠프를 기다리시는 분들께 말씀 드립니다. 우아한테크캠프 2019 최근 '우아한Tech 페이스북 페이지' 또는 dev_relations@woowahan.com, tech_hr@woowahan.com, recruit@woowahan.com 등의 메일 주소로 올해 우아한테크캠프에 대해 문의를 주시는 분이 많다고 들었습니다. 아쉽게도, 올해 우아한테크캠프는 여러 사정으로 인해 진행을 못하게 되었습니다. 소식 안내와 더불어, 우아한테크캠프 소식을 더 일찍 공식적으로 알려 드리지 못한 점에 대해서도 죄송하다는 말씀 드립니다. 저희와 - [도움이 될수도 있는 JVM memory leak 이야기](https://10.147.128.150/2628/) - 도움이 될지도 모르는 JVM memory leak 얘기인데 제목을 뭐라고 하지? 안녕하세요. 배민 플랫폼실 주문중계 시스템팀 오민철입니다. 이 글은 몇 줄의 코드와 어디서 걸렸는지 모를 dependency library로 발생한 memory leak에 관한 이야기입니다. 제목은 참 많이 고민했습니다. 사실 4월에 올리려고 했습니다. 그런데 제목을 지금까지 고민하다 저걸로 결정했습니다. 우리 팀의 역할은요. 먼저 우리 팀의 역할을 소개하겠습니다. 우리 팀은 - [5월 우아한 Tech 세미나 후기](https://10.147.128.150/2627/) - 안녕하세요. 교육코스개발팀 이동규입니다. 저희 팀은 5월 7일부터 우아한테크코스 교육을 진행하고 있습니다. 교육과 관련하여서는 이전의 포스팅에서 모집글과, 프리코스관련 글을 확인하실 수 있습니다. 현재 우아한형제들은 다양한 DR (Developer Relations) 활동을 하고 있습니다. 우아한 테크 세미나는 우아한형제들의 DR 활동 중 하나로, 매달 다른 주제로 내외부 연사님들을 모셔 기술적 주제에 대해 살펴보는 시간으로 꾸며지며, 구성원들뿐만 아니라 같은 고민과 관심을 - [목적의식 있는 연습을 통한 효과적인 학습](https://10.147.128.150/2626/) - 나는 우아한형제들에서 우아한테크코스(이하 우테코) 교육 과정을 진행하고 있다. 우테코를 설계하면서 고민스러웠던 부분 중의 하나는 '선발 과정을 어떻게 하면 의미 있는 시간으로 만들 것인가?'였다. 보통의 선발 과정은 경쟁을 통해 누군가를 선발해야 하는 것이 가장 큰 목적이다. 선발도 중요하지만 선발 과정에서 배움을 만들고 성장할 수 있는 시간으로 만들어 보고 싶었다. 이 목표를 달성하기 위해 선발 과정에 프리코스라는 - ['Gradle Kotlin DSL' 이야기](https://10.147.128.150/2625/) - Developer life is Coding between Build and Deploy. 개발자 인생은 (프로젝트) 빌드와 배포 사이 삽질(=코딩)이다. — #월급쟁이개발자 허니몬 빌드도구(Build tool) 이야기 새로운 프로젝트를 시작하는 단계에서 어떤 프로그래밍 언어를 사용할까? 어떤 플랫폼에서 개발할까? 어떤 빌드도구를 사용할까? 어떤 버전관리 시스템을 사용할까? 어떤 빌드배포 시스템을 사용할까? 등의 고민을 하게 된다. 이 고민 중에서 누구나 흔하게 접하고 매일매일 사용하고 - [Packer와 Ansible을 이용한 표준 AMI 만들기](https://10.147.128.150/2624/) - 안녕하세요 저는 작년 우아한테크캠프 2기를 마치고 10월에 시스템신뢰성개발팀에 입사한 김규남이라고 합니다. 이번 글에서는 팀 내에서 Packer와 Ansible을 이용해 AMI를 코드레벨로 어떻게 관리하고 있는지에 대해 공유드리려고 합니다. 용어설명 저는 처음 입사할 당시에 인프라와 관련된 지식이 전혀 없었습니다. 처음 들어보는 용어들이 많았었기에 많이 혼란스러웠는데, 이 글을 보시는 분들 중에도 혹시 저와 같은 분이 계실 수 있어 간략히 - [파일럿 프로젝트를 통한 배치경험기!](https://10.147.128.150/2623/) - 들어가며 안녕하세요 ! 우아한 테크캠프 2기를 통해 1월에 결제정산개발팀에 합류하게 된 최유성입니다. 입사 후 총 5주간 신입 개발자의 팀 적응을 위한 파일럿 프로젝트를 진행하였습니다. 지금부터 그 5주간의 파일럿 프로젝트에 대한 경험을 공유하겠습니다. 시작! 파일럿 프로젝트의 주제는 상태 비교 작업을 위한 배치 어플리케이션의 구현! 처음 실무를 접해본 신입개발자분들에게는 익숙하지 않은 주제일 텐데요, (저만 그랬나요..?) 저 또한 - [리모트 컨피그 앱 개발기](https://10.147.128.150/2622/) - 안녕하세요. 우아한형제들 배민앱개발팀에서 안드로이드 앱을 개발을 하고 있는 이민형입니다. 배달의민족 앱에서 앱의 다양한 설정 값들을 앱 배포없이 적용할 수 있는 리모트 컨피그 기능에 대해 공유하고 리모트 컨피그를 어떻게 사용하고 있는지에 대한 내용을 공유드리려 합니다. 모바일 앱은 실시간으로 이슈를 대응하기에는 배포가 너무 무거워요. 앱 내부의 사소한 맞춤법 오류, 잘못된 데이터 정보 노출 등 앱을 출시 한 - [Aurora 로컬 스토리지 성능 테스트](https://10.147.128.150/2621/) - 안녕하세요 시스템신뢰성개발팀에서 DBA로 근무하고 있는 오윤택입니다. 오로라를 사용할때 그동안 로컬스토리지의 성능이슈로 인하여 구 모델인 R3 인스턴스를 사용해왔습니다. 최근 오로라에 R5 인스턴스가 추가된 만큼, 계속 R3 인스턴스를 사용하는게 맞는지 성능 테스트를 진행하여 결과를 공유합니다. Aurora의 로컬 스토리지란? Aurora는 아래와 같이 두가지의 스토리지를 사용합니다. 스토리지 타입 용도 클러스터 스토리지 Data File, BinLog, RedoLog 로컬 스토리지 임시테이블, 정렬, - [개발 미션과 함께 읽는 클린 코드](https://10.147.128.150/2620/) - 들어가며 안녕하세요, 미래사업부문의 오지산이라고 합니다. 저는 작년 10월 우아한형제들에 신입 개발자로 입사하면서 처음으로 Spring 위에서 코드를 작성하는 경험을 했습니다. 0의 지식으로 부딪혀야 하는 상황이었는데요. 거기에 신규 서비스를 개발해야 하는 만큼, 배달의민족을 비롯한 사내 다른 서비스의 코드를 참고하거나 여러 공식 문서들을 읽어가며 개발 미션을 수행하게 되었습니다. 이 책 자체를 읽고, 정리하고, 저자의 의도를 파악하는 것이 저에게 - [3월 우아한 Tech 세미나 후기](https://10.147.128.150/2619/) - 스프링 리액티브 세미나 후기 안녕하세요! 우아한 형제들에서 결제/정산/포인트/비즈머니를 담당하는 결제정산개발팀 이동욱입니다. 사내에서는 다양한 DR (Developer Relations) 활동을 하고 있습니다. 참고 여러 활동 중 이번엔 토비의 스프링의 저자이신 토비 (이일민)님의 스프링 리액티브 프로그래밍 세미나가 진행되었습니다. (우아한 테크톡 포스터) 오늘 발표는 아무래도 리액티브 혹은 리액터에 대해 알고 계신 분들이라면 재밌게 들을 수 있지만, 처음인 분들께는 조금 공감하기 - [구글플레이 권한 정책 지키기](https://10.147.128.150/2618/) - 안녕하세요. 우아한형제들 배민앱개발팀에서 배달의민족 안드로이드 앱을 개발을 하고 있는 나동호입니다. 구글플레이에서 보안 및 개인 정보 보호 정책을 강화하면서 민감한 권한을 제거하며 겪은 이야기를 작성한 글입니다. 이 글에서 나온 버전 코드 및 몇몇 정보들은 실제와는 차이가 있을 수 있습니다. 구글플레이에서 꼭 지켜야 할 정책 2가지 구글플레이에서는 지켜야 할 많은 [정책](https들은 있지만 [API 레벨 26 이상 지정](https과 - [aop를 이용한 oauth2 캐시 적용하기](https://10.147.128.150/2617/) - 서론 저는 현재 미래사업부문에서 신규 서비스를 만들고 있으며, 신규 서비스는 기존 우아한 형제들에서 서비스중인 배달의민족과 디펜던시를 갖지 않는 독립적인 서비스다 보니 모든 것을 처음부터 새 판에서 고민하며 만들어 가고 있습니다. 이 글에서는 그 과정에서 겪은 하나의 주제를 골라 이야기 할까 합니다. oauth2를 선택한 계기 회원기반 서비스를 만들기 위해서 어떤 인증체계를 구축할지 선택해야 합니다. 전통적인 웹서비스에서는 - [로봇 개발 어떻게 해야되죠? (1/2) - AWS RoboMaker 따라하기 (ROS 어플리케이션 개발과 시뮬레이션 편)](https://10.147.128.150/2615/) - AWS RoboMaker를 사용해 ROS 어플리케이션 개발부터 시뮬레이션, Fleet 관리, OTA 배포까지 쭉~ 따라 해봅니다. by Jinyong Park(박진용) / AWS, AWS RoboMaker, ROS, Robotics, Dilly, 로보메이커, 로보틱스, 딜리 로봇 개발 어떻게 해야되죠? - AWS RoboMaker 따라하기 1부 : ROS 어플리케이션 개발과 시뮬레이션 2부 들어가며 작년 6월 우아한형제들은 배달의민족이 꿈꾸는 가까운 미래 배달 로봇 라이프라는 비전 영상을 - [코드리뷰 적응기(feat. 파일럿 프로젝트)](https://10.147.128.150/2614/) - 안녕하세요. 결제정산개발팀의 권세희입니다. 저는 정산업무를 맡게 되었는데, 정산은 데이터 정합성과 트랜잭션, 도메인 주도 개발, Entity 간의 연관 관계, 대용량 데이터 처리가 핵심인 시스템입니다. 정산 도메인과 기술셋에 대한 경험이 없어 들어가기에 앞서 파일럿 프로젝트를 먼저 하게 되었습니다. 정산 시스템을 만들고 코드리뷰를 받은 경험을 공유하고자 합니다. 정산 시스템 현재 정산 시스템은 크게 2가지 시스템으로 구분됩니다. 고객서비스실, 결제정산팀 - [테스트 코드 없이 레거시 코드를 다 감수하시겠습니까?](https://10.147.128.150/2613/) - 부서 이동을 하다 2018년 말미, 결제/정산 파트에서 주문중계 파트로 부서 이동하게 되었습니다. 인사 발령을 받고 나서 팀 이동을 하게 되면 누구나 직면하게 되는 상황이 발생하는데요. 그것은 바로 레거시 코드의 인수 인계입니다. 처음 레거시 코드를 보고는 이런 생각이 들었습니다. (저만 그런건 아니겠죠?) “건드리고 싶지 않아.” “잘 운영 되던 거니까 버그는 없겠지?” “새로운 기능요청이 오면 어쩌지?” 레거시 - [콜라 좀… 쉽게 담을 수 없나요, 쓰앵님](https://10.147.128.150/2612/) - 안녕하세요. 콜라와 공기밥은 늘 추가하는 배민앱 고갱님이자 배민앱개발팀에서 배달의민족 안드로이드 앱을 만들고 있는 윤효정입니다. 앱 클라이언트에서 메뉴 탐색 사용성을 개선하기 위해 메뉴 검색과 퀵메뉴를 만들었던 개발썰을 풀어봅니다. (TMI 주의) 메뉴 고르기가 수고롭다.. 수고로워 한 음식점에 처음 방문한 손님은 무엇을 파는지 벽에 걸린 메뉴판을 스캔하면서 메뉴 고르기 행동을 시작합니다. 이벽 저벽에 걸려있는 메뉴들이 한눈에 들어오지 않으면, - [리모트 컨피그 서버 구축기](https://10.147.128.150/2611/) - 안녕하세요. 저는 배민서비스개발실에서 웹어플리케이션 서버를 개발하는 강홍구입니다. 이 글에서는 배달의민족 앱에서 사용되는 여러가지 설정값들을 관리하기 위한 리모트 컨피그 서버를 구축한 내용에 대해 공유 하고자 합니다. 왜 리모트 컨피그 서버가 필요했을까? 브라우저에서 동작하는 웹어플리케이션은 서비스를 사용하는 사용자들이 별도의 어플리케이션 설치가 필요하지 않기 때문에 배포에 대해 자유로운 편입니다. 그러나, 사용자들이 직접 설치를 하여 사용하는 어플리케이션(안드로이드앱, IOS앱)은 사용자가 - [Spring 웹 애플리케이션에서 사용하지 않는 API를 찾아보자](https://10.147.128.150/2610/) - 안녕하세요. 배민주문서버개발팀 송정훈입니다. 이 글에서는 스프링 웹 애플리케이션에서 사용자 요청에 대한 로그를 수집하고, 사용되고 있지 않는 API를 쉽게 확인하는 방법에 대해서 설명하고자 합니다. 이 많은 API 들을 다 사용하는 걸까? 저희 팀은 배달의민족 서비스의 주문시스템을 만들고 있습니다. 주문시스템은 크게 2개의 API 애플리케이션에서 150여 개의 API를 제공하고 있습니다. 이 중에선 이전에 협업부서의 요청으로 만들었지만, 현재는 사용되고 - ['우아한테크코스 - 웹 백엔드' 과정에 참여할 사람을 모집합니다.](https://10.147.128.150/2609/) - 우아한테크코스가 뭔가요? 우아한테크코스는 프로그래밍을 배워 프로그래머로서의 삶을 살고 싶은 사람들을 대상으로 하는 프로그래밍 교육 과정입니다. 한마디로 프로그래머로 취업하고 싶은 사람들을 위한 직업 전문 학교와 같다고 생각하면 됩니다. 우아한테크코스가 지향하는 교육은? 프로그래밍에 대한 관심이 많아지면서 다양한 교육 과정이 만들어지고 있는데요. 우아한테크코스라는 새로운 교육 과정을 만든 이유가 궁금할 것 같아 그 이야기를 먼저 하는 것이 좋겠네요. 우아한테크코스는 - [배달아~ 배달 가는길 알려줘!(단호함)](https://10.147.128.150/2608/) - 서론 배민라이더스에서는 배달거리를 업소와 고객의 주소 정보를 이용해서 지구는 적당히(?) 둥글다는 계산으로 거리계산을 하고 있습니다. ~대충대충코드~ double theta = from.getLongitude() - to.getLongitude(); double dist = Math.sin(deg2rad(from.getLatitude())) * Math.sin(deg2rad(to.getLatitude())) + Math.cos(deg2rad(from.getLatitude())) * Math.cos(deg2rad(to.getLatitude())) * Math.cos(deg2rad(theta)); dist = Math.acos(dist); dist = rad2deg(dist); dist = dist * 60 * 1.1515; dist = dist * 1.609344 * 1000; return - [응? 이게 왜 롤백되는거지?](https://10.147.128.150/2606/) - 이 글은 얼마 전 에러로그 하나에 대한 호기심과 의문으로 시작해서 스프링의 트랜잭션 내에서 예외가 어떻게 처리되는지를 이해하기 위해 삽질을 해본 경험을 토대로 쓰여졌습니다. 스프링의 트랜잭션의 세부적인 동작방식을 살펴보기 때문에 코드가 많고 설명이 조금 긴 편입니다. 상황재현과 테스트를 위해 작성한 코드는 github에 있습니다. 테스트에 사용한 버전은 SpringBoot 2.1.2, MySQL 5.7입니다. 때는 지난 12월의 어느날 beta서버에서 에러로그가 - [SQL Server 에게 String 이란? (NVARCHAR 인가 VARCHAR 인가)](https://10.147.128.150/2605/) - SQL Server JDBC Driver 를 사용하면서 배운, 그리고 주의해야 할 특징 안녕하세요. 비즈상품개발팀에서 광고시스템을 개발하고 있는 김승영입니다. 현재 광고시스템의 일부분이 Spring Boot / JPA 기반에 SQL Server JDBC Driver 를 사용해서 운영하고 있는데요. 그 SQL Server JDBC Driver 를 사용하면서 배운, 주의해야 할 1가지 특징을 공유하고자 합니다. 결론 먼저 결론부터 말씀드리면, 이 글의 핵심 내용은 - [재해복구(DR)를 위한 오로라 데이터베이스 구성](https://10.147.128.150/2604/) - 지난해 11/22 오전에 AWS 서울 리전의 전면 장애가 있었습니다. 서울 리전의 경우 2개의 가용영역으로 분리되어 있으나 장애가 리전 전체에 영향을 미쳤기 때문에 배달의민족을 포함한 많은 업체들의 서비스가 약 84분 동안 서비스를 제공하지 못했습니다. 그러자 재해복구(DR)에 대한 필요성이 다시 대두되고 있는데요. AWS는 DR 관련하여 RDS 오로라 데이터베이스에서 어떤 기능들을 갖고 있을까 궁금했습니다. 기능 MySQL 5.6 호환 - [클린 아키텍처와 함께하는 배민앱 (Android)](https://10.147.128.150/2602/) - 배민마켓 개발하기 안녕하세요, 배민앱개발팀에서 안드로이드 앱 개발을 하고 있는 강경완입니다. 안드로이드 파트로 온 지 얼마 되지 않아 미션이 떨어졌습니다. 기존에 음식 배달만을 하던 배달의민족 서비스에 배민마켓이라는 새로운 형태의 서비스를 빠르게 넣어야 하는 것이었습니다. 빠른 시범 운영을 위해 기존의 도메인을 그대로 사용한 채 만들게 되었습니다. 클.. 클린 아키텍처요..? 배달의민족 안드로이드 앱(이하 배민앱)은 MVP 와 클린 아키텍처를 - [Legacy DB의 JPA Entity Mapping (Enum Converter 편)](https://10.147.128.150/2600/) - 안녕하세요. 저는 우아한형제들 비즈상품개발팀의 이은경입니다. Legacy DB의 JPA Entity Mapping (복합키 매핑 편)에 이어 저는 DB의 코드값과 Java Enum을 연결해주는 과정에서 유용하게 사용한 @Convert에 대해서 설명하려고 합니다. 기 그동안 광고 시스템에서는 모든 상태값에 대해서 아래와 같이 DB 코드 테이블에 정의된 코드값을 사용하고 있었습니다. 단순히 status code만 보고는 실제로 무슨 상태인지 value를 알기가 힘들었고, 어느 정도 - [Legacy DB의 JPA Entity Mapping (복합키 매핑 편)](https://10.147.128.150/2595/) - 안녕하세요. 우아한형제들에서 배달의민족 서비스의 광고시스템을 개발하고 있습니다. 시스템을 점진적으로 Spring Boot / JPA 기반으로 이관하면서 경험했던 내용을 공유하고자 합니다. Legacy DB의 JPA Entity Mapping (복합키 매핑 편) 어느 회사든 Legacy System 라고 불리는 회사의 주요 비즈니스를 책임지는 시스템이 있을 것입니다. 저희 배달의민족도 마찬가지구요. 회사의 주요 비즈니스를 책임지고 있지만, 사업의 더큰 확장을 위해서는 개선이 필요할 시점이 - [Spring 의 Cache 추상화를 사용하면서, 단건/다건 key 에 대한 동일 저장소 사용하기](https://10.147.128.150/2601/) - 들어가며 이전에는 Google 의 Guava 를 이용하여 Local Cache 기능을 구현을 했습니다. 'guava' 단순하게 Key/Value 에 대해서 가장 쉽게 사용을 할 수 있는 것중의 하나가 Spring 에서 제공을 해주는 'Cache Abstraction' 을 사용을 하는 것으로 생각 됩니다. 이 글은 동일 request / response 를 유지를 하고 단순이 이 것을 List 로 만들고, 단건과 다건을 하나의 - [React에서 Mobx 경험기 (Redux와 비교기)](https://10.147.128.150/2599/) - 안녕하세요 딜리버리플랫폼팀 김찬정입니다. 이 글의 목적 React와 함께 사용하는 State(상태)관리 라이브러리중 가장 많이 사용되고 있는 Redux와 또 다른 라이브러리인 Mobx를 직접 사용하여 개발해 보고 느낀 차이점과 Mobx만의 장점, 그리고 Java Spring Framework와 Mobx의 유사성을 예제 코드와 함께 비교 해보려고 합니다. 많은 분들이 React 자체 보다는 Redux를 적용 하기 위해서 경험하는 러닝커브가 생각보다 높아서 React가 어렵다고들 - [우아한형제들 JPA 강의 소감과 적용 사례](https://10.147.128.150/2598/) - 우아한형제들에 외부 개발자분들을 초대해서 JPA 기본기를 강의한 소감 배달의민족 내부 시스템 JPA 적용 사례 공유 안녕하세요. 프론트서버개발팀 김영한입니다. 이번에 외부 개발자분들을 초대해서 JPA 강의를 진행한 소감과 우아한형제들이 실제 JPA를 어떻게 사용하고 있는지 두 가지를 공유하겠습니다. 참고로 이번에 진행한 강의 파일의 다운로드 링크는 마지막에 첨부해 두었습니다. 어떻게 시작했는가? 최근에 JPA 기본기 강의를 외부에서 진행했는데, 사내 신입 - [기존 Express 서버에 Vue.js 적용해보기 (feat.EJS)](https://10.147.128.150/2596/) - 도입 이유 팀에서 쓰는 관리자 페이지에 추가 작업을 할 것이 몇 가지 있었습니다. 반복되는 복잡한 코드와 화면 구조가 바뀔 시 걸리는 작업의 시간 그리고 유지보수 측면의 이유로 인해 많은 고민을 하다 Vue.js 를 적용하게 되었습니다. 기존에는 EJS를 사용하였는데 아래처럼 파일 추가는 가능하나, 해당 파일을 바로 볼 수 없고 (ctrl+click 혹은 cmd+click) - [우아한 Developer Relations 두번째 이야기](https://10.147.128.150/2594/) - 모든 사람을 대상으로 한 PR(Public Relations)에서 배운, 개발자를 대상으로 한 DR(Developer Relations) 이야기. Developer Relations 지난 4월에 '우아한형제들의 Developer Relations'라는 글을 썼습니다. 그로부터 벌써 8개월 가까이 시간이 흘렀는데요. 8개월이라는 시간 동안 우아한형제들에도 변화가 있었고, 다른 회사들에도 변화가 있었던 것 같습니다. 카카오에서는 Developer Relations 채용 공고가 나왔고, LINE에서는 Developer Advocate(Relations) 채용 공고가 나온 것을 보았습니다. 두 - [Performance Insight 써도 돼요?](https://10.147.128.150/2593/) - 안녕하세요. 저는 우아한형제들의 시스템신뢰성개발팀에서 DBA로 근무하고 있는 이재웅이라고 합니다. Performance Insight에 대해 개발팀에서도 궁금해하고 저도 궁금해서 해본 테스트 결과를 공유해보려고 합니다. Aurora, RDS MySQL 등 RDS를 이용하고 있는데 CPU가 스파이크를 치거나 Replica Lag이 높게 발생하거나 RDS에 문제가 있어 보이는데 어떤 문제인지 모르는 경우가 많습니다. 그래서 RDS를 모니터링하기 위해 Cloudwatch도 보고 SlowQuery도 수집하지만 그래도 뭔가 속시원하진 - [우아한 파일럿 프로젝트 2기(feat.고독한개발자)](https://10.147.128.150/2591/) - 들어가며 안녕하세요. 저는 우아한테크캠프를 통해 우아한형제들에 합류한 배민서버개발팀의 김민지입니다. 이 글을 통해 저희 팀에서 진행하고 있는 신입 교육의 일환인 Show me the code라는 파일럿 프로젝트를 진행한 경험을 공유하고자 합니다.(다인님이 1기이고 저는 2주 늦게 합류한 2기입니다ㅋㅋ) 기능 구현이나 기술에 대한 자세한 설명 보다는 느낀점과 생각 위주로 작성하려고 합니다. 그럼 스타뜨! 간단 주문 시스템 프로젝트의 주제는 결제 - [우리도 채팅있으면 좋을 것 같아요.](https://10.147.128.150/2681/) - layout: post title: "우리도 채팅있으면 좋을 것 같아요." description: "Netty를 이용한 채팅 서버 구축 경험기" author: allen.song date: 2020-06-19 15:50:00 +0900 categories: experience published: true 이 글에서는 Netty를 이용해 채팅 서버 구축을 위한 기본 셋팅과 구조에 집중해 이야기를 전개합니다. 실제 운영환경에서 서비스되는 시스템을 만드는 과정은 많은 고민과 트러블슈팅이 필요하기 때문에 자칫 주제와 조금만 벗어나도 이야기가 - [우테코에서 찾은 나만의 효과적인 공부법](https://10.147.128.150/2682/) - layout: post title: "우테코에서 찾은 나만의 효과적인 공부법" description: "우테코를 통해 찾은 학습법에 대해 공유합니다." author: woniee date: 2020-06-24 09:00:00 +0900 categories: techcourse published: true 안녕하세요. 교육코스개발팀 이원미입니다. 51명의 크루가 우아한테크코스 한 달 생활기라는 주제로 작성한 첫 번째 글은 모두 잘 읽어보셨나요? 레벨 2를 마무리하면서 크루들이 작성한 글의 주제는 ‘우테코에서 찾은 나만의 효과적인 공부법’입니다. 글을 - [백엔드 개발자의 웹 프론트엔드 개발기](https://10.147.128.150/2683/) - layout: post title: "백엔드 개발자의 웹 프론트엔드 개발기" description: "맨땅에 헤딩하며 채팅까지 웹뷰로 만들었던 경험을 공유합니다." author: json.oh date: 2020-06-23 15:00:00 +0900 categories: experience published: true 안녕하세요, 신사업부문 띠잉셀의 오지산입니다. 저희 셀은 영상으로 놀 수 있는 소셜 서비스, 띠잉(Thiiing)을 개발하고 있어요. 이전 글에서 띠잉 채팅 서버의 개발 과정이 언급되었는데요. 이번 글에서는 채팅 기능을 싣고 있는, - [파일럿 프로젝트와 함께 우아한개발자 되어가기](https://10.147.128.150/2592/) - 들어가며 안녕하세요! 배민서버개발팀 김다인입니다. 지난 10월 신입 개발자로 입사한 후 약 5주간에 걸쳐 파일럿 프로젝트를 진행했는데요, 그동안 제가 경험하고 느낀 것들을 공유해 드리고자 합니다. 시작 설렘 반, 긴장 반으로 입사한 당일, 팀장님께서는 저를 위한 선물이 준비 중이라고 하시면서 파일럿 프로젝트에 대한 이야기를 시작하셨는데요. 넷플릭스의 Full-cycle 개발자를 언급하시면서, 신입 개발자가 실제 업무에 투입되기 전, 직접 개발과 - [프로젝트가 장난이야?!](https://10.147.128.150/2590/) - 안녕하세요. 저는 배달의 민족 주문시스템을 개발하고 있는 권용근입니다. (출처 : 타요장난감 타요학교와 꼬마버스타요 버스 친구들:지호토이TV) 저는 개발자의 개인 장난(감)인 프로젝트인 토이 프로젝트에 대해서 이야기해보려고 합니다. 저는 웹 개발 입문과 거의 동시에 토이 프로젝트를 시작했고 이 프로젝트들을 통해 많은 성장을 이루었다고 생각하고 있습니다. 그래서 토이 프로젝트를 통해 무엇을 얻을 수 있었는지에 대하여 말해보려고 합니다. (우아한 Tech - [배달의민족 앱에 적용된 오프라인 모드에 대하여](https://10.147.128.150/2589/) - 안녕하세요. 배민앱개발팀 고명석입니다. 현재 배달의민족 앱에 적용되어 있는 "오프라인 모드"라는 기능에 대해서 설명해보려고 합니다. 오프라인 모드란? "오프라인 모드" 기능이란 배달의민족 앱을 서버 응답이 없는 상황에서도 사용할 수 있게 만든 기능입니다. Google Map, Youtube 같은 여타 다른 앱에서도 구현되어 있는 기능으로, 일반적으로는 해외에 나가거나 장시간 네트워크 없이 활동하는 순간에 앱을 이용할 수 있게 만들어주는 기능입니다. 물론 - [신규 포인트 시스템 전환기 #2 - 오픈 준비 단계](https://10.147.128.150/2588/) - 포인트 시스템 개편기 #2 - 오픈 준비 이 글은 이전편에서 이어집니다. 기존에 프로시저만 수행되던 시스템을 API 기반으로 전환하기 위해서 모든 API는 2개씩 준비해야만 했습니다. 레거시 프로시저를 랩핑한 API 신규 도메인 모델 API 이렇게 구성한 이유는 다음과 같습니다. 롤백의 위험 부담 최소화 만약 프로시저 랩핑 API가 없다면 다음과 같은 큰 위험이 있습니다. 기존에 포인트를 쓰던 다른 - [시의적절한 커스텀 어노테이션](https://10.147.128.150/2684/) - 소개 저는 신사업부문에서 Thiiing(띠잉)서비스를 만들고 있습니다. 띠잉 서버의 사례를 중심으로 커스텀 어노테이션을 사용하게 된 계기와 활용방식을 설명하겠습니다. 시의적절한가 개인적으로 어노테이션이 덕지덕지 붙어있는 코드를 좋아하지 않습니다. 특히 '커스텀'인 경우는 더욱. 어노테이션의 의도는 숨어있기 때문에 내부적으로 어떤 동작을 하게 되는지 명확하지 않다면 로직 플로우를 이해하기 어렵게 되고, 코드정리가 덜 되어 현재 사용되지 않고 있는 어노테이션들이 있더라도 쉽사리 - [신규 포인트 시스템 전환기 #1 - 개발 단계](https://10.147.128.150/2587/) - 포인트 시스템 개편기 #1 - 개발 안녕하세요? 우아한 형제들에서 결제/정산 (+포인트와 비즈머니) 시스템을 개발하고 있는 이동욱입니다. '사내 블로그에 글을 더 쓸 일이 있을줄이야' 라는 마음으로 VS Code로 글을 쓰고 있습니다. 저는 이번 시간에 올해 4월 중순부터 시작해 7월 말까지 진행된 포인트 시스템을 개편했던 경험을 공유하려고 합니다. 기존에는 포인트라는 서비스 자체가 구축되어 있지 않았습니다. 중앙 DB에 - [Real-time Service Configuration으로 Consul을 신주소 서비스에 적용한 사례](https://10.147.128.150/2586/) - 안녕하세요. 배민프론트서버개발팀 박제현입니다. 주소 검색 서비스를 개선하면서 Real-time Service Configuration으로 consul을 적용한 사례를 공유하고자 합니다. 들어가며 먼저 제가 속한 팀부터 소개해볼까 합니다. 배달의민족 앱에 사용될 데이터를 전달하는 서비스 개발(메인, 주소, 회원, 쿠폰, 리뷰 등) 저희 팀에는 고객과 밀접하게 운영되고 있는 서비스가 많다 보니 쉽게 개선하기 어려운 레거시 시스템이 많은데요. 맘 같아서는 쉽게 수정해서 바꿔버리고 싶지만, - [새로운 오피스, 작은집](https://10.147.128.150/2585/) - "좋은 음식을 먹고 싶은 곳에서" 안녕하세요 무더운 폭염과 장마가 지나고 난 후 벌써 선선한 바람이 부는 계절 어느덧 가을이 훌쩍 다가왔네요. 아침 저녁으로 일교차가 크네요, 여러분들 모두 감기 조심하세요~ 오늘은 우아한형제들의 새로운 오피스 공간에 대해서 소개해dream~ '사옥을 이동 했나요?' 아닙니다~ 대부분 저희 우아한형제들의 사옥은 '몽촌토성역' 에 있는 사옥을 떠올리시겠지만, 새로운 구성원들이 더욱 더 늘어남에 따라 - [JDBC로 실행되는 SQL에 자동으로 프로젝트 정보 주석 남기기](https://10.147.128.150/2584/) - 이 글은 Java기반에서 JDBC와 이를 기반으로 한 Persistence Framework를 이용해 SQL을 실행할 수 있는 개발자를 대상으로 모든 JDBC를 통해 실행되는 SQL 구문에 애플리케이션 정보를 주석으로 넣는 법을 설명합니다. 왜 SQL 쿼리에 프로젝트 이름을 남기고 싶나? 보통 Monolithic 아키텍처로 프로젝트를 진행하게 되면 모든 데이터를 하나의 데이터베이스에 다 넣는 방식으로 개발을 하게 됩니다. 서비스가 계속 Monolithic으로 유지 - [나를 술푸게 하는 고민들](https://10.147.128.150/2583/) - 안녕하세요, 배민프론트서버개발팀의 개그 신동이자 귀염둥이 이신은입니다. 저는 작년 12월 신입 개발자 공채를 통해, 백엔드 개발자로 우아한형제들에 합류했습니다. 취업준비생에서 7개월 차 삐약삐약 병아리개발자가 된 지금까지, 지난 1년을 돌아보며 제가 했던 고민을 나누고자 합니다. 한글보다는 수식이나 JAVA 언어로 표현하는 것이 더 편한 수학전공 개발자이지만, 저의 의도가 왜곡되지 않고 이 글을 보시는 분들에게 잘 전달되기를 바라며 펜을, 아니 - [파이썬으로 Linear Regression 해보기](https://10.147.128.150/2582/) - 들어가며 안녕하세요. 우아한형제들 데이터서비스팀에서 섹시미 막내를 맡고 있는 김세환입니다. 데이터를 보다보면 예측모델을 만들게 되는 경우가 많은데요, 대부분의 경우 모델을 만들기 위한 함수들이 라이브러리 형태로 구현이 되어있다보니, 이런 라이브러리를 가져다 쓰는 것이 일반적입니다. 이 때문에 모델을 만드는 데 있어 그 내용은 놓치고 지나가기 쉽습니다. 이 포스트에서는 Linear Regression(선형회귀)를 파이썬으로 직접 풀어보고 내용을 한번 되짚어보며, 데이터를 통해 - [우아한 개발자 경력 공채](https://10.147.128.150/2581/) - 우아한형제들/우아한신선들에서 개발자 경력 공채를 진행합니다. 왜 경력 개발자 공채를 진행하는가? 많은 회사들과 마찬가지로, 우아한형제들에서도 개발자 분들을 열심히 채용하고 있습니다. 많은 좋은 분들이 함께 해 주고 계시지만, 사업과 서비스의 성장 속도가 더 빨라지고 있어서(2018년에도 성장 속도는 줄어들지 않고 더 빨라지고 있네요) 더 많은 분들이 필요한 상황입니다. 최근에는 우아한테크캠프 2기를 진행하면서, 이 과정이 끝나고 서로 원할 경우, - [라이더스 개발팀 모바일에서 CI/CD 도입](https://10.147.128.150/2579/) - 이 글은 CI/CD를 안드로이드에 도입하게 되면서 정리한 내용입니다. 구축 및 운영하고자 하시는 분에게 경험을 공유하고자 합니다. 안녕하세요 라이더스 개발팀 장인수 입니다. 소개 우선 라이더스 개발팀이 하는 일을 소개 합니다. 저희 라이더스 개발팀은 배달되지 않는 음식점의 음식을 민트색 헬멧을 쓴 라이더 분들이 오토바이를 이용하여 음식을 픽업 후 고객님에게 배달하는 일정 과정들을 원활하고 효율적으로 운영이 될 수 - [우아한테크캠프를 통해 내가 얻은 것들](https://10.147.128.150/2578/) - 안녕하세요! 작년 12월에 우아한형제들에 입사한 신입 개발자 배민프론트개발팀의 박예준입니다! 딱 작년 이맘때에 즈음 우아한테크캠프 지원서를 작성하고 있었는데, 이렇게 기술 블로그에 글을 남기려니 기분이 이상하네요. 2018우아한테크캠프를 앞두고 있습니다. 앞서 우아한테크캠프 참가자에서 우아한개발자가 되기까지 를 작성하신 전한나님과 함께 작년 우아한테크캠프 참가자로서 우아한개발자가 되기까지의 경험을 담은 글을 작성하면 우아한테크캠프를 준비하시는 분, 우아한개발자가 되기를 희망하시는 분들께 조금이나마 도움이 되지 - [배민찬은 Vue를 어떻게 사용하나요?](https://10.147.128.150/2577/) - 이 글은 제이쿼리, PHP 기반의 쇼핑몰 서비스에 Vue를 도입한 사례를 정리한 내용입니다. 서비스에 Vue 도입을 고민 중이신 분들을 위해 경험기를 공유합니다. 배경 배민찬은 푸드 커머스 사업에 혁신을 만들어가는 스타트업 서비스다. 우리 개발팀은 솔루션 기반의 커스터마이징된 쇼핑몰을 시작으로 올해 3년 이상 레거시 코드와 분투 중이다. 팀내 프론트엔드 개발자로서 리엑트, 앵귤러, 노드 같은 트렌디한 키워드가 떠올랐고, 하루라도 - [장애와 관련된 XtraBackup 적용기](https://10.147.128.150/2576/) - 안녕하세요. 우아한형제들에서 빌링시스템을 개발하고 있는 이주현입니다. 입사한 이래로 2년 가까이 일하며 정말 다양한 문제를 마주하고 해결하며 소중한 경험을 쌓고 있습니다. 그중 얼마 전 MariaDB 백업 방식으로 적용한 XtraBackup에 대하여 이야기해보려고 합니다. 그전에 잠시 2016년으로 돌아가 보겠습니다. 개발자가 언제 죽는다고 생각하나? 총알이 심장을 관통했을 때? 아니야.. 불치병에 걸렸을 때? 아니지! 맹독 버섯스프를 마셨을때? 아니다!! 그건 바로 - [유니티와 함께하는 안드로이드](https://10.147.128.150/2685/) - 소개 저는 신사업부문에서 Thiiing(띠잉)서비스를 만들고 있는 안드로이드 개발자 박준선입니다. 띠잉 안드로이드 앱에 유니티를 subview 로서 적용한 경험을 설명하겠습니다. 안드로이드 : 유니티님~ 함께 하실...? 띠잉이라는 안드로이드 프로젝트에서는 디바이스의 카메라를 통해 얻은 프레임 데이터에서 얼굴과, 얼굴 요소를 트래킹하여 좌표를 얻고, 해당 좌표에 각 시나리오별로 선별된 각종 3D 효과를 입힌 프레임을 사용자에게 영상화 해서 보여주는 기능이 구현되어야 했습니다. - [주소검색서버(woowahan-juso) 개발기(上)](https://10.147.128.150/2575/) - 부제: SpringBoot Batch를 이용하여 주소DB 구축하기 안녕하세요 라이더스개발팀 정세빈 입니다 :) BROS(Baemin Riders Operating System)에 주소검색을 위한 주소검색서버 개발 및 배포 경험을 공유 드리려고 합니다. BROS는 배민라이더스의 주문 건을 배달하기 위한 라이더 운영 시스템입니다. 라이더 분들이 배달할 때 픽업지 혹은 배달지의 위치가 굉장히 중요합니다. 해당 위치의 변경 및 확인을 위한 주소 검색서버가 필요했고, 여러 솔루션 - [Google I/O 2018 에 다녀오다!](https://10.147.128.150/2574/) - 들어가며 안녕하세요. 배민서비스개발실 배민프론트개발팀에서 산업기능요원으로 iOS 개발을 하고 있는 강경완입니다. 우아한형제들에서는 iOS 개발을 하고 있지만, GDG (Google Developer Groups) Korea Android 커뮤니티의 오거나이저로 활동하고 있어서 Google I/O 2018에 참여했습니다. 먼 나라 미국까지 날아가서 2박 3일동안 전 세계의 개발자들을 만나며 무엇을 했는지를 짧게 공유해드리고자 합니다. 준비하기 저는 일단 산업기능요원 신분이기 때문에 출국이 자유롭지 않습니다. 그래서 국외여행 - [라이더스앱(iOS) 개발기](https://10.147.128.150/2573/) - 안녕하세요 라이더스개발팀 박민 입니다. 배민라이더스의 라이더분들이 배달을 수행하기 위해 사용되는 애플리케이션 '라이더스' 개발기를 적어보려 합니다. 라이더스란? 먼저 BROS(Baemin Riders Operating System)가 있습니다. *(네! Geo-fence를 신선하고 유익하게 설명해주신 [민철님의 글](http 라이더스는 BROS에서 발생하는 배달을 라이더가 수행할 수 있도록 배차 요청을 비롯해 픽업, 전달 등의 배달업무를 처리하는 애플리케이션입니다. 플랫폼의 이름과 같은 Android 버전에서의 'BROS'에서 직관적인 이름의 '라이더스'로 - [결제 시스템 성능, 부하, 스트레스 테스트](https://10.147.128.150/2572/) - 안녕하세요. 우아한형제들에서 결제시스템을 개발하고 있는 권용근입니다. 입사한 지 4개월 만에, 드디어 우아한형제들 기술 블로그에 글을 남기게 되어 감회가 새롭습니다. 저는 최근 결제 시스템의 개비를 진행하며 경험한 성능, 부하, 스트레스 테스트 경험을 작성해보려고 합니다. 시스템 개비 입사하고 보니 저에게는 결제 API 단순화, 결제 시스템 데이터베이스 분리 및 파티션 도입, 비동기 결제 시스템 개발 이라는 굵직굵직한 작업들이 - [데이터분석가로서 업무 과정과 경험, 배움을 공유합니다](https://10.147.128.150/2686/) - 1. 들어가며 안녕하세요? 우아한형제들에서 데이터분석가로 일하고 있는 송훈화입니다. 최근에 분석가로서 Product 부문에 참여해 아래 2개의 업무를 진행했습니다. AI 추천배차의 성과 측정 및 현황 분석 비마트 주문수 및 입고수 예측을 통한 비용 최적화 위 프로젝트에 참여하면서 과정과 성과, 그리고 배운 것과 개인적 경험에 대해 하나씩 공유해보고자 합니다. 혹시 누군가 비슷한 경험을 하고 있다면 제 글이 조금이나 - [DB분산처리를 위한 sharding](https://10.147.128.150/2687/) - 소개 저희는 신사업부문에서 Thiiing(띠잉)서비스를 만들고 있는 송재욱/전병두입니다. 이번에는 두 명이 함께 기술블로그를 작성했습니다. :) 서비스 오픈전에 아름다운 J곡선 그래프를 바라는 마음은 모두 같을 겁니다. 그런 서비스 성장에 있어 중요한 순간에 서버가 바틀넥이 돼서 발목을 잡으면 안되겠죠. 그래서 예측 가능한 서버 확장 방안에 대해서도 사전에 준비를 해놓길 바랐었습니다. 달리는 기차에 바퀴를 갈아끼는 것이 서비스 운영 유지보수라는 - [Thiiing(띠잉) iOS 앱 개발기](https://10.147.128.150/2688/) - 안녕하세요. 저는 영상 기반 소셜 서비스인 Thiiing(띠잉) iOS 앱을 개발하고 있는 박태현입니다. 2019년 12월 띠잉셀에 합류하여 약 3개월 동안 개발하여 신규 서비스 Thiiing(띠잉) 앱을 출시하였는데요, 프로젝트 세팅부터 출시까지 앱 출시에 필요한 모든 것을 간략하게 공유하려고 합니다. 앱 출시를 하기 위해서는 다음과 같은 항목들을 고려해야 하는데요, 프로젝트 지원 버전, 언어 아키텍처 UI 개발 라이브러리 관리 컨벤션 - [우아한형제들의 기술이사 다섯분을 소개합니다.](https://10.147.128.150/2689/) - 안녕하세요, 우아한형제들 CTO 송재하입니다. 저는 올해 4월 1일에 우아한형제들에 합류했는데요, 그 이후 몇 달간 새로운 환경에 정착하고 또 의욕과 영감을 불러일으켜 준 다섯분의 기술이사님들과 기술이사 제도에 대해 여러분들께 소개하는 것으로 우아한형제들 기술블로그와의 인연을 시작해볼까 합니다. 들어가며 본론으로 들어가기 전에, 제가 우아한형제들에 합류하게 된 얘기부터 먼저 해 보겠습니다. 제가 직전 직장을 떠나 다음 일터를 찾겠다는 결심을 - [우아한테크캠프 참가자에서 우아한개발자가 되기까지](https://10.147.128.150/2571/) - 2017 우아한테크캠프 참가자에서 우아한형제들에 입사하기까지의 경험을 공유합니다. 들어가며 안녕하세요, 2017년 12월 22일 입사 한 따끈따끈한 신입 개발자 배민플랫폼개발실 주문중계팀 전한나입니다. 2017 우아한테크캠프를 준비하면서 기술 블로그를 읽고 참고했던게 벌써 1년의 시간이 흘렀습니다. 2018 우아한테크캠프 모집기간입니다. 제 경험이 우아한테크캠프를 준비하시는 분들에게 조금이나마 도움이 되고자 블로그를 작성합니다. 우아한형제들을 만나기 전 저는 비전공자로, 우아한형제들과 인연이 깊은 코드스쿼드라는 교육기관에서 iOS - [우아한개발자가 되기 위한 우아한테크캠프](https://10.147.128.150/2570/) - 우아한(Woowa) 개발자가 되고 싶은 이들을 위한 우아한테크캠프 2기를 소개합니다. 우아한테크캠프 2017 우아한테크캠프는 대학생들의 여름 방학 기간에 맞춰서 2017년에 진행했던 교육형 인턴 과정입니다. 한 달은 정해진 커리큘럼에 따라 개발 관련 지식을 익히고, 그 다음 달은 조를 짜서 프로젝트를 진행하면서 실제 서비스를 만들면서 필요한 개발 지식을 익히는 과정을 수행하는 프로그램입니다. 작년에 진행한 우아한테크캠프 관련 글들은 아래 링크에서 - [Java, max user processes, open files](https://10.147.128.150/2569/) - 안녕하세요? 우아한 형제들에서 결제/정산 시스템을 개발하고 있는 이동욱입니다. 올해 사내 블로그 포스팅 주제로 Linux의 open files, max user processes 설정에 대해 정리하게 되었습니다. 계기는 단순했습니다. 팀에서 서버 작업하던 중 쓰레드와 관련해서 문제가 발생했는데요. 제가 진행하던 일이 아니라서 옆에서 해결하는 과정을 지켜봤습니다. 부끄럽게도 전혀 모르는 내용이 오고 갔습니다. 복기가 필요하단 생각에 정리를 진행 하던 중, 이왕 - [우아한형제들의 Developer Relations](https://10.147.128.150/3799/) - 투자가를 대상으로 한 IR(Investor Relations) 이야기가 아닌, 개발자를 대상으로 한 DR(Developer Relations) 이야기. Developer Relations Developer Relations라는 말은 다소 생소합니다. IR(Investor Relations)은 많이 들어보셨을 텐데요. IR은 투자자들을 대상으로 기업 설명 및 홍보 활동을 하여 투자 유치를 원활하게 하는 활동을 의미합니다. 우아한형제들은 IR 만큼이나, DR(Developer Relations) 활동을 중요하게 생각합니다. 개발자들을 대상으로 기업을 설명하고 홍보하여 좋은 개발자 - [Hello, Geo-fence!](https://10.147.128.150/2567/) - 안녕하세요 라이더스개발팀 박민철 입니다. BROS(Baemin Riders Operating System)에 Geo-fence를 도입한 경험을 적어보겠습니다. (BROS는 라이더를 배차하고 음식을 픽업하여 고객에게 전달하는 서비스를 지원하는 배달 플랫폼 입니다.) Geo-fence란? 'geo-fencing' 으로 불리기도 하는데, 지도위에 가상의 도형들의 영역을 말합니다. [이런식으로 그리면 혼나요] 근데 왜 필요한거죠? 기존에는 지점(관제센터)의 행정동코드 기반으로 배달 가능 여부를 판단하였습니다. 고객의 행정동코드와 지점의 배달 가능한 행정동코드를 매핑하여, - [신입개발자 교육 후기](https://10.147.128.150/2566/) - 들어가며 작년 12월 말에 입사한 후 1월부터 9주 동안 진행된 신입 개발자 교육을 마쳤습니다! 교육이 어떤 식으로 진행되었는지, 무엇을 배웠는지 짧게나마 공유해드리고자 합니다. 일정 1주차 ~ 2주차: 웹 프론트엔드 학습 3주차 ~ 6주차: 웹 백엔드 학습 7주차 ~ 9주차: 팀 프로젝트 매주 목요일 오후: AWS, DB 및 CS(Computer Science) 기초 등등 크게 위 과정으로 진행되었는데, - [SIL(Swift Intermediate Language)을 통한 Swift debugging](https://10.147.128.150/2563/) - 이 문제는 이슈 [SR-7249], commit을 통해 해결되었고, swift 4.2 브랜치에 머지 되었습니다. Episode III 몇일 전 그렇게 멀지않은 방이동, 경복궁 건물 6층 배민찬 개발팀에서, 제너릭을 가지는 구조체에 반환값이 있는 readonly 프로퍼티를 선언한 스위프트 개발자 A는 구조체를 확장하며 지난 선언을 잊고 프로퍼티를 중복해서 선언한 후, Xcode에 숨겨진 무서운 비밀을 만나는데... 두둥 Xcode 사용자 분들은 An internal - [[번역] SIL(Swift Intermediate Language), 일단 시작해보기까지](https://10.147.128.150/2564/) - 원문 Swift中間言語の、ひとまず入り口手前まで 이 글은 훌륭한 Swift, iOS 개발자이자 교육자인 Tomohiro Kumagai씨가 qiita에 올리신 글을 허가를 얻어 배포합니다. *(주) 내용은 최대한 정확하게 번역하려 했지만, 문장은 초벌 번역에서 겨우 벗어난 수준입니다. 시간 날 때마다 개선할 예정입니다. 올해(2016년 글임)의 WWDC를 방문했을 때, Swift Lab에서 Sean Callanan씨가 Swift의 작은 동작을 탐색하는 방법으로 SIL을 활용하고 있는 모습을 보여주었습니다. 뭔가 있을 - [쿠버네티스를 이용해 테스팅 환경 구현해보기](https://10.147.128.150/2562/) - 실제로 서비스에 도입해보기 전에 쿠버네티스를 유용하게 사용해 볼 수 있는 방법 중에 하나가 아닐까. 시작하며 이 글은 앞으로 우리가 관리하는 서비스(배민찬)의 아키텍처가 컨테이너 기반의 마이크로 서비스를 지향할 것으로 결정한 후 이를 위해 우선 아키텍처를 테스팅 환경으로 구현하여 실제로 서비스에 도입하기 전에 충분한 기간을 가지고 사용경험을 쌓는 것을 목적으로 쿠버네티스로 테스팅 환경을 구축하면서 겪었던 여러 상황들을 - [안정된 의존관계 원칙과 안정된 추상화 원칙에 대하여](https://10.147.128.150/2561/) - Robert C. Martin의 Agile Software Development - Principles, Patterns, and Practices 에서 SDP, SAP 를 정리해보았습니다. 이 글은 기본적으로는 Java와 Spring Framework 기반(혹은 이와 유사한 계층형 방식)으로 개발하시는 개발자분들을 대상으로 합니다. 개발을 하면서 어떨 때는 interface를 만들고 어떨때는 안 만드는지 혹시 규칙이 있는 것인 아닌지 궁금할 때가 있습니다. 특히 Controller 패키지, Service 패키지, Repository 패키지의 - [Spock으로 테스트코드를 짜보자](https://10.147.128.150/2560/) - Spock으로 테스트코드를 작성한 경험을 공유합니다. 안녕하세요! 우아한형제들 배달의민족/배민라이더스 주문시스템 팀 정용준입니다. 여러분은 어떻게 테스트 코드를 작성하고 계신가요? 일정 지키기도 힘든데 무슨 테스트코드냐 하시는 분들도 계신가요? 저도 아직 테스트코드를 작성하는 것이 습관화되어 있지 않고 익숙하지 않습니다. TDD는 먼 나라 이야기이고 무엇을 어떻게 테스트해야 하는지를 정하기조차 어렵기도 하지만 조금씩 빈도를 늘려가고 있습니다. 저는 JUnit 기반의 테스트코드를 작성해왔습니다. - [MySQL에서 'a' = 'a '가 true로 평가된다?](https://10.147.128.150/2559/) - DB 알못의 어떤 리서치 목차(이 링크는 목차를 링크합니다) 개요 안녕하세요 기계인간 이종립입니다. FC플랫폼개발팀에서 배민찬 백엔드를 개발하고 있습니다. DB알못인 저는 업무 중에 우연히 MySQL에서 'a' = 'a '의 결과가 1로 나오는 이상한 현상을 발견하게 되었습니다. 특수한 조건에서만 발생하는 버그일까요? 또는 버그가 아닌데 내가 잘못 생각하고 있는 것인지, 다른 DB에서도 같은 일이 일어나는지 궁금해졌습니다. 그래서 다른 DB도 - [내 안의 가짜를 부수고 진짜 사용자를 만나는 방법](https://10.147.128.150/2557/) - 시작하며 9월 11일, 공식적으로 배민프레시는 배민찬으로 브랜드명을 바꿨습니다. 신선 커머스에서 반찬 플랫폼으로 변화를 시작합니다. ..그리고 서비스를 만드는 사람으로서 많은 고민이 시작됐습니다. 반찬 플랫폼이란 무엇일까. 어떤 모습이어야 하고 무엇이 중요한 걸까. 반찬 가게와 반찬 플랫폼 사이에서의 포지셔닝. 반찬을 직접 제조하고 새벽 배송도 하는 서비스로서의 고민. 다른 동료들과 배민찬, 서비스에 대해 깊은 이야기를 나누고 싶었습니다. 그러나 업무 - [Presto 쿼리 실행계획 겉핥기](https://10.147.128.150/2556/) - 들어가며 우리는 여러 가지 이유로, 여러 가지 용도에 사용하기 위해 데이터를 조회합니다. 많은 경우 SQL기반의 데이터 처리 엔진에 SQL 을 사용해서 데이터를 조회하게 됩니다. 이 때, 기본적으로 문법에 맞춰서 데이터를 조회하면 데이터가 잘못 나올 일은 극히 드뭅니다. 하지만 간혹 생각과 다른 데이터가 나온다거나, 잘 돌아가는 지를 확인하고 싶은데 쿼리가 무거울 것 같아서 무조건 돌려보기 애매하다거나, - [학습에 실패한 이야기](https://10.147.128.150/2555/) - 프로그래머에게 지속적인 학습은 기본적으로 갖춰야 할 덕목 중 하나라고 생각합니다. 문제를 해결하는 방법들은 계속 발전하고 변해가며 하나를 배우면 오히려 배울 것이 늘어나는 경험을 항상 합니다. 당장 우아한형제들의 구성원을 봐도 직급이나 연차와 상관없이 아침, 점심시간을 아껴 공부하는 모습이 낯설지 않습니다. 하지만 익혀야 할 것은 무수히 많고 시간은 한정되어 있습니다. 따라서 어떤 것을 먼저 할지 우선순위를 정하고, - [신선함으로 다가온 ES6 경험](https://10.147.128.150/2554/) - 신선함으로 다가온 ES6 경험 ES6 [ECMAScript 6] 경험기 start 이번에 FC플랫폼개발팀에서 진행하는 프로젝트에서 ES6를 이용하면서 기존에 혼재되어있는 자바스크립트 파일들을 모듈별로 나누게 되었습니다. 처음 ES6 를 접했을 때 기존에 써왔던 자바스크립트와는 조금 다른 형식에 당황하기도 했지만 (앗 이게 뭐지? 신선한데...?) 신기하기도 했습니다. import export const...... 유용해 보이면서도 재밌어 보이는데...! 처음 하면서는 모르는 부분들이 많아 꽤 어렵다고 - [2020 우아한테크캠프3기 7월의 일기](https://10.147.128.150/2690/) - 안녕하세요, 우아한형제들 Developer Relations입니다. 지난 7월 1일을 시작으로 우아한테크캠프 교육이 시작되었습니다. 이 글을 통해 우아한테크캠프의 7월 생활기를 전해드리고자 합니다. 2020년 우아한테크캠프 3기 8주간의 교육은 실제 서비스를 반복적으로 만들어보는 학습을 통해 하나의 서비스를 이루는 전체 데이터의 흐름과 시스템의 구조를 파악할 수 있는 것을 목표로 하였고, 웹프론트엔드 중심으로 백엔드를 함께 배우는 8주간의 자기주도형 풀스텍 교육으로 설계되었습니다. 이번 - [우린 Git-flow를 사용하고 있어요](https://10.147.128.150/2553/) - 안녕하세요. 우아한형제들 배민프론트개발팀에서 안드로이드 앱 개발을 하고 있는 나동호입니다. 오늘은 저희 안드로이드 파트에서 사용하고 있는 Git 브랜치 전략을 소개하려고 합니다. '배달의민족 안드로이드 모바일 파트에서 이렇게 브랜치를 관리하고 있구나' 정도로 봐주시면 좋을 것 같습니다. 들어가며... 2016년 1월, Github로 소스코드를 이전하면서 Github-flow를 사용하기 시작했습니다. 그러다 2017년 6월부터 Git-flow로 브랜치 전략을 바꾸게 되었습니다. 오늘 할 이야기는 저희가 브랜치 - [코딩테스트 연기 건 사과 드립니다.](https://10.147.128.150/2552/) - 사과 드립니다. 10월 21일 오후 2시에 진행 예정이었던, 신입공채 1차 코딩테스트가 원활하게 진행되지 못하고 연기하게 된 점 사과 드립니다. 우아한형제들은 코딩테스트를 위하여 Codility라는 서비스를 이용하고 있습니다. 이번 신입공채에 굉장히 많은 분들이 지원하셨는데, 이 분들이 동시에 테스트를 진행하게 되면서 Codility 서비스가 그 부하를 감당하지 못하는 일이 발생하였습니다. Codility 쪽에 저희 쪽의 지원자 수를 알리고, 이번 테스트를 - [우아한테크캠프 인턴들의 7월의 회고](https://10.147.128.150/2691/) - 안녕하세요, 우아한형제들 Developer Relations 입니다. 지루하던 장마가 끝나고 우아한테크캠프도 어느덧 막바지에 이르렀습니다.생기넘쳤던 우리 교육생들 분들의 얼굴이 날이 갈수록 누렇게 익어가는 모습을 보며 이번 캠프도 제대로 진행되고 있구나하고 때 이르게 추수를 기다리는 농부의 마음을 헤아려봅니다 ㅎㅎㅎ 우아한테크캠프는 교육생 분들께서 느끼고 경험한 것들을 직접 글로 남겨보도록 장려하고 있는데요, 지난 7월 또한 다양한 경험을 한 우리 교육생 분들이 - [자바 직렬화, 그것이 알고싶다. 훑어보기편](https://10.147.128.150/2550/) - 자바의 직렬화 기술에 대한 대한 이야기입니다. 간단한 질문과 답변 형태로 자바 직렬화에 대한 간단한 설명과 직접 프로젝트를 진행하면서 겪은 경험에 대해 이야기해보려 합니다. 자바 직렬화가 무엇(what)인가요?? 자바 직렬화란 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술과 바이트로 변환된 데이터를 다시 객체로 변환하는 기술(역직렬화)을 아울러서 이야기합니다. - [자바 직렬화, 그것이 알고싶다. 실무편](https://10.147.128.150/2551/) - 자바의 직렬화 기술에 대한 대한 두 번째 이야기입니다. 실제 자바 직렬화를 실무에 적용해보면서 주의해야 할 부분에 대해 이야기해보려고합니다. 자바 직렬화 실제 업무에서 사용해보기 자바 직렬화는 자바 개발자 입장에서는 상당히 쉽고 빠르게 사용할 수 있도록 만든 기술입니다. JSON 또는 CSV 등 형태의 포맷을 이용하면 직렬화 또는 역직렬화시에 특정 라이브러리를 도입해야 쉽게 개발이 가능하며, 구조가 복잡하면 직접 - [배민 '앱 친구'의 스프린트 이야기](https://10.147.128.150/2549/) - 📩 다음 릴리즈를 준비할 때가 왔음을 알리는 메일이 도착했네요. 배달의민족 앱 개발자들은 주로 다음 과제와 관련된 메일을 받고 다음 앱 업데이트 준비를 시작합니다. 여러분의 한 단위 앱 업데이트를 위한 과정은 어떻게 시작되시나요? 이터레이션이라고 부르기도 하고, 스프린트라고도 칭하는 용어들을 사용하고 계신가요 :-) 배달의민족을 개발하는 팀에서는 스프린트라는 용어를 주로 사용하고 있습니다.(스크럼을 응용해서 개발 프로세스를 진행하고 있다는 의미도 - [데일리 미팅! 플래닝 포커! 회고!](https://10.147.128.150/2548/) - 안녕하세요. 저는 우아한형제들 FC플랫폼개발팀에서 서버개발을 하고 있는 이경원입니다. 오늘은 글로 배운 애자일 방법론을 도입하고 진행했던 경험담을 기록하고자 합니다. 사실 저는 애자일 방법론에 대해서 잘 알지 못하고, 제가 도입을 시도한 것도 아닙니다. 단지 스크럼 이라는 책만 한번 봤을 뿐입니다. 글로 배운 것이죠. 읽기 전 자세 단순히 애자일 방법론 경험을 공유하는 글입니다. 애자일 방법론이 무엇인지에 대한 설명은 - [실시간 서비스 경험기(배달운영시스템)](https://10.147.128.150/2547/) - 경험기 들어가기 앞서 이 글은 신기술 사용기 또는 소개가 아닌 실시간 서비스 즉 배민라이더스 BROS 1.0 을 개발 하면서 겪어왔던 다소 특별한 개발 및 운영 경험기 입니다. BROS 2.0이 나온 상황에서 1.0을 이야기 하는 것이 다소 순서가 맞지 않지만 그 때 당시 경험기를 남겨놓지 못 한 것을 이번 기회에 남겨 보고자 합니다. 용어설명 BROS 1.0 - [우아한테크캠프: 좋은 개발자가 되고 싶다면](https://10.147.128.150/2546/) - 안녕하세요, 지난 8월 31일을 끝으로 우아한테크캠프 - iOS 개발 인턴 과정을 마친 김다인입니다. 두 달동안 진행되었던 인턴십 프로그램을 통해 제가 무엇을 배웠고 경험할 수 있었는지를 공유해드리고자 합니다. 교육형 인턴십 프로그램 우아한테크캠프는 좋은 개발자가 되기 위해서 필요한 실제적인 것들을 집중적으로 배우고 경험해 볼 수 있었던, 개발자 지망생들과 주니어 개발자들에게 있어서 매우 유익한 시간이었습니다. 저는 개발자로서 실무에 - [넌 강해졌다, 돌격해!](https://10.147.128.150/2545/) - 들어가며 안녕하세요. 우아한 테크캠프 iOS 개발 인턴이었던 김준영입니다. 지난 8월 31일에 우아한 테크캠프를 마쳤습니다. 좋은 책을 다 읽은 것처럼 아쉬움과 기분좋은 여운이 남아있네요. 테크캠프에서 배운 점이 학부에서의 몇년보다 많아서 꼽기 어렵습니다만, 그래도 그 중 몇 꼭지를 꼽아 우아한 테크캠프에서 무얼 경험했고 배웠는지를 공유하고자 합니다. 우아한 테크캠프? 배달의 민족을 필두로 세상을 바꾸고 있는 우아한 형제들과 코딩교육으로 - [우아한테크캠프 - 8월의 일기](https://10.147.128.150/2544/) - 프로젝트 시작 - 플래닝, 스크럼, 개발 Iteration, Demo와 회고의 반복 유난히도 더웠던 8월. 7월에 배운 교육 과정을 바탕으로 참가자 분들이 스스로 프로젝트를 기획하고 개발하는 실습 과정을 가졌습니다. 이번 프로젝트는 나 혼자 개발이 아닌 함께 하는 개발의 의미를 찾는 과정으로 그 동안 경험하지 못했던 협업을 통해 서로 부딪히고, 조율하고, 부족한 부분을 채워가는 시간이었습니다. 기획서 작성을 시작으로 - [Mqtt Stress Test](https://10.147.128.150/2543/) - 아래의 링크의 글을 읽고 오시면 이 글을 읽는데 도움이 됩니다.(아마도?) MQTT 적용을 통한 중계시스템 개선 조만간 Mqtt를 사용하는 새로운 업주용 솔루션이 늦어도 올해안에는 출시될 예정입니다. 그동안 RESTFul API 기반의 주문정보 조회시스템은 안정적으로 잘 동작했으나 Multi Agent기반으로 확장하기에는 태생적인 한계로 몇가지 문제점을 안고 있었는데요. RESTFul API는 Connection이 유지된 상태가 아니므로 서버에서 즉시 클라이언트로 정보를 전달할 수 - [Hystrix! API Gateway를 도와줘!](https://10.147.128.150/2542/) - 들어가기 안녕하세요. 배민FRESH 서비스를 개발하고 있는 조건희입니다. 오늘은 API Gateway를 사용하면서 겪은 뼈아픈(?) 장애 사례와 해결 과정을 간단히 공유하고자 합니다. 너무 자세하게 쓰지는 않았습니다. 관련된 링크를 충분히 공유하오니 양해 부탁드립니다. 문제 상황 어느 날 저녁 평소보다 많은 트래픽이 갑자기 유입됩니다. 보통 마케팅이나 모바일 앱 푸시 일정이 공유되지만, 이날은 예고 없이 찾아왔습니다. 그림 1. 요청 수 - [개발환경을 한 방에! 쉘 스크립트의 힘](https://10.147.128.150/2541/) - 들어가며... 안녕하세요. 우아한형제들 서비스개발실 주문시스템개발팀의 라태웅입니다. 어느 개발 조직이건 새로운 사람이 들어오면 그 사람의 PC에 새롭게 개발 환경을 셋팅해야 합니다. 이 때, 저는 세 가지 경우를 경험했는데요. 문서에 정리된 개발 환경 설정 방법을 받았다. 따라했는데 안된다. 구두로 설명해주시는데 잘 모르겠다. 쉘 스크립트로 한 방에 셋팅이 된다. 1번의 문제는 문서가 노후화되고 사람이 이해하기 쉽게, 따라하기 쉽게 - [MQTT 적용을 통한 중계시스템 개선](https://10.147.128.150/2540/) - 어떤 필요에 의해서? 주문중계채널은 개별 디바이스들이 중계서버에 일정시간에 한번씩 API polling을 하는 구조로 운영되고 있습니다. 신규주문 뿐만 아니라 주문의 취소나 상태변경과 같은 정보를 전달 받기 위해 API polling을 수행합니다. 바로결제 이용 업소와 바로결제 주문건의 증가에 따라 채널별 디바이스에서 polling이 가파르게 증가하고 있습니다. 이러한 polling 횟수 증가는 대응 API에 부하를 가져와 auto-scale에 의한 instance 수 증가와 - [Elastic Beanstalk Configuration files(.ebextensions)](https://10.147.128.150/2539/) - Elastic Beanstalk 사내 서버 인프라가 거의 대부분 AWS 환경으로 넘어가면서 신규로 구축되는 많은 시스템들이 배포 및 확장, 관리등의 용이성 때문에 Elastic Beanstalk 으로 구축되고 있습니다. 제 경우에도 AWS 환경에서 신규로 구촉했던 BROS 2.0/신배라/주문지면개편 세 프로젝트 모두 Elastic Beanstalk 을 이용하여 환경을 구축했습니다. 하지만, Elastic Beanstalk이 무조건 장점만 있는 건 아닙니다. 특히나, Elastic Beanstalk 의 경우 - [인(人)턴(Turn) - 당신 인생의 전환점](https://10.147.128.150/2538/) - 우아한 테크 캠프 흔히 인턴이라고 하면 단기간 회사에서 정식 구성원이 되기 위해 실습 훈련을 밟는 일원을 말합니다. 말이 실습 훈련이지 막상 회사에 가면 짧게는 2개월, 길게는 6개월, 1년 동안 제대로 된 실습 훈련을 받지는 못합니다. 개발자라면 이는 더 더욱 힘듭니다. 개발자에게 2 개월의 하계 인턴이라는 제도는 이도저도 할 수 없는 어중간한 기간일 수 밖에 없습니다. - [Swift가 진화하는 법](https://10.147.128.150/2537/) - 누구? 안녕하세요. FC 서비스 개발팀에서 육아(샤워 전문)와 iOS 앱(배민프레시) 개발을 담당하고 있는 최광훈입니다. 발단 배민프레시 2.0.0 iOS버전을 무사히 올리고, 아기 샤워를 마치고, 밥을 먹이고, 잠을 재우고(그러나 새벽에 다시 깨었지. 30분을 울었지.), 사랑하는 부인과 함께 이유식을 만든 후, 고요함이 찾아온 금요일 저녁이었습니다. 그 동안 뒤쳐진 사회성을 끌어올리기 위해 facebook을 정주행중이었는데, 타임라인에서 김범준 이사님의 포스팅 하나를 보게 - [로그 데이터로 유저 이해하기](https://10.147.128.150/2536/) - 0. 들어가며 우아한형제들 데이터서비스팀 송훈화입니다. 제 업무는 로그를 설계/정의하고 데이터를 분석하는 것입니다. 궁극적으로, 유저가 남긴 로그로부터 유저의 경험을 추정하고 니즈를 파악해 서비스 개선에 필요한 인사이트를 제공하는 것입니다. 이를 위해 로그 설계/수집/분석에 이르는 전반적 과정에 직/간접적으로 관여하고 있으며, 입사후 4개월간 경험한 내용과 생각을 공유하고자 합니다. 1. 분석의 시작은 서비스를 이해하는 것부터 입사 직후 진행한 업무는 클라이언트 - [QR코드 속 보물찾기](https://10.147.128.150/2535/) - 시작하며 안녕하세요 배라개발팀 박민철 입니다. 배민7주년 행사 중 QR코드를 활용한 보물찾기 이벤트를 진행했던 경험을 이야기를 해보려 합니다. 보물찾기란? 지난 6월 배민7주년 행사가 있었습니다. 배민7주년 행사 컨셉은 미래와 경쟁하자 였고, 미래기술에 대한 브레인스토밍 중 QR코드를 활용하자는 의견을 토대로 보물찾기 이벤트를 제작하게 되었습니다. 행사장소 곳곳에 붙여진 QR코드를 촬영하면 (상품 || 꽝) 이미지가 나오는데, 상품이미지를 저(노예)에게 보여주면 해당 - [QA != 통합테스트](https://10.147.128.150/2534/) - 안녕하세요. 우아한형제들 품질개선팀에서 근무하고 있는 임선진입니다. 저희 팀에서는 우아한형제들 서비스와 제품에 대한 QA, QC, Testing 업무를 주로하고 있습니다. 이 글은 어찌보면 모두가 알고 있는 QA(Quality Assurance Assistant)에 대한 이야기 입니다. 왜 이런 글을 쓰게 되었나? 이 글을 팀장님도 아닌 제가 써도 되나... 많이 망설였습니다. 너무나 거국적인 주제인데다, 이미 충분히 잘 알고 있어서 이해해주시는 분도 있는데, - [좋은 동료와 함께 성장하는 기쁨](https://10.147.128.150/2533/) - 작년 10월 즈음 시작했던 토비님의 ‘토비의 스프링’ 책 스터디를 드!디!어! 끝! 마쳤습니다. 약 9개월의 시간이 걸렸으니 짧지 않은 시간이었네요. [함께해준 동료들 덕분에 스터디 끗!] 아시다시피 토비의 스프링 책은 매우 두껍습니다. 그러한 책이 2권이나 되니 첫인상으로만 보자면 혼자 완독을 하기란 쉽지 않아 보이죠. (아마 혼자 시작했다면, 중간에 포기했을 것 같습니다.) OPENNESS TO LEARNING Technology is constantly - [크롬 확장 플러그인 톺아보기](https://10.147.128.150/2707/) - 크롬 확장 플러그인 톺아보기 안녕하세요. 우아한 테크캠프 3기를 거쳐서 지난 10월에 배민선물하기팀으로 합류한 신입 꼬꼬마 프론트엔드 개발자 전수현입니다. 평소에 타입스크립트를 사용하는 프론트엔드에서 API 연동 작업을 하면 API 문서에 있는 Request, Response에 대한 인터페이스를 먼저 정의하면서 작업을 시작하게 됩니다. 문제는 이 작업이 웹 브라우저 창과 개발 IDE창 사이에서 지속적으로 복사 & 붙여넣기를 주구장창 반복하게 되기도 하고(노잼) - [똑똑, 프로젝트에 코틀린을 도입하려고 합니다.](https://10.147.128.150/2532/) - 이 글은 2017년 4월, 배민프레시에 코틀린 도입하는 과정에서 작성된 글을 바탕으로 재구성되었습니다. 시작하며 2017년 4월, 모바일 플랫폼에서 사용자 경험 극대화를 위한 여정의 첫발로 메인 개편 프로젝트를 시작했습니다. 이 프로젝트의 목표는 다음과 같습니다. 앱 사용성 향상을 위해 기대를 배신하는 UX, 어딘지 모르는 고객 위치, 느린 UI 로딩을 해결 메인 페이지의 이탈률 3% 감소, 로딩 속도를 1초로 - [선물하기 시스템의 상품 재고는 어떻게 관리되어질까?](https://10.147.128.150/2709/) - 안녕하세요. 저는 주문서비스팀의 서버개발자 강홍구입니다. 이 글에서는 배달의민족 선물하기 서비스의 상품권 재고관리를 위한 시스템 설계에 대한 경험을 공유드리고자 합니다. 들어가며 선물하기 서비스는 배달의민족 어플리케이션에서 고객분들끼리 일종의 상품권을 서로 선물하여 맛있는 음식으로 마음을 전하는 아주 뜻깊은 서비스 입니다. 저희 팀에서는 선물하기 서비스를 담당하여 개발을 진행하게 되었고, 약 6개월간의 개발기간을 거쳐 작년 10월경 저희팀에서 성심성의것 개발을 진행했던 - [이직초보 어느 개발자의 이력서 만들기](https://10.147.128.150/2531/) - 안녕하세요 저는 올해 2월부터 우아한형제들의 배라개발팀에서 일하고 있는 구인본입니다. 작년 연말에 잠시 휴식을 가진 후 1월부터 이직을 준비하면서 경험했던 것 중에 이력서를 쓰면서 생각하고 느꼈던 것들을 정리해보았습니다. 이력서는 이렇게 써야 해 저렇게 써야 해라는 것보단, 제가 저만의 이력서를 쓰면서 나름대로 시도하고 적용해본 경험을 공유해보고자 합니다. 본격 나만의 이력서 만들기 표와 줄이 빽빽한 고전적인 이력서 이직하기 - [훅으로 Git에 훅 들어가기](https://10.147.128.150/2530/) - 들어가며... 안녕하세요. 우아한형제들 CTO실 주문시스템개발팀의 라태웅입니다. 요새 Git은 어느 조직이건 개인이건 많이 사용하고 계신데요, 굉장히 많은 기능이 있죠. 이중 몰라도 큰 상관은 없지만 좀 더 편리하게 Git을 사용할 수 있도록 도와주는 기능인 Git Hook에 대한 소개드리려고 합니다. 여러분은 낚이고 계신겁니다(?) Git은 특정 상황에 특정 스크립트를 실행할 수 있도록 하는 Hook이라는 기능을 지원하고 있습니다. 따로 무언가를 - [아이튠즈커넥트의 신기능 - 자동업데이트 사용자를 대상으로 점진적출시](https://10.147.128.150/2529/) - 새로 배포하는 버전에 문제가 있을지도 몰라.. 점진적 출시(phased release)란? 점진적 출시는 2017년 6월 초에 아이튠즈커넥트 내에 새로 생긴 기능입니다. 점진적 출시에 대해 알기 위해서 우선 알아야 할 사항은, 자동 업데이트 기능입니다. 이 기능은 다운로드한 앱의 새로운 버전이 배포가 되면 자동으로 업데이트를 시켜줍니다. 설정 > iTunes 및 App Store > 업데이트 켜기 설정 앱에서 iTunes 및 - [Java Enum 활용기](https://10.147.128.150/2527/) - 안녕하세요? 우아한 형제들에서 결제/정산 시스템을 개발하고 있는 이동욱입니다. 이번 사내 블로그 포스팅 주제로 저는 Java Enum 활용 경험을 선택하였습니다. 이전에 개인 블로그에 Enum에 관해 알게 된 점들을 정리했음에도 선택한 이유는 제가 Enum을 통해 많은 도움을 얻었기 때문입니다. 상반기 팀 최대 과제인 신규 정산 플랫폼을 개발하면서 Enum이 정말 많은 문제를 해결해주고 예방해주었습니다. 그래서 새로운 주제, 신기술보다 - [레거시 코드를 파괴하는 Vim 벽돌 깨기](https://10.147.128.150/2526/) - 혼돈! 파괴! Vim! 발단: 레거시를 들여다보던 어느 날 누군가 마음속에서 속삭이더군요. 그래서 정신 나간 Vim 플러그인을 하나 만들어 보았습니다. 플러그인을 설치한 다음 코딩하다 분노가 느껴지는 타임이 도래했을 때 :VimGameCodeBreak를 입력하면 해당 코드를 스테이지 삼아 벽돌 깨기 게임이 시작됩니다. 게임으로 박살 난 코드가 원본 파일에 저장되지는 않으니 와장창 다 때려 부수면 됩니다. 플레이가 귀찮으면 볼을 떨궈도 - [우리가 부르는 시니어 개발자는 누구인가?](https://10.147.128.150/2525/) - 살기위한 고민 큰 프로젝트를 마치기 전에 저의 진로를 두고 많은 고민을 하였습니다. 개발을 한지 10여년이 지났고, 짧은 시간안에 저의 Technology Tree에서 큰 가지가 나누어 질 것이라고 생각이 들었기 때문에 이 고민은 자연스럽게 삶에 대한 고민으로 이어지고 있었습니다. 그리고 수 많은 고민중에 “나는 어떤 개발자인가?”를 스스로 묻게 되었고, 그 중에 가장 먼저 들었던 생각이 시니어 개발자라는 - [배달의민족 안드로이드 7.27.0 장애 회고](https://10.147.128.150/2524/) - 시작하며 지난 5월 23일 주소개편과 주문페이지 업데이트를 진행하였다. 기존 주소설정페이지는 외식배달과 일반업소에서 서로 다른 화면을 사용 중이었으나 이번 개편작업으로 통합하게 되었다. 통합하는 과정에서 일반업소에서도 보다 정확한 주소입력을 요구하게 되었으며 스키마도 변경되었다. 배달의민족은 주소를 기반으로 하는 서비스이기에 내부적으로는 많은 부분에서 수정작업이 이루어졌고 레거시 코드도 적지않게 변경되었다. 그 과정에서 생각하지 못한 이슈가 발생하였고 많은 유저들이 불편을 경험하게 - [배민 API GATEWAY - spring cloud zuul 적용기](https://10.147.128.150/2523/) - 서비스를 운영하고 개발하는 팀이라면, LEGACY라는 거대한 괴물이 얼마나 다루기가 힘든 일인지 동감 할 것이다. 이 괴물이 오래되면 될수록, 크면 클수록... 제가 운영하고 개발하고 있는 팀에도 7년 묵은 괴물이 살고 있습니다. 이 괴물을 한번에 팍~하고 변화시키기에는 너무나 많은 개발 비용이 듭니다. 그리고 운영은 어쩔... 그래서 저희 팀에서는 API GATEWAY를 도입하여 이 괴물을 고립시키고, 도메인 단위로 괴물의 - [[모집] 우아한테크캠프 참가자를 모집합니다.](https://10.147.128.150/2522/) - 우아한테크캠프 참가자를 모집합니다. 우아한테크캠프 이미 외부에는 우아한형제들에서 인턴을 모집하는 것으로 공고가 나가고, 몇몇 분들이 공유도 해 주신 상황인데요. 이번에 진행하는 행사의 정확한 명칭은, 우아한형제들의 인턴모집이 아니라 우아한형제들이 개최하는 우아한테크캠프이며, 이 캠프에 참가하실 분들을 모집하고 있습니다. 이번 캠프는, NHN NEXT에서 교수님으로 계셨던 김정님, 윤지수님, 정호영님 등이 운영하시는 코드스쿼드라는 회사와 같이 진행합니다. 코드스쿼드 사이틀를 방문해 보시면, 고품질 - [제2회 우아톤2020 일지](https://10.147.128.150/2710/) - 안녕하세요 우아한형제들 Developer Relations 입니다. 2020년 12월 온라인으로 진행된 우아~한 해커톤! 열정 넘쳤던 제2회 우아톤의 기록을 여러분들께 공유합니다 :) 올해 초, DR 담당자들은 제 2회 우아톤을 야심차게 계획했는데요, 코로나 바이러스 확산의 여파로 인해 진행 여부에 대해 고민이 참 많았습니다. 물론, 우아한테크세미나처럼 온라인으로 진행할 수도 있겠지만, ‘과연 오프라인으로 진행했던 지난 해커톤의 경험을 그대로 전달할 수 있을까?’라는 - [프로세스 개선이 현업에서 정착되려면](https://10.147.128.150/2521/) - 이 글은 프로젝트 프로세스의 개선에 관련된 이야기 입니다. 그리고 몇 달전 프로젝트에서 프로세스 구상하고 적용했던 경험들을 이야기하려 합니다. 만약 누군가가 우리팀이 겪은 것과 비슷한 상황에 처해 있다면 이 이야기가 조금이나마 도움이 될 것이라고 기대합니다. 그럼, 가벼운 이야기부터 시작해 보겠습니다. 어느 겨울 군부대에서 이등병이 차가운 물로 걸레를 빨고 있었습니다. 그 모습을 대대장이 우연히 보게 되었고 대대장은 - [배민 신춘문예 개발기](https://10.147.128.150/2520/) - 배민 신춘문예 개발기 인생은 멀리서 보면 희극이고 가까이서 보면 비극이다. ~ Charlie Chaplin 배민신춘문예는 매년 이맘때 진행하는 이벤트로 그 해 마케팅실의 염원을 담아 대규모로 진행하는 이벤트이다. 보통 우리 회사에서는 이벤트를 마케팅실에서 직접 정해진 템플릿을 이용해 구현하나 신춘문예같은 복잡한 형태의 이벤트는 팀(웹UI개발팀)에서 작업해주는 케이스가 있다. 배민 신춘문예 사이트: http://spring.baemin.com 애자일 아닌 애자일 이번 프로젝트는 회사에서 새로 - [OSORI 권한관리 플랫폼](https://10.147.128.150/2519/) - Osori 권한관리 플랫폼 오소리란? 인증(Authentication)과 인가(Authorization)중 Authorization부분을 담당하며 권한 관리를 쉽게 해주는 플랫폼으로 UI형태의 관리 페이지와 라이브러리를 제공함으로써 최소한의 비용으로 연동할 수 있도록 개발되었습니다. [Osori-Admin 메인화면] 탄생배경 서비스 아키텍쳐가 모놀리틱 아키텍처에서 마이크로 서비스 아키텍처 (aka. MSA)방식으로 전환되면서 기존 백오피스 어플리케이션도 물리적으로 분리가 불가피했습니다. 여기서 문제는 각 서비스별 백오피스가 떨어져 나오면서 각자 권한을 관리해야하는 이슈가 생겼습니다. - [빌링 시스템 장애, 이러지 말란 Maria~](https://10.147.128.150/2517/) - 우아한 6시 안녕하세요! 우아한형제들에서 빌링/정산 시스템 개발을 맡고 있는 이주현이라고 합니다. 저는 지난 7월 입사한 이래로 배민에서 진행하는 다양한 이벤트에 대응하며 짧지만 강한 경험들을 하고 있습니다. 그중 얼마 전 있었던 빌링 시스템 장애와 관련된 이야기를 해보려 합니다. 질문: "선임님, 우리 회사는 왜 퇴근 시간이 6시 30분인가요?" 대답: "응 그건 바로 6시 이벤트에 대응하기 위해 서지.." - [소소한 배민라이더스 BROS 2.0 오픈 이야기](https://10.147.128.150/2516/) - 용어 설명 배달의민족앱은 배달음식점을 앱을 통해 주문하는 것인데, 배민라이더스 는 그동안 배달을 하지 않던 맛집(?)을 앱으로 주문할 수 있는 서비스입니다. 앱을 주문하는 사용자의 앱을 사용하는 방법은 모두 같지만, 배민라이더스는 배달을 직접 수행합니다. BROS 1.0는 배달의민족에서 주문이 들어오면 해당 주문을 배달 센터에 연계하여 배달 라이더분들이 업소로 음식을 픽업하여 주문 고객에게 전달하게 하는 서비스입니다. 모든 배달 건을 - [좌충우돌 실전 프로젝트 개발 스토리](https://10.147.128.150/2515/) - 우아한형제들의 배민B2C개발팀에서 서비스 개발을 맡고 있는 이수홍입니다. 이번에 제가 맡게된 통합인증 프로젝트를 진행하면서 좌충우돌 겪었던 이야기를 들려 드리고 싶어서 이렇게 글을 적어봅니다. 입사 후 첫 프로젝트 입사 후 드디어 프로젝트를 맡게 되었습니다. 그것은 다름 아닌 통합인증 프로젝트! 이 프로젝트가 진행된 계기가 사내에서 "배달의 민족" 서비스뿐만 아니라 "배민프레시", "배민라이더스", "배민쿡" 등 여러 가지 서비스들이 생기고 성장함에 - [누군가에게는 빼빼로데이. 누군가에게는?](https://10.147.128.150/2514/) - 호기심 가득 11월 11일 빼빼로데이. 많은 인터넷 서비스 회사들이 빼빼로데이를 맞이하여 여러 이벤트를 준비한 것처럼, 배민 또한 이벤트를 준비했습니다. 아침 11시부터 선착순 1,111명에게 11,000원 할인쿠폰을 발급하는 이벤트. 선착순 이벤트의 특성상 짧은 시간에 과도한 부하가 걸리기 마련이고, 이 때 시스템 장애로 이어진 경우가 있다보니, 치도스 공격이라는 말까지 있었는데요. 이 기억때문인지 뽐뿌에서는 배민고시라는 말까지 나오며 이번 이벤트에 - [AWS IoT 버튼을 활용하여 차임벨 만들기](https://10.147.128.150/2513/) - 우아한형제들 사무실 입구에는 이런 안내문이 붙어 있습니다. 사원증을 깜박하고 출근한 직원들이 문을 두드리면 문 근처의 직원들이 일에 집중하기 힘들다는 것이 그 이유였는데요. 재치있고 재밌게 쓰여 있지만 결국 한줄로 요약하면 ‘문 두드리지 마세요.’인 것. 하지 말라고 하는 것보다 더 좋은 방법이 없을까를 고민하던 중 일전에 재있을 것 같아 구입해서 테스트만 잠깐 해보고 서랍에 고이 모셔둔 AWS - [Sql server 2012 / Event ID 36888 Schannel Error](https://10.147.128.150/2512/) - 2016년 10월 정기 점검 데이터서비스팀은 10월 정기점검일을 맞아 메인 서비스 DB로 운영중인 Windows Server 2012 R2, SQL Server 2012 2기를 업데이트 및 리부팅 작업을 진행하였습니다. 강력한 IO 성능을 위해 도입한 FusionIO 의 점검도 하고, Table 들의 인덱스도 손보고 각종 점검도 했습니다. 간단한 서비스 테스트를 진행한후 서비스를 오픈했지요. 그런데 갑자기 로그시스템에 에러가 조금씩 보이기 시작하고 대쉬보드가 - [배달의민족 연성체를 맞이하며](https://10.147.128.150/2511/) - 연성체 때문에 행복한 연성이 아빠가 배달의민족 연성체가 발표됐습니다 2016년 한글날을 맞아 네 번째 발표된 [배달의민족 연성체](https는 제게 좀 특별한 의미입니다. 인원이 10명도 되지 않던 시절부터 우아한형제들은 약간 특이한 행보를 해 오고 있습니다. 2012년부터는 PC용 폰트를 만들기 시작했고, 그 이듬해부터 매년 하나씩 폰트를 발표하고 있습니다. 처음에는 이렇게 많은 사랑을 받게 될 지 (저는) 정말 몰랐고, [배달의민족 - [잊을만 하면 돌아오는 정산 신병들](https://10.147.128.150/2711/) - 안녕하세요!!! 안녕하세요. 정산시스템팀 온택트 신입 개발자 김시영입니다. (입사한 지 2달이 되었지만 한 번도 출근한 적이 없습니다..) 꿈꾸던 회사에서 (방에서) 직접 글을 작성하고 있다니 믿기지가 않는데요..ㅎㅎ 하 또 왔네 안 궁금한데.. 이번 글은 파일럿 프로젝트에 대한 후기를 공유해 드리고자 글을 작성하게 되었습니다. 정산시스템 팀은 신규 입사자를 대상으로 항상 파일럿 프로젝트를 진행하고, 이후에 기술 블로그에 글을 작성하는 - [9X년생 개발자 모임 참석 후기](https://10.147.128.150/2510/) - 9X년생 개발자 모임 5회차 참석 후기입니다 :) 9X년생 개발자 모임 (9XD) 이번 9X년생 개발자 모임1은 우아한형제들에서 진행이 되어 한 번도 참여해본 적 없던 저도 참석하는 행운을 누렸습니다. 모임은 우아한형제들 키친에서 7시에 개최되는 것이었습니다. 모임 30분 전인 6시 30분경부터 기념품이 준비된 데스크를 통해 우아한형제들 키친으로 참석자분들이 입장을 시작하셨는데 한결같이 약간 설레는 표정들이었습니다. 모임 시작 한 명 두 명 - [다 때가 있다 - 우아한형제들 개발자 모집](https://10.147.128.150/2509/) - 우아한형제들에서 같이 일하고 함께 성장할 개발자분들을 모십니다. 개발자 모집 우아한형제들에서 같이 일하실 개발자들을 모집합니다. 이번 모집은 서버 개발자, 모바일 개발자, 프론트엔드 개발자, 보안 엔지니어, 네트워크 엔지니어 등 여러 직무에 걸쳐서 진행됩니다. 각 직무의 채용 공고는 우아한형제들의 채용 공고 페이지에서 보실 수 있으며, 바로 아래에도 편하게 보실 수 있도록 기재해 놓았습니다. 서버 개발자 모집 공고 펼치기 - [[공유] 소프트웨어 팀을 위한 컨플루언스 가이드](https://10.147.128.150/2508/) - 컨플루언스를 좀 더 효과적으로 활용할 수 있는 방안을 정리한 문서를 공유합니다. 컨플루언스 도입 제가 6월에 우아한형제들의 Baby Steps 라는 글을 쓸 때, Confluence(위키)를 도입한 과정에 대해서 간단히 적은 바 있습니다. 그 때 적은 글을 다시 발췌하면... 무엇부터 접근해야 할까 고민하며 살펴 보니, 회사가 바로 제가 입사하기 한 두 달 전에 Confluence와 JIRA를 도입했더군요. 하지만 Confluence는 - [우아한, WoowahanJS](https://10.147.128.150/2507/) - 사람들이 행복해하는 소프트웨어를 만드는 프로그래머가 되는 것을 목표로 살아가는 아들 바보 프로그래머. 우아한형제들에서 웹 프런트앤드 프레임워크, 서비스, 제품 등을 만들고 있습니다. 아마도, 많은 웹 프론트앤드 개발 조직은 나름의 자체 프레임워크이 있을 것입니다. 우아한형제들의 웹 프론트앤드 팀에서도 나름의 필요에 의해 자바스크립트 프레임워크를 만들어 사용하고 있습니다. 오픈소스 프레임워크인 BackboneJS 기반의 WoowahanJS를 오픈소스로 공개하며 어떤 문제를 해결하기 위해 - [Happy Code](https://10.147.128.150/2506/) - 사람들이 행복해하는 소프트웨어를 만드는 프로그래머가 되는 것을 목표로 살아가는 아들 바보 프로그래머. 우아한형제들에서 웹 프런트 앤드 프레임워크, 서비스, 제품 등을 만들고 있습니다. 우아한형제들에 입사한 후 다른 회사와 많이 다르게 느껴지는 부분은 자발적 나눔이 참 많다는 것입니다. 사내 식당인 “우아한 키친”의 운영 조직인 “밥상회” 또한 직원 자치로 운영되고 있습니다. 음식을 만들고 먹는 것을 즐기는 편이다 보니 - [쉽고 재밌는 정규식 이야기](https://10.147.128.150/2505/) - PC 주문접수 프로그램에서 개인정보 보호법을 적용하기 위해 취소된 주문의 개인정보를 숨겨야 할 필요가 생겼습니다. '앱의 주소검색 모양새를 보아하니 서버에서 두개의 필드를 받아서 처리해야겠군!' 이라고 생각한 것이 저의 첫번째 착각. 하지만 그런거 없고 주소정보는 한 필드에 저장하고 있습니다! 그러면 주문접수 앱은 어떻게 처리하고 있을까? 행정동정보를 별도로 저장하여 숨김처리할 때 대신 사용한다. 문제는? 행정동 정보가 자신이 적은 - [첫 Java 프로젝트의 생생한 후기](https://10.147.128.150/2504/) - 이번에 처음으로 Java 8 + Spring Boot + JPA 를 이용하여 프로젝트를 진행 하였는데, 그 때 느꼈던 점을 공유 하고자 합니다. 첫 자바 프로젝트 시작과 기대 저는 이전 회사에서는 Java 를 사용했었지만, Spring Framework 은 사용 하지 않았습니다. 주로 책을 보며 개념을 익혔고, 사외에서 스터디 등을 통해서 관련지식을 쌓아오고 있었습니다. 그래서 이번 프로젝트를 많은 기대를 - [좋은 퍼블리셔란 무엇일까?](https://10.147.128.150/2503/) - 지난 주 금요일에 한국인터넷전문가협회에서 주관하는 인터넷 에코 어워드 퍼블리셔 부문에서 개인공로 최우수상을 받았다. 도대체 내가 뭘 해서 상을 받았고 다른 좋은 사람도 많은데 왜 내가 받았을까에 대한 고민을 몇가지 해보다가 이 글을 쓴다. 이 글은 수상후기이기도 하며 미래에 더 공부할 사람들에 대한 이야기, 그리고 내가 앞으로 해나갈 이야기이기도 하다. 우리나라에 얼마나 많은 사람이 표준을 볼까? - [생각하라, 객체지향처럼](https://10.147.128.150/2502/) - 2년차 쪼랩이가 객체지향을 처음으로 접하고 공부를 하면서 나름대로 정리해보았습니다. 시작 인사 안녕하세요. B2B시스템개발팀 김승영입니다. 먼저, 이 글은 지난 02월에 작성되어 사내 위키에 공유되었던 글임을 미리 알려드립니다. 참고로 현재는 Biz상품개발팀에서 지내고 있습니다.ㅋㅋ 이번 글은 < 객체지향의 사실과 오해 >라는 책의 '07장. 함께 모으기' 중 커피 전문점 도메인 설계 및 구현 예제에 대한 내용을, 마치 제가 설명 - [우아한형제들의 Baby Steps](https://10.147.128.150/2501/) - 우아한형제들은,어제보다 성장함에 의미를 두고,함께 성장하는 것을 꿈꾸는 조직입니다." 블로그 2016년도 딱 반이 지난 6월 30일. 지난 반 년을 돌이켜 봅니다. 반 년 동안 어떤 일들을 했나 돌이켜 보다가 생각난 것이, 바로 우아한형제들 기술조직 블로그를 개설한 것인데요. 생각난 김에, 이 블로그를 만들 때 생각하던 것을 말씀 드릴까 합니다. 성장일기 이 블로그는 우아한형제들 기술조직의 “성장일기"입니다. 저는 작년 - [IntelliJ 의 VIM 플러그인 마개조하기](https://10.147.128.150/2500/) - 마개조 그거슨 개발자의 로망 ...이 아니라, 불편한 것을 고쳐 씁시다. IdeaVIM 의 문제점들 이 글에서 다루는 IDEA 의 VIM 플러그인인 IdeaVIM의 버전은 2015년 11월 2일에 나온 0.44 버전을 기준으로 합니다. (2016년 6월이 되었는데도 아직 다음 버전이 나오지 않았습니다) 5월 11일부터 회사에서 라이선스를 받은 IntelliJ IDEA 를 사용하고 있습니다. 한 달 정도 지났군요. 물론 IDEA 만 - [스타워즈 깨어난 포스 리뷰](https://10.147.128.150/2499/) - 우아한형제들의 CTO실 사람들이 새로운 기술이나 개발 코드만 얘기하지는 않습니다. 여행담이나 새로 산 전자 기기에 대한 얘기, 영화에 대한 감상도 많이 나눕니다. 작년 겨울, 스타워즈 깨어난 포스에 대한 관련 정보와 감상 리뷰를 사내 위키에 올렸었고, 그 글을 옮겨봅니다. 스타워즈와 개발자란 알게 모르게 개발자와 스타워즈는 여러 관계를 가지고 있습니다. 포토샵은 스타워즈의 특수효과를 담당하던 ILM에서 사용하던 그래픽 편집툴을 - [Google Apps Script 사용 이야기 (2/3)](https://10.147.128.150/2497/) - 우아한형제들은 협업 도구로 Google Apps를 사용하고 있습니다. 사내 업무를 손쉽게 자동화하기 위하여 Apps Script를 도입한 이야기를 소개합니다. 기계가 할 일을 사람이 하지 말라는 말이 있다. Google Apps의 운영 Role을 다른 사람이 가져가게 되었다. 사용자 관리의 어려움을 알고 있었기에, 내가 사용하던 스크립트를 간단하게 이용할 수 있도록 범용으로 만들어보기로 하였다. 기능은 간단하다. 1) Sheet의 - [Google Apps Script 사용 이야기 (3/3)](https://10.147.128.150/2498/) - 우아한형제들은 협업 도구로 Google Apps를 사용하고 있습니다. 사내 업무를 손쉽게 자동화하기 위하여 Apps Script를 도입한 이야기를 소개합니다. 오늘의 점심은 감자샌드위치 !!! 우리는 사내 알람 봇을 가지고 있었다. 서비스 이슈를 모니터링하고 알람을 하는 역할을 한다. Google Apps Trigger로 알람을 제작하면 서버에 부담이 가지 않기 때문에, 재미있는 알람을 만들어볼 수 있었다. [식단표를 읽어서 오늘의 식단을 - [알아두면 쓸모 있는 Swift의 기능들](https://10.147.128.150/2715/) - Swift는 C와 Objective-C와의 연동은 뛰어나지만 JS, Python 과 같은 dynamic 언어들과는 상대적으로 떨어집니다. 그 이유들로 추가되고 있는 기능들이 있습니다. KeyPath, dynamicMemberLookup 등 Swift의 dynamic 한 기능들을 살펴보고 언제 사용할 수 있을지 고찰해 보려고 합니다. 추가로 property wrapper 와 result builder 를 살펴봅니다. KeyPath - 키패θ 이름이 멋집니다. KeyPath는 값에 대한 참조가 아닌 프로퍼티에 대한 참조입니다. - [가게 배달지역 관리방식 개편 프로젝트](https://10.147.128.150/2717/) - 배달지역 관리방식 개편 (S2) 🙇🏻‍♂️ 안녕하세요. 우아한형제들에서 가게시스템을 개발하고 있는 윤찬명입니다. 2019년 말부터 2020년 상반기에 걸쳐 진행된 가게 배달지역 관리방식 개편 프로젝트(이하 'S2 프로젝트')의 마이그레이션을 진행했던 경험을 공유하고자 합니다. 배달지역? 배달의민족 서비스에 입점한 가게가 배달하고자하는 영역(지역)을 의미합니다. (설정한 배달지역 & 가게의 광고 스팟)내의 사용자에게 가게가 노출되고 주문이 발생합니다. 왜 why? 무엇이 문제인가? 자세한 내용에 들어가기에 - [검색을 위한 데이터 다루기](https://10.147.128.150/2718/) - 안녕하세요. 우아한형제들 검색개발팀 정철입니다. 배달의민족 검색시스템에서 검색에 사용되는 데이터를 적재하면서 경험했던 어려움과 해결했던 방법을 공유하고자 합니다. 검색시스템이란? 먹고 싶은 음식을 찾는 첫 단계 배달의민족에서 검색시스템은 주문하고 싶은 가게 또는 메뉴를 빠르게 찾을 수 있도록 도와주는 여러 기능을 개발하고 있습니다. 검색 기능 인기검색어 1인분, 채식 등의 테마 지면 리스팅 배달 빠른 순, 배달팁 낮은 순과 같은 - [프로모션용 웹앱 빌더, 만다오](https://10.147.128.150/2719/) - 프로모션이 날이 갈수록 많아지고 복잡해져서 과거 프로모션을 참고하거나, 지금 운영 중인 프로모션이 어떤 것이 있는지 한 번에 파악하기 어려웠는데 그 부분을 해소시켜주었어요. 추후에 만다오로 모든 프로모션 페이지를 만들게 된다면 누구든 만다오에 들어와서 이벤트 일정을 살필 수 있을 것 같아 더욱 기대가 됩니다. 이동민 (배민마케팅팀) 만다오가 있기 전에는 이벤트를 운영하는 데 시간이 많이 필요했습니다. 한정된 시간 - [우아한테크코스 한 달 생활기](https://10.147.128.150/2721/) - 안녕하세요. 테크코스교육개발팀 이원미입니다. 우아한테크코스(이하, 우테코)도 어느덧 3년 차에 접어들었습니다 : ) 새로운 기수를 맞이할 때면 언제나 설레는 것 같아요. 아참, 3기에는 커다란 변화가 생겼는데요! (언제나 변화가 일상인 우테코지만..) 지난 기수는 웹 백엔드 과정만을 운영했다면, 이번 3기에는 웹 프론트엔드 과정이 신설되어 우테코에 새로운 활력을 불어넣어 주고 있답니다. (New 바람 ~) 프로그래밍 미션과 글쓰기 미션 모두 열심히 - [제모옥은 젠킨스 조회로직 개선으로 하겠습니다. 근데 이제 비동기를 곁들인](https://10.147.128.150/2722/) - 제목의 밈은 조림요정의 휴먼강록체입니다. Intro 평화로운 2020년 9월의 어느 날... 데일리 미팅을 마치고 일감을 정리하던 저에게 한 가지 요청이 들어왔습니다. "우빈님 여기 로직이 오래 걸리면 90초 넘게 걸리고 있는데 한번 개선할 수 있을지 확인 부탁드려요." '읭 아니 대체 어떤 레거시길래 90초씩이나 걸리는거야' 라고 생각하며 코드를 열어서 확인했는데요. 개발자들에게는 흔히 있는 일이라고 하는데... 저만 겪고 있는 - [퇴사 부검](https://10.147.128.150/2723/) - 안녕하세요 (구) 배달의민족 정산시스템팀 개발자, (현) 유튜브 크리에이터 이동욱입니다. 제가 2021년 4월 19일(월) 퇴사를 합니다. 퇴사에 대한 이야기를 개인적으로 운영하는 유튜브 채널에 부검 발표를 했는데요. (배달의민족 개발자 퇴사썰 - 부검 발표 시작합니다.) 이 영상을 보시고 기술 블로그에 진심이신 분의 연락을 받고, 이렇게 글로 옮기게 되었습니다. 퇴사 소식을 알리고, 많은 분들이 이제 "남은 팀원들이 얼마나 힘들까" - [[모집] 2021우아한테크캠프 4기](https://10.147.128.150/2724/) - 우아한개발자가 되고 싶은 이들을 위한 우아한테크캠프 4기를 소개합니다. 우아한테크캠프는 여름 방학기간을 활용해 진행되는 채용 연계형 교육 프로그램입니다. 교육은 사회적 상황에 따라 온라인 혹은 온/오프라인 병행 등 안전하고 유연한 교육방식을 준비하고 있습니다. 👩🏽‍💻🧑🏽‍💻 자기주도형 프로젝트 기반 교육 🤝 우아한개발자와 함께하는 멘토링 그리고 특강이 팡팡 📍 채용연계까지 웹프론트엔드 중심으로 백엔드를 함께 배우는 자기 주도형 풀스택 과정 이번 - [우아한형제들 Developer Relations-Updated](https://10.147.128.150/4091/) - 2021년 4월 1일 만우절 거짓말같이 우아한형제들 조직도에 Developer Relations(DR 파트)가 등장합니다. (두둥!) DR 1호인 제가 입사한지 2년 하고도 3개월, DR 2호가 입사한지 만 1년 그리고 DR 3호의 입사가 한 달 남은 그 시점에서요 :) 저는 늘 우아한형제들 구성원이었지만 조직도에 내가 속한 조직명이 새롭게 등장한다는 건 또 다른 의미의 소속감을 주었습니다. 개인의 감회는 잠시 뒤로하고 ㅎㅎ - [[우아한 인터뷰] 신입사원 김용대 편](https://10.147.128.150/2495/) - 우아한형제들의 기술 블로그를 열었습니다. 이 곳에 차곡차곡 쌓여갈 글들은 기술공유와 더불어 우아한형제들의 개발부서인 CTO실 사람들의 이야기를 담을 예정입니다. 그 시작으로 최근에 입사한 신입사원 김용대님을 인터뷰했습니다. [긴장한 기색이 역력한 김용대님] Q. 입사 축하드려요! 앞으로 용대님은 CTO실에서 어떤 일을 담당하게 되나요? 이제 들어온 지 일주일 정도 되어서 인수인계를 받고 있는 중인데요. 방금도 인수인계를 받다 왔네요.(웃음) 저는 IT인프라팀에 - [우테코에서 찾은 나만의 효과적인 공부법](https://10.147.128.150/4159/) - 안녕하세요. 테크코스교육개발팀 이원미입니다. 3기 크루들의 두 번째 방학 (부럽습니다..) 을 앞두고 레벨 2를 마무리하며 작성한 글을 공유합니다 : ) 이번 글쓰기의 주제는 "우테코에서 찾은 나만의 효과적인 공부법" 입니다. 우아한테크코스에서는 정해진 답이 없는 학습 방법을 정답이라며 알려주거나, 그를 통해 크루들을 일반화 시키지 않습니다. 학습의 방향성을 간단히 제시해 줄 뿐, 어떤 학습 방법을 선택하고 자신의 것으로 만들어 - [Google Apps Script 사용 이야기 (1/3)](https://10.147.128.150/2496/) - 우아한형제들은 협업 도구로 Google Apps를 사용하고 있습니다. 사내 업무를 손쉽게 자동화하기 위하여 Apps Script를 도입한 이야기를 소개합니다. 2015년 12월 7일, Google Apps를 공식적으로 회사에 도입하게 되었다. 초기에 Google Apps를 어려워하던 분들도 있었지만, IT 회사 답게 다들 금세 적응하고 잘 활용하기 시작했다. 업무를 좀 더 편하고 매끄럽게 도와주기 위하여 Google Apps를 도입한 만큼, - [첫 회사를 우아한형제들에서 시작한 아가 개발자의 걸음마 떼기](https://10.147.128.150/5143/) - 배민주문서비스팀 신규 입사자의 파일럿 프로젝트 경험을 공유합니다. 안녕하세요! 6월 21일 배민주문서비스팀에 서버 개발자로 합류하게 된 김경준입니다. 기술 블로그의 글들을 보면서, 언젠간 사람들에게 도움이 될 수 있는 이야기를 공유해야지 꿈만 꾸던 학생이었는데 지금 우아한형제들에 합류하여 글을 적고 있다니..😭 정말 감격스러운 순간입니다. 글을 시작하기에 앞서, 어떻게 하면 도움이 되는 이야기를 담아낼 수 있을까에 대한 고민을 먼저 시작했는데요. - [SRE 팀에서 장애의 root cause를 찾고 재발방지 하는 방법](https://10.147.128.150/2700/) - 안녕하세요. 우아한형제들 시스템신뢰성개발팀에서 근무하고 있는 천명호라고 합니다. SRE팀은 우아한형제들이 제공하는 서비스가 안정적으로 운영될 수 있도록 다양한 관점에서 지원하는 역할을 합니다 최근 경험한 장애를 통해 SRE 팀이 어떻게 문제를 찾고, 재발 방지를 위한 활동을 하는지 소개해 드리려 합니다. 장애 상황 대응 AWS 내 구축된 시스템과 on premise 환경에 구축된 시스템의 API 요청에 5xx error가 증가, 사용자의 - [Todo list 만들기는 이제 그만](https://10.147.128.150/2672/) - 안녕하세요. 만화경 프론트엔드 개발자 한민호입니다. realworld.io 오픈소스에 기여한 이야기를 해보려 합니다. 프론트엔드 세계에는 Hello World만큼 친숙한 Todo list (할 일 목록) 만들기가 존재합니다. Todo list는 사람들에게 익숙한 주제일 뿐만 아니라, 스펙이 명확해 최소한의 구현만으로 라이브러리/프레임워크들 간의 장·단점을 비교·분석하기 쉽다는 점에서 Javascript 세계의 로제타 스톤으로 불리기도 합니다. 반복해서 수십개의 할 일 목록 프로젝트를 만드는 건 너무 - [가게노출 파트의 조금은 색다른 파일럿 프로젝트, 그리고 첫 업무까지의 이야기](https://10.147.128.150/2673/) - 안녕하세요, 프론트검색서비스팀 신입 개발자 김덕수입니다. 입사한지 어느덧 네 달 가까이 시간이 흘렀는데요..! 조금 시간이 지나기는 하였지만, 파일럿 프로젝트를 진행하면서 배웠던 것들과 더불어 신입 개발자가 팀에서 적응해 나가는 과정을 공유드려보고 싶어서 포스팅을 작성하게 되었습니다. 가게 노출 파트에서는 어떻게 온보딩이 진행되는지, 파일럿 프로젝트에서부터 첫 업무를 마치기까지 과정을 간단하게 소개드립니다. 팀에 당도한 것을 격하게 환영해 주셨습니다 때는 지난 - [팀 프로젝트가 나에게 남긴 것](https://10.147.128.150/2692/) - 안녕하세요. 테크코스교육개발팀 이원미입니다. 우아한테크코스(이하, 우테코) 2기도 어느덧 막바지를 향해 달려가고 있습니다. 레벨 3 기간 동안 우테코 크루들은 실제 현장을 더 밀접하게 경험하기 위해서 팀 프로젝트를 진행하였는데요. 서비스를 실제로 만들어보면서 크루들 각자 느낀 바가 달랐을 것이라 생각합니다. ☺️ 이번 글쓰기는 레벨 3 활동을 돌아보는 의미에서 “팀 프로젝트가 나에게 남긴 것”을 주제로 작성하였습니다. 각 팀들은 매주 팀 - [2020 우아한테크캠프 3기 8월의 일기](https://10.147.128.150/2693/) - 7월 1일 첫 만남을 가졌던 우아한테크캠프가 어느덧 2개월이 지나 처음보다 성장한 모습으로 마지막을 맞이하였습니다. 수업, 데모, 세미나, 팀 프로젝트 수행 등 모든 과정을 온라인으로 전환하는 고충이 있었지만, 어수선한 사회적 상황임에도 불구하고 마지막 프로젝트와 데모데이까지 성공적으로 끝마쳤습니다. 8월의 우아한테크캠프를 대표하는 키워드 들을 통해 한 달간의 교육 여정을 소개해 드리고자 합니다. 8월의 커리큘럼 힘든 시기에도 안전하게 프로젝트를 - [우아한테크캠프 인턴들의 8월의 마지막 회고](https://10.147.128.150/2694/) - 안녕하세요, 회고글을 작성하며 되돌아 본 8월은 그 어느 때보다도 교육 진행에 변수가 많았습니다. 서울/경기지역 사회적거리두기가 2.5단계로 격상됨에 따라 우아한형제들도 다시 전사 재택근무에 돌입했고, 이에 따라 온/오프라인을 병행했던 우아한테크캠프 교육 또한 8월17일을 기점으로 전체 온라인 교육으로 전환되었습니다. 교육 구상 단계에서부터 상황에 따라 언제든 전체 온라인으로 전환할 수 있도록 사전 준비는 하고 있었지만, 교육 후반부에는 더욱 긴밀한 - [우리는 불편함을 어떻게 마주하고 있는가](https://10.147.128.150/2696/) - 안녕하세요. 신사업부 띠잉셀 박제현입니다. 띠잉 서비스를 개발하면서 어떤 고민을 하며 시스템을 개선했는지, 그리고 그 고민을 해결하는 과정에서 얻은 것은 무엇이었는지 가볍게 공유하고자 합니다. 뭔가 불편하다. 띠잉 서비스는 작년 10월에 오픈했습니다. 오픈 후엔 여느 서비스들처럼 여러 기능도 개선하고 추가 개발을 진행하는데 몰두했어요. 새로운 기능 개발과 버그 수정, 백로그에 쌓인 티켓들까지 많은 일이 쏟아졌습니다. 이런 작업들은 비즈니스 - [우아한테크코스 3기 과정에 참여할 사람을 모집합니다.](https://10.147.128.150/2697/) - 우아한테크코스 3기를 모집합니다. 1기 모집 글을 쓸 때가 엊그제 같은데 벌써 3기 모집 글을 쓰네요. 2020년은 코로나19 때문에 2기 교육 과정을 운영하는데 많은 어려움이 있었는데요. 많은 어려움에도 불구하고 2기 교육 과정은 순항 중입니다. 3기 모집을 위한 전체적인 일정을 확인할 수 있는 포스터 공개합니다. 1, 2기 포스터도 좋았지만 올해 포스터는 더 좋네요. 우아한테크코스 교육이 지향하는 협업의 - [아 엑셀다운로드 개발,,, 쉽고 빠르게 하고 싶다 (feat. 엑셀 다운로드 모듈 개발기)](https://10.147.128.150/2698/) - 실제로는 적절한 이름을 가진 private method로 코드가 나누어져 있습니다. @NoArgsConstructor(access = AccessLevel.PRIVATE) public ExcelRenders { public static createCellStyle(Workbook wb, ColumnType columnType) { XSSFCellStyle cellStyle = (XSSFCellStyle) wb.createCellStyle(); // 배경색 지정 cellStyle.setFillForegroundColor(color); cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); // 정렬 cellStyle.setAlignment(HorizontalAlignment.CENTER); cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 테두리 cellStyle.setBorderTop(BorderStyle.THIN); cellStyle.setBorderBottom(BorderStyle.THIN); cellStyle.setBorderLeft(BorderStyle.THIN); cellStyle.setBorderRight(BorderStyle.THIN); } // renderAmountCell도 동일한 구조입니다! public static void renderCell(Row row, ExcelColumnInfo columnInfo, String - [정산시스템팀을 소개합니다.](https://10.147.128.150/2701/) - 1. 들어가기 전에 2. 정산이 어렵다고요? 3. 정산시스템팀은 이렇게 돌아가고 있어요 3.1. 팀은 이렇게 구성되어 있어요 3.2. 정산시스템팀에서 하는 업무는? 3.3. 우리는 이렇게 일해요 3.4. 팀 문화는 이렇답니다. 4. 마무리 1. 들어가기 전에 안녕하세요. 우아한형제들 정산시스템팀에서 기획 업무를 하고 있는 김석환이라고 합니다. 처음 우아한형제들에 대해서 알게 되었을 때, "우와 저런 회사에서 일하면 정말 일할 맛 - [독서가 내게 가져다 준 것들](https://10.147.128.150/2702/) - 안녕하세요 여러분! 배민서비스개발팀에서 백엔드 개발을 하고 있는 김다인입니다. 여러분은 책 읽는 것 좋아하시나요? ![](https 저는 어렸을 적에는 나름 좋아했던 것 같습니다만 다른 재밌는 것들을 많이 알게되서일까요, 어느샌가부터 공부를 위한 목적 이외에는 책을 펴지 않게 되었던 것 같습니다. 아마 저와 비슷한 느낌을 가지고 계신 분들이 많을 것 같아요. 그런데 그랬던 제가 우연한 계기로 다시 책을 읽게 - [내가 꿈꾸는 프로그래머로서의 삶](https://10.147.128.150/2703/) - 안녕하세요. 테크코스교육개발팀 이원미입니다. 우아한테크코스(이하, 우테코) 2기를 맞이한지 얼마 지나지 않은 것 같은데, 벌써 마무리해야 한다는 게 실감이 나지 않네요. 모두가 힘든 시기를 겪고 있는 만큼 우테코 크루들 또한 코로나 상황에서 학습하기 힘들었을 텐데, 잘 버텨주어 감사하다는 말을 전하고 싶습니다. 크루들에게 주어진 마지막 글쓰기 주제는 ‘내가 꿈꾸는 프로그래머로서의 삶’입니다. 우테코 크루들이 어떤 프로그래머가 되기를 꿈꾸고 있는지 궁금하지 - [iOS Networking and Testing](https://10.147.128.150/2704/) - Why Networking? Networking은 요즘 앱에서 거의 필수적인 요소입니다. 설치되어 있는 앱들 중에 네트워킹을 사용하지 않는 앱은 거의 없을 겁니다. API 추가가 쉽고 변경이 용이한 네트워킹 모듈을 개발하는것이 중요한 이유죠. Why Testing? 미드 보셨나요? 쉘든 쿠퍼 라는 주인공은 16살에 박사학위를 취득할 만큼 천재이면서 동시에 대단히 특이한 사람입니다. 주변에서 "Are you crazy?" 라는 말을 자주 듣습니다. - [안심번호(050) 시스템 #1 - 시스템 구축 스토리](https://10.147.128.150/2705/) - 안녕하세요. 우아한형제들 중계시스템 팀에서 안심번호(050) 시스템 개발을 담당하고 있는 김용찬이라고 합니다. 중계시스템 팀에서는 주문을 중계하는 역할 뿐만 아니라, 050 전화도 중계하고 있는데요. 새롭게 만들어가고 있는 안심번호(050) 시스템에 대해 소개해보려고 합니다. 배달의민족 안심번호(050) 시스템 배달의민족 앱에서 050 전화로 주문을 해 본 경험이 누구나 한 번쯤은 있을 텐데요. 배민앱에 있는 가게의 050 번호로 전화를 하게 되면 가게로 - [배민상품시스템팀에서 1년동안 배운 것들](https://10.147.128.150/2708/) - 안녕하세요, 배민상품시스템팀 개발자 한진욱입니다. 신규 개발자로 입사한 지 어느덧 1년이 다 되어가는데요. 1년 동안 배운 점들을 정리했습니다. 1. 비즈니스 규칙은 언제든지 변경될 수 있다. 혹시 '오픈서비스'라고 들어보셨나요? 2020년 4월 1일 사장님을 대상으로 출시한 배달의민족의 새로운 광고상품인데요. 외부 사정상 오픈서비스는 1달 만에 사라지고, 이전 상품(오픈리스트)로 빠르게 원복되었습니다. 당시 배민상품시스템팀은 원복 현장의 한복판에 있었습니다. 배민상품시스템팀은 오픈서비스, 울트라콜(정액제 - [우아한테크캠프 Pro 후기](https://10.147.128.150/2720/) - 2021년. 대한민국 소프트웨어 업계 이야기 지금까지 개발자가 이렇게 좋은 대우를 받았던 적이 있을까? 내가 개발자의 길을 걷기 시작했던 1990년대 후반에서 2000년 초반 벤처 붐이 일면서 잠깐 반짝했던 것 같다. 하루가 멀다 하고 "전 직원에게 몇 백만 원의 연봉을 인상하기로 했다.", "몇 백만 원의 복지 포인트를 지원한다.", "100% 원격 근무로 전환한다."와 같은 뉴스가 들려오고 있다. 이 ## 페이지 - [슬라이더 편집](https://10.147.128.150/) - 우아한형제들의 기술, 서비스, 비전, 가치를 들려 드립니다. - [2025-11-20](https://10.147.128.150/privacy-policy/2025-11-20/) - 개인정보 처리방침 (주)우아한형제들(이하 ‘회사’라 한다)은 개인정보보호법 등 관련 법령에 따라 이용자의 개인정보를 보호하고, 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 다음과 같이 개인정보 처리방침을 수립하여 공개합니다. 1. 개인정보의 수집·이용 및 보유 및 이용 기간 회사는 웹 페이지, 메일, 팩스, 전화 등을 통해 동의 절차를 거쳐 다음과 같이 이용자의 개인정보를 수집합니다. 처리하고 있는 개인정보는 다음의 - [2025-05-13](https://10.147.128.150/privacy-policy/2025-05-13/) - 개인정보 처리방침 (주)우아한형제들(이하 ‘회사’라 한다)은 개인정보보호법 등 관련 법령에 따라 이용자의 개인정보를 보호하고, 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 다음과 같이 개인정보 처리방침을 수립하여 공개합니다. 세부내용 1. 개인정보의 수집·이용 및 보유 및 이용 기간 회사는 웹 페이지, 메일, 팩스, 전화 등을 통해 동의 절차를 거쳐 다음과 같이 이용자의 개인정보를 수집합니다. 처리하고 있는 개인정보는 - [2025-01-09](https://10.147.128.150/privacy-policy/2025-01-09/) - 개인정보 처리방침 (주)우아한형제들(이하 ‘회사’라 한다)은 개인정보보호법 등 관련 법령에 따라 이용자의 개인정보를 보호하고, 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 다음과 같이 개인정보 처리방침을 수립하여 공개합니다. 세부내용 1. 개인정보의 수집·이용 및 보유 및 이용 기간 회사는 웹 페이지, 메일, 팩스, 전화 등을 통해 동의 절차를 거쳐 다음과 같이 이용자의 개인정보를 수집합니다. 처리하고 있는 개인정보는 - [2024-10-01](https://10.147.128.150/privacy-policy/2024-10-01/) - 개인정보 처리방침 (주)우아한형제들(이하 ‘회사’라 한다)은 개인정보보호법 등 관련 법령에 따라 이용자의 개인정보를 보호하고, 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 다음과 같이 개인정보 처리방침을 수립하여 공개합니다. 세부내용 1. 개인정보의 수집·이용 및 보유 및 이용 기간 회사는 웹 페이지, 메일, 팩스, 전화 등을 통해 동의 절차를 거쳐 다음과 같이 이용자의 개인정보를 수집합니다. 처리하고 있는 개인정보는 - [개인 정보 보호 정책](https://10.147.128.150/privacy-policy/) - 개인정보 처리방침 (주)우아한형제들(이하 ‘회사’라 한다)은 개인정보보호법 등 관련 법령에 따라 이용자의 개인정보를 보호하고, 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 다음과 같이 개인정보 처리방침을 수립하여 공개합니다. 세부내용 1. 개인정보의 수집·이용 및 보유 및 이용 기간 회사는 웹 페이지, 메일, 팩스, 전화 등을 통해 동의 절차를 거쳐 다음과 같이 이용자의 개인정보를 수집합니다. 처리하고 있는 개인정보는 - [Documentation](https://10.147.128.150/docs/) - [change](https://10.147.128.150/change/) ## 카테고리 - [APP](https://10.147.128.150/category/app/) - [AWS](https://10.147.128.150/category/aws/) - [Backend](https://10.147.128.150/category/backend/) - [Culture](https://10.147.128.150/category/culture/) - [Data](https://10.147.128.150/category/data/) - [Education](https://10.147.128.150/category/education/) - [Infra](https://10.147.128.150/category/infra/) - [Programming General](https://10.147.128.150/category/programming-general/) - [QA/Testing](https://10.147.128.150/category/qa-testing/) - [Robotics](https://10.147.128.150/category/robotics/) - [Security](https://10.147.128.150/category/security/) - [Frontend](https://10.147.128.150/category/web-frontend/) - [우아한테크세미나](https://10.147.128.150/category/woowa-tech-seminar/) - [우아한테크캠프](https://10.147.128.150/category/우아한테크캠프/) - [PM](https://10.147.128.150/category/pm/) - [NLP](https://10.147.128.150/category/nlp/) - [Deep Learning](https://10.147.128.150/category/deep-learning/) - [우아한스터디](https://10.147.128.150/category/우아한스터디/) - [MLOps](https://10.147.128.150/category/mlops/) - [AI](https://10.147.128.150/category/ai/) - [Machine Learning](https://10.147.128.150/category/machine-learning/) - [GenAI](https://10.147.128.150/category/genai/) - [Design](https://10.147.128.150/category/design/) - [FinOps](https://10.147.128.150/category/finops/) - [공지](https://10.147.128.150/category/notice/) - [우아콘](https://10.147.128.150/category/우아콘/) ## 태그 - [@Convert](https://10.147.128.150/tag/convert/) - [AMI](https://10.147.128.150/tag/ami/) - [Andorid](https://10.147.128.150/tag/andorid/) - [Android](https://10.147.128.150/tag/android/) - [Android 앱 테스트](https://10.147.128.150/tag/android-앱-테스트/) - [AOP](https://10.147.128.150/tag/aop/) - [Appium](https://10.147.128.150/tag/appium/) - [Aurora](https://10.147.128.150/tag/aurora/) - [AWS](https://10.147.128.150/tag/aws/) - [AWS RoboMaker](https://10.147.128.150/tag/aws-robomaker/) - [AWS WAF](https://10.147.128.150/tag/aws-waf/) - [AWS 보안](https://10.147.128.150/tag/aws-보안/) - [AWS보안](https://10.147.128.150/tag/aws보안/) - [cache](https://10.147.128.150/tag/cache/) - [Chrome](https://10.147.128.150/tag/chrome/) - [CI/CD](https://10.147.128.150/tag/ci-cd/) - [cloud](https://10.147.128.150/tag/cloud/) - [Cloudtrail](https://10.147.128.150/tag/cloudtrail/) - [consul](https://10.147.128.150/tag/consul/) - [Cucumber](https://10.147.128.150/tag/cucumber/) - [Dagger](https://10.147.128.150/tag/dagger/) - [database](https://10.147.128.150/tag/database/) - [DB](https://10.147.128.150/tag/db/) - [DbUnit](https://10.147.128.150/tag/dbunit/) - [Dead lock](https://10.147.128.150/tag/dead-lock/) - [Delphi](https://10.147.128.150/tag/delphi/) - [DevRel](https://10.147.128.150/tag/devrel/) - [DevOps](https://10.147.128.150/tag/devops/) - [Dilly](https://10.147.128.150/tag/dilly/) - [DLL](https://10.147.128.150/tag/dll/) - [Docker](https://10.147.128.150/tag/docker/) - [DSL](https://10.147.128.150/tag/dsl/) - [dynamodb](https://10.147.128.150/tag/dynamodb/) - [Elastic Beanstalk](https://10.147.128.150/tag/elastic-beanstalk/) - [Elasticsearch](https://10.147.128.150/tag/elasticsearch/) - [ELK](https://10.147.128.150/tag/elk/) - [feign](https://10.147.128.150/tag/feign/) - [Geo-fence](https://10.147.128.150/tag/geo-fence/) - [Git Hook](https://10.147.128.150/tag/git-hook/) - [gradle](https://10.147.128.150/tag/gradle/) - [hexagon grid](https://10.147.128.150/tag/hexagon-grid/) - [HikariCP](https://10.147.128.150/tag/hikaricp/) - [iaac](https://10.147.128.150/tag/iaac/) - [Infra](https://10.147.128.150/tag/infra/) - [Interview](https://10.147.128.150/tag/interview/) - [iOS](https://10.147.128.150/tag/ios/) - [ISMS](https://10.147.128.150/tag/isms/) - [iTunes](https://10.147.128.150/tag/itunes/) - [jacoco](https://10.147.128.150/tag/jacoco/) - [Java](https://10.147.128.150/tag/java/) - [Java 8](https://10.147.128.150/tag/java-8/) - [Java Enum](https://10.147.128.150/tag/java-enum/) - [JPA](https://10.147.128.150/tag/jpa/) - [JVM](https://10.147.128.150/tag/jvm/) - [kotlin](https://10.147.128.150/tag/kotlin/) - [Kubernetes](https://10.147.128.150/tag/kubernetes/) - [LocalStack](https://10.147.128.150/tag/localstack/) - [mandao](https://10.147.128.150/tag/mandao/) - [Microservices](https://10.147.128.150/tag/microservices/) - [Mobx](https://10.147.128.150/tag/mobx/) - [MQTT](https://10.147.128.150/tag/mqtt/) - [multi module](https://10.147.128.150/tag/multi-module/) - [MySQL](https://10.147.128.150/tag/mysql/) - [NACL](https://10.147.128.150/tag/nacl/) - [Netty](https://10.147.128.150/tag/netty/) - [Ngrinder](https://10.147.128.150/tag/ngrinder/) - [Node.js](https://10.147.128.150/tag/node-js/) - [oauth2](https://10.147.128.150/tag/oauth2/) - [온보딩](https://10.147.128.150/tag/onboarding/) - [Packer](https://10.147.128.150/tag/packer/) - [Performance Insight](https://10.147.128.150/tag/performance-insight/) - [phased release](https://10.147.128.150/tag/phased-release/) - [Pinpoint](https://10.147.128.150/tag/pinpoint/) - [Presto](https://10.147.128.150/tag/presto/) - [Querydsl](https://10.147.128.150/tag/querydsl/) - [Querydsl 4.x](https://10.147.128.150/tag/querydsl-4-x/) - [React](https://10.147.128.150/tag/react/) - [Remote Configuration Backend](https://10.147.128.150/tag/remote-configuration-backend/) - [RestAssured](https://10.147.128.150/tag/restassured/) - [Resume](https://10.147.128.150/tag/resume/) - [RoboMaker](https://10.147.128.150/tag/robomaker/) - [Rollback](https://10.147.128.150/tag/rollback/) - [ROS](https://10.147.128.150/tag/ros/) - [S2](https://10.147.128.150/tag/s2/) - [security](https://10.147.128.150/tag/security/) - [SecurityGroup](https://10.147.128.150/tag/securitygroup/) - [sharding](https://10.147.128.150/tag/sharding/) - [Spock](https://10.147.128.150/tag/spock/) - [Spring](https://10.147.128.150/tag/spring/) - [Spring Batch](https://10.147.128.150/tag/spring-batch/) - [Spring Boot](https://10.147.128.150/tag/spring-boot/) - [spring cloud](https://10.147.128.150/tag/spring-cloud/) - [Spring REST Docs](https://10.147.128.150/tag/spring-rest-docs/) - [spring-data-dynamo](https://10.147.128.150/tag/spring-data-dynamo/) - [SpringBoot](https://10.147.128.150/tag/springboot/) - [SpringBoot Batch](https://10.147.128.150/tag/springboot-batch/) - [SQL](https://10.147.128.150/tag/sql/) - [SQS](https://10.147.128.150/tag/sqs/) - [SRE](https://10.147.128.150/tag/sre/) - [Swift](https://10.147.128.150/tag/swift/) - [SwiftLin](https://10.147.128.150/tag/swiftlin/) - [techcourse](https://10.147.128.150/tag/techcourse/) - [terraform](https://10.147.128.150/tag/terraform/) - [Transaction](https://10.147.128.150/tag/transaction/) - [TypeScript](https://10.147.128.150/tag/typescript/) - [Unity](https://10.147.128.150/tag/unity/) - [VoIP](https://10.147.128.150/tag/voip/) - [Vue.js](https://10.147.128.150/tag/vue-js/) - [WAF](https://10.147.128.150/tag/waf/) - [webflux](https://10.147.128.150/tag/webflux/) - [Windows](https://10.147.128.150/tag/windows/) - [XtraBackup](https://10.147.128.150/tag/xtrabackup/) - [검색](https://10.147.128.150/tag/검색/) - [결제시스템팀](https://10.147.128.150/tag/결제시스템팀/) - [공지](https://10.147.128.150/tag/공지/) - [구글플레이](https://10.147.128.150/tag/구글플레이/) - [기술이사](https://10.147.128.150/tag/기술이사/) - [꿀팁](https://10.147.128.150/tag/꿀팁/) - [독서](https://10.147.128.150/tag/독서/) - [동일 저장소](https://10.147.128.150/tag/동일-저장소/) - [레거시](https://10.147.128.150/tag/레거시/) - [로그시스템](https://10.147.128.150/tag/로그시스템/) - [로보메이커](https://10.147.128.150/tag/로보메이커/) - [리모트컨피그](https://10.147.128.150/tag/리모트컨피그/) - [리액티브 프로그래밍](https://10.147.128.150/tag/리액티브-프로그래밍/) - [멀티모듈](https://10.147.128.150/tag/멀티모듈/) - [모니터링](https://10.147.128.150/tag/모니터링/) - [문서화](https://10.147.128.150/tag/문서화/) - [보안](https://10.147.128.150/tag/보안/) - [보안감사](https://10.147.128.150/tag/보안감사/) - [보안모니터링](https://10.147.128.150/tag/보안모니터링/) - [비동기](https://10.147.128.150/tag/비동기/) - [선착순](https://10.147.128.150/tag/선착순/) - [설정](https://10.147.128.150/tag/설정/) - [성능테스트](https://10.147.128.150/tag/성능테스트/) - [스트레스테스트](https://10.147.128.150/tag/스트레스테스트/) - [안심번호](https://10.147.128.150/tag/안심번호/) - [알람](https://10.147.128.150/tag/알람/) - [에디터](https://10.147.128.150/tag/에디터/) - [엑셀다운로드](https://10.147.128.150/tag/엑셀다운로드/) - [오로라 데이터베이스](https://10.147.128.150/tag/오로라-데이터베이스/) - [오프라인모드](https://10.147.128.150/tag/오프라인모드/) - [오피스](https://10.147.128.150/tag/오피스/) - [온보딩](https://10.147.128.150/tag/온보딩/) - [우아톤](https://10.147.128.150/tag/우아톤/) - [우아한개발자](https://10.147.128.150/tag/우아한개발자/) - [우아한복지](https://10.147.128.150/tag/우아한복지/) - [우아한테크세미나](https://10.147.128.150/tag/우아한테크세미나/) - [우아한테크캠프](https://10.147.128.150/tag/우아한테크캠프/) - [우아한테크코스](https://10.147.128.150/tag/우아한테크코스/) - [웹뷰](https://10.147.128.150/tag/웹뷰/) - [이력서](https://10.147.128.150/tag/이력서/) - [이벤트](https://10.147.128.150/tag/이벤트/) - [인터뷰](https://10.147.128.150/tag/인터뷰/) - [장애](https://10.147.128.150/tag/장애/) - [접근성](https://10.147.128.150/tag/접근성/) - [정보보호관리체계](https://10.147.128.150/tag/정보보호관리체계/) - [정산시스템](https://10.147.128.150/tag/정산시스템/) - [정책](https://10.147.128.150/tag/정책/) - [젠킨스](https://10.147.128.150/tag/젠킨스/) - [주소 시스템](https://10.147.128.150/tag/주소-시스템/) - [직렬화](https://10.147.128.150/tag/직렬화/) - [채팅](https://10.147.128.150/tag/채팅/) - [책추천](https://10.147.128.150/tag/책추천/) - [추상화](https://10.147.128.150/tag/추상화/) - [코드리뷰](https://10.147.128.150/tag/코드리뷰/) - [코드품질](https://10.147.128.150/tag/코드품질/) - [코틀린](https://10.147.128.150/tag/코틀린/) - [쿠버네티스](https://10.147.128.150/tag/쿠버네티스/) - [클라우드](https://10.147.128.150/tag/클라우드/) - [클라우드보안](https://10.147.128.150/tag/클라우드보안/) - [클린코드](https://10.147.128.150/tag/클린코드/) - [탈루비](https://10.147.128.150/tag/탈루비/) - [테스트](https://10.147.128.150/tag/테스트/) - [테스트코드](https://10.147.128.150/tag/테스트코드/) - [테크캠프프로](https://10.147.128.150/tag/테크캠프프로/) - [토이프로젝트](https://10.147.128.150/tag/토이프로젝트/) - [팀소개](https://10.147.128.150/tag/팀소개/) - [파이썬](https://10.147.128.150/tag/파이썬/) - [파일럿](https://10.147.128.150/tag/파일럿/) - [페인](https://10.147.128.150/tag/페인/) - [프로젝트](https://10.147.128.150/tag/프로젝트/) - [프론트서버](https://10.147.128.150/tag/프론트서버/) - [하이버네이트](https://10.147.128.150/tag/하이버네이트/) - [함께일하기](https://10.147.128.150/tag/함께일하기/) - [해커톤](https://10.147.128.150/tag/해커톤/) - [회고](https://10.147.128.150/tag/회고/) - [후기](https://10.147.128.150/tag/후기/) - [Ansible](https://10.147.128.150/tag/ansible/) - [배민선물하기](https://10.147.128.150/tag/배민선물하기/) - [배민주문서비스팀](https://10.147.128.150/tag/배민주문서비스팀/) - [파일럿 프로젝트](https://10.147.128.150/tag/파일럿-프로젝트/) - [우아한테크러닝](https://10.147.128.150/tag/우아한테크러닝/) - [우아한개발자공채](https://10.147.128.150/tag/우아한개발자공채/) - [크롬 익스텐션](https://10.147.128.150/tag/크롬-익스텐션/) - [피트스탑](https://10.147.128.150/tag/피트스탑/) - [배민쇼핑라이브](https://10.147.128.150/tag/배민쇼핑라이브/) - [S3](https://10.147.128.150/tag/s3/) - [디자인시스템](https://10.147.128.150/tag/디자인시스템/) - [React Query](https://10.147.128.150/tag/react-query/) - [Redux](https://10.147.128.150/tag/redux/) - [스토어](https://10.147.128.150/tag/스토어/) - [상태관리](https://10.147.128.150/tag/상태관리/) - [webpack](https://10.147.128.150/tag/webpack/) - [PostgreSQL](https://10.147.128.150/tag/postgresql/) - [DBA](https://10.147.128.150/tag/dba/) - [배민서비스개발팀](https://10.147.128.150/tag/배민서비스개발팀/) - [B마트서비스팀](https://10.147.128.150/tag/b마트서비스팀/) - [해킹방어대회](https://10.147.128.150/tag/해킹방어대회/) - [HDCON](https://10.147.128.150/tag/hdcon/) - [Jest](https://10.147.128.150/tag/jest/) - [공통시스템개발팀](https://10.147.128.150/tag/공통시스템개발팀/) - [MSA](https://10.147.128.150/tag/msa/) - [EDA](https://10.147.128.150/tag/eda/) - [정산플랫폼](https://10.147.128.150/tag/정산플랫폼/) - [모노레포](https://10.147.128.150/tag/모노레포/) - [yarn](https://10.147.128.150/tag/yarn/) - [workspace](https://10.147.128.150/tag/workspace/) - [ESLint](https://10.147.128.150/tag/eslint/) - [웹프론트엔드](https://10.147.128.150/tag/웹프론트엔드/) - [우아한스터디](https://10.147.128.150/tag/우아한스터디/) - [단위테스트](https://10.147.128.150/tag/단위테스트/) - [Test](https://10.147.128.150/tag/test/) - [PM](https://10.147.128.150/tag/pm/) - [조직문화](https://10.147.128.150/tag/조직문화/) - [운영진](https://10.147.128.150/tag/운영진/) - [웹프론트개발그룹](https://10.147.128.150/tag/웹프론트개발그룹/) - [Network](https://10.147.128.150/tag/network/) - [타입스크립트](https://10.147.128.150/tag/타입스크립트/) - [Backend](https://10.147.128.150/tag/backend/) - [UI/UX](https://10.147.128.150/tag/ui-ux/) - [UX](https://10.147.128.150/tag/ux/) - [RDS](https://10.147.128.150/tag/rds/) - [배민스토어](https://10.147.128.150/tag/배민스토어/) - [커머스](https://10.147.128.150/tag/커머스/) - [개발자원칙](https://10.147.128.150/tag/개발자원칙/) - [ChatGPT](https://10.147.128.150/tag/chatgpt/) - [AI 챗봇](https://10.147.128.150/tag/ai-챗봇/) - [Artificial Intelligence](https://10.147.128.150/tag/artificial-intelligence/) - [MLOps](https://10.147.128.150/tag/mlops/) - [Machine Learning](https://10.147.128.150/tag/machine-learning/) - [Data](https://10.147.128.150/tag/data/) - [Airflow](https://10.147.128.150/tag/airflow/) - [Git](https://10.147.128.150/tag/git/) - [AI](https://10.147.128.150/tag/ai/) - [세일즈서비스팀](https://10.147.128.150/tag/세일즈서비스팀/) - [우아콘](https://10.147.128.150/tag/우아콘/) - [우아한테크콘퍼런스](https://10.147.128.150/tag/우아한테크콘퍼런스/) - [WOOWACON](https://10.147.128.150/tag/woowacon/) - [log](https://10.147.128.150/tag/log/) - [monitoring](https://10.147.128.150/tag/monitoring/) - [observability](https://10.147.128.150/tag/observability/) - [grafana](https://10.147.128.150/tag/grafana/) - [loki](https://10.147.128.150/tag/loki/) - [metric](https://10.147.128.150/tag/metric/) - [통합테스트](https://10.147.128.150/tag/통합테스트/) - [Server](https://10.147.128.150/tag/server/) - [Frontend](https://10.147.128.150/tag/frontend/) - [웹접근성](https://10.147.128.150/tag/웹접근성/) - [프론트엔드](https://10.147.128.150/tag/프론트엔드/) - [협업](https://10.147.128.150/tag/협업/) - [GenAI](https://10.147.128.150/tag/genai/) - [생성AI](https://10.147.128.150/tag/생성ai/) - [GPT](https://10.147.128.150/tag/gpt/) - [Kafka](https://10.147.128.150/tag/kafka/) - [KafkaStreams](https://10.147.128.150/tag/kafkastreams/) - [TransactionalOutboxPattern](https://10.147.128.150/tag/transactionaloutboxpattern/) - [물류플랫폼](https://10.147.128.150/tag/물류플랫폼/) - [TMS](https://10.147.128.150/tag/tms/) - [운송관리시스템](https://10.147.128.150/tag/운송관리시스템/) - [B마트](https://10.147.128.150/tag/b마트/) - [퀵커머스](https://10.147.128.150/tag/퀵커머스/) - [EventDrivenArchitecture](https://10.147.128.150/tag/eventdrivenarchitecture/) - [EventBus](https://10.147.128.150/tag/eventbus/) - [WMS](https://10.147.128.150/tag/wms/) - [RAG](https://10.147.128.150/tag/rag/) - [Deep Learning](https://10.147.128.150/tag/deep-learning/) - [생성형AI](https://10.147.128.150/tag/생성형ai/) - [LLM](https://10.147.128.150/tag/llm/) - [Spring Statemachine](https://10.147.128.150/tag/spring-statemachine/) - [State Machine](https://10.147.128.150/tag/state-machine/) - [API 모킹](https://10.147.128.150/tag/api-모킹/) - [Design](https://10.147.128.150/tag/design/) - [기술콘퍼런스](https://10.147.128.150/tag/기술콘퍼런스/) - [추천](https://10.147.128.150/tag/추천/) - [실시간](https://10.147.128.150/tag/실시간/) - [벡터검색](https://10.147.128.150/tag/벡터검색/) - [Copilot](https://10.147.128.150/tag/copilot/) - [GitHubCopilot](https://10.147.128.150/tag/githubcopilot/) - [AI코딩](https://10.147.128.150/tag/ai코딩/) - [개발생산성](https://10.147.128.150/tag/개발생산성/) - [데이터디스커버리](https://10.147.128.150/tag/데이터디스커버리/) - [데이터관리](https://10.147.128.150/tag/데이터관리/) - [요즘우아한AI개발](https://10.147.128.150/tag/요즘우아한ai개발/) - [Sentry](https://10.147.128.150/tag/sentry/) - [figma](https://10.147.128.150/tag/figma/) - [figma-plugin](https://10.147.128.150/tag/figma-plugin/) - [Design-Ops](https://10.147.128.150/tag/design-ops/) - [OMS](https://10.147.128.150/tag/oms/) - [최적화](https://10.147.128.150/tag/최적화/) - [Redis](https://10.147.128.150/tag/redis/) - [OSRM](https://10.147.128.150/tag/osrm/) - [배차](https://10.147.128.150/tag/배차/) - [FinOps](https://10.147.128.150/tag/finops/) - [Agent](https://10.147.128.150/tag/agent/) - [에이전트](https://10.147.128.150/tag/에이전트/) - [MCP](https://10.147.128.150/tag/mcp/) - [문정힘](https://10.147.128.150/tag/문정힘/) - [Education](https://10.147.128.150/tag/education/) - [Recommendation](https://10.147.128.150/tag/recommendation/) - [Culture](https://10.147.128.150/tag/culture/)