스토리 홈

인터뷰

피드

뉴스

조회수 822

마음속의 브랜딩: 우리는 왜 맥북을 살까

지난 1월27일 오전10시 애플스토어가 상륙했지요. 몇몇 기사에서 볼 수 있듯 진풍경이 연출되었습니다. 인간복도, 끝도없는 줄, 한겨울노숙투혼, 가즈아 제창, 박수세례 등 사실 애플제품을 사용하지 않는 사람들 입장에선 저게 뭔데? 왜 저래? 라는 의문이 들 수 있는 장면들이었을 겁니다. 이와 같은 브랜드팬심은 사실 애플제품뿐만은 아니었습니다. 2015년 명동에서 발망과 H&M의 콜라보레이션 라인이 등장했을 때에도 노숙투혼 사진이 심심치 않게 올라왔습니다. 심지어 닷새가 넘게 기다린 사람도 있었죠. 뭐 이 때는 중고나라 되팔러들의 열정과 혼을 느낄 수 있는 이슈였다고 치지만, 그럼에도 뭔가 일반적인 경우는 아닌 것 같습니다. 쉐이크쉑버거가 처음 오픈 했을 때도 그러했고, 명동 유니클로는 히트택 세일할 때마다 사람들이 발을 동동 구르며 줄을 섭니다.어떤 브랜드에 열광하고 관심을 가지는 것은 그 정도의 차이가 다를 뿐 사실 누구에게나 하나쯤 애정하는 브랜드가 있기 마련입니다. 우리는 이를 취향이라고 부르기도 하고, 팬심, 덕심 등이라고 부르기도 하죠.애플스토어가 오픈했을 당시에는 역대급 추위가 대한민국을 휘감았던 날이었습니다. 거리엔 비둘기조차 돌아다니지 않는 거친 날이었죠. 하지만 덕심은 추위보다 강했던 모양입니다. 단순히 취향...이라고 하기엔 사람들의 행동이 뭔가 일반적이진 않았던 것 같습니다. 기사에 달린 댓글을 보니... 얼마 전 있었던 애플의 깜짝 배터리 이벤트 때문이었는지는 모르겠지만 대부분 부정적인 댓글들이 많더군요. 저는 개인적으로 디자인을 할 때 맥이 여러모로 편한 점이 있어서 사용하긴 하지만, 뭐 그렇게 덕력이 있다라거나 그런 것은 아닌터라 그저 '흠....' 하는 기분이었습니다. 오늘은 왜 사람들은 추위를 견뎌가며 줄을 서는가에 대해 생각해보도록 하죠 :)당시 33살이었던(나와 동갑...) 김정온 대표는 혼자 카페를 시작했습니다. 그리고 그곳은 1년만에 4개의 점포를 더 냈고, 2017년 10월 기준 32명의 직원이 있는 핫한 곳이 되었습니다. 당초엔 김포 본점으로 시작했습니다. 그러나 주말이면 사람들이 너무 많아 와서 문제(?)가 되어버렸죠. 폭풍입소문에 인스타에는 온통 인증샷으로 가득했고, 주변 도로가 마비되고 불법주차 때문에 경찰까지 나와서 교통정리를 해야하는 해프닝도 생겼습니다. 바로 '카페, 진정성' 의 이야기죠.카페, 진정성에 대한 이야기는 이미 너무 많은 인터뷰와 기사를 통해 등장한 터라 더 이상의 자세한 설명은 생략하도록 하겠습니다. 이 곳의 최대무기는 이름 그 자체입니다. 사람들을 줄 서게 만드는 힘은 '진정성'이죠. 먹거리는 정직함을 기반으로 합니다. 그 힘은 누구도 부정할 수 없죠. 품질과 서비스관리를 위해 100% 직영점으로만 운영하겠다는 철칙과, 재료선택, 제조방식 등 어느 것 하나도 타협하지 않는 고집스러움은 이 시대의 브랜드에게 새로운 메시지를 던져줍니다. 우리의 브랜드는 진정성이 있을까?... 그 진정성은 얼마나 고집스럽고 정확한 포인트를 향해있는지. 말입니다. 대부분의 사업은 모두 진정성있게 시작됩니다. 메시지가 있고 철학이 있죠. 그러나 문제는 그것을 유지하고 다른 색과 섞이지 않게 만드는 것입니다. '카페,진정성'이 밀크티가 대박쳤다고 해서 갑자기 밀크티 프랜차이즈 제품을 내버리고, 굿즈를 만드는데 신경쓰고 매장확장에 올인을 했다면 지금과 같은 곳이 될 수 있었을까요. 물론 앞서 말한 것들이 나쁜 것들은 아닙니다. 하지만 사람들이 우리 브랜드의 어떤 점을 사랑하는 지에 집중해야하죠. 카페,진정성의 매력은 그 고집스러움입니다. 내 몸에 들어가는 음식물이 무엇보다 정직한 것들로 정직하게 만들어졌다는 믿음. 저도 밀크티를 무척좋아합니다만, 진정성의 밀크티는 확실히 담백하고 맛있습니다. 그러나 마시는 순간 갑자기 용이 날아다니고 관자놀이에서 번개가 치는 비룡의 맛이 아닙니다. 그냥 맛있네~ 정도랄까요. 다만 24시간 내내 제조한 그 밀크티를 천천히 음미하는 그 자체에서 의미가 생깁니다. 특별한 밀크티를 마신다는 그 기분이랄까요. 그리고 그 기분이 거짓이 아니라는 데에서 만족감을 얻게 되죠. 인지부조화로 인한 묘한 불편함을 느낄 필요가 없다는 것. 브랜드의 힘은 여기에 있습니다.개인적인 의견입니다만 저는 맥북을 좋아합니다. 그러나 정확하게 무엇이 좋은지를 설명할 수 있죠. 음 물론 디자인적으로 예쁘고 패키지를 뜯는 과정에서 기대감을 증가시키는 등 뭐 그런 것들도 있을 수 있겠습니다만...사실 중요한 건 아닙니다. 만약 맥북이 여자친구고 그녀가 '내 어디가 좋아?' 라고 물어본다면 겁나 시크한 표정으로 '트랙패드' 라고 말할 것 같네요. 사실 맥프레를 샀다가 한 번 되팔았었는데 다시 구매하게 된 유일한 이유는 맥OS도 아니고 레티나디스플레이도 아닙니다. 트랙패드의 부들부들한 느낌이지요. 물론 스케치를 맥에서만 쓸 수 있고, 맥OS특유의 편리함들도 있겠지만 그건 부차적인 문제였습니다. 애플스토어 오픈이 난리가 났던 것도 한편으론 이해가 가긴합니다. 확실히 맥은 불편한 것과 단점투성이긴 하지만, 진짜 놓칠 수 없는 단 한가지를 만들어내는 묘한 매력이 있죠. 일반 삼성, LG, 레노버 노트북도 나쁘지 않습니다. 지금 이 글도 LG그램으로 쓰고 있으니 각자의 장단점이 있달까요. 하지만 확실히 일반 업체의 노트북은 평이하게 그럭저럭 좋은 수준입니다. 딱히 나쁜 것도 딱히 좋은 것도 없는 느낌이랄까요. 그램이 처음 출시됬을 땐 그 가벼움에 상당히 놀랐습니다만, 요즘엔 뭐 1kg 미만의 랩탑이 너무 많은터라 그램의 경량성이 크게 돋보이진 않더군요.우린 이것을 킬링포인트라고 불러야겠습니다. 제품과 서비스는 절대 완벽할 수 없습니다. 모든 사람을 모든 면에서 만족시킬 수도 없지요. 하지만 확실한 팬층을 만드는 것은 아주 강력한 하나의 킬링포인트가 있는가? 하는 것입니다. 떠났던 고객조차도 미련이 남아 다시 돌아오게 만드는 그 강력한 힘은 어디에서도 찾아볼 수 없는 독보적인 것이어야 하죠. 그리고 또 하나!단순히 독보적인 것 뿐만 아니라, 그것의 당신의 행동을 어떻게 바꿔놓을 수 있는지가 중요합니다! 가격이 싸다. 가볍다! 배터리가 오래간다! 이러한 각각의 특징들은 물론 있습니다. 모든 제품과 서비스엔 각자의 강점이 있기 마련이죠. 다른 제품보다 1,000원 싸다. 100g가볍다. 배터리가 2시간 더 오래간다....는 식의 포인트는 사실 큰 의미가 없습니다. 근소한 차이이거나 딱히 소비자에게 큰 변화를 줄 수 없는 포인트라면 Strength 에 적기 좀 애매한 감이 있죠.애플에서 맥프레를 설명할 때 마우스가 없어도 된다!...라는 걸 막 전면적으로 내세우진 않습니다. 매직마우스도 팔아야 하니까요. 하지만 써 본 사람들은 트랙패드가 얼마나 편한 지 몸으로 알고있죠. 그리고 노트북을 들고 다닐 때 마우스를 놓고 왔어도 전혀 불편하지 않다는 것에서 감화를 받습니다. 가방에 챙겨야 할 것이 하나 줄어드는 것이죠. 소비자는 이러한 행동을 통해 '든든하다.' '걱정없다.' 라는 생각을 합니다. 팩트여부를 떠나 본인에겐 그렇게 느껴지는 것이죠. 물론 맥프레는 고장나면 자비없는 나쁜놈이 되긴 하지만... 소비자 입장에서 이미 구매한 제품에 대해서 '고장나면 꽝이잖아!?' 라는 생각을 하진 않으니까요.(그래야 속이 편하거든요)유사한데 조금 더 나은 강점이 아니라... 우리만의 독보적인 킬링포인트는 무엇일까요? 떠나간 고객마저도 헤어진 전애인이 되어 '아직 파니...?' 라고 문자를 보낼만한 강력한 매력을 지니고 있나요?우리의 특별한, 올바른 가치관을 응원하는 브랜드가 있습니다. 자연파괴와 과도한 소비에 경종을 울리며 자신의 제품을 사지 말라고 캠페인 했던 파타고니아입니다. 2013년 한국시장에 진출한 이래 꾸준한 매출성장을 기록하고 있습니다. 저도 그 꾸준한 매출에 기여하고 싶었는데 가격이 후덜덜해서 파타고니아 조끼를 사지 못했습니다. 아니 사지 않는게 아니고 못사게 만들어버리면 어떻합니다 스탠리옹씨..ㅠㅠ  어쨌든 이는 저의 통장상태에 기인한 것이므로 각설하고, 파타코니아의 국내진출은 합작법인이 아닌 직진출로 진행되었는데 이에 대해 파타고니아의 빈센트 스탠리 CEO는 “장기적으로 보면 기존의 합작법인 보단 우리가 직접 시장을 책임지는 것이 낫다고 생각했다. 마케팅에 돈을 쓰기 보다는 구전으로 제품의 진정한 가치가 전달되도록 하고 인위적인 수요 창출보단 자연적인 성장을 기다리면 시장은 좋아질 것" 이라고 언급했습니다. 물론 우리 옷을 사지말라는 캠페인은 정말 멋진 캠페인일 수도 기막힌 마케팅 테마일수도 있겠지만 둘 중 어느 쪽이든 기업입장에선 자신의 철학을 노골적으로 드러냈다는 데에서 그 의의를 찾을 수 있겠습니다. 영국의 핸드메이드 화장품 브랜드인 러쉬는 화장품의 동물실험을 반대하며 천연재료로만 제품을 만들고, 심지어 동물실험 반대 엑스포를 열어 동물복지라는 진정성으로 소비자의 두터운 신뢰를 쌓으며 글로벌 브랜드로 성장했습니다. 개인적으론 향이 강려크해서 구매는 하지 않고 있고... 러쉬매장하면 떠오르는 게 매장앞에 거품가득한 세숫대야밖에 없으므로 짧게 줄이도록 하겠습니다. 저도 진정성있는 글을 쓰고싶...이처럼 요즘의 소비자들은 자신의 철학과 가치관을 드러내고 싶어합니다. 당신의 제품과 서비스를 이용하는 것을 통해서 말이죠. 난 돈관리를 철저히 하는 사람이야!...라는 걸 가계부앱을 사용하는 것으로 드러내고 싶어하고, 자기관리에 민감해~ 라는 가치관을 쥬스솔루션이나 밀스3.0을 쉑잇쉑잇하면서 드러냅니다. "너 그거 하는 사람이구나!"라는 말을 듣는 것이죠. 특별해지고 싶습니다. 아이덴티티를 드러내고 싶어하죠. 그리고 자신의 가치관을 대변해주는 브랜드가 생겨나면 그것을 찾습니다. 그리고 이 브랜드가 성장하고 함께하는 사람들이 많다는 데에서 희열을 느낍니다. 나와 같은 생각과 가치관을 지닌 사람들이 있는 곳이니까요.우리의 브랜드는 어떤가요? 우리 서비스/제품을 사용하는 사람들은 어떤 사람들인가요? 그들의 가치관과 철학을 대변해주고 있나요? 같이 만들어나간다는 것의 힘은 굉장합니다. 배민의 팬클럽인 '배짱이'는 초기 배민의 마케팅에서도 큰 역할을 했습니다. 팬클럽 내부 공모를 통해 당선된 문구들이 한 때 버스와 지하철을 휩쓸었잖아요. 2016년 상반기엔 배민의 흑자전환을 축하하기 위해 배짱이가 직접 '흙자 선물'을 선사하기도 했습니다. 기업의 흑자전환을 팬들이 축하해주는 이런 장면은 확실히 일반적인 일은 아니죠. 보통은 이 회사가 성장을 하는 지 안하는 지 관심도 없는 경우가 많으니까요. 팬클럽/소수마니아를 중심으로 한 함께하는 경영은 물론 리소스와 노력이 많이 들어가지만 그 파급효과는 정말 엄청납니다. 오히려 인플루언서나 연예인과 같은 공인들을 활용한 마케팅보다 훨씬 효과적일 때도 있죠. 참고 : http://blog.naver.com/PostView.nhn?blogId=smartbaedal&logNo=220910423476 롯데리아에선 지난 해 11월~12월까지 앱을 이용해 특정 햄버거 3종을 포함해 1만5000원 이상 구매한 소비자 중 134명을 추첨해 워너원 팬 사인회에 초대하는 행사를 열었습니다. 물론 이러한 노력은 확실한 결과를 맺었습니다. 라인프렌즈도 방탄소년단을 활용했고, 이니스프리도 워너원이 모델로 등장했던 ‘화산송이 컬러 클레이 마스크’로 300% 이상의 매출효과를 봤으니까요. 그러나 이러한 매출효과는 확실히 장기지속성을 띠기엔 좀 무리가 있습니다. 물론 제품자체도 좋고 연예인도 잘 활용한다면야 좋겠지만, 워너원 행사가 끝난 후에도 롯데리아를 갈지는 모르겠네요. 긁적이런 점에서 따끔한 소리와 응원을 함께 해주는 회사의 팬클럽은 연예인 못지않은 강력한 에너지원입니다. 수많은 사람들이 지켜보고 있는 만큼 단순히 순간적인 매출상승을 노린 노림수등은 통하지 않죠. 투자자보다 더 무서운 존재들이자, 연예인보다 더 든든한 존재랄까요. 우리 브랜드는 어떤가요? 애미야 여기 먼지가 있구나!를 외쳐줄 팬클럽이 있나요? 
조회수 1027

전문가만 아는 페이스북 광고디자인 제작법 TOP 5

페이스북 광고를 하는 것은 쉽지만 잘 하는 것은 어렵습니다. 그리고 매일매일 더 힘들어지고 있습니다. 더 많은 광고주들이 페이스북 광고의 잠재력을 깨닫고 뛰어들면서 경쟁이 더 치열해져 광고가 금방 돈 낭비로 바뀔 수 있습니다. 페이스북으로 많은 광고를 해봤지만 아직도 제가 만든 새로운 캠페인들로 많이 배우고 있습니다.그러나 결국, 페이스북 광고의 성공은 두 가지 중요한 요소로 정의됩니다. 1. 제품에 대한 욕구를 불러일으키는 동시에, 사용자의 관심을 끌어 모을 수 있는 훌륭한 디자인 2. 리타겟팅(특정 웹사이트 내에 행동을 보인 유저들에게 다시 광고를 노출 시키는 것) 사용자들을 설득시켜 여러분의 비즈니스에서 전환을 이루어낼 훌륭한 페이스북 광고 디자인을 만드는 효과적인 방법론을 알려드리겠습니다. 1) 항상 다양한 디자인을 테스트해라   아무리 강조해도 지나치지 않습니다. 그 어떤 가설도 지레짐작하지 마세요. 항상 모든 항목을 테스트하세요. 여러분의 기존 페이스북에 대한 지식이나 경력에 관계없이, 항상 광고의 디자인과 대상을 모두 테스트하세요. 새로운 캠페인을 만들 때마다, 적어도 4개 이상의 다른 페이스북 광고 디자인을 생각해 내고 각각의 광고를 테스트해보세요. 예를 들어 서로 두 개의 다른 텍스트를 가지고 두 개의 다른 이미지를 테스트 할 수 있습니다.(이미지 2개 x텍스트 2개=4개의 베리에이션)AdEspresso라는 기업은 일러스트레이션을 자주 사용합니다. AdEspresso 페이스북 페이지에 있는 포스트들은 각각의 개성있는 디자인을 가지고 있고, 광고에도 잘 사용하고 있지만, 자세히 들여다보면, 그 전략이 다소 빗나갔다는 것을 발견할 수 있습니다.                        다운로드당 비용: 1,816원                                             다운로드당 비용: 3,385원 위 자료를 보면, 사람이 들어간 사진 이미지 광고가 AdEspresso가 자주 사용하는 일러스트레이션 광고보다 거의 두 배나 더 효율이 좋았습니다. 다시 한번 말씀드리지만, 모든 것을 시험해 보세요. 말도 안된다고 생각하던 아이디어도 괜찮습니다.  텍스트와 이미지를 다양하게 베리에이션하여 광고 피로도를 줄이고 광고 효율을 감소시키는 게재 빈도를 줄여보세요.   2) 사용자 페르소나를 제작하라   대부분의 기업들은 각기 다른 특성을 가진 고객세그먼트를 가지고 있습니다.  잠재고객 페르소나를 만들게 되면, 여러분의 페이스북 광고 디자인 역량을 향상시킬 뿐만 아니라, 잠재고객들에게 전반적으로 더 나은 서비스를 제공합니다. 먼저, 각 잠재 고객 유형별로 개인 정보를 기록합니다.  남자인지 여자인지, 하는 일은 무엇인지,  잠재 고객들이 여러분의 제품을 사용하여 해결하고자 하는 가장 큰 문제는 무엇인지.. 잠재고객 페르소나를 생성한 후에는 그들의 문제를 직접 해결해줄 수 있다는 내용의 페이스북 광고를 디자인하세요. 여기 두 가지 'Adespresso'광고가 있습니다. 하나는 스타트업들을 타겟으로 하고 다른 하나는 미디어 대행사를 대상으로 합니다. Startups는 최대한 빨리 성장하고자 하는 고객의 욕구를 강조합니다.  에이전시들은, 페이스북 광고를 더 빠르고 효율적으로 할 수 있다는 메시지를 강조합니다. 3)고객 후기를 활용해라   소비자 구매 결정에서 가장 영향력 있는 요소가 무엇인지 아시나요? 바로 '두려움' 입니다.사람들은 돈을 잃는 것과 잘못된 선택을 하는 것을 두려워하기 때문에 당신의 제품을 선뜻 사는 것을 두려워 할 것 입니다. 이것이 바로 무료 상품들이 효과적인 이유입니다. 하지만 돈에 관한 이야기에 국한되지는 않지요.  공짜 = 무위험 = 무부담 물론, 저는 여러분의 제품을 무료로 나눠 주어야 한다고 말하는게 아닙니다. 저는 단지 여러분이 페이스북 광고 디자인에 고객 후기를 추가함으로써 고객들의 우려를 해결할 필요가 있다고 제안하는 것입니다. 꼭 특정 좋은 리뷰를 가지고 있지 않더라도, 대규모 사용자 기반을 활용할 수 있습니다. Dropbox의 광고로 예를 들면, Dropbox는 잘 알려져 있음에도 불구하고 광고에서 여전히 100,000개 이상의 기업이 Dropbox에 의존하고 있음을 강조합니다. 특정 좋은 리뷰가 없더라도, 대규모의 통계적 수치로 자신들의 강점을 강조하는 것이지요. 사용자들이 이 광고를 보고 어떻게 반응할까요? 10만개의 기업들이 사용하고 있다니요! 모든 사람들과 그 주변사람들이 Dropbox를 사용하고 있다면, 거기에는 무슨 이유가 있을 것입니다. 곧 그 제품은 좋은 제품임에 틀림없고, 이 많은 사람들의 선택이 모두 틀릴 일 없으니 제품을 사용하는 것에 대한 두려움이 없어질 것 입니다. 4) 사용자들이 특정 행동을 유도할 만한 장치(CTA)를 사용해라 페이스북 광고에 특정 행동을 유도할 수 있는 장치(CTA)를 추가하는 것은 클릭율을 높이거나 광고의 매력을 높이지 못할 수도 있지만 전반적인 전환 속도를 향상시키고 전환 비용을 절감할 수 있습니다. 왜냐하면 좋은 CTA는 광고마찰을 줄여 주기 때문입니다.  만약 사용자가 당신의 광고의 CTA를 클릭하고 당신의 랜딩 페이지에 도착한다면, 다음에 무엇을 해야 할지 생각하는 시간을 낭비할 필요가 없습니다.  사용자는 이미 랜딩페이지에 도착해서 어떤 행동을 해야 하는지 알고 있을 것이고, 의도한 행동을 빠르게 수행할 것입니다. 왜냐하면 'eBook다운로드하기', '상담신청하기'와 같은 CTA를 광고를 통해 유도하였기 때문입니다.   5) 일관성을 유지해라 CTA처럼 일관성은 마찰을 줄이고 사용자가 원하는 작업을 완료하는 데에 도움이 됩니다. 만약 누군가가 당신의 광고를 클릭한다면, 그것은 그들이 당신의 이미지와 메시지, 그리고 당신이 제공하는 것을 맘에 들었기 때문입니다. 클릭한 후에는 광고에서 본 것을 보강하는 랜딩 페이지로 연결됩니다.  광고를 보강하는 랜딩 페이지에는 광고와 동일한 이미지와 표현을 사용하고, 단지 당신의 제품과 그들이 왜 그것을 사야 하는지에 대해 좀 더 자세히 설명하세요. 사람들은 웹 사이트를 몇 초 만에 보고 결정합니다. 바로 한 눈에 읽히지 않으면 사용자들을 잃게 될 것 입니다.  페이스북에서 빨간 운동화 광고를 보고 클릭했는데 랜딩페이지의 운동화 중 빨간 신발이 없다면 아마 사용자는 바로 떠나게 될 것 입니다.                             오피노 자세히 보러가기
조회수 1409

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 #리액트 #리액트가이드 #한글 #번역 #문서번역
조회수 2126

Angular Lazy Loading 모듈 사용하기

Angular는 비동기식 라우팅이 가능합니다. 나중에 사용할 기능들을 NgModule로 분리하여 사용자의 요청이 들어왔을 때 모듈을 불러와 기능을 사용할 수 있고, 이러한 기술을 지연 로딩이라 합니다.프로젝트가 진행되고 기능이 추가될수록 어플리케이션 번들 크기가 커지고, 결국엔 초기 로딩 시간도 길어지게 됩니다. 지연 로딩을 사용하면 초기 로딩 시간을 줄일 수 있습니다. 컴파일 단계에서 나중에 사용할 모듈들을 메인 모듈에서 분리하여 번들을 생성합니다. 그리고 사용자가 기능을 요청할 때 비동기로 스크립트를 불러와 실행합니다. 지연 로딩에 대한 소개와 사용법은 Angular 공식 문서의 Routing & Navigation — Milestom 6: Asynchronous routing 을 참고하시길 바랍니다하지만 지연 로딩을 사용할 때 유의해야할 점이 몇 가지 있습니다.지연 로딩 모듈과 인젝터(Injector)지연 로딩이 완료되었을 때 Angular는 지연 로딩된 모듈을 루트 인젝터(Root Injector)의 자식이 되는 자식 인젝터를 이용하여 초기화하고, 서비스들을 자식 인젝터에 추가합니다. 즉, 인젝터가 분리되기에 지연 로딩된 모듈의 클래스들은 자식 인젝터로의 서비스 주입이 가능하지만 루트 인젝터로 만들어진 클래스들은 불가능합니다.이는 Angular의 독특한 의존성 주입 시스템 때문입니다. Angular의 인젝터는 처음 애플리케이션이 시작되었을 때, 컴포넌트나 다른 서비스에 주입되기 전에 포함된 모든 모듈들의 서비스 제공자들을 블러와 루트 인젝터를 생성합니다. 애플리케이션이 시작되고 나면 인젝터는 서비스들을 생성하고 주입을 시작하고, 새로운 서비스들을 제공자로 추가가 불가능합니다.그러므로 지연 로딩된 서비스들은 이미 생성이 완료된 루트 인젝터로 추가가 불가능합니다. 따라서 Angular는 지연 로딩된 모듈에 대해서 새로운 자식 인젝터를 만들는 전략을 취하게 된 것입니다.자식 인젝터가 새로 만들어지기 때문에 공통된 모듈을 사용할 때 주의하여야 합니다. 예를 들어 다음과 같이 SharedModule 에 CounterService 를 서비스로 추가하고 루트 모듈인 AppModule 과 지연 로딩 모듈인 LazyModule 에 각각 SharedModule 을 import 하였습니다.import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; import { SharedModule } from './shared/shared.module'; import { AppShellComponent } from './app-shell.component'; const APP_ROUTES = [ { path: 'lazy', loadChildren: 'app/lazy/lazy.module#LazyModule' } ]; @NgModule({ imports: [ BrowserModule, SharedModule, RouterModule.forRoot(APP_ROUTES) ], declarations: [ AppShellComponent ], bootstrap: [AppShellComponent] }) export class AppModule { }import { Injectable } from '@angular/core'; @Injectable() export class CounterService { count = 0; increase(): void { this.count++; } decrease(): void { this.count--; } }import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; import { SharedModule } from '../shared/shared.module'; import { SomeLazyComponent } from './some-lazy.component'; const LAZY_ROUTES = [ { path: '', component: SomeLazyComponent } ]; @NgModule({ imports: [ SharedModule, RouterModule.forChild(LAZY_ROUTES) ] }) export class LazyModule { }import { NgModule } from '@angular/core'; @NgModule({ providers: [ CounterService ] }) export class SharedModule { }그리고 루트 모듈의 컴포넌트와 지연 로딩 모듈의 컴포넌트에서 각각 CounterService 를 사용하여 숫자 값을 바꿔봅니다.서로 다른 인젝터에 CounterService 인스턴스가 만들어졌기 때문에 두 컴포넌트에 표시되는 숫자값은 다릅니다. 앞에서 말했듯이 지연 로딩 모듈은 루트 인젝터가 아닌 자식 인젝터를 이용하여 초기화하기 때문입니다.만약, 지연 로딩 모듈에서 제공되는 서비스를 다른 모듈에서 사용하려면 루트 모듈에 포함시켜 줘야 합니다. 다음과 같이 루트 모듈에게만 노출시킬 서비스 제공자들을 따로 빼내어 줄 수 있습니다.import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { AccountLoginPageComponent } from './login-page.component'; const ACCOUNT_ROUTES: Routes = [ { path: 'login', component: AccountLoginPageComponent } ]; @NgModule({ imports: [ ... RouterModule.forChild(ACCOUNT_ROUTES) ], decalartions: [ AccountLoginPageComponent ] }) export class AccountLazyModule { }import { ModuleWithProviders, NgModule } from '@angular/core'; import { AccountAuthService } from './auth.service'; @NgModule({ imports: [...] }) export class AccountModule { static forRoot(): ModuleWithProviders { return { ngModule: AccountModule, providers: [ AccountAuthService ] }; } }AccountModule.forRoot() 를 루트 모듈에 import하면 다른 모듈에서도 AccountAuthService 를 사용할 수 있게 됩니다. 물론 이 경우 AccountModule를 지연로딩 모듈로 만들면 루트 모듈에 포함되기 때문에 번들을 나누는 의미가 없어질 수 있으니 AccountLazyModule 을 따로 두어 코드를 분리하였습니다.#타운컴퍼니 #개발 #개발자 #인사이트 #꿀팁
조회수 10255

실제로 적용하고 있는 UX 방법론

더팀스 사이트는 아직 얼마 되지 않은 젊은 사이트입니다. 더 좋은 서비스를 제공하기 위해 지속적으로 익명의 사용자 경험 데이터를 축적하고 이용자의 행동 패턴과 흐름을 실시간으로 분석하면서 꾸준히 사용성 좋은 사이트로 변모 시키는데 노력하고 있습니다. 그동안 저희 팀만의 사이트 개선 방식에 대해 공유할까 합니다.설계에 대한 역사닷컴 부흥기 시절, 많은 디자이너들은 화면 레이아웃에 대한 정답을 찾아가고 있었습니다.그 당시 대중에게 보급된 대부분의 컴퓨터 최소 모니터 해상도는 압도적으로 1024x768이 많았습니다.그리고 해당 해상도를 바탕으로 화면 구성에 대한 다양한 시도들이 일어났는데, 그중 절대적인 지지를 받던 레이아웃은 바로 960 Grid System 이었습니다.*자료 화면 960.gs 사이트 내 16그리드 방식 / 12 그리드 방식960gs는 해외 디자이너 커뮤니티에서 굉장히 많은 방법과 시도를 통해 얻어낸 또 한가지의 방법이었습니다. 960 grid 패턴을 적용하면서 아래와 같은 효과를 통한 콘텐츠 배치가 가능해졌습니다.1. 1024 최소 해상도에서 모든 콘텐츠를 유저들이 보기 편하게 안정적으로 공급할 수 있다.(스크롤 바를 포함한 창 옆의 모든 여백들을 제외하면 960 픽셀 내 표현할 수 있는 폭이 나옵니다.)2. 12개 혹은 16개로 콘텐츠 비를 쪼개어 문단 단위와 콘텐츠 단위를 block화 시킬 수 있고 홈페이지의 레이아웃을 잡는데 비교적 간단하다.웹 페이지의 근원이 오프라인 문서를 웹으로 표현하는 것에 그 시초가 있다 보니 다양한 시도가 나오게 된 것 같습니다. 지금은 변모했지만, 적극적으로 Grid System을 활용하는 다양한 방식을 소개하기 위해 아래와 같은 사이트도 있었습니다.*the grid system 사이트* 12 컬럼 기준으로 작업된 국내 네이버 사이트* 16 컬럼 기준으로 작업된 국내 다음 사이트유저 사용성 패턴 960 Grid 와 함께 다양한 UX 개선에서 여러가지 시도와 기법들이 나오기 시작했는데, 그 중 두가지 패턴이 Z-layout과 F-layout입니다.Z-layout은 2010년도에 UX 개선에서 꼭 필두로 배우고 넘어가야할 사이트 개선법중 하나였습니다. 다만, 2011년 이후로 너무나 다양한 화면들이 생겨났고 (2011년 아이폰을 기점으로 다양한 디바이스 탄생) 다양한 해상도를 지원하는 부분에서 비교적 절대적이다 라는 타이틀을 얻은지 얼마안되 내려놓게 되었습니다. 최근 대부분 좋은 UX경험을 주는 사이트들은 디바이스 형태에 맞춰서 반응형으로 컨텐츠가 읽기 편하도록 그 구성을 자유롭게 변경하는 타입을 취하고 있습니다.Z-layout의 근간은 웹 사이트에 접속하여 콘텐츠를 읽는 방식에서 위의 이미지와 같은 흐름으로 시선처리를 한다는 것 입니다. 따라서 가입률을 높히거나 사이트에 무언가 액션을 더 주기 위해 아래와 같은 방식으로 개선하면 좋다고 소개하고 있었습니다.사용자의 콘텐츠를 읽어들이는 시점이 1번에서 2번으로 다시 3번에서 마지막 4번까지.따라서 1번에서 먼저 브랜드 네임을 보여주고 가입 버튼을 한번 상기 시킨 후 마지막 4번 시점 처리에서 목표를 달성할 수 있도록 구성하라는 취지 였습니다.그 다음으로 콘텐츠를 퍼블리싱 하는 사이트에서 가장 많이 보이는 F레이아웃 입니다.F레이아웃 경우 정말 많은 테스트에 의해 정론으로 굳어졌다고 볼 수 있는 레이아웃 구조 입니다. 위와 같은 경우 히트맵을 확인해 본다면, 마우스가 머무는 곳과 시각이 F형태를 띄고 있는 것을 확인 할 수 있습니다.사이트에 접속하여 콘텐츠를 (주로 글) 소비하는 유저들은 아래와 같은 방식을 따르고 있다는 데이터 분석에 의거하여 내린 결론 이었습니다. 형태의 모습이 F형태를 띈다고 하여 F-layout 이라 부르고 있습니다.대부분의 F레이아웃 페이지를 떠올린다면, 워드프레스 형태의 사이트와 기사를 발행하는 사이트들에 많이 해당 레이아웃으로 배치한 것을 떠올릴 수 있을 것 입니다. 이러한 흐름으로만 콘텐츠를 배치해도 유저가 사이트에 머무는 시간을 획기적으로 늘릴 수 있으며, 적절한 광고 배치를 통해 수익을 올릴 수도 있을 것 입니다.F 레이아웃의 창시자 Nielsen Norman Group에서는 꾸준히 왕성한 UX관련 내용을 퍼블리싱중이니 함께 확인해도 좋을 것 입니다. ( https://www.nngroup.com/reports/ )사례 적용더팀스 사이트는 이러한 두 레이아웃 방식과 지금은 다양한 해상도로 인해 잘 사용되지는 않지만 960grid의 근간으로 설계된 bootstrap 12 컬럼 방식과 히트맵을 통해서 꾸준히 사이트의 흐름과 사용성을 개선해 나가고 있습니다.더팀스 팀이 사이트를 개선하는 방식중 가장 중요하게 여기는 것 중 하나는“사용성 좋은 디자인은 항상 스토리 라인을 가지고 있다.” 입니다.아래 이미지는 제가 함께 했던 회사의 2012년 9월의 메인 페이지입니다. 그 당시 꽤 많은 비용을 주고 뉴욕 출신의 모 그래픽 디자이너에게 해당 디자인을 부탁하여 나온 안이었습니다.위의 디자인 안으로 엄청나게 마케팅도 해보고 여러가지를 시도해 보았습니다.그러면서 확실하게 알게된 것은 사이트 내 너무나 많은 것을 알리고자 하면서 흐름이 무너졌다는 것 입니다. 분명 위의 Z-layout 방식을 통하자면 [디자인 의뢰하기], [콘테스트 구경하기]가 클릭율이 높아야하고, 흐름 내에서 동영상을 클릭해서 보는 것이 맞을 겁니다.그러나 기획자의 설계와 다르게 해당 페이지에서 가장 많이 클릭 된 부분은 “로고 디자인 배너” 부분 이었습니다.기획자는 우리의 사이트는 이러한 모든 것들을 한다라는 메시지를 주면서 다양하게 어필하고 싶어했지만, 실제 사이트를 이용하는 유저들은 “너희 서비스가 어떤 일을 하는 것은 관심이 없다. 다만 우리는 우리 회사의 괜찮은 로고 디자인을 해줄 수 있는 곳을 찾고 있을 뿐이다.” 라는 고객 답변이 대다수 였습니다.덧붙여서 마케팅 집행 자체도 클릭율이 높은 로고 디자인에 치중된 유저들이 유입되도록 설계 되어있었으니 사이트에서 말하는 것과 마케팅에서 말하는 것의 맥락이 같지 않아서 ROI가 좋을 수 없었습니다.이러한 패턴을 바탕으로 2013년 2월 데이터와 유저의 행동을 바탕으로 간략하게 맥락을 압축해서 메인을 내부 디자인 팀에서 리뉴얼 했습니다.먼저 크게 우리 사이트가 뭘 하는 것이다를 텍스트로 설명하기 보다는, 먼저 대표적인 포트폴리오를 이미지로 표현하고, 유저에게 느낌을 전달하는데 초점을 맞췄습니다. 해당 리뉴얼을 통해 얻게된 이점이라면 로고디자인을 하러 왔던 고객들도 먼저 포트폴리오를 둘러보고 로고와 패키지디자인을 함께 하고 싶다는 문의가 계속해서 들어왔다는 것 입니다.메인 페이지에서 먼저 구구절절하게 텍스트로 푸는 것이 아니라, 어떠한 것을 한다는 느낌을 전달하고 그 다음 스텝에서 하나씩 그 이야기를 풀어 나가는 방식을 취했습니다. 최종적으로 너무나 많은 것을 알아보고 싶은 고객에게는 상세한 페이지를 제공하여 그 갈증을 해소 시키는 방식으로 페이지를 구성 했습니다. *애플 아이폰 4 런칭때 사이트 모습*넷플릭스 메인 카피 및 버튼들사이트에 접속하는 유저는 메인 페이지에서 정말 몇 초 내 관심을 끌어내지 못한다면, 바로 창을 닫아버리고 맙니다. 같은 맥락에서 아무리 환상적인 서비스라도 초기의 관심을 끌지 못한다면, 유저는 바로 다음페이지로 넘어갈 여지조차 주지 않습니다.따라서 메인 페이지에서는 유저에게 먼저 관심을 끌게 만들고, 액션으로 이어질 동기를 끊임없이 만들어줘서 사이트 내 숨어있는 퍼즐을 맞추도록 해야 합니다.동기까지 부여까지 성공했다면 아래의 원칙을 지켜 사이트를 구성 합니다.1. 어필하고 싶은 페이지 내 포인트를 몇개로 잡을 것인지 (정말 엄청난 매출을 내는 사이트도 포인트로 집중을 두는 버튼이나 텍스트는 많아야 1-2개 입니다.)2. 유저들은 절때 글을 읽지 않는 다는 것을 떠올리고 시각적인 단서를 꾸준히 제시할 것3. 2번 기준에 의거하여 많은 텍스트는 불필요하며, 적절한 공간에 적절한 글의 양만 부여 할 것.4. 데이터를 통한 지속적인 사이트 개선을 실시할것위의 내용을 토대로 더팀스는 초기 전략을 구성 할 때 먼저 유저가 많이 머무를 수 있도록 소비 지향성을 가진 사이트로 운영이 되었습니다.*2016년 2월 기준 초기 더팀스 메인 화면초기 사이트는 현재 아래와 같은 모습으로 변경 되었습니다.*2016년 8월 기준 더팀스 메인 화면초기 더팀스 사이트는 회원가입을 하여 무언가를 할 수 없는 구성이었습니다. 대부분 소비성 콘텐츠로 이뤄져 있었습니다. 이는 사이트 내에서 무언가 행동을 유발시키고 액션을 취할 수 있는 개발이 마련 되지는 않았으나, 유저들이 이러한 기능이 있을 경우 호응이 있을지를 먼저 시장에 내놓고 테스트 하는 것이 더 중요했습니다. 다행히 생각하는 것 이상으로 호응도가 좋았기에  지속적으로 유저의 행동패턴을 반영하여 아래와 같은 사이트 작업의 개선이 시행됐습니다.*2016년 9월 기준 더팀스 메인 화면#더팀스 #THETEAMS #UX #UI #디자인 #UX디자인 #UI디자인 #인사이트 #서비스개선
조회수 934

라이더소개#12. 문제적 남자, 현아 & 스페셜 서촌토박이, 형씨

[라이더소개#12. 자칭 문제적 남자 현아 & 스페셜 서촌토박이 형씨]'다님킥보드'의 대표!현아와 형씨를소개합니다 :)Q.간단한 자기소개 부탁해현아:나는 현아야.내가 사고를 많이 쳐서 문제적 남자야(웃음).그리고 조조한테 설득을 당해서 여기에 왔어.아르바이트를 하려고 찾던 중이었는데,조조를 만나서 새벽2시부터4시까지 두 시간 동안 아띠에 대한 이야기 들었어.그렇게 두 시간 동안IJ를 거의 신격화시키더라고(웃음). '아띠 정신'에 대해서 듣고,거의 세뇌 당해서 왔지.그래서 지금 이렇게7개월째 하고 있네!형씨:내 닉네임은 형씨고,군대에서 컬럼을 보다가 알게 됐어.내가 이 동네에서 태어났는데,아띠인력거 사무실이 사직공원 쪽에 있다는 거야!그리고 휴가를 나와서 봤더니 진짜 있는 거야!내가 이 동네에서20년 살면서 독특한 걸 한번도 못 봤는데,인력거가 들어오니까 마을 자체가 너무 달라지더라고.나한테 굉장히 문화충격이었고, '아 내가 제대하면 저걸 꼭 해야겠다'생각하고 전역하고 나서 시작하게 됐지.내가 한 아르바이트를 이렇게 오래까지 한 건 처음인 것 같아.8개월 정도 된 것 같은데,그만큼 여기가 나한테 매리트있는(웃음),좋은 곳이지.Q.라이딩 처음 시작했을 때 어땠어?현아:나는 처음에 못했어. ‘올레’라는 친구가 트레이닝을 해줬는데,그때 내가 자만심(?)을 부린거야.올레 표정이 안 좋았었는데도 자만심으로 내 맘대로 타다가,체력적으로 너무 힘들어서 더 안 나오려고 했어.그러다가‘조조’라는 친구가 같이 라이딩 한번 하자 해서 다시 나왔었는데,그 날은 또 내 몸이 너무 잘 받아가지고 계속 하게 됐지.그렇게 군대 갔다오고 나서부터 군인정신으로 했지(웃음).충성했지.(웃음)형씨:당연히 엄청 신선했어.사람 만나는 것도 좋았고.제일 좋았던 건 인력거를 타면 사람들이 아는 척을 해준다는 거야!그냥 길을 걸어가면 그렇게 하지 않는 게 당연한데,인력거만 타면 굉장히 호의적으로 대해주더라고.물론 아닌 사람들도 있지만,대부분의 사람들이 잘해주고 웃어주는거야.그게 정말 좋았어.내가 굉장히 특별한 존재가 된 것 같은 느낌을 받았어.그런 느낌을 누가 안 좋아하겠어.자전거를 탔냐 안탔냐 때문에 사람들이 대하는 태도가 확 달라지는 거야.그런 게 정말 좋은 경험이었고,지금도 진행 중이지.현아:맞아.그리고 나 혼자 자전거를 탈 때 한강 달리면서도 습관적으로'안녕하세요'가 나오는 거야!(웃음)사람들이 이상하게 생각하는데,또 나는 그걸 이상하다고 생각하는 게 더 이상하더라고!그럴 때마다 가끔 직업병(?)같은 걸 느끼지(웃음).형씨:맞아! '안녕하세요'가 전염성이 있어!인사를 계속 하고 싶어져.완전 해피바이러스 인 것 같아.Q.라이더를 하면서 언제 가장 힘들었어?현아:나는 손에 꼽을3가지 사건이 있어(웃음).3위가 사람 발을 밟았을 때. 사람 한창 많을 때였고 중국인이셨는데,다행히 크게 안 다치고 괜찮다고 해주셨어. 그래도 연락처 물어보고 문제 있으면 연락 달라고했었지. 2위가 찰리를 처음 만난 날,광화문에서 신나서'야호!'하다가 인력거 뒷 쪽 쾅 박았을 때. Best 1위가 차랑 박아서 인력거 쓰러뜨렸을 때.후진하다가 차가 바퀴를 쳐서 인력거가 앞으로 쓰러졌었어.차양 때문에 시야가 가려져서 차를 못 봤던거야. 내 과실인데,차주께서 먼저 나오셔서 다친 곳 없냐고 물어봐주시고 그랬지.또 다행히 잘 해결하고,연락도 두 세 번 더 드리고 그랬지. 이게 다'3번 인력거'탔을 때야!그래서 난 3번절대 안타. 3번 탔을 때만 문제가 생겼어!(웃음) 아,맞다!'7번 인력거'박아서 찌그러뜨렸을 때도 있다.그때도 3번탔을 때였어.Best 3가 아니고 Best 4네.. 그래서 나는 안전교육하면 항상 내 경험들을 말해줘.그렇게 타면 이렇게 되고,저렇게 된다고.그래서 안전교육은 잘 할 수 있어(웃음).형씨:근데 나는 안 힘들었어!솔직히 딱히 힘들 때가 없었어!Q.진짜?너무 무겁거나 추울 때도 안 힘들어?형씨:아 맞다..추울 때는 심리적으로도 너무 힘들었어!(웃음)어느 날 저스틴이랑 나랑 현아랑 셋이서 나온 적이 있었어.그때 한 영하10도 정도 됐을꺼야.길거리에 사람이 한 명도 없더라고.그때 힘들었지. 그런 날씨적인 부분 빼고는 아띠에서 라이딩할 때 힘든 점은 하나도 없어!현아:그리고 내가 원래 성격이 내성적이었어.그래서 처음 여기 왔을 때 한 두달 정도까지 라이더들이랑 별로 안 친했어. 근데 저스틴이 개인적으로 연락을 해주더라고.저스틴이 원래 뉴비라이더들을 잘 챙겨줘.개인적으로 신경을 굉장히 많이 써줘. 그런 라이더가 두세 명 있는데,앤드류,저스틴,예전에는 타미가 그랬어.셋이 개인톡 제일 많이 왔어!그 셋 덕분에 내가 아띠에 많이 적응하고 친해졌지.형씨:나랑 현아랑 같은 연령대인데도 의외로 처음에 많이 안친했었어.현아:예전에 마리오는 나한테'왜이렇게 소심하냐'고 따졌었어(웃음).형씨랑은 경마공원가서 많이 친해졌어.그때 제일 재미있었어.형씨:말이 우리들에게 매개체가 됐지(웃음).Q.가장 기억에 남는 손님은 어떤 손님이야?현아:손님은 아닌데,기억에 남는 분이 있어.라이더들끼리 공통적으로 얘기하는 게 하나 있는데,퇴근하고 클럽으로 복귀하려고 올라올 때가 제일 힘들다고들 해. 자전거길 오르막으로 올라오다가 힘들면(그러면 안되지만)인력거 핸들 쪽으로 기대서 라이딩을 한단 말야. 근데 옆에 버스 안에 타고 있던 어떤 손님이 나를 보더니 주먹을 이렇게 불끈 쥐고 힘내라고 하더라고.그래서 감사하다고 인사한 적이 있는데,난 그때가 왠지 가장 뜻 깊었어.아!그리고나랑 동갑이었던 손님이 군대 가기 일주일 전쯤에 어머니랑 같이 탄 적이 있었어.정말 재미있게 라이딩을 했는데,그 어머님이 같이 피자를 먹자고 그러시더라고!그래서 같이 대장장이 피자집에 가서 피자를 먹는데,이 인력거를 타려고 한달 전부터 기다리셨다는 거야.그리고 밥을 먹고 나서 가는데, 투어비를'고맙습니다'라고 적힌 봉투에 담아서 주시더라고!형씨:그 투어비를 봉투에 담아서 주신다는 게 얼마나 고마워!현아:맞아.나 아직도 그 봉투 가지고 있어.피아노 위에 전시해놨어(웃음).내가 아니였어도 다른 라이더에게 그렇게 주셨겠지만,그게 그렇게 기억에 남더라고.그 선물이.Q.형씨는 기억에 남는 손님 있어?형씨:몇 개월 전에 대니랑 라이딩을 나갔어.일본 분들이 타셨는데,서촌 첫 투어였을 거야.처음이니까 아무리 잘 아는 동네더라도,인력거로는 와본 적이 없어서 너무 힘들었었는데 그래도 미술관 투어를 많이 해드렸어.그 가족 분들이 다 미술 쪽을 전공하신 분들이었던 거야.신발까지 완전히 일본식 전통 의상을 입으신 할머니 할아버지였는데,투어가 끝나고'한국에 와서 미술관 구경을 잘못했는데 너무 고맙다'고 이렇게 인사를 해주시는데 그런 말씀이 너무 감사한 거야.그리고 팁도 그 날 제일 많이 받았어.현아:형씨,그 말레이시아 손님도 계시잖아!형씨:아!맞다!꼭 말하고 싶은 손님이고 제일 기억에 남는 손님이 있어!정말 추운 겨울날이었어.라이딩하고 퇴근하려고 복귀를 하고 있었는데,어떤 외국 분이 나한테 시선을 주는 거야.그런 시선을 마다할 리 없지!그래서 짧은 영어로 타시라고 했는데 흔쾌히 타셔서 오천원 요금을 받고 짧게 태워드렸어.친구까지 세 분 이었는데,유독 한 분이 나를 다시 잡으시더라고.이름은 제니인데, ‘페이스북이나 트위터,인스타그램 하냐, SNS하냐’고 물어보시더라고.그래서 한다고 말하고 페이스북이랑 연락처를 알려드리고 카카오톡 친구가 됐어.그런데 현실적으로 너무 멀리 떨어져있고 다시 만날 기회가 없으니까 지속되진 않겠다고 생각했는데,먼저 연락이 온 거야.그 후로 계속3-4개월이 지난 지금까지도 일주일에4~5번은 연락을 하고 항상 연락을 해줘.또 어느 날은 집주소를 물어보시더라고.처음에는 솔직히 조금 무서웠는데(웃음),알려드렸어.그런데 크리스마스선물을 말레이시아에서 소포로 보내주신 거야!나하고 내 여동생 것까지!내 인생을 살면서 사람에 대해 정말 감동받았던 일Best 3안에 드는,그런 분이야.이제 조금 있으면 다시 한국으로 여행을 오신대.그래서 내가 서울 투어를 맨투맨으로 시켜드리려고 계획 중이야.너무 좋으신 분이야.내 이모뻘 되시고40대중반 정도이신데,내 영어실력 수준 눈높이에 알맞게 맞춰서 대화를 해주셔.내가 아띠를 하면서 일어난 가장 좋은 일인 것 같아.평생에 있을까 말까 한..현아!기억나게 해줘서 고마워!(웃음)Q.전동 킥보드를 대여해주는'다님'이라는 사업은 어떻게 시작하게 된 거야?현아:형씨의 꾀임에 넘어갔지(웃음).장난이고, 12월 말쯤 형씨가 같이 하면 좋을 것 같다고 했는데 그때 내가 마침 방랑기였거든.학교를 안 가니까 할 수 있는 건 많은데,뭘 해야 될지 잘 모르겠는 거야.그리고 형씨랑 같이 해보면 재미있을 것 같아서 시작하게 됐지.근데 아직 손님은 못태웠어..이번 주 목표는 손님 한 명 태우는 거야.그리고 내가 아는 상권과 아는 분들에게 다님을 홍보하는 거.형씨:내가 원래 서촌에 자전거 대여소를 하나 하고 싶어 했었어.고등학교 때 서촌이 관광지로서 조금씩 올라올 때 자전거 대여소를 하고 싶다는 생각을 했었거든.고등학생 때니까 실행에 옮기진 못했고,그 생각이 군대 때 잠시 잊혀졌었지.그러다가 군대를 전역하고 아띠에 들어오고서 우연히 전동 킥보드라는 걸 알게 되었는데,전동 킥보드로 다리 역할을 제공해주면 사람들이 서촌에 구석구석 특별한 것들을 더 많이 보러 갈 수 있겠구나 생각이 들었어.현아:맞아 맞아.나는 내가 태우는 손님들한테 흔히‘얼굴’에 비유를 해서 이렇게 표현을 해. “사람들은 항상‘눈,코,입’이쪽 부분만 가는데,우리는 인력거를 이용해서 사람들이 가지 않는 부분(이마,볼,턱 등)을 보여드려요.나머지 부분들을 보여드리기 위해서 인력거가 있는 거에요.”이렇게 인력거가(관광의)수단이 되고,랜드마크가 되는 거지.그런데 인력거를 타는 데에도 한계는 있잖아.내가 가고 싶은 곳에 데려다 주지만,그것도 누군가를 통해서 가는 거잖아.그래서 사람들이'직접'가는 건 어떨까 하는 도전정신에서 시작을 한 거야.형씨:결과적으로는 아띠가 있어서 이걸 시작할 수 있었지.현아도 만났고.그리고 ‘다님’에 대한 우리의 목표가 있어.이번 년도는 우리가 이 사업성을 알아보는 거고,그 후에는 점포 하나를 얻고,킥보드10대까지 늘리는 거야.그리고 내가 인력거를 끌어보니까 사람들이 모르는 주위에 숨은 명소들이 많더라고.그런 명소들을 사람들이 스스로 찾아낼 수 있게끔 하고,그런 새로운 관광서비스를 만드는 게 목표야.아띠도 인력거라는 문화를 만든 거야.북촌에 인력거라는 아이템이 문화가 된 거지.그렇듯이 나도‘다님’이라는 킥보드가 종로 관광에 하나의 문화가 되었으면 좋겠어.그게 진짜 내 제일 큰 목표야. “시작은 미약하였으나 끝은 창대하리라!”(웃음)Q. ‘다님’ 킥보드요금은 얼마야?형씨:4시간 대여 기준,킥보드2대, 25,000원이야.합리적인 가격이지! 하하(현아와 형씨의‘다님’킥보드http://blog.naver.com/danimboard)Q.인력거의 장점은 뭐라고 생각해?형씨:나는 색달라서 좋아.남들이랑 달라서 좋아.인력거 자체가 우리나라에서는 좀 다르잖아.나는 항상 남들이 다 하는걸 별로 안 좋아하는데,인력거를 타면 남들과 다른 것 같은 느낌이 들어서 좋아.특별한 느낌 아주 좋아해!(웃음)Q. 어떤코스를 제일 좋아해?형씨:IJ없으니까 말하는 건데..(웃음) 난항상 로맨스코스,히스토리코스 이렇게 정해진 대로 절대 안가.물론 손님의 취향도 고려를 해야겠지만,그 날에 내 기분에 따라 가고 싶은 곳을 어떻게든 1시간 코스로 맞춰서 만들어.그래서 정해진 대로가 아니라,나만의 코스대로 가는 걸 제일 좋아해(웃음).현아:나도IJ한테는 비밀인데.. (웃음웃음)두 코스를30분, 30분씩 섞는걸 좋아해.그리고 손님의 의중은 그렇게 크게 두지 않아(웃음).그리고 내가 매출이 그렇게 크지 않은 이유 중 하나가 내가'호객행위'같은 걸 잘 안 해.왠지 호객해서 받은 손님을 재미있게 못 태우겠어!내 모습도 제대로 못 보여주겠고..그래서 차라리 호객해서 손님을 태우면 그냥 프리로 태워드려.아 그리고 내 원칙은 첫 손님과 마지막 손님은 무료야.그리고 내가 투어 도중에 퀴즈2-3개 내는데 그걸 맞추면15분무료탑승권을 선물로 드려.그만큼 내가 재미있게 할 자신이 있어야 돼.Q.현아 형씨,너희들에게 아띠인력거란?현아:진짜‘컬쳐쇼크!’보수적이었던 나를 개방적으로 바꿔준,인간갱생프로젝트지(웃음).PC방에 앉아있는 내 친구들을 여기(인력거)에 앉히고 싶어(웃음).형씨:20대 초반 사람들은 꼭 했으면 좋겠어.죽기 전에 꼭 해야 할 그런 것 같아.그래서‘20대에 꼭 해야 할 버킷리스트!현아::맞아, ‘버킷리스트!’’ 20대들이 의지할 곳이 필요할 때,정신적인 위안과 여유가 필요할 때 여기에 와야 돼.종교 같은 곳이야(웃음).정말 마음에 안식처가 되는 곳이야.Q. 마지막으로,미래의 아띠 라이더에게 한마디 하자면?형씨:나는 이걸 하기 전에는 돈이 최우선이라고 생각했었어.아르바이트도 내 용돈 벌고,내가 하고 싶은 거 하려고 하는 거였으니까.그런데 이걸 하고 나서,돈이 제일 중요한 게 아니라는 걸 알았어.돈보다 충분히 더 좋은 경험들을 많이 하니까,돈을 벌려고 이걸 하지 않았으면 좋겠어.현아::인간갱생의 연장선인데, 사람이‘근거 없는 자신감’, ‘근자감’이 생기는 게 얼마나 좋은 일인지 알았으면 좋겠어.앞이 보인다는 행복감 같은 건데,흔히‘아 앞이 안보여~’이런 부정적인 말들을 많이 하잖아. ‘불투명한 미래~내 인생 어떻게 해야 되지?’이런 말들을 한방에 떨쳐버릴 수 있는‘근거 없는 자신감’이 생긴다는 거야.그게 아띠가 라이더들에게 주는 최고의 가치인 것 같아.이 근거 없는 자신감으로 손님을 만나고,손님을 만족시켰을 때 오는 카타르시스!이건 내가 아무리 어떤 맛집에 장인이 되어서 손님들에게 맛으로 만족을 시켜도 못 받는 직접적인 피드백인 것 같아.형씨:좀 과장되게 말해서, ‘싸이가 시청에서 몇 만 명 앞에서 강남스타일을 췄을 때의 싸이의 기분?(웃음)’현아:맞아!그런 게 있어!투어 끝나면 오는!아!아!하는 뭔가 쭈뼛쭈뼛하는 전율!!(웃음)아띠의 든든한 두 기둥이자, '다님 킥보드'의 대표형씨와 현아의솔직담백하고 즐거운 인터뷰였습니다. :)'다님'의 번창을 기원하며 인터뷰를 마칩니다!#아띠라이더스클럽 #팀원소개 #팀원인터뷰 #팀원자랑 #기업문화 #조직문화 #사내문화!
조회수 6470

[제일극장] 제일기획 직무소개 AE 편_이문희 프로

 스치는 바람에도 그리움이 몰려오는 이 계절. 잠시 접어두었던 제일극장을 오랜만에 다시 펼쳐보려 합니다. 오늘 만나볼 주인공은 비즈니스 13팀의 이문희 프로. AE를 ‘광고 회사의 꽃’이라 했던가요. 화창한 오후 이태원의 한 카페에서 그를 만났습니다. ‘AE가 말하는 AE’는 어떤 모습일까요? <장소 협조: 말리커피 이태원점> 원초적인 질문일 수 있는데, AE란 무엇인가요?AE가 Account Executive의 약자라는 것쯤은 다들 아실 겁니다. 직역하면 ‘계좌 관리인’인데요. 정해진 예산을 효율적으로 관리해 효과적인 광고 마케팅을 만들어나갈 수 있도록, 처음부터 끝까지 관리하고 책임지는 사람이라 할 수 있습니다.  AE가 하는 일을 구체적으로 설명해 주신다면요?AE가 하는 일은 크게 세 가지 사이드로 나눌 수 있습니다. 첫 번째는 클라이언트 사이드에요. 광고주의 정해진 예산을 어떻게 쓸지 계획을 수립하고, 설명과 설득의 과정을 거쳐 집행한 후에 결과를 보고하는 것까지 하게 되죠.두 번째는 내부 스태프 사이드에요. 광고를 만들고 집행하는데 필요한 각 분야의 담당자를 선정해 적절한 역할을 분배하고 조율하는 역할이죠. 구성된 모든 이들과의 커뮤니케이션은 필수에요.마지막은 소비자 사이드인데요. 트렌드를 파악하고, 각 타깃의 특성이나 제품에 대한 반응을 정리해 취합합니다. 트렌드 조사는 기관에 따른 정식적인 조사도 있지만, 댓글이나 주변 사람들의 반응을 많이 참고하는 편이에요.한마디로 AE는 ‘커뮤니케이션 허브’라고 할 수 있는데요. 광고주와 내부 스태프, 소비자까지 모든 이들과의 연결 접점이자 전 과정의 총괄자이기에 책임감을 가지고 일할 수밖에 없습니다.   하루 업무 일과를 들려주세요.자리에 앉으면 가장 먼저 이메일부터 확인합니다. 밤새 온 메일이나 급히 보느라 놓친 메일은 없는지 보다 보면 오늘 해야 할 업무가 머릿속에 떠오르죠. 그중 가장 급한 것, 급하진 않지만 중요한 것, 덜 중요하지만 바로 해야 하는 것 등을 정리해 우선순위를 나눠요. 시간 개념으로 몇 시에 무엇을 할지 정합니다. 미팅이나 광고주 방문 시간을 가장 중요하게 여기고요. 사이 시간에는 트렌드 분석이나 전략 수립 등을 하죠. 이런 일들을 하다 보면 눈 깜빡할 새 하루가 지나가더라고요.  프로님은 처음부터 AE 업무를 하셨나요? 제가 광고에 발을 들인지 17년 정도 되었는데요. 처음 4년 정도는 이벤트 프로모션 업무를 담당했어요. AE가 커뮤니케이션의 허브이기 때문에 당시 이벤트 프로모션을 담당하던 저도 AE를 통해서 광고주 반응을 듣고, 모든 업무현황을 전달받았죠. 그러다 보니 지금 내가 하는 업무가 제대로 가고 있는 것인지, 내가 아는 정보와 판단이 정확한 것인지 계속 걱정되고 자세한 이야기를 듣고 싶더라고요. 그때의 경험이 지금은 AE로 일하는데 도움이 되는 것 같습니다. 함께 일하는 스태프의 입장을 헤아릴 수 있는 AE가 되는데 자양분이 되었다고 할까요? 다양한 시야를 가질 수 있게 되었답니다.   일하면서 직접 체감하는 AE 업무의 매력은 무엇인가요?남들은 한 번뿐인 인생이라고 하지만 AE는 100개의 광고를 만든다고 봤을 때, 100번의 인생을 사는 것 같아요. 제품의 특성이 다른 각각의 캠페인을 키워나가는 과정에서 늘 새로운 삶의 목표가 생기고 또 다양한 삶을 경험할 수 있죠.또, AE 업무는 굉장히 다이내믹해요. 커뮤니케이션의 허브로써 미디어, 디지털, 제작, 전략 등 다양한 부서의 스태프와 모든 과정에서 커뮤니케이션을 하기 때문에, 한 팀에서 생기는 작은 문제일지라도 AE에게는 모두 직면하고 해결해야 할 일이죠. 언제 어디서 무슨 일이 생길지 모르기에 하루 한치 앞도 내다볼 수 없답니다.  일하시면서 가장 보람을 느꼈던 순간은 언제였나요?‘진짜 피로회복제는 약국에 있습니다’라는 박카스 캠페인을 맡았는데요. 캠페인 이후 매출이 매년 3~40%씩 상승했고 캠페인으로 상도 많이 받고, 소비자들에게 호평도 많이 받았죠. 당시 광고주가 이런 말을 하라고요. “제품도, 유통환경도, 마케팅 전략도 그대로인데 오로지 광고 캠페인 하나만으로 모든 것이 바뀌었다”고요. 광고를 만들면서 들을 수 있는 최고의 찬사가 아닐까요?아, 가장 최근에 진행했던 스타필드 하남 캠페인도 기억에 남아요. 아무도 알지 못하는 신규 론칭 브랜드인 ‘스타필드’의 브랜드명도 노출하지 않은 채 한 달 동안 티저 광고만 하기를 제안했어요. 처음 보는 브랜드를 기대감만 고조시키자는 제안은 광고주 입장에서 선뜻 받아들이기 어려웠을 것 같은데 감사히도 받아들여주셨죠. 결과는 대 성공이었습니다. 광고주의 요구대로만 광고를 만드는 것이 더 쉽고 편하긴 하지만, 어찌 보면 모험일 수 있는 도전을 성공으로 이끌어 낸 것에 큰 보람을 느꼈어요.  좋은 광고주 분들을 만나셨던 것 같은데요. 혹시 광고주의 무리한 요구가 있을 때는 어떻게 대처하시나요?AE가 “No”를 외치는 순간 모든 업무가 중단되기 때문에 그렇게 말할 수는 없어요. 그렇다고 예스맨이 되어서도 안 되겠죠. 안 되는 일을 무작정 된다고 내세웠다가 못할 경우에는 더욱 큰 문제가 생기기 때문이에요. 곤란한 상황에서는 “Yes, But..”이라는 대답이 가장 적합할 것 같네요. 가능한 하되, 무리한 상황에는 현실적으로 가능하게 만드는 적절한 타협이 필요하겠죠.  AE는 어떤 성격의 사람에게 잘 맞을까요?아무래도 적극적이거나 진취적인 성격의 사람에게 잘 맞는 것 같아요. 광고 일을 하면서 관심 있는 분야만 할 수는 없잖아요. 모르는 분야도 묻고, 찾아보고, 조사하고, 공부해서 누군가를 설득하고 이해시키는 것이 AE의 역할이다 보니 진취적이고 적극적이지 않으면 어려울 거예요. 또 쉽게 절망하는 사람보다는 긍정적이고 잘 견디는 사람이 잘 맞아요. 어려운 과제나 클라이언트의 무리한 요구에 쉽게 좌절하는 AE를 믿고 따를 스태프는 아무도 없겠죠? 어떤 상황에서도 절망하지 않고 긍정적인 태도가 필요합니다.   AE가 되기 위해 필요한 역량이나 경험이 있다면요?잘 놀고, 사람 많이 만나는 사람들이 AE 일도 잘 해요. AE 업무에는 특정한 경험보다는 사회 전반에 걸친 다양한 경험이 필요한데요. 무수한 경험을 직접 해보기란 쉽지 않다 보니, 사람들을 많이 만나 그들의 삶을 간접적으로 체험하는 것이 도움이 된다고 생각해요.연령을 뛰어넘어 다양한 취미 활동을 즐기고, 여러 성향을 가진 사람들과의 만남을 가지다 보면 삶을 더욱 풍부하게 경험할 수 있답니다. 예를 들어 갱년기 여성을 위한 제품을 광고한다고 했을 때, 남자인 제가 그 삶을 살아보지 않더라도 그들의 삶을 이해할 수 있게끔 도움이 되는 거예요. 그렇다고 이 글을 읽는 독자분들, 공부 안 하고 놀기만 하시면 안 됩니다..^^  업무로 인해 스트레스를 받을 때는 어떻게 해소하세요?프로젝트를 진행하다가 어떤 포인트에서 막히면, 이 프로젝트와 전혀 무관한 누군가를 만나 이야기를 나눠요. 털어놓는 과정에서 마음이 가벼워지며 스트레스가 해소되기도 하고, 상황을 알지 못하는 사람이 툭툭 던지는 말에서 영감을 얻을 때도 있죠. 그런 과정 속에서 솔루션이 나오기도 하고요. 역시 사람을 만나는 게 제일 좋은 것 같아요.광고는 사람이 하는 일이고, 사람에게 전달되는 일이잖아요. 클라이언트도 사람, 소비자도 사람, 함께 일하는 스태프들도 모두 사람. ‘사람으로 인한 문제는 사람으로 푼다’는 것이 저만의 스트레스 해소 방법이랍니다. 사람 좋아하지 않으면 AE 일하기 힘들어요.  사람들과 자주 만나는 직업이다 보니 외적인 모습도 중요할 것 같아요.눈빛, 말투, 옷차림은 가능한 깔끔하고 전문적으로 보여야 한다고 생각해서 늘 신경 쓰는 편이에요. 패션모델처럼 입을 필요는 없지만 전문성과 자신감을 보여줄 수 있어야 하죠. 각 잡힌 정장을 입으면 크리에이티브 한 인상을 남기기 어렵고, 트레이닝복처럼 너무 편한 차림이면 신뢰감이 떨어질 수 있어요. 단정하지만 센스 있게, 믿고 맡길 수 있는 파트너로서 저를 포지션 하기 위해 옷차림에 신경을 많이 쓰는 편입니다. 프레젠테이션을 하든, 미팅을 하든, 면접을 보든 누군가를 만나 내가 원하는 방향으로 이야기를 끌고 나가기 위해서는 좋은 인상이 중요하겠죠?  사람과 연결되어 있고, 사람과 함께 일하며, 사람을 통해 스트레스를 해소하는 이문희 프로. 이야기를 나누며 AE라는 직무가 수많은 사람들과의 관계 속에 피어나는 존재임을 느낄 수 있었습니다.마지막으로 AE의 가방 속엔 무엇이 들어있을지 궁금해졌는데요. 이문희 프로의 ‘머스트 해브 아이템’을 함께 살펴볼까요?1.색색별 명함: 커뮤니케이션이 중요한 직업이다 보니 언제 어디서나 명함은 필수! 낯설고 새로운 사람과의 만남에 항상 대비하는 자세로 명함은 꼭 지니고 다닌답니다.2.노트와 필통: 요즘은 중요한 내용을 사진으로 찍어두거나 태블릿으로 메모해두는 사람들이 많아졌지만 이문희 프로에겐 아직 아날로그 필기법이 편하답니다. 보는 사람에게도 조금 더 안정감을 주며 말하는 내용이 더욱 잘 전달된다는 느낌을 줄 수 있다고 하네요!3.휴대폰과 충전기: 이문희 프로의 열정만큼이나 언제나 뜨거운 전화기, 이문희 프로의 휴대폰은 쉴 틈이 없는데요. 어떤 상황에서도 연락이 끊어지지 않도록 충전기를 늘 지니고 다닌답니다.#삼성 #삼성그룹 #제일기획 #AE직무 #직무소개 #AccountExecutive #AE #말리커피 #이문희프로 #인터뷰 #제일극장 #직무정보 #기업문화 #조직문화 #구성원인터뷰
조회수 1774

캘리그라피로 사이드 프로젝트하기

"내 똥 손재주로 캘리그라피를 할 수 있을까?"캘리그라피를 처음 시작하려는 분들이 가장 많이 묻는 질문입니다.보통 사람들은 스스로에게 '예술적 재능'이 없다 믿으며 살아갑니다. 예쁜 것을 알아보는 '심미안'이나 '감각' 정도는 있다고 생각할지라도 '손재주'가 있냐는 말 앞에서는 작아지기 마련이죠. (그렇게 생각하지 않는 분이 이 글을 읽고 있다면... 부럽습니다)그래서 캘리그라피를 처음 시작할 때 사람들은 '나의 손재주'를 먼저 점검하곤 합니다. 평소에 나는 그림을 잘 그릴 줄 알았던가...(아니요), 그렇다면 글씨라도 좀 예쁘게 쓰는가...(아니요), 그렇다면 뭐라도 만드는 재주라도 있었던가...(그것도 아니요) 이렇게 몇 가지의 질문을 던지고 나서는 대부분 시작도 전에 포기를 하고 맙니다. 하지만 저도 그냥 평범한 직장인이었습니다. 여러분들처럼 손재주는 평소에 뽐내보지도 못했던, 그렇지만 뭐라도 부업을 시작하고 싶었던 평범한 손고자였죠. 그렇지만 이제는 5년차 캘리그라피 작가가 되어 4년째 캘리그라피를 가르치며 작품 활동을 하고 있습니다. 어떻게 가능했을까요? 그래서 그렇게 아무것도 하지 않고 아무일도 일어나지 않습니다캘리그라피는 손재주가 필요하지 않습니다.이렇게 말하면 많은 분들이 '구라 치네 뻥 치지 마!'라고 말하실 것 같지만, 이 말은 사실 90%는 진짜입니다. 심지어 악필이어도, 평소에 그림을 그려본 적이 없어도, 캘리그라피는 '반복적인 훈련'으로 완성될 수 있는 일종의 '기능' 혹은 '기술'입니다. 기본적인 글씨의 형성 원리, 반복적인 획 훈련, 그리고 꾸준히 시간을 투자하는 것만으로도 우리의 글씨는 몇 배나 더 나아질 수 있는데, 캘리그라피의 화려한 면만 보고서는 지레 겁먹고 포기해 버리는 것이죠. 물론 손재주가 있으면 더 쉽게 할 수는 있지만, 없어도 누구나 쉽게 할 수 있다는 것은 변하지 않는 진리입니다.이들도 처음에는 손재주가 없었습니다. 그렇지만 어느새 저렇게 카드를 만들어내는 공장이 되어 있었죠매일 30분씩, 한 달이 세 번 반복되니 '작가' 소리를 들을 수 있었습니다.  저는 4주 수업을 듣고, 4주 독학을 하면서 캘리그라피를 배웠습니다. 제 스승님은 4주면 충분하다고 했지만, 의외로 손재주가 없었던 저는 남들보다 실력이 더디게 늘었습니다. 하지만 더 본질적인 문제는 제가 충분히 시간을 투자하지 않는다는 것이었습니다. 3주 차가 되었을 때, 스승님이 '당신은 남들보다 더 재능이 없는 것 같다'는 말을 듣고 오기가 생겨서 매일 2시간씩 투자했던 4주 차 덕에 오늘날의 제가 있게 되었죠. 그때 깨달았습니다. 캘리그라피는 반복적인 훈련과 하루 1~2시간 정도의 시간 투자만으로도 금방 정복할 수 있다는 기술이라는 것을요.그리고 약 2달간 매일 30분에서 1시간을 투자하며 글씨를 손에서 놓지 않았습니다. 설렁설렁 배우다 4주차가 되어서 이렇게 쓸 수 있게 되었고그렇게 4주가 더 지나니 글씨가 자리가 잡혔고세 달이 지나니 작가 소리를 들을 수 있었고반 년이 지나니 어떤 글씨도 제 마음대로 쓸 수 있게 되었습니다 음악과 좋은 글귀로 힐링도 할 수 있을 거예요가장 좋은 건, 캘리를 쓰는 시간만큼은 온전히 나만의 시간이 된다는 점이었어요. 음악 가사를 써보면서 내용을 곱씹기도 하고, 좋아하는 영화 제목을 쓰면서 포스터에 합성도 해보고, 좋아하는 시를 필사하면서 혼자 뽕 감성에 젖어 새벽 시간을 보내기도 했어요. 그 시간만큼은 그 어떤 고민도 없어지고, 오직 글씨와 나 둘 사이의 시간이었습니다. 왜 글씨가 더 예쁘게 안 써질까. 왜 이 작가는 이런 글을 썼을까. 왜 나는 지금 이 글귀를 보고 혼자 갬성에 젖어있을까... 시간을 보내다 보면 마음도 좀 가라앉고 생각도 정리되는 기분이었달까요.저는 감히 글씨를 배우기 전과 후로 제 인생이 달라졌다고 믿습니다. 생각을 정리하는 습관도, 내 마음을 다스리는 법도 배웠기 때문이에요. 아, 그리고 또 하나. 주변 사람들에게 글씨로 내 마음을 전달할 수 있는 것도 좋았어요. 이제 사람들은 제게 글씨를 기대하고, 그 사람들은 글씨로 저를 기억하며, 그들의 일상에 나를 스며들게 할 수 있거든요. 지인들의 중요한 순간에 내 흔적을 남기는 것만큼 좋은 일은 없습니다.글씨가 당신의 부업이 될 수 있어요. 캘리그라피 작가로 활동하면서, 부수입은 큰 경제적 도움이 되기도 했어요. 한창 많이 벌 때에는 한 달에 월급을 한 번 더 받는 기분이 나기도 했으니까요. 간단한 로고 글씨 제작부터 메뉴판 제작, 그리고 방송에 들어가는 다양한 글씨들까지. 모두 다 충분히 부업이 될 수 있는 일들이 여러분을 잔뜩 기다리고 있어요. 길 가다가 내 글씨가 보이는 경험. 사실 4주 만에 바로 하는 것은 어렵겠지만, 얼마든지 가능한 일이랍니다. 꾸준히 글씨를 써서 나만의 포트폴리오를 만들고, 재능 공유 사이트에서 글씨 공모전에 참여해보고, 주변 사람들의 작은 부탁을 들어주며 글씨를 쓰다보면 어느새 글씨로 돈을 벌 수 있는 나 자신을 발견할 수 있어요. 물론 조금의 노하우는 필요하겠지만, 꾸준히 매일 30분, 그리고 내 글씨로 세상을 물들이겠다는 근거 없는 자신감과 믿음만 있으면 누구나 작가가 될 수 있어요. 마치 저처럼 말이죠! 누군가가 나의 글씨를 필요로 한다는 것. 아마 앞으로 하게 될 많은 일에 당신의 가능성과 잠재력을 더 많이 활용할 수 있는 기회가 될 거예요. 마케터나 기획자, 혹은 디자이너라면 더더욱일지도 모르고요! 제가 직접 쓴 간판입니다. 길가다 마주치면 정말 짜릿해요. 혼자 하기 어렵다면, <프로젝트 작당>이 도와드릴게요.햇수로 4년이 넘는 시간동안 사람들을 가르치며 얻은 몇 가지 노하우가 있었어요. 그 중 제일 중요한건 '내가 쓴 글씨를 어디에 활용해야 할지'를 사람들이 의외로 잘 모른다는 점이었어요. 사실 글씨는 '나 좋자고' 쓰는 것이기도 하지만, 누군가에게 선물로 줬을때 그 기쁨이 배가 되거든요. 단순히 글씨만 잘 쓰도록 바뀌는게 아니라, 내 글씨가 더 많은 사람들에게 사랑받을 수 있도록. 그리고 그 글씨로 더 많은 꿈을 꿀 수 있도록 내 삶을 풍성하게 만드는 방법을 함께 공유하고 싶어요. 제가 글씨로 제 삶을 바꾸고, 사람들에게 '나'라는 향기를 마음껏 묻히고 다녔던 그 소중한 순간을 함께 나눈다면 누군가의 삶도 더 멋지게 바뀔수 있지 않을까요? 물론 우리는 진짜 붓으로 수업을 하지 않고 붓펜으로 가볍게 시작하겠지만, 적어도 붓펜으로 글씨를 쓸 때만큼은 달라질 수 있을 거예요. 교재도 있고, 같이 하는 사람들과 교류하는 시간도 있는. 그러면서도 내 달라진 글씨로 자신감도 찾을 수 있는 수업으로 즐겁게 시간을 보낼 수 있을 겁니다.이렇게 손수 교재도 제작해서 드릴거예요이제 같이 글씨 쓰면서 돈 벌어요. 캘리그라피로 글씨 쓰는 법부터, 내 캘리그라피로 작품을 만드는 법, 그리고 작품으로 돈 벌고 작가가 되는 법까지. 현직 마케터이자 캘리그라퍼 작가로 활동하고 있는 '고재형 작가'가 직접 이 모든 비결을 알려드려요. 간단하게 휴대폰으로 사진을 찍고 작품을 만들어 내 글씨를 팔다 보면, 어느새 나도 캘리그라피로 사이드 프로젝트를 할 수 있지 않을까요? 지금 작당과 함께 캘리그라피 사이드 프로젝트를 시작해 봐요 :)<작가 정보>고재형 (필명 라마)5년 차 캘리그라피 작가 라마 캘리그라피 강사 (누적 수강생 230명)각종 프랜차이즈 및 중소규모 점포 프로젝트 진행 다수전) 한국소아암백혈병협회 캘리그라피 수업 강사<수업 정보>총 8주 프로그램 캘리그라피 기초 4주 (특강) 캘리그라피 작품 제작 실습, 외주 연습 4주주 1회 2시간 (연습 포함시 2시간 30분) 1주차 한글 캘리그라피 기초 이론 + 자모음 연습 (1) 2주차 자모음 연습 (2) + 기본 단어 쓰기 (2-3음절)3주차 응용 단어 쓰기 (3-10음절)4주차 문장 쓰기 + 구조 배우기 --- 기초반 끝 ---5주차 작품 만들기 (1) : 기념 카드 만들고 꾸미기6주차 작품 만들기 (2) : 화선지 액자 작품 만들기7주차 외주 작품 실습 : 휴대폰 / 컴퓨터로 작품 만들기8주차 외주 작품 실습 : 영상 촬영 / 디지털 캘리그라피 체험 --- 쫑파티 ---캘리그라피 기초 4주만 수강 시4회 99,000원 (재료비 1.5만원 별도)작품 제작 및 외주 실습 4주 추가 수강 시 4회 99,000원 일괄 수강 시 - 10% 할인 179,000원 (재료비 1.5만 원 별도)2인 동반 수강 시 - 169,000원(재료비 면제)장소는 신촌의 아지트 MURI에서 진행됩니다.목요일 오후 8시 (마감) / 토요일 낮 2시 (2자리) / 화요일 오후 8시 격주단위 (폐반) 반이 있습니다.개강은 8월 마지막 주, 혹은 9월 1주 예정이며, 정확한 개강 일정은 톡방에서 함께 정합니다. 보충 및 개별 수업 가능합니다. 반별 최대 정원은 8명입니다.<신청 문의>신청 문의는 온라인으로만 가능합니다.아래의 채널로 이름 / 연락처 / 희망 수강 요일(평일, 주말) 을 적어서 메시지 주시면 신청 도와드립니다.페이스북 페이지 아지트 MURI (https://www.facebook.com/theagitmuri/)인스타그램 아지트 MURI (https://instagram.com/agit.muri)<목요일 저녁반 일정> (마감)매주 목요일 저녁 8시 ~ 10시  1회차 8/30 기초반 개강 2회차 9/6 3회차 9/13 4회차 9/20  5회차 9/27 작품반 개강 6회차 10/4 7회차 10/11 8회차 10/18  <토요일 주간반 일정> (2자리)매주 토요일 낮 2시~4시  1회차 9/1 기초반 개강 2회차 9/8  3회차 9/15 *9/22 추석 휴일* 4회차 9/29  5회차 10/6 작품반 개강 6회차 10/13 7회차 10/20 8회차 10/27  <화요일 저녁 격주반 일정> (신규)1회차 9/4 기초반 격주단위 2회차 9/18 3회차 10/2 4회차 10/16 5회차 10/30 작품반 1주단위 (5~8회차부터는 1주 간격) 6회차 11/6 7회차 11/13 8회차 11/20  <강사 작품 포트폴리오>#어니스트펀드 #마케터 #마케팅팀 #인사이트 #경험공유 #캘리그라피 #사이드프로젝트
조회수 1563

싱싱한 채소와 과일로 식탁 위 평화를 지키는 컬리의 프레시맨, 신선MD 편

[#마켓컬리 #신선MD #프레시맨]바쁜 아침, 우리에게 일용한 양식을 주는 마켓컬리. 그리고 그 중심엔 갓 수확하여 신선한 상태 그대로 배송되는 신선식품이 있다. 감자, 양파, 오이 등 우리 가족의 삼시 세끼를 건강하게 책임지는 채소부터, 아보카도와 무화과 등 따라 하고 싶은 브런치를 만들어줄 트렌디한 과일까지. 맛은 물론 품질까지 보장하기 위해 비가 오나 눈이 오나 뛰어다니는 신선 MD님들의 하루를 통해 우리 집에 배송되는 채소와 과일의 여정도 확인해보자.출근을 하고 나서 가장 먼저 하는 일은 무엇인가요?(준규) 재고량 체크죠. 요즘 날씨 때문에 산지 상황이 안 좋으니까 발주를 넣어도 넣은 대로 안 들어오는 경우가 많아 물량을 실시간으로 체크합니다. 그리고 일기예보를 확인해요. 현재 산지에 비나 태풍이 오진 않는지, 혹은 그런 예정이 있는지, 기온은 어떤지 일일이 확인하죠. 마침 전날 비가 많이 와서 오늘 아침 생산자분께 전화가 오기도 했어요. 하우스 2동이 침수됐다고(ㅠㅠ) 이럴 경우 상황에 따라 발주량을 줄이는 등 빠르게 조치를 취해야 해요.(승현) 신선 MD에게 날씨 체크가 더욱 중요한 게, 사실 다른 카테고리의 상품은 비나 눈이 많이 올 때 문제가 되는 건 ‘배송’이거든요. ‘과연 아침 7시까지 배송할 수 있을까?’가 포인트인 반면 저희는 날씨가 안 좋으면 아예 수확을 할 수 없어요. 배송은 물론 생산에서부터 문제가 발생하니 미리미리 날씨를 체크할 수 밖에요. 그래서 이번 솔릭 태풍 때 긴장을 정말 많이 했죠… 다행히 별 탈 없이 지나가긴 했지만요.[오늘의 날씨는 어떨까나?]110년 만의 더위, 기록적인 폭염으로 올여름은 더욱 힘드셨겠어요.(승현) 엄청요. 과일, 채소 할 것 없지만 그중에서도 올해 엽채류, 특히 시금치가 정말 난리도 아니었어요. 하지만 판매를 위해서 지난 주 저희와 거래하는 대표님과 매일 통화하며 시금치 어떻게든 받을 수 없는지 여쭤보고, 물량을 늘리기 위해 다른 산지의 상품도 끌어왔어요. 시금치 구출 작전이었다고 해야 할까요. 덕분에 폭염으로 구하기 힘든 시금치를 컬리에선 계속 만나볼 수 있었지요.컬리의 친환경 시금치 보러가기 >(준규) 참 날씨는 인력으로 어떻게 할 수가 없으니 더욱 난감해요. 작년과 마찬가지로 올해 수박을 선보이고자 했는데, 이 수박이 당도도 중요하지만 신선도도 중요하거든요. 한데 이번 여름엔 덥기도 더웠을뿐더러 비가 많이 오지 않아 수박이 달려 있는 상태에서 맛이 가버린 거예요. 그래서 아쉽게도 일찍 판매를 종료할 수밖에 없었죠.그렇지만 컬리의 신선식품은 믿고 먹는다며 칭찬이 자자해요.상품의 품질과 신선도를 유지할 수 있는 비결은 무엇인가요?(준규) 대부분의 상품이 당일 산지에서 수확하여 물류센터로 이동하고, 다음날 아침 고객님 댁에 배송되기에 다른 곳보다 더 신선하게 배송될 수 있는 것 같아요. 당일 수확 익일 배송인 셈이죠. 사실 저희 입장에선 이 프로세스가 부담스러운 게 사실입니다. 상품이 센터에 들어오기 전에 판매가 이루어지다 보니 공급사와 물류센터 중간에서 끊임없이 소통하며 긴밀한 업무가 이뤄져야 하니까요. 문제가 발생할 수 있는 여지도 그만큼 크고요. 물론 저희도 공산품처럼 상품을 센터에 모두 입고시킨 뒤 판매를 시작해도 됩니다만, 최대한 신선한 상태로 배송 드려야 하기 때문에 매일 발주를 넣고 당일 수확 익일 배송을 유지하고 있답니다.신선도가 중요한 상품은당일 수확 익일 배송하는 것이신선함의 비결!점심시간인데 두 분 어디 가신 거죠?(승현) 컬리와 처음을 같이 한 공급사이며, 컬리의 베스트셀러 상품인 시금치와 케일, 신선초 등을 생산하는 대표님을 만나러 이천으로 왔습니다. 여기서 올겨울 판매할 딸기가 잘 자라고 있는지 확인하고, 현재 판매되는, 그리고 앞으로 판매할 상품들의 상태가 어떤 지도 확인해보려고 해요. 매주 자체적으로 진행하는 품평회에 통과했다 하더라도 신선식품은 외부 환경에 따라 맛이 확확 바뀌니까 주기적으로 방문하여 살펴볼 필요가 있죠.  앗, 벌레다![꿈틀꿈틀, 야생의 애벌레가 나타났다](준규) 컬리에서 판매하는 대부분의 신선식품은 친환경, 유기농을 지향하고 있어 농약을 치지 않는 경우가 많아요. 그래서 가끔 배송 온 상품에서 벌레가 출몰할 수도 있는데요. 깜짝 놀라실 수 있겠지만 농약을 치지 않은 건강한 상품이라는 증거이니 걱정 마시고 세척 후 맛있게 즐겨주세요.[해치지 않아요...!](승현) 그리고 보시면 아시겠지만 올해 폭염으로 인해 케일의 상태가 많이 좋지 않아요. 온전한 이파리를 찾기가 힘들 정도죠. 사실 유기농 상품이라 벌레 먹은 구멍은 어쩔 수가 없는 부분이긴 한데, 항상 믿고 구입해주시는 고객님들을 위해 컬리는 최대한 싱싱한 상품만을 골라 보내드리려고 합니다.(대표님 깜짝 출연) 다른 오프라인 마트에선 이 정도면 되겠지 하고 판매하는 퀄리티도 컬리에서는 통하지 않아요.(승현) 네 맞아요, 아무래도 온라인으로 장을 보시는 거니까 직접 보고 구입하는 것보다 불신이 있을 거라 생각해요. 그래서 더욱더 신선한 상품만을 전해드리고자 대표님과 저희 역시 최선을 다하고 있답니다. [케일에도, 컬리의 마음에도 구멍이 송송 T^T]컬리는 무조건 유기농, 무농약, 친환경만 고집하는 건가요?MD님만의 상품을 고르는 기준이 있다면 무엇인가요?(준규) 무조건 유기농이나 친환경만을 고집하는 것은 아니에요. 신선식품을 고를 때 가장 우선적으로 생각하는 가치는 다 다르다고 생각해요. 산지를 가장 중요하게 생각하시는 분이 있을 것이고, 다른 건 다 떠나서 맛이 제일이라 생각하시는 분들도 계실 거예요. 또 회사가 커지고 다양한 고객님들이 유입이 되다 보니 품질은 기본이고 합리적인 가격에 모두를 만족시킬 수 있는 상품으로 상품의 스펙트럼을 점차 넓히고 있습니다. 물론 가격보다는 품질이 우선이긴 하죠. 그래서 항상 내 가족이 먹는다는 생각으로 상품을 고르고 있어요.[컬리의 소문난 딸바보 님이 아빠의 마음으로 고르는 상품들]신선한 상품도 컬리만의 장점이지만 또 다른 차별점은 그동안 한 번도 보지 못한 이색 채소와 과일인 것 같아요. 비결은 무엇인가요?(준규) 그만큼 빨빨거리면서 많이 다녀요, 승현님이. (승현 : 준규님도요!) 회사 자체가 페이퍼 업무가 많지 않아서 MD가 상품에 대해 연구할 수 있는 시간이 많고, 업체를 만나도 단가가 낮은 상품보다는 새로운 거, 새로운 품종을 달라고 요청해요. 공급사 입장에서도 컬리를 통해 신품종의 시장 반응을 알 수 있으니 나쁘지 않은 거래인 셈이죠.(승현) 식재료에 대한 관심도 있어서 그런 것 같아요. 다른 판매처는 많이 팔면 된다는 생각을 갖고 있는데 저희는 전문적이지 않더라도 식재료에 대한 관심이 있다 보니까 스스로 새로운 걸 많이 찾는 편입니다.[대표님, 괜찮은 상품 뭐 없나요?]그렇다면 앞으로 판매하고 싶은 상품이 있을까요?(준규) 썩지 않는 과일? 벌레 없는 유기농 채소? (웃음) 저희 일이 품질을 계속 유지하면서 판매 역시 지속적으로 할 수 있게 하는 거잖아요. 그리고 우리가 파는 건 보통 장을 보실 때 꼭 필요한 상품들이라… 기본을 지키면서 날씨가 갑자기 변하더라도 품질이 유지되는 그런 상품이 있었으면 좋겠어요.썩지 않는 과일이라… 신선한 신선식품을 썩지 않게 보관하면 되지 않을까요?이참에 신선식품의 올바른 보관 TIP을 알려주세요.(승현) 최대한 빨리 드세요. (단호) 과일의 경우, 많이들 냉장실에 서늘하게 보관하면 신선함이 유지될 거라 생각하시는데요. 냉장 보관만이 답이 아니에요. 멜론, 아보카도는 상온 보관이고, 저온 장애 때문에 품질이 더 나빠질 수 있기 때문에 각 상품에 맞는 방법에 따라 보관하는 것이 좋습니다. 상품 별 보관 방법은 컬리의 상세 페이지에도 자세히 나와있으니 참고해주세요!마지막으로 고객님들께 하고 싶은 이야기(승현) 계절에 따라 신선식품의 품질과 맛이 달라질 수밖에 없다는 걸 이해해주셨으면 해요. 어제도 어떤 후기를 봤는데, 그린빈스의 맛이 초심을 잃었다고 하시더라고요. 하지만 그린빈스는 봄이나 가을에 가장 맛있고, 지금 이 시기에는 먹을 수 없는 채소거든요. 그럼에도 불구하고 그린빈스를 원하시는 분을 위해 괜찮은 상품을 더욱 꼼꼼히 골라 판매를 하고 있는 거고요. 초심을 잃은 것이 아니라 계절에 따른 이슈라는 걸 알아주셨으면 합니다. 물론 저희도 더욱더 열심히 해야겠죠.(준규) 저도 승현님이 말씀하신 거와 비슷해요. 사과 같은 경우도 맛이 처음과 달라졌다는 후기가 많은데, 사과는 수확해서 1년 동안 판매하는 거라 맛이 당연히 달라질 수밖에 없어요. 저희가 변한 게 아니라 과일과 채소들이 변하는 것이란 점을 이해해주셨으면 합니다.파릇파릇한 채소와 입안에서 팡 터지는 과즙의 감동을 전하기 위해 거친 비바람에도, 세찬 눈보라에도, 전국 모든 산지를 돌아다니는 컬리의 든든한 프레시맨. 썩지 않는 과일이 나오기 전까지 그들의 노력은 앞으로도 계속되지 않을까. 식탁 위 평화를 지켜주는 그들이야말로 우리 시대의 진정한 히어로일 것이다#마켓컬리 #팀원소개 #팀원인터뷰 #팀원자랑 #기업문화 #조직문화
조회수 1599

이제는 必환경시대에 맞는 친환경 패션이 대세!

안녕하세요! 패션 블로그 웹뜰입니다.혹시 2019년 이슈중에 하나인 必환경시대라는 말을 아시나요?바로 편의성과 간편함으로 사용해온 일회용품, 비닐, 플라스틱으로 만들어진 제품들이 환경 오염을 유발하고 있다는 사실이 사회적으로 큰 이슈가 되면서 환경을 반드시 지켜야한다는 시대라는 뜻입니다. 그에 맞게 여러 산업군에서도 지속가능성있는 제품에 대한 연구가 활발해지고 있는 데요.패션산업 군에서도 버려지는 헌 옷과 쓰레기의 환경 오염을 예방하고자지속가능성이있는 친환경패션에 대해 주목하기 지삭했습니다.그러다면 必환경시대에 필수가 되어진 친환경패션이란 무엇일까요?에코라는 의미는 사전적으로 생태학을 의미하며 즉 생물과 환경의 관계를 연구한다는 뜻으로에코패션은 패션에서는 환경과 생명체의 공존을 위한 패션입니다.일반적으로는 친환경적인 원단인 린넨이나 헴프등의 마나 유기농 원단을 이용해 만들어진 친환경적인 의류들을 말하고 있지만최근에는 재활용을 이용한 업사이클링 패션, 에코퍼(페이크퍼), 혹은 환경에 대한 메시지를 담는 등 여러 형태의 에코패션이 주목을 받고 있습니다.특히 2019년에는 EARTHY LOOK부터 NEUTRAL 컬러까지 다양한 지구 환경에 대한컬렉션들이 나오고 있으며 친환경패션이 트렌드로 자리잡고 있는 데요.키즈 브랜드부터 액세서리 까지 다양한 브랜드에서도 친환경 패션을 선보이고 있습니다.지속가능한 패션을 꿈꾸는 스텔라맥카트니친환경 패션기업의 대표로 손꼽히는 스텔라맥카트니는 혁신적인 친환경 소재와패션을 끊임없이 보여주는 패션 브랜드 중에 하나입니다.2013년에 앙고라 토끼의 학대 문제 캠페인에 참여한 이후 스텔라맥카트니는 앙고라, 가죽, 모피 그리고 깃털까지동물과 관련된 소재를 사용하지 않고 있으며 의류 제작에 사용되어지는 접착제 역시 동물성 원료 사용을 지양하고 있습니다.또한 다양한 친환경적인 소재 개발을 통해 재활용 플라스틱을 이용한 원단과 *섀기 디어 패브릭과 나무를 이용한 플랫폼 웨지힐등동물성 원료가 없이도 럭셔리브랜드가 완성되어 질 수있다는 걸 증명했습니다.*섀기 디어 패브릭: 가죽을 대신해 만들어진 스웨이드 느낌의 원단으로 스텔라맥카트니가 개발한 친환경 원단이다.재사용 소재의 새로운 발견, 릴라 고릴라아이들을 위한 가방이나 액세서리를 만드는 네덜란드의 브랜드입니다.그 중 릴라고릴라의 가방들의 경우에는 버려진 플라스틱과 패브릭을 재사용해 만들어져환경과 패션을 동시에 잡은 것으로 알려져 이미 해외에서도 친환경 키즈 패션을선도하고 있는 것으로 알려져있습니다.환경을 위한 끊임없는 사랑, 아시아나런던영국의 핸드메이드 액세서리 브랜드 중 하나인 한국에는 아직 잘 알려져 있지는 않지만 친환경 소재를 이용하는 브랜드입니다.특히 가방의 경우에는 식물섬유인 황마를 이용하였고 패스트 패션으로 인해 일자리를 잃게 될위기에 처한 수공예업자들에게 일자리를 제공하는 등 다양한 공존을 추구하는 브랜드입니다.운동과 환경을 동시에 잡은 아디다스세계적인 스포츠브랜드 중에 하나인 아디다스 또한 다양한 친환경 소재를 개발하고 있습니다.그 중 버려진 해양쓰레기들을 재활용 실을 이용하여 전 세계에 환경에 대한 중요성을 알리고 있습니다.특히 다양한 환경관련 캠페인을 진행하는 것은 물론 이번 SS19제품의 41%가 재활용 폴리에스테르를사용하고 있으며 아디다스는 2024년까지 모든 순수 폴리에스테르를 사용하지 않는 것을목표로 하여 친환경 패션을 선두하고 있는 브랜드입니다.이렇게 댜양한 브랜드들에서 환경을 위해 다양한 방법으로 환경 보존을 실천하고 있는데요.그렇다면 과연 옷을 입는 우리가 할 수 있는 일은 무엇이 있는지 지금 알려드리겠습니다. 2019년 생존을 위해 반드시 환경을 생각하는 必환경시대에 지속가능성이 있는 패션을선호하는 이들이 많아지면서 다양한 브랜드에서도 환경을 위한 끊임없는 시도가 이루어지고 있습니다.이제 저희도 환경을 위한 착한 소비와 가치 소비 함께하는건 어떤가요?여러분의 작은 행동이 큰 행복이 되길 빌며 더 좋은 이야기로 찾아 오겠습니다!#필환경시대 #친환경 #친환경패션 #에코패션 #패션 #지속가능성 #스텔라맥카트니 #릴라고릴라 #아디다스 #아디다스y3 #아시아나런던 #업사이클링 #리사이클링 #린넨
조회수 963

제니퍼소프트 인턴 프로그램을 마치며_인턴 인터뷰

제니퍼소프트, 인턴 프로그램을 시행하기 위한 고민은 몇 년 전으로 거슬러 올라갑니다. 기업의 입장에서 인턴 프로그램은 좋은 기회이기도 합니다. 좋은 인력을 마음껏 뽑고 단기간에 사용하고 쉽게 정리할 수 있는 좋은 법적 제도이기 때문입니다. 하지만, 제니퍼소프트 안에서의 인연이란 그저 잠깐 스쳐 가듯이 지나칠 수 있는 것이 아닙니다. 누군가의 삶과 일상을 받아들이고 함께 일을 하고 무언가를 시작하는 그 모든 과정에 대한 두려움도 있었습니다. 헤어짐을 담보로 하는 과정이기 때문입니다. 우리는 실험해 보고 싶었습니다. 이 과정이 우리를 얼마나 달라지게 할 것인지, 어떤 긍정적인 효과가 있을지 궁금해졌습니다. 우려와 두려움 속에 인턴 프로그램이 시작되었습니다. 지난 4월, 제니퍼소프트에서는 인턴 채용이 진행되었습니다.제니퍼소프트의 R&D 인턴 모집내부 HR팀이 없는 제니퍼소프트의 채용은 매우 큰 프로젝트가 되곤 합니다. 관련 담당자들( 부대표, 경영지원, R&D팀, 마케팅)이 모여 기획과 실행 사항을 철저하게 시뮬레이션 해 봐야 하기 때문입니다. 이번 인턴 채용의 목표는 인턴 지원자들에게 불편함을 주지 않으면서 최소한의 준비사항과 제출 서류를 내게 하는 것. 규칙이나 규정으로 그들을 정의하지 않는 것. 프로그래머 인턴 채용인 만큼 프로그래밍에 대한 탁월한 소양을 볼 것그들에게도 제니퍼소프트가 자신의 경력과 역량을 높일 수 있을 만큼 다닐만한 회사인지 우리를 평가하고 선택하게 할 것인턴 선발 과정은문제를 통한 1차 기술면접 2차 (프로그래밍 테스트+ 기술면접) 집중면접 3차 으로 진행되었습니다. 채용 공고가 나오고 지원자들이 1차 지원을 통해 프로그래밍 문제 테스트를 거쳤습니다. 두 달간의  2,3차의 면접으로 4명의 인턴이 결정되었습니다. 제니퍼소프트의 첫 인턴. 월터, 제이, 웬디 그리고 알렉스. 7월 1일부터 근무를 시작한 지 한 달이 조금 넘은 지난 8월 초 그들을 만났습니다. 우리는 그들에게 좋은 경험을 주겠다고 약속했습니다. 그리고 그 약속이 정말 잘 지켜졌는지 궁금해졌습니다. 그들이 일을 통해 이루고 싶은 일의 가치와 의미, 일과 삶의 균형 그리고 지속해서 실현하고 싶은 꿈은 어떤 것이며, 남은 인턴 기간에 그들이 경험하고 이루고 싶은 것은 무엇이었는지. 그리고 그들이 진짜 경험한 제니퍼소프트는 알려진 것처럼 정말 그런 회사였는지 그들의 목소리를 있는 그대로 전달하고자 합니다.  1. 나에 관해 설명해 주세요. (간단한 자기소개)월터: 대학교 4학년이고 25살입니다. 게임을 좋아하고. 컴퓨터를 사랑하기에 집에서 주로 컴퓨터와 많은 시간을 보냅니다. 그저 평범한 학생입니다. (웃음)알렉스: 대학교 4학년생입니다. (얼굴이 핼쑥해서 물어보니 다이어트 중이라는) 요즘 다이어트 중인데 운동을 좋아합니다. 영어 이름은 인턴 채용에 합격하고 영어 이름을 지어 오라고 해서 검색해 보니, 알렉스란 이름이 너무 맘에 들어서 쓰게 되었습니다. 영어 이름 풀이를 검색해보니 수호자란 의미도 내포하고 있고. 기술을 통해 사람들을 보호하고 싶습니다. 기술이 그런 역할을 할 수 있다면 좋겠다고 늘 생각했기에 좋은 이름이라 생각합니다. 웬디: 24살입니다. 대학에선 컴퓨터 전공이고 빵을 좋아하고 군것질도 좋아하는 평범한 학생입니다. 어릴 때부터 학원을 한 번도 다닌 적이 없습니다. 자율적인 환경에서 공부할 수 있도록 해 주셨는데. 생각해보면 집안 분위기가 그랬습니다. 강요하고 억지로 시키는 것이 아니라 공부될 때만 하고 나머지 시간에는 충분히 쉴 수 있도록 하는 것. 원래 하라고 하면 하기 싫어하는 성격이기에 내 스스로가 하는 환경에 익숙해야 무언가를 할 수 있습니다. 3학년에 휴학을 했는데 이유는 혼자 마음껏 공부해 보고 싶었기 때문입니다. 대학 생활 내내 학교의 커리큘럼대로 공부해야 하는 것이 힘들었습니다. 내 페이스대로 프로젝트 같은 것도 해 보고 싶었습니다. 모 기업의 멤버십을 한 것도 같은 이유입니다. 제이: 배재용. 제이. 노란 슬리퍼 (환한 웃음) 2. 지금 제니퍼소프트에서 어떤 일을 하고 있나요.(인턴으로 입사하고 나서 어떤 작업을 진행했는지 궁금합니다.)월터: 프로젝트를 하고 있습니다. 제안해 주신 열 가지 주제 중에 하고 싶은 것 하나를 골랐습니다. 자바 코드 분석기와 관련된 부분인데, 하다 보니 이게 너무 재미있습니다. 생소했던 분야라 어려울 줄 알았는데 하나씩 공부하면서 적용하는 것이 신기하기도 합니다. 지금 웹도 하고 있는데, 인턴들과 서로 질문하고 배우고 이야기 나누면서 하니 많은 도움이 됩니다. 지금 다니는 학교는 이론 위주의 수업만 진행해서 실습하면서 많이 배울 수밖에 없었기에 더 그런 것 같습니다. 알렉스: 프로젝트를 하고 있습니다. 주제가 '시스템 모니터링'인데 50~60% 정도 진행했습니다. 이번 주를 기점으로 70% 정도 진행하게 될 것 같은데, 성취하는 느낌이 좋습니다. 무언가를 만들 때 즐겁고, 막혔던 것을 해결하는 것도 즐겁습니다.. 나를 달리게 하는 원동력을 묻는다면 대상에게 갖는 관심이라 이야기 하고 싶습니다. 관심이 나를 달리게 합니다. 웬디: 아파치 서버 모니터링 프로젝트를 하고 있습니다. 한 60% 진행되었고. 정말 재밌습니다. 처음 하는 것도 많아서 어렵긴 한데 다른 개발자들이 많이 도와주셔서 잘 진행하고 있습니다.제이: '데이터 비주얼라이제이션' 프로젝트를 진행 중입니다. 외부 데이터를 대시보드 형태도 보여주는 작업인데, 지금 약 60% 정도 했습니다. 모니터링을 해 본 적이 없는데, 알면 알수록 어려우면서 재미있습니다. 차트에 점을 찍는다 생각했는데, 알면 알수록 어려운 분야이고 데이터를 쉽고 간결하게 보여주기 위해서 가공하는 작업에 대해 많은 고민을 하게 되었습니다. 3. 밖에서 생각했던 제니퍼소프트와 직접 경험해 본 제니퍼소프트는 어떤 회사인지(짧은 시간이지만 보람차거나 좋았던 시간, 기억에 남는 에피소드들이 있나요.) 알려주시겠어요. 월터:강용석 씨가 MC 했던 방송 프로그램을 통해 알게 되었습니다. 1위 기업이 한국 기업이라는 것에 놀랐고, 파주에 있다는 것도 놀랐습니다. 수영장도 있고 신기한 회사구나 생각했는데, 직접 들어와 보니까. 생각했던 것보다 더 놀랍고 좋았습니다. 인턴 프로그램에 고정 관념이 있었는데, 예를 들어 인턴은 잡일 위주의 일을 하게 되는 것이 아닌가 해서요. 그런데 누구에게도 평등한 문화였습니다. 회사같은 분위기보다는 동아리 느낌(!)이 들고 서로 너무 친근하고 편했습니다. 냉정하고 수직적이고 권위적인 문화가 아니면서 서로 함께 협업해 주는 분위기 때문인가. 이런 분위기라면 무언가를 잘 만들 수 있지 않을까. 정말 잘 해보고 싶다는 생각을 했습니다.  예전에는 밤새 코딩하는 것이 익숙했습니다. 그런데 여기서는 야근하지 말라고 하고 집에 가서도 일하지 말라고 하고. 그렇게 해봤더니, 신기하게도 일이 더 잘 되고, 오히려 이제는 낮에 집중해서 일하는 것이 훨씬 효율적인 것 같습니다. 몸도 건강하고 마음도 건강해지는 느낌이 듭니다.알렉스: 제니퍼소프트는 인턴 공고를 보고 알게 되었습니다. 검색해보니, 꿈의 직장, 신의 직장, 삶과 일의 균형을 이야기하는 회사더라고요. 그래도 경험상 이런 문화를 추구하는 사람들과 리더와 실행자들 사이에 어느 정도 격차가 있다고 생각했습니다. 비전이나 문화를 거창하게 선포하고 말하고 추구하지만 아무래도 한국 회사이니 수직적이거나 권위적일 수도 있다고 생각했습니다. 그리고 마케팅일 수도 있으니까요. 그런데 인턴 기간을 시작하고 함께 일을 하면서 한 일주일 정도 지났나. 정말 놀랐습니다. 회사가 정말 수평적이고 자율적이었습니다. 한국에서 이런 문화도 가능한 것도 놀라운데, 개발자들이 회의 시간의 자기 의견을 마음대로 적극적으로 말하고 서로 치열하게 토론하는 게 너무 신기했습니다. 그리고 개발팀의 인원이 적고 일하는 사람들이 적은데도 불구하고 다들 확고한 자기 분야가 정해져 있고, 자기가 하는 일에 대한 프라이드와 책임감을 느끼고 있어서 고여 있지 않은 느낌이 좋았습니다. 웬디: 밖에서 봤던 제니퍼는 복지 좋은 회사로 알고 있었습니다. 그런데 한편으로는 아무리 복지가 좋다 해도 분위기는 한국적 회사라 생각했습니다. 그런데 와서 일해보니 다들 자기 목소리들이 있고, 다들 너무 열정적이었습니다. 자율적인 환경도 좋고, 이런 환경 속에서 재미있게 일하고 싶다고 생각했습니다. 누군가 무엇을 지시하고 모니터링 하는 것이 아니라. 스스로 알아서 업무를 찾아 하는 것도 좋았습니다. 이런 환경이 저와 아주 잘 맞습니다. 제이: 밖에서는 안 믿었습니다. 예전에 리더의 조건이라는 책을 읽었는데, 막상 실상으로는 이렇지 않을 것이다. 마케팅이 잘했네 싶었지요. 그런데 이곳에서 일하면서 사람들을 만나고 나서 생각이 달라졌습니다. 자유롭다는 느낌을 들었고 제품에 대한 설명을 듣고 나서 놀랐습니다. 소수의 인원으로 이런 제품을 개발하고 있으며 이런 제품을 커버리지 하는 것이 신기했습니다. 퇴근하면 일하지 말라고 했는데, 오히려 여기서는 일하는 시간이 적는데, 효율성이나 능률은 높은 것 같습니다. 오히려 일도 재밌습니다. 집중해서 일의 능률을 높이는 것. 일하면 할 수록 느끼는 것이 많아졌습니다.  일을 지속해서 많이 하는 스타일이었는데, 시간을 조절하고 효율적으로 일하는 법을 배울 수 있었습니다. 문화적으로는 영어 이름으로 불리는 것에 존중받고 있는 느낌을 받았습니다. 소속감도 느꼈고. 다른 곳에서 인턴을 했었을 때는 낮은 역할을 맡고 있구나! 그런 느낌이 강했는데, 리더의 조건에 나오는 내용이 진짜구나 싶었습니다. 4. 앞으로 남은 3주의 기간 동안 하고 싶고, 얻고 싶고, 경험하고 싶은 것은 있다면 설명해 주세요. 월터: 무엇보다 나 자신과의 약속을 지키고 싶습니다. 맡은 프로젝트가 지금 60% 정도 진행되었는데, 이 프로젝트를 완성하고 싶습니다. 그리고 개인적으로는 회식이 없는 문화라 사실 조금 아쉽기도 합니다. 전체 직원들과 정말 회식을 하고 싶고 많은 이야기를 나누고 싶고, 함께 놀러 가고 싶기도 합니다. 알렉스: 우선 프로젝트의 상품성을 완성도 있게 끌어올리고 싶습니다. 내가 만든 프로젝트가 실 제품에 적용된다면 정말 기쁠 것 같습니다. 제니퍼소프트에서 얻고 경험한 기업 문화적인 부분은 나중에 제가 다른 회사의 높은 자리에 올라가게 되면 적용해 보고 싶고. 두 달이란 기간이 너무 짧아서 좋은 분들과 많은 시간을 보내지 못하는 것이 아쉽습니다. 웬디: 업무적으로는 프로젝트를 끝낼 수 있으면 좋겠습니다. 제대로 된 기능을 하나 완성하고 싶은데, 2달이라는 시간이 빨리 가서 아쉽고... 다른 분들이랑 많이 이야기하고 싶습니다. 다른 업무를 하시는 분들도 어떤 일을 하는지 궁금한데, 공식적인 자리에서는 어색하기도 해서 말도 잘 못 해 봤습니다. 얼마 전에 카페에서 마케팅 아이디어같이 내면서 함께 진행했을 때 너무 즐거웠습니다. 그런 거 함께 해 보고 싶습니다. 제이: 우선 프로젝트를 완성이 목표입니다. 내가 개발한 기능이 상용화되어 제품에 한 기능으로 넣게 되면 정말 좋을 것 같습니다. 꿈이지만. (웃음) 모니터링 영역에 흥미가 생겨서 계속 공부하면서 개발하게 되면 즐거울 것 같습니다. 계속 이 분야의 연구를 해 보고 싶고 끝나기 전에 많은 추억을 남기고 싶습니다. 기회가 되면 같이 모임도 하고 싶습니다. 물론 공식적인 회식은 없다는 걸 알지만요. (웃음)5. 제니퍼소프트의 인턴과정에서 부족한 점이 있었나요?월터: 아니 전 좋았습니다. 다른 회사와는 다르게 코딩으로 봐서 좋았고, 물론 문제가 어렵긴 했지만요. 알렉스: 2차 인터뷰하고 제니퍼소프트 티셔츠 선물로 주었는데, 티셔츠가 너무 작았습니다.(웃음) 인턴과정은 개인 프로젝트를 완성하는 작업이라 좋았고 저에게 부족함 없는 과정이었습니다. 웬디: 아니, 오히려 편했습니다. 인턴 채용 과정도 특이했고. 처음부터 서류를 내지 않는 것과 코딩테스트로 해서 재미있었습니다. 원래 글을 쓰는 것을 좋아하지 않습니다. 무언가 써야 하고 작성하는 것이 불편하기도 하고요. 필요 서류도 자기소개서로 2장 이내에 쓰라고 하는 것과 기술로만 진행하는 기술면접도 편했습니다. 제이: 채용 과정의 고민이 다 들어다 보였습니다. 채용 과정 내내 배려를 받아서 오히려 죄송했습니다. 한 사람 한 사람 자유롭게 해줘서 부족하고 불편한 점이 없었습니다. 면접시간이 한 시간 되었는데, 개인적으로 집중 인터뷰가 맘에 들었습니다. 존중받는 것 같아 좋았습니다. 6. 제니퍼소프트의 인턴 프로그램을 통해 어떤 것을 얻고 경험하였나요? (인턴 프로그램이 끝난 것은 아니지만)월터: 우선 좋은 동료와 경험을 얻었다고 생각합니다. 앞으로도 계속 만날 수 있는 좋은 사람들을 만나 너무 좋습니다. 업무적으로는 회사에서 일을 즐겁게 하면서도 시간을 효율적으로 사용하는 방법을 알게 되니 일과 삶의 균형을 지키는 것이 무엇인지 어렴풋이 알게 되었습니다. 알렉스: 개발자로서의 삶의 지표를 얻게 해 주었고 개발자들의 삶과 일의 균형을 통해 목표를 정할 수 있게 해 주었습니다. 스스로 성취하고 배우고 경험하는 것의 즐거움을 알게 되었습니다. 지금은 내가 맡은 프로젝트를 완성도 있게 끌어가고 싶고 후회 없이 마무리 하고 싶습니다. 웬디: 이런 회사 분위기에서 일해 볼 수 있었던 것과 함께 협력하는 문화도 즐거웠습니다. 내가 모르는 부분에 대해 질문하면 그 어떤 분도 불평하지 않고 내 코드를 함께 봐주고 고민해 주고 이런 경험을 어디서 할 수 있을까 싶습니다.  인턴 기간이 끝나고 돌아가서도 내 인생에 큰 자양분이 될 것이라 믿습니다.제이: 일의 능률에 대한 부분, 삶과 일에 균형이라던가, 일의 즐거움이라던가, 새로운 분야에 대한 호기심이나 성취나 이런 것에 대해 고민하게 되었습니다. 뭔가 내 속에서 변화가 시작되고 있다는 느낌이 듭니다.그리고 그들의 인턴 기간이 어제로 끝났습니다.제니퍼소프트의 첫 인턴들.알렉스, 제이, 월터 그리고 웬디.7월 1일 인턴을 시작하여 인턴을 마무리하는 오늘 8월 31일까지 고생했고 즐거웠습니다. 좋은 경험을 주겠다는 약속을 우리가 지켰는지 모르겠습니다. 우리는 참 좋았습니다. 그대들의 반짝이는 눈빛과 좋은 에너지가 우리를 훨씬 더 즐겁고 의미 있게 만들었으니까요. 정말 무언가를 잘해볼 수 있을 것 같다고 말하던 그대들 때문에 이번 여름은 훨씬 더 뜨거웠던 것 같습니다. 우리를 울컥하게 한 정성 어린 선물도 고맙습니다. 그대들이여, 세상에 나가 더 멋진 분들로 성장하길 진심으로 바랍니다.#인턴 #축복 #마지막 #이별 #R&D #인턴십 
조회수 1580

와디즈의 월요일 아침을 여는어느 완벽한 저녁형 인간

설레는 마음으로 와디즈에 입사한 지 어언 반년이 다 되어 갑니다. 첫 출근했던 1월 29일 월요일 아침, 코끝이 시리게 추워 정장 위에 롱패딩을 입고 왔던 기억이 나요. 군기가 바짝 들어 1층 로비에 도착하자마자 패딩을 벗어들고 엘리베이터를 탔지요.회의실에서 대기하다 와디즈 커뮤니티라고 불리는 사무실 옆 공간으로 이동했어요. 9시가 되자 전 직원이 커뮤니티로 모여들었고, 갑자기 게임이 시작되었습니다. `엥? 월요일 아침마다 게임을 하는 거야? 이것이 말로만 듣던 스타트업 문화인가?` 어리둥절했습니다.날씨가 따뜻해지니 신입사원의 빳빳한 긴장도 조금씩 풀려갑니다. 매주 월요일 떠지지 않는 눈으로 커뮤니티를 향하는 것도 어느새 익숙해졌어요. 동료들과 커피를 내려 마시며 주말에 있었던 이야기를 나누는 동안 커뮤니티 한쪽 끝에서 항상 분주하게 한 주의 시작을 준비하시는 분이 있습니다.안녕하세요 신우프로님, 자기소개 부탁드려요.이신우 프로 (와디즈 HR랩)안녕하세요. 와디즈 HR랩에서 내부 직원 교육과 조직문화를 맡고 있는 이신우입니다. 2017년 6월부터 와디즈와 함께 하고 있어요.아침은 늘 피곤하지만 그중에서도 제일 피곤하다는 월요일 아침 남들보다 일찍 출근하신다고요. 공교롭게도 오늘이 월요일이네요. 오늘은 몇 시에 출근하셨나요? 오늘은 일곱 시 반에 왔어요.  헉! 원래 와디즈 출근 시간이 몇 시에요? 원래 출근 시간은 아홉 시에요. 피곤하지 않으세요? 피곤해요. 제가 원래 늦게 자는 편이라 아침이면 늘 피곤한데, 월요일 아침인 데다 평소보다 일찍출근하니 유달리 힘드네요. (한숨)  왜 이렇게 일찍 오신 거에요? 월요일 아침에 진행되는 위클리 게임 준비를 했어요. 오늘은 새로 들어오시는 분이 계셔서 신규 입사자 교육도 미리 해두었고요. 위클리 게임이 뭐에요? 와디즈에서는 월요일 아침마다 전 직원이 모두 모여 조별로 위클리 게임을 해요. 와디즈와 크라우드 펀딩, 와디즈인에 대한 문제를 맞히죠. 정답을 가장 많이 맞힌 1등 조는 그 날 점심 비가 지원됩니다. 위클리 게임은 어떻게 시작된건가요? 제가 입사하기 전부터 와디즈에는 월요일 오전에 다 같이 모여 아이스브레이킹 게임을 하는 시간이 있었어요. 그때는 알까기, 젠가, 멀리뛰기 같은 게임을 해서 꼴찌가 사무실 청소를 했어요. 재미있긴 했는데 회사가 성장하고 새로운 분들이 많아지면서 몇몇 사람만 참가하고 나머지 사람들은 구경만 하게 되는 거에요. 사무실이 이사하면서 사무실 청소도 직접 하지 않게 되었고요. 대표님이 “모두가 참여하며 서로 알아가는 시간을 가질 수는 없을까?” 아이디어를 주셔서 와디즈에 대한 문제를 맞히는 위클리 게임이 시작된 거죠. 회사에 관한 문제로 진행되면 매주 다른 문제를 낼 수 있나요? 저도 처음엔 몇 주 하면 아이디어가 다 떨어질 거라고 생각했는데 여러 사람이 모이니까 신박한게임 아이디어가 많이 나오더라고요. 크라우드펀딩 관련 퀴즈 외에도 와디즈 직원 얼굴 합성해서 맞추기, 책상 주인 찾기, 사무실 올라오는 계단 수 맞추기 등 다양한 게임이 진행되어요. 그럼 매주 직접 게임을 준비하시는 건가요?  그건 아니고요. 1등 조가 점심을 먹고 다음 주에 있을 위클리 게임 문제를 내야 합니다. 저는 월요일 아침이면 그날 게임과 식사를 함께할 조(와디즈에서는 테이블메이트 줄여서 ‘테메’라고 부릅니다.)를 짜서 공지하고, 그 전 주 1등 조와 게임 진행을 준비해요. 테메는 격주로 바뀌는데 이번 주는 바뀌지 않는 주였어요. 그래서 동료들이 지난주에 함께했던 조를 잊지 않도록 다시 공지하고, 게임 담당자분과 슬라이드 체크도 하고, 음향도 체크하고 그렇게 사람들을 기다렸죠.    매주 신경 쓰시려면 조금 귀찮으시겠어요. 그러게요. 별거 아닌 것 같은데 테이블메이트도 격주긴 하지만 최대한 겹치지 않게 매번 다시 짜야 하고, 주 중에는 게임 담당 조에게 계속 압박해야 하죠. 다들 바쁘신 걸 알지만 이게 제 일이다 보니 자꾸 재촉하게 되는데, 그럴 때 마음이 좀 불편해요. 당일에는 게임 담당자가 잊지 않고 오시는지 확인하고, 조별로 게임할 자리도 안내하고, 마이크 잡고… 생각보다 손이 많이 가요. 제가 신규 입사자 교육도 담당하고 있는데 보통 신규 입사자가 월요일에 오시거든요. 교육과 게임이 겹치는 오늘 같은 날은 조금 더 정신이 없네요. 이렇게 위클리 게임 맡으신 지는 얼마나 되신 거에요? 글쎄요. (손가락으로 세어보더니) 이제 거의 반년이 다 되어가네요. 처음에는 잘 준비해도 본전이었고, 게임이 재미없으면 지루하다, 일이 바빠서 게임 준비할 겨를이 없다 등 부정적인 피드백도 있었어요. 그래도 어느 정도 자리를 잡았는지 요즘은 재미있는 날에는 재미있는 대로 지루한 날은 또 그런대로 다들 이해하는 것 같아요. 게임 준비도 알아서 잘 해주시고요. 제일 기억에 남는 게임이 있나요? 얼마 전에 했던 신규입사자 감정그래프 게임이요. 최근에 입사하신 분들을 대상으로 입사 이후의 감정그래프를 받아서 그래프만 보고 누구인지 맞추는 게임을 했어요. 그때 많은 분이 신규 입사자 교육이 되게 좋았다고 그래프에 그려주셔서 되게 뿌듯했어요. 물론, 와디즈에 오신지 얼마 안 되셨으니 기억에 남을 일이 별로 없어서 그런 걸 수도 있지만요.   아니에요. 저도 이제 입사한지 5개월인데 프로님이 되게 친절하게 알려주셔서 와디즈 분위기 좋구나, 오길 잘했다고 생각했어요. 그럼 월요일 말고 다른 날은 어때요? 다른 날도 일찍 오시나요? 그래요? 하하 감사합니다. (잇몸발사) 다른 요일은 굳이 일찍 오지는 않는데, 지난주처럼 면접이 9시부터 잡혀 있거나 행사가 있는 날은 먼저 와서 준비하죠. 입사지원자들이 8시 30분이면 오고 그러니까. 그런 특별한 날 외에는 다른 분들이랑 비슷한 시간에 와요.  그렇구나. 주말 아침은 어떻게 보내세요? 제가 철저하게 저녁형 인간인데 아침형 인간으로 살고 있다 보니까 주말에는 조금이라도 더 자려고 해요. 예전에는 마음먹고 12시, 1시까지 자고 그랬어요. 요즘은 10시면 눈이 떠져요. 몸이 적응이 되어가는 건지.  언제 가장 보람있다고 생각하세요? (기타를 치며) 제가 이제 입사한 지 딱 1년이 되었어요. 그동안 신규입사자분들을 모시고 위클리 게임을 참석할 때마다 되게 좋아하셨어요. 와디즈 되게 젊고 활기차다면서요. 그럴 때 정말 기뻐요. 신규입사자분들이 와디즈의 분위기에 좀 더 빠르게 적응하시는 것 같아서요. 그리고 제가 진행을 하다 보니 항상 맨 앞에서 게임을 지켜보거든요. 동료들이 월요일 아침에 적극적으로 손들고 열정적으로 참여하는 거 보면 괜히 기분이 좋아요. 아빠 마음이 된달까. 신우아빠, 앞으로도 와디즈의 월요일 아침 잘 부탁드려요.  (웃음) 네, 그럴게요.글/사진 김영아와디즈의 막내 투자 콘텐츠디렉터(CD)입니다. 우리의 작은 돈이 필요한 곳에 모여 세상을 바꾸는 꿈을 꾸고 있어요. 더 많은 ‘우리’에게 크라우드 펀딩을 알리기 위해 어렵고 복잡한 투자 이야기를 쉽고 재미있게 풀어내는 일을 합니다. 인터뷰와 촬영에 도움을 주신 안예은, 김지영, 이신우 프로님께 감사드립니다.#와디즈 #팀원인터뷰 #팀원소개 #팀원자랑 #기업문화 #업무환경 #조직문화

기업문화 엿볼 때, 더팀스

로그인

/