스토리 홈

인터뷰

피드

뉴스

조회수 1919

[인터뷰] 인스타 떡볶이를 만든 주인공! 제이키친 이민재 대표님

한국식 간식 / 떡 전문몰 '윙잇'은 처음에 제이키친 떡볶이 단 한 제품을 판매하는 것으로 시작했다. 비록 시작은 초라했지만, 제품력 하나만을 믿고 인스턴트 이미지를 탈피한 야채가 포함된 건강한 떡볶이를 선보였다. 이런 마음을 고객들이 알아주셔서 일까? 기존의 반조리 떡볶이와는 다른 모습으로, 제이키친 떡볶이는 신선한 야채와 함께 배송하여 소비자들로부터 많은 호응을 얻었다.일명 '인스타 떡볶이' 불리우며, 고객들의 후기가 꾸준히 올라오고 있다.이후 본격적으로 '인스타 떡볶이'로 알려지며 '윙잇' 브랜드를 알리는 효자 노릇을 톡톡히 한 제이키친 떡볶이. 윙잇은 제이키친을 발판으로 최초 서비스 시작에 비해 판매 상품이 크게 늘어나게 되었고, 지금의 간식 전문몰로까지 이어져 왔다. 그 일련의 과정에서 윙잇과 제이키친은 유통사와 제조업체의 관계를 떠나 정말 특별한 인연이 된 것. 그런 의미에서 윙잇 창업 1000일을 앞두고, 제이키친 떡볶이 대표님을 만났다.제이키친 떡볶이, 이민재 대표님윙잇 : 안녕하세요. 대표님! 일단 윙잇과 시작을 함께 한 '제이키친 떡볶이'라 감회가 새롭습니다. (하하)윙잇과 함께 하면서 가장 기억에 남았던 순간부터 여쭤봐도 될까요? 이민재 대표 : 아무래도 첫 사업 시작을 함께한 순간이 아닐까 해요. 윙잇 공동 대표님과 셋이 모여, 서울 근교 촬영장에 가서 떡볶이 사진만 7시간을 촬영했었죠. 이다빈 대표님의 콘티에 따라서 멋진 사진이 연출될 때까지... 또 SNS 홍보로 첫 고객님이 떡볶이 3팩을 샀을 때 참 벅찼었답니다. 그땐 촬영한 사진을 보정 중이라 상세페이지 없이 오로지 글로만 홍보 중이었거든요. ㅎㅎ 팔린 게 신기했었습니다.윙잇 : 감사합니다! 현재 제이키친은 떡볶이 말고도 메밀소바, 돈까스 등 다양한 제품들이 출시되고 있는데요. 혹시 이 일을 하시기 전에 과거에는 어떤 일을 하셨는지요 ...?이민재 대표 : 저는 경기도 의왕시에 '웰메이드 김밥'이라는 동네 김밥집을 운영했었어요. 그래서 자연스럽게 김말이 / 만두 등 다양한 간식거리를 판매하며, 오프라인 매장에 내공 아닌 내공(?)을 쌓았죠. 가끔 동네 아주머니들과 수다를 떨며 인사이트도 얻고요. 제겐 소중한 경험과 추억이었어요.윙잇 : 아 그러셨군요, 그럼 많은 제품 중 온라인 판매로 떡볶이를 선택하신 이유는요? 이민재 대표 : 단순한 이유지만, 일단 떡볶이가 재료 손질이 쉽고 관리하기가 편해서 많은 업체들이 뛰어들지만...^^; 저희는 모든 재료에 배합 비율을 5g씩 조절해가며 최적의 밸런스를 찾기 위해 노력했습니다. 또 오프라인 장사를 하다 보면 여러 정보를 얻게 되는데, 가끔 매장에 어머님들이 오셔서 저에게 떡볶이에 대한 자신감을 심어주고 가세요.온라인 판매를 시작하게된 계기는 저희 단골 손님이 떡볶이가 너무 맛있다며 강원도에 계시는 어머니집으로 보낸다고 포장을 부탁하셨는데, 떡이랑 소스 외에 야채도 같이 넣어달라고 하시더라고요. 택배는 하루면 도착하니까 아이스팩과 함께 넣으면 된다고 하시면서요.... 그리곤 "택배로 한번 팔아보세요 사장님, 잘 될 것 같아요"라고 하고 나가시는데 그 순간 깜짝 놀랐어요. 당시의 저에겐 '떡볶이 택배'가 쇼킹한 일로 다가왔거든요. 그래서 우연찮은 기회에 결심을 하고 도전하게 되었어요.제이키친 떡볶이 (왼쪽 시계방향부터 짜장, 카레, 기본)윙잇 : 그렇다면 '제이키친 떡볶이'는 어떤 노력 끝에 탄생하게 되었나요?이민재 대표 : 김밥집 운영 당시에 만들었던 떡볶이는 전반적으로 맵고 칼칼하다는 의견이 많았어요. 그래서 어떻게 남녀노소 즐길 수 있는 떡볶이를 만들 수 있을까 정보를 수집해 가면서 자연스럽게 터득해 나갔답니다.일단 너무나 당연한 얘기지만 설탕 대신 양파로 단 맛을 내고, 고춧가루 대신 대파로 건강한 매운맛을 내자는거였어요! 게다가 당시엔 온라인으로 파는 반조리 떡볶이 중에는 야채를 함께 보내주는 업체는 없었거든요. (지금도 없습니다) 또 고춧가루도 원산지별로 다 테스트하고... 각 재료마다 최상의 맛을 내기위해 초반에 제조공장도 계속 돌아다니고 많은 노력을 했던 것 같애요. 그때의 노력이 지금의 자산이 되었죠. ㅎㅎ윙잇 : 그렇다면 제이키친 떡볶이가 시중  떡볶이와 다른 점이 있다면요?이민재 대표 : 제이키친 떡볶이는 내 가족, 내 아이도 믿고 먹일 수 있는 건강한 떡볶이예요. 맛의 결정타는 바로 재료인데, 제이키친의 주재료는 국산과 신선함에 있죠!우선 제이키친은,1) 국내산 고춧가루와 고추장을 사용해요. 캡사이신이 아닌 손수 빻은 청양고추를 넣어 만들어요. 2) 그리고 프리미엄 열풍 건조떡을 사용해요. 떡의 쫄깃함과 식감을 최대한 보존하기 위해 상온에서 떡을 말린 뒤 (기존 떡은 여기서 마무리) 열풍 기계를 이용해 한 번 더 떡을 건조시켜, 수분을 모두 제거해요.3) 어묵은 밀가루보다는 어육량이 높아서 텁텁하지 않고 떡볶이의 감칠맛을 더 살려주고 있어요. 마지막으로 4) 방부제나 냉동 식재료는 사용하지 않고요.제이키친 대표님의 맛과 재료에 대한 철학은 확고하다.윙잇 : 역시 SNS에서 유명한 이유가 있군요...지나가는 얘기로 혹시 대표님은 제이키친 떡볶이를 얼마나 많이 드셔보셨나요?이민재 대표 : 한 달 기준으로 고춧가루를 20kg 정도나 먹었으니... 단기간 동안 아마 200인분 정도를 먹은 것 같아요... 그때 당시에 너무나도 하고 싶은 생각이 간절했었거든요.윙잇 : 와 대박인걸요? 떡볶이를 만드면서 가장 주안점을 두는 부분이 있다면요.이민재 대표 : 무조건 위생부터 신경쓰죠. 개인 관리와 더불어, 정기적인 시설 소독을 통해 청결한 시스템을 한결같이 유지하려고 노력하고 있어요. 배송은 신선도 유지를 위해 월~금 오전 10시까지 주문 분에 한하여 당일 발주기준 '선입선출'원칙을 철저하게 지키고 있고요.이르자면 새벽에 야채를 다듬고, 떡을 압축하고, 48시간 숙성된 특제 소스를 선입선출해서 72시간 내에 소비자가 받으실 수 있도록 해요. 재료들이 '최상의 맛'을 내는 상태로 보내졌으면 하는거죠. (후문으로 어묵 공급업체는 저때문에 동선이 바꼈어요... 일부러 새벽에 가져다 주시고, 저때문에 고생이 많으십니다. 이 자리를 빌어 감사드려요 :)모든 공정에서 사람의 손을 거치지 않은 곳이 없는 제이키친 떡볶이.윙잇 : 대표님의 꼼꼼함이 느껴지는 부분이군요. 제이키친은 제조공정이 하나하나 정성이 들어간 수작업인데요. 자랑할 거리가 있다면요?이민재 대표 : 각 공정단계에서도 분업별로 쪼개어 세심하게 체크하는 편이예요. 예를 들자면, 야채 같은 경우는 흙이 있기 때문에, 흙이 안들어가게끔 2중 3중으로 체크를 하는거죠. 그래서 야채를 까시는 분, 깐 야채를 검수하시는 분, 야채를 씻으시는 분, 씻고 담는 분으로 나뉘어서 분업을 하고 있어요. (왼쪽부터) 윙잇 이다빈 대표와 제이키친 떡볶이 이민재 대표.윙잇 : 자, 이제 쑥스럽지만 대표님에게 '윙잇'은 어떤 서비스인가요?이민재 대표 : 윙잇은 단순히 판매업체라기 보다는 남다른 형제애가 느껴지는 것 같아요. 서로의 서비스가 시작될때부터 같이 으쌰으쌰 하다보니 약간 가족같은 느낌이예요. 서로 도움도 많이 받았고요. 애정이 가는 곳이예요. (윙잇의 1,000일! 미리 축하드려요^^)윙잇 : 윙잇 고객님께도 한마디 부탁드려요!이민재 대표 : 저희 제이키친은 언제나 고객님들을 위해 열심히 달리고 있답니다. 여러분들에게 '제이키친 떡볶이보다 맛있는 것은 없다!' 라고 피드백을 받을 때까지 정말 열심히 할테니 애정해주시면 감사드리겠습니다♥  - 다음 편에 계속 -#아그레아블 #윙잇 #제이키친 #인터뷰 #인스타떡볶이 #화제의그집
조회수 1326

디자이너 눈에 비친 조금 다른 세상 20가지

저도 원래 그렇진 않았어요. 그런데 어느 순간부턴가 눈에 색다른 콩깍지가 씌이더라구요. 아마 직업마다 세상을 바라보는 고유한 필터가 존재하기 마련인가봐요. 하루 종일 컴퓨터만 바라보고 있는 디자이너에겐 가끔 세상이 1920x1080픽셀의 세상으로 보이기도 해요. 친구들과 길을 걷다가도 왠지 혼자만 불편해지는 지점이 생겨요. 때론 아무도 모르지만 혼자 발견하고 키득키득하기도 해요. 용기내서 "저건 HG꼬딕씨 폰트야!" 라고 말해도 친구들의 반응은 "어쩌라고." 예요.그럴때면 종종 시무룩해지긴 하지만, 디자이너의 눈을 가지고 세상을 바라본다는 것은 꽤나 흥미진진한 일이예요. 제목만 보면 디자이너의 인사이트와 철학에 대한 이야기 같을 거에요. 하지만 제 글은 그런 걸 다루지 않아요. 인사이트 얘기는 브런치에 쳐보면 오조오억개가 나와요. 우린 길거리와 책상에서 벌어지는 일을 다룰거에요. 자 시작!1. 간판 자간틀린거 보기지나가다가 간판 자간이 엉망이면 불편해져요. 너무 좁으면 가독성을 걱정해줘요. 아이고 세상에 사장님..저에게 맡기시지.... 저래서야 손님들이 읽을 수나 있겠어요.. 또는 메뉴판을 볼 때도 행간이 보여요. 손글씨 메뉴판은 왠지 오른쪽으로 점점 올라가는 글씨가 거슬려요.2. 폰트알아맞추기CGV가서 광고보다보면 광고 중 80%에 모두 HG꼬딕씨 폰트가 쓰였다는 것을 알 수 있어요. 그런걸 보면서 혼자 괜히 뿌듯해져요. 헤헤 알아냈다..하면서. 저건 노토산스! 저건 나눔! 저건 헬베티카! 저건 가라몬드다! 이런거 알아내면서 으쓱해져요. 괜히 옆자리 애인에게 자랑해요. 저건 헬베티카 쓴거다?... 3. 광고사진 픽셀 깨진 거 찾아내기전단지나 지하철스크린도어 광고보면서 뭔가 픽셀깨진 거 보면 불편해져요. 여백 잘못줘서 살짝 흰색 나온 것도 발견해요. 디자이너는 세상을 픽셀단위로 봐요. 옆친구가 말해요. '그런 것 좀 찾지마.'4. 괜히 광고보면서 어떻게 만들었을까 궁리하기음..저건 일단 레이어 마스크씌우고 배경지운다음, 오브젝트에 블러주고 레이어 하나 더 만들어서 블렌딩해서 만든거겠지... 저건..저건 저건 뭐지? 저건..음.. 일단 일러로 선 따서 오브젝트 만들고, 3D로 눕혀가꼬 돌출 효과 준다음, 포토샵으로 넘겨서 왼손으로 이렇게, 오른손으로 이렇게 한거겠다!! 라고 생각하고 뭔가 내가 다 아는 스킬이면 뿌듯해져요. 저건 어케 만들었지?? 하고 궁금해지면 그 때부터 뭔가 불편해..뭔가 찾아보고 싶어. 5. 저 정도는 나도 할 수 있지 않을까 생각하기가끔 텀블벅에 펀딩중인 디자인제작물이나, 핀터레스트와 비핸스에 올라온 거 보다보면 양가감정이 들어요. 하아..얘네들은 왜이렇게 잘하는거지? 내 손은 왜 너구리손이지?..찰흙으로 만들어졌나?...거의 태양의기사 피코손이야.. 하면서도 한편으론 저 정도는 나도 맘만 먹으면 만들 수 있을 것 같은데?..(만드는 방법이 대략 머릿속에 그려지면 자신감이 갑자기) 라는 생각도 들어요. 하지만, 일단 맘을 먹질 않는다는게 문제고, 방법을 아는 건 사실 중요치 않아요. 저 발상을 했다는 게 중요하니까..6. 정렬틀린거 불편해하기뭔가 책높이가 안맞으면 불편해요. 다 빨간색인데 노란색이 하나 있으면 이상해요. 뭔가 혼자 정렬 안맞고 한 칸 정도 들여쓰기 되어있으면 아..저걸 어떻게 하고 싶은데..하앍... 저..저걸..제발..옮겨줘!!!! .....윈도우 계산기의 1픽셀....7. 격자무늬 투명으로 보기디자이너에겐 투명으로 보여요. 이젠 하도 익숙해져서, 저 어지러운 투명레이어 위에서도 뭐가 뭔지 대략 알 수 있어. 8. 새끼손가락 항상 컨트롤에 두기뭔가 편함네, 새끼손가락이 항상 뭔가 긴장해있어. 지금 타자치고있는 데도 뭔가 새끼손가락이 당장이라도 컨트롤을 누를 것 같아. 그리고 검지는 항상 S를 누르기 위해 노력하죠. 보통 타자칠때 오른손의 중지는 'ㅏ'를 누르게 되어있어요. 하지만 왠지 모르게 나는 자꾸 O를 누르려고 한다고. 뭘 자꾸 열려고 하는거야... 9. 모니터는 최대한 가까이 보기바른 디자이너의 자세모니터가 얼마나 큰 지는 중요하지 않아요. 32인치가 아니라 32인치 할아버지가 와도 난 모니터를 5cm앞에서 바라볼 거야. 아이맥이면 다를 것 같지? 아니에요. 아이맥은 좀 더 선명하게 5cm 앞에서 볼 수 있다는 장점이 있죠. 어쨌든 바라보는 거리는 변하지 않아요. 10. 책표지 보면서 레퍼런스찾기괜히 이쁜 책보면 사진 찍어벌임.. 그리고 어딘가 저장해요. 레퍼런스 해야지이~ 하면서. 그리곤 어디갔는지 몰라..기억에서 사라져요.11. 매거진의 가독성 비판하기이건 좋은 매거진!안읽히면 대차게 비판해버려요. 아 이거...뭔가 한 눈에 딱 안들어와!..하면서 갑자기 안물안궁 크리틱을 시작해요. 아..이거 폰트만 너무 크게 해놓고 여백이 너무 좁네.. 행간도 되게 애매하고. 하며 꿍시렁꿍시렁 하다가 매거진을 내려놔요. 안읽히면 안보면 되지만, 디자이너는 굳이 안 읽히는 이유를 찾아요.12. 모든 곳에서 콘센트 발견하기차..찾았다!!디자이너에게 카페는 단순히 티라미수와 커피를 먹는 곳이 아니에요. 메뉴와 분위기를 봄과 동시에 와이파이와 의자, 책상의 편의성, 그리고 콘센트의 위치를 함께 봐요. 제 아무리 이쁘고 힙해도 콘센트가 없다면 그 곳은 미미의 집 같은 곳일 뿐이에요. 13. 이쁜소품보면 찍어놓기커...커여워!!!!!!!!!인스타에 올리려고 찍는 게 아니에요. 물론 종종 올리기도 하지만, 대부분은 언젠가 굿즈 만들 때 쓸 수 있을 것 같아서 그냥 찍어놓는 거에요. 도대체 그 굿즈는 언제 만들게 될런지 모르지만, 그래도 나도 이런거 만들어봐야지!!~ 하는 마음은 모두가 매한가지예요.14. 아티클있으면 저장해놓기(안봄).....저장해놓고 안봤어요...페북과 구글 등등 SNS에선 온갖 종류의 디자인 관련 아티클과 정보가 넘쳐나요. 와씨 이건 진짜 개꿀팁이다!!! 레알 이거 나중에 꼭봐야지!!! 해놓고 즐겨찾기에 넣고 게시물을 저장해요. (그리곤 내면 깊숙한 어딘가에서 이슬로 사라졌다고 한다..)15. 카페옆자리 디자이너 시안보면서 부러워하기강남 빈브라더스 가면 주변에 디자이너가 3명이상은 반드시 있어요. 스벅에도 마찬가지예요. 할리스는 공부방 모드로 좌석이 바뀐 이후론 거의 성지가 되었어요. 상수역 골목에 이리카페도 디자이너 천지에요. 제비다방도 디자이너가 우글거려요. 화장실가다가 담배피러 나가다가 옆 사람 시안 슬쩍 봐요. 잘해요. (못해도 잘해보여요.) 괜히 부러워요. 흥. 잘하네.16. 새메일 무서워하기안심.아침에 일어나서 새메일 +2가 떠있으면 무서워요.  17. 후드티 사랑하기후드티는 여러가지 모드로 전환할 수 있는 최고의 유니폼이에요. 머리를 안감았을 땐 모자를 쓰면 되고, 엎드려 잘 때도 모자가 크면 훌륭한 암막커튼이 돼요. 후드티엔 기모가 있어야 해요. 그래야 부들부들하니 좋아요. 후드는 한사이즈 크게 입어야 또 제맛이에요. 그리고 주머니에 뭔가 그득그득 들어있고. 오래 입어서 뭔가 소매가 헤져있으면 더욱 빈티지스러워요. 후드티에 회색츄리닝을 입고 노트북을 들면 다 이길 수 있어요.18. 오르막길 힘들어하기오래 앉아있다보면 합정역 계단도 트래킹코스가 돼요. 19. 콜라보제품보고 감탄하기괜히 콜라보제품보면 우왕우왕 거림... 괜히 1300K랑 박카스랑 한 콜라보제품 보러가고, 나이키랑 누구랑 콜라보했다고 하면 보러가고, 마리몬드랑 3M이랑 콜라보했다하면 보러가고... 팝업스토어도 짱 좋아해요. 브랜드 팝업스토어 뜨면 왠지 한 번 가보고 싶어요. 그리고 구리다와 예쁘다를 판가름해요. 거의 매사에 크리틱이 생활화 되어있는 것 같아요.20. 살 건 없지만 괜히 프리스비 매장 구경하기괜히.자꾸 보다보면 내 것이 되지 않을까 싶은 마음으로 자꾸 장비구경해요. 프리스비는 그래도 양반이지. 용산가면 와콤 팝업스토어가 있어요. 거긴 신세계에요. 디자인문구점도 그냥 지나칠 수 없어요. 핫트랙스 꼭 가야해요. 무인양품도 괜시리 들어가봐요. 이걸 사면 왠지 디자인이 더 잘 될 것 같아요. 말도 안돼요. 하지만 기분적인 느낌이 그래요. 
조회수 1328

스타트업 프로젝트 메니징 하기

이제 제가 만들었던 자작 프로젝트 매니지먼트 툴 에 관하여 설명해 드리겠습니다.글 마지막 부분에 구글 Docs로 만든 버전 예시 올릴게요, 필요하신 분들은 마음껏 가져다 사용해 주세요. :) 기본적으로 이 프로젝트 매니지먼트 툴을 사용하게 된 목적은 효율성에 있습니다. 아무래도 처음 서비스를 제작하시는 분들은 업무에 대한 트레킹의 중요성을 모르시는 분들도 많을 텐데요, 서비스를 제작할 때 Creativity(창조성) 뿐만이 아니라, 서비스를 제작하면서 진행되는 Continuity(지속성) 역시 창조성만큼 중요합니다. 지속성이 없으면 그 창조성 역시 보여줄 수 없습니다. 그리고 제작자들간의 지속적인 피드 없이 서비스를 제작하는 것은 절대적으로 불가능하다고 생각합니다. 그래서 그런 기본적인 생각을 기반으로 제작하였고요, 이미 사용되는 스크럼이나, 에자일 등을 사용하지 않고 새로운 것을 제작 한 이유는 1. 개발자가 아닌 이상, PM에 대한 기본지식이 없다. 2. 프로젝트 매니지먼트 툴이 생소하고 어려우면 어려울수록 팀원들이 트레킹 하고자 하는 의지는 줄어든다. 3. 내가 한 업무에 대하여  이야기하는 게 생각보다 귀찮고 어렵다. 4. 기획자, 개발자, 디자이너들이 소통하는 단어들의 사용이 다르다. (예) UI버튼들에 관한 워딩 등) 등의 기본적인 배경지식을 기반으로 제작하였습니다. 그리고 보다 빠른 피드백을 위하여 Google Docs를 사용, 팀원들이 업데이트 한 내용을 즉시 트레킹 할 수 있도록 하였습니다.거창해 보이지만 전혀 별거 없습니다...ㅎ각주: 2~15인 내외의 창업팀들이 프로젝트 매니지먼트에 익숙하지 않고 사용해 본 적이 없는 인원들에게 보다 효과적이고 능동적인 개발/기획/ 디자인 환경을 제공하기 위해 제작.규칙: 1. 프로젝트 매니지먼트(이하 PM)에 관한 문서는 우선적으로 프로젝트 메니져가 작성하고(이하 메니져), 반드시 모두가 동의하에 작성한다.(note: 팀원들이 모두 동의하는 바에서 업무를 시작하지 않으면, 각 개개인의 불만사항이 늘어날 수 있고, 총 책임자 한 명이 안건을 만들고 정리해야 보다 쉽게 PM을 진행할 수 있습니다.) 2. PM에 관한 회의는 2주에 한 번으로 기준을 잡고, 급한 변경사항이 있을 시, 일정에 관한 회의를 공지하고 진행한다.(note: 일정에 관한 회의는 오래하는 것을 지양하는 것이 좋습니다. 아이디어 회의나 방법에 초점을 맞추고, 진행상황에 대한 회의는 기본 2주에 한번, 진행 중 장애요소를 만나 회의가 필요할 시에 하는 것이 좋습니다.) 3. PM에 관련한 회의는 시작시간과 종료시간을 회의 하루 또는 이틀 전에 먼저 설정하고 진행한다. 기본 회의 시간은 1시간 정도로 잡는다.(note: 회의할 날짜와 시간을 정해놓으면 시간 공지와 또 일정에 대한 서로의 업무를 정리할 수 있는 시간을 가질 수 있고, 이를 통하여 보다 효율적이게 회의를 진행할 수 있습니다. 그리고 회의시간은 1시간 정도가 적당합니다.) 4. 회의 시작 때까지 15~30분 정도 개개인이 자신에 업무 현황에 대하여 검토할 시간을 가진다.(note: 가장 중요한  포인트인데, 개개인이 업무현황에 대하여 검토할 시간 없이 회의를 임 할 경우 PM회의는 지체될 수밖에 없습니다. 15분~30분 정도 전에 메니져가 공지를 해 주고, 회의시간 전까지 업무 정리를 하는 것이 좋습니다.) 5. UI용어는 pxd용어 사전을 기반으로 하여 제작한다. (링크:http://story.pxd.co.kr/616)(note: 인원들 대부분이 사용하는 용어가 다를 수 있습니다. 그리고 다른 용어의 사용은 제작자들간의 혼란을 야기시킬 수 있기 때문에 통합이 필요합니다. pxd의 블로그 내용 중 "UX신입 디자이너가 알아야 할 UI디테일 용어" 시리즈는 이러한 혼선을 줄일 수 있는 좋은 방법입니다.)구성Sheet 1. Tasks (진행사항)가장 주가 되는 진행사항에 대한 상황을 파악하는 란 입니다.Sheet 2. Emergency Contact (비상연락망)업무진행 시 필요한 인적사항들을 파악, 즉각적인 피드를 얻기 위하여 비상연락망을 제작하였습니다.Sheet 3. Footnote (각주)PM툴에 적용된 언어들에 대한 설명을 적어놓았습니다.간단히 스크린샷으로 해놓았고요, 링크로 들어가 보시면 바로 보실 수 있습니다.마지막으로,스타트업 기획자는 PM에 대한 이해가 필요합니다. 그리고 PM은 혼자 하는 게 아니라, 같은 팀원들의 피드백이 절대적으로 필요한 부분입니다. 그래서 기획자 분들 뿐만이 아니라 디자이너분들, 개발자 분들도 제 이전 글과 이번 글을 읽어보셨으면 좋겠습니다:)궁금점이나, 의문점이 있으신 분들은 언제든지 알려주세요:) 감사합니다!!링크 바로가기! :http://bit.ly/K3MIP1#코인원 #블록체인 #기술기업 #암호화폐 #스타트업인사이트
조회수 1328

열혈강호로 살펴보는스타트업 캐릭터

지금까지 읽었던 만화 중 가장 좋아하는 만화 3개를 꼽으라면 단연코 열혈강호, 슬램덩크, 킹덤을 꼽는다. 마침 와이프가 휴가간 틈을 타 일요일 하루 종일 오랜만에 열혈강호 60권을 꺼내어 다시 읽어보는 나만의 휴가를 가졌다. 그러다가 문득, 여기 캐릭들이 스타트업에서 활동하는 캐릭들이랑 겹치는 부분이 많아서 한번 재미삼아 소개해 보고자 한다. 어디까지나 '재미삼아' 매칭시켜 보는거기 때문에 너무 진지빨면서 읽지는 말자.1. 한비광 - 필요하면 직접 배워서 뭐든지 달성해 버리는 공격적인 스타트업 대표스타트업 하다보면 마케팅, 영업, 재무, 회계 등등 수많은 펑션의 일들을 직접 해결해야 하는 경우가 많은데, 이런 사람들은 별로 고민하지 않고 지가 스스로 배워버려서 실제 그 업무를 하던 사람들 보다 고퀄을 달성해 버리는 캐사기 민망한 스타트업 대표 캐릭터이다. 이런사람들 특징이 '내가 직접 해봐서 아는데'라는 말을 달고 살면서 직원들 스팀돌게 만드는데 일가견이 있다.'내가 직접 해봐서 아는데'를 입에 달고사는 대표2. 담화린 - 전략과 변초에 능한 기획자머리 겁나 좋고 뭔가 전략같은거 멋있게 만드는 기획자이다. 실제 만화에서 한비광이 싸울때 옆에서 '지금 운유과봉을 써,' '지금이야 잠룡등천!' 이러면서 싸움 전략을 기가막히게 잘 짠다. 이런 능력자들은 학교나 교과서에서 배운 내용들일지라도 각 상황에 맞게 능수능란하게 적용할 수 있는 어마어마한 기획력을 지니고 있다. 스타트업의 스케일을 위해 꼭 필요한 캐릭터. 다만 너무 보수적이고 리스크테이킹을 잘 안하려는 성향이 있어서 위의 한비광같은 사람이 이끌어 줄 필요가 있는 캐릭이기도 하다.  뒷태..가 아닌 두뇌가 섹시한 기획자이다.3. 노호 - 우직하고 깡따구도 세고 한결같이 노력하는 사업개발, 또는 영업사원머리가 좋거나 재능이 뛰어나진 않지만 항상 우직하게 노력의 노력을 거듭하고 깡따구도 있어서 어디 큰 영업건 계약따러가면 반드시 성사해버리는 영업사원이다. 특히 이 사람의 끈기는 타의 추종을 불허할 정도라서 고객사들 사이에서도 저사람한테 한번 물리면 절대로 빠져나올 수 없는 영업사원으로 유명하다. 실제로 만화에서도 세외세력중 하나인 동령에 들어가 내부 반란과 각종 분란에도 전혀 굴하지 않고 끈기있게 도전하여 결국 동령을 접수해 버렸다. 술마시면 진지빠는 얘기로 주변사람들 졸게만드는건 옥의 티.술마시면 너무 진지하지만 항상 큰 계약 성사시키는 영업사원4. 매유진 - 자기세계 뚜렷하고 친해지기도 어렵지만 실력 하나는 줄충한 디자이너속을 알수없고 자기 세계가 너무 뚜렷해서 누가 참견하거나 내 영역에 침범하는걸 끔찍하게도 싫어하는 디자이너다. 사람들이랑 쉽게 어울리지 못하고 친해지기도 어렵다. 하지만 실력 하나는 줄충하고 나름 디자인 분야에서 명성도 있어서 이 사람이 우리 회사에 존재하는것 만으로도 투자자의 관심을 끌 정도이다. 일단 친해지고 나면 은근 잘 챙겨주고 마음 따뜻한 면모가 보이는 참 매력적인 디자이너.업계에서 나름 명성있는 디자이너. 다가가기 어렵지만 한번 친해지면 마음 따뜻한 면모를 볼 수 있다.5. 진풍백 (천마신군 셋째 제자) - 자기잘난맛에 살고 남 깔아뭉개기 좋아해서 재수없지만 성과는 잘나와서 욕하기 힘든 스타트업 대표기본적으로 사람들이 싫어한다. 뒤에서 욕도 많이 먹는다. 그 이유는 캐릭 자체가 자기 잘난맛에 살고 누가 뻘짓하면 '저런 멍청한놈' 하면서 바로 깔아뭉개버리는 스타일이다. 하지만 사업수완이 좋고 말빨도 수려하기 때문에 대표로서 투자도 잘받고 언론 인터뷰빨도 잘받는 스타일이라 직원들이 앞에서 비판은 못하고 항상 뒤에서 뒷다마만 열심히 까는 캐릭이다. 본인과 말이 통하는 사람들하고만 대화하는 경향이 있어서 그 바운더리 안에 들지 못하는 직원들은 모멸감만 느끼다가 금방금방 그만둬 버린다. 시간이 흐르고 나면 이 팀에는 본인과 말이 통하는 똑똑한 능력자들만 남아있게 되는건 함정(?)자기 잘난맛에 살지만 직원들이 대놓고 욕은 못하고 뒷다마까는 대표6. 최상희 (천마신군 다섯째 제자) - 성격좋고 겉으로 보기에 뭔가 뛰어나보이지도 않는데 이상하게 성과 잘나오고 투자도 잘받는 스타트업 대표일단 성격이 좋고 마음씨가 따뜻한 스타트업 대표이다. 그런데 겉으로 보기에는 뭔가 전혀 능력자 같지 않아 보인다. 말빨이 수려한것도 아니고 카리스마가 있어보이지도 않는다. 하지만 제법 사업이 잘 굴러가고 피칭은 잘 못해도 투자자들이나 파트너사들이랑 미팅하면 항상 투자유치나 계약도 잘 따낸다. 여린 구석이 있어서 감동적인 순간이나 옛날에 힘들었던 시절 생각하면 펑펑 울기도 해서 직원들이 달래주는 캐릭터.여리고 잘 울기도 하고 능력자도 아닌것 같지만 사업은 이상하게 잘굴러가는 대표7. 유원찬 (송무문 문주) - 한때 실패의 쓰라린 경험을 맛보고 재기를 꿈꾸는 스타트업 대표과거 크게 실패해본 경험이 있어서 재기를 노리는 스타트업 대표이다. 스펙 화려하고 대기업에서 승승장구 하다가 스타트업에 도전했다. 인맥도 좋아서 초기에 투자도 크게 받아서 사업을 공격적으로 확장했다가 크게 말아먹고 빚더미에 올라앉은 경험이 있다. 방황의 시기를 극복하고 다시 오랜 시간의 준비 끝에 새로운 사업으로 재기했다. 옛날에는 성격도 더럽고 남 무시하기 좋아하는 유아독존형 캐릭터였지만 크게 쓴 맛을 본 후에 성격을 고쳐먹어서 지금은 인품도 좋고 매사에 신중한 캐릭터로 변모하였다. 향후 성공가능성이 가장 높은 스타트업 대표 스타일이다.과거에 크게 사업 말아먹고 다시 재기를 꿈꾸는 스타트업 대표8. 천운악 (정파 육대신룡 중 한명이자 벽풍문 소문주) - 자기잘난맛에 살고 남 깔아뭉개기 좋아하고 뭐 성과 내는것도 없이 맨날 말뿐인 마케터스타트업 팀 구성할때 이런사람은 반드시 피해야 한다. 이 캐릭터는 유아독존 자아도취가 하늘을 찌르고 남 깔아뭉개는건 기본인데다가 집안 배경 믿고 까부는 마케터 스타일이다. 워낙 집안 배경이 좋아서 초반에는 자비+집안인맥 동원하다 보니 성과도 잘 내는것 같은 착각이 들게 하는 마케터이지만, 나중에 밑천 다 드러나면 지 손으로 직접 할 줄 아는게 하나도 없는 알맹이 없는 사람이라는게 금방 드러나 버린다. 하지만 절대로 본인의 부족함을 인정하지 않고 말만 번지르르하게 해서 주변 사람들을 멘붕시키는 캐릭터이다. 혹시 본인 팀에 이런 사람이 있다면 팀 구성을 꼭 다시한번 고민해 보길 바란다.집안 배경 믿고 까부는 말만 번지르르한 마케터9. 요열마화 부용 - 일안하고 맨날 커피마시러 나가고 딴짓 장난 아닌데 성과는 잘 내는 마케터일단 자리에 잘 붙어있지 않는다. 출근하자마자 옆에 직원 꼬셔서 커피마시러 나가고 점심시간도 보통 남들보다 30분 일찍 나가서 30분 늦게 들어온다. 놀기도 좋아하고 아웃도어 스포츠나 취미생활 즐기는걸 좋아해서 보통 하나에 꽂히면 지름신 덕질 동원해서 장비 갖추고 주말마다 놀러다닌다. 구속받는걸 싫어해서 결혼에 대한 생각도 없고 자유분방한 삶을 즐기는 마케터이다. 하지만 성과하나는 기가막히게 잘낸다. 워낙 본인이 덕질에 일가견이 있어서 덕후들이 열광하는 컨텐츠도 잘만들어 내고 카피도 잘쓰고 본인 자체적인 인맥도 끝내준다. 스타트업 대표로서 초기에 가장 탐나는 마케터 캐릭이다.일 안하고 맨날 딴짓하고 놀러다니는 것 같은데 성과는 기가막히게 잘나오는 마케터10. 미고 (동령의 신녀) - 푸념 잘들어주고 항상 따뜻해서 모든 직원들에게 사랑받는 HR 담당자보통 초기 스타트업에는 없는 캐릭터이고 어느정도 시드투자 받은 후에 직원 수 키워나갈때 합류하는 스타트업의 HR담당자이다. 성격이 따뜻하고 사람들 푸념도 잘들어주고 중간에 갈등 조율도 잘하는 누나/언니같은 스타일이다. 잘난척 절대로 없고 항상 겸손하기 때문에 보통 잘난척 좋아하는 직원들이 이 누나 앞에서 재롱떠는 경우가 많다. 그럴때마다 이 누나는 항상 '우와 너 진짜 대단하구나~~' 하고 칭찬해주면서 그 사람의 사기와 동기부여를 하늘 끝까지 치솟게 만들어 준다. 그런데 이런 캐릭터는 항상 속으로 엄청난 내공과 경험을 가지고 있다. 야망도 있어서 매정해야 할때는 그 누구보다도 매정한 선택을 하기도 한다. 모든 행동과 말에는 항상 이유가 있는 사람이라 이런 사람을 대할때는 너무 모든걸 드러내지 말고 조심스럽게 대해야 한다. 스타트업 대표라면 조직 키울때 꼭 영입해야하는 HR담당자 1순위 캐릭이다.항상 직원들 푸념 잘들어누는 푸근한 언니/누나 같은 HR담당자11. 소향 - 어디가면 항상 있는 순진 발랄하고 사내 평균연령 확 줄여주는 인턴이자 신입사원사내에서 가장 어린 정도가 아니라 보통 평균연령보다 한 세대가 더 어린 신입사원 혹은 인턴이다. 순진 발랄해서 회사의 모든 직원들이 동생같이 챙겨주려 하고 하나하나 세심하게 가르쳐주려고 노력한다. 회사 분위기가 무겁고 칙칙할때 마다 끼와 재롱을 발산해대며 회사의 분위기를 밝혀주는 소중한 존재이다. 그런데 술만 마시면 대표님한테 '오빠~ 원샷해야지!' 이러면서 꽐라가 되버리고 다음날에 절대로 기억 못하는 척을 하는건지 진짜로 기억을 못하는건지는 아무도 모른다.사내 평균연령보다 한 세대 이상이 어린 신입사원 혹은 인턴12. 신공 (신지 신묘각주) - 까칠하고 지잘난맛에 살고 화도 잘내서 상대하기 껄끄럽지만 실력은 겁나 뛰어난 만랩 개발자열혈강호 60권대까지 읽지 않으면 모를수도 있는 캐릭터인지라 간단히 소개해 주면, 열혈강호 최대의 세외세력인 '신지'의 난공불락 기계진을 설계한 만랩 개발자이다. 성격이 매우 까칠하고 화도 잘내서 상대하기 매우 껄끄러운 캐릭터이다. 같이 일하는 기획자나 다른 직원들이 기술적인 내용들을 잘 모르면 항상 '넌 잘 모르면 그냥 내가 시키는대로 해' 이러면서 무시해 버리는 통에 다른 팀 직원들이 스트레스를 많이 받는다. 하지만 혼자서 서버와 프론트를 넘나들면서 어떤 문제가 발생해도 다 해결해 버리는 통에 스타트업에서는 꼭 필요한 만랩 개발자.까칠하고 화도 잘내서 상대하기 껄끄러운 만랩 개발자13. 벽력자 - 술 좋아하고 사고도 많이 치고 가끔 대표나 다른 직원 골탕먹이기 좋아하지만 역시 실력은 겁나 뛰어난 만랩 개발자술을 너무너무 좋아하는 개발자. 가끔 술먹고 다음날 행방불명 됐다가 하필 그날 서버 다운되는 바람에 회사가 난리나버린 적도 있다. 동료직원들 PC화면에 갑자기 야한 팝업창들이 계속 뜨게 한다던지 뭔가 본인만 아는 비밀기능을 제품에 심어놨다가 대표를 골탕먹이는 등 짓궃은 장난을 잘 치는걸로도 유명하다. 하지만 성격도 쾌활하고 주변 사람들과 잘 어울리고 실력도 뛰어난 만랩 개발자라서 스타트업에서는 역시 꼭 필요한 존재감과 함께 오늘도 열심히 장난을 치거나 어제의 술기운에서 헤어나지 못하고 있다.술먹는거 엄청 좋아하고 짓궃은 장난도 잘치는 만랩개발자14. 유세하 (담화린 사형) - 잘생기고 일도 잘하고 성격도 좋은데 술만마시면 x꽐라되서 사고치는 영업사원이 직원을 뽑을때 모두를 (특히 여직원들의) 가슴을 설레게 할 정도로 꽃미남에 매너좋고 성격좋고 집안좋은 완벽남처럼 보이는 신입사원이었다. 본인의 그런 외적 능력을 십분 활용해서 영업 스킬도 매우 뛰어나다. 하지만 술만 먹으면 완전 x꽐라되서 전혀 다른 인격체가 되버리는 단점이 있다. 그냥 꽐라도 아니고 x꽐라인 이유는 그 변하는 정도가 장난 아닌지라 (실제 만화에서도 평소에는 인자한 꽃미남 미공자가 마령검만 잡으면 악의 화신으로 변해버린다) 회사에서 이사람은 절대로 술 마시지 못하게 금주령을 내릴 정도이다.평소에는 초절정 꽃미남 굳매너 완벽남이 술만 마시면 x꽐라되는 영업사원15. 진패운 - 우직하고 사람 좋고 항상 한결같은 바른사나이지만 이상하게 성과는 없는 영업사원사람이 과묵하고 한결같고 지각무, 결석무, 아침 7시 출근에 술도 잘 안먹고 아무튼 거의 완벽에 가까운 바른사나이이다. 스펙도 좋고 할줄아는 잡다하게 많은 직원이라 뽑을때 주변의 기대가 컸지만 이상하게 메이저급 성과가 없는 영업사원이다. 뭐 언변이 부족한것도 아니고 경험이 없는것도 아닌지라 왜 실적이 저조한지는 그 누구도 이유를 모르는 미스테리. 흔히 주변에서는 '저 사람은 영업사원이 아니라 임원이 되야 능력발휘할수 있는 사람일거야' 라는 말을 자주 듣는다.우직하고 한결같은 바른사나이 영업사원. 하지만 이상하게 실적은 저조한데 그 이유를 아무도 모른다.지금까지 열혈강호에 나오는 주요 캐릭터들과 스타트업에서 흔히 볼 수 있는 캐릭터들을 한번 매칭해 보았다. 앞서 얘기했지만 뭐 객관적인 데이터를 근거로 한 매칭이 전혀 아니고 순전히 개인적인 느낌으로 소설을 써본것이기 때문에 그냥 가볍게 읽어주길 바라며, 혹시 본인이 몸담고 있는 스타트업에 저 15명 캐릭터 중에 매칭되는 사람이 있으면 제보 부탁드린다. 혹은 내가 놓친 캐릭터나 매칭을 잘못한 캐릭터가 있으면 이 역시 의견 부탁드린다. 열혈강호라는 만화를 전혀 모르는 사람들에게는.. 미안합니다..글쓴이는 스팀헌트 (Steemhunt) 라는 스팀 블록체인 기반 제품 큐레이션 플랫폼의 Co-founder 및 디자이너 입니다. 비즈니스를 전공하고 대기업에서 기획자로 일하다가 스타트업을 창업하고 본업을 디자이너로 전향하게 되는 과정에서 경험한 다양한 고군분투기를 연재하고 있습니다.현재 운영중인 스팀헌트 (Steemhunt)는 전 세계 2,500개가 넘는 블록체인 기반 앱들 중에서 Top 10에 들어갈 정도로 전 세계 150개국 이상의 많은 유저들을 보유한 글로벌 디앱 (DApp - Decentralised Application) 입니다 (출처 - https://www.stateofthedapps.com/rankings).스팀헌트 웹사이트 바로가기
조회수 1609

React 공식 튜토리얼 한글 번역

<button type="button">메뉴</button>* 오역 및 오탈자가 있을 수 있습니다. 발견하시면 댓글로 제보해주세요!** 브런치 에디터의 한계로 마크다운 적용이 되지 않아 가독성이 떨어지고 복사 기능이 지원되지 않습니다. 이왕이면 이곳에서 보시기를 권장합니다. >> 가독성 좋은 문서로 보기React 공식 튜토리얼 바로가기시작하기 전에무엇을 구현할 것인가대화형 틱택토 게임을 구현하려고 합니다.원한다면 최종 결과물을 여기에서 확인할 수 있습니다. 아직 코드가 이해되지 않거나 문법이 낯설어도 걱정하지 마세요. 튜토리얼에서 차근차근 틱택토 게임을 구현하는 방법을 배울테니까요.게임을 플레이해보세요. 이동 리스트에 있는 버튼을 클릭하여 클릭한 때로 돌아가고, 그 때로 돌아간 후 보드가 어떻게 보이는지 확인할 수 있습니다.게임에 익숙해지셨다면 탭을 닫으세요. 다음 섹션에서 간단한 템플릿을 가지고 시작할 것입니다.사전 준비HTML과 JavaScript에 익숙할 것으로 생각합니다. 하지만 HTML과 JavaScript를 사용해본 적이 없더라도 튜토리얼을 따를 수 있어야 합니다.JavaScript를 다시 봐야한다면 이 가이드를 추천합니다. 튜토리얼에서 JavaScript의 최신 버전인 ES6의 몇 가지 특징들인 화살표 함수, 클래스, let, const를 사용할 것입니다. Babel REPL을 사용하여 ES6 코드가 어떻게 컴파일되는지 확인해볼 수 있습니다.튜토리얼을 공부하는 방법튜토리얼을 공부하기 위한 두 가지 방법이 있습니다. 브라우저에서 코드를 작성하거나 컴퓨터의 로컬 개발 환경을 설치할 수 있습니다. 편한 방법을 선택하여 공부하시면 됩니다.브라우저에서 코드를 작성하기 원한다면가장 빨리 시작할 수 있습니다!새로운 탭에서 시작 코드를 여세요. 빈 틱택토 필드를 볼 수 있습니다. 튜토리얼에서는 이 코드를 수정하여 진행합니다.다음 섹션인 로컬 개발 환경 설정을 스킵할 수 있습니다. 바로 개요 섹션으로 넘어가세요.사용하던 에디터에서 코드를 작성하기 원한다면다른 방법으로 사용하는 컴퓨터에 프로젝트를 설치할 수 있습니다.이 방법은 필수가 아닌 선택 사항입니다!더 많은 준비 작업이 필요하지만 에디터의 편리함을 누리며 공부할 수 있습니다.만약 이 방법으로 공부하기를 원한다면 필요한 단계들이 있습니다.  1. 설치된 Node.js가 최신 버전인지 확인해보세요.2. 새로운 프로젝트를 생성하기 위해 설치 방법을 따르세요.$ npm install -g create-react-app$ create-react-app my-app3. 새 프로젝트의 src/ 폴더에 있는 모든 파일들을 삭제해주세요. (폴더 안의 내용만 삭제하되 폴더는 삭제하지 마세요)$ cd my-app$ rm -f src/*4. 이 CSS 코드를 src/ 폴더에 index.css 파일로 추가해주세요.5. 이 JS 코드를 src/ 폴더에 index.js 파일로 추가해주세요.6. src/ 폴더에 있는 index.js의 최상단에 아래 세 줄을 추가해주세요.import React from 'react';import ReactDOM from 'react-dom';import './index.css';이제 프로젝트 폴더에서 npm start 명령어를 실행하고 브라우저에서 http://localhost:3000 를 여세요. 빈 틱택토 필드를 볼 수 있습니다.에디터에서 문법 하이라이팅 설정을 하고 싶다면 이 문서를 따르세요.도와주세요! 막히는 부분이 있어요!막히는 부분이 생겼다면 지원하는 커뮤니티를 확인해보세요. 특히 Reactiflux chat은 빠르게 도움을 받을 수 있는 좋은 방법입니다. 어떤 커뮤니티에서도 필요한 대답을 듣지 못했다면 이슈를 제출하세요. 우리가 도와드립니다.다 끝났으면 시작해봅시다!개요React란 무엇인가요?React는 유저 인터페이스 구현을 위한 선언적이고 효율적이며 유연한 JavaScript 라이브러리입니다.React는 여러 종류의 컴포넌트들을 가지고 있지만 우리는 React.Component의 서브클래스를 사용하여 시작할 것입니다.  class ShoppingList extends React.Component {  render() {    return (            Shopping List for {this.props.name}                Instagram         WhatsApp         Oculus                );  }}// Example usage:XML과 비슷한 재밌는 태그들을 사용할 것입니다. 작성한 컴포넌트는 React에게 무엇을 랜더링하고 싶은지 알려줍니다. 그러면 React는 데이터가 변경될 때 올바른 컴포넌트들을 업데이트하고 랜더링합니다.여기에서 ShoppingList는 React 컴포넌트 클래스 혹은 React 컴포넌트 타입입니다. 하나의 컴포넌트는 props라 불리는 파라미터를 사용하고, render 메서드를 통해 표시할 뷰 계층 구조를 반환합니다.render 메서드는 랜더링하길 원하는 내용을 반환하면 React는 그 내용을 가져와 스크린에 랜더링합니다. 특히 render는 랜더링할 간단한 내용인 React 엘리먼트를 반환합니다. 대부분의 React 개발자들은 이 구조를 더 쉽게 작성할 수 있게 해주는 JSX라는 특별한 문법을 사용합니다.라 쓰면 빌드 시 React.createElement('div')로 변환됩니다. 위의 코드는 아래의 코드와 동일합니다.  return React.createElement('div', {className: 'shopping-list'},  React.createElement('h1', /* ... h1 children ... */),  React.createElement('ul', /* ... ul children ... */));전체 코드는 여기에서 볼 수 있습니다.createdElement()에 대해 더 많은 내용이 궁금하다면 API reference 에 자세한 설명이 있습니다. 튜토리얼에서는 createdElement()를 직접적으로 사용하지 않습니다. 대신 JSX를 사용할 것입니다.JSX에서는 중괄호 안에 JavaScript 문법을 사용할 수 있습니다. 각 React 엘리먼트는 변수에 저장하거나 프로그램에 여기저기에 전달할 수 있는 실제 JavaScript 객체입니다.ShoppingList 컴포넌트는 내장된 DOM 컴포넌트만 랜더링하지만  코드를 작성하여 커스텀 React 컴포넌트를 쉽게 구성할 수 있습니다. 각 컴포넌트는 캡슐화되어 독립적으로 동작할 수 있습니다. 이때문에 간단한 컴포넌트들로 복잡한 UI를 구현할 수 있습니다.시작하기시작 코드를 가지고 시작해봅시다.이 코드는 우리가 구현할 틱택토 게임의 틀을 가지고 있습니다. 필요한 스타일들을 준비해두었기 때문에 JavaScript만 신경쓰면 됩니다.세 가지 컴포넌트로 구성되어 있습니다.- Square- Board- GameSquare 컴포넌트는 하나의 <button>을 랜더링합니다. Board 컴포넌트는 9개의 사각형을 랜더링합니다. Game 컴포넌트는 나중에 우리가 채워 넣어야 할 공백이 있는 하나의 보드를 랜더링합니다. 지금 이 컴포넌트들은 아무런 동작도 하지 않습니다.props를 통해 데이터 전달하기본격적으로 시작하기 위해 Board 컴포넌트에서 Square 컴포넌트로 데이터를 전달해봅시다.Board의 renderSquare 메서드에서 Square 컴포넌트 prop에 value 값을 전달하도록 코드를 변경해주세요.  class Board extends React.Component {  renderSquare(i) {    return ;  }value 값을 보여주기 위해 Square 컴포넌트의 render 메서드 안의 코드 {/* TODO */}를 {this.props.value}로 변경해주세요.  class Square extends React.Component {  render() {    return (      <button className="square">        {this.props.value}      </button>    );  }}변경 전:변경 후: 랜더링된 결과에서는 각 사각형 안에 숫자가 위치합니다.지금까지의 코드는 이곳에서 볼 수 있습니다.대화형 컴포넌트클릭 시 "X"로 채워지는 Square 컴포넌트를 만들어봅시다. Square의 render() 함수에서 반환된 버튼 태그를 다음과 같이 변경해주세요.  class Square extends React.Component {  render() {    return (      <button className="square" onClick={() => alert('click')}>        {this.props.value}      </button>    );  }}이제 사각형을 클릭하면 브라우저에서 알럿창이 뜨는걸 확인할 수 있습니다.새로운 JavaScript 문법인 화살표 함수를 사용하였습니다. onClick prop에 함수를 전달하였습니다. onClick={alert('click')} 코드를 작성하고 버튼을 클릭하면 알럿창 대신 경고가 뜨게됩니다.React 컴포넌트는 생성자에서 this.state를 설정하여 상태를 가질 수 있습니다. 상태는 각 컴포넌트마다 가지고 있습니다. 사각형의 현재 value 값을 상태에 저장하고 클릭할 때 바뀌도록 만들어봅시다.먼저 상태를 초기화하기 위해 클래스에 생성자를 추가해주세요.  class Square extends React.Component {  constructor(props) {    super(props);    this.state = {      value: null,    };  }  render() {    return (      <button className="square" onClick={() => alert('click')}>        {this.props.value}      </button>    );  }}JavaScript 클래스에서 서브클래스의 생성자를 정의할 때 super(); 메서드를 명시적으로 호출해줘야 합니다.Square의 render 메서드에서 현재 상태의 value 값을 표시하고 클릭할 때 바뀌도록 수정해주세요.- <button> 태그 안의 this.props.value 를 this.state.value로 변경해주세요.- () => alert() 이벤트 핸들러를 () => this.setState({value: 'X'})로 변경해주세요.<button> 태그는 다음과 같습니다.  class Square extends React.Component {  constructor(props) {    super(props);    this.state = {      value: null,    };  }  render() {    return (      <button className="square" onClick={() => this.setState({value: 'X'})}>        {this.state.value}      </button>    );  }}this.setState가 호출될 때마다 컴포넌트가 업데이트되므로 업데이트된 상태가 전달되어 React가 이를 병합하고 하위 컴포넌트와 함께 다시 랜더링합니다. 컴포넌트가 랜더링될 때 this.state.value는 'X'가 되어 그리드 안에 X가 보이게 됩니다.이제 사각형을 클릭하면 그 안에 X가 표시됩니다.지금까지의 코드는 이곳에서 볼 수 있습니다.개발자 도구크롬과 파이어폭스의 React 개발자 도구 확장 프로그램은 React 컴포넌트 트리를 브라우저의 개발자 도구 안에서 검사할 수 있게 해줍니다.트리 안의 컴포넌트들의 props와 상태를 검사할 수 있습니다.설치 후 페이지에서 검사하길 원하는 컴포넌트를 오른쪽 클릭하고 "Inspect"를 클릭하여 개발자 도구를 열면 오른쪽 마지막 탭에 React 탭이 보입니다.CodePen을 사용하여 이 확장 프로그램을 동작시키고 싶다면 추가적으로 필요한 작업들이 있습니다.1. 로그인 혹은 회원가입을 하고 이메일을 인증받으세요.2. "Fork" 버튼을 클릭하세요.3. "Change View"를 클릭하고 "Debug mode"를 선택하세요.4. 새롭게 열린 탭에서 React 탭이 있는 개발자 도구를 볼 수 있습니다.상태 들어올리기이제 틱택토 게임을 위한 기본 블록들이 있습니다. 하지만 아직 각 Square 컴포넌트 안에 상태들이 캡슐화되어 있습니다. 더 원활하게 동작하는 게임을 만들기 위해 한 플레이어가 게임에서 이겼는지를 확인하고 사각형 안에 X와 O를 번갈아 표시해야 합니다. 누가 게임에서 이겼는지 확인하기 위해 Square 컴포넌트들을 쪼개지 않고 한 장소에서 9개의 사각형의 value 값을 모두 가지고 있어야 합니다.Board가 각 Square의 현재 상태가 무엇인지만 확인해야 한다고 생각할 수도 있습니다. 이 방법은 기술적으로 React에서 가능하기는 하나 코드를 이해하기 어렵고 불안정하고 리팩토링하기 힘들게 만듭니다.각 Square에 상태를 저장하는 대신에 Board 컴포넌트에 이 상태를 저장하는 것이 가장 좋은 방법입니다. 이 Board 컴포넌트는 이전에 각 사각형에 인덱스를 표시한 방법과 동일한 방법으로 무엇을 표시할지 각 Square에게 알릴 수 있습니다.여러 하위 컴포넌트로부터 데이터를 모으거나 두 개의 하위 컴포넌트들이 서로 통신하기를 원한다면 상위 컴포넌트 안으로 상태를 이동시키세요. 상위 컴포넌트는 props를 통해 하위 컴포넌트로 상태를 전달해줄 수 있습니다. 그러면 하위 컴포넌트들은 항상 하위 컴포넌트나 상위 컴포넌트와 동기할 수 있습니다.이와 같이 상태를 상위 컴포넌트로 들어올리는 것은 React 컴포넌트들을 리팩토링할 때 가장 많이 사용하는 방법입니다. 이 기회를 통해 연습해봅시다. Board에 생성자를 추가하고 9개의 사각형과 일치하는 9개의 null을 가진 배열을 포함한 상태로 초기화하세요.  class Board extends React.Component {  constructor(props) {    super(props);    this.state = {      squares: Array(9).fill(null),    };  }  renderSquare(i) {    return ;  }  render() {    const status = 'Next player: X';    return (             {status}                 {this.renderSquare(0)}         {this.renderSquare(1)}          {this.renderSquare(2)}                        {this.renderSquare(3)}          {this.renderSquare(4)}          {this.renderSquare(5)}                        {this.renderSquare(6)}          {this.renderSquare(7)}          {this.renderSquare(8)}                );  }}나중에 이것을 다음과 같이 생긴 보드로 채울 예정입니다.  [  'O', null, 'X',  'X', 'X', 'O',  'O', null, null,]현재 Board의 renderSquare 메서드는 다음과 같습니다.    renderSquare(i) {    return ;  }Square에 value prop를 전달하도록 수정하세요.    renderSquare(i) {    return ;  }지금까지의 코드는 이곳에서 볼 수 있습니다.이제 우리는 사각형이 클릭되면 발생할 변경 사항을 구현해야 합니다. Board 컴포넌트는 어떤 사각형이 채워졌는지 저장하고 있습니다. 그렇기 때문에 Square가 Board가 가지고 있는 상태로 업데이트할 방법이 필요합니다. 사각형의 컴포넌트 상태가 각자 정의되고 있기 때문에 Board가 Square의 상태를 가지고올 수 없습니다.보통의 패턴은 사각형이 클릭될 때 호출되는 함수를 Board로부터 Square에 전달하는 것입니다. Board 안의 renderSquare를 다시 변경해봅시다.    renderSquare(i) {    return (              value={this.state.squares[i]}        onClick={() => this.handleClick(i)}      />    );  }가독성을 위해 리턴 안의 요소들을 여러 줄로 나누고, 괄호를 추가하여 JavaScript가 세미콜론 없이 코드를 마무리하도록 했습니다.Board에서 Square로 value와 onClick 두 개의 props를 전달합니다. onClick Square의 rennder에 있는 this.state.value 를 this.props.value로 변경하세요.- Square의 rennder에 있는 this.state.value 를 this.props.value로 변경하세요.- Square의 rennder에 있는 this.setState() 를 this.props.onClick()로 변경하세요.- 더이상 각 Square가 상태를 가지지 않도록 Square에 정의한 constructor를 삭제하세요.모든 변경 사항을 구현한 Square 컴포넌트는 다음과 같습니다.  class Square extends React.Component {  render() {    return (      <button className="square" onClick={() => this.props.onClick()}>        {this.props.value}      </button>    );  }}이제 사각형이 클릭될 때 Board로부터 전달되는 onClick 함수를 호출합니다. 어떤 일이 일어나는지 되짚어봅시다.1. 내장된 DOM <button> 컴포넌트의 onClick prop는 React에게 클릭 이벤트 리스너를 설정하라고 알립니다.2. 버튼이 클릭될 때 React는 Square의 render() 메서드 안에 정의된 onClick 이벤트 핸들러를 호출합니다.3. 이 이벤트 핸들러는 this.props.onClick()을 호출합니다. Square의 props는 Board에서 명시한 것입니다.4. Board는 onClick={() => this.handleClick(i)}을 Square에 전달하고, 호출될 때 Board의 this.handleClick(i)가 동작합니다.5. Board에 있는 handleClick() 메서드는 아직 정의되지 않았으므로 코드는 오류가 발생합니다DOM <button> 엘리멘트의 onClick 속성이 React와는 다른 의미를 가집니다. Square의 onClick prop나 Board의 handleClick 메서드와는 다릅니다. React 애플리케이션에서는 속성에 on* 이름을 사용하고 핸들러 메서드에 handle* 을 사용하여 처리하는 것이 일반적입니다.사각형을 클릭해봅시다. handleClick을 아직 정의하지 않았으로 에러가 발생합니다. Board 클래스에handleClick 메서드를 추가해봅시다.  class Board extends React.Component {  constructor(props) {    super(props);    this.state = {      squares: Array(9).fill(null),    };  }  handleClick(i) {    const squares = this.state.squares.slice();    squares[i] = 'X';    this.setState({squares: squares});  }  renderSquare(i) {    return (              value={this.state.squares[i]}        onClick={() => this.handleClick(i)}      />    );  }  render() {    const status = 'Next player: X';    return (             {status}                 {this.renderSquare(0)}          {this.renderSquare(1)}          {this.renderSquare(2)}                        {this.renderSquare(3)}          {this.renderSquare(4)}          {this.renderSquare(5)}                        {this.renderSquare(6)}          {this.renderSquare(7)}          {this.renderSquare(8)}                );  }}지금까지의 코드는 이곳에서 볼 수 있습니다.이미 있는 배열을 수정하는 대신 squares 배열을 복사하기 위해 .slick()를 호출합니다. 왜 immutability이 중요한지 알고 싶다면 이 섹션으로 이동해주세요.이제 사각형을 클릭하여 다시 사각형을 채울 수 있어야 하지만 상태가 각 Square가 아닌 Board 컴포넌트에 저장되어 있어 게임을 계속 구현해나가야 합니다. Board의 상태가 변경될 때마다 Square 컴포넌트들은 자동으로 다시 랜더링됩니다.Square은 더 이상 각 상태를 유지하지 않습니다. 이들은 상위 Board 컴포넌트로부터 데이터를 전달받고, 클릭될 때 알립니다. 우리는 이 제어된 컴포넌트 같은 컴포넌트들을 호출합니다.왜 immutability가 중요할까전의 예제 코드에서 이미 존재하는 배열을 수정하지 않고 변경 사항을 반영하기 위해 squares 배열을 .slice()연산자를 사용하여 복사하였습니다. 이는 무엇을 의미하며 왜 이 컨셉이 중요할까요.mutation을 사용한 데이터 변경  var player = {score: 1, name: 'Jeff'};player.score = 2;// Now player is {score: 2, name: 'Jeff'}mutation을 사용하지 않은 데이터 변경  var player = {score: 1, name: 'Jeff'};var newPlayer = Object.assign({}, player, {score: 2});// Now player is unchanged, but newPlayer is {score: 2, name: 'Jeff'}// Or if you are using object spread syntax proposal, you can write:// var newPlayer = {...player, score: 2};mutation을 사용하지 않더라도(기본 데이터를 변경하여도) 결과적으로는 다를게 없습니다. 하지만 컴포넌트와 전체 애플리케이션의 성능을 향상시키는 장점이 있습니다.쉽게 Undo/Redo와 시간 여행하기immutability는 이 복잡한 기능들을 훨씬 더 쉽게 구현할 수 있게 해줍니다. 예를 들어 이 튜토리얼에서 우리는 게임의 다른 단계들 사이에 시간 여행을 구현할 것입니다. 데이터 변경을 피하면 우리가 이전 버전의 데이터를 계속 참조할 수 있게 해주고 원할 때 변경할 수 있게 해줍니다.변경 사항 트래킹하기변경되는 객체가 변경 사항이 있는지 아는 방법은 변경 사항이 객체로 만들어지기 때문에 복잡합니다. 그러면 이전 버전을 복사하기 위해 전체의 객체 트리를 현재 버전과 비교하고 각 변수와 값들을 비교해야 합니다. 이 과정은 갈수록 복잡해집니다.immutable 객체가 변경 사항이 있는지 아는 방법은 쉬워집니다. 만약 참조되고 있는 객체가 이전과 다르다면 이 객체는 변경된 것입니다. 이게 끝입니다.React에서 언제 다시 랜더링할지 결정하기React에서 immutability의 가장 큰 장점은 간단한 순수 컴포넌트들이 다시 랜더링될 때를 결정하기 쉽다는 점입니다.shouldComponentUpdate()에 대해 더 배우고 싶고 어떻게 순수 컴포넌트들을 성능 최적화 할 수 있는지 알고 싶다면 이 글을 보세요.함수 컴포넌트우리는 생성자를 지웠습니다. 사실 React는 render 메서드만으로 구성된 Square와 같은 컴포넌트 타입을 위해 함수 컴포넌트라 불리는 간단한 문법을 지원합니다. React.Component를 확장한 클래스를 정의하는 것보다 간단하게 props를 가져오고 랜더링 해야할 것을 반환하는 함수를 작성하는 것이 좋습니다.다음과 같은 함수를 사용해 Square 클래스를 변경하세요.  function Square(props) {  return (    <button className="square" onClick={props.onClick}>      {props.value}    </button>  );}여기서는 this.props를 둘 다 props로 바꿔야 합니다. 애플리케이션에 있는 여러 컴포넌트들은 함수 컴포넌트로 구현할 수 있습니다. 함수 컴포넌트는 더 쉽게 작성할 수 있고 React가 더 효율적으로 최적화할 수 있습니다.코드를 깔끔하게 만들면서 onClick={() => props.onClick()}을 onClick={props.onClick}으로 바꿨습니다. 함수를 전달하는 것은 이 코드만으로 분합니다. onClick={props.onClick()}는props.onClick을 호출하기 때문에 동작하지 않습니다.지금까지의 코드는 이곳에서 보실 수 있습니다.변화 가져오기지금 우리의 게임의 단점은 오로지 X만 플레이할 수 있다는 점입니다. 고쳐봅시다.기본적으로 첫 이동을 'X'가 되도록 설정해봅시다. Board 생성자에서 초기 상태를 수정해주세요.  class Board extends React.Component {  constructor(props) {    super(props);    this.state = {      squares: Array(9).fill(null),      xIsNext: true,    };  }이동할 때마다 xIsNext의 불린 값은 바뀌면서 상태에 저장되어야 합니다. Board의 handleClick 함수를xIsNext 값이 바뀔 수 있도록 수정해봅시다.    handleClick(i) {    const squares = this.state.squares.slice();    squares[i] = this.state.xIsNext ? 'X' : 'O';    this.setState({      squares: squares,      xIsNext: !this.state.xIsNext,    });  }이제 X와 O가 순서대로 번갈아 나타납니다. 다음에 무엇이 표시될 때 보여주기 위해 Board의 render에서 "status" 텍스트를 바꿔봅시다.    render() {    const status = 'Next player: ' + (this.state.xIsNext ? 'X' : 'O');    return (      // the rest has not changed변경 사항을 적용한 Board 컴포넌트는 다음과 같습니다.  class Board extends React.Component {  constructor(props) {    super(props);    this.state = {      squares: Array(9).fill(null),      xIsNext: true,    };  }  handleClick(i) {    const squares = this.state.squares.slice();    squares[i] = this.state.xIsNext ? 'X' : 'O';    this.setState({      squares: squares,      xIsNext: !this.state.xIsNext,    });  }  renderSquare(i) {    return (              value={this.state.squares[i]}        onClick={() => this.handleClick(i)}      />    );  }  render() {    const status = 'Next player: ' + (this.state.xIsNext ? 'X' : 'O');    return (             {status}                 {this.renderSquare(0)}          {this.renderSquare(1)}          {this.renderSquare(2)}                        {this.renderSquare(3)}          {this.renderSquare(4)}          {this.renderSquare(5)}                        {this.renderSquare(6)}          {this.renderSquare(7)}          {this.renderSquare(8)}                );  }}지금까지의 코드는 이곳에서 볼 수 있습니다.승자 알려주기언제 게임에서 이기는지 표시해봅시다. 파일 맨 하단에 헬퍼 함수를 추가해주세요.  function calculateWinner(squares) {  const lines = [    [0, 1, 2],    [3, 4, 5],    [6, 7, 8],    [0, 3, 6],    [1, 4, 7],    [2, 5, 8],    [0, 4, 8],    [2, 4, 6],  ];  for (let i = 0; i < lines>    const [a, b, c] = lines[i];    if (squares[a] && squares[a] === squares[b] && squares[a] === squares[c]) {      return squares[a];    }  }  return null;}Board의 render 함수에서 누가 게임에서 이겼는지 확인할 수 있도록 호출할 수 있습니다. 또 누군가 이겼을 떄 "Winner: [X/O]" 상태 텍스트를 표시할 수 있습니다.Board의 render에서 status를 선언을 수정해주세요.    render() {    const winner = calculateWinner(this.state.squares);    let status;    if (winner) {      status = 'Winner: ' + winner;    } else {      status = 'Next player: ' + (this.state.xIsNext ? 'X' : 'O');    }    return (      // the rest has not changedBoard에서 handleClick을 일찍 반환하여 이미 누군가 이긴 게임에서 클릭하거나 이미 칠해진 사각형을 클릭하는 경우 무시하도록 변경할 수 있습니다.축하합니다! 틱택토 게임을 완성하셨습니다! 이제 React의 기초를 알았습니다. 여기서 진짜 승자는 여러분입니다.지금까지의 코드는 이곳에서 볼 수 있습니다.히스토리 저장하기보드의 이전 상태로 되돌려 이전 상태가 표시되도록 만들어봅시다. 이동이 있을때마다 새 squares 배열을 만들었습니다. 덕분에 이전 상태의 보드를 쉽게 저장할 수 있습니다.상태에 이와 같은 객체를 저장해봅시다.  history = [  {    squares: [      null, null, null,      null, null, null,      null, null, null,    ]  },  {    squares: [      null, null, null,      null, 'X', null,      null, null, null,    ]  },  // ...]우리는 이동 리스트를 표시하여 응답할 수 있는 더 수준 높은 Game 컴포넌트를 만들고 싶습니다. 그래서 Square 상태를 Board로 들어올린 것처럼 Board의 상태를 Game으로 들어올려 최 상위 레벨에서 필요한 모든 정보를 저장해봅시다.먼저 생성자를 추가해 Game의 초기 상태를 설정해주세요.  class Game extends React.Component {  constructor(props) {    super(props);    this.state = {      history: [{        squares: Array(9).fill(null),      }],      xIsNext: true,    };  }  render() {    return (                                              {/* status */}         {/* TODO */}                );  }}그 다음 Board를 수정하여 props를 거쳐 squares를 가져오고 이전에 Square에서 했던 것처럼 Game에서 지정한 onClick prop를 만들어줍시다. 각 사각형의 위치를 클릭 핸들러로 전달하여 어떤 사각형이 클릭되었는지 알 수 있습니다. 필요한 변경 사항은 다음과 같습니다.- Board의 constructor를 삭제하세요.- Board의 renderSquare에 있는 this.state.squares[i]를 this.props.sqaures[i]로 대체하세요.- Board의 renderSquare에 있는 this.handleClick(i)를 this.props.onClick(i)로 대체하세요.변경 사항을 반영한 Board 컴포넌트는 다음과 같습니다.  class Board extends React.Component {  handleClick(i) {    const squares = this.state.squares.slice();    if (calculateWinner(squares) || squares[i]) {      return;    }    squares[i] = this.state.xIsNext ? 'X' : 'O';    this.setState({      squares: squares,      xIsNext: !this.state.xIsNext,    });  }  renderSquare(i) {    return (              value={this.props.squares[i]}        onClick={() => this.props.onClick(i)}      />    );  }  render() {    const winner = calculateWinner(this.state.squares);    let status;    if (winner) {      status = 'Winner: ' + winner;    } else {      status = 'Next player: ' + (this.state.xIsNext ? 'X' : 'O');    }    return (             {status}                 {this.renderSquare(0)}          {this.renderSquare(1)}          {this.renderSquare(2)}                        {this.renderSquare(3)}          {this.renderSquare(4)}          {this.renderSquare(5)}                        {this.renderSquare(6)}          {this.renderSquare(7)}          {this.renderSquare(8)}                );  }}Game의 render는 히스토리 전체를 보고 게임 상태를 계산하여 가져올 수 있어야 합니다.  render() {    const history = this.state.history;    const current = history[history.length - 1];    const winner = calculateWinner(current.squares);    let status;    if (winner) {      status = 'Winner: ' + winner;    } else {      status = 'Next player: ' + (this.state.xIsNext ? 'X' : 'O');    }    return (                                  squares={current.squares}            onClick={(i) => this.handleClick(i)}          />                        {status}         {/* TODO */}                );  }Game에 상태를 랜더링하고 있기 때문에{status}를 지우고 Board의 render 함수로부터 상태를 계산하는 코드를 지울 수 있습니다.  render() {    return (                      {this.renderSquare(0)}          {this.renderSquare(1)}          {this.renderSquare(2)}                        {this.renderSquare(3)}          {this.renderSquare(4)}          {this.renderSquare(5)}                        {this.renderSquare(6)}          {this.renderSquare(7)}          {this.renderSquare(8)}                );  }그 다음 Board에서 Game으로 handleClick 메서드를 옮겨야 합니다. Board 클래스에서 잘라내기를 하고 Game 클래스로 붙여넣을 수 있습니다.Game 상태는 다르기 때문에 수정해야 할 것이 조금 있습니다. Game의 handleClick은 히스토리 항목을 연결하여 새로운 배열을 만들어 스택에 푸시해야 합니다.  handleClick(i) {    const history = this.state.history;    const current = history[history.length - 1];    const squares = current.squares.slice();    if (calculateWinner(squares) || squares[i]) {      return;    }    squares[i] = this.state.xIsNext ? 'X' : 'O';    this.setState({      history: history.concat([{        squares: squares,      }]),      xIsNext: !this.state.xIsNext,    });  }여기에서 Board는 renderSquare와 render만 필요합니다. 상태 초기화와 클릭 핸들러는 둘 다 Game에서 동작합니다.지금까지의 코드는 이곳에서 보실 수 있습니다.이동 표시하기지금까지 게임에서 진행된 이동을 표시해봅시다. 이전에 React 컴포넌트가 클래스로 JS 객체이고 그 덕에 데이터를 저장하고 전달할 수 있다고 배웠습니다. React에서 여러 아이템들을 랜더링하기 위해 React 요소의 배열을 전달했습니다. 배열을 빌드하는 가장 흔한 방법은 데이터 배열에서 map을 이용하는 것입니다. Game의 render 메서드에서 해봅시다.    render() {    const history = this.state.history;    const current = history[history.length - 1];    const winner = calculateWinner(current.squares);    const moves = history.map((step, move) => {      const desc = move ?        'Go to move #' + move :        'Go to game start';      return (                 <button onClick={() => this.jumpTo(move)}>{desc}</button>             );    });    let status;    if (winner) {      status = 'Winner: ' + winner;    } else {      status = 'Next player: ' + (this.state.xIsNext ? 'X' : 'O');    }    return (                                 squares={current.squares}            onClick={(i) => this.handleClick(i)}          />                        {status}         {moves}                );  }지금까지의 코드는 이곳에서 볼 수 있습니다.히스토리의 각 단계에서 <button>이 있는 리스트 아이템을 만들었습니다. 이 리스트 아이템은 우리가 곧 구현할 클릭 핸들러를 가지고 있습니다. 코드에서 다음과 같은 경고 메시지와 함께 게임에서 만들어지는 이동 목록을 볼 수 있습니다.Warning: Each child in an array or iterator should have a unique “key” prop. Check the render method of “Game”.경고: 배열이나 이터레이터에 있는 각 자식은 유니크 "key" prop을 가져야한다. "Game"의 render 메서드를 확인해보세요.이 경고의 의미가 무엇인지 얘기해봅시다.Keys아이템 리스트를 랜더링할때 React는 항상 리스트에 있는 각 아이템에 대한 정보를 저장합니다. 만약 상태를 가진 컴포넌트를 랜더링한다면 컴포넌트가 어떻게 실행되는지와 관계없이 상태는 저장 되어야 하고 React는 네이티브 뷰의 뒤에 참고할 것을 저장한다.리스트를 업데이트할 때 React는 무엇을 바꿀지 결정해야 합니다. 리스트에 아이템들을 추가하고, 지우고, 재배열하고, 수정할 수 있습니다.이 코드가 아래의 코드로 변경된다고 상상해봅시다.  Alexa: 7 tasks leftBen: 5 tasks leftBen: 9 tasks leftClaudia: 8 tasks leftAlexa: 5 tasks left사람의 눈에는 Alexa와 Ben의 자리가 바뀌고 Claudia가 추가된 것처럼 보인다. 하지만 React는 단순한 컴퓨터 프로그램이므로 여러분의 의도를 알지 못합니다. React는 리스트의 각 요소에서 key 속성을 지정해달라고 요청합니다. 문자열은 형제로부터 각 컴포넌트들을 구분합니다. 이 경우에 alexa, ben, claudia는 구분할 수 있는 키가 됩니다. 만약 아이템들이 데이터베이스의 객체와 일치시켜야 한다면 데이터베이스 ID을 사용하세요.{user.name}: {user.taskCount} tasks leftkey는 React에서 제공되는 특별한 속성입니다(ref에서 더 확장된 기능). 엘리먼트가 만들어질때 React는 key 속성을 가져오고 반환된 엘리먼트에 직접적으로 key를 저장합니다. key가 props의 한 부분으로 보일지라도 이것은 this.props.key로 참조할 수 없습니다. React는 어떤 하위 엘리먼트가 수정될지 결정하는 동안 알아서 key를 사용합니다. 컴포넌트가 자신의 키를 알 수 있는 방법은 없습니다.리스트가 랜더링될 때 React는 새로운 버전의 각 엘리먼트를 가져오고 이전 리스트에서 매칭되는 키를 가진 것을 찾습니다. key가 세트에 추가될 때 컴포넌트는 만들어집니다. 키가 삭제될 때 컴포넌트는 소멸됩니다. 키들은 React가 각 요소를 구별할 수 있도록하여 다시 랜더링하는 것을 무시하고 상태를 유지할 수 있게 합니다. 만약 컴포넌트의 키를 바꾼다면 완전히 지운 후 새롭게 생성됩니다.동적으로 리스트를 빌드할 때마다 적당한 키를 할당할 것을 강력 추천합니다. 만약 적당한 키를 가지지 못한다면 이를 위해 데이터를 재구성하여야 할지도 모릅니다.특정한 키를 구분하지 못한다면 React는 경고를 주고 배열 인덱스를 키로 사용합니다. 이는 올바른 선택이 아닙니다. 만약 리스트에 있는 엘리먼트들을 정렬하거나 리스트에 있는 버튼을 통해 지우거나 추가하면 명시적으로 key={i}를 전달하는 방법을 사용한다면 경고를 표시하지는 않지만 동일한 문제를 발생시키므로 대부분의 경우에 추천하지 않습니다.컴포넌트의 키가 전부 다를 필요는 없지만 관련있는 형제들 사이에서는 유니크해야 합니다.시간 여행 실행하기이동 리스트를 위해 우리는 각 단계에서 유니크 ID를 가졌습니다. Game의 render 메서드에서 키는로 추가하면 경고는 표시되지 않습니다.    const moves = history.map((step, move) => {      const desc = move ?        'Go to move #' + move :        'Go to game start';      return (                 <button onClick={() => this.jumpTo(move)}>{desc}</button>             );    });지금까지의 코드는 이곳에서 보실 수 있습니다.아직 junmTo가 정의되지 않았기 때문에 이동 버튼을 클릭하면 에러가 발생합니다. 지금 표시된 단계가 무엇인지 알기 위해 Game 상태에 새로운 키를 추가해봅시다.먼저Game의 constructor에  stepNumber: 0를 추가해주세요.class Game extends React.Component {  constructor(props) {    super(props);    this.state = {      history: [{        squares: Array(9).fill(null),      }],      stepNumber: 0,      xIsNext: true,    };  }그 다음 각 상태를 업데이트하기 위해 Game의 jumpTo 메서드를 정의해봅시다. 이 메서드에서는 xIsNext를 업데이트하고, 이동의 인덱스가 짝수라면 xIsNext를 true로 설정합니다.Game 클래스에jumpTo 메서드를 추가해주세요.handleClick(i) {    // this method has not changed  }  jumpTo(step) {    this.setState({     stepNumber: step,      xIsNext: (step % 2) === 0,    });  }  render() {    // this method has not changed  }Game handleClick에 상태를 업데이트 하기위해 stempNumber:history.length를 추가하여 새로운 이동이 있을 때마다  stepNumber를 업데이트 합니다. 현재 보드의 상태를 읽을 때 handleClick이 stepNumber라고 보고 클릭하는 시간대로 상태를 되돌릴 수 있습니다.  handleClick(i) {    const history = this.state.history.slice(0, this.state.stepNumber + 1);    const current = history[history.length - 1];    const squares = current.squares.slice();    if (calculateWinner(squares) || squares[i]) {      return;    }    squares[i] = this.state.xIsNext ? 'X' : 'O';    this.setState({      history: history.concat([{        squares: squares      }]),      stepNumber: history.length,      xIsNext: !this.state.xIsNext,    });  }이제 히스토리의 각 단계를 알기 위해 Game의 render를 수정할 수 있습니다.  render() {    const history = this.state.history;    const current = history[this.state.stepNumber];    const winner = calculateWinner(current.squares);    // the rest has not changed지금까지의 코드는 이곳에서 보실 수 있습니다.이제 이동 버튼을 클릭하면 보드는 즉시 그때 표시된 게임으로 변경됩니다.마무리틱택토 게임을 플레이 해보세요.- 틱택토 게임을 플레이 해보세요.- 한 명의 플레이어가 게임에서 이길 때를 이를 알려줍니다.- 게임이 진행되는 동안 이동 기록이 저장됩니다.- 게임 보드의 에전 버전을 표시하기 위해 시간을 되돌릴 수 있습니다.잘 동작하네요! React가 어떻게 동작하는지 잘 아셨기를 바랍니다.최종 결과물은 여기에서 확인하세요.시간이 더 있거나 새로운 스킬들을 연습해보고 싶다면 해볼 수 있는 몇 가지 아이디어가 있습니다. 점점 더 어려운 순으로 배치해두었습니다.1. 움직임 리스트에서 (col, row) 형태에 각 움직임 위치를 표시하세요.2. 움직임 리스트의 선택된 아이템을 볼드처리하세요.3. 하드 코딩한 것들 대신 사각형을 두 개의 루프를 사용하여 Board를 다시 작성하세요.4. 오름차순 혹은 내림차순 뭐든지 움직임을 정렬하는 버튼을 추가해보세요.5. 누군가 이겼을 때 무엇 때문에 이겼는지 세 개의 사각형을 하이라이트하세요.튜토리얼이 진행되는 동안 우리는 엘리먼트, 컴포넌트, props, 상태를 포함한 React의 수많은 컨셉들을 다뤘습니다. 각 주제에 대한 깊은 설명을 원한다면 남은 문서를 확인하세요. 컴포넌트 정의에 대해 더 많이 배우고 싶다면 이 문서를 확인하세요.#트레바리 #개발자 #안드로이드 #앱개발 #Node.js #백엔드 #인사이트 #경험공유 #React #리액트 #리액트가이드 #한글 #번역 #문서번역
조회수 20970

인스타그램 초기마케팅 헛발질들을 정리해봤다

김대리는 규모가 제법 있는 화장품 회사의 소셜마케터로 일하다가 얼마전 큰 꿈을 품고 화장품 커머스를 하는 초기 스타트업에 조인했다. 전 직장에서는 이미 팔로워가 만단위 이상인 인스타 계정을 운영하고 있었지만, 새롭게 조인한 스타트업은 소셜계정도 하나도 없고, 대행사와 협업하는 건 당연히 불가능하며, 계정설립부터 성장까지 모두 김대리가 도맡아서 직접 해야하는 상황이다.김대리는 나름 3달간 열심히 컨텐츠 기획해서 포스팅 하고, 리그램, 샘플증정, 기프티콘 팔로워 이벤트 등등 해볼만한건 다 진행해 봤으나 어째 팔로워 수가 천명도 못넘고 몇백명 사이를 왔다 갔다 하고 있다. 아무리 컨텐츠, 해시태그 멋드러지게 작업해서 올려도 라이크가 몇십개 달릴까 말까이고, 그나마 이벤트 할 때만 반짝 늘어난 팔로워들은 선물만 챙기고 언팔하는 먹튀들 투성이다.'김대리의 헛발질 시리즈' 첫번째 글에서는 김대리처럼 인스타그램 계정을 완전 초기부터 빌드업 하는 분들이 흔하게 빠지기 쉬운 헛발질들에 대해 소개해 보려고 한다.** 이 글에서 '김대리'는 그냥 일반명사 김대리지 실제 김대들을 지칭하는게 절대로 아님을 미리 밝힙니다.** '초기 인스타계정 빌드업' 하는 상황에 한정된 내용입니다.1. 컨텐츠가 뛰어나면 팔로워가 알아서 늘어난다고 생각하는 김대리들많은 김대리들이 컨텐츠 기획만 공들여서 하고 정작 만든 컨텐츠를 어떻게 유통시킬지, 어떤 사람들에게 내 컨텐츠를 도달시킬지에 대한 고민이 별로 없는 경우가 많다. 물론 컨텐츠가 뛰어나면 운 좋게도 달아놓은 해시태그들 중에서 몇개가 탑 포스트에 올라가고 오가닉 유입이 늘어나서 팔로워가 급 증가하는 흐름을 타는 경우도 있다. 하지만, 팔로워가 몇백명 밖에 없는 초기 계정에서 저 흐름을 타는 확률은 커피숍에서 내 옆 테이블에 앉은 이쁜 여자분이 갑자기 내게 말을 걸어올 확률 보다도 적다. 당신의 자원이 한정되어 있다면 초기에는 컨텐츠 제작에 모든 시간을 할애하지 말고 오히려 초기 팔로워를 어떤식으로 끌어모을지 인큐베이션 전략에 대해 고민해야 한다.Tip! 보통 초기 인큐베이션은 다음과 같은 마일스톤으로 진행된다. [500명 -> 1,000명 -> 3,000명 -> 7,500명 -> over 10k] 각각의 목표를 달성하기 위한 전략이 조금 상이한데, 1000명까지는 사실 직접 계정의 타겟이 되는 인스타그래머들을 찾아다니며 유입시키는 소위 노가다 마케팅이 가장 쉬운 방법이다. 이 부분에 대해서는 이전에 쓴 글인 인스타그램 노가다 마케팅 101을 참고하길 바란다. 천명이 넘어가면 이제 어느정도 해시태그 전략, 컨텐츠 전략, 이벤트 전략 이 3개를 잘 맞물려서 계정을 불려나갈 수 있다. 이 글의 주제는 '초기 인큐베이션'이기 때문에 이 부분에 대해서는 나중에 별도의 글로 소개하도록 하겠다.2. 맞팔혐오, 팔로잉 결벽증에 빠진 김대리들이거 필자도 풋내기 마케터 시절에 그랬었고 생각보다 많은 김대리들이 맞팔해서 팔로워 늘리는 행위를 심하게 깔보는 경향이 있다. 심지어 본인 브랜드의 인스타계정은 아주 고결해서 무조건 following 숫자가 두자리수를 넘어서는 안된다고 고집하기도 한다. 뭐, 본인 계정의 브랜드력이 스벅수준은 되서 사람들이 알아서 찾아와 팔로워를 눌러준다던지, 마케팅 버짓이 넘쳐나서 해시태그, 리그램, 팔로우, 라이크 등등의 이벤트를 매일같이 진행할 수 있는 기업의 담당자가 아니라면, 초기 인스타그램 계정을 키워야하는 당신에게 이런 사고방식은 매우 위험하다. 김대리처럼 몇달째 천명도 못넘고 계정이 제자리걸음을 하다가 포기해버리는 경우가 많기 때문이다.Tip! 물론, 너무 선팔 맞팔등의 행위를 무작위로 하고 다니는건 스패밍에 해당하긴 하지만, 본인 컨텐츠에 관심 가질만한 사람들을 잘 찾아다니면서 선팔 및 그들의 포스트 몇개를 라이크 해주는 노가다 행위는 초기에 아주 유용한 방법이 된다. 이 때 각종 인사이트 앱 등을 활용하여 팔로우백이 들어오지 않는 계정을 바로 언팔해가며 following 숫자를 관리하는것도 중요하다. 또한, 맞팔된 계정일지라도 본인 계정에서 자주 활동하는 사람들이 아니라면 역시 언팔을 정기적으로 해준다. 이렇게 해서 보통 팔로워 대비 팔로우 비율을 70% 이하로 유지시켜주면 좋다.3. 해시태그를 아무 생각없이 달아대는 김대리들인스타 계정의 오가닉 유입은 해시태그에 달려있다고 해도 과언이 아니다. 우선 유저들이 특정 해시태그를 클릭해 보면서 돌아다니는 소위 '해시태그 서핑' 행위가 매우 일반화 되어있고, 각 해시태그별로 Top Post라는 영역이 있어서 거기에 노출되면 오가닉 트래픽이 다량 발생하기 때문이다. 이런 중요한 해시태그를 아무렇게나 단다던지, 아예 달지도 않는 김대리들은 가장 중요한 마케팅 채널을 포기하는 것과도 같다.Tip1! 해시태그를 얼마나 달 수 있는지에 대해 테스트해 본 적은 없어 모르겠으나 해시태그는 최대한 많이 달 수록 좋다. 하지만 이게 포스트에 덕지덕지 붙어있으면 보기 좀 안좋아 보일 수 있으니 이렇게 해보자. 1) 트랜디하거나 중요한 해시태그 3-5개를 본문에 컨텐츠 내용과 섞어서 달아준다. 2) 나머지 자잘한 해시태그들과 본인 브랜드 관련 태그들을 댓글로 달아준다. 이렇게 하면 타임라인에서는 1번까지만 보이고 2번은 보이지 않으면서도 해시태그로 해당 포스트 검색이 가능해 진다.4. Top Post에 아무런 개념이 없는 김대리들위에서 언급한 해시태그에서 오가닉 유입이 발생하는건 해당 해시태그에 9개씩 뿌려주는 Top Post (이하 '탑포')라는 영역이 있기 때문이다. 이런 아주 중요하면서도 초기 인스타 계정에 단비와도 같은 존재인 탑포 매커니즘에 관심이 아예 없는 김대리들이 있다. 요즘은 이 알고리즘이 제법 정교해진 걸로 알고 있지만 아직까지도 포스트 성장률 지수가 탑포 올라가는데 가장 중요한 역할을 한다고 알려져 있다. 이게 뭐냐면, 어떤 포스트가 단시간내에 라이크 및 댓글이 많이 달릴수록 성장률 지수가 높게 계산되어 탑포에 노출되고 하루정도 머무르다가 내려가는 사이클이다. 이런 개념 없이 초기에 라이크, 댓글이 잘 달리지도 않는 즉, 오가닉에 아무런 도움도 안되는 포스트만 차곡차곡 쌓아나가다가는, 본인 계정에 포스트는 제법 많은데 팔로워 수는 여전히 초라한 계정이 되버리기 쉽다. 이 부분에 대해서는 레딧에 올라온 이 글을 참고하도록 하자.Tip! 포스팅 계획을 수립할 때 개별 포스트의 목적을 명확히 해서, 예를들면 브랜딩용과 오가닉유입용으로 구분해서 오가닉유입용 포스트에는 올리기 전에 미리 오가닉 유입에 대해 기획을 깔아놓는 전략이 필요하다. 보통 이벤트를 병행한다던지, 이슈성 있는 내용 (이쁜여자, 귀요미 동물들, 웃낀내용 등)을 활용하는 등의 다양한 방법이 있다. 오가닉 유입용 컨텐츠 제작에 자신이 없는 경우 레딧에서 웃낀 포스트를 물어와서 활용하는 방법도 있는데 저작권에 위배되지 않도록 조심해야 한다.5. 제품관련 포스팅만 올려대는 김대리들가끔보면 화장품 브랜드라고 죄다 화장품 사진만 올려대고, 의류 브랜드라고 모델이 포즈취하고 옷입은것만 올려대는 계정들이 아주아주 많다. 물론 본인의 브랜드력이 뛰어나서 사람들이 쳐다보고싶은 제품들이라면 모르겠지만, 이런경우 일반인들은 팔로우하기를 꺼려하고 설령 팔로우 했다가도 나중에 타임라인에 너무 광고가 많아진다고 언팔하는 경우가 많다.Tip! 제품을 홍보한다고 제품을 잘 찍어 올리는건 너무 저차원적인 생각이다. 최대한 제품을 실제 사용 상황에 자연스럽게 녹여낸 일상 사진들로 승화시킨다던지, 본인 브랜드 페르소나와 어울리는 일상의 이야기들을 제품관련 포스팅 중간중간에 녹여내 주면 아주 좋다. 혹은 본인 제품의 소비자들의 포스트를 리그램으로 섞어서 올려주는것도 괜찮은 전략이다.6. 계정의 페르소나, 컨셉, 타겟 어필에 대한 개념이 없는 김대리들누가 내 계정을 팔로우 하게 만드려면 그 계정 자체가 매력적으로 보여야 한다. 해당 계정을 매력적으로 어필하기 위해서는 계정에서 그려지는 이미지, 즉 페르소나가 매력적이거나, 해당 계정의 컨셉이 뚜렷해서 내가 이 계정을 팔로우하면 어떤 포스트를 볼 수 있겠구나 하는 이미지가 잘 그려져야 하는데, 이런 개념 없이 마구잡이식의 컨텐츠를 운영하는 김대리들의 계정은 오가닉 유입은 물론이요 심지어 맞팔도 잘 안들어오게 되는 경우가 많다.Tip! 아무리 기업용, 홍보용일지라도 본인 계정의 페르소나, 컨셉, 타겟등을 명확하게 수립하고 이에 맞추어 컨텐츠를 올려야 한다. 예를들어 위의 김대리가 맡은 화장품 브랜드가 주로 20대 여성을 타겟으로 하고 있고, 브랜드 컬러가 화사한 핑크톤이라면, 본인 계정의 페르소나를 20대 중후반의 직장인 여성으로 잡고, 전체적인 톤앤매너를 핑크톤의 화사하고 밝은 느낌의 필터를 적용하여 컨텐츠를 운영할 수 있다. 또한 컨셉을 아예 '화장법'으로 명확하게 잡고 본인 제품을 활용한 다양한 메이크업 팁 관련 컨텐츠에 집중하는것도 좋은 방법이 되겠다.7. 광고, 이벤트만 쳐다보고 있는 김대리들팔로워를 100% 이벤트로만 늘리는 계정들이 제법 있다. 계정 팔로우 하면 쿠폰을 준다던지, 화장품 샘플 이벤트, 복권이벤트 등등이 해당된다. 이벤트가 나쁘다는게 아니라 100% 이벤트로만 팔로워 늘리기에 몰입하는게 잘못됐다는 거다. 아무리 저렴한 기프티콘일지라도 팔로워 1명당 획득비용이 3천원이 넘는 이벤트를 밥먹듯이 집행하는건 자원배분 측면에서 매우 비효율적이다. 특히 요즘은 쿠폰만 얻고 언팔해버리는 소위 먹튀가 많아서 이벤트 할 때만 팔로워가 반짝 늘다가 다시 줄어드는 롤러코스터 형국이 펼쳐지기도 한다.Tip! 이벤트는 주기적으로 하는 것 보다는 간헐적으로, 그리고 단독으로 집행하기 보다는 다른 툴과 결합해서 진행하는게 더욱 효과적이다. 예를들면, 인플루언서 네트워크를 활용하는 중에 오가닉이 터지는 시점에 이를 부스트업 하기 위해 동시에 이벤트를 진행하는 등의 방법이다.지금까지 초기 인스타그램 계정 마케팅을 할 때 쉽게 겪을 수 있는 헛발질 케이스에 대해 소개해 봤다. 다시한번 강조하지만, 인스타그램 마케팅은 팔로워가 어느정도 있는 상황에서 시작하는 것과 완전 제로에서 시작하는 것의 방법론이 많이 다르다. 또한, 완전 제로에서 시작하는 경우 어느정도 노가다+고군분투 기법이 필요하기 때문에 위의 김대리 처럼 대기업에서 고결하게 마케팅 하다가 온 경우 대부분 초기에 어마어마한 멘붕상태를 경험하게 된다.필자 역시 맞팔등을 해가며 초기 천명을 달성하기 위해 고군분투하던 시절에 [내 컨텐츠력]과 [초기 인큐베이팅 유입을 알아서 잘 끌어와 주는 자동화 툴]의 인스타 마케팅 이분법을 고민하기 시작했고, 후자를 위한 자동화 툴에 대한 연구 끝에 얼마전에 김대리들에게 단비와 같은 솔루션을 개발하게 되어 잠시 이를 광고하려고 하니, 광고를 보기 싫으신 분들은 여기서 창을 닫아주시기 바란다.많은 분들이 초기 팔로워 늘리는게 쉽지가 않아서 다음과 같은 대체방법에 관심을 갖게 된다. 본인 역시 초기에 저런 서비스들 조사해 보고 몇개는 직접 사용도 해봤다.1) 허위로 팔로워/라이크 찍어주는 서비스2) 팔로워 늘리기 봇3) 팔로워 앵벌이 서비스결론부터 말하자면 시중에 그 어떤 서비스도 우리같이 마케터들을 위해 완벽하게 고안된 서비스가 한개도 존재하지 않는다. 각각의 문제점을 간략히 설명해 보면 다음과 같다.1) 허위로 팔로워/라이크 찍어주는 서비스이거는 그냥 수천개의 네트워크 허위 계정을 보유한 업체에서 팔로워, 라이크 숫자를 얼마 이상 찍어주는 서비스이다. 이건 진짜 마케팅에 도움이 1도 안되는 서비스일 뿐더러, 당연히 허위 계정들이기에 (플필 있다고 해서 진짜 계정들이 절대로 아니니 속지말자) 내가 올리는 컨텐츠에 오가닉하게 라이크가 달리지도 않고, 어느정도 시간 지나면 인스타에서 페이크 계정들 정리작업으로 인해 눌려진 팔로워/라이크가 쑥쑥 빠지기까지 한다!! 게다가 허위계정이 섞인터라 내 포스트가 실제 팔로워들에게 도달이 잘 안되는 상황까지 만들어 버리니, 마케터로서 이 서비스를 쓰는건 백해무익이다.2) 팔로워 늘리기 봇이건 뭐냐면, 특정 해시태그들을 입력해 놓으면 봇이 해당 해시태그로 검색되는 포스트를 모조리 찾아내어 해당 포스트를 올린 사람들을 선팔하고 다님으로써 맞팔을 유도하는 봇 프로그램이다. 예를들어 #맞팔, #선팔하면맞팔 등의 해시태그를 찾아다니며 선팔을 하고 다님으로써 맞팔을 유도하는 거다. 1번보다야 훨씬 나은 방식이지만 역시 문제가 존재한다. 1) 인스타에서 봇 프로그램 규제가 빡시기 때문에 허접하게 짜여진 알고리즘의 경우 계정 블락 당하는 경우가 많다. 2) 성인계정이나 활동량이 거의 없는 유령같은 계정을 필터링하는게 불가능하다. 3) 인스타의 rate limit 정책을 정확하게 알 길이 없어 안전빵으로 효율을 최저로 낮춰놓은 봇들이 대부분이다. 가격체계가 기간제로 되어있으면 백퍼 효율을 최저로 낮춰놓고 여기에 1번의 네트워크 계정을 적당히 섞어서 하루 평균 50명 이상은 늘어나는 서비스로 둔갑시켜 버리는 경우가 허다하다. 보통 여기에 반 이상은 허위가 섞여있는데 소비자는 알아채기 힘들다.3) 팔로워 앵벌이 서비스이건 2번에 비해 속도도 느리고 외국인이 많으며 해당 팔로워들은 나중에 먹튀하는 경우가 매우 많다. 한가지 장점이라면 2번에 비해 안전하다. 인스타 정책에 위배되는 행위는 아니기 때문에 이거 썼다고 계정이 막히는 경우는 별로 없다. 개인 계정이라면 이거 써서 팔로워 키우는거 크게 무리는 없지만 마케팅 목적으로 활용하는 기업계정이 이거 쓰고 있는건 조금 없어보이기도 하고 속도도 너무 느려서 비추천이다.이 처럼 시중에 제대로된 서비스가 별로 없다보니, 우리는 업계 최고의 퀄리티라고 자부하는 '인스타슈가'라는 2번영역에 해당하는 봇 알고리즘을 개발해서 약 반년간 운영중이다.인스타슈가 - https://instasugar.co/<iframe width="940.000000" height="529.000000" src="//play-tv.kakao.com/embed/player/cliplink/vdf62MgDwepuMGxRDaeyxpN@my?service=daum_brunch§ion=article&showcover=1&showinfo=0&extensions=0&rel=0" frameborder="0" allowfullscreen="">시중에 제대로된 서비스가 없어서 아예 직접 최강의 솔루션을 만들어 버렸다.인스타슈가는 단순한 팔로워 늘리기 봇이 아니라, 강력한 타겟팅 알고리즘이 거의 사람이 판단하는 수준으로 연관성이 높은 실제 유저들만 찾아다니며 내 팔로워로 유인할 수 있게 설계된 솔루션이다. 또한 업계 최초로 풀 패키지 대시보드가 있어서, 마케터가 직접 세밀하게 타겟팅을 조정해 가며 인큐베이팅이 가능하다. 차별점을 요약해 보면 다음과 같다.1. 40여가지 이상의 기준으로 타겟할 유저를 결정2. 머신러닝 기반의 봇계정이 돌아다니며 수집하고 있는 160만건 이상의 성인, 스팸계정 DB를 통해 99.8%의 정확도로 스팸계정 필터링3. 해당 계정이 개인 계정인지, 비즈니스 용도인지를 검증하여 비즈니스 필터링 모드가 on 되어 있으면 비즈니스 계정들을 94%의 정확도로 필터링4. 인스타그램의 활동 리밋양을 추정하고 이 범위 내에서 최대효율을 내는 확률모델을 통해 가장 팔로워 전환 확률이 높을것으로 추정되는 계정들만 타겟함5.대시보드 -  현재 프로그램이 움직이는 로그, 타겟팅 해시태그 설정, 프로그램의 상태, 시작 및 정지, 다양한 특수 기능들을 모두 실시간으로 확인 & 통제 가능6. 안정성 - 해당 계정에 기능블락이나 특정 이슈가 생기는걸 실시간 감지하여 자동 정지, 속도 조절, 자동 재생 등이 통합적으로 이루어짐특히, 해시태그를 내가 직접 바꿔가면서 전환율을 모니터링하고 본인의 마케팅 방향성에 어울리는 인스타 유저들만 타겟팅 가능한 마케팅 자동화 툴은 인스타슈가가 유일하다.본인의 마케팅 방향성에 어울리는 타겟들만 찾아다니도록 직접  해시태그를 적용 및 변경이 자유자재로 가능한 유일한 솔루션이다.6개월간 재구매율이 80%가 넘을 정도로 만족도가 높고, 쇼핑몰, O2O, 푸드, 레스토랑 등 수 많은 기업 인스타그램 계정이 인스타슈가를 거쳐갔을 정도로 퀄리티가 우수하다 (이름대면 다 알만한 스타트업 계정도 제법 있다).인스타슈가 - https://instasugar.co/
조회수 3656

손정의가 창업가들에게 당부하는 41가지의 말.

1. 일자리 찾는 것에 급급해하지 말고 인생 전반에 걸쳐 무엇을 추구할지 머리가 터질 정도로 깊이 생각해서 '오를 산'을 결정해보아라.2. 비전이라는 것은 각오를 단단히 다지고 많은 사람들을 끌어들여 일을 이룬다.3. 도망갈 길을 끊고서라도 열정을 바칠 용기를 가져라.4. 나는 죽을 각오를 하고 열심히 했다.5. 사람들이 고마워하는 일을 하고 싶다. 그렇게 해야만 한다.6. 후세에 이름이 남지 않는다고 하더라도 많은 사람들을 기쁘게 하는 것이 더 중요하다.7. 야후BB를 시작했을 때, 주말,휴일,명절,설 모두 반납했다.8. 젊은 시절밖에 할 수 없는 이 경험이 그 후의 내 직업 인생을 바꿔주었다.반드시 많은 사람들에게 도움이 되는 일이라고 생각되는 일을 만났을 때는 목숨을 걸고 돌진해야 한다. 젊으니까 덤비면서 할 수 있는 일이 있다.9. 한 가지 목표를 정했으면 다른 것은 신경쓰지 마라. 정말 중요한 것이 무엇인지 명확히해라.10. 옳다고 생각한 일은 반드시 지켜라.11. 먼 훗날의 일보다 눈 앞의 일을 말하는 사람은 평생 눈 앞의 문제에서 못 벗어난다.12. 젊은 시절에 꼭 해야할 일이 있다.젊을 때 해야할 일을 하지 않으면 순식간에 시간은 간다.13. 아무런 연관이 없을 것 같은 것들을 연결해라, 패턴화 시키고, 파고들어라.14. 지혜는 짜면 짤수록 나온다. 진정한 문제는 스스로 정의하는 것이다.15. 열정이 사람을 부른다. 학생 신분이었지만 그 분야의 전문가인 교수를 아르바이트로 고용하고 임금을 지불하겠다는 생각을 했다.16. 소프트뱅크를 만들었을 때도 일류 인재를 모으는 일에 고심했다.더더욱 자신의 꿈을 이야기하는 것이 중요하다. 사람의 마음을 움직이고 끌어들이기 위해서는 열정이 최대의 무기다. 자신의 꿈을 이야기 할 수 있는 힘을 길러라.17. 귤 상자에 올라가 2명의 아르바이트 사원 앞에서 말했다. 사업가를 목표로 하고 있는 이상 1,000억 5,000억은 대단한 것이 아닙니다. 1조,2조라는 수 단위로 일을 하는 규모의 회사가 될 것입니다. 그리고 그 둘은 나갔다.18. 30대때 주식상장, 그리고 미국 진출에 승부를 걸었다. 상장 뒤 시가총액 2조 4,000억이 되었다.19. 오기를 부리지마라. 철퇴의 중요함을 이해하고 있는지에 따라 생존이 갈린다.20. 싸움에서 가장 중요한 것은 시작하는 타이밍과 퇴각하는 타이밍이다.21. 철수할 때에는 승부에 임할 때보다 10배의 용기가 더 필요하다는 것이다.22.  맨 처음에는 비록 근거가 부족해도 좋으니 우선은 자신이 크게 성공하는 이미지를 그린다.23. 상상할 수 있는 것은 반드시 실현할 수 있다. 노력은 그 다음에 해도 된다.24. 료마처럼 온 몸이 갈기갈기 찢겨질 정도로 열심히 일해보고 싶다는 생각이 강렬하게 싹텄다. 금전욕 같은게 아니라 100만명, 1,000만명을 위해 공헌하고 싶었다. 25. 소프트뱅크의 경우에는 전파를 개선한다는 것이 꼭 해야할 일이였다. 98%에서 99% , 단 1%를 늘리기 위해 기지국을 배로 늘린 것이다. 고작 한 두명의 고객을 추가로 확보하기 위해 몇 백만엔을 썼다.변명하지 말고 굳은 결심으로 성의를 보이고 할 수 있는 일은 최선을 다해서 하는 것. 그것이 고객에게 할 수 있는 유일한 일이다.26. 아침에 일어나는 것도 즐거워서 견딜 수가 없는 그런 마음을 가져야한다. 단 한번 밖에 없는 인생을 낭비하지 말고 소중하게 여겼으면 좋겠다.27. 그날 하루에 얼마나 충실했냐는 목표를 어떻게 세웠느냐에 달려있다.28. 나의 사업 결정은 적어도 50년 간 질리지 않고 설레면서 일할 수 있는 것이다.29. 뜻을 먼저 세워야 된다. 그러면 50% 이상이 해결된 것이다. 뜻이란 개인적인 바람을 도모하는 것을 뛰어넘는 장대한 목표다.30. 생각이 통하는 동료가 있다는 것은 매우 중요하다. 뜻을 공유할 수 있는 동료를 몇 명 만들 수 있는가?31. 한시라도 빨리 리콜하고 철저하게 정보를 공개해야 한다. 무언가를 숨기고 있다고 생각하게 되면 끝이다.32. 위기에 빠졌을 때 일수록 믿어주는 사람을 저버리지말고 보답하겠다는 마음을 가지고 정면으로 부딪혀야 한다.32. 용기는 처음부터 가지고 있는 것이 아니라 무언가를 간절히 지키고 싶다는 책임감에서 나온다.33. 머리가 터질 정도로 생각해라.34. 내일을 읽고 오늘을 일하라.35. 의사결정의 속도가 중요하다.36. 병원에 입원해있는 동안 꽤 많은 책을 읽었다.약 4,000권 가량. 이름을 남기지 못하더라도 100년, 200년 후의 사람들에게 환영받는 일에 인생을 바치고 싶다는 생각을 했다.37. 꿈꾸지 않는 자, 행복을 바라지말라.38. 인간의 최대행복과 최대슬픔에 공감하라.39. 인생의 명제란 사람들에게 행복을 주는 것이다.40. 나 스스로 감동한 일이 아니면 다른 사람을 감동시킬 수 없다.41. 내가 살고 있는 곳을 미래를 위해 사람들에게 도움이 되고 싶은 일을 하고 싶다. 이런 열정적이고 가치 있는 생각으로 뜻을 높이 가졌으면 한다. 가장 중요한 것은 한 명이라도 더 많은 사람에게 고맙다는 인사를 받는 것이다. 한 명이라도 더 많은 사람에게 고맙다는 인사를 받을 수 있게 하라.참조)http://hellohyunil.tistory.com/m/601PPL. 페오펫에서는 위대한 마케터를(CMO) / 위대한 디자이너(CMO) / 위대한 개발자(CTO)를 모시고 있습니다. 커피 한잔 하실 분은 연락주세요.#페오펫 #peopet #아이디어기업 #기업문화 #목표 #비전 #각오 #손정의 #인사이트
조회수 1350

유배지에서 부치는 편지

안녕하세요.집에서 공항까지, 공항에서 집까지 공항을 오가는 가장 편한 방법 벅시(BUXI) 입니다.조금 늦은감이 있지만 모두 연휴는 잘 보내셨는지 궁금합니다.연휴 기간 동안 공항을 오고 가는 여러분들을 위해 내부 직원들이 열심히 노력하였습니다.특히나 제일 고생이 많으셨던 벅시(BUXI) 드라이버 분들의 노고에 감사드립니다.조금이라도 불편함점이 있었다면 머리숙여 죄송하다는 말씀드리며,더 나은 서비스를 위해 노력할 것을 약속 드리겠습니다.그러면 저희 근황을 말씀을 드려볼까 합니다...1. 유배 당하다말 그대로 입니다. 아직 팀이라고 부르기 민망 하지만(2명) 제가 속한 팀이 사무실에서 쫒겨났습니다.그냥 막 나가라고 해서 저희는 사무실 밖에 자리를 마련하여 일을 하고 있습니다.. 흑흑빼앗긴 나의 들... 과연 봄은 오는가...을씨년스러운 유배지 입구...ㄷㄷㄷ전하...아니 대표님 저희가 무슨 잘못을 했단 말입니까!!명을 거두어 주시옵소서...흠... 전망은 좋아보이지만...어둠의 자식이 되어버린...불이 안들어오는 이 공간....유배지에서 다양한 저서를 남겼던 정약용의 마음으로저희는 여러분들을 위해 일할 것을 다짐합니다...사실은 인원 충원으로 인해 밖에서 일하는 거에요 하하하 근데 왜 나죠?2. 벅시(BUXI) 홈페이지 리뉴얼!그동안 칙칙(...)하던 벅시(BUXI)의 홈페이지가 드디어 리뉴얼을 진행하였습니다!캬~ 칙칙했던 대표님의 감성이 사라졌네요.당연히 예약도 가능하구요!예약 많이 해주세요~아직 100% 완성이 된 것이 아니라서 점점 더 발전하는 벅시(BUXI) 홈페이지를 보실 수 있을 겁니다.이용 방법도 좀 더 쉽게...기존 홈페이지와 달리 벅시(BUXI) 서비스에 대해서 좀 더 알기 쉽도록 별도의 페이지도 만들었고,디자인 적으로도 더욱 신경을 써서 만들었습니다.이용 규정에 대해서 좀 더 명확하게 알려드릴 수 있도록 고심하고 있으며,특히 문의가 많이 들어오는 반려동물 관련한 규정도 활발하게 논의 중에 있습니다.반려동물도 행복한 여행길이 될 수 도록,그리고 모두가 안전한 여행길이 될 수 있도록 준비하고 있습니다.다시 한번 고생해 주신 분들께 다시 한번 박수를...음... 벅시(BUXI) 홈페이지 리뉴얼 이벤트라도 할까요?짠돌이 대표님이 허락을 안하시겠죠 뭐 하하하하그렇죠? 저를 유배 보낸 짠돌이 대표님?3. 채용 관련혹시라도 관심있으신 분이 있을까봐...후후후아래 링크를 한번 살포시 참조해주셔요.*대표님 개드립을 받아 칠 수 있는 분이라면  대환영!!*https://www.theteams.kr/recruit/wanted/1469?search=벅우리는 벅시, 영어로 BUXIBUS+TAXI 그래서 벅시(BUXI)공항을 오고가는 벅시(BUXI)나아가 차세대 교통플랫폼이 되고 싶은 벅시(BUXI) 입니다.항상 감사합니다.#벅시 #스타트업일상 #운영 #성장 #일지 #기업문화 #조직문화 #사내복지 #사무실풍경
조회수 900

진짜 목표와 가짜 목표

연말을 핑계삼아 술자리를 갖자는 연락이 종종 온다. 확실히 해가 바뀌는 때가 온 것 같다. 생각해보면 12월은 이런 저런 핑계로 놀 구실이 많은 달이다. 일탈의 분위기 덕분이다. 평소 만남이 잦지 않던 친구들이 삼삼오오 뭉치는 것도, 연말 시상식이 자아내는 축제 분위기도, 모두 한 해를 마무리하는 일탈적 상황이 만든 작품들이다. 평소 마음의 허리띠를 바짝 조이고 살았던 사람들도 '이 때만큼은' 이라는 핑계로 살짝 긴장이 풀어질 수 있는, 12월은 그런 달이다. (그런 12월이 좋다)하지만 1월이 되면 분위기는 사뭇 달라진다. 새해 더 좋은 실적을 약속한 기업들은 1월이 되면 직원들에게 실적의 압박을 가해온다. 새해가 되었으니 예열을 마치고 달라진 모습을 보여달라고 한다. 웃고 마시며 떠들던 12월의 분위기는 사라지고, 사뭇 차갑고 비장한 공기가 사무실을 무겁게 채운다. 연말 파티 분위기에서 깨어나지 못한 모습을 보였다가는 금새 불호령이 날아든다. 12월과 1월은 서로 어깨를 마주하고 있는 달이지만 이웃치고는 그렇게 분위기가 제법 다르다. 새해가 되면 많은 사람들이 목표를 세운다. 지난 해의 묵은 때를 씻고 새해에는 달라지겠노라 선언하는 사람이 주변에 하나 둘 늘어간다. 직장인의 95% 가 새해 목표를 세운다고 한다. 책읽기, 다이어트, 돈모으기, 자기계발과 같은 목표들이다. 하지만 이 중 9% 만이 새해 목표 달성에 성공한다. 연초에 헬스장에서 런닝머신을 뛸 때면 기다리는 손님들의 따가운 시선을 감내해야한다. 물론 2월이 되면 헬스장은 예년의 한산함을 되찾는다. 매번 반복하는 새해 목표 세우기와 실패의 사이클을 지우고, 올해 만큼은 달라져 보겠다고 생각했다면 목표를 세울 때 이 두가지를 기억해보자.목표를 세울 때 기억할 두 가지 질문- 진짜 스스로가 원하는 목표일까- 하루 단위로 무엇을 해야할까1. 진짜 목표와 가짜 목표를 구별하자새해 목표가 무엇이냐고 물으면 열에 아홉은 책읽기나 운동 이야기를 꺼낸다. 궁금함에 왜 책을 읽으려고 하는지, 책을 얼마나 읽을 계획인지 물으면 머뭇거리며 생각을 한다. 아마도 별로 생각해보지 않았을 공산이 크다. 이런 반응은 진짜 목표일 가능성이 낮다. 새해 목표라는 걸 생각해 본 적이 딱히 없는데, 아무 목표도 없다고 하기에는 낯이 없으니 무난한 대답을 꺼내는 경우다. 그런 모습을 보면 고등학교때 빈 답안지를 채우려고 부랴부랴 답을 찍는 모습이 생각난다. 그런데 학창시절의 시험지 제출과 삶의 계획을 짜는 일은 조금 성격이 다르다. 인생은 애초에 정답을 맞춰나가는 문제도 아니며, 설사 빈 칸을 메운다고 점수가 오를 가능성이 있는 시험도 아니다. 차라리 목표가 없으면 없다, 혹은 아직 생각해보지 못했다고 솔직한 답을 하는 편이 낫다고 본다. 그래야 새해 목표라는 것에 대해 한 번 생각해 볼 기회가 있을 것이다. 답을 꼭 써야만 할까?그러면 가짜 목표가 아닌 본인이 진짜 원하는 목표는 어떻게 찾을 수 있을까? 아마도 이런 질문을 던지는 것이 시작 할 수 있을 것 같다.1년이 지난 2019년 12월내가 원하는 나의 모습은 무엇인가?지금보다 어떤 면에서 발전을 하고 달라지면 내가 만족할 수 있을지를 생각해보자. 1년뒤 가지고 싶은 능력이 있거나, 도달하고 싶은 상태가 있다면 그것이 목표다. 그런데 사람들은 특정한 시점의 영향을 많이 받는다. 책을 많이 읽는 친구를 만난 날 새해 목표를 세우면 책읽기가 목표가 된다. 주식투자로 돈을 많이 번 사람의 이야기를 듣고 새해 목표를 짠다면 주식투자 공부가 목표가 된다. (이미 몇차례나 경험이 있다..)그런데 이런 감정에 휩싸여 목표를 정하는 것은 목표를 충동 구매하는 것과 같다. 그래서 만약 새해의 목표를 정할 생각이 있다면, 앉은 자리에서 확정하지 말고, 2-3일 텀을 두고 다시 한번 목표를 생각해 보는 것이 좋다. 그렇게 다른 분위기와 상황에서 3번을 고민했을 때도 같은 답이 나온다면, 축하할 일이다.이번에는 아마도 꽤 오랫동안 목표를 달성하려는 높은 열정을 유지할 수 있을 것이다.2. 하루 단위의 동사형 목표를 만들자새해 목표는 1년뒤 원하는 싶은 모습에서 시작할 수 있다. 가령, 고시 합격, 10kg 감량, 책 50권 읽기, 토익 900점 받기와 같은 것들이다. 이런 결과형 목표는 사람들에게 강한 목표의식을 갖게한다. 무언가를 성취한 모습을 상상하면 시작할 수 있는 힘이 생겨난다. 하지만 사실 좋은 목표라고 하긴 어렵다. 당장 뭘 해야할지 알 수 없기 때문이다. 좋은 목표는 바로 행동으로 이어질 수 있는 하루 단위의 동사형 목표다. 이런 이야기를 들은 적이 있다.직업을 찾을 때 원하는 직업을 명사형으로 이야기하지 말고 동사형으로 이야기해라.'의사'라고 부르지 말고, 사람의 병을 고치는 일을 하겠다고 이야기해라. 그래야 일의 본질에 가까워질 수 있다. 명사형이 타이틀이라면, 동사형은 실제 하는 일을 설명한다. 목표도 이와 같다. 명사형 (10kg 감량)은 목표 의식을 자극할 수 있지만, 실제 해야하는 일로 직결되는 것은 동사형 (매일 만보 걷기)목표다. 목표가 크거나 난이도가 높다면, 이를 다시 하루단위로 쪼개는 작업을 하자. 일단 내가 먹을 수 있는지 가늠할 수 있을 만큼 작은 조각을 내야한다. 일년에 책 50권을 읽겠다고 하면, 연간 15,000 페이지를 읽어야한다. 365일 매일 읽는다고 하면, 하루도 빠짐없이 41쪽씩을 읽어야 하는 분량이다. 목표가 이 정도의 구체성을 띄면, 비로소 이 프로젝트가 가능성이 있는지 아니면 시작부터 달성과는 거리가 먼 허무맹랑한 것인지 구별할 수 있다.준오헤어 강윤선 대표는 직원들에게 하루의 목표를 강조하는 것으로 유명하다.준오헤어 강윤선 대표새해가 점점 가까워 오면서, 아마도 많은 분들께서 이미 목표 달성과 관련한 글이나 영상을 접하셨을 것이라 생각한다. 그것은 대개 이런 메시지다.목표를 글로 써라, 데드라인을 정해둬라, 목표를 구체적으로 정해라, 주변 사람들에게 알려라사실 목표 달성과 관련한 팁들이 대단히 혁신적인 것은 아니다. 이번 글에서도 뭔가 한 방을 기대했겠지만 아쉽게도 흔하고 뻔한 소리가 되풀이 되었을 수도 있다. 그런데 나는 사람들이 목표 달성 과정의 특성을 이해하는 것이 중요하다고 생각한다. 애초에 목표를 100% 달성할 수 있는 비법은 없을 것이다. 목표를 달성해가는 과정에서 중요한 것은 방법보다는 행동이고, 그 행동을 꾸준히 지속하는 것이 달성 확률을 높일 수 있는 본질이다. 목표 달성이 조금씩 환경을 바꿔가며 달성 가능성을 1% 씩 높여가는 부단한 노력의 과정이기에, 대단한 한 방은 아닐지언정 이런 소소한 팁들이 도움이 될 수 있을 것이라고 믿는다. 2019년 모두 화이팅이다.챌린저스, 확실한 목표달성 꾸준한 습관형성 앱www.chlngers.com
조회수 1216

슬라운드 브랜드 아이덴티티(B.I) 개발기 - 1화

1. 좋은 브랜드 만들기에 대한 관심.세상에는 단순히 보기 좋은 멋있는 브랜드가 아니라, 그들의 철학과 가치관을 효과적으로 전달하는 매력적인 브랜드들이 정말 정말 많습니다. 좋은 브랜드들을 발견할때마다 ‘갖고싶다 저브랜드..’ 보다는‘와 샘난다.. 쟤네 왜이렇게 잘해’ 라고 느끼는 저는 좋은 브랜드들이 ‘왜 좋은지, 어떻게 좋은 브랜드가 되었는지, 앞으로는 어떠한 전략을 가지고 있는지’ 등에 관심이 많고 그들의 행보과 가치를 연구하고 있습니다. 그리고 최종 목적은 언젠가 어떤 형태로든 ‘좋은 브랜드’를 만드는 것이고요!2. 슬라운드와의 만남지난 해 여름, 우연한 기회로 매트리스 스타트업의 브랜드 디자이너로 합류하게 되었습니다.브랜드 디자이너라고는 하지만, 창업자들과 처음만나 이야기를 나누어 보니디자인의 ‘ㄷ’ 관련한 모든 일..이 슬라운드 안에서 제가 앞으로 마주해야할 일들이었습니다.(매트리스 두개뿐인 황량한 쇼룸부터.. 강력한 군청의 파란색 로고까지..)그래서 사실 메모리폼 매트리스에는 별로 관심이 없었지만.. 학부에서 인테리어를 전공한 이후 가구회사, 전시회사, 인테리어 회사 등을 거쳐  공간, 그래픽 작업을 하면서 현재는 대학원에서 석사과정으로 브랜드 개발을 연구하고 있는..매우 ‘잡식스러운’ 욕심 많은 디자이너에게 다양한 영역을 경험할 수 있는 이 곳이 내가 하고싶은 것들을 다 해볼 수 있는 꽤 좋은 환경일 것 같다고 생각했습니다!(물론 이는 착각이었음이 금새 판명..)3. 그리고 슬라운드와의 만남이후 들었던 생각들.1) 젊은 아저씨들이 왜 매트리스를..?인테리어 업계에서 일하면서 많은 가구 브랜드들을 관심있게 봐왔음에도 불구하고사실 매트리스하면 에이스침대, 시몬스 등만 생각날 정도로 매트리스가 현재시점에서 새로울게 있나? 하고 생각했었는데요.슬라운드와 만남이후, 좋은 매트리스를 사용해야하는 이유에 대해 납득하게 되었고 국내외 메모리폼 매트리스 브랜드들의 성공사례를 보면서 오래되고 새로울게 없다고 생각했던 낡은 산업이 오히려 혁신의 가능성이 있다는 게 흥미로웠어요.잠이라는게 우리 삶에서 매우 필수적인 요소 중 하나 인데, 보다 좋은 잠을 위해 적극적으로 수면 환경을 개선해야겠다는 생각은 못했던것 같아요.그리고 무엇보다 좋은 매트리스를 개발하겠다는 의지로 걸어온 슬라운드의 발자취가엄청 새롭고 혁신적인 시도들이라기보다, 맨땅에 헤딩하고 낡은 구조에 타협하기 않기 위해 (원래 그런것 또는 익숙함과 편함을 위한 방식 거부) 발도 뛰어 왔다는 점도 재미있었고요. 오히려 이런 집착이 혁신의 발판이라는 생각이 들었어요.국내외 매트리스 스타트업의 혁신사례2) 아직 명확히 정리되진 않았지만 추구하는 가치와 철학에 대한 동의!파랑파랑 슬라운드 / Brand guidelin v.5ㅌ그리고 창업자들이 초기에 정리한 브랜드 가이드 라인을 전달받았습니다."우리가 브랜드가 사람이라면 어떤 생각/행동을 할까?"라는 질문으로 시작하는30페이지에 달하는 브랜드 철학에 대한 이야기들... (부담..)매트리스 업계에서 한번도 등장 없는 identity의 구축을 하고싶다는 사장님들..ㅎㅎ장인적신, 배려심, 실험정신 이라는 브랜드 철학을 바탕으로 전문이면서 센스있는 (배려심있는) 그리고 친근하고 고급스럽고새로운 것을 시도하는!3가지의 브랜드 철학과 5가지 브랜드 아이덴티티 키워드들을 구체적인 예시 상황에 빗대어'슬라운드가 앞으로 어떤 태도와 이미지의 브랜드가 되고 싶은지' 빼곡히 적혀 있었고,아직 일관성 있는 이미지는 아니지만, 슬라운드가 무엇을 추구하는지 명확히 느낄 수 있었습니다. 그리고 그 철학과 가치관에 진심으로 동의했습니다. 4. 내가 좋아하는 브랜드가 될것 같아.이렇게 슬라운드를 만나고  브랜드 가이드 라인을 통해 전달되는 슬라운드가 추구하는 방향을알게 되면서 추구하는 철학과 가치관이 멋지다고 생각했고,무엇보다 내가 좋아하는 브랜드가 될 것 같다는 생각이 들었습니다.그리고 설레는 마음으로 슬라운드 브랜드 아이덴티티 개발 작업에 참여하게 되었습니다.졸업후 석사과정을 하고 있지만, 브랜딩이라는 영역은 공부하면 할수록 아직도 알아야할게 너무나 많고, 하나의 브랜드의 아이덴티티를 만들어 간다는게 정말 어렵고 책임감 있는 일이라는 것을 알기에한편으로 마음이 무겁기도 했지만! 최선을 다해 좋은 결과를 만들겠다고 생각했어요.그리고 앞으로 슬라운드의 팀원으로 소속되어 지난 6개월간 만들어온 슬라운드의 브랜드 아이덴티티 개발과정을 소개할 예정입니다. 사실 단순히 포트폴리오를 보여주기위해 결과물을 공유하는게 아니라, 디자인 과정과 나의 시행착오들을 있는그대로 공유하다는게 처음엔 엄두가 안나기도 했어요.이전까지는 보여주고 싶은 보기 좋은 것들만 포트폴리오로 남기면 되지라고 생각하기도 했고,그렇게 비주얼에 초점을 맞추어서 작업해온 것들고 있고요.그러나 하나의 신생 브랜드에 소속되어 디자이너가 아닌 다른 팀원들과 처음부터 브랜드 개발하는 과정을 경험하면서, 브랜딩은 디자이너 혼자만의 몫이 절대절대 아니라는 것을 절실히 깨닫게 되었습니다.그래서 우리가 무엇을 고민하고 어떻게 해결해왔는지.. (수많은 시행착오들..ㅜㅜ)그 고민의 흔적들을 꼭  나누고 싶다는 생각이 들었습니다. 단순해 보이는 로고 하나가 반년의 (고난의)시간을 거쳐 어떻게 탄생하게 되었는지 지켜봐주세요.
조회수 1248

★반응폭발★ 매쓰플랫 설명회 in 종로 후기!!

안녕하세요. 매쓰플랫입니다 :)8/31(금) 매쓰플랫의 설명회가 뜨거운 선생님들의 반응속에서 마무리가 되었어요~!예상보다 훨씬 많은 분들이참여해주셔서 진심으로 감사드렸어요.매쓰플랫에 대한 선생님들의 관심이,바로 우리에게 앞으로 나아갈 큰 힘이 돼요 ^_^지금부터 "설명회 현장 대.공.개"합니다.지난번 설명회의 경우 강남에서 진행이 되어서노원, 중계동 학원가의 선생님들께서오시기 많이 불편해 하셨어요 ㅠㅠ그래서, 이번에는 종로에서 아주 핫한 장소!마이크임팩트에서 설명회를 개최했어요~!지난번보다 넓고 쾌적한 공간!더 많은 선생님을 만나 뵐 수 있었어요.- 상담존 -이번에는 뒷편에 상담존을 새롭게 만들어서,1:1 상담을 진행하였어요~!평소 선생님들의 매쓰플랫에 대한 궁금증,학원 운영에 대한 고민 등등다양한 이야기를 나눌 수 있었어요.- 체험존 -매쓰플랫이 테블릿에 최적화 된프로그램인 거 다들 알고 계시죠?무료체험으로 체험해보기는 부담스럽지만,어떻게 프로그램 활용이 가능한 지 궁금하다?싶은 선생님들을 위한 공간~!테블릿도 넉넉하게 준비해가서,여러 선생님이 직접 활용해보고,모르는 부분을 물어 볼 수도 있는 시간을 가졌어요.- 스낵 & 음료 공간 -오전 10시에 설명회가 시작되다 보니까,아침을 거르고 오시는 분들이 많을 거 같았어요.그래서 간단하게 드실 수 있는스낵과 음료를 준비했어요~!설명회가 끝난 후에도매쓰플랫에 대해서 자세히 알아 볼 수 있도록관련 자료와 소정의 노트 선물을자리마다 배치해 놓았답니다~!!설명회 시작 20~30분 전부터 와계시는 부지런한 쌤들 ㅎㅎ대표님의 '매쓰플랫을 만들게 된 계기 스토리'로설명회는 시작되었어요~!대표님께서도 실제 수학선생님경험을 갖고 계서서선생님들의 고충과 고민을 아주 가까이서 직접 몸소 겪어 보셨어요.그 안타까운 점들을 개선하고자만든 수학문제은행이 바로 바로 바로'매쓰플랫' 입니다~!!마케팅팀 매니저님께서프로그램 소개를 해주고 계시네요.특히나 많은 선생님들이 궁금해 하실만한'매쓰플랫 활용 성공 사례'지금 이 순간에도매쓰플랫의 효과를 톡톡히 보고 계시는선생님들이 많이 계신답니다~!마지막으로는 매쓰플랫 가이드 영상 목소리의 주인공!CS팀 매니저님께서프로그램이 어떻게 구성되어 있는 지'대표 기능 시연'을 보여드렸어요.학습지 만들기, 시중교재 연동, 보고서 생성 등등현재 많은 선생님들께서 사용하는 기능을 직접 보여드렸어요.생생하게 전반적인 과정을 보면서 생각보다 프로그램 사용법이'쉽고, 편리할 거 같다' 라는 의견을 많이 주셨어요. 이번 설명회에 참석하지 못하셨더라도,무료체험 신청을 통해서'매쓰플랫'의 모든 기능을 무제한 사용해 볼 수 있으세요~!click! click!♥ 매쓰플랫 7일 무료체험 알아보기 ♥http://bit.ly/2oJsxg3가장 빠르고 부담없이 문의하는 방법 요기!
조회수 862

스타트업 파티원 모으기

 최근의 스타트업 기업들은 100% 오프라인으로 서비스를 진행하는  서비스보다는 많은 부분을 온라인으로 서비스하는 분들이 많습니다. 그리고 온라인 서비스를 제작하기 위해선, 기본적으로1. 서비스 기획: 서비스를 설계하고, 철학을 담고 기능 등을 추가하고 설계하는 일2. 서비스 개발: 서버 안에서 진행되는 알고리즘을 수립하고, 구조를 설계하고 개발하는 일  3. 서비스 디자인: 서비스를 심미적으로 아름답고 직관적 있게 구현해 주는 일이렇게 기획, 개발, 디자인 세 가지 파트를 기본으로 필요합니다. (이외에도 마케팅이나, 경영 등의 부분들도 많지만, 이런 것들은 나중에 또 설명해 드리도록 하겠습니다.) 그리고 서비스를 만들기 위해서는 적어도 한 가지 또는 두 가지의 업무 정도는 수행할 수 있는 인원을 기반으로 시작하는 것이 옳다고 생각합니다. 그리고 처음부터 끝까지 제작하는 서비스인 만큼, 마음이 맞는 팀원들을 모아서 시작하는 것이 굉장히 중요한데요, 그렇다면 어떻게 팀원들을 모아야 할까요? 물론, 지인들과 주변 사람들과 함께 시작할 수 있는 경우라면 굉장히 좋겠지만, 모르는 사람들과 서비스를 시작할 경우, "어떻게 만나서 시작하느냐"가 중요합니다. 새롭게 알게 되는 분들과 스타트업을 시작하시는 분들은 아무래도 금전적 문제가 팀원을 모으는 것이 가장 먼저 겪는 문제일 것이고, 특히 개발자가 아니신 분들은 "개발자가 없다!!!!!!!!!"라는 것이 엄청나게 고민이실 겁니다(다 압니다. 저도 그랬으니깐요…. 하하하). 그리고 관심이 있는 개발자분이나, 기획자분, 또는 디자이너분이 있다고 하더라도 확실한 설득력이 없다면, 팀으로 모아서 시작하는 것이 굉장히 힘들죠. 그래서 스타트업이 인원을 충원할 때는 "서비스가 어떤 것인지를 나 말고 다른 사람들에게 명확하게 표현할 수 있을 때." 가 팀원을 모으는 가장 최적의 시기라고 생각합니다. 나중에 설명해 드리겠지만, 서비스 대하여 광고 문구 같이 "심금을 울리는" 그런 한마디가 아니라, 서비스에 대하여 육하원칙에 따라 명확하게 설명할 수 있는 상태가 제가 말한 명확하게 표현한다는 의미이고요. 이유를 설명해 드리자면, 스타트업이라는 기업의 특성상, 100%의 성공을 절대로 예측할 수 없고, 장애요소들이 너무나 많으므로, 서비스에 확신을 가지고 있는 사람들도 쉽게 시작을 할 수 없는 것이 스타트업이라고 생각합니다. 그러므로 감성을 털어 재끼는 표현보다는, 듣는 사람에게 확실하게 어떤 서비스 인지 보여주는 워딩을 할 수 없다면, 팀원을 모으는 것이 굉장히 힘들 겁니다. 개발의 경우, 어떤 서비스를 어떻게 하겠다는 명확한 근거가 없으면 제작을 하는 과정에서 많은 장애요소를 만나기 때문에 더 주저할 수밖에 없습니다. 여기서 팁을 드리자면, 개발자 분들을 팀원으로 설득하시기 위해서는 조금 더 디테일 한 설명을 필요로 하실 겁니다. "이런이런 서비스를 만드려고  한다."라는 것도 중요하지만, "어떤 기능을 기반으로 한, " 또는 "어떤 기능들이 주요 기능들인 서비스를 만드려고  한다."라는 것을 잘 설명해야 하고, 만약 구현하고 싶은 서비스와 비슷한 서비스가 있다면 직접 "이러한 것들을 해보고  싶다."라는 것을 집 적적으로 보여드리는 것을 추천드리고 싶습니다. 아예 기획하시는 분이 스토리 보드와 사이트 맵핑을 완료해서 가져가신 다면 더할 나위 없겠지만, 이제 시작하시는 분들에게 이것부터 시작해라 라고 하는 것은 무리가 있을 것 같아서, 조금 나중에 스토리보드와 사이트맵 같은 것들은 말씀드리겠습니다. 즉, 개발자와 기획자들은 언어의 표현이 다르기 때문에 비주얼 라이징 된 설명이 매우 중요합니다. 제가 창업을 시작했었던 2012년도 많은 스타트업이 있었지만, 요즘 들어 더 많은 스타트업들이 생겨나고 있고, 더 많은 분들이 창업을 생각하고 있으므로, 스타트업을 시작하기 위하여는 그때보다 더 확실하고 명확한 서비스의 근거나 비전을 제시할 수 있어야 할 것이라고 생각합니다. 그리고 팀원들에게 제공했던 것들도  이야기해 드리겠습니다(제가 이 부분에 있어서 가장 못 했다고 생각되어서 참 죄송하다는 생각을 많이 하고 있습니다). 스타트업을 시작하는 분들이 서비스를 같이 시작하는 사람들에게 가장 먼저 제시하는 부분들이 "지분"을 먼저  이야기할 수밖에 없다고 생각을 합니다. 서로의 업무에 책임감을 느낄 수 있고, 보다 능률적 있게 제작할 수 있다는 점에서 좋은 방법이라고 생각은 합니다만, 100% 효율적이라고는 이야기하지 못할 것 같습니다. 말씀드리는 이유는 서비스를 제작하는 시간은 깁니다. 처음부터 서비스를 원하는 시간에 만드는 것은 거의 불가능하다고 생각합니다(다양한 장애요소들이 워낙 많으므로). 이렇게 긴 시간 동안, "우리는 의협심 하나로 똘똘 뭉친 사람들이기 때문에 충분히 기다릴 수 있어."라고 생각하시는 분들도 있긴 하겠지만, 그렇게 업무를 진행하기에는 너무나도 힘들죠. 그리고 현실적으로 서비스 제작 기간 동안 먹고 사셔야 하기 때문에.... 하지만 그렇다고 100% 월급제로 고용하기에도 정말 부담스러운 부분들이 있다는 것은 저도 인정하는바 입니다. 그래서 공동 창업가들과 제가 했던 방법은 "지분+ 일종의 성과금" 정도였습니다. 지분을 어느 정도 제시하고, 서비스(알파 서비스/ 베타 서비스) 등의 제작 동안 소정의 감사비를 드리는 정도였죠. 지금도 생각하면 저무나 고생했었던 우리 디자이너 형, 개발자 동생에게 너무나도 미안한 마음입니다. 분명히 같이 창업을 했던 사람들이지만 말이죠. 이제 와서 생각해보면, 이것저것 다 가지고 시작하는 건 스타트업도 아니긴 하지만, 이도 저도 없는데 사람들 고생시킬 수 있는 것도  스타트업입니다. 신중하게 생각해서 시작하시는 걸 정말 다시 한 번 말씀드립니다. 그래도 요즘은 위시켓이나 로켓펀지 등에서 스타트업을 지원하는 인적 또는 물적 인프라가 많이 발전해서 많이 좋아졌다고는 하지만, 아직도 스타트업에 대한 관념이나 생각이 "음식점 같은 거 창업이나 하겠지...(창업은 치킨이  짱이죠...)"라고 생각하시는 분들도 많고, 또 이 작은 시장에서도 사기를 치시는 분들이 있어서 항상 조심히 하나하나 진행하시는 게 무조건적으로 중요하다고 생각합니다. (참 힘들죠…. 하하 아 그리고 프리랜서를 만나서 하시는 분은 주변  개발/디자이너/기획하시는 분을 꼭! 꼭꼭 대동하시기를 적극적으로 추천해 드립니다! 이 부분에 대해서는 나중에 기회가 있으면 알려드리겠습니다) 그래서 세줄 요약하자면(너무 멀리 돌아왔네요...;),1. 서비스에 대하여 머릿속에서가 아닌 다른 사람들에게 확실하게 정의할 수 있고, 금전적으로 안정이 될 때,2. 서비스에 대한 이야기를 듣고 서비스에 대하여 구현하고, 또 같이 발전할 수 있는 인원과,3. 100% 임금으로 상황이 좋지 않다면 약간의 지분과 적더라도, 확실한 임금지급을 기반으로,하는 것이 가장 이상적인 방법이라고 생각합니다.말하고 싶은 부분들이 너무나도 많은데 필력이 너무나도 딸려서 죄송스럽네요 ㅠ 궁금하신 부분들은 댓글 달아주시면 최대한 빨리 자세하게 설명하겠습니다!#코인원 #블록체인 #기술기업 #암호화폐 #스타트업인사이트 #팀빌딩 #팀플레이

기업문화 엿볼 때, 더팀스

로그인

/