스토리 홈

인터뷰

피드

뉴스

조회수 705

조건문을 긍정적으로!

Overview“나 혼자 프로젝트를 하니 주석은 안 달아도 무방해요” 이렇게 말하는 개발자는 그 코드를 가장 많이 보는 것도 자신이라는 사실을 잊고 있을지도 모릅니다. 구린 코드를 보고 욕했는데 3개월 전 자신이 작성한 코드란 걸 알면 그제서야 얼굴이 붉어지기 일쑤죠. 작은 습관이지만 약간의 변화만 준다면 분명 즐겁고 생산적인 개발을 할 수 있을 겁니다. 얼굴 붉어질 일도 없고요. 오늘은 그 노하우를 전해드립니다. 혼돈을 피하는 여섯 가지 코드 작성법조건문은 긍정적으로 쓰자조건문의 성능은 생각하지 말자조건 검증을 깔끔하게 하자주석은 적절하게, 적당하게 하자상수를 활용하자복잡한 코드는 풀어서 쓰자과거의 나 자신아, 넌 나에게 똥을 줬어1.조건문은 긍정적으로 쓰자”쟤가 그 아이가 아니지 않지 않나?!” 프로그램 코드를 마지막으로 실행하는 건 컴퓨터지만 코드를 작성하고 관리하는 건 결국 사람입니다. 수많은 조건문이 존재하는 프로그램에서 조건이 부정적이라면 한 번 더 생각해야 합니다. 반대로 조건문을 긍정적으로 작성하면 보다 편리하게 개발을 진행할 수 있습니다. 가능하다면 긍정적인 마인드로 조건문을 적어봅시다.<?php // 예제는 PHP로 작성 되었습니다. $title = $_POST['title']; // 공지사항 제목 if (empty($title)) {     echo '제목을 입력해주세요';    return; } // 위의 경우보다 한번 더 생각해야한다. if (!isset($title)) {     echo '제목을 입력해주세요';    return; } cf)비슷한 사례 for 증감식을 i– 처럼 적는 경우 꼭 필요한 경우가 아니라면 삼가는 것이 좋다. for로 작성 가능한 반복을 while로 구현하는 경우 for는 끝이 명확하지만 while은 언제나 불안하다. 2.조건문의 성능을 생각하지 말자간혹 조건문에 성능을 고민해 줄여보려는 개발자가 있습니다. 10개의 and 조건을 2개로 줄인다면 얼마나 이득일까요? 하지만 이것은 티도 나지 않는 적은 양입니다.1) 조건문을 압축하지 마세요. 시간이 지나면 자신의 코드가 마치 보물지도처럼 보일 수도 있습니다. 조건문을 최적화하려고 하기보다는 보기 좋고 읽기 편하게 변경합시다. 3.조건 검증을 깔끔하게 하자만약 게시물에 글을 쓰는 프로그램을 제작한다면 요청된 값들이 정상인지 확인해야 합니다. ‘게시물 제목이 있고, 글 내용이 있고, 글 분류가 정상이고, 뭐뭐 하면 등록!’이라고 작성하면 논리적인 접근으로 보이지만 코드의 상태는 그렇지 않습니다.<?php $title = $_POST['title']; // 공지사항 제목 $content = $_POST['content']; // 공지사항 내용 $category = $_POST['category']; // 공지사항 분류 if (!empty($title)) {     if (!empty($content)) {         if (!empty($category)) {             // 게시글을 등록한다.!         } else {             echo '카테고리를 선택해주세요';         }     } else {         echo '내용을 입력해주세요';     } } else {     echo '제목을 입력해주세요'; } if문 블럭이 중첩되어 가로 스크롤 압박에 시달릴 것이기 때문입니다. 또한 나중에 수정하려면 많이 고생해야 합니다. 조건 검증을 하는 코드라면 아닌 경우를 체크하는 것이 더 좋습니다. 아래와 같은 형태로 작성하는 게 깔끔하고, 유지 보수에도 도움이 됩니다. 게시물 제목이 없으면 오류 출력글 내용이 없으면 오류 출력글 분류가 정상이 아니면 오류 출력그 외 등등…<?php // 예제는 PHP로 작성 되었습니다. $title = $_POST['title']; // 공지사항 제목 $content = $_POST['content']; // 공지사항 내용 $category = $_POST['category']; // 공지사항 분류 if (empty($title)) {     echo '제목을 입력해주세요';     return;  } if (empty($content)) {     echo '내용을 입력해주세요';     return;  } if (empty($category)) {     echo '카테고리를 입력해주세요';     return;  } // 게시글을 등록한다.! 4.주석은 적절하게, 적당하게 하자주석이 많아야 좋을까요, 아니면 적어야 좋을까요? 이 논제는 여전히 개발자 사이에서 뜨거운 감자입니다. 다양한 의견이 있지만 저는 ‘적당한게 좋다’고 생각합니다. 주석이 없어서 고생한 적도 있지만, 주석이 너무 많거나 쓸모없었던 적도 겪어봤기 때문입니다. 가끔 “코드 한 줄마다 주석을 달아”라는 미친 선임도 있었고 “주석이 필요 없게 깔끔하게 짜”라고 말하는 기괴한 선임도 있었습니다. 사고의 최종 결과물인 프로그램 코드가 아무런 설명 없이 다른 사람 혹은 미래의 자신을 이해시키는 건 불가능한 일이라고 생각합니다. 다양한 테크닉과 아름다운(?) 코딩으로 주석을 줄여나갈 수는 있겠지만 꼭 필요한 곳엔 적어야 한다고 생각합니다. 4-1) 주석이 꼭 필요하다고 생각할 때 깊은 사고의 결과를 코드로 작성하였고, 다음에 왜 그렇게 작성했는지 헷갈릴 것 같을 때함정 카드가 발동되어 헤맬 것 같은 코드일 때코드가 길어져 기능의 단위별로 나눠서 보는 게 좋을 때기술된 함수나 클래스가 이름과 다르게 동작하는 코드일 때한참 디버깅 후에 허무함을 안겨준 코드일 때함수 클래스 파일에 대한 주석일 때변수가 특이성을 가지고 있거나, 타입별로 세팅되는 값일 때플러그인이나 라이브러리 사용법을 공유할 때 4-2) 주석을 줄여 나가야 한다고 생각할 때 조건문의 내용을 한글로 다시 기술하고 있을 때프로그램과 관계 없는 내용일 때변수명으로 설명이 가능한 내용을 기술하고 있을 때4-3) 주석이 잘못 되었다고 생각할 때 나만 이해할 수 있는 단어나 문장으로 기술된 주석일 때주어가 없는 주석일 때5.상수를 활용하자코드값에 따라 분기를 작성 중이라면 상수를 활용하는 게 좋습니다. ‘F’보다는 FACEBOOK_SERVICE 가 더 직관적이기 때문입니다.<?php // 예제는 PHP로 작성 되었습니다. if ($userAccountType == 'F') {     // 페이스북 유저 처리 로직 } /** 유저 구분 값 페이스북 */ define('ACCOUNT_TYPE_FACEBOOK', 'F'); // 코드는 좀 더 길어보이지만 별다른 주석 없이도 어떤 코드인지 알 수 있다. if ($userAccountType == ACCOUNT_TYPE_FACEBOOK) {     // 페이스북 유저 처리 로직 } 상수는 프로그램마다 다양한 형태로 지원되기 때문에 선언 후 참조해서 쓴다면 주석을 줄이는 데에 많은 도움이 될 것입니다.6.복잡한 코드는 풀어서 쓰자여러 가지 사고의 결정이 다시금 엮여서 또 다른 결과를 만들어야 하는 복잡한 코드입니까? 우선 서술형 문장으로 먼저 정리하십시오. 그 다음 오류가 없다면 이어서 작성하는 것이 좋습니다. 2)// 기획전이 시작 되면 세팅한 값으로 할인을 하고 // 기획전이 끝나면 원래의 할인율로 돌아오게 하는 프로그램 이다. 1. 대상 기획전을 찾는다.     * 기획전 시작일이 오늘인가? 종료일이 오늘인가? 2. 트랜잭션을 연다. 3. 대상 기획전 건수 만큼 루프를 돌며     1. 조건 체크         case 1. 시작일이 오늘이면             1. 상품 상태를 기획전 데이터로 업데이트         case 2. 종료일이 오늘인면             1. 상품 상태를 시작일 이전 히스토리 데이터로 변경     2. 상품 히스토리를 남긴다. 4. 커밋한다. 저는 사고의 결과를 주석 형태로 작성하고, 순번을 달아서 진행을 정리합니다. 다음으로 정리된 내용을 검증하고, 주석을 중간 크기로 작성해 쪼갭니다. 그 밑에 코드를 작성하면 두 마리 토끼를 잡을 수 있습니다. 중간 크기의 주석은 프로그램의 진행 단위를 나눠서 보기 편하고, 단계별로 검증할 때에도 유용합니다.<?php /***************************************************** * 1. 대상 기획전을 찾는다. *     - 기획전 시작일이 오늘인가? 종료일이 오늘인가? **************************************************** */ // 세부 로직은 생략함 $list = getPlainedPromotionList(); /*****************************************************  * 2. 트랜잭션을 연다. **************************************************** */ beginTransaction(); /*****************************************************  * 3. 대상 기획전 건수 만큼 루프를 돌며 *****************************************************/ foreach ($list as $obj) { /*****************************************************  *        case 1. 시작일이 오늘이면  *            1. 상품 상태를 기획전 데이터로 업데이트 *****************************************************/     if ($obj['startDate'] == $today) {         updateProductDistRate($obj['productNo'], $obj['distRate']);    } /*****************************************************  *        case 2. 종료일이 오늘인면  *            1. 상품 상태를 시작일 이전 히스토리 데이터로 변경  *****************************************************/     if ($obj['endDate'] == $today) {        recoveryProductFromHistory($obj['productNo']);    } /*****************************************************  *    2. 상품 히스토리를 남긴다. *****************************************************/     addProductHistory($obj['productNo']); } /*****************************************************  * 4. 커밋한다. *****************************************************/ commit(); Conclusion영화 <인터스텔라(Interstellar, 2014)>의 주인공 쿠퍼(매튜 맥커너히)가 책장 너머 다른 차원에서 과거의 자신에게 신호를 보냈던 명장면이 생각납니다. “ STAY” 그의 메시지는 분명 후회의 몸부림이었을 겁니다. 마찬가지로 당신이 조건문을 부정적으로 만들고 있다면 잠시 키보드에서 손을 떼는 게 좋습니다. 다른 차원의 자신이 어딘가에서 메시지를 보내고 있을지도 모르니까요. “STOP….” 참고 1) 1초에 수백억 번 이상 연산이 가능한 컴퓨터에선 10회와 2회의 차이가 거의 없다. 2) 동료에게 정리한 문장을 이해시킬 수 있다면 정리가 잘 되었을 확률이 높다. 글천보성 팀장 | R&D 개발2팀chunbs@brandi.co.kr브랜디, 오직 예쁜 옷만#브랜디 #개발문화 #개발팀 #업무환경 #인사이트 #경험공유
조회수 5929

[SQL 데이터분석] 증감율 구하는 간단한 방법

sql에서는 = 등호가 비교연산자로 사용됩니다.대신 := 이렇게 콜론(:)과 등호(=)를 같이 쓰면 대입연산자로 쓸 수 있어요.select @prev := users.id // @prev 라는 임시변수에 users.id 값을 넣어라. from users가입일자로 사용자수를 구해보면, 아래처럼 가입일로 group_by 를 해서 구하죠.select date(created_at) as '가입일' , count(1) as '가입자수' from users group by 1 order by 1 desc;// 가입일 | 가입자수 // --------------------------- // 2017-08-02 100 // 2017-08-01 50그럼 전일 대비 증감율을 구하려면 어떻게 할까요?select date(created_at) as '가입일' , @prev as '전일 가입자수' , (count(1) - @prev) / @prev as '증감율' , @prev := count(1) as '가입자수' from users group by 1 order by 1 desc;// 가입일 | 전일 가입자수 | 증감율 | 가입자수 // -------------------------------------------------------- // 2017-08-02 50 1.0 100 // 2017-08-01 50 0 50증감율을 계산하는 count(1) / @prev까지는 @prev 에 전일 가입자수가 저장되어 있구요.@prev := count(1) 에서 당일 가입자수로 할당이 됩니다.저는 := 이 연산자를 알기 전엔 self-join 형태로 증감율을 구했는데데이터를 가오는 속도는 := 이 연산자가 훨씬 빠른것 같습니다.다음엔 self-join 으로 증감율을 구하는 법도 한 번 올려볼께요.#티엘엑스 #TLX #개발 #개발팀 #개발자 #꿀팁 #인사이트 #조언
조회수 1494

스타트업의 HR 고민..

서비스를 런칭하면서 필요한 고민들에 대해서 계속 포스팅하는 중입니다. 지난번에는 [영업]에 대한 고민이었고, 그전에는 startup을 만들어가는 과정에 대한 전반적인 고민이었구요.. 앞으로 마케팅, 브랜딩, 재무 등등에 대한 의견을 계속해서 올릴 예정입니다.---시작---런칭을 하고 첫 출고를 해보니.. 이제 함께 할 사람들이 더 필요하다는 것을 느낀다.사실 진작부터 더 필요하였으나, 함께할 사람을 찾는데 있어 꽤나 신중하게 접근을 하고 있기 때문에 시간이 더 걸릴 것으로 생각되는데.. 또 마냥 기다릴 수 만은 없는일..!Paffem은 100억의 목표 매출을 10명의 사람들로써 만들어가겠다는 목표를 가지고 있다. (출고 시점에 도와줄 인력 제외)그 이상의 사람들이 모이면, 경험상 서로 편가르기가 생기고 일을 미루는 상황들이 어쩔 수 없이 만들어진다. 그래서 1,000억짜리 한개를 만드는 것보다는 10명이 만드는 100억짜리 비즈니스를 여러개 만드는 것이 목표다.암튼... 예전부터 생각하던, 함께할 사람들은 어떤 기준에 부합해야 하는가에 대해서 정리를 하기 시작했다. (계속 업데이트 예정)1. 본인의 영역에서 매달 한번의 blog posting!새로운 트렌드에 항상 노출되어 고민하고 그 결과를 정리해서 남겨야 한다라는 생각  블로그 하나 쓰다보면 고민을 할 수 밖에 없고, 그러면서 발전한다는 생각이다.   물론 숙제검사 따위는 없다.   2. 스스로 고민해서 일을 만들어가고 해결해나가는 역량저 오늘 일 없는데요? 라는 것은 사실 말이안된다... 모든 일에는 지금보다 발전할 가능성이 있는데 그것을 안보거나.. 혹은 못 보는 것이다.     매번 이 일을 해라 저 일을 해라라고 해줄수는 없는법.. 스스로 찾아가야 한다. 그래서 개인적으로 난 이제 사회생활을 시작한 junior를 선호하지는 않는다.   3. 눈에 보이지 않아도 열심히 하고 있다는 믿음의심의 눈초리를 두고 싶지 않다. 그렇게 하는게 서로 피곤하다는 것을 알기 때문에..   오전에 사무실에 나오지 않았다면 외부 미팅을 하거나.. 혹은 어제 너무 늦게까지 일해서 쉬는 것으로 생각할 만한 믿음을 줄 수 있는 사람이 필요하다.4. 항상 새로운 것에 관심을 갖는 성향파펨은 매일 30분~1시간 홍대 산책을 나간다. 현재 사무실이 지하라서 광합성을 해야 하는 이유도 있지만, 홍대를 구경하다 보면 새로운 것들에 계속해서 노출이 된다.   그것을 해석하고 또 파펨에 적용해볼 아이디어로 고민해 보는 것이 이런 산책의 목적이다. (물론 그냥 쇼핑할 때도 많다 ^^;;)운영상의 몇가지 사항..1. 파펨은 9:30 출근, 6:30 퇴근! 불필요한 야근은 없다!!근무시간에 일하자.. 엄한 미팅들 한다고 시간 보내고 인터넷 한다고 시간보내지 말고..   출근 ~ 퇴근 시간에 집중해서 일하면 피곤해서 더 일하고 싶어도 못한다. 쉬어야지!  퇴근하면 그냥 머리속으로만 고민하는 거다.. 내일 할일에 대한 준비도 머리로만 하고..   단, 고객과의 약속 (출고 등) 을 위해서는 야근을 하는 것으로 예외  2. 모두가 동의해야 입사 가능내가 paffem의 1호 이고, 2호인 art director는 내가 100% 동의 했기 때문에 파펨에 들어올 수 있었다. 3호는 우리 CTO님, 그렇다면 4호는 1&2&3호의 동의가 필요하고.. 10호는 1~9호 전체의 동의가 필요    맘에 안드는 사람하고 일하는 것은 굉장히 피곤한 일이다. 맘에 안들것 같으면.. 뽑을 때 부터 동의하면 안되는 것이다.     10명이 열심히 일해도 할일이 많다... 쓸데없는 감정싸움 따위 할 시간이 없다.   3. 기여했다면 보상한다.회사가 성장하는 것에 따라 급여도 단계적으로 성장하도록 할 것이다.   나만 좋으라고 하는 회사가 아니다.. 최선을 다했고 기여한 바가 있다면 그만큼의 보상이 따라야 한다. 업계 최고의 compensation 을 만들어 주겠다는 다짐을 한다.4. 보고서는 조직의 다른 구성원의 설득을 위해 작성한다.보고서 만드느라 들어가는 시간이 얼마나 아까운지는 만들어봐야 안다. 윗사람의 취향, 회사의 템플릿 등등을 맞추느라 정작 중요한 이야기에 대한 고민하는 시간은 짧아진다. 파펨에서는 10명의 구성원들을 설득하기 위한 보고서를 작성하며 max5장까지로 제한을 둘 예정. 보고서 tool은 본인이 가장 편한것으로.. ppt, photoshop, excel 등등5. 최종 의사결정은 어쩔 수 없이 CEO의 몫대표는 다른 구성원들의 고민보다는 고민의 폭이 넓을 수 밖에 없다. 구성원들은 좀 더 깊이를 가져야하지만, 대표는 전반적으로 또한 균형감을 가져야 한다. 당연히 많은 정보를 듣고, 또한 회사 전반에 대한 균형감을 가지기 때문에 최종 의사결정권은 대표가 가져야한다. 만약 그것을 설득하겠다면 4번의 보고서를 잘 만드는 것이 핵심!!#파펨 #스타트업 #창업가 #창업자 #마인드셋 #인사이트 #고민 #HR #팀빌딩
조회수 592

다들 가길래 나도 대학을 갔다

안녕하세요. 저는 대학생 4학년 2학기를 재학 중인 학생입니다! 이번에 이렇게 사연을 보내게 된 이유는 저가 이번에 곧 몇 개월 후에 졸업을 하게 되는데 졸업을 하고 나서 이제는 사회인이 되다 보니 저의 생활비를 스스로 감당해야 하는데 "만약 앞으로 이렇게 알바만 하면서 어떻게 살까, 이렇다간 진짜 굶으면서 살게 되지는 않겠지?" 하면서 계속 너무 고민하게 됩니다. 아직 저의 일에 대해서 자리가 잡혀있는 것도 아니라서 더 고민이 됩니다.- @VL4353 님의 사연OECD 국가 중 한국은 대학 진학률은 68%로 '1위'그렇다. OCECD 국가 중 가장 대학을 많이 진학하는 나라는 역시나 한국이었다. 그리고 청년실업률은 19년만래 최악인 10%라고 한다. 우리는 졸업 후 어떻게 되는 걸까? 대학은 꼭 반드시 가야만 하는 곳인 걸까?초등학교 2학년 때 시계를 읽을 줄 몰라 선생님께 혼이 났다."너는 이거 하나 못해서 나중에 대학은 어떻게 가려고 으휴.."그리고 중학교 1학년 땐 담임 선생님이 수학 선생님이셨는데, 수학을 워낙 못하는 내게 하신 말 씀이 아직도 기억이 난다. "너는 좋은 대학은 못 가겠구나 수학을 못해서, 그럼 니 인생은 불행할 거야"놀랍지만, 내가 담임 선생님께 들었던 말이다. 나는 공부를 못하는 아이 었다. 열심히 하지도 않았지만.. 그리고 나의 머릿속에 뿌리 깊게 박혔던 건, 좋은 대학교에 가야 나의 인생은 자연스럽게 풀릴 것이란 것. 그만큼 나의 어린 시절, 나와 내 주변 친구들에겐 적어도 '대학이 인생의 전부'였다. 왜 대학에 가야 하는지, 왜 공부를 해야 하는지 모르면서도 그저 대학에 가지 않으면 인생에 낙오자가 될 것만 같았다. 그냥 대학도 아닌 소위 말하는 인 서울대학에 가야만 하는 줄 알았다.대학을 가면 모든 게 끝난 줄 알았다. 대학에 가면 이것도 할 수 있고 저것도 할 수 있고, 앞으로 인생에 고비는 없는 것처럼 속아왔다. 흔히 부모님들이 실수를 범하시는 말씀,  대학만 가면, 너 하고 싶은 거 다할 수 있어. 그럼 고생 끝이야명문대에 진학하던, 지방대에 진학하던 우리는 모두 대학에 입학하자마자 앞으로 넘어야 할 더 큰 산이 있다는 것을 알게 된다. 좋은 학교를 나온다고 하여 취업이 보장되던 시대는 지났다. 그리고 좋은 직장 = 대기업 또는 공무원이라는 공식도 이제는 변하고 있다.(물론, 공무원은 안정적이란 장점이 있지만) 우리는 왜 대학교를 졸업 후 어떻게 살아야 할지 모르는 걸까? 무엇이 문제일까? 놓지 말아야 할 자기 결정권 주변에 보면 20대 후반이 되었는데도 불구하고 이런 말을 하는 친구들이 있다."엄마가, 이렇게 하라고 하시더라고..""아빠가 이 직종이 미래가 밝다고 하셔서.."물론 부모님의 인생 경험과 조언은 우리를 바르고 더 편하길로 인도해주시기 위함인걸 알고 있지만, 우린 어쩌면 너무나도 주체적이지 않게 살아온 건 아닐까 싶다. 내가 정말 하고 싶은 것이 무엇인지, 공부하고 싶은 것은 어떤 것인지 어떻게 살아가고 싶은지에 대한 자기만의 생각과 시간이 턱없이 부족했다. 나 또한 예전엔 그런 사람 중 한 명이었다. 사회적인 분위기에, 부모님의 말씀으로 당연하게 대학에 가야 한다고 믿었다. 안 가면 나는 낙오자가 되고 취업도 할 수 없고, 꿈도 꿀 수 없는 줄 알았다. 그래서 가고 싶지도 않은 대학이라는 곳에 돈을 내며 갔었어야 했다. 결국 나 스스로와 상의하고 판단하여하고 싶고 도전하고 싶은 것을 찾아 대학이 아닌 밖으로 눈을 돌렸다. 집단주의가 가장 뚜렷한 나라 한국(Collectivism)대학을 다니면서 배운 것 중 아직도 기억에 남는 수업은, 바로 '집단주의' 관련된 이야기였다.독일에서 초청 교수님이 오셨는데, 개인주의와 집단주의에 대한 예시로 덴마크 그리고 한국을 비교하신 적이 있다. 남한과 북한은 그 어느 나라에선 볼 수 없는 집단주의가 존재하며, 그것이 단기간 경제성장에 큰 영향을 끼쳤지만, 동시에 한 마디로 한국은 공산주의는 아니지만 '우리'라는 단어에 집착하며, 결속력을 중요시하고 한마디로 '남 눈치'를 가장 많이 보고 남의 신경을 많이 쓰는 나라라고 하셨다. 그래서일까? 너도 나도 대학에 가니 왠지 나도 반드시 가야만 할 것 같은 그런 기분.. 그러다 보니 사회적 분위기에 휩쓸린 건 아닌지 모르겠다.(우리 부모님도 내게 그러셨다. 그래도 전문대는 꼭 나와야 하는 게 한국 사회라고)결론은 그래서 사회 분위기를 맞춰 그렇게 살아야 한다는 말도 아니고, 반대하여 마이웨이를 무조건 걸어가란 소리도 아니다. 사는데 정답이 없듯이 감히 누가 누구에게 조언을 할 수 있을까? 다만 같은 고민을 하고 걱정을 했던 사람으로서 경험을 나눠줄 수 있을 뿐. 어쨌든, 저질러진 일이다. 이미 되돌릴 수 없는 것이 시간이다. 앞으로의 미래에 대한 걱정보다 오늘을 먼저 열심히 살아보는 건 어떨까. 오늘이 버거울 때가 매 순간이겠지만, 결국 어쩔 수 없이 우리가 마주쳐야 할 현실이다. 그저 현실을, 상황을 탓만 하며 또는 미래에 대한 고민만 하며 시간을 보낼 순 없다. 같은 고민을 하며 살아왔고 살고 있지만 사실, 정말 뭐라도 하면 굶어 죽을 일은 없다는 것을 알았다. 비록 내가 원했던 영위 로운 삶 또는 원하던 물질적인 욕구는 채울 수는 없을지언정 말이다. 사실, 미래에 대한 해답은 그 누구도 대답해줄 수는 없다. 현실과 타협하라는 말도, 그저 어쩔 수 없으니 수긍하고 살라는 말은 아니다. 하지만 지금 우리가 처해있는 상황과 우리가 살고 있는 지금의 이 사회를 바꿀 수는 없음도 알았으면 좋겠다.(사실 그저, 고민을 하는 누군가의 이야기를 들어주고 공감만 해줄 수 있다는 점에서 씁쓸한 현실을 다시 한번 마주한다)"괜찮을 거야! 다 잘될 거야" 라는 위로보단, 어쩌면 냉철한 현실을 말해주는 누군가도 필요하다고 생각하기에, 현실을 마주하고 자기 결정권을 가지고, 어떻게 살아가고 싶은지 부모님의 결정 또는 사회가 바라는 내가 아닌, 진정 앞으로 무엇을 하고 싶은지 할 수 있는지를 다시 한번 차차 생각하고 실행하는 시간을 가지길 바라며, 대학을 가지 않아도, 대학을 졸업한 후 그리고 하고 싶은 일을 하며 행복하게 그리고 굶어 죽을 일 없는 사회가 되었으면 좋겠다.누구에게나 사연은 있다.당신의 사연, 고민을 함께 나누는 공간 스푼 라디오입니다.사연에 채택되신 스푼 유저분들께 스푼 라디오 공식 굿즈를 선물로 보내드립니다.여러분의 이야기를 듣고 싶습니다. 스푼 라디오에 사연을 보내주세요.사연에 채택되신 분들께 소정의 선물을 보내드립니다.자세한 사항은 event@mykoon.com으로 문의 바랍니다.
조회수 1988

공대 석졸생(석사 졸업생)의 인생 3막 1장: 스타트업 입사기

안녕하세요 "사운들리"입니다 :) 오늘은 기존 포스팅에 비해 조금은 덜 전문적이고, 조금은 더 개인적인 이야기를 해볼까 합니다. 이번 포스팅을 맡게 된 필자는 최근 공학 석사를 마치고 사운들리에 조인하였는데요. 이번 포스트에서는 그러한 결단을 내리게 된 계기와 사운들리에서 일하게 되면서 느낀 여러 가지 생각들을 정리해보려 합니다. 이 글을 접하시는 분들 중에서 스타트업에 관심이 있는 학부생, 또는 대학원생들에게 하나의 경험 사례로 읽힐 수 있다면 좋을 것 같습니다!인생 2막 먼저 간단히 필자의 소개를 해보려 합니다. 크게 고등학교 시절까지를 1막이라고 한다면, 대학 입학부터가 2막이라고 할 수 있겠습니다. 아래는 간략히 제 인생 2막을 요약한 내용입니다.1. 공대생, 그 흔한 남자 저는 국내 모 대학교에서 학사와 석사로 전기공학을 전공한 공대생 남자입니다. 학부 4학년 초까지 다른 많은 공대생들처럼 전공 위주로 강좌를 들었고, 큰 고민 없이 막연히 ‘그래, 대학원을 가야지'라는 생각을 가지고 있었습니다. 학부 시절 가장 잘한 일은 전공과 무관한 음악 동아리 활동을 열심히 했다는 것을 꼽을 수 있는데요. 동아리 활동은 평생 그 자체로도 큰 추억 자산으로 남으니까요 :) 반면 학부 시절을 떠올렸을 때 가장 후회되는 일은, 당시 직업적으로 관심있는 분야에 대해서 더 적극적으로 알아보려고 하지 않았다는 것입니다. 요새는 좀 더 적극적으로 저학년 때부터 (취직이 힘들어지는 사회 구조 때문이든, 좀 더 적극적인 세대가 출현해서든) 다양한 대회 및 인턴 기회를 활용하는 학생들이 많은데 안타깝게도 학부생 때의 저는 그렇지 못했습니다 ㅠㅠ 결국 황금같은 대학 생활을 (전문적으로 음악을 할 계획이 아님에도) 아름다운 음악 활동으로만 채워가며, 막상 제 인생을 결정 지을 소중한 경험의 기회들을 날려버리고 말았습니다.2. 어학연수에서 알을 깨고 상당수의 공대생들과 비슷하게 큰 고민 없이 한 길을 가고 있던 제 생각을 근본부터 뒤흔든 것은 1년 남짓의 어학 연수 경험입니다. 우연한 계기로 4학년 1학기를 마치고 영국으로 어학 연수의 길을 오르게 된 필자는, 약 10개월의 시간 동안 유학 생활을 하면서 자기의 꿈을 펼치기 위해 거침없이 도전하는 세계각국의 친구들을 만나게 됩니다. 그 때 당시 23살이었던 저보다도 훨씬 어린 친구들이 타지에서 홀로 치열하게 꿈을 위해 고군분투하는 모습을 보며, 아래와 같은 몇 가지 큰 물음을 마주하게 되었습니다.나는 공학이 정말 재미있고 미치도록 배우고 싶어서 선택하였는가? 내가 이 진로를 선택하는 이유가, 이 일이 정말 하고 싶은 일이기 때문일까, 아니면 남들이 - 친구들이, 친지들이, 부모님이 - 보기에 그럴싸해보이고 안정적인 일이기 때문일까? 이 물음들 앞에서 제가 마주했던 가장 큰 절망감은, 아무 생각없이 이 일을 최소 십 몇년동안 열정 없이 하게될 거라는 두려움이었습니다. 그제서야 정신이 번쩍 들더군요. 내가 정말 하고 싶은 일이 무엇인 지 고민해야겠다는 생각이 들었습니다. 설사 다시 이 길로 돌아 오게되더라도, 최소한 내가 이 일을 하고 싶은 이유, 이 일에서 얻게 될 보람이 무엇인 지 알아내고 그것을 받아들일 수 있어야겠다라는 생각 말이죠. 어학 연수를 갔다온 이후로 반 년이면 바로 졸업을 할 수 있었지만, 1년의 시간을 더 심사숙고하고 나서야 최종적으로 대학원 진로를 결정지었습니다. 만약 이러한 고민의 시간이 없었다면, 대학원 공부가 힘들 때마다 저는 혼자 스트레스에 가득 차 있었을 것입니다. 그 누구도 대학원에 가라고 시킨 적도 없는데 막상 내가 가고 싶어서 간 것도 아닌, 아주 묘하고 이상한 딜레마에 빠져 괴로워했겠죠! 최소한 저는 제가 선택한 길이기에 그 누구의 탓도 하지 않을 준비가 되어 있었습니다.3. 뜻밖의 여정: 대학원에서 마주친 스타트업 이제 제 인생 3막으로 인도하게 될 스타트업과의 인연은, 조금은 얄궂게도, 굳은 결심을 하고 들어간 대학원에서 마주하게 됩니다. 대학원에서 통신 전공을 하며 2년 동안 기술 과제를 하게 된 회사가 바로 사운들리였고, 자연스레 스타트업에 대한 관심도 높아지게 되었습니다. 음파를 이용한 기술에 흥미를 느끼고 과제를 지원하여 시작하게 되었지만, 점차 일을 함께 진행하면서 기존의 정립된 회사와는 다른 스타트업의 매력에 빠지게 되었습니다. 결국 2년의 공동 연구를 인연으로 사운들리에 조인하게 되었는데요. 아래에 그 조인하게 된 동기와 느낀점을 간단히 적어 보았습니다.스타트업으로 유려하게 다이빙1. 유연한 체계에서 직접 이정표를 세우고 함께 성장<그림1> 2015년 구글 캠퍼스 런던 교환 프로그램 참가 필자가 스타트업에서 가장 매력적으로 느꼈던 부분은 사업 아이템을 구상하고 발전시켜 제품으로 연결짓는 일련의 과정 전체를 팀원 전체가 모두 공유한다는 것입니다. 회사의 문화를 구축하고 직접 체계를 만드는 것이 마냥 쉬운 일은 아니지만, 팀원들의 공감대를 토대로 하나 하나 벽돌을 쌓아나간다는 측면에서 보람차고 즐거운 일이라고 생각됩니다. 대기업 등 이미 체계가 잡힌 회사에 다니는 친구들과 회사 생활 이야기를 하다보면 사내 문화가 가장 핫한 이슈로 떠오르게 되는데요. 사운들리에서는 매일 아침 대표 이사부터 연구직 막내인 필자까지 모든 팀원들이 모여 제품 이슈를 논의하고, 사업적인 아이디어도 함께 고민하고 공유하는 것이 일상인 반면, 상당수의 기업에서는 모든 사업 이슈가 분업화 되어 진행되고 논의 단계도 직급에 따라 계층화되어 있습니다. 회사의 규모차 등에 의한 당연한 결과이고 각자의 장단이 있는 부분이겠지만, 저는 스타트업의 수평적인 문화가 더 크게 끌렸던 것 같습니다 :)2. ‘이상형의 나’와의 간극을 좁혀가는 길 사실 스타트업으로 뛰어든 것 자체가 제 스스로에게 내민 큰 도전장과도 같습니다. 사운들리에 조인하기 위해 얻은 과제들 - 스스로 납득시키는 일, 부모님을 설득하는 일 등 - 을 해결하고, 회사에서 매일 이슈가 발생했을 때 팀원들에게 배우고 해결해나가는 것 하나 하나가 늘 필자에게 새로운 도전을 안겨줍니다. 스타트업은 늘 사람이 부족한 반면 일이 넘쳐 나는 특성상 팀원들의 능동적이고 적극적인 해결 능력이 요구됩니다. 저는 이러한 도전을 통해서 기존에 싫어했던 제 모습을 없애고, 늘 되고 싶어했던 이상형의 모습으로 채워나가고 싶었습니다.기존의 나 - 본인이 하고 싶은 것 잘 모름, 모르는데 굳이 찾으려 하지도 않음, 내 인생의 중요한 결정은 하기 싫어서 미루거나 타인의 말 들음, 일 미루기 좋아함, 꾸역꾸역 막판에는 뭐든 해서 막장까진 안가고 어중간하게 또 살아감, 적당히 적당히 이상형의 나 - 내가 하고 싶은 일이 무엇인 지 찾아 나감, 무엇이든 주도적으로 함, 목표지향적으로 일함, 실패를 두려워 하지 않음, 일을 벌이면 완결지음, 할 일을 미루지 않음, 일도 노는 것도 확실하게, Work hard play hard<그림2> 2015년 구글 캠퍼스 교환 프로그램 참가3. 일당백이어야만해 사운들리에 입사한 후 가장 많이 느낀 것은 제 스스로의 부족함이었습니다. 모두가 합심하여 성장해야하는 스타트업에서 '경력이 없으니 좀만 봐주세요 ㅠ' 할 여유 따윈 없는 것 같습니다! 제 몫은 그 누구도 아닌 제 스스로 해야하고, 그 몫 이상을 해야 제품이 발전할 수 있다는 생각이 절실히 들었습니다. 부족한 만큼 일과 더불어 공부에 투자해야 할 시간도 많이 필요하지만, 그만큼 제품과 함께 제 실력도 성장시킬 수 있으리라 생각됩니다 :)마치며 이번 글은 사운들리의 핵심 꿀팁들을 기대하셨던 분들에게는 조금은 아쉬운 포스팅이었을 수도 있을 것 같습니다. 아직 모든 것이 새로운 사회 초년생의 일기와도 같은 이 포스팅에 당황하셨겠지만, 저와 비슷한 길을 걷고 있을 분들에게 조금이나마 경험담을 들려드리고 싶었습니다. 사운들리와 함께 제 자신도 큰 폭으로 성장시키리라 다짐하며 이번 글을 마치고자 합니다.감사합니다!#사운들리 #입사후기 #석사 #석사졸업 #스타트업 #스타트업입사 #스타트업합류
조회수 1098

팀원들에게 보내는 편지- 5가지를 꼭 부탁드립니다.

2017년에 저는 여러분을 만나게 되어 매우 행복했고 이 팀에 감사해하는 해를 보냈던 것 같습니다. 그리고 여러분들도 서로 동료들로부터 소중한 인연이라고 생각하며 좋은 팀웍을 위해 많은 노력을 했던 것도 지켜보았습니다. 2018년에는 더욱 단단하고 똑똑한 팀이 되어야지 전쟁에서 승리할 수 있을 것입니다. 많은 타업종들이 시장에 정착하기 위한 과정에서 기존의 전통적인 업체들로부터 많은 공격을 받았습니다. 이베이도 기존 유통 업체들로부터 공격을 받았고 우리가 잘 알고 있는 사례로서 에어비엔비와 우버가 그렇습니다. 우리의 성장은 이런 공격으로부터 타격이 본격화 될 수도 있을 것을 예상해야합니다. 이미 그런 공격들이 전통 업체들로부터 진행되고 있죠.그래서 제가 당부드리는 이 다섯가지들은 우리가 전쟁에서 이기기위한 마인드셋이 될 것이라고 생각합니다. 꼭 기억해주시고 공감해주셨으면 하는 마음에서 편지를 드립니다. 우리가 더욱 단단하게 똘똘 뭉쳐 스마트하게 움직이기 위한 마인드셋입니다.1. 상상할 수도 없는 대단히 높은 꿈이번 해에 제가 가장 고민했던 부분은 꿈에 대해서였습니다. 내가 꾸고 있는 꿈의 크기가 어떤 지에 따라서 업무의 퍼포먼스에 정말 큰 영향을 미친다는 것을 알게 되었습니다. 큰 꿈과 목표를 꾸게 된다면 우리는 우리가 풀고자 하는 문제에 대해서 더 깊은 사고를 할 수 있고 창의적으로 문제를 해결해나갈 수 있을 것입니다. 그 큰 무엇인가를 이루기 위해서는 이전과는 굉장히 다른 방식으로 접근해야하고 다른 사람들이 보지 못한 가장 본질적인 부분이 무엇인지 꿰뚫어야하기 때문입니다. 당장 1월달에 입양 100건을 해야한다고 생각해봅시다. 2~3배 더 좋은 아이디어가 아닌 10배, 100배 더 좋은 아이디어와 액션 플랜이 있어야할 것입니다. 그리고 그만큼 노력도 훨씬 더 많이 해야될 거구요. 이번 기회에 내가 인생을 이루고자 하는 궁극적인 꿈과 목표를 생각해보시고 그것을 회사의 꿈과 교집합을 만들어주셨으면 좋곘습니다. 회사는 그 꿈을 도울 것입니다. 그리고 그 거대한 꿈을 절대 타협하지 마시고 본인의 퍼포먼스로 전환시켜보셨으면 좋겠습니다. 물론 뜬구름 잡는 것은 안됩니다. 늘 현실 감각은 유지해야됩니다. 단 현실 감각있고 꿈이 작은 것보단 꿈이 크고 현실 감각이 없는 편이 낫습니다. 미켈란젤로가 말했듯이 말입니다. "우리 모두의 가장 큰 위험은 우리의 목표가 너무 높아 그것을 놓치는 것이 아니라 너무 낮아 그 목표를 달성해 버리는 것이다." 우리 회사가 어디까지 커질 수 있을까요?2.압도적인 퍼포먼스를 증명하여 대체불가능한 인재가 되는 것저 또한 회사 내에서 대표라는 자리에 있지만 저는 이름만 대표일 뿐 그냥 팀원입니다. 그렇기 때문에 어떻게 저 또한 회사를 총괄하는 '팀원'으로서 퍼포먼스를 증명하고 꼭 페오펫에 필요한 인재가 되는지를 끊임없이 증명하려고 합니다. 아직 많이 부족하며 늘상 배우고 있습니다. 하지만 우리는 더 이상 배우는 것에 스타트업의 의의를 두기에는 정말 중요한 스테이지에 있습니다. 이제 배워서는 안됩니다. 정말 빠르게 의사결정을 하며 좋은 의사결정을 많이 해나가야됩니다. 각자 영역에서 [가설-검증] 데이터셋을 아주 빠르게/반복을 해야됩니다. 이를 통해 각자 역할에서 대체불가능한 역할을 보여주시고 회사에 당당하게 요청해주시면 회사측에서 이 부분과 관련해서 심도있게 얘기를 하고 기여에 대한 보상을 인정할 것입니다.3. 동료들의 꿈을 서로 돕고 그의 삶을 진심으로 응원해주는 이타심을 갖는 것우리는 강아지를 입양하고 싶어하는 사람들이 반복적으로 겪고 있는 고충을 해결합니다. 반려견과 꿈같은 15년의 생활을 위해 우리는 그들의 꿈을 돕습니다. 그들이 평생 강아지와 함께 행복하는 것에만 집중할 수 있도록 우리는 멤버십이라는 제도를 만들어 그들의 삶을 응원합니다. 하지만 우리는 고객 이전에 동료로부터 이 이타심이 출발해야지만 고객에게까지 잘 전달될 수 있습니다. 나는 내 옆에 있는 동료의 삶에 얼마나 관심이 있고 그/그녀의 꿈을 얼마나 응원해주고 싶은지, 얼마나 응원하고 있는지, 어떻게 도울 수 있는지에 대해서 좀 더 많은 관심들이 생겼으면 좋겠습니다. 이런 마음가짐은 우리가 일을 할 때에도 서로의 생각을 맞다고 주장하는 토론이 아닌 서로의 생각을 도와주고 결국 우리 회사가 풀고자하는 문제를 더욱 창의적으로 해결하는 방식인 협업을 추구하게 될 것입니다.4. 낙관적인 세계관을 가지는 것은 이미 절반은 성공한 것우리는 항상 상황이 더 나아질 수 있다는 것을 믿으며 그것을 현실화하는데에만 온 에너지를 쏟아도 모자를 것입니다. 롤로코스터인 상황은 모든 스타트업들이 겪게 되는 진리입니다. 다만 그 악화되는 상황은 아주 일시적인 현상일 뿐이며 결국 그것에 동요하지 않고 앞으로 계속 더 나아가는 것만이 최선일 것입니다. 긍정적인 상황은 언제나 앞으로 더 나아고자하는 자에게 주어집니다. 낙관적인 세계관은 안될 것도 되게 하는 마법입니다. 어떤 상황에서도 희망을 가진다는 것은 절반은 성공한 것입니다. 우리는 매일 매일 더 긍정적인 상황을 만들어나가고 있습니다.5. 후회없이 인생에 모든 것을 쥐어짜 당면해있는 가장 큰 목표에 몰입하는 것 - "딥워크"우리가 당면해있는 가장 큰 목표는 "입양"에서 접점을 (길목) 완벽히 선점하는 것입니다. 이 선점 뒤에는 우리는 굉장히 많은 것들을 할 수 있을 것입니다. 다른 업체들이 하지 못했던 "이커머스의 새로운 경험"을 만들어낼 수 있을 것입니다. 그러기 위해서 우리는 입양에 굉장히 굉장히 집중하고 몰입해야됩니다. 이 몰입이라는 것은 정말로 사실 어려운 일입니다. 인간의 집중력은 굉장히 짧기 때문이기도 하며 사람에 따라서 환경적인 면이나 일에 우선 순위를 잘 설정하지 못하기 때문입니다. 우리는 그럼에도 여기에 집중해서 반드시 이번 해에 숫자로 증명해야할 것입니다. 인생에 모든 것을 쥐어짜 입양에 집중하는 팀이 되었으면 좋겠습니다. 마지막 "딥워크"라는 책에서 좋은 글 귀 하나를 인용하며 글을 마치겠습니다.딥 워크 습관을 기르려면 시간을 존중해야 한다는 깨달음이다. 그 첫 단계는 다음과 같은 조언을 따르는 것이다. 분 단위까지 무엇을 할지 미리 정하라. 장담하건대 산만한 대중을 떠나 집중하는 소수의 대열에 합류하는 이는 인생을 바꾸는 경험이 될 것이다.평일 늦게까지, 주말에도 고생해주시는 여러분들에 감사함과 경의를 표합니다. 우리는 정말로 잘하고 있습니다. 하지만 우리의 목표는 좋은 회사가 되는 것이 아닙니다. 위대한 회사가 되는 것이며 업계의 획을 긋고 산업을 바꾸는 일을 해야합니다. 한명씩 돌아가며 감기 걸렸던 한 해인데 내년부터는 건강을 가장 먼저 챙깁시다. 감사합니다.#페오펫 #peopet #아이디어기업 #기업문화 #목표 #비전 #각오
조회수 1946

시간을 줄여주는 CodeStar 사용 팁

편집자 주: 함께 보면 좋아요!애플리케이션 개발부터 배포까지, AWS CodeStarOverview: 작성 환경AWS CodeStar를 사용하면 애플리케이션의 서버, 언어 , 형상관리, 배포, 빌드까지 한꺼번에 관리할 수 있습니다. AWS를 사용하는 개발자라면 꼭 필요한 도구이기도 합니다. 이번 글에서는 CodeStar를 초기 설정할 때의 도움이 될 내용들을 소개하겠습니다.-서비스: AWS CodeStar-템플릿: Python Webservice, AWS Lambda목차파라미터 바인딩람다 환경변수 설정람다 레이어 설정xray 모니터링 설정람다 함수명 설정Global 섹션로컬 개발환경에서의 SAM 실행CodeStar 프로젝트 생성 후CodeStar로 프로젝트를 생성하면 소스코드와 배포를 위한 Code 시리즈 리소스들이 함께 만들어집니다. CodeCommit, CodeBuild, CodePipeline 등이 있습니다. 우선 기본으로 구축된 파이프라인부터 살펴보겠습니다.CodeCommit 리포지토리의 마스터 브랜치 코드를 변경하면 CodeBuild와 CloudFormaton 서비스를 통해 빌드, 테스트, 배포를 진행할 수 있게 설정되어 있습니다. 생성된 리포지토리의 template.yml 파일을 이용하면 프로젝트 리소스도 관리할 수 있는데, 특히 template.yml을 통해 CloudFormation으로 관리하는 리소스까지도 관리가 가능합니다.기본으로 생성된 template.yml 파일을 자세히 살펴보겠습니다.AWSTemplateFormatVersion: 2010-09-09 Transform: - AWS::Serverless-2016-10-31 - AWS::CodeStar Parameters: ProjectId: Type: String Description: CodeStar projectId used to associate new resources to team members CodeDeployRole: Type: String Description: IAM role to allow AWS CodeDeploy to manage deployment of AWS Lambda functions Stage: Type: String Description: The name for a project pipeline stage, such as Staging or Prod, for which resources are provisioned and deployed. Default: '' Globals: Function: AutoPublishAlias: live DeploymentPreference: Enabled: true Type: Canary10Percent5Minutes Role: !Ref CodeDeployRole Resources: HelloWorld: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: python3.7 Role: Fn::GetAtt: - LambdaExecutionRole - Arn Events: GetEvent: Type: Api Properties: Path: / Method: get PostEvent: Type: Api Properties: Path: / Method: post LambdaExecutionRole: Description: Creating service role in IAM for AWS Lambda Type: AWS::IAM::Role Properties: RoleName: !Sub 'CodeStar-${ProjectId}-Execution${Stage}' AssumeRolePolicyDocument: Statement: - Effect: Allow Principal: Service: [lambda.amazonaws.com] Action: sts:AssumeRole Path: / ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole PermissionsBoundary: !Sub 'arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/CodeStar_${ProjectId}_PermissionsBoundary' 파라미터 바인딩Parameters 섹션에서는 ProjectId, CodeDeployRole, Stage 등 템플릿에서 사용할 파라미터를 지정할 수 있습니다. yml 파일 안에서는 ${ProjectId} 와 같이 사용할 수 있고, CodePipeline 환경에서 파라미터를 전달할 수 있습니다.CodePipeline → Deploy → GenerateChangeSet → Advanced → Parameter overrides람다 환경변수 설정람다 함수에서 사용할 환경변수를 설정할 수 있습니다. 아래와 같이 람다 환경변수 TZ(timezone)를 지정하면 실행 환경의 표준 시간대 설정이 가능합니다.Resources: HelloWorld: Type: AWS::Serverless::Function Properties: Environment: Variables: TZ: 'Asia/Seoul' 람다 레이어 설정람다 레이어를 적용하면 패키지 관리가 훨씬 편리해집니다. 함수의 패키지 크기가 3MB를 넘지 않으면 콘솔에서 코드를 직접 확인 및 수정할 수 있습니다. 람다 레이어는 zip 파일로 관리되고, /opt 폴더에 압축 해제되며 생성됩니다.람다는 250MB의 제한이 있습니다. 만약 레이어를 사용해 분리하더라도 람다함수패키지와 람다 레이어의 합으로 걸려있으므로 크기 제약에서 벗어날 수는 없습니다.Resources: HelloWorld: Type: AWS::Serverless::Function Properties: Layers: - arn:aws:lambda:{region}:{id}:layer:{layer-name}:{version} xray 모니터링 설정Tracing Property를 이용하면 람다 함수의 Enable active tracing 설정을 할 수 있습니다. CloudFormation 템플릿 메뉴얼엔 TracingConfig로 안내하고 있어도 빌드에 실패하여 확인해보니 SAM 템플릿의 AWS::Serverless::Function 의 스펙에선 Tracing으로 안내되고 있는 걸 볼 수 있었습니다.Resources: HelloWorld: Type: AWS::Serverless::Function Properties: Tracing: Active 람다 함수명 설정람다 함수는 기본적으로 아래와 같은 이름을 부여합니다.awscodestar-{brandi-test(프로젝트명)}-lambda-{HelloWorld(template함수ID)}-{NZ6YXLZ8XD0O(RANDOM_ID)}만약 함수 간의 호출이 필요할 때는 아래와 같이 함수 이름의 지정도 가능합니다.Resources: HelloWorld: Type: AWS::Serverless::Function Properties: FunctionName: !Sub '${ProjectId}-HelloWorld-${Stage}' Global 섹션Global 섹션을 이용하면 리소스마다 동일하게 적용할 항목들을 관리할 수 있습니다.Globals: Function: Runtime: python3.6 Environment: Variables: TZ: 'Asia/Seoul' VpcConfig: SubnetIds: - subnet-a1111111 - subnet-b2222222 SecurityGroupIds: - sg-c2222222 로컬 개발환경에서의 SAM 실행API Gateway 환경 실행sam local start-api 람다 함수 직접 실행echo ‘{}’ | sam local invoke —parameter-values=‘ParameterKey=ProjectId,ParameterValue=brandi-test’ HelloWorld Conclusion지금까지 CodeStar 초기 설정에 도움이 될 내용들을 살펴봤습니다. 강력한 기능들과 함께 업무를 진행한다면 조금이라도 더 나은 개발 환경을 구축할 수 있을 거라 생각합니다.글이상근 실장 | R&D DO실leesg@brandi.co.kr브랜디, 오직 예쁜 옷만
조회수 1389

아마존 유럽 - VAT 시리즈 (5)

★08★Q. 대한민국에 설립한 사업자인데 왜 타 국가의 부가세 (VAT)를 내야 하나요A: VAT 법이 적용되는 국가에 판매하려고 하시는 것이기 때문입니다.이 질문을 하시는 분들은 미국에서 주로 판매활동을 하는 분들이 많습니다. 미국에서 판매활동을 해도 대한민국 사업자 (미국에서 바라보는 기준에서는 해외 사업자)이면 납세 의무가 없기 때문입니다. 미국에서는 크게 봐서 두 가지 세금이 있는데, (1) Sales Tax - 소비세와 (2) Income Tax - 소득세입니다. 소비세는 주 (State) 단위로 청구하며, 제품을 구매하는 고객이 지불하는 게 통상적이고, 주마다 소비세는 다른데 어떤 요율이 적용되는지는 수취 주소의 '주'입니다. 좀 더 나아가서 설명드리자면, '주' 단위로 청구하는 게 소비세이기 때문에 VAT 법을 적용하는 국가들처럼 화물이 도착국에 도착하는 순간에 '수입 부가세'라는 개념이 적용되지 않습니다. 한국을 포함한 VAT 법이 적용되는 국가는 화물이 도착국에 입국하는 시점에 '국가'단위로 수입 부가세부터 적용하게 되는데, 미국의 경우에는 제품이 국가에 반입되는 시점에서는 관세만 발생하고, 제품이 판매되는 시점에서만 소비세가 발생하며, 그 소비세를 청구하는 것도 제품을 수령하는 주소의 '주'에서 정해주는 요율에 따라 발생합니다. 그리고 두 번째로 소득세는 한국의 기준으로 따지자면 개인사업자는 종합소득세, 법인의 경우 법인세를 생각하시면 간단합니다. 만약 외국 회사라고 한다면 당연히 소득세/법인세를 납부하지 않습니다 (법인이 타 국가에 설립된 것인데 법인세를 미국에서 한국 사업자를 대상으로 청구한다는 게 말이 안 되죠). 아무튼 그래서 미국 아마존에서 판매하는 대한민국 판매자들은 지금까지 세금을 하나도 안 내고 판매활동을 계속 해왔겠지만 아마존 영국이나 아마존 유럽에 진출하고자 하니 갑자기 안 내던 VAT를 내라고 하니까 당황스러울 수밖에 없습니다. 이것은 VAT란 개념에 대해서 먼저 이해할 필요가 있습니다 (당연한 얘기지만 미국은 VAT 법이 적용되지 않는 국가입니다). VAT 법이 적용되는 국가의 목록을 보시려면 위키피디아를 참고하시면 됩니다: https://ko.wikipedia.org/wiki/부가가치세 위에서 보이듯이, 대한민국을 포함한 웬만한 유럽 국가들은 VAT 법이 적용됩니다. 그리고 VAT라는 것은 "재화와 서비스의 거래에서 발생하는 부가가치에 주목하여 과세하는 구조이기 때문에(출처: 위키피디아)" 수입할 당시에도 수입 부가세, 즉 Import VAT라는 것이 발생하며, 해당 국가에서 매출이 발생할 때에도 매출 부가세, 즉 Sales VAT가 발생합니다 (아마존 US의 경우에는 이 부분을 판매가에 반영하지 않아도 Sales Tax 소비세를 고객이 지불하도록 아마존에서 자동 설정하지만 아마존 UK 및 유럽 국가의 경우, 판매가에 포함해야 합니다). 그리고 분기별로 해당 국가의 국세청에 부가세 신고를 할 때 수입할 당시 선납했던 VAT 만큼 공제/환급받을 수 있습니다.그렇다면 원래 질문인 '대한민국에 설립한 사업자인데 왜 타 국가의 부가세(VAT)를 내야 하나요?'라는 질문에 대해서는 결국 답은 'VAT 법이 적용되는 국가에 판매하려는 것이기 때문'입니다. 그 어떤 화물이라고 하더라도 VAT 법이 적용되는 국가에 반입되기 위해서는 수입 부가세 Import VAT가 발생하고, 그것을 지불할 대상은 여러분의 사업자이어야 나중에 여러분 앞으로 부과된 매출 부가세를 납부할 때 선납한 수입 부가세만큼 매출 부가세에서 공제/환급을 받을 수 있습니다. 매입 부가세도 여러분이 냈고, 매출 부가세도 여러분 앞으로 마땅히 청구할 VAT를 제대로 청구할 수 있도록 해당 국가의 국세청이 알려면 당연히 판매하고자 하는 VAT 법이 적용되는 국가에 VAT를 가입하고 판매활동을 하셔야 합니다.★09★Q: VAT 번호 신청/발급은 어떻게 하는건가요?A: 직접 신청할 수도 있지만, 편리상 해외 세무대리인을 사용하세요.대한민국 사업자가 VAT 번호를 신청하는 방법은, 직접 신청하는 방법도 있지만, 해외 세무대리인을 통해 신청하는 것이 훨씬 수월하고 쉽고 신속하게 처리할 수 있는 방법입니다. 아마존 코리아의 Service Provider이면서 한국에도 담당자가 배정되어있는 해외 세무대리인 업체는 EcommerceVAT (https://www.ecommercevat.com/home-kor)가 있으며, VAT 번호 발급 서비스가 원래 유료 서비스이지만, 아마존 코리아의 소개 또는 컨택틱의 소개를 통해 알게 됐다고 하시면 VAT 번호 발급은 무료로 지원하고 있습니다.★10★Q: VAT 분기별 신고 및 납부의 주기는 어떻게 되나요?A: VAT 발급일로부터 3개월마다 신고해야 합니다.예를 들어 8월 21일에 VAT 번호를 발급 받으셨다면 (VAT 효력 발생일), 9월, 10월, 11월 아마존 유럽 판매분에 대해서 정리 및 준비하시고, 공제/환급 서류(C79)도 준비하셔서, 해외 세무 대리인에게 제출하시면 세무 대리인이 여러분의 사업자 앞으로 생성된 HMRC Gateway에 들어가서 VAT 신고를 대신해줍니다. 납부는 신고가 완료된 날로부터 1주일 정도 이후에 신용카드 또는 페이오니아로 HMRC에 직접 납부 가능합니다.★11★Q: 도와주세요...A: 컨택틱에게 도움을 구하세요컨택틱은 대한민국 사업자들이 아마존의 어느 사이트에서 판매를 하더라도 컨설팅과 업무 대행으로써 도움을 드리고 있습니다. 수십 시간, 심지어는 수백 시간을 머리 아프게 고민하면서 여기저기 알아보는 게 오히려 비효율적일 수가 있습니다. 시간은 금이니까요. 아마존 유럽이 아니더라도, VAT 관련 업무 지원이 아니더라도 아마존 판매와 관련된 그 어떤 분야라면 컨택틱의 서비스가 굉장히 도움 될 것입니다. 상담은 돈 받지 않아요 ^^ 그리고 컨설팅 및 업무 대행 비용도 합리적입니다. 망설이지 마시고 부담 없이 연락 주시기 바랍니다.
조회수 1094

[아마존 FBA] 03. 관세 발생 편

인사말안녕하세요 대한민국 셀러들의 성공적인 아마존 진출을 도와주는 컨설팅 회사이자 대행사인 컨택틱의 이이삭 대표입니다. 아마존 FBA 시리즈도 이제 거의 중반부에 접어들었습니다. 오늘부터는 관세에 관한 발생 여부부터 금액, 납부자에 대한 설명을 준비했습니다. 관세는 다양한 변수에 따라서 세금 계산이 달라지기 때문에 많이들 헷갈려 하시고 그로 인해 문의도 많은 부분인데요. 다양한 예시를 통해서 설명을 해드리도록 하겠습니다. QUESTION 3. 관세가 발생하나요?관세를 따질 때 많은 분들이 '관부가세'라고도 칭하는데, 다시 한 번 말씀드리지만, 미국은 부가세라는 개념이 없고 Sales Tax 개념입니다. 따라서 부가세는 배제하고, 관세의 경우 발생할 수도 있고 발생하지 않을 수도 있습니다.ANSWER 3. $800 미만의 화물은 무관세 목록통관, $800 이상 $2000 이하는 관세 적용 약식 통관, $2000 이상은 관세 적용+수입자 필수 정식 통관입니다.여기서부터 좀 헷갈릴 수도 있는데, 위에 기재한 것처럼 사실 간단한 개념입니다. Invoice Value (원가/매입가의 합계)에 따라 화물의 총 가치가 얼마인지 정해집니다. 그 금액에 따라 관세가 발생할 수도 있고 발생하지 않을 수도 있습니다. 아래에 예시들을 기재해드리오니 참고해주시기 바랍니다:양말을 1500짝을 보냈고, 한 짝당 원가/매입가가 $0.50이면 화물의 총액은 1500 * $0.50 = $750입니다. 본 예시의 화물의 경우 Invoice Value 총액이 $800을 넘지 않기 때문에 '무관세 목록통관'이 적용되며, 관세도 발생하지 않고 수입자가 없어도 물건을 보낼 수 있습니다 (제 기억상으로 2016년 3월 이전에는 $200이 미국 수입 기준 무관세 목록통관의 제한선이었는데, 그 이후로는 $800까지 제한선을 넓혔습니다).그럼 다른 예시로, 이어폰 800개를 보냈고, 한 개당 원가/매입가가 $1.50이라면 화물의 총액은 800 * $1.50 = $1200입니다. 본 예시의 화물의 경우 Invoice Value 총액이 $800 ~ $2000 구간에 속하기 때문에 '관세 적용 약식 통관'이 적용되며, 수입자는 없어도 되지만 관세는 발송인 혹은 수취인 둘 중 어느 일방이 지불해야 합니다. (관세가 얼마나 나오고 어떻게 납부하는지에 대해서는 아래 질문/답변을 참조).마지막 예시로, 노트북 가방을 1000개를 보냈고, 한 개당 원가/매입가가 $10.00이라면 화물의 총액은 1000 * $10.00 = $10,000입니다. 본 예시의 화물의 경우 Invoice Value 총액이 $2000 이상 구간에 속하기 때문에 '관세 적용+수입자 필수 정식 통관'이 적용되며, 화물에 대한 수입자를 필수적으로 지정해야 하며, 관세도 발송인 혹은 수취인 둘 중 어느 일방이 지불해야 합니다. (수입자가 필요한 문제는 아래에 또 해결책을 제공해드렸으니 스크롤을 내려보시기 바랍니다).마치며매주 목요일에 업데이트 되는 FBA 입고에 관련한 가장 많이 궁금해하시는 포스팅을 준비했습니다. 많은 관심 부탁드립니다. 그리고 미국 수입 기준 관세/통관/수입자/Consignee/IOR/Importer  등과 관련하여 도움이 필요하신 분들은 언제든지 컨택틱을 찾아주시기 바랍니다.  그럼 오늘도 즐거운 글로벌 셀링 되세요!컨택틱  서울특별시 강남구 강남대로 62길 11, 8층 (역삼동, 유타워)  대표 전화: 02-538-3939  해외 부서: 070-7771-1727  영업 부서: 070-7771-1728  이메일: support@kontactic.com  유튜브: https://www.youtube.com/channel/UC8OxbQGAnMqWGpGj5weLcZA 홈페이지: https://www.kontactic.com
조회수 1523

서비스 중단 없이 Amazon EKS로 옮긴 이야기 - VCNC Engineering Blog

Amazon EKS는 AWS의 관리형 Kubernetes 서비스입니다. 2017년 11월 AWS re:Invent에서 프리뷰 버전이 출시되었고, 2018년 6월에 상용(GA) 버전이 미국 리전에만 출시되었습니다. 그래서 서울 리전을 사용해야 했던 타다 프로젝트에서는 Kubernetes 클러스터를 직접 kops로 설치하여 운영할 수 밖에 없었습니다.2019년 1월, 오랜 기다림 끝에 드디어 서울 리전에 EKS가 출시되어 기쁜 마음으로 EKS로 옮겨가게 되었습니다. 이 글에서는 직접 구축한 클러스터 대비 EKS의 특징에는 어떤 것이 있는지 살펴보고, 서비스 중단 없이 EKS로 옮기기 위한 전략을 공유하고자 합니다.EKS 서울 리전 출시를 염원하던 한국인(?)들EKS는 뭐가 다른가요?AWS에서 마스터 노드를 관리해줍니다.Kubernetes 클러스터는 마스터 노드와 워커 노드로 구성되어 있습니다. EKS는 이 중에서 마스터 노드를 직접 EC2로 띄울 필요 없이 AWS에서 관리해주는 서비스입니다. RDS를 사용할 때 직접 DB 인스턴스를 생성하지 않는 것과 비슷합니다. 별도의 설정 없이도 알아서 여러 가용 영역에 마스터 노드를 실행하여 HA(고가용성) 구성을 해주고, 비정상 마스터 노드를 자동으로 감지하고 교체합니다. 또한 자동화된 버전 업그레이드 및 패치를 지원합니다. EKS를 사용하더라도 워커 노드는 직접 EC2 인스턴스를 생성·관리해야 합니다.EKS 클러스터의 요금은 2019년 2월 현재 시간당 $0.20입니다. 타다에서는 기존에 t2.medium 3대를 마스터 노드로 사용하고 있었기 때문에 관리를 직접 하지 않는 대신 비용이 약간 증가하게 되었습니다.AWS IAM 기반 인증을 사용합니다.VCNC에서는 기존에 Kubernetes API에 접속할 때 가장 간단한 basic auth 인증 방식을 사용했습니다. 그 대신 외부 네트워크에서 접근할 수 없게 해두고 필요한 경우 Bastion 호스트를 통해 SSH 터널링하여 접속했습니다.EKS의 API 서버는 인터넷에 노출되어 있으며, 별도로 네트워크 접근 제한 설정을 할 수 없고 AWS IAM으로 사용자를 인증합니다. (물론 공개망에 노출되어 있으면 Kubernetes API 서버에 보안 취약점이 발견되는 경우 안전하지 않을 수 있는 단점이 있습니다. 앞으로 PrivateLink가 지원되면 해결될 것입니다.)IAM은 인증에만 사용되고, 특정 작업을 할 수 있는 권한은 Kubernetes 기본 RBAC로 관리됩니다. IAM 사용자나 역할을 RBAC 그룹에 매핑할 수 있습니다.EKS 인증 흐름도워커 노드 당 Pod 개수 제한이 있습니다.예를 들어 c5.large 인스턴스에는 29개의 Pod을 띄울 수 있습니다. (표 참고) 그러므로 기존 클러스터에서 노드 당 Pod이 몇 개나 되는지 미리 확인할 필요가 있습니다. 왜 이런 제약이 있을까요?Kubernetes에서는 네트워킹 플러그인으로 Pod 사이에 네트워크 통신하는 방식을 다양하게 설정할 수 있습니다. EKS는 기본적으로 amazon-vpc-cni-k8s를 사용합니다. 이 네트워킹 플러그인은 VPC 상에서 유효한 실제 IP를 Pod에 할당합니다.그러기 위해서는 하나의 EC2 인스턴스에서 여러 개의 IP를 받아와야 하고, 이를 위해 추가적인 네트워크 인터페이스(ENI)를 붙입니다. 그런데 인스턴스 타입에 따라 추가할 수 있는 ENI 수와 ENI 당 IP 수에 제한이 있습니다. 따라서 이 제한이 워커 노드 하나에 띄울 수 있는 Pod 개수 제한이 됩니다.flannel 등 오버레이 네트워크 기반의 다른 네트워크 플러그인을 사용하면 이러한 제약을 피할 수 있습니다. 하지만 EKS에서 기본 제공하는 방법을 그대로 사용하는 것이 좋고, Pod을 엄청나게 많이 띄워야 하는 상황이 아니어서 시도하지 않았습니다.EKS로 중단 없이 넘어가기개요타다의 Kubernetes 클러스터에서 돌아가는 서비스들은 모두 영속적인(persistent) 상태를 가지고 있지 않습니다. 따라서 EKS 클러스터 위에 동일한 서비스를 띄우고 외부 트래픽을 옮겨주기만 하면 특별히 데이터를 옮기지 않고도 이전이 가능했습니다. 또한 거의 대부분의 Kubernetes 리소스는 Helm 차트로 생성한 것이기 때문에 새로운 클러스터에 동일한 서비스를 띄우는 작업도 쉽게 할 수 있었습니다.이전 작업은 다음과 같은 순서로 진행했습니다.EKS 클러스터를 만들고 워커 노드를 생성모든 서비스 다시 설치트래픽을 새 클러스터로 보내기이전 클러스터 제거EKS 클러스터를 만들고 워커 노드를 생성타다의 AWS 환경은 거의 모두 Terraform으로 정의되어 관리되고 있습니다. EKS 클러스터와 워커 노드도 HashiCorp Learn의 문서를 참고해서 Terraform으로 생성했습니다. 해당 문서에 설명이 잘 되어 있어서 거의 그대로 따라할 수 있었습니다.EKS 클러스터 설정은 재사용 가능하도록 Terraform 모듈로 만들었습니다. 덕분에 테스트용 클러스터와 실서비스용 클러스터를 동일한 모듈로 변수만 바꿔서 설정할 수 있었습니다.모든 서비스 다시 설치타다의 Kubernetes 리소스는 Helm 차트로 관리되고 있어서 기존 차트를 거의 그대로 설치할 수 있었습니다. 사용자에게 직접적인 영향을 덜 주는 워커 서비스를 먼저 설치해서 제대로 동작하는 것을 확인한 뒤, 마지막으로 프론트엔드 서비스를 설치하였습니다.트래픽을 새 클러스터로 보내기타다의 모든 트래픽은 NLB로 들어온 뒤 NGINX를 거쳐 다시 적절한 Pod에 라우팅됩니다. 그러므로 타다의 모든 도메인은 NLB를 가리키고 있습니다.타다는 Route 53을 DNS 서버로 사용합니다. Route 53에는 가중치 기반 DNS 레코드를 설정할 수 있습니다. 이를 이용하여 일부 트래픽만 새 클러스터의 NLB로 보낼 수 있습니다. 처음에는 아주 적은 트래픽만 새 클러스터로 보내다가 문제 없이 작동하는 것을 확인한 다음 조금씩 트래픽을 늘려나갔습니다.DNS 가중치 설정으로 일부 트래픽만 새 클러스터의 NLB로 보낼 수 있습니다.DNS 설정에서 이전 클러스터로 가는 레코드를 완전히 제거한 뒤에도, DNS 캐시 등의 이유로 일부 클라이언트가 이전 클러스터에 접속할 수도 있습니다. 따라서, 이전 클러스터 NLB에 새 클러스터의 노드들을 붙여서 아직 DNS를 따라오지 못한 클라이언트들의 요청을 처리하였습니다.이전 클러스터 제거가장 신나면서 조심해야 하는 작업입니다. 먼저 이전 클러스터로 트래픽이 전혀 들어오지 않는 것을 확인하였습니다. 그 다음에는 Terraform에서 이전 클러스터 리소스에 대한 참조를 제거한 뒤, terraform destroy 명령으로 이전 클러스터와 관련된 리소스를 한번에 삭제할 수 있었습니다.맺음말Kubernetes는 깔끔한 추상화를 통해 컨테이너 기반 배포를 간단하게 만들어주지만, 직접 클러스터를 관리해야 하는 부담이 있었습니다. Amazon EKS는 이러한 부담을 많이 덜어주는 좋은 서비스입니다. 앞으로 EKS의 무궁한 발전을 기원합니다.VCNC에는 오랫동안 쌓아온 AWS 인프라 운영 경험이 있습니다. 타다에서는 그동안의 경험과 비교적 최근에 시작한 프로젝트의 이점을 살려 컨테이너, Infrastructure as Code 등 업계 표준의 인프라 관리 방법론을 적극 도입하려고 노력하고 있습니다. 앞으로도 이에 관해 기술 블로그에 더 자세히 공유할 계획이니 기대해주세요. 또한 저희와 함께 안정적인 서비스를 만들어나갈 좋은 분들을 기다리고 있으니 VCNC 채용에도 많은 관심 부탁드립니다.
조회수 1098

체스 말의 시각에서 벗어나기

아 이건 이래서 안될 것 같고, 저래서 안될 것 같은데.. 이 시장은 없어.이 기능은 안쓸거야.. 이건 연매출 10억은 할 수 있어도 1000억은 못할 것 같은데..최근의 고민이었다. 사업을 시작하고 나이가 들면서 경험은 강화됐고, 지적으로도 많이 성장했다. 그런데, 오히려 그러한 지적 성장은 오히려 나를 아무것도 못하게 만들었다. 어떠한 행위를, 어떠한 아이디어를 실행에 옮기고자 할 때, 그것이 안 되는 이유가 수백 가지가 떠오른다. 계속해서 이길 수 없는 이유만이 내 머릿속을 떠돈다. 그것을 깨버리고 이기는 전략을 짜려니, 머릿속에 콘셉트들의 파편만 떠돌아 명확하게 단순화할 수 없는 지경에 이르렀다.그렇게 비캔버스로 여러 아이디어를 끄적이던 도중, 내 시각이 체스 말의 시각 같다는 생각이 들었다. 수없이 죽고 죽어 체스판 위에서 사라진 체스 말이 잔뜩 움츠려 들어, 어디로 이동해야 하는지 좁은 시선으로 찾아보듯 나 또한 지고 싶지 않다는 이유로, 편협하고 미시적인 시각으로 '지지 않을 방법'만 찾고 있는 것 같았다.그제야, 내가 체스 말 안에 들어가서 세상을 보고 있었다는 것을 깨달을 수 있었다. 사업에서 버려야 할 것은 감정인데, 내 감정이 지나치게 많이 들어가 있었다. 마치 '사업=나=비캔버스'와 같은 사고방식으로 인해, 지고 싶지 않은 마음이 매우 감정적으로 내 사고방식을 틀어막고, 시야를 좁히는 꼴이었다.이제까지는 지지 않기 위한 전략을 찾기 위해 사업의 전체적 콘셉과 무관한 서비스의 특정 기능과 같이 아주 작은 부분에서의 변화를 주도해왔다. 그러나 '체스 말에서 기어 나와 체스판을 바라보자'라는 시각은 내 모든 것을 흔들고 있다.이 미세한 마인드 컨트롤이 끼치는 영향은 생각보다 크다. 마치 사격을 할 때, 사격하는 입장에서 아주 조금만 각도를 틀어도 수백 미터 떨어진 곳에서는 큰 각도의 차이를 가져오는 것과 같다.사업을 해본 사람이라면 알겠지만, 정신적, 심리적 무능감과 박탈감, 좌절감은 사업의 성과와 상관없이 찾아온다. 매일 밤, 가슴 뛰는 콘셉과 아이디어가 떠올라 설레는 마음으로 잠들더라도, 아침에 일어나면 수십 가지의 '안 될 이유'가 머릿속을 감싸는 것이 현실이다. 자신감과 확신은 매일, 매 시간, 매 분 파도처럼 들썩인다.혼자서도 수많은 생각을 했지만, 사실 체스 말 안에서의 고민은 이러한 현상을 해결하는 데 도움을 주지는 않았던 것 같다. 나의 약 반년의 걸친 심리적, 정신적 무능감과 박탈감을 이겨낼 수 있게 도와준 것은, 단 몇 권의 책과 몇 편의 영화, 그리고 약 1주일간의 미국 출장이었다. 즉, 체스 말 바깥으로 나와 내가 바라보는 세상을 확장할 때, 오히려 그 효과가 크다.운동과 같이 나의 한계를 이겨내는 것은 나를 채찍질하여 이겨낼 수 있으나, 사업은 나의 한계를 이겨낸다고 해서 이기게 만들 수 있는 것이 아니기 때문에, 오히려 '이기기 위한 전략'을 만들어 내기 위해 물불을 안 가리는 것이 더 중요하다고 생각한다. 고객을 만나던, 사람들 만나던, 영화를 보던, 여행을 가던, 책을 보던, 무슨 수를 써서라도 이길 수 있는 전략을, 이길 수 있는 콘셉을 떠올리는 게 중요한 것 같다.일본의 기업인 고야마 마사히코는 사장에게 가장 중요한 것은 '속전속결'이라고 말하였다. 다양한 의사결정이나 문제에 대해 70%의 확신 만으로도 빠르게 결정을 내리는 것이 중요하다고 말한다. 근데, 사업이 감정이 많이 들어가면 들어갈수록, 더 시각이 좁아지면 좁아질수록 100%의 확신으로 결정을 내리고 싶어 하게 된다.감정을 버리고, 냉정하게 체스 말 하나가 죽더라도 체스판에서 승리하면 된다는 생각으로 시각을 전환하면 조금은 더 결정을 더 빠르게 더 과감하게 내릴 수 있게 되는 것 같다.횡설수설하였지만, 뻔한 말로 들릴 수 있는 한 줄의 문장이 진짜 도움이 된다. 나는 자기계발 콘텐츠로 먹고 사는 사람이 아니기 때문에 한 번 믿어봐도 좋은 것 같다.체스 말에서 기어 나와 체스판을 바라보자. 유니클로의 야나이 다다시 회장처럼 1승 9 패해도, 그 1승만으로 이기는 게임을 만들어낼 수 있을지도 모른다.
조회수 1460

공용 계정용 OTP 관리방법

제대로 된 기업용 서비스라면 의례 다중 계정과 권한 제어 기능을 함께 제공하기 마련이다. 그래서 공용 계정을 굳이 만들 이유가 하나도 없다. 하지만 일부 서비스(그리고 대부분의 한국의 기업 서비스)는 단일 계정만 지원하는데다 AWS 같은 서비스도 root 계정이 따로 있어서 계정 관리 이슈가 불거지기 마련이다. 계정 아이디와 암호의 경우는 LastPass 같은 기업용 계정 관리 서비스를 사용하거나 팀 공용 계정 비밀번호 관리하기에서 소개된 방식과 같이 약간은 불편하지만 비용이 들지 않는 수단을 도입하여 관리하면 된다. 그런데 MFA 또는 2FA(2-Step Verification)라고도 부르는 OTP로 계정을 보호할 때는 OTP 정보를 공유하기가 쉽지 않다. 일반적으로 MFA 계정은 Google Authenticator 같은 앱을 설치해 관리한다. OTP 정보와 계정 암호를 한 계정에서 관리하지 않아야 한쪽이 노출되어도 보안을 유지할 수 있기 때문이다. 문제는 Google Authenticator와 Authy 같은 도구를 특정 휴대폰에 설치하면 여러 사람이 OTP 정보를 공유하기 힘들다는 것이다. 그래서 몇가지 솔루션을 찾아보았는데 “이거다!” 싶은 건 없어도 gauth라는 명령줄 기반 도구에 안착하게 되었다.gauth.csv라는 파일에 OTP 정보를 아래와 같이 입력하고AWS: ABCDEFGHIJKLMNOPQRSTUVWXYZ234567ABCDEFGHIJKLMNOPQRSTUVWXYZ234567 Airbnb:abcd efgh ijkl mnop Google:a2b3c4d5e6f7g8h9 Github:234567qrstuvwxyzgauth를 실행하면 아래와 같이 OTP 토큰을 확인할 수 있다.$ gauth prev curr next AWS 315306 135387 483601 Airbnb 563728 339206 904549 Google 453564 477615 356846 Github 911264 548790 784099 [======= ]이제 gauth.csv 파일만 라스트패스 등으로 제한된 사용자에게 안전하게 공유하면 된다.개선 사항DailyHotel/gauth는 pcarrier/gauth를 개선한 tuxmartin/gauth를 Docker 이미지로 감쌌다. 그래서 Golang 개발환경을 갖추고 소스코드를 빌드하지 않아도 바로 사용할 수 있다. 자세한 사용법은 README 문서에 적어두었다.#데일리 #데일리호텔 #개발 #개발자 #개발팀 #인사이트 #꿀팁

기업문화 엿볼 때, 더팀스

로그인

/