스토리 홈

인터뷰

피드

뉴스

조회수 1102

3월에 다녀온 여름나라 코타키나발루 3박5일 이야기 (2)

패션블로그 웹뜰입니다3월에 다녀온 여름나라 코타키나발루 3박5일 웹뜰 해외워크샵 두번째 이야기를 들고 왔습니다. 마누칸 섬에서 패러세일링 까지의 이야기로 1차 후기를 끝냈었는데요 첫번째 이야기는 아래 참고하시면 됩니다:)[웹뜰 창립 10주년 해외워크샵] 3월에 다녀온 여름나라 코타키나발루 3박5일 이야기 (1)패러세일링 이후 점심을 먹기 위해 마누칸섬으로 다시 돌아와 처음에 자리 잡았던 식당으로!!씨워킹을 나갔던 직원분들은 이미 돌아와 계셨구요 두팀으로 나누어 갔던 패러세일링 팀도 모두 왔네요 이제 점심식사를 기다려 봅니다. 점심식사는 현지식이라고 하는데 드디어 나왔네요 따란~!현지식 세트라고 하는데 왠열 엄청 맛있어요 제 입맛에 딱!!가운데 새우랑 고기 바베큐는 일인 일꼬치!그리고 개인에게 플레이팅되어 나온 음식은 볶음밥이랑 샐러드 웨지감자 작은꼬치, 옥수수, 닭고기 등이였어요 패러세일링을 하고 돌아와서 배가 고팠던건지 아니면 입에 정말 잘 맞았던건지 남김없이 흡입 했답니다. 특히나 저 옥수수는 지금도 생각나요 밥도 배부르게 먹고 이제 다시 마젤란수트라하버 리조트로 돌아가기전까지 자유시간이 주어졌습니다. 웹뜰 직원들 각자 흩어져서 섬구경을 하기도 하고 스노쿨링을 하기도 했어요 여기저기 일단 섬구경을 하다보니 바다도 예쁘고 섬 곳곳이 어찌나 이쁘던지 사진찍다 시간이 다 갔을 정도였어요 식당 바로 앞에 있는 코코넛 가게 조차도 포토스팟! 갬성사진 스팟이였다구요코코넛 가게에서만 사진을 몇장을 찍었는지 몰라요 ㅎㅎㅎ정말로 사진이 잘 나와 찍어 준 사람도 찍힌 사람도 만족했답니다. ㅋㅋ마치 윤식당 같은 느낌 물씬이랄까 ㅎㅎㅎ 웹뜰 직원들에게 인기 만점 코코넛 가게 사진을 찍고 있으니 어디선가 나타난 야옹이 한마리꺄아 넘나 귀여워서 야옹아 야옹아 하고 불러보지만 고개를 휙 돌려버리네요 한국말이라 못알아 듣는 걸까요? ㅋㅋ사람들이 하도 귀찮게 하니 코코넛 가게 위로 휙 올라가서 잠을 자네요 이 모습 조차도 어찌나 귀엽던지 ㅋㅋㅋㅋ  마누칸 섬은 정말 조용하고 정말 평화롭더라구요 대부분이 한국 사람이랑 중국 사람이긴 했지만 그래도 동양말고도 세계 각국에서 오신 분들이 많이 계셨어요  밥도 먹고 섬 구경 하면서 소화도 시켰으니 이제 바닷물에 몸도 좀 담구고 스노쿨링도 즐겨봅니다물이 깨끗하고 햇살이 따뜻해서 물에 몸 담궈 놓고 둥둥 떠다니기만해도 기분이 좋았습니다. 스노쿨링 장비는 따로 비용 내고 대여가 가능 하지만 저희는 장비를 본인거 챙겨가서 즐겼답니다. 구명조끼만 마젤란수트라하버 선착장에서 비용내고 대여했어요 스노쿨링 하면서 액션캠으로 찍은 바닷속 영상입니다. 물이 정말 맑고 깨끗했답니다. 얕은 바다인데도 물고기들이 많이 있었습니다. 다만 종류가 생각보단 많지 않아 조금 아쉬움이... ㅎㅎ마누칸섬 바다에서 열심히 놀고 있는데 사람들이 웅성웅성 거립니다. 앗! 두둥 이녀석은 뭐죠? ㄷㄷㄷ 엄청난 녀석이 바닷가에서 어슬렁 어슬렁 사람들이 몰려와 사진찍고 난리가 났는데도 저 녀석은 아무 동요없이 어슬렁 거리다가 숲속으로 사라졌답니다. ㅎㅎ마누칸 섬에서 즐거움을 사진으로 남겨두고 이제 다시 마젤란수트라하버리조트로 돌아갑니다.  잠시 자유시간을 가지고 나서 저녁식사를 하러 나왔습니다. 둘째날의 저녁식사는 아침에 조식을 먹었던 식당에서 뷔페식으로 먹을수도 있구요 비치가 보이는 바에서 간단하게 먹을수도 있었습니다. 저희 웹뜰 직원들도 각자 나누어서 원하는 곳에서 선셋을 바라보며 식사를 했답니다.  코타키나발루의 아름다운 선셋을 보고 정말 말잇못! 다시한번 이곳에 워크샵을 오게 되어 감사하고 행복한 순간 이였답니다. 7시간이 지나며 해가 떨어질수록 노을빛이 붉은색에서 보라색으로 변하는데 너무 아름다워서 선셋 감상하느라 밥먹는 것도 잊을 뻔 했다는 건 안비밀 ~식사를 마치고 본격 웹뜰워크샵 행사를 시작하기 위해 대여한 홀로 모였습니다. 그냥 여행이 아니라 웹뜰 10주년을 기념하는 워크샵이기에 10주년을 기념하는 대표님의 말씀도 듣고 앞으로 나아갈 웹뜰에 미래에 대한 건설적인 이야기도 하고 푸짐한 상품을 놓고 여러가지 게임들을 했었답니다.   워크샵 오기전에 웹뜰에 대한 각자의 이야기도 동영상으로 풀어놓고  10년동안의 웹뜰 사진이나 동영상들을 차곡차곡 모아놨다가 이렇게 기념하는 자리에서 틀어놓으니 감회가 정말 새롭더라구요  대표님의 소중한 말씀웹뜰 주식회사 창립 10주년기념 함께한 10년 , 함께 할 10년함께 고생하며 10년동안 잘 꾸려온 회사 앞으로 10년 20년 30년... 쭈욱 함게 할 웹뜰 기대해 보겠습니다.  그리고 대표님 말씀에 이어 부장님의 말씀웹뜰의 10년이 지나는 동안 오랜 세월 함께 한 부장님이시기에 더욱 감회가 새로우셨다고 합니다. 앞으로 웹뜰의 성장과 더블어 여기 있는 웹뜰 직원들 모두 함께 성장하기를 바라신다는 말씀! 그리고 생일 축하파티까지!원래 한달에 한번씩 매달 생일자 파티가 있는데 이번에 워크샵 자리에서 축하하게 되었습니다.   매번 회사 사무실에서 생일파티하다가 먼 나라에서 생일파티 하니 더욱 분위기가 새롭네요생일자 분들도 감회가 새롭다 하더라구요 :)다시한번 축하드려요 두분 생일 그리고 3월의 우수사원시상도 하였답니다. 우수사원 받으신 분들도 축하축하 드려요~~앞으로도 웹뜰을 위해 열심히 일해주실꺼죠? ㅎㅎㅎ이제 본격적으로 게임을 하기 전 강당대여하면서 코타키나발루 마젤란수트라하버에서 제공되는간단한 주전부리로 배를 채워 봅니다. 게임이 격할 수 있으니 힘내야죠 ㅋㅋ 먼저 조 소개와 구호소개가 있었습니다. 사회자와 심판 사진촬영사는 빠지고 제비뽑기로 1조부터 4조까지 5명씩 총 4개조로 나누었답니다. 구호에서 부터 천차만별 조의 특색이 보이는 것 같더라구요  첫번째 게임은 몸으로 말해요 입니다. 스케치북에 주어닌 속담을 보고 말하지 않고 몸으로 표현하는 건데 과연 어떤 모습들을 보여줄지!!ㅋㅋㅋㅋㅋㅋ 말 하지 않고 몸으로면 표현하려니 답답들했죠?기상천외한 행동들과 표현력 ㅋㅋㅋ 그렇지만 못알아듣는 조원들 그 중 누가 구멍일까 지켜보는 재미도 쏠쏠하고 지켜보는 사람들은 함박웃음 빵빵 터졌답니다. ㅎㅎ 그리고 카드 뒤집기 게임앞면과 뒷면으로 나누어 어느쪽이 더 많으냐에 따라 이기는 게임인데 웹뜰 직원들 정말 기동력에 행동력 짱짱! 아무도 몸 사리지 않고 열심히 게임을 하는 모습보고 놀랬답니다.  카페트에 미끄러지지 않으려고 맨발로 하는 투혼까지! 심판의 준비~시작!과 날아다니는 모습들 ㅎㅎ정말 대단했어요 몸사리지 않고 어찌나 열정적이던지!! 이모습은 현장에서 직접봐야 더 대단한데 말입니다. ㅋㅋ절대 싸우는거 아님 게임하는거 맞습니다!! ㅎㅎㅎ 게임이 끝났네요 후끈후끈 열정적으로 게임한 팀들은 너무너무 지쳤어요 언뜻보아 노란색면과 흰색면의 카드색이 비슷해 보이는데과연 어느 팀이 이겼을지 두구두구두구  심판의 확인결과 !! 짜잔 노란카드 팀의 승리입니다.  결승전까지 불태워서 승리한 1조는 환호를 한뒤 모두 지쳐버렸다는 후문이 ㅋㅋㅋㅋ이후로도 두어번정도 게임을 더 진행하였으나 스크롤의 압박으로 그냥 넘기실지 몰라 게임은 여기까지만 올리겠습니다. ㅋㅋㅋ최종우승은 역시나 게임에 적극적으로 참여하고 열의를 불태운 1조 였답니다. 평소에 성격이 조용하신 분들로 구성된 팀이라 저렇게 열의를 불태워서 1등을 할지 전혀 몰랐는데 말이죠 ㅎㅎ역시 할때는 시원하게 하는 웹뜰 직원답네요 최고!1등한 1조원들은 게임상금 30만원입니다. 부럽습니다요 :)1등 한 조 외에도 각각 상품이 어마어마해서 많은 직원분들이 상품을 받아가셨답니다. 10주년 워크샵을 위해서 해외여행부터 상품까지 크게쓰신 웹뜰 이태경대표님께 다시한번 감사인사 드립니다. 마지막으로 다같이 웹뜰 창립10주년 구호함께한 10년 함께할 10년를 외치며 건배를!! 모든 직원들이 함께여서 정말 즐겁고 기분좋은 날이였답니다. 마지막으로 단체사진 한장!  끝으로 워크샵을 마쳤습니다함께여서 즐거웠던 시간이였고 앞으로도 함께할 날이 기대되는 웹뜰입니다. 이 날의 그 마음 변치 않고 열심히 더 좋은 상품으로 보답하고  고객님들의 목소리에 귀기울이며 직원끼리도 화합하며 일하는 웹뜰이 되겠습니다. 워크샵이 끝났다고 해서 여행이 끝난건 아닙니다. 아직 저희에겐 이틀의 시간이 더 남아있답니다. ㅎㅎ 이렇게 둘째날 밤도 끝나는게 아쉬운 직원들은 워크샵 이후에 한 방에 모여서 한잔으로 마무리!아쉬워할꺼라 미리 예상하신 대표님께서 웹뜰 직원들을 위해 양주까지 챙겨주셨답니다. 대!! 박!! 감사히 잘 마셨습니다. 이렇게 둘째날 밤도 마무리 하였구요 이제 코타키나발루는 셋째날 과 넷째날 이야기가 남았네요 웹뜰 10주년 기념 코타키나발루 워크샵 두번째 이야기는 이렇게 마치도록 하겠습니다. 셋째날 넷째날 이야기도 기다려 주세요 #웹뜰 #웹뜰워크샵 #웹뜰10주년워크샵 #코타키나발루 #마젤란수트라하버 #해외워크샵 #해외여행 #워크샵 #말레이시아
조회수 109

바로고 복지 문화 뼈가 되고 살이 되는 강연 <헬로네이처 허광남 CTO>

출근이 즐거워지는바로고의 복지 문화13가지안녕하세요, 바로고 입니다.바로고 직원들의 출근이 즐거워지는13가지 이유바로복지 문화 13가지가 있기 때문이죠^^[바로고 복지문화]바로고 복지 문화에 대해자세히! 알고 싶다면 클릭!뼈가 되고, 살이 되는외부 인사 초청 강연훌륭한 팀워크와 업무 효율을 높이는유익한 외부 인사 초청 강연!맛있는 음식과 함께 해봐요^^2017년 9월 7일외부 인사 초청 강연강연자헬로네이처 허광남 CTO뼈가 되고 살이 되는강연의 주제는고객 행동 데이터 보면서 개발하기강연은바로고 본사에서 진행되었습니다.강연을 본격적으로 시작하기 전프로젝터로 점검하고간단한 담소를 주고받으며편안한 분위기를 만들어주시는 허광남님뼈가 되고 살이 되는 강연이그동안 바로고에서 진행된 만큼오늘의 강연 또한 기대됩니다!고객 행동 데이터 보면서 개발하기Elastic Stack오늘 강연은1. 데이터 시각화의 가치2. 오픈소스 시각화 패키지 Elastic Stack3. 유용한 플러그인 소개4. ELK 적용 사례위의 같은 순서로 알차게 진행되었습니다.시작부터 집중하는바로고의 직원들업무에 바쁘다 보면다른 정보를 습득하거나다른 분야의 사람들과 의견을 공유할 여유가 없을 수도 있어요.이렇게 외부 인사 초청 강연을 통해다양한 의견을 공유하고리프레쉬 하는 기회가 생기는 것에바로고 직원들의 만족도가 높은 편입니다.이번 강연의 핵심이었던Elastic Stack 의 특징에 대해간단히 설명해보겠습니다강연의 내용을 함께공유한다는 것에도 의미가 있어요^^Elastic Stack 특징-Google Analytics(GA)의 데이터로사이트 접속 통계를 구할 경우원하는 대로 데이터를 획득하기 어렵다.-자체 서버의 모든 로그를 100% 수집할 수 있기 때문에데이터에 대한 신뢰성이 높다.-파라미터 값별로 통계를 볼 수 있기 때문에정확한 데이터 분석이 가능하다.-검색엔진(lucene)이 포함되어 있어빠르게 데이터를 검색할 수 있다.-모두 오픈소스이며 자유롭게 사용이 가능하다.자유롭게 질문을 주고받으며의견을 공유할 수 있었던 의미 있는 시간이 되었습니다.이번 강연에서도다양한 의견을 주고받고같은 문제에 대해다양한 시각이 존재한다는 것을알게 된 계기가 된 것 같습니다.바로고 직원 모두에게의미있는 시간이 되었으리라 생각합니다.오늘 열정으로 강의해주신허광남님께 진심으로 감사의 말을 전합니다.또 다른 시각에서 접근하는고객에 대한 접근 방법뼈가 되고 살이 되는알찬 시간이 되었습니다.감사합니다!바로고의 외부 강연이 끝날 시간 즈음그 시간이 바로 점심시간열심히 강의 들었으니에너지 충전이 필요합니닷!모두 수고하셨습니다.선택이 아닌 필수#배달 #배달대행바로고날씨 좋은 9월, 야외에서 오늘은 쉬는 날, 집에서누구와 함께 든 어디에서든내가 원하는 곳으로 배달!-전국 배송망을 갖춘바로고에서라면가능합니다.배달대행[바로고 공식 홈페이지]
조회수 1195

게임은 마약이 아니라 약이다

우리 사회에서는 게임에 대한 부정적인 시선들이 많다. 우리 사회의 모든 악이 모두 게임을 통해서 파생된것 같은 느낌이다. 철없는 부모가 아이를 죽인 사건에도 게임중독이 나오고, 10대의 잔혹한 범죄 뒤에도 언제나 게임이 등장한다. 정말 게임은 나쁜 것일까? 사실 게임은 최근에 만들어진 것이 아니다. 인간의 문명 이전부터 게임은 있어왔고 인류와 언제나 함께 있었다. 단지 기술의 발전으로 인해 게임하는 방법이 달라진것 뿐이다. 난 게임 자체가 나쁘다는 것에 동의할 수 없다. 단지 그 게임에 지나치게 중독된 몇몇 사례를 증폭해서 게임자체를 나쁘게 몰고 있지 않나라는 생각이 든다. 난 이제 게임이 좋은 방향으로도 쓰일 수 있다는 이야기를 해주고 싶다. 네오펙트는 재활 환자의 동기부여를 강화시키는 목적으로 게임을 활용하고 있다. 재활치료는 반복적인 동작을 지속적으로 수행해야 하는 지루하고 고된 과정이다. 이 과정 중에 많은 환자들이 쉽게 포기하게 된다. 포기하지는 않더라도 환자들의 낮은 동기 부여는 재활의 효과를 낮추게 된다. 그렇기때문에 재활의학계에서는 게임을 이용하여 재활 환자의 동기 부여를 높이고 재활 효과를 극대화 시킬 수 있다는 연구가 꽤 오래전부터 되어 왔다. 그리고 최근에 그러한 연구 결과들이 조금씩 나오고 그 효용성이 증명이 되고 있다. 네오펙트도 이러한 연구 결과를 바탕으로 재활 환자들을 위한 다양한 게임들을 만들고 있다. 재활 환자를 위한 게임을 만드는 것은 생각만큼 단순하지않다. 재활 환자를 위한 게임의 목적은 치료가 가장 중요한 목적이고 재미적인 요소는 그 다음 요소이기 때문에 기존 게임의 룰과는 다른 룰을 가지고 있다. 게임에 대한 재활의학계의 시각을 재활의학과 의사 선생님들의 말을 인용하여 이야기를 해본다면 의사 분들이 약을 처방하듯이 재활 의학과 의사들은 재활 환자들에게 게임을 약처럼 처방을 내릴 수 있다고 한다. 그렇다면 게임도 약처럼 처방을 내릴 수 있도록 임상적인 의미가 게임안에 고도로 설계가 되어 있어야 한다. 마치 어린아이에게 쓴 한약을 먹이기 위해 꿀을 타는 것 처럼 재활 훈련이라는 재미없는 훈련을 게임의 재미요소를 통해서 꾸준히 할 수 있게끔 해주는 것이다. 하지만 꿀을 너무 많이 타면 한약의 본래 성질을 해칠 수 있는 것처럼 재미요소를 우선시 했을때의 부작용도 분명히 있기 때문에 적절한 발란스가 중요하다. 그렇기 때문에 네오펙트에서는 내부에 오랜 임상 경험을 가진 전직 재활 치료사와 전문 게임기획자가 같이 재활 게임을 만들고 있다. 이러한 콜라보를 통해서 임상적으로도 의미가 있고 환자의 동기 부여도 극대화 할 수 있는 게임을 만들고 있다. 그리고 이렇게 만들어진 게임을 새로운 신약을 병원에서 임상 시험 하듯이 실제 병원의 환자들을 통해서 시험을 해보면서 임상적 효과도 검증하고 또한 필요한 경우 병원의 피드백을 통해서 꾸준히 게임의 밸런스를 맞추어나가는 작업을 반복하게 된다. 이렇게 하면서 재활 환자들의 치료에 최적화된 게임이 만들어진다.  게임은 인간이 만들어낸 도구에 불과하다. 도구는 무색 무취하다. 어떻게 쓰느냐에 따라서 그 성질이 악할 수도 있고 선할 수도 있다. 우리는 게임이 재활환자들의 희망을 만들어낼 수 있는 훌륭한 도구가 될 수 있다고 믿는다. 그리고 우리는 그 믿음을 실현하고 있다.  #NEOFECT #서비스 #서비스소개 #기업문화 #기업가치
조회수 1114

EOS Smart Contract 를 위한 준비

EOS Smart Contract 를 위한 준비와 토큰 발행 그리고 C++를 활용해 토큰의 간단한 기능을 개발해 보겠습니다.환경 구성 및 지갑 생성은 SAM 님의 아래 2글을 참고해 주시기 바립니다.EOS — 설치 및 실행 (1/2)EOS — 동작구조 및 환경설정(2/2)지갑 생성하기SAM 님의 포스트를 참고 하셨다면 아마 다음과 같이 ‘default’ (별도의 이름을 지정하지 않았을 시) 지갑을 생성 하셨을 겁니다.이 지갑을 사용하여 계정을 Create 한 후 Key 를 Import 하겠습니다.Key 생성하기$ cleos create key위 명령을 실행 하시면 다음과 같은 화면을 얻을 수 있습니다.create key 명령의 결과**주의 : Private Key는 Public Key의 소유를 증명하는 중요한 개념으로 절대 타인에게 노출하면 안됩니다.AdditionalKey 생성 후 지갑에 import 하기 귀찮으시다면 생성된 지갑에서 바로 Key 를 생성하셔도 됩니다.$ cleos wallet create_key위와같이 key가 생성 됩니다. 하지만 public key 만 보이기 때문에 하단 명령 입력 후 지갑 key를 입력하면 private key를 확인할 수 있습니다.$ cleos wallet private_keys지갑에 Key import하기지갑은 Public Key — Private Key를 저장하는 저장소 입니다. 생성된 키를 지갑에 저장하기 위해 다음과 같은 명령어를 입력합니다.$ cleos wallet import-n : 옵션을 사용하면 지갑의 이름을 지정합니다. 지정하지 않는다면 기본 생성된 default 지갑으로 지정됩니다.위 명령을 입력 하면 key 가 임포트 되었다는 결과를 확인 할 수 있습니다.** 만약 지갑을 Unlock 한 상태가 아니라면 ‘private key: Error 3120003: Locked wallet’ Exception 이 나옵니다.unlock 을 위해 다음 명령을 실행한 후 wallet 생성시 저장했던 Key를 입력하여 Unlocked 상태로 만들어 줍니다.$ cleos wallet unlock password: Unlocked: default(Optional) 지갑에 저장된 Key 리스트 확인다음 명령어를 입력하여 지갑에 key 가 잘 import 됐는지 확인합니다.$ cleos wallet keys계정 생성eosio.token 이라는 이름으로 계정을 생성하도록 하겠습니다.** 지갑과 Key 그리고 계정에 관해서는 Hexlant 미디움에 게재될 예정입니다.$ cleos create account eosio eosio.token EOS63kstp8kthzJY3rAotp1LAxUDbWk4MywReG578R2ddbktrDHYKcreator : eosioaccount name : eosio.tokenowner key : 지갑에 import 된 keyAdditional본 포스팅은 local 환경에서 빌드 후 System Contract 들이 적용되지 않은 상황을 가정하였습니다. 만약 Public Network 환경에서 접속 시 eosio 와 eosio.token을 사용할 수 없습니다.또한 계정이름은 다음과 같은 규칙을 따릅니다.- 12문자- 12345abcdefghijklmnopqrstuvwxyz 만 사용 가능** 만약 ‘Error 3090003: provided keys, permissions, and delays do not satisfy declared authorizations’ 에러 발생 시 eosio 에 대한 key 를 지갑에 import 해야 합니다.eosio 에 대한 정보는 다음과 같습니다.public key: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CVprivate key: 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3위 과정을 모두 마쳤다면, EOS 지갑과 키 그리고 계정에 대한 권한을 모두 가지고 있는 상태가 됩니다. 다음 포스팅에서는 이 계정을 사용 하여 Token 을 발행하는 방법을 알아보도록 하겠습니다.감사합니다#헥슬란트 #HEXLANT #블록체인 #개발자 #개발팀 #기술기업 #기술중심
조회수 2645

카카오는 왜 게임별을 만들었을까?

얼마 전부터 TV를 보다보면 아이유가 나와서 여리여리한 목소리로 '카카오톡 게임벼얼~' 하는 CF가 눈에 띄곤 했습니다. 처음엔 '카카오톡 게임별? 그게 뭐지?'라고 생각했는데 카카오톡을 새로운 버젼으로 업그레이드하고 나니 알겠더라구요.그것은 기존에 [친구 목록 - 채팅창 - 컨텐츠 - 설정] 로 구성되어있던 카카오톡의 메뉴 중 '컨텐츠와 설정' 아이콘 사이에 네번째로 새롭게 생긴 '게임' 메뉴였습니다! 들어가 보셨나요?새로운 것은 또 그냥 못 지나치는 마케터의 피곤한 특성상..! 이번에도 들어가보았습니다 +_+ 그리고 모든 게임을 다 해봤지요...ㅋㅋㅋ그 중에 제가 제일 좋아하는 게임은 (이라고 쓰고 잘 하는 게임이라고 읽는다) <라이언과 눈싸움 한 판> 이라는 게임이에요카카오톡 게임별에 있는 게임들은 다 가볍게 즐길 수 있는 '미니게임' 형태인데요 <라이언과 눈싸움 한 판>은 내가 라이언이 되어서 반대편에서 오는 튜브와 눈싸움을 하는 내용의 게임이에요!라이언을 꾹~ 누르면 게이지가 차오르면서 눈을 던질 준비가 되죠, 그런 다음 내 앞에 있는 튜브를 향해 눈덩이를 던져서 3번을 맞추면 그 튜브가 OUT 되는 쉬운 게임이랍니다!이 게임의 묘미는 처음에는 천천히 튜브가 한 마리 ~ 한 마리씩 등장하다가 시간이 지나면 점점 많이 등장하고, 튜브도 라이언에게 눈덩이를 마구마구 던지는 거에요!이 때 3번을 맞으면 튜브에게 지고 게임이 끝나요 ㅠ.ㅠ 우측 상단에 하트 ♥♥♥ 보이시죠? 이게 라이언의 목숨을 뜻함!오늘도 퇴근길에 스릴 넘치는 눈싸움을 하다가... 문득 좌측 하단 [겜톡하기] 버튼이 눈에 들어왔어요, 자랑하기는 내 카톡 친구들한테 내 레베루를 자랑하는 거라는 거 알겠꼬~ 겜톡은 도대체 뭐지? 싶었죠!그래서 들어가봤더니 눈싸움 게임을 하는 사람들이 모인 오픈 채팅방으로 연결이 되더라고요!으악...! 저는 이런 오픈채팅방에 익숙하지가 않아서 들어간지 한 1분만에 나왔는데요;; 주로 10대~로 보이는 어린 친구들이 게임과 상관 없는 이야기들도 마구마구 쏟아내고 있었어요 ㅠ.ㅠ그것을 보면서 '카카오톡은 왜 이런 게임, 오픈채팅방을 만들었을까?' 생각하게 되었죠 (서론이 매우 길었네요...)서비스의 본질, '유저들이 기꺼이 시간을 낼 수 있도록 만드는 것'무엇인가를 판매한다는 것은, 그게 서비스가 됐든 재화가 됐든 그 매개체와는 상관없이 '유저 (혹은 손님)들이 기꺼이 찾아오게 만드는 것, 그리고 그것에 시간을 쓸 수 있도록 만드는 것'이라고 생각해요.카카오톡의 경우 '스마트폰에서의 연락 수단'이 됨으로써 카카오톡 안에서 사람들이 시간을 최대한 많이 보내도록 유도하는 것이 서비스의 본질이겠죠?그러한 관점에서 카카오톡은 왜 '게임별'을 만들었을까? 조금이라도 더 오래 카카오톡 안에서 사람들이 머물길 바래서 게임별을 만든 게 아닐까요? (게임을 통한 과금은 그 다음으로 차치하고서요~)여러 종류의 미니게임들을 깔아놓고 사람들이 어떤 게임을 좋아하는지~ 어떤 게임에서 오랜 시간을 보내는지~그리고 게임을 즐기는 사람들끼리 이야기 할 수 있는 오픈 채팅방을 만들어서 그 안에서 한 번 더~ 오래~ 시간을 보낼 수 있도록 유도하고 싶은 게 아닐까? 하는 생각이 들었어요(카카오와 1도 연결고리가 없는 제 3자인, 순전히 저의 생각입니다)그렇다면 내가 제공하고 있는 서비스는 과연 어떨까?저는 지금 취업 준비생들이 자기소개서를 쓸 때 조금이라도 편하게 쓸 수 있는 기능들을 제공하고 있는 <자소설닷컴>에서 마케터로 일을 하고 있는데요, 우리의 서비스는 과연 어떤가!? 돌아보았죠어떤 기업에 서류 지원을 하려면 취업 포털 사이트에서 채용 공고를 확인한 다음에~ 회사 채용 홈페이지에 가입을 하고~ 이력서 내용을 다 채워넣고~ 한 3단계를 거쳐야 겨우 자기소개서 문항을 볼 수 있어요,그 문항 보고 워드 파일에 복+붙해 놓은 다음 자기소개서를 준비하고, 다시 1단계로 돌아가 로그인을 하고~ 이력서를 입력하고~ 다시 자기소개서 창으로 가서 다 쓴 자기소개서를 복+붙해서 지원을 해야하죠.저희 서비스는 이런 번거로운 절차를 없애기 위해 [채용 공고]에 여러 회사의 채용 공고를 한 번에 볼 수 있도록 해놨고, 채용 공고 옆에는 [자기소개서 쓰기] 버튼이 있어서 위 화면처럼 바로 자기소개서 문항을 확인할 수 있도록 했어요자기소개서 쓸 때에도 조금이라도 더 편하게 쓸 수 있게 여러가지 기능을 탑재해두었구요. 이렇게 '자기소개서 쓰는 행위'를 편하게 해주는 것이 우리 서비스를 찾는 사람들로 하여금 조금이라도 더 오래 우리 서비스에 머무르게 하는 방법이라고 생각한 것이죠.자기소개서를 쓸 때 활용하는 기능 외에 더 줄 수 있는 건 없을까?그러나 앞에서 말했듯이 '서비스를 제공한다'는 것은 '유저들이 기꺼이 찾아오게 만드는 것, 그리고 그것에 시간을 쓸 수 있도록 만드는 것'!우리의 서비스 역시 자기소개서 작성 행위에서 오는 편리함 그 이상의 가치를 제공할 수 없을까? 고민을 했습니다그 고민 끝에 나온 것이 위에 보이는 [자소서 연구소]에요! 쉽게 말하자면 블로그처럼 컨텐츠를 쌓아두는 기능을 사이트 내에 탑재한 것이죠.누구보다 더 자기소개서에 대해 고민하고, 연구해서 컨텐츠를 만들어 '유저들이 조금이라도 더 오래 우리 서비스에 머물렀으면 좋겠다'고 생각해서 만들어졌어요~스타트업 마케터로서 "서비스 마인드"란 무엇일까?(이미지: 요새 저의 페이보릿 이모티콘 오버액션 토끼)결국 스타트업 마케터로서 가져야 할 서비스 마인드란 '되도록 유저들이 오랜 시간 머무를 수 있는 서비스를 만들어야겠다' 라는 생각과 더불어 '우리 서비스에 머물러주는 유저들의 귀한 시간을 헛되이 만들지 말아야겠다' 라는 사명감인 것 같아요!이를 위해서 개발팀과 디자인팀 모두와 함께 으쌰으쌰하여 더 좋은 서비스를 만들기 위해 노력해야겠죠!그렇다면 카카오톡은..?다시 처음으로 돌아가, 카카오톡 게임별은... 그런 의미에서 서비스의 본질에 맞는 기능일까요? 확실히 유저들로 하여금 카카오톡에 오래 머무를 수 있도록 해주는 것 같긴 해요!그런데 그 다음은...?흠~ 이것은 아마 모든 서비스 제공자들이 평생 풀어나가야 할 숙제 같아요! 너무나도 어렵죠! 특히 사업, 돈을 벌어야 하는 측면과 같이 생각하면 더더욱요!생각을 결론 짓다보니 우리 서비스도 유저들의 시간을 헛되이 쓰지 않으면서 돈도 더 잘 벌 수 있는 방법을 빨리 찾아야겠다는 생각이 듭니다! 아아~대한민국 스타트업 마케터의 하루는 길고도 기네요!(그런 의미에서 고생하는 취업 준비생 친구들의 시간을 헛되이 쓰지 않는 뜻에 함께 해주실 광고, 제휴 제안이 있다면 대환영입니다 ㅋㅋㅋㅋㅋㅋ 기승전영업... 끄아)#앵커리어 #마케터 #마케팅 #마케팅팀 #브랜드 #분석 #인사이트
조회수 912

이메일도 반응형 디자인이 가능할까요?

이메일 뉴스레터를 제작하던 중 HTML 코드를 마주하게 된 경험이 있으신가요? 웹 기술과 HTML 코드에 익숙한 사람에게 조차도, 이메일의 HTML 코딩은 골치 아픈 주제입니다.웹 표준이 자리잡기 시작하면서 웹에서의 HTML 코딩은 많은 발전이 있었고, 효율적인 코딩과 다양한 기술 구현이 가능해졌습니다.하지만 이메일에서의 HTML 코딩은 상황이 많이 다릅니다.웹 표준이 지켜지기 전의 뒤죽박죽이던 HTML 코딩의 세계, 그게 바로 지금의 HTML 이메일입니다.HTML 이메일, 왜 필요할까요?텍스트로만 구성된 이메일(Plain-text Email)로도 충분히 메시지를 전달할 수 있습니다. 그럼에도 이메일 마케팅을 할 때 HTML 이메일을 사용해야 하는 이유가 몇 가지 있습니다.하이퍼링크. 다양한 요소에 하이퍼링크를 추가할 수 있습니다. 이미지나 버튼에 하이퍼링크를 추가하면 더 많은 사람을 랜딩페이지로 유도할 수 있습니다.디자인. HTML 잘 디자인된 HTML 이메일은 당신의 브랜드를 더 잘 표현합니다.위계. HTML 이메일에서는 콘텐츠의 위계를 만들 수 있습니다. 단락을 구분하거나 정렬을 다르게 하여 핵심적인 문구나 하이퍼링크를 쉽게 강조할 수 있습니다.추적. HTML 이메일은 오픈과 클릭을 추적할 수 있습니다. 오픈과 클릭은 마케팅 성과를 측정하고 전략을 개선하는데 참고할 수 있는 중요한 데이터입니다.이메일 코딩, 왜 다른가요?웹 디자이너와 퍼블리셔에게 이메일 코딩은 골치 아픈 작업입니다. 테이블 기반의 레이아웃 디자인, 인라인 스타일, 논리적이지 않은 구조의 마크업, 각종 꼼수로 대표되는 90년대로 돌아가는 것과도 같죠. 이유가 좀 많습니다.표준. 이메일에서 사용하는 HTML과 CSS는 웹 표준과는 거리가 멉니다. 이메일 클라이언트들 간에 표준도 없습니다.이메일 클라이언트들. 아웃룩, Gmail 같은 이메일 클라이언트들은 모두 HTML과 CSS를 다른 방식으로 해석하고 표시합니다. 가끔은 정말 그 정도가 심해서 어떤 클라이언트에서는 문제 없이 표시되는 이메일이 다른 클라이언트에서는 제대로 표시되지 않기도 합니다.꼼수. 정말 잘 디자인된 이메일들도 다양한 이메일 클라이언트에 대응하기 위해 각종 꼼수에 의존할 수 밖에 없습니다.자바스크립트. 자바스크립트는 웹에서 사용되는 가장 인기있는 언어 중 하나입니다. 하지만 이메일 코딩의 세계에 자바스크립트의 자리는 없습니다. 보안 문제로 이메일 클라이언트들이 자바스크립트를 차단하기 때문이죠. 당연한 처사입니다. 하지만 이 때문에 이메일에서 인터랙션은 포기해야 합니다.인라인 스타일(Inline styles). 웹에서는 본문의 구조(structure)를 정의하는 것과 스타일을 정의하는 것을 분리하여 더 쉽게 스타일을 관리할 수 있습니다. 하지만 대부분의 이메일 클라이언트들은 인라인 스타일(HTML 태그에 직접 스타일을 정의하는 방식)만 지원하기 때문에, 이메일에서는 어쩔 수 없이 인라인 스타일을 사용해야 합니다.다행히 많은 사람들이 시대에 뒤떨어진 이메일 코딩 환경에서 나름의 해법을 찾기 위해 노력하고 있습니다. 앞서 경험한 사람들이 그 결과물을 더 많은 사람들과 나누기 위해 공개하기도 합니다.Responsive Email Templates: 반응형으로 만든 다양한 유형의 이메일 템플릿을 무료로 다운로드 할 수 있습니다.The Ultimate Guide to CSS: 이메일 클라이언트별로 지원하거나 지원하지 않는 태그들이 일목요연하게 정리되어 있습니다.참고: Can Email Be Responsive?#슬로워크 #스티비 #마케팅 #마케터 #디자인 #디자이너 #CSS #인사이트 #꿀팁
조회수 2331

MySQL의 Transaction Isolation Level (Lock에 관하여)

편집자 주문맥에 따라 ‘Transaction’과 ‘트랜잭션’으로 영어와 한글을 혼용함.문맥에 따라 ‘LOCK’과 ‘lock’으로 대문자와 소문자를 혼용함.OverviewMySQL DB는 일반적인 운영환경에서 뛰어난 성능을 제공합니다. 특히 적은 양의 자료가 빈번하게 교류되는 환경에서는 더욱 빛을 발하죠. 국내에서는 주로 작은 규모의 웹사이트를 구축할 때 MySQL을 사용합니다. 그런데 문제는 사이트의 규모가 커지면서부터 생긴다는 것이죠. 조금씩 느려지는 Query가 생기면 원인도 파악하고, Query를 튜닝하고, 설계도 변경하지만 MySQL의 특징적인 문제를 곧 만나게 됩니다.테이블을 복제(CREATE SELECT)하거나 다른 테이블로 옮기면(INSERT SELECT) 작업을 하는 동안 SELECT 절에 있는 테이블들이 Lock이 걸립니다. 게다가 다른 Session에서 해당 테이블을 수정(UPDATE / DELETE)하면 복제와 이동을 마칠 때까지 대기 상태로 있어야 한다는 것입니다. 이러한 문제는 시스템을 구축하고 자료가 일정량 쌓이기 전까지는 알 수 없습니다. 또한 Oracle과 같은 DB를 사용하던 사용자가, MySQL을 사용하면 이와 같은 문제가 있을 것이라고 생각하기도 어렵습니다.이러한 특징을 가진 MySQL의 Transaction Isolation Level을 알아보고자 합니다. Transaction Isolation Level 은 Transaction의 경리 수준을 말합니다. 트랜잭션 처리 시 다른 트랜잭션에서 접근해 자료를 수정하거나 볼 수 있도록 하는 수준입니다.Transaction Isolation Level의 종류와 특성Transaction Isolation Level에는 READ UNCOMMITTED, READ COMMIITED, REPEATABLE READ, SERIALIZE 네 가지 종류가 있습니다. 1)READ UNCOMMITTED1) COMMIT 되지 않은 데이터에 다른 트랜잭션에서 접근할수 있다.2) INSERT, UPDATE, DELETE 후 COMMIT 이나 ROLLBACK에 상관없이 현재의 데이터를 읽어온다.3) ROLLBACK이 될 데이터도 읽어올 수 있으므로 주의가 필요하다.4) LOCK이 발생하지 않는다.READ COMMIITED1) COMMIT 된 데이터에 다른 트랜잭션에서 접근할 수 있다.2) 구현 방식이 차이 때문에 Query를 수행한 시점의 데이터와 정확하게 일치하지 않을 수 있다.3) LOCK이 발생하지 않는다.4) MySQL에서 많은 양의 데이터를 복제하거나 이동할 때 이 LEVEL을 추천한다.REPEATABLE READ1) Default LEVEL이다.2) SELECT시 현재 시점의 스냅샷을 만들고 스냅샷을 조회한다.3) 동일 트랜잭션 내에서 일관성을 보장한다.4) record lock과 gap lock이 발생한다.5) CREATE SELECT, INSERT SELECT시 lock이 발생한다.SERIALIZE1) 가장 강력한 LEVEL이다.2) SELECT 문에 사용하는 모든 테이블에 shared lock이 발생한다.LOCK과 테이블, 어떻게 해결할 수 있을까?지금부터는 관련된 내용을 확인해보겠습니다. 우선 현재의 경리 수준부터 알아보겠습니다.mysql> SHOW VARIABLES WHERE VARIABLE_NAME='tx_isolation'; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | tx_isolation | REPEATABLE-READ | +---------------+-----------------+ 1 row in set (0.00 sec) 다음으로 TEST 테이블을 만듭니다. 이때 SELECT절의 테이블을 UPDATE할 경우, 대기 상태로 빠지는 것을 확인해보겠습니다. 테이블을 만들고 상태를 확인합니다.CREATE TABLE test.TB_PROD_BAS_TEST ( PRIMARY KEY (PROD_ID) ) SELECT T101.PROD_ID ,T101.PROD_NM ,T101.PROD_EN_NM ,T101.PROD_MEMO FROM test.TB_PROD_BAS T101 ; -- 생성시 INFORMATION_SCHEMA.PROCESSLIST 로 상태를 확인합니다. mysql> SELECT -> * -> FROM INFORMATION_SCHEMA.PROCESSLIST -> WHERE USER = 'hansj' -> AND COMMAND <> 'Sleep' -> \G *************************** 1. row *************************** ID: 11004 USER: hansj HOST: 192.168.1.150:50711 DB: test COMMAND: Query TIME: 5 STATE: Sending data INFO: CREATE TABLE test.TB_PROD_BAS_TEST ( PRIMARY KEY (PROD_ID) ) SELECT T101.PROD_ID ,T101.PROD_NM ,T101.PROD_EN_NM ,T101.PROD_MEMO FROM test.TB_PROD_BAS T101 1 row in set (0.00 sec) 다음으로 테이블 생성 시 UPDATE를 해 대기 상태로 빠지는지 확인해보겠습니다.UPDATE test.TB_PROD_BAS SET PROD_MEMO = 'TEST' WHERE PROD_ID = 1 ; mysql> SELECT -> * -> FROM INFORMATION_SCHEMA.PROCESSLIST -> WHERE USER = 'hansj' -> AND COMMAND <> 'Sleep' -> \G *************************** 1. row *************************** ID: 11004 USER: hansj HOST: 192.168.1.150:50711 DB: test COMMAND: Query TIME: 24 STATE: Sending data INFO: CREATE TABLE test.TB_PROD_BAS_TEST ( PRIMARY KEY (PROD_ID) ) SELECT T101.PROD_ID ,T101.PROD_NM ,T101.PROD_EN_NM ,T101.PROD_MEMO FROM test.TB_PROD_BAS T101 *************************** 2. row *************************** ID: 11006 USER: hansj HOST: 192.168.1.150:50719 DB: test COMMAND: Query TIME: 22 *****이부분 중요합니다.****** STATE: updating *****이부분 중요합니다.****** INFO: UPDATE test.TB_PROD_BAS SET PROD_MEMO = 'TEST' WHERE PROD_ID = 1 2 rows in set (0.00 sec) 위의 TIME을 보면 테이블이 생성될 때까지 대기하고, UPDATE 문의 상태가 updating 으로 표시됩니다. 하지만 이렇게 나올 경우 건수가 많으면 실제 UPDATE 중인지 대기상태인지 확인하기가 어렵습니다. LOCK이 걸린 테이블을 확인하려면 INNODB LOCK 테이블로 정확하게 알 수 있습니다. 아래 세 가지 테이블로 확인해보겠습니다. 보다 자세한 설명은 MySQL 홈페이지를 확인합니다.information_schema.INNODB_TRXLOCK을 걸고 있는 프로세스 정보information_schema.INNODB_LOCK_WAITS현재 LOCK이 걸려 대기중인 정보information_schema.INNODB_LOCKSLOCK을 건 정보위의 각 항목마다 테이블 생성 및 UPDATE 시 정보가 어떻게 나타나는지 확인해보겠습니다.1.information_schema.INNODB_TRXmysql> SELECT -> T101.TRX_ID -> ,T101.TRX_STATE -> ,T101.TRX_STARTED -> ,T101.TRX_REQUESTED_LOCK_ID -> ,T101.TRX_WAIT_STARTED -> ,T101.TRX_WEIGHT -> ,T101.TRX_MYSQL_THREAD_ID -> ,T101.TRX_ISOLATION_LEVEL -> ,SUBSTR(T101.TRX_QUERY,1,10)AS TRX_QUERY -> FROM information_schema.INNODB_TRX T101 -> ; +---------+-----------+---------------------+-----------------------+---------------------+------------+---------------------+---------------------+------------+ | TRX_ID | TRX_STATE | TRX_STARTED | TRX_REQUESTED_LOCK_ID | TRX_WAIT_STARTED | TRX_WEIGHT | TRX_MYSQL_THREAD_ID | TRX_ISOLATION_LEVEL | TRX_QUERY | +---------+-----------+---------------------+-----------------------+---------------------+------------+---------------------+---------------------+------------+ | 8771591 | LOCK WAIT | 2019-05-27 16:15:53 | 8771591:70031:4:306 | 2019-05-27 16:15:53 | 2 | 11006 | REPEATABLE READ | UPDATE tes | | 8771586 | RUNNING | 2019-05-27 16:15:51 | NULL | NULL | 1538969 | 11004 | REPEATABLE READ | CREATE TAB | +---------+-----------+---------------------+-----------------------+---------------------+------------+---------------------+---------------------+------------+ 2 rows in set (0.00 sec) TRX_ID_STATE트랜잭션의 상태를 나타냅니다. 실행 중인지 LOCK WAIT 상태인지 알 수 있습니다.TRX_MYSQL_THREAD_IDPROCESSLIST 의 ID를 나타냅니다.TRX_ISOLATION_LEVELISOLATION LEVEL을 나타냅니다.따라서 위의 내용을 보면 CREATE TABLE이 실행 중인 것과, UPDATE가 LOCK WAIT인 것, 그리고 관련된 PROCESSLIST의 ID까지도 알 수 있습니다2.information_schema.INNODB_LOCK_WAITSmysql> SELECT -> * -> FROM information_schema.INNODB_LOCK_WAITS T101 -> ; +-------------------+---------------------+-----------------+---------------------+ | requesting_trx_id | requested_lock_id | blocking_trx_id | blocking_lock_id | +-------------------+---------------------+-----------------+---------------------+ | 8771591 | 8771591:70031:4:306 | 8771586 | 8771586:70031:4:306 | +-------------------+---------------------+-----------------+---------------------+ 1 row in set (0.01 sec) requesting_trx_idLOCK WAIT 인 TRX_IDblocking_trx_idLOCK 을 건 TRX_ID현재 LOCK이 걸린 TRX_ID와 LOCK을 걸어둔 TRX_ID를 알 수 있습니다.3.information_schema.INNODB_LOCKSmysql> SELECT -> * -> FROM information_schema.INNODB_LOCKS -> ; +---------------------+-------------+-----------+-----------+----------------------+------------+------------+-----------+----------+-----------+ | lock_id | lock_trx_id | lock_mode | lock_type | lock_table | lock_index | lock_space | lock_page | lock_rec | lock_data | +---------------------+-------------+-----------+-----------+----------------------+------------+------------+-----------+----------+-----------+ | 8771591:70031:4:306 | 8771591 | X | RECORD | `test`.`TB_PROD_BAS` | PRIMARY | 70031 | 4 | 306 | 1 | | 8771586:70031:4:306 | 8771586 | S | RECORD | `test`.`TB_PROD_BAS` | PRIMARY | 70031 | 4 | 306 | 1 | +---------------------+-------------+-----------+-----------+----------------------+------------+------------+-----------+----------+-----------+ 2 rows in set (0.01 sec) lock_trx_idLOCK 과 관련된 TRX_IDlock_modeX 쓰기, S 읽기 2)어떤 테이블이 LOCK을 걸고 있는지 알 수 있습니다.위의 내용들을 통해 REPEATABLE READ에서 CREATE SELECT시 SELECT 테이블에 LOCK이 걸려 UPDATE가 대기하게 되는 것을 알 수 있습니다. 이번에는 Transaction Isolation Level 을 READ COMMIITED로 변경하고 CREATE SELECT 및 UPDATE를 진행해보겠습니다.SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; SHOW VARIABLES WHERE VARIABLE_NAME='tx_isolation'; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | tx_isolation | READ-COMMITTED | +---------------+-----------------+ 1 row in set (0.00 sec) UPDATE 문은 다음과 같이 수행됩니다. mysql> UPDATE test.TB_PROD_BAS -> SET PROD_MEMO = 'TEST' -> WHERE PROD_ID = 1 -> ; Query OK, 0 rows affected (0.04 sec) Rows matched: 1 Changed: 0 Warnings: 0 기존에 대기했던 것과 다르게 0.04초가 걸렸습니다.mysql> SELECT -> * -> FROM INFORMATION_SCHEMA.PROCESSLIST -> WHERE USER = 'hansj' -> AND COMMAND <> 'Sleep' -> \G *************************** 1. row *************************** ID: 11004 USER: hansj HOST: 192.168.1.150:50711 DB: test COMMAND: Query TIME: 9 STATE: Sending data INFO: CREATE TABLE test.TB_PROD_BAS_TEST ( PRIMARY KEY (PROD_ID) ) SELECT T101.PROD_ID ,T101.PROD_NM ,T101.PROD_EN_NM ,T101.PROD_MEMO FROM test.TB_PROD_BAS T101 1 row in set (0.00 sec) -- 프로세스 정보도 CREATE TABLE 만 진행중임을 알수 있습니다. mysql> SELECT -> T101.TRX_ID -> ,T101.TRX_STATE -> ,T101.TRX_STARTED -> ,T101.TRX_REQUESTED_LOCK_ID -> ,T101.TRX_WAIT_STARTED -> ,T101.TRX_WEIGHT -> ,T101.TRX_MYSQL_THREAD_ID -> ,T101.TRX_ISOLATION_LEVEL -> ,T101.TRX_QUERY -> FROM information_schema.INNODB_TRX T101 -> ; +---------+-----------+---------------------+-----------------------+------------------+------------+---------------------+---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ | TRX_ID | TRX_STATE | TRX_STARTED | TRX_REQUESTED_LOCK_ID | TRX_WAIT_STARTED | TRX_WEIGHT | TRX_MYSQL_THREAD_ID | TRX_ISOLATION_LEVEL | TRX_QUERY | +---------+-----------+---------------------+-----------------------+------------------+------------+---------------------+---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 8771856 | RUNNING | 2019-05-27 17:17:45 | NULL | NULL | 4594347 | 11004 | READ COMMITTED | CREATE TABLE test.TB_PROD_BAS_TEST ( PRIMARY KEY (PROD_ID) ) SELECT T101.PROD_ID ,T101.PROD_NM ,T101.PROD_EN_NM ,T101.PROD_MEMO FROM test.TB_PROD_BAS T101 | +---------+-----------+---------------------+-----------------------+------------------+------------+---------------------+---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) READ COMMITTED LEVEL로 CREATE만 수행 중인 것을 알 수 있습니다.mysql> SELECT -> * -> FROM information_schema.INNODB_LOCK_WAITS T101 -> ; Empty set (0.00 sec) mysql> SELECT -> * -> FROM information_schema.INNODB_LOCKS -> ; Empty set (0.00 sec) LOCK을 걸고 걸린 것이 없어 내용도 없습니다.Conclusion지금까지 Transaction Isolation Level 을 기준으로 CREATE SELECT 시 SELECT 에 사용되는 테이블도 LOCK이 걸릴 수 있는 것을 확인했고, 그에 따른 해결 방법까지 알아봤습니다.INSERT INTO SELECT에서도 같은 현상이 나타납니다. 그렇기 때문에 운영 중인 테이블을 복제(CREATE SELECT)하거나 다른 테이블로 옮길 경우(INSERT SELECT) Transaction Isolation Level을 READ COMMITTED 변경하고 작업하기를 권장합니다.그렇지 않으면 관련된 TABLE은 LOCK이 걸리고, 관련 Query들이 대기 상태로 빠지면서 시스템 장애가 발생할지도 모릅니다.참고1)MySQL :: MySQL 5.6 Reference Manual :: 14.7.2.1 Transaction Isolation Levels2)MySQL :: MySQL 5.6 Reference Manual :: 14.7.1 InnoDB Locking글한석종 부장 | R&D 데이터팀[email protected]브랜디, 오직 예쁜 옷만
조회수 1758

효율적인 회의를 위해 필요한 것들

일반적으로 회의는 짧은 시간 안에 다수의 팀원들의 소통을 통해팀의 목표를 확인하고,업무에 필요한 정보를 공유하고,빠르게 의사결정을 진행하는,하는 중요한 업무이고 무엇보다회의를 참여한 모든 사람들의 소중한 시간과 리소스를 모은다.라는 점에서 매우 중요한 업무입니다. 그러나, 잘못된 회의 때문에 목표를 명확하게 알 수 없고, 필요 없는 정보 때문에 논지가 흐려져 정확하게 의사결정을 할 수없다면, 정말 비싼 낭비가 될 수 있습니다.동료 간의 오버 커뮤니케이션은 필요한 덕목 중 하나지만,목표가 정해져 있는 회의에서 오버 커뮤니케이션은 시간낭비입니다.그래서 오늘은 이 글은 목적에 맞는, 목표를 확인하고, 정보를 공유하고, 의사결정과 수렴을 명확하게 할 수 있도록 도와주는 회의 방법에 대해 원론적으로 고민해 보고 수행할 수 있도록 해 보도록 제안해 보도록 하겠습니다. (애자일 시리즈도 곧 나올 예정이니 기다려 주세요!)너무 많은 주제와 목표, 참여자는 국물맛을 망칠 뿐이죠!효과적인 회의를 위해 필요한 요소1. 명확한 회의 주제 회의를 만들기 전 “왜 회의를 해야 하는 건지, 목적과 얻고자 하는 것은 무엇인지”에 대해 회의 발의자는 명확하게 설정하고 진행할 수 있어야 합니다.2. 회의에 참여하는 인원에 대한 고려"일단 회의에 필요한 사람들이라고 생각하면 다 모은다.”는 생각으로 참여자를 모으게 되면모두가 공유하는 배경지식이 없을 경우 명확히 의사결정을 할 수 없고,필요한 사람들에게 필요한 정보가 가는 것이 아닌 불필요한 정보전달로 업무의 모호함을 일으킬 수 있고,회의 참석자 역시 왜 자신이 해당 회의에 들어왔는지 의도가 파악되지 않아 혼란을 야기할 수 있어서,회의 발의자는 회의 주제를 명확하게 하는 것만큼 어떤 인원이 참여해야 할 지에 대해 고민해야 합니다.회의 참가가 반드시 필요한 인원을 예시를 들자면,발의된 내용에 의사결정을 할 수 있는 자배경지식에 대해 정확히 알고 있는 자의사결정에 도움을 줄 수 있는 자해당 의사결정으로 업무에 영향을 미치는 자로, 이외에 부분도 어느 정도 고려할 수 있지만, 명료하게 커뮤니케이션을 할 수 최소한의 인원을 모으는 것이 가장 중요합니다.3. 회의를 통해 얻을 산출물 회의를 통해 얻어갈 산출물(또는 예상하는 회의의 Outcome)이 없는 회의는 명확한 주제 없이 흘러가거나목적에 대해 관철시키지 못하는 방향으로 흐르게 돼 회의의 논지를 흐리게 됩니다. 그리고 논지가 흐린 회의는 길고 의미 없는 회의시간으로 진행돼, 남는 게 없는 회의를 하게 됩니다. 흔히 “회의록"이라는 것이 산출물이라고 생각할 수 있지만, 회의록은 “회의의 기록”이지 회의에서 얻고자 하는 결론을 얻어낸 것이 아닙니다. 그래서 제안드리는 부분은 발의자가 회의 시작 전 회의를 통해 얻어내고자 하는 산출물에 대해 참여자와 공유하거나, 어젠다를 공유해 배경과 과정에 대해 설명하고, 회의 참여자도 산출물에 대해 같이 고민할 수 있는 방향으로 진행할 수 있게 합니다.4. 회의의 과정, 어젠다 설정과 진행, 그리고 타임 박싱“일단 이야기를 시작해 볼까?”나 “내가 다 준비해 왔으니, 이거 설명하고 회의 끝내면 되겠다.” 아니면, "기왕 모였으니 이야기도 해볼까?" 등으로 어젠다 설정과 타임라인 없이 회의를 진행하면,대화를 어떻게 시작하고 어떻게 끝내야 할 것인지에 대해 명확하지 못하고정해진 시간보다 더 많은 시간이 소요되될 수 있고이로 인해서명확하지 못한 산출물을 얻어가거나회의가 아닌 설명회로 끝나거나회의가 삼천포로 빠지게 되는목적과 결과에 벗어난 회의로 빠질 수밖에 없습니다. 그러므로, 회의를 진행하는 발의자는 목적 달성과 명확한 산출물을 위해 회의 참여자들과 어떻게 커뮤니케이션을 진행해야 하는지, 어떤 순서와 과정으로 커뮤니케이션을 진행해야 하는지 확인하고(어젠다 설정), 회의에 맞지 않는 이야기가 나올 경우 명확하게 정리하고(목적 주지), 모든 참여자가 회의에 집중할 수 있도록 환경을 만들고(외부 요소, 잡담 차단),회의 진행에 시간을 명확하게 잡아(타임 박싱) 회의시간을 최대한 넘어가게 하지 않도록,회의를 진행해야 합니다.5. 회의 참여자의 집중이야기가 시작되었을 때 시작대는 타이핑 소리, 바로 옆에 있는 직원과 다른 이야기를 공유하는 소리(같은 주제더라도 모든 사람이 아닌 둘이서만 공유하는 소리) 등은 모든 회의에 참여하는 사람들의 집중을 흐릴뿐더러, 한번 공유한 내용을 두 번 세 번 다시 공지해야 하는 상황을 만들 수 있습니다. 정말 중요한 사항이 있다 라고 한다면, 회의를 참가하지 않거나 회의에서 나올 때 양해를 구하는 것이 모두에게 효과적입니다.그렇다면, 효과적인 회의를 위해 내가 해야 할 일은 무엇일까요?회의 발의자회의를 발의하고, 진행하는 사람. 발의한 사람의 의견이 필요할 경우, 진행하는 사람을 따로 두는 것도 좋으나, 배경과 목적을 가장 잘 아는 사람이 발의자 이기 때문에 진행을 같이 하는 게 더 좋습니다.회의에 대해 명확하게 준비해 주세요회의 시작 전회의를 진행하는 배경과 목적회의를 통해 얻어야 할 산출물회의에 필요한 인원회의 어젠다등을 준비하고 예상하는 시간 안에 회의를 잘 마칠 수 있도록 스코핑과 준비에 노력해 주세요.(나의 시간이 중요하듯 회의에 참여한 사람들의 시간도 중요하다는 것을 잊지 말아주세요).회의 목적과 시간을 참여자에게 미리 설명해 주세요회의시간이 시작되면(또는 시작 전), 참여자들에게 구두상으로 또는 메일로라도회의를 통해 얻어가는 목적회의 시간 (열리는 시간과 기간)를 알려주세요. 회의에 대한 정보를 더 정확하게 알 수록 회의를 참여자들도 더 집중해서 회의에 참여할 수 있습니다.회의를 진행할 사람을 반드시 어사인 해주세요회의 진행자를 반드시 어사인해 주세요(매우 중요!). 대부분은 발의자가 진행을 하겠지만, 발의자가 의견을 내고 보다 자유로운 자리에서 회의를 보고 싶다고 한다면, 해당 회의를 드라이브할 수 있는 Facilitator를 두고 진행하는 것이 반드시 필요합니다. Facilitator는 회의 어젠다에 따라 의견 수렴 및 정리를 하고, 잘 진행될 수 있도록 의견을 내기보단 진행에 집중해야 합니다.회의 시작 전, 어젠다에 대해 공유해 주세요회의 시작 시 모두가 모이면, 이번 회의는 어떻게 시작할 것이고 어떻게 끝이날 것인지에 대해 간단히 공유 휴 시작하게 되면 과정과 결과에 대해 서로가 보다 쉽게 접근할 수 있습니다. 저는 개인적으로 시작하기 전 화이트보드에 어젠다와 종료 시간을 적어놓고 시작하는 습관을 들여 모든 사람들이 쉽게 회의에 참여할 수 있도록 노력하는 편입니다.발의자 또는 Facilitor는 회의 주제를 벗어나는 이야기는 과감히 정리하고, 목표시간을 넘길 경우 과감히 대화를 중단시켜 주세요회의가 길어지거나, 집중력이 흐트러질 경우, 주제가 벗어난 이야기들이 나오고, 목표와는 다른 이야기들이 나올 수 있습니다. 그럴 때마다 회의 진행자는 의도치 않은 부분이 나온다 라고 할 경우, 다시 목표하는 부분으로 돌아와 이야기할 수 있도록 가이드해 주세요 해당 부분에 대한 이야기를 해야 할 필요가 있다고 해도, 주제와 벗어났다면, 다른 회의시간을 잡는 게 낫습니다.회의 참여자회의 때 전화기와 노트북은 잠시 꺼두셔도 좋습니다.(정말 진짜 진짜 제일 중요합니다!) 진짜 회의와 상관없이 커뮤니케이션을 위해 노트북이 필요하다면, 필요한 일을 마치고 회의에 들어와 주세요. 한 명의 정신 분산이 다른 사람들의 생산성을 떨어뜨릴 수 있습니다.잡담은 나중에. 모든 회의 참여자와 공유할 이야기가 아니면 지양해 주세요.다른 이야기 도중에 콘텍스트가 흐려질 수 있고, 두 그룹, 세 그룹으로 나눠 이어지는 대화는 회의에 집중을 해치고 회의시간을 낭비하게 됩니다.무엇보다도 집중해 주세요.회의에 집중하는 것이 무엇보다도 가장 중요하겠죠?오늘도 정신없고 긴 글이 나와버렸네요. 최근에 업무도 많아지고 다양한 업무를 하다 보니 글을 잘 못쓰게 되었네요. (네 다 핑계고 열심히 다시 쓸 수 있도록 환경을 좀 바꿔볼까 합니다.)다음글은 애자일 시리즈에 마지막글이 발행될 예정입니다! 마지막이라고 하기엔 앞으로도 제가 일하고 있는 업무환경과 일하고 있는 팀에 대한 글을 많이 쓸 예정이라 민망스럽긴 하지만, 그래도 서둘러 더 재밌는 글 많이 많이 올릴 수 있게 할게요 오늘도 읽어주셔서 감사합니다!#코인원 #블록체인 #기술기업 #암호화폐 #스타트업인사이트
조회수 1178

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

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

블로그 운영 방법에서 엿보는 VCNC의 개발문화

VCNC에서 엔지니어링 블로그를 시작하고 벌써 새로운 해를 맞이하였습니다. 그동안 여러 글을 통해 VCNC 개발팀의 이야기를 들려드렸습니다. 이번에는 엔지니어링 블로그 자체를 주제로 글을 적어보고자 합니다. 저희는 워드프레스나 텀블러와 같은 일반적인 블로깅 도구나 서비스를 사용하지 않고 조금은 개발자스럽다고 할 수 있는 특이한 방법으로 엔지니어링 블로그를 운영하고 있습니다. 이 글에서는 VCNC 개발팀이 엔지니어링 블로그를 운영하기 위해 이용하는 방법들을 소개하고자 합니다. 그리고 블로그를 운영하기 위해 방법을 다루는 중간중간에 개발팀의 문화와 일하는 방식들에 대해서도 간략하게나마 이야기해보고자 합니다.블로그에 사용하는 기술들Jekyll: Jekyll은 블로그에 특화된 정적 사이트 생성기입니다. GitHub의 Co-founder 중 한 명인 Tom Preston-Werner가 만들었으며 Ruby로 작성되어 있습니다. Markdown을 이용하여 글을 작성하면 Liquid 템플릿 엔진을 통해 정적인 HTML 파일들을 만들어 줍니다. VCNC 엔지니어링 블로그는 워드프레스같은 블로깅 도구를 사용하지 않고 Jekyll을 사용하고 있습니다.Bootstrap: 블로그 테마는 트위터에서 만든 프론트엔드 프레임워크인 Bootstrap을 이용하여 직접 작성되었습니다. Bootstrap에서 제공하는 다양한 기능들을 가져다 써서 블로그를 쉽게 만들기 위해 이용하였습니다. 덕분에 큰 공을 들이지 않고도 Responsive Web Design을 적용할 수 있었습니다.S3: S3는 AWS에서 제공되는 클라우드 스토리지 서비스로서 높은 가용성을 보장합니다. 일반적으로 파일을 저장하는 데 사용되지만, 정적인 HTML을 업로드하여 사이트를 호스팅하는데 사용할 수도 있습니다. 아마존의 CTO인 Werner Vogels 또한 자신의 블로그를 S3에서 호스팅하고 있습니다. VCNC Engineering Blog도 Jekyll로 만들어진 HTML 파일들을 아마존의 S3에 업로드 하여 운영됩니다. 일단 S3에 올려두면 운영적인 부분에 대한 부담이 많이 사라지기 때문에 S3에 올리기로 하였습니다.CloudFront: 브라우저에서 웹페이지가 보이는 속도를 빠르게 하려고 아마존의 CDN서비스인 CloudFront를 이용합니다. CDN을 이용하면 HTML파일들이 전 세계 곳곳에 있는 Edge 서버에 캐싱 되어 방문자들이 가장 가까운 Edge를 통해 사이트를 로딩하도록 할 수 있습니다. 특히 CloudFront에 한국 Edge가 생긴 이후에는 한국에서의 응답속도가 매우 좋아졌습니다.s3cmd: s3cmd는 S3를 위한 커맨드 라인 도구입니다. 파일들을 업로드하거나 다운로드 받는 등 S3를 위해 다양한 명령어를 제공합니다. 저희는 블로그 글을 s3로 업로드하여 배포하기 위해 s3cmd를 사용합니다. 배포 스크립트를 실행하는 것만으로 s3업로드와 CloudFront invalidation이 자동으로 이루어지므로 배포 비용을 크게 줄일 수 있었습니다.htmlcompressor: 정적 파일들이나 블로그 글 페이지들을 s3에 배포할 때에는 whitespace 등을 제거하기 위해 htmlcompressor를 사용합니다. 또한 Google Closure Compiler를 이용하여 javascript의 길이도 줄이고 있습니다. 실제로 서버가 내려줘야 할 데이터의 크기가 줄어들게 되므로 로딩속도를 조금 더 빠르게 할 수 있습니다.블로그 관리 방법앞서 소개해 드린 기술들 외에도 블로그 글을 관리하기 위해 다소 독특한 방법을 사용합니다. 개발팀의 여러 팀원이 블로그에 올릴 주제를 결정하고 서로의 의견을 교환하기 위해 여러 가지 도구를 이용하는데 이를 소개하고자 합니다. 이 도구들은 개발팀이 일할 때에도 활용되고 있습니다.글감 관리를 위해 JIRA를 사용하다.JIRA는 Atlassian에서 만든 이슈 관리 및 프로젝트 관리 도구입니다. VCNC 개발팀에서는 비트윈과 관련된 다양한 프로젝트들의 이슈 관리를 위해 JIRA를 적극적으로 활용하고 있습니다. 제품에 대한 요구사항이 생기면 일단 백로그에 넣어 두고, 3주에 한 번씩 있는 스프린트 회의에서 요구사항에 대한 우선순위를 결정합니다. 그 후 개발자가 직접 개발 기간을 산정한 후에, 스프린트에 포함할지를 결정합니다. 이렇게 개발팀이 개발에 집중할 수 있는 환경을 가질 수 있도록 하며, 제품의 전체적인 방향성을 잃지 않고 모두가 같은 방향을 향해 달릴 수 있도록 하고 있습니다.VCNC 개발팀이 스프린트에 등록된 이슈를 얼마나 빨리 해결해 나가고 있는지 보여주는 JIRA의 차트.조금만 생각해보시면 어느 부분이 스프린트의 시작이고 어느 부분이 끝 부분인지 아실 수 있습니다.위와 같은 프로젝트 관리를 위한 일반적인 용도 외에도 엔지니어링 블로그 글 관리를 위해 JIRA를 사용하고 있습니다. JIRA에 엔지니어링 블로그 글감을 위한 프로젝트를 만들어 두고 블로그 글에 대한 아이디어가 생각나면 이슈로 등록할 수 있게 하고 있습니다. 누구나 글감 이슈를 등록할 수 있으며 필요한 경우에는 다른 사람에게 글감 이슈를 할당할 수도 있습니다. 일단 글감이 등록되면 엔지니어링 블로그에 쓰면 좋을지 어떤 내용이 포함되면 좋을지 댓글을 통해 토론하기도 합니다. 글을 작성하기 시작하면 해당 이슈를 진행 중으로 바꾸고, 리뷰 후, 글이 발행되면 이슈를 해결한 것으로 표시하는 식으로 JIRA를 이용합니다. 누구나 글감을 제안할 수 있게 하고, 이에 대해 팀원들과 토론을 하여 더 좋은 글을 쓸 수 있도록 돕기 위해 JIRA를 활용하고 있습니다.JIRA에 등록된 블로그 글 주제들 중 아직 쓰여지지 않은 것들을 보여주는 이슈들.아직 제안 단계인 것도 있지만, 많은 주제들이 블로그 글로 발행되길 기다리고 있습니다.글 리뷰를 위해 Pull-request를 이용하다.Stash는 Attlassian에서 만든 Git저장소 관리 도구입니다. GitHub Enterprise와 유사한 기능들을 제공합니다. Jekyll로 블로그를 운영하는 경우 이미지를 제외한 대부분 콘텐츠는 평문(Plain text)으로 관리 할 수 있게 됩니다. 따라서 VCNC 개발팀이 가장 자주 사용하는 도구 중 하나인 Git을 이용하면 별다른 시스템의 도움 없이도 모든 변경 내역과 누가 변경을 했는지 이력을 완벽하게 보존할 수 있습니다. 저희는 이런 이유로 Git을 이용하여 작성된 글에 대한 변경 이력을 관리하고 있습니다.또한 Stash에서는 GitHub와 같은 Pull request 기능을 제공합니다. Pull request는 자신이 작성한 코드를 다른 사람에게 리뷰하고 메인 브랜치에 머지해 달라고 요청할 수 있는 기능입니다. 저희는 Pull request를 활용하여 상호간 코드 리뷰를 하고 있습니다. 코드 리뷰를 통해 실수를 줄이고 개발자 간 의견 교환을 통해 더 좋은 코드를 작성하며 서로 간 코드에 대해 더 잘 이해하도록 노력하고 있습니다. 새로운 개발자가 코드를 상세히 모른다 해도 좀 더 적극적으로 코드를 짤 수 있고, 업무에 더 빨리 적응하는데에도 도움이 됩니다.어떤 블로그 글에 대해 리뷰를 하면서 코멘트로 의견을 교환하고 있습니다.코드 리뷰 또한 비슷한 방법을 통해 이루어지고 있습니다.업무상 코드 리뷰 뿐만 아니라 새로운 블로그 글을 리뷰하기 위해 Pull request를 활용하고 있습니다. 어떤 개발자가 글을 작성하기 위해서 가장 먼저 하는 것은 블로그를 관리하는 Git 리포지터리에서 새로운 브랜치를 따는 것입니다. 해당 브랜치에서 글을 작성하고 작성한 후에는 새로운 글 내용을 push한 후 master 브랜치로 Pull request를 날립니다. 이때 리뷰어로 등록된 사람과 그 외 개발자들은 내용에 대한 의견이나 첨삭을 댓글로 달 수 있습니다. 충분한 리뷰를 통해 발행이 확정된 글은 블로그 관리자에 의해 master 브랜치에 머지 되고 비로소 발행 준비가 끝납니다.스크립트를 통한 블로그 글 발행 자동화와 보안준비가 끝난 새로운 블로그 글을 발행하기 위해서는 일련의 작업이 필요합니다. Jekyll을 이용해 정적 파일들을 만든 후, htmlcompressor 통해 정적 파일들을 압축해야 합니다. 이렇게 압축된 정적 파일들을 S3에 업로드 하고, CloudFront에 Invalidation 요청을 날리고, 구글 웹 마스터 도구에 핑을 날립니다. 이런 과정들을 s3cmd와 Rakefile을 이용하여 스크립트를 실행하는 것만으로 자동으로 이루어지도록 하였습니다. VCNC 개발팀은 여러 가지 업무 들을 자동화시키기 위해 노력하고 있습니다.또한, s3에 사용하는 AWS Credential은 IAM을 이용하여 블로그를 호스팅하는 s3 버킷과 CloudFront에 대한 접근 권한만 있는 키를 발급하여 사용하고 있습니다. 비트윈은 특히 커플들이 사용하는 서비스라 보안에 민감합니다. 실제 비트윈을 개발하는데에도 보안에 많은 신경을 쓰고 있으며, 이런 점은 엔지니어링 블로그 운영하는데에도 묻어나오고 있습니다.맺음말VCNC 개발팀은 엔지니어링 블로그를 관리하고 운영하기 위해 다소 독특한 방법을 사용합니다. 이 방법은 개발팀이 일하는 방법과 문화에서 큰 영향을 받았습니다. JIRA를 통한 이슈 관리 및 스프린트, Pull request를 이용한 상호간 코드 리뷰 등은 이제 VCNC 개발팀의 문화에 녹아들어 가장 효율적으로 일할 수 있는 방법이 되었습니다. 개발팀을 꾸려나가면서 여러가지 시행 착오를 겪어 왔지만, 시행 착오에 대한 반성과 여러가지 개선 시도를 통해 계속해서 더 좋은 방법을 찾아나가며 지금과 같은 개발 문화가 만들어졌습니다. 그동안 그래 왔듯이 앞으로 더 많은 개선을 통해 꾸준히 좋은 방법을 찾아 나갈 것입니다.네 그렇습니다. 결론은 저희와 함께 고민하면서 더 좋은 개발문화를 만들어나갈 개발자를 구하고 있다는 것입니다.저희는 언제나 타다 및 비트윈 서비스를 함께 만들며 기술적인 문제를 함께 풀어나갈 능력있는 개발자를 모시고 있습니다. 언제든 부담없이 [email protected]로 이메일을 주시기 바랍니다!
조회수 1086

[인터뷰] Humans of MEME, 그 여섯 번째 주인공을 만나다. - 일도 놀기도, 알차게 사는 유라의 이야기

안녕하세용!미미박서의 소소하지만 듣고 싶은 이야기를 담아오는 모뜨입니다!벌써 8월이 2주 정도 밖에 안남았네요세월이~~~~~야속훼~~~~~~~~~~~.. 쥬륵여러분미미박스의  PB 브랜드인 아임미미 를 알고 계신가용?1.2.3 작은 얼굴 메이크업의 필템인 아임 멀티스틱 과클릭해서 쓰는 편리한 버튼 타입의 매끄러운 촉감의 아임 틱톡 틴트 등바로 아임미미 제품인데용!(좌) 아임 멀티스틱 (우) 아임 틱톡 틴트이러한 화장품들은 바로 BM 분들의 손을 거쳐서 탄생하게 되는데요!그렇다면 BM 이란 무엇일까용?Brand Manager 의 약자로 브랜드 매니저는 제품의 생산에서부터 판매까지의  브랜드와 관련된 모든 과정을 관리하는 사람을 뜻합니다.화장품의 세세한 한 곳 한 곳 까지 바로 BM의 숨결이 들어갔다고 생각하시면 될 것 같아요 ~저는 이번 주에 바로 이 제품들이 탄생하는 곳인아임미미 브랜드 팀의 BM인 YURA를 만나보았습니다 !YURA의 이야기를 한 번 구경가볼까요 ?레고레고 레츠고~Q. 유라님에게 멋진 기억으로 자리잡은 곳이 있나요?A. 제가 21살~22살때 쯤 유럽여행을 다녀왔었는데 그 많은 곳 중에서 제일 여운이 남고 좋아했던 나라가 이탈리아였어요. 그렇게 다시 한국에 돌아와서 다시 이탈리아에 6개월정도 교환학생을 다녀왔어요. 대학교 1학년 때 영어 연극으로 ‘로미오와 줄리엣’ 에 참여한 적이 있었어요. 제가 줄리엣 역할을 했구요(웃음). 혹시 ‘레터스 투 줄리엣’ 이라는 영화 아세요? 그 영화를 보고 ‘베로나’라는 도시에 반했었어요. 아쉽게도 유럽 여행 중 그 도시를 일정상 가지 못했고, 그렇게 아쉬움을 간직한 채 다시 한국으로 돌아왔는데 대학교 교환학생 공고에 딱 베로나 대학이 있는 거예요. 그래서 바로 지원을 했고 결국 베로나를 갈 수 있었어요! 베로나에 있는 ‘줄리엣의 집(Casa di Giulietta)’ 에서 사람들이 사랑에 대한 편지를 적어 벽에 붙이고 가는데요. 정말 줄리엣의 집에 가면 벽면 가득 포스트잇이 붙어있어요. 마지막으로 베로나를 떠나오면서 남겼던 그 짧은 편지를 보면, 그 때의 기억이 아직도 생생한 것 같아요. 제 삶에 있어서 이탈리아에서 지냈던 것, 그리고 지내면서 다녔던 여행들. 그 경험들과 기억들이 주는 영향은 크고 긍정적인 것 같아요.베로나를 떠나기 전, 마지막 편지유라님이 처음 베로나에 도착했을 때 찍은 사진Q. 미미박스에 어떻게 합류하게되셨나요?A. 서브 스크립션 박스 시절의 미미박스부터 알았어요. 제가 20살~21살쯤 서브 스크립션을 구독했었고 상품도 만족스러웠어요. 그런데 점점 이제 사고 싶어하는 화장품을 사야겠다고 생각하며 구독을 끊고 미미박스를 잊어버리고 있었던 것 같아요. 그렇게 시간이 지나고 취업을 준비하면서 채용 사이트에서 실시간 검색순위 기업에 미미박스가 딱 눈에 들어오더라구요. 그러고 제가 찾아보니 예전에 서브 스크립션 박스로 구독했을 때보다 최근 몇 년 사이에 엄청나게 성장했더라구요. 저는 대학생 때부터 원래 화장품을 좋아했어요. 용돈이 생기기만 하면 화장품 사는데 쓰곤 했던 것 같아요. 제 전공이 완전히 뷰티 관련 일이랑은 전혀 상관이 없는 일이기도 하거든요. 그래서 막연하게 ‘뷰티업계가 나랑 잘 맞겠다’ 혹은 ‘나중에 뷰티업계로 직업을 가지면 좋겠다’ 라고 생각하기만 했었거든요. 근데 미미박스를 통해서 직무를 굳힌 것 같아요. 막연하게 추상적으로 생각했던 저의 꿈에서 미미박스를 통해 뷰티업계, 그리고 BM이라는 제가 완전히 원하는 직무를 찾게 되었어요. 그렇게 틀이 잡히며 열심히 찾아보고 면접 준비도 열심히 하고 다행이 잘 되어서 미미박스에 오게 되었어요. 전 정말 운이 좋았다라는 생각밖에 안들어요(웃음). 그렇게 제가 하고 싶은 일을 시작하게 되었고 앞으로도 더 잘할 수 있는 일들을 하고 싶어요.이렇게 일할 땐 열심히 개미처럼 일하고,  또 놀 때는 확실하게 베짱이처럼 놀면서 지내고 있어요. 지인들이 저보고 '진짜 알차게 산다'라고 하더라구요(웃음).이탈리아를 떠나오기 전, '좋은 곳 취직했으면 좋겠어' 라는 바람대로 이루어진 소망 Q.  항상 웃고 계신 유라님 덕분에 저도 덩달아 에너지를 받아요! 혹시 일을 하시면서 힘드신 적은 있으셨나요?A. 제품을 개발할 때부터 제품이 출시되기까지 정말 많은 공수가 들어가요. 처음 이 직무를 시작하기 전에는 잘 모르실 거에요. 화장품이 생산되는 모든 과정에 참여하게 되어요. 그 중에서 CT 테스트 라고 하여 제품 자체 기준, 감량 테스트도 진행해요. 예를 들면 아이라이너 같은 경우 휘발이 되면 빨리 마르거든요, 그럼 발색이 잘 안되어요. 그런 것들을 검사하며 낙하 테스트나 누수 테스트 등 고객분들이 제품을 받았을 때 최고의 경험을 하시도록 만들어나가는 일종의 과정인 것이에요.제품에 대한 컨셉 보드나 품평회 등 다 열심히 개발했더라도 CT에서 부적합 판정이나 기준에 미달되면 화장품이 아예 드랍 되어버려요. 일을 하는 데 있어서 제가 컨트롤할 수 있거나 열심히 하면 되는 부분에서는 스스로 마음을 잡고 열심히하면 되는데, 이렇게 기준이 미달 되어 드랍되면 제가 어쩔 수 없이 아무리 열심히 한 들 어떻게 할 수 없는 것이라 제 노력과 의지 밖의 일이라서 힘든 것 같아요.저는 입사한지 1년 정도 되어서 아직 경험이 많지는 않지만, 다른 BM 선임분들이 디자인 까지 다 나온 상태에서 드롭을 겪는 것을 보면서 정말 힘들것 같다는 생각이 들더라구요. 그래도 다시 새로운 제품을 만들기 위해 노력하는 과정을 반복하는 것을 보면 BM 은 정말 화장품을 좋아하는 사람이 일해야 하는 직무 같아요. 애정이 없으면 못할 것 같아요.Q. 유라님이 가진 특별한 것이 있으시면 소개해주세요!A. 저는 버킷리스트가 있어요. 20살 때 버킷리스트를 50개정도 세워서 지금까지 하나 하나 지워가고 있어요. 제가 이뤘던 것들로 교환학생 다녀오기, 해외에서 6개월 이상 살아보기, 스카이다이빙하기, 혼자 클럽가기, 혼자 여행해보기, 성적 All A+맞기, 수석해서 장학금 받기 등 있었어요. 하나 하나 버킷리스트를 지워가면서 다시 삶을 돌아보고 목표를 가지게끔 하는 것 같아요. 앞으로 남아있는 목록 중에 하나는, 제가 지금 I’M MEME BM 을 하고 있는데요. 언제가 되었든, 아임미미 히어로 제품을 무조건 만들고 싶어요. 지금 아임미미의 멀티스틱처럼 미미박스의 시그니처 제품을 꼭 개발하고 싶어요. 개발할 때까지 저 여기에 있을거에요(웃음). 지금은 전세계 어디 여성 파우치에 들어가 있는 ‘쿠션’이라는 카테고리가 2008년 이전에만 해도 없었는데 이제는 국내에 있는 브랜드들은 물론이며 글로벌 명품 브랜드에서도 앞다퉈 제품을 출시하고 있잖아요. 지금 화장품 시장이 포화 상태여서 특별한 무엇인가를 찾는 것이 어려운 일이지만 저의 원대한 꿈으로는 모든 고객들의 파우치에 들어갈 제품 혹은 카테고리를 꼭 만들고 싶어요.'간절히 원하면 이루어 진다' 라는 말이 있듯이,자신의 미래도 스스로 만들어갈 수 있는 것 같아요!시행착오를 겪지 않기 위해 하향 조정된 목표와 수준에서 안주하려는 마음보다는내가 원하는 것 혹은 간절히 바라는 것에 대해 도전적으로 생각해보는 것은 어떨까요?성장하고자 하는 미미박스에서성장하고자 하는 미미박서들과 이야기를 나누는 Humans of MEME이번 주의 이야기는 어떠셨나요? 새로운 이야기를 가지고 찾아오도록 하겠습니다아다음 미미박서의 이야기도 기대해주세요 !안녕히 계세용 꾸벅

기업문화 엿볼 때, 더팀스

로그인

/