스토리 홈

인터뷰

피드

뉴스

조회수 1010

Team Profile: Meet Jinyoung

As a yet minuscule startup, each member holds a significant power over the overall atmosphere of the team. And in our ultimate quest to make big waves in the data world, we need to make sure that the people at the helm are at least kind of cool. We think we’ve done a pretty good job so far in assembling a society of unique but equally driven members.So we bring you this seven-part series, one of each devoted to interviewing each of our members in detail, to give you an in-depth glimpse into the people responsible for bringing you the future of machine learning with Daria. Plus, we peppered the interviews with questions from Dr. Aron’s “The 36 Questions that Lead to Love”*, cherry picked to make work appropriate and concise, but interesting.(*actually falling in love with our members highly discouraged)The CEO and co-founder of XBrain, Jinyoung was motivated to start the company while working at a security firm, with a vision to make machine learning “intuitive and accessible to all”. Apropos of his role as headliner of our mission to introduce machine learning to every corner of the world, Jinyoung has varied interests in literature and music, and hopes to be a patron of the arts someday. Learn more about him here!What is your role at XBrain?JY: I am currently the CEO of XBrain, and head of business development. This includes everything from managing sales to developing and carrying out business plans. I spend most of my time meeting new customers and partners, outside of the office. Other than that, I’m trying to develop a new business model other than the one we’re operating on currently.What does a typical work day at XBrain look like for you?JY: I have frequent appointments outside the office, so my days aren’t as regular. But I usually try to schedule any outside meetings in the morning, because we all try to be present at the office from 1–5 PM, which is our coworking time. After dinner I try to work on more mundane stuff, like paperwork.What are the aspects of your job that you most enjoy?JY: First and foremost is meeting new people. Helping people is something that I really enjoy, and I feel it the most when our customers are actually satisfied with the work that Daria is doing. I just like that I get to talk to many different people during the day.What about the parts that you least enjoy?JY: I least enjoy doing housekeeping duties, like keeping track of receipts, but just because it’s a pain in the neck. Something I find most challenging is always interpersonal tasks, which I enjoy at the same time.Can you tell us about the items on your desk that say something about you?JY: I have these Hulk and Iron Man Lego figures, which I put together myself. I like the process of making toys like that, and I always try to keep myself from being too serious. My desk itself is always representative of my state of mind — sometimes it’s clean, sometimes it’s messy.So what made you want to go into startups, or more specifically, XBrain?JY: It was actually quite intuitive. There was no established plan, or rules that I set for myself. I’d always led a life where I was constantly trying new things, new challenges, which led me to XBrain. And I was fortunate enough to have mentors around me who could offer business advice, and investors who supported the venture financially.Jinyoung puts on his CEO face when workingAs our CEO, do you have a specific vision for XBrain?JY: I think about this a lot — I really want Daria, and any of our future products, to be an integrated part in people’s everyday lives. I want our products to be in the background as useful tools, not just because it’s buzzable technology. Team-wise, I really want to provide a community in which each of our members could live out their dreams.Do you have a go-to-playlist when you’re working?JY: I don’t really listen to music when I work…What can you tell us about the JY ten years from now?JY: I will have a family. I will hopefully be a little wiser, and just as receptive to new ideas and knowledge as I am now, if not more.What, in your opinion as its co-founder, has changed the most about XBrain?JY: We’re definitely more established as a community and team. The fact that we’re conducting interviews like this one, and working on a blog, is proof of that. Of course we’ve grown more sophisticated in terms of business and product development.Share with us a memorable moment at XBrainJY: Probably when we had our team dinner in late June…we’d almost finished branding, and it was just a chance to take a breather for us.If you had to have dinner with one XBrain member, who would it be?JY: EK! Not just because she’s leaving soon, but because I think we’d have a lot to talk about, and she’s pretty different from the rest of the team, characteristically speaking.Would you like to be famous? In what way?JY: I would like to be influential — if fame is a prerequisite for that, then yes. I think that in order to bring about the change I want to see in the world, I need to reach a certain position.What would constitute a “perfect” day for you?JY: Probably a day when any issue has been resolved, with good results?If you were able to live to the age of 90 and retain either the mind or body of a 30-year-old for the last 60 years of your life, which would you want?JY: My answer right now is the mind of a 30-year-old. I would still like to be hungry for something, even when I’m old. But then again, this is me talking as my healthy, under-30 self — who knows how my answer will change in a couple of decades?For what in your life do you feel most grateful?JY: For the fact that I have been lucky enough to be born into an environment where I have been free to try new things, and for the people I’ve met.If you could wake up tomorrow having gained any one quality or ability, what would it be?JY: I would like to be healthier, both in mind and body, and to have a stronger drive to keep cultivating the two.If a crystal ball could tell you the truth about yourself, your life, the future or anything else, what would you want to know?JY: I like the anticipation of finding out…that’s why I never even watch movie trailers.Is there something you’ve dreamed of doing for a long time? Why haven’t you done it?JY: I’ve always wanted to do community service regularly — I volunteer from time to time, but I do want to do it more consistently. I think I’ve subconsciously pushed it back to a time when I’ll have more time for things like that, but if I really stop to think about it, I’ve always had the time, just never made it.What is the greatest accomplishment of your life?JY: Probably founding XBrain, and teaming up with AC(co-founder), because casting aside all other matters of competence, we just have the same ideas and aspirations for the organization, and work well together.If you knew that in one year you would die suddenly, would you change anything about the way you are now living? Why?JY: I’d spare more time to do new things. For example, when I was in Helsinki for the annual Slush conference, I had the chance to ride in a reindeer sleigh and see the northern lights, but couldn’t because of scheduling conflicts. I’d probably go do that first.If you were going to become close friends with someone, please share what would be important for him or her to know.JY: I think the people I’m closest to are aware of their own self-worth, and that’s really the first step to recognizing the same value in others as well.#엑스브레인 #팀원소개 #팀원인터뷰 #기업문화 #조직문화 #팀원자랑
조회수 1089

[인공지능 in IT] 인사가 만사다

기술기업으로 인재의 중요성은 거듭 강조해도 지나치지 않다. 특히, 요즘처럼 어디에나 인공지능이 적용되는 시점에 넓은 인공지능 전문가 풀을 보유하는 것은 강력한 무기다. 2000년대초까지만 해도 대한민국은 전세계가 부러워하는 IT 강국으로 위상을 떨쳤지만, 현재 상황은 많이 달라졌다. IT 인재에 대한 편견뿐만 아니라 경쟁력을 상실한 처우 등 여러 악조건 등으로 경쟁 국가에 비해 조금씩 뒤쳐지고 있는 상황이다.필자가 속해있는 스켈터랩스의 상황을 빌려 기술 기업의 인재에 대해 설명해보자. 스켈터랩스의 미션은 'To innovate machine intelligence for understanding, assisting and improving daily lives anywhere and anytime'으로, 번역하자면 '언제 어디서나 우리의 일상을 이해하고, 도와주고, 더 나아지게 하는 머신 인텔리전스의 혁신을 이룬다'이다.스켈터랩스는 인공지능 기술을 개발하는 회사지만, 중심은 결국 인간이라는 뜻이다. 자고로 기술 기업, 특히 인공지능에 주력하는 기업은 인간을 위한 기술을 개발하기 위해 인재를 모으고, 팀마다 다양한 배경의 재능있는 멤버로 구성한다. 인간의 지능을 근간으로 인간을 위한 기술을 개발하는 데에 주력해야 하기 때문이다. 다시 말해, 우리는 모두의 삶의 질을 향상시킬 수 있는 기술을 개발할 수 있는 인재의 중요성에 대해 깊이 자각해야 한다는 것이다.< 스켈터랩스 >경영인들에게 가장 귀감이 되는 인물을 꼽으라면, 많은 사람이 GE의 잭 웰치 前 회장을 거론한다. GE를 세계적인 기업으로 탈바꿈시킨 잭 웰치의 경영 방식 중심은, 단연코 인재 관리다. 회장으로 취임할 당시 '고쳐라, 매각하라, 아니면 폐쇄하라'라는 본인의 철학을 필두로, 퇴임을 앞두기 직전까지 인재의 중요성을 강요했다. 퇴임할 당시 잭 웰치는 인재를 통한 4가지 주요 전략을 발표했는데, 첫째로 GE의 세계화 전략은 곧 인적 자산의 세계화라는 것이며, 둘째로 지식과 학습을 통한 서비스 전략 창출, 셋째로 6시그마 전략의 도입, 마지막으로 리더를 위한 e비즈니스의 도입이었다. 전설적인 경영인으로서, 위기를 성공으로 탈바꿈하는 기업인으로서 잭 웰치의 업적이 입에 오고 내리는 이유는 그가 인재 육성의 가치를 경영과 직접 연계시켰기 때문이다. 본인 업무의 70%는 인재에 쓴다고 했을 정도다. 훌륭한 기업으로 성장하기 위해서 그만큼 사람이 재산이라는 것을 일찍이 깨달은 것이다.< GE>수 년전부터 4차산업혁명, IoT 그리고 현재의 인공지능까지 IT 기술은 비약적으로 발전함했다. 이에 기업의 모든 전략은 '얼마나 빠르게 신기술을 도입할 수 있는가', '당장 적용할 수 있는 기술은 무엇인가', '신기술을 통해 얼마나 비용을 절감할 수 있을 것인가' 등 기술 자체에 과하게 집중되어 있다. 그러나 새로운 기술을 개발하는 주체는 누구인지, 어떤 것을 위해 집약적인 노동력을 동원하고 있는지 다시 한번 생각해봐야 한다. 스스로 학습하고 문제를 해결해나갈 수 있을 것이라는 인공지능이라는 기술 역시 결국에는 'Artificial Intelligence', 인간이 만들어내는 지능이다. 이토록 인재에 대해 신경을 써야 하는 이유다.잭 웰치의 어록 중에 이런 말이 있다. 'People First, Strategy Second'다. 전략보다 사람을 우선한다는 이 말처럼 뛰어난 기업으로 발돋움하기 위해서는 사람이 중심이어야 하고, 기술 기업에 있어 사람에 대한 가치는 그만큼 중요하다. 어떤 프로젝트를 진행하느냐와 상관없이 인공지능 기술을 개발하는 길목에는 항상 뛰어난 인재가 함께 해야 할 것이고, 이를 통해 인간을 위한 진정한 인공지능을 구현하는 것이 사명일 것이다.이호진, 스켈터랩스 마케팅 매니저조원규 전 구글코리아 R&D총괄 사장을 주축으로 구글, 삼성, 카이스트 AI 랩 출신들로 구성된 인공지능 기술 기업 스켈터랩스에서 마케팅을 담당하고 있다#스켈터랩스 #기업문화 #인사이트 #경험공유 #조직문화 #인공지능기업 #기술기업 #HR #인재의중요성
조회수 23564

면접관으로서의 스타트업 면접 후기

어느덧 학창시절 지원자로서 면접 본 횟수보다, 면접관으로서 면접을 치르게 된 횟수가 3배 4배는 더 많아진 것 같습니다.  어렸을 땐, 면접관이 무얼 물어볼지 구글링하고 선배들에게 조언을 구하거나 서점에서 면접대비 책을 구매해가면서까지, 예상질문과 예답을 만들어가며 심지어 기숙사 벽장에 포스트잇까지 붙여가며 말하는 톤 하나하나 엄청 연습을 했었는데, 직접 사업을 운영해보니 그때 내가 지원자로서 받았던 질문들, 도무지 이런 질문까지도 준비를 해가야 하는거야? 라는 생각이 들 수 밖에 없던 질문들을 회사는 왜 물어볼 수 밖에 없는지 아니, 물어야만 하는지,  이젠 너무 훤히 알아서 실웃음이 나옵니다.  그만큼, 구인자와 구직자의 시각과 입장 차이가 다르다는 거겠죠. 도대체 우리나라 이력서는 왜 얼굴 사진을 박으라고 하고, 도대체 엄마 아빠 나이랑 직업은 왜 쓰라고 하는거야 심지어 몸무게, 키는 왜 써? 어이가 없네? 이런 생각을 저도 했었어요 하하. 팀원들끼리는 우스개 소리로,  지원자의 조부모님은 안녕하신지 한번 물어볼까? 라고 얘기합니다.  이 말을 알아들으신다면, 아마 여러분도 저만큼 또는 저보다 더 많은 사업 경험을 하신 분일지 모르겠습니다. 최근 우리 회사도, 다양한 직군의 신규 인력을 채용 중에 있어,  제 주간 스케줄 다이어리에 매주 4~5타임이 넘게 면접 일정이 채워지고 있습니다.  이번 포스팅에서는, 회사가 어떻게 인재상을 만들어가는지에 대한 내용을 다루려고 합니다.  CJ나 삼성과 같은 대기업 홈페이지를 들어가보면, 뭐 애플이나 구글 등 외국계 careers 사이트도 마찬가지겠고요. 회사소개나 비전, 인재상 등이 나와있는 페이지를 클릭하면 우리 회사는 어떠어떠한 인재를 원한다고 언급되어 있습니다.   열정, 도전정신, 끈기, 긍정 뭐 이런 말 많이 들어봤을 거에요.  어렸을 땐, 에이 으레 하는 말이겠거니 하고 그렇게 중요하게 살펴보지 않았어요.   그런데, 실제 회사를 운영해보니, 이게 웬걸, 그게 제일 중요하더라고요. 왜 중요할까요?▷인재상을 찾아가는 계기초기 스타트업의 경우, 함께 같이 일할 멤버를 찾습니다.  가족이나 친척이 될 수도 있고, 친구가 될 수도 있고 또는 건너 건너 소개를 받거나, 온라인에서 알게 되는 경우 등 다양한 경로로 멤버를 구합니다.  시간이 흐르면 흐를수록, 해치우는 일 보다, 해야할 일이 더 많아지게 되고, 운영진은 추가 인력 채용을 고민하게 됩니다.  그런데, 경험이 부족하다 보니, 정말 딱 맞는 친구가 들어오게 되면 너무 좋겠지만, 세팅을 해나가는 중인 회사는 회사 나름대로 안 따라줘서 답답하고, 직원은 직원 나름대로 고생하는 입장이 있겠고 거기서 빚어지는 자잘한 마찰이나 서투름 등을 이유로 결별하는 경우가 잦습니다.  이직이 빈번한 요즘 시대에, 스타트업은 인력변동이 더 심하죠. 처음엔, 직원과의 결별은 씁쓰름하고 여운이 며칠 갈 때도 있지만, 시간이 흐르면, 오히려 서로 개운할 때도 있습니다. 직원으로선 실력과 본인의 커리어를 한줄씩 차곡차곡 쌓아가고, 회사는 어떤 사람이 우리가 하는 일과 우리의 분위기와 우리의 업무 스타일에 맞는 사람인지 형상을 구체화하기 시작합니다. ▷회사와 직원 간의 호흡우리 회사는, 지원자 중에서 창업 경험이 있거나 창업 멤버로 일한 경험이 있는 친구를 좋아합니다.  설령 짧게 몸담았을지라도,  운영했던 회사가 비록 문을 닫았을지라도 그 경험을 저는 굉장히 가치 있게 여깁니다. 회사를 운영한다는 것이 여간 힘든 게 아니라는 것을 아는 친구,  운영진으로서 직원들에게는 말 못하는 고민들이 무언지 잘 아는 친구는, 회사의 방향성을 잘 이해합니다.  여기서 실력이나 역량은 그 다음입니다.  설령 능력이 뛰어나지 않더라도,  함께 의논하고 각자 맡은 바 일을 매일매일 조금씩 해내는 직원이 회사가 원하는 인재입니다. 빅딜을 계속 연이어 따거나,  거액 투자 유치를 하면 분명 회사는 비약적으로 성장하겠지만,  직원과 회사의 호흡이 따라주지 않으면 회사의 기반이 약할 수 밖에 없습니다. 지휘자가 스파르타식으로 단원들 연습을 단행한다던가 자기 맘대로 지휘하고, 오케스트라 단원들은 지휘자 손깃 한번 쳐다보지 않고 알아서 연주한다면, 심지어, 다른 단원의 악기 소리는 듣지도 않고 연주한다면 과연 그 소리는 아름다울까요?  그 합주를 듣고 관객은 어떤 반응을 할까요?회사라는 조직도 마찬가지입니다.  회사는 직원을 존중하고 나아가는 방향대로 따라올 수 있도록, 기다려줘야 합니다.  직원도 운영진의 입장과 회사가 나아고자 하는 방향을 정확히 알고 있어야 합니다.  쪽팔림 이런 거 개의치 않고 모르면 물어봐야 할 정도로 중요한 부분입니다.  마케팅, 영업, 개발, 디자인, 고객센터 등 업무는 다르지만, 내가 하는 일이 유기적으로 다른 파트와 어떻게 연결되어 있는지 알고 있어야 합니다.  초등학교 운동회를 하면, 청팀 백팀 대항 중 단골 게임인, 발목을 묶는 공동달리기 시합이 있습니다.  한 사람이 넘어지면, 같이 일으켜 세우고 격려해주고, 탓하지 않아야 합니다.   물론, 한 사람이 넘어지면, 어깨동무하던 옆사람도 넘어지는 점도 알아야 합니다.  성숙한 조직 생활이라는 건, 일이란 나 혼자 잘 한다고 되는 일이 아니라는 것을 인지하는 것에서부터 시작한다고 봅니다.  체계적인 조직 생활이라는 건, 직원들의 감정을 무시하지 않고 또 직원들의 역량과 성격 성향을 잘 이해하는 것에서부터 시작합니다. 실력이 아무리 좋아도, 회사 입장이 아닌 내 입장으로만 생각하는 사람은 원치 않습니다.   하찮은 주제를 가지고 얘기하거나 잡담을 하더라도, 말 한마디 말 한마디를 들어보면, 이 사람이 회사를 평소에 어떻게 생각하고 있는지 훤히 보입니다.   ▷스타트업이 지원자를 보는 관점규모와 서비스 업종에 상관 없이 기업이라면, 인재 채용을 정말 중요하게 여깁니다.  아무나 들어와도 상관없어- 하는 경영진은 아마 없을 거에요.  누가 들어오느냐에 따라 회사의 방향과 속도가 달라지는 만큼, 인재 한명이 회사를 일으켜 세우고, 한 명 때문에 망할 수 있는 게 회사입니다.  심지어 스타트업은, 1인 다인 역할은 물론 자기 일은 알아서 잘 해내야 하는 곳입니다. 면접을 진행할 때 회사가 보는 부분은 해당 업무에 대한 관심의 무게와 이해력, 적응력이 빠른지, 이전 회사에서 무엇을 성취해 왔는지, 그 경력이 우리 회사에선 어떤 식으로 역량 발휘가 되는지를 살펴봅니다. 어떤 서비스를 제공하는지, 서비스에 대한 이해, 열정과 배움의 자세, 인성과 성격 등 다양한 관점으로도 지원자의 합격여부를 고려하구요.  전공은 뭐고, 이전 경력은 뭐고, 어떤 역량이 있고 이런 것들도 물론 중요하지만, 스타트업은 특히 이 사람이 과연 스타트업에서 일할 수 있는 사람인지를 염려합니다.  예를 들면 이런거죠.  어떤 사람의 이력서를 보니, 줄곧 큰 기업에서만 일해왔는데,  과연 부서가 곧 직원 한 명,  회사가 팀인 작은 회사에서 일할 수 있을까 라는 의구심이 드는거죠. 그간 채용을 진행하며 깨달은 건, 전공과 직장 경력을 떠나서 역량에 대한 자기계발 및 자기반성이 부족할 경우, 회사로서는 아무리 그 사람의 성향에 맞는 일을 주거나 다른 보직으로 변경해도 답이 안 나온다-라는 겁니다. 결과물에 대한 스스로의 기준이 낮은 사람은, 장기적으로 회사에 도움이 되는 인재가 아닙니다.  이는 비단 실력의 문제가 아닙니다.  아무리 실력이 뛰어나도 대충대충 일하면 결과물이 나올까요? 학교 시험성적이 70점 나왔다고 탓하는 게 아니라 아쉽지만, 본인 스스로 70점을 받으면 속상해서 더 열심히 공부를 할 수 있는 계기만 된다면 그건 속상한 일이 아닌데, 70점 맞고도 속상은 커녕 너울너울 지낸다면, 과연 그 학생은 평생 만년 70점에 만족하는 사람이 되겠죠.  그래서 경력이 많은 사람이 채용 되는 게 아니라, 직장 경력과 연수는 적을지라도 잠재 역량이 높은 사람, 상황 별 대처 능력과 판단 능력이 있는 사람, 해결 능력이 있는 사람을 회사는 채용해야 합니다. 스타트업은 복지나 근무 환경이 열악할 수 있습니다.  구글, 페이스북과 같은 멋 드러진 회사 오피스에서 자유분방한 분위기 만을 생각한다면, 얼른 환상에서 벗어 나와야 합니다.   물론, 시키는 일보다 스스로 해야 하는 일이 스타트업에서 많을 수 잇습니다.  마냥 좋아할 일은 아니지요.  그만큼 본인에게 책임감이 주어지는 거니깐요.  물론, 일 못한다고 시말서까지 쓰진 않지만, 무조건적인 비판 보다는 문제의식을 가지고, 본인의 능력 안에 개선할 수 있는 것 작은 것부터 해치우려는 태도가 정말 중요합니다.  이 태도가 지원자에겐 보이지 않는다면, 합격 카드를 주기가 힘들 것이고,  이 태도가 지금 함께 일하는 직원에게서 보이지 않는다면, 그 회사는 고심이 클 수 밖에 없습니다. 그래서 이런 기본 자세가 없으면 스타트업에서는, 직원 스스로도 만족스러운 성과를 내기 힘들고, 회사에 나오는 게 점점 힘들어질 수 밖에 없습니다.  회사 또한, 안 그래도 의기투합해도 모자랄 판에, 엔진 동력에 한 부분이 모자르니 성장이 더딜 수 밖에 없습니다.  ▷면접 절차면접에 정해진 방식은 없지만, 넷뱅은 기본적으로 서류 전형을 통과한 지원자를 대상으로 전화면접, 사전과제 순으로 진행하며 대면 면접은 실무면접, CEO면접으로 구성되어 있습니다.  사전과제는 직군에 따라, 문제가 다릅니다.  때론 실기, 때로는 필기 과제가 주어집니다.   여기서 진짜로 걸러지는 건, 서류전형이 아니라 사전과제입니다. 경력이나 전공이 직무에 적합하면 서류전형 통과는 비교적 관대합니다.  어디 가서 우리 회사 면접 쉬웠다고 말하고 다니는 사람은 아마 최종문턱에도 못간 분들일거에요.  사전과제 제출여부에 따라, 회사 차원에서는 이 지원자가 진심으로 회사에 관심이 있는지의 의지를 확인할 수 있습니다.  사전과제 질문에 어떤 답변을 썼는지는 그 다음 중요도인거죠.  넷뱅의 경우, 오픈북 형태이더라도 생각의 로직을 묻는 질문이 많기 때문에 지원자의 실제 업무 지식이 어느 정도인지를 파악할 수 있습니다.  말만 거창하게 쓰고, 속 알맹이는 없을 수도 있고, 비록 전문용어는 없더라도 문액에 생각의 흐름이 읽혀지는 답변도 있으니까요. 직군에 따라 실무면접 시 팀 및 그룹면접을 진행하는 경우도 간혹 있습니다. 면접 결과는 보통 3에서 7일 이내, 최대 2주일 이내에 알려드립니다.  최종합격자에 한해 결과를 통보해드리고 있습니다. 넷뱅이란 회사에 관심을 갖고 계신 분들께 힌트를 드리자면,  홍보마케팅 분야는 계속 수시채용을 진행하고 있으니 비록, 채용이 마감됐더라도, 이력서를 보내면 즉시 채용담당자가 확인합니다. 늦어도 1주일 이내로 회신을 드리니 주저 마시고 지원하는 것을 장려하고 싶네요. #넷뱅 #스타트업 #스타트업취업 #스타트업채용 #면접후기 #후기 #경험공유
조회수 1973

AWS S3를 이용하여 Vue 배포하기

Vue를 처음 만났을 때, 이것으로 무엇을 할 수 있을지 궁금했다. 하지만 Vue로 데모 앱과 개발 가이드를 따라하면서 의문은 점점 풀렸다. 알다시피 Vue는 front-end 로 활용이 된다. 빌드가 없어도 되고, 빌드를 해서 배포할 수도 있다. Vue는 일반 CDN을 이용하여 페이지를 만드는 방법과 여러 프레임워크를 활용하여 배포하는 방법 외에 다양한 방법이 존재하는데, 무슨 방법을 쓰든 결과물은 html과 js, css 같은 static 파일로만 이루어져 있다.처음에는 일반적인 방법으로 테스트하면서 다양한 디렉티브와 손쉽게 DOM 처리를 하는 방법을 익혔다. 나중엔 프로젝트에 참여하면서 webpack 으로 빌드해 배포하도록 프로젝트를 구성했다. webpack을 이용한 배포방법은 여기 를 참고하면 된다. 참고로 webpack은 nodeJS로 실행되기 때문에 기본적인 환경을 세팅해야 한다.webpack build.js 일부위처럼 직접 스크립트를 만들어서 사용해도 되지만 Vue에서 제공하는 템플릿으로 프로젝트를 생성할 수도 있다. 단 Vue-CLI가 미리 설치되어 있어야 한다.터미널에서 vue init webpack 프로젝트명만 치면 세팅된 템플릿으로 폴더 및 스크립트들이 구성된다. 아래와 같이 프로젝트의 기본 속성들을 입력하자.프로젝트를 만들면 기본적인 파일들로 이루어진 폴더가 생성된다. 현재는 관련 라이브러리들이 없는 상태이므로 npm install 을 통해 설치한다. 설치 후 nom run dev 로 개발모드를 실행하면 브라우저로 화면을 볼 수 있다. 만약 설치하고 빌드 설정을 수정하지 않았다면 기본 8080 포트로 가동된다. 브라우저를 실행해 http://localhost:8080 으로 접속하면 아래와 같은 화면이 나온다.여기까지 하면 webpack 으로 배포할 수 있는 상태가 되었다. 이제 AWS로 가서 회원가입을 하고 S3를 생성한다. 생성 방법은 여기를 참고하면 된다. 버킷까지 생성되었다면 이제 빌드 후 업로드하자.위와 같이 nom run build 를 하면 빌드가 시작된다.빌드가 완료되면 해당 프로젝트 폴더에 dist 폴더가 생성된다. dist 폴더에는 index.html 과 js, css 와 같은 리소스들이 들어간다. 이제 S3로 가서 올리려는 버킷을 클릭하자.업로드 버튼을 클릭하고, dist 폴더에 있는 index.html 과 static 폴더를 업로드한다. 폴더가 업로드되면 아래와 같이 파일과 폴더들이 보인다.업로드가 완료되었다고 지금 바로 웹사이트처럼 접근할 수는 없다. 정적 웹사이트 호스팅 설정을 활성화해야 비로소 가능하다. 속성 탭을 클릭해 정적 웹사이트 호스팅을 활성화 상태로 만든다.위와 같이 활성화하고 인덱스 문서에만 index.html 을 입력한 후 저장 버튼을 클릭한다. 현재 보이는 엔드포인트 주소가 외부에서 접근할 수 있는 사이트 도메인이다. 그 후 엔드포인트 주소로 접속하면 아래와 같이 오류 페이지를 볼 수 있다.이게 무슨 오류란 말인가… index.html 파일도 있는데 403 오류라니..자세한 http 응답코드는 여기를 참고하면 된다. 위의 오류는 권한이 없어서 파일에 액세스할 수 없다는 페이지다. S3는 기본적으로 모두에게 공개하진 않는다. 그래서 특정 파일이나 특정 버킷만 공개형으로 변경해줘야 한다.이 문제를 해결하려면 권한 탭으로 이동해 버킷 정책을 설정해야 한다. 아래와 같이 설정해주면 누구에게나 공개되어 접근할 수 있다.위 내용을 아래와 같이 버킷 정책으로 설정한다.설정을 저장한 후 다시 엔드포인트로 접속하면 아래와 같이 로컬에서 보였던 페이지가 보인다.이렇게 보이면 성공!다음엔 Vue가 어떤식으로 동작을 하는지 알아보도록 하겠다.마치며Vue는 간결하면서도 강력한 기능을 가지고 있는 front-end 프레임워크다. 개념과 디렉티브, 이벤트 핸들링, 보안 등 궁금한 게 많았지만 신통방통한 놈인 건 확실하다. 아직 큰 프로젝트에 사용하는 건 힘들 수도 있으나 아래와 같이 장점이 많아 서버단과 클라이언트단 분리 개발, 외부 라이브러리와 사용하면 훌륭한 프레임워크가 될 거라는 생각이 든다.재사용 가능한 기능별 컴포넌트 개발훌륭한 라우터 탑재서버와 통신 가능한 ajax 모듈이 다양함 ( jQuery Ajax, Axios )다양한 호환 라이브러리를 활용하면 분명 훌륭한 프레임워크가 될 것!편집자 주) 함께 보면 좋아요!Vue, 어디까지 설치해봤니?PHP Codeigniter 환경에서 VUE 사용해보기JQuery 프로젝트에 VUE를 점진적으로 도입하기Vue와 Vuex, 컴포넌트간 통신과 상태 관리글장현준 팀장 | R&D 개발3팀janghj@brandi.co.kr브랜디, 오직 예쁜 옷만
조회수 3449

제니퍼5 기능 소개

JENNIFER 5의  유용한 기능을 소개해 드리는 시간. 새로운 기능을 검토해 보시고, 지금 바로 사용해 보세요. 제니퍼소프트는 제품을 사용하는 고객이 최적의 환경에서 모니터링 할 수 있도록 하는데 최고의 가치를 두고 모든 제품을 개발합니다.제니퍼(JENNIFER)는 웹 애플리케이션 (Java EE, .NET, PHP) 시스템 모니터링을 위한 APM(Application Performance Monitoring) 솔루션입니다. 제니퍼는 경량화(Light-Weight), 실시간(Real-Time), 그리고 개별 트랜잭션 모니터링(Individual Transaction Monitoring) 등 기술기반의 '직관적인 통합 성능관리 솔루션'으로 이미 국내외 1200여 개 고객사를 통해 검증된 바 있습니다.  또한, 시대의 요구 사항인 모바일, 클라우드, 그리고 빅 데이터 시장의 온전한 모니터링 체계를 위하여, 웹 서비스 사용자 모니터링 (Web Service Real-User Monitoring), 웹 서비스 중심의 토폴로지 뷰(Web Service Topology View), 클라우드(대규모 시스템) 환경을 고려한 아키텍처, HMTL 5기반의 N스크린(N-Screen)까지도  지원하는 APM 제품입니다.웹 서비스 중심 토폴로지 뷰 (Web Service Topology View)제니퍼 토폴로지 뷰(Topology View)는 기업의 웹 서비스를 중심으로 연결된 서비스에 대한 가시성(Visibility)을 확보하는 것이 핵심 기능입니다. WAS를 중심으로 연결된 서비스(DB, 외부 연계 서비스, HTTP 등) 사이에 발생하는 트랜잭션, 즉, 구간에서 처리되는 트랜잭션까지 실시간으로 모니터링 할 수 있습니다.구간 엑티브 서비스 모니터링: 구간에서 처리되고 있는 엑티브 서비스를 실시간 모니터링 하여 병목 지점과 그 원인을 분석할 수 있습니다.X-view 연계 분석: 병목 지점이 되는 구간에서 처리되는 모든 트랜잭션에 대한 분석을 할 수 있습니다.구간 실시간 모니터링: 실시간 차트를 통해 원하는 구간에 대한 모니터링이 가능합니다.웹 서비스 사용자 응답시간 모니터링(RUM)클라이언트 구현 기술의 발전과 모바일 기기의 대중화로 인해 기업의 서비스는 복잡해졌습니다. 사용자는 모바일을 통해 언제, 어디서든 기업의 서비스를 이용할 수 있게 되었고, APM은 이제 서버사이드 영역의 모니터링뿐만 아니라, 실제 사용자의 만족도를 높일 수 있는 사용자 중심의 성능 모니터링 기능을 요구하고 있습니다. 이러한 변화에 따라 제니퍼는 프런트 앤드(Front-End) 영역의 모니터링을 위한 실제 사용자 모니터링, 즉 RUM(Real User Monitoring)을 지원합니다.이 기능은 웹 표준 조직 기구인 W3C의 Timing Navigation API를 사용하여 별도의 모듈 설치 없이 브라우저에서부터 서버사이드까지 전 영역에 대한 응답시간 측정이 가능하며, 서버와 네트워크로 이어지는 애플리케이션 수행 경로를 시각적으로 표시하여 애플리케이션 성능에 대한 깊이 있는 분석이 가능합니다.제니퍼 for CLOUD최근 IT 흐름의 큰 변화 중 하나는 클라우드(대용량 시스템)입니다. 클라우드 환경의 큰 특징은 트랜잭션의 양에 따라 하드웨어의 제약을 받지 않고 필요에 따라 서버 수를 조절하며 운영할 수 있어야 한다는 것입니다. 제니퍼는 자동감지(Agent Auto Detection), 일괄 설정(Central Configuration), 일괄 배포 (Central Deployment) 기능을 통하여 클라우드 환경에서의 애플리케이션 성능 모니터링을 지원합니다.스마트 프로파일링(Smart Profiling)제니퍼의 개별 트랜잭션의 응답시간을 활용한 엑스 뷰 기반의 분석은 이미 수많은 고객사에서 검증된 트랜잭션 모니터링 기법입니다. 하지만, 프로파일링 분석은 개발자 혹은 성능 튜닝의 전문가가 아니면 어려움을 겪는 것이 사실이었습니다. 이에 제니퍼는 누구나 쉽게 프로파일링 데이터를 분석 할 수 있는 스마트 프로파일링(Smart Profiling)을 제공합니다. 이 기능을 통해 사용자는 Method, SQL, 외부 서비스 중 응답시간이 느린 구간을 선택하여 해당 시점의 프로파일을 쉽게 분석할 수 있습니다.실시간 Connection Pool 모니터링실시간 Connection Pool 모니터링은 Instance별 Connection Pool을 실시간으로 모니터링하는 기능입니다. 이 기능은 액티브 서비스 차트와 함께 모니터링하며 액티브 서비스 점유가 주로 DB Connection에 있을 경우 Connection Pool 설정을 조정할 수 있어 서비스 성능을 개선할 수 있다는 것입니다. 다른 측면에서 DB Connection을 특정 애플리케이션에서 많이 사용할 경우 현재 Connection을 사용하고 있는 Active Service를 찾아내어 원인을 분석할 수 있습니다.실시간 애플리케이션 변경 이력 모니터링기업에서 운영하는 서비스는 수많은 고객의 요구사항을 반영하고 서비스 개선을 위해 하루에도 여러 번 애플리케이션을 변경합니다. 모니터링 관점에서 애플리케이션 변경 시점은 곧 서비스 장애가 일어날 가능성이 가장 많은 시점입니다. 그렇기에 모니터링이 가장 필요한 시점이기도 합니다. 애플리케이션 변경 감지 기능은 변경 전후의 성능 변화를 실시간으로 모니터링하고, 변경 시점에 변경된 소스코드를 추적하여 어떤 소스코드가 변경되었는지 추적할 수 있습니다.  이를 통해 개발자와 운영자 모두가 쉽고 빠르게 서비스의 변화를 감지하고 대응할 수 있는 장점이 있습니다. 엑스 뷰(X-View) > 애플리케이션 연계 분석애플리케이션 연계 분석은 검색한 X-View의 개별 트랜잭션을 기반으로 애플리케이션 단위 호출건수, 평균 응답 시간, 최대 응답 시간, 평균 SQL 시간, 평균 CPU 시간을 함께 분석할 수 있는 기능입니다.  또한 이러한 성능 수치들이 높은 애플리케이션의 개별 트랜잭션을 분석하여 성능에 영향을 미치는 애플리케이션을 튜닝 할 수 있습니다.엑스 뷰(X-View) > 연계 트랜잭션 분석제니퍼는 하나의 요청으로부터 시작된 다수의 트랜잭션 간의 상관 관계를 모니터링하거나 분석할 수 있습니다. 하나의 서버에서 처리된 서로 다른 업무 트랜잭션들을 연계할 수 있으며, 다른 서버에서 발생된 트랜잭션을 연계할 수 있습니다. 프로토콜 후킹 방식(HTTP, RMI)과 GUID를 활용한 연계방식을 지원합니다.엑스 뷰(X-View) > 자동 스택트레이스제니퍼를 포함한 대부분의 APM은 트랜잭션이 느린 원인을 분석하기 위해 매서드 프로파일링 기능을 제공합니다. 하지만 매서드 프로파일링 기능은 잘못된 설정으로 성능에 영향을 주거나 실제 느린 매서드를 찾지 못할 경우가 많습니다. 또한, 로직을 잘 알아야 하므로 성능 전문가가 아닌 이상 사용이 매우 어려운 단점이 있습니다.제니퍼는 이런 제약사항을 없애고 좀 더 쉽게 사용하기 위해 자동 스택트레이스 기능을 제공합니다.  이 기능은 성능 전문가가 아니더라도 느린 트랜잭션이 발생했을 때 해당 시점에 자동적으로 스텍트레이스(Stacktrace)를 남겨서 원인을 쉽고 빠르게 분석할 수 있습니다. 제니퍼소프트는 항상 제니퍼 고객의 모니터링 환경을 좀 더 쉽고 유용하게 할 수 있도록 고민하고 있습니다.  더 좋은 기능을 제공할 수 있도록 노력하겠습니다. 
조회수 670

에이스프로젝트 피트니스 지원

'겨울 동안 마음 놓고 너무 많이 먹었나...? 몸이 둔해진 것 같아 ㅠㅠ','요새 체력이 많이 약해진 거 같아... 자도 자도 너무 피곤하네','이제 여름도 얼마 안 남았네? 바다가 나를 부른다!'어느새 이런 생각이 많이 들 때인 4월입니다.이런 분들의 고민을 해결해주기 위해, 에이스프로젝트에서는 피트니스 이용권을 제공합니다.아침, 점심시간, 저녁 그리고 주말까지 간편히 이용 가능! 피트니스센터는 바로 회사 지하 1층입니다.엘리베이터만 타고 내려가면 바로 운동할 수 있어요. 가깝다 보니 점심시간에 탄력 근무를 이용해 운동하고 돌아오는 에이스인들도심심찮게 만날 수 있답니다!피트니스센터가 아주 가깝다는 점 외에도 또 하나의 장점!개인 사물함도 따로 제공하고 있습니다. 항상 들고 다니기 귀찮은 운동화와 샤워용품은 입구 옆에 있는 개인 사물함에 보관할 수 있습니다.언제든지 몸만 가면 운동을 할 수 있는 거죠.그리고 이용 방법도 아주 간단합니다. 에이스프로젝트 공용 사물함에 있는 명단에 이름을 적고, 넉넉히 들어있는 출입카드 중 하나를 꺼내서 입장하면 됩니다. 차~암 쉽죠?다양한 운동기구들이 있기 때문에근력 운동, 유산소 운동 등 본인이 원하는 운동 스타일에 맞추어 여러 운동을 할 수 있습니다.운동은 골고루 열심히! 으쌰 으쌰특별한 운동을 원하는 에이스인이라면 'G.X(Group Exercise)' 이용 가능!혼자 운동하는 게 재미없다는 사람들도 있죠.그룹으로 운동하는 것, 또는 전문가의 도움을 받고 싶다면 G.X(Group Exercise)를 이용할 수 있습니다. 이것도 무려 무료!!!!요가, 줌바, 필라테스, 웨이트 트레이닝 등 다양한 운동을 전문가 선생님에게 배울 수 있어요. 원하는 요일, 시간에 맞춰 선택해서 들을 수 있어좀 더 특별하게 운동을 할 수 있을 거 같네요.PT(Personal Training) 이용자, 복지포인트 20% 할인 혜택 제공!운동이 처음이어서 어떤 기구를 써야 할지, 자세는 어떻게 해야 할지 막막한 분들도 있어요.에이스프로젝트에서는 PT 이용을 원하는 사람에게 복지포인트 20% 할인 혜택을 제공합니다!회사 복지 포인트를 이용하여 PT를 결제하면, 20% 할인된 금액만 차감되는 방식이에요.저처럼 회사 입사 전까지 운동이 낯설었던 사람을 위한 최고의 혜택이죠.직원의 건강이 좋아지면 자연스레 업무 효율이 올라가고, 이는 당연히 회사의 성과와도 연결되겠죠?직원의 건강이 회사의 건강이라 생각하는 에이스프로젝트.체력은 기본! 피트니스센터 지원과 함께 건강한 에이스인이 되어요!
조회수 1919

레진 기술 블로그 - IntersectionObserver를 이용한 이미지 동적 로딩 기능 개선

구글 크롬 51 버전부터 DOM 엘리먼트의 노출 여부를 비동기로 처리하는 IntersectionObserver API를 사용할 수 있게 되었습니다. 이 기능을 이용하면 이미지의 동적 로딩이나 광고 배너의 노출 측정 등을 효율적으로 사용할 수 있다고 구글 개발자 블로그에서 소개하고 있습니다. 이 글에서는 기존의 이미지 동적 로딩에 대한 문제점을 짚어보고 여러 예제를 통해 IntersectionObserver의 사용 방법을 익혀 기존 기능을 개선할 수 있도록 합니다. 사용한 예제들은 브라우저의 호환성을 고려하지 않고 구글 크롬을 기준으로 작성하였습니다.기존의 이미지 동적 로딩 구현이미지의 개수가 많거나 용량이 큰 페이지를 불러올 경우 쓸데없는 네트워크 비용이 증가하고 이미지를 불러오는 과정에서 서비스 속도에 문제가 발생할 소지가 있어서 이미지가 사용자에게 보일 때만 불러오는 동적 로딩 기능이 필요합니다. IntersectionObserver를 소개하기 전에 먼저 기존 라이브러리들이 이미지 동적 로딩을 어떤 방법으로 구현하고 있는지 간단하게 알아보도록 합니다.엘리먼트 가시성 판단이미지 동적 로딩에서 가장 중요한 코드는 해당 엘리먼트가 현재 화면 내에 보이는지 알아내는 것입니다. 이를 위해 엘리먼트의 크기와 위치 값을 돌려주는 Element.getBoundingClientRect 함수를 사용하는 경우가 많습니다. 아래는 이 함수를 사용한 간단한 구현 예제입니다.function isInViewport(element) { const viewportHeight = document.documentElement.clientHeight; const viewportWidth = document.documentElement.clientWidth; const rect = element.getBoundingClientRect(); if (!rect.width || !rect.height) { return false; } var top = rect.top >= 0 && rect.top < viewportHeight; var bottom = rect.bottom >= 0 && rect.bottom < viewportHeight; var left = rect.left >= 0 && rect.left < viewportWidth; var right = rect.right >= 0 && rect.right < viewportWidth; return (top || bottom) && (left || right); } 이벤트 처리위에서 구현한 isInViewport 함수는 언제 호출해야 할까요? 먼저 문서를 처음 불러왔을 때 호출해야 합니다. 그 후에는 동적 로딩이라는 단어에 맞게 사용자의 동작에 따라 보이지 않던 엘리먼트가 보이게 되는 이벤트를 감지해야 합니다. 마우스나 터치로 스크롤을 통해 문서의 위치가 바뀌거나 브라우저의 크기가 바뀔 수도 있고 모바일 기기의 화면을 돌려서 볼 수도 있습니다. 데스크톱의 경우 scroll, resize 이벤트를, 모바일의 경우 orientationchange 이벤트의 처리를 생각해야 합니다.const images = Array.from(document.querySelectorAll('img')); document.addEventListener('scroll', () => { images.forEach(image => { if (isInViewport(image)) { image.onload = () => images.splice(images.indexOf(image), 1); image.src = 'original_image_path'; } }); }); 간단하게 위 코드와 같이 구현할 수 있습니다. 물론 실제 서비스를 위해서는 수정할 점이 몇 가지 있습니다. 동적 로딩의 대상이 되는 이미지를 구분하기 위해 해당 엘리먼트에만 특정 클래스를 부여하거나 HTML5에서 지원하는 data 속성을 이용하기도 합니다. 스크롤이나 리사이즈 이벤트가 과도하게 발생하는 경우가 많으므로 throttle 또는 debounce 등을 사용해 실행 빈도를 조절할 수도 있습니다. 일부 라이브러리에서는 requestAnimationFrame을 이용해 이벤트 핸들러를 처리하기도 합니다.TADA레진코믹스에서는 이미지 동적 로딩을 위해 서비스 초기에 Unveil 라이브러리를 사용했었습니다. 그러나 적용 후 몇 가지 아쉬움이 있어 따로 TADA 라이브러리를 제작했습니다. 먼저 마크업 구조상 이미지를 태그가 아닌 다른 태그에 배경 이미지로 사용하는 경우를 지원해야 했습니다. 그리고 모바일 웹에 주로 많이 적용하는 수평 스크롤 구역에 대한 처리도 필요했습니다. 문서의 스크롤 이벤트로는 처리가 되지 않기 때문에 특정 엘리먼트를 받아 그 엘리먼트의 스크롤 이벤트 핸들러를 등록할 수 있도록 해야 했습니다. 이를 해결하기 위해 만든 라이브러리를 현재 서비스에 적용 중이지만 이 라이브러리 역시 아래와 같은 문제점들을 가지고 있습니다.</> < id>기존 이미지 동적 로딩의 문제점getBoundingClientRect 함수의 문제점위 코드에서 특정 엘리먼트가 현재 화면 내에 보이는지 검사할 때 사용하던 Element.getBoundingClientRect 함수에는 치명적인 단점이 있습니다. 이 함수를 호출할 때마다 브라우저는 엘리먼트의 크기와 위치값을 최신 정보로 알아오기 위해 문서의 일부 혹은 전체를 다시 그리게 되는 리플로우(reflow) 현상이 발생한다는 점입니다. 호출 횟수가 적을 경우에는 부담이 되지 않지만, 이 함수는 위에서 구현한 것처럼 스크롤이나 리사이즈 이벤트가 발생할 때마다 등록한 모든 엘리먼트를 순환하면서 호출하게 됩니다. 이 코드들이 하나의 메인 스레드에서 실행되기 때문에 스크롤을 할 때마다 실행 속도가 눈에 띄게 느려질 수도 있습니다.외부 도메인 문서를 사용하는 iframe최신 브라우저들은 동일 도메인 정책에 따라 iframe 내의 외부 도메인 문서에서 현재 문서에 접근하지 못 하게 막고 있습니다. 이 제한은 서비스 개발에서 겪게 되는 문제는 아니고 외부 광고 플랫폼 개발자의 입장에서 발생하는 문제입니다. 광고 이미지의 표시나 클릭 이벤트의 처리 등은 iframe 내에서 처리할 수 있지만 광고 이미지를 지연 로딩한다거나 이 광고가 사용자에게 노출이 되었는지 기록하는 등의 기능은 iframe 내에서 불가능합니다. 그래서 광고를 적용하는 서비스 개발자에게 스크립트를 제공하고 서비스 문서 내에 삽입하는 방식으로 처리하고 있습니다. 이러한 외부 광고가 여러 개라면 삽입해야 하는 코드가 늘어날 뿐만 아니라 코드 내에서 스크롤이나 리사이즈 이벤트 등을 각각 사용하기 때문에 위에서 언급한 문제점들이 배가될 수 있습니다.기타 이벤트에 대한 처리대부분의 동적 로딩 라이브러리들은 적용할 엘리먼트에 특정 클래스 또는 data 속성을 부여하면 코드를 추가 작성하지 않더라도 쉽게 사용할 수 있습니다. 하지만 화면에서 보이지 않던 엘리먼트가 갑자기 나타나는 현상은 스크롤이나 리사이즈 이벤트에서만 발생하는 것이 아닙니다. 더보기 버튼을 눌렀을 때 숨겨져 있던 엘리먼트를 노출할 수도 있고 AJAX 호출 후 엘리먼트를 생성한 후 보여줄 수도 있습니다. 이런 경우 일괄적으로 처리하기가 어렵우므로 해당 이벤트가 발생할 때 수동으로 처리하는 수밖에 없습니다.IntersectionObserver위에 나열한 문제들을 효과적으로 처리하기 위해 크롬 51/엣지 15/파이어폭스 55 버전부터 IntersectionObserver를 지원하기 시작합니다. 우리말로 번역하면 교차 감시자 정도가 될 이 기능은 등록한 엘리먼트가 보이는 영역에 나타나거나 사라질 때(용어에 충실하자면 대상 엘리먼트의 영역이 루트 엘리먼트 영역과 교차하기 시작하거나 끝났을 때) 비동기로 이벤트를 발생시켜 줍니다. 기본적인 사용법은 아래와 같습니다.const intersectionObserver = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { // do something observer.unobserve(entry.target); } }); }); intersectionObserver.observe(element); 먼저 IntersectionObserver 생성자에 콜백 함수를 인자로 넘겨주고 생성한 인스턴스의 observe 메소드를 통해 동적으로 처리할 엘리먼트를 등록합니다. 콜백 함수는 IntersectionObserverEntry 객체 목록을 전달받으므로 순환문을 통해 각 엘리먼트에 대한 처리를 완료하고 필요한 경우 unobserve 메소드를 이용해 감시 대상에서 해제할 수 있습니다.IntersectionObserver 예제아래 예제들은 기본적으로 아래 코드를 바탕으로 작성되었습니다. 각 예제들의 최상단에 엘리먼트에 짝을 이룬 표시등을 두었고 콜백 함수가 호출될 때마다 파동 효과를 주었으며 이 때 isIntersecting 속성을 기준으로 표시등을 켜지거나 꺼지게 되어 있습니다.const io = new IntersectionObserver(entries => { entries.forEach(entry => { // isIntersecting 속성으로 해당 엘리먼트가 보이는 지 표시 }); }); Array.from(document.querySelectorAll('.box')).forEach(box => { io.observe(box); }); 스크롤 이벤트를 다루지 않더라도 엘리먼트의 가시성 여부를 isIntersecting 속성을 통해 알 수 있습니다.<iframe class="demo" data-fr-src="https://cdn.rawgit.com/fallroot/intersectionobserver-examples/master/basic-verticalscroll.html" width="600" height="400" frameborder="0">수평 스크롤의 경우에도 overflow 속성이 적용된 컨테이너 엘리먼트의 스크롤 이벤트를 처리하지 않더라도 상관없습니다.<iframe class="demo" src="https://cdn.rawgit.com/fallroot/intersectionobserver-examples/master/basic-horizontalscroll.html" width="600" height="200" frameborder="0">더보기 버튼에 대한 클릭 이벤트를 따로 등록하지 않아도 동작합니다.<iframe class="demo" src="https://cdn.rawgit.com/fallroot/intersectionobserver-examples/master/basic-unfold.html" width="600" height="240" frameborder="0">리사이즈 이벤트 역시 따로 처리할 필요가 없습니다. 새 창을 띄운 후 창 크기를 조절하면서 확인할 수 있습니다.위의 모든 예제들은 <iframe> 태그 안에서 실행되고 있습니다. 이처럼 작성한 코드가 외부에서 실행이 되더라도 IntersectionObserver API는 문제없이 동작합니다.IntersectionObserver 생성자 옵션rootroot 옵션에는 가시성의 판단 기준이 될 HTML 엘리먼트를 지정합니다. observe 메소드로 등록하는 엘리먼트들은 반드시 이 루트 엘리먼트의 자식이어야 합니다. 이 옵션을 지정하지 않을 경우 브라우저 화면에서 현재 보이는 영역인 뷰포트가 기본이 됩니다. 아래 예제에서 알 수 있듯이 루트 엘리먼트를 지정하면 현재 화면과는 상관없이 루트 엘리먼트와 등록한 엘리먼트들의 영역이 교차하는 지 판단하게 됩니다.<iframe class="demo" src="https://cdn.rawgit.com/fallroot/intersectionobserver-examples/master/option-root.html" width="600" height="400" frameborder="0">rootMargin루트 엘리먼트의 마진값을 지정할 수 있습니다. CSS에서 사용하는 형식과 같기 때문에 “10px”, “10px 20px”, “10px 20px 30px 40px” 형태가 모두 가능하며 음수값으로 지정할 수도 있습니다. 기본값은 0이고 루트 엘리먼트를 지정한 상태라면 퍼센트값을 사용할 수도 있습니다. 이 옵션을 이용하면 이미지 동적 로딩에서 해당 엘리먼트가 화면에 나타나기 전에 이미지를 불러오기 시작해 이미지 공백을 줄이는데 유용하게 이용할 수 있겠습니다.<iframe class="demo" src="https://cdn.rawgit.com/fallroot/intersectionobserver-examples/master/option-rootmargin.html" width="600" height="400" frameborder="0">위 예제에서는 root 옵션은 지정하지 않고 rootMargin 옵션을 각각 0, 100px, -100px, 50%로 지정했습니다. 하지만 iframe 내에서 실행을 하게 되면 이 옵션이 정상적으로 동작하지 않습니다. 프로젝트 페이지의 이슈 댓글에는 동일 도메인의 프레임 안에서는 동작하는 것으로 논의되고 있지만 뷰포트에는 해당하지 않거나 버그 또는 아직 크롬에 반영이 되지 않아 보입니다.이 예제는 새 창을 띄워 프레임을 벗어나면 정상적으로 동작합니다. 스크롤을 내리다보면 엘리먼트마다 IntersectionObserver 콜백 함수가 다른 위치에서 호출됨을 알 수 있습니다.thresholdthreshold 옵션은 엘리먼트가 콜백 함수의 호출 시점을 정하는 옵션입니다. 0과 1을 포함한 그 사이의 숫자 또는 숫자 배열을 지정할 수 있는데 이 숫자는 엘리먼트의 전체 영역 중에 현재 보이는 영역의 비율입니다. 이 비율의 경계를 넘나들 때마다 콜백 함수가 호출됩니다.<iframe class="demo" src="https://cdn.rawgit.com/fallroot/intersectionobserver-examples/master/option-threshold-value.html" width="600" height="400" frameborder="0">위 예제에서는 threshold 옵션을 각각 0, 0.5, 1, [0, 1]로 지정했습니다. rootMargin 예제처럼 엘리먼트마다 콜백 함수가 다른 위치에서 호출됩니다. 두 번째와 세 번째 상자는 콜백 호출 시점에 isIntersecting 값이 항상 참이기 때문에 표시등이 정상적으로 표시되지 않습니다. isIntersecting 속성을 기준으로 처리해야 할 작업이 있다면 반드시 threshold 속성에 0을 포함시켜야 정상적으로 동작합니다. threshold 속성은 아래 예제처럼 콜백 함수의 인자로 받는 IntersectionObserverEntry 객체의 intersectionRatio 속성과 같이 사용하기에 유용합니다.<iframe class="demo" src="https://cdn.rawgit.com/fallroot/intersectionobserver-examples/master/option-threshold-ratio.html" width="600" height="400" frameborder="0">위 예제에서는 threshold 옵션을 각각 [0, 1], [0, 0.5, 1], [0, 0.25, 0.5, 0.75, 1]로 지정하고 콜백이 호출되면 intersectionRatio 값을 기준으로 표시등의 배경 투명도를 바꾸도록 했습니다.IntersectionObserver의 활용이미지 동적 로딩지금껏 알아본 IntersectionObserver를 이용해 이미지 동적 로딩을 간단하게 구현해봅니다. 이미지 엘리먼트를 구성할 데이터가 배열로 존재한다고 가정하고 ES6에서 지원하는 템플릿 문자열을 사용해 배열을 순환하면서 이미지 목록을 생성합니다. 그 후 IntersectionObserver를 초기화하고 만들어진 엘리먼트들을 등록합니다. 콜백 함수에서는 엘리먼트가 보이는 상태일 때 이미지를 로딩하고 해당 엘리먼트를 감시 해제합니다. id="comics"> const comics = [ { alias: 'eunsoo', id: 6080299074584576, title: '은수' }, ... ]; const template = comics => ` ${comics.map(comic => ` ${comic.id}"> ${comic.alias}" class="info">${comic.title} `).join('')} `; document.getElementById('comics').innerHTML = template(comics); const io = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (!entry.isIntersecting) { return; } const target = entry.target; const id = target.dataset.id; target.querySelector('.info').style.backgroundImage = `url(https://cdn.lezhin.com/v2/comics/${id}/images/wide?width=600)`; observer.unobserve(target); }); }); Array.from(document.querySelectorAll('.comic')).forEach(el => { io.observe(el); }); 아래 예제를 실행하면서 브라우저의 개발자 도구를 열고 네트워크 탭을 살펴보면 이미지 엘리먼트가 보이기 시작할 때 불러오기 시작하는 것을 확인할 수 있습니다.<iframe class="demo" src="https://cdn.rawgit.com/fallroot/intersectionobserver-examples/master/demo-lazyload.html" width="600" height="400" frameborder="0">무한 스크롤IntersectionObserver 기능을 이용하면 무한 스크롤 역시 쉽게 구현할 수 있습니다. 아래 예제에서는 스크롤의 끝부분에 감시를 할 엘리먼트를 두고 그 엘리먼트가 노출이 될 때마다 콘텐츠를 추가로 불러오도록 작성하였습니다. id="items"> id="sentinel"> const count = 20; let index = 0; function loadItems() { const fragment = document.createDocumentFragment(); for (let i = index + 1; i <= index + count; ++i) { const item = document.createElement('p'); item.classList.add('item'); item.textContent = `#${i}`; fragment.appendChild(item); } document.getElementById('items').appendChild(fragment); index += count; } const io = new IntersectionObserver(entries => { entries.forEach(entry => { if (!entry.isIntersecting) { return; } loadItems(); }); }); io.observe(document.getElementById('sentinel')); loadItems(); 실행 결과를 아래 예제에서 확인할 수 있습니다.<iframe class="demo" src="https://cdn.rawgit.com/fallroot/intersectionobserver-examples/master/demo-infinitescroll.html" width="600" height="400" frameborder="0">마무리IntersectionObserver API는 아직 몇몇 브라우저의 최신 버전에서만 사용할 수 있지만 지원하지 않는 브라우저를 위해 Polyfill을 제공하고 있습니다.IntersectionObserver API는 웹 광고 플랫폼 제공자와 사용자 모두에게도 좋은 소식이라 봅니다. 이 API가 정착된다면 광고 노출 여부를 측정하기가 쉬워지고 서비스에 더해졌던 리소스 낭비를 줄일 수 있을 것이라 생각합니다.레진코믹스는 크롬 브라우저 사용자의 비중이 높은 편이기 때문에 빠른 시일 안에 적용해 볼 예정입니다. 이미지 동적 로딩 기능의 개선과 정주행 기능과 같이 현재 스크롤 이벤트를 과하게 사용하고 있는 코드에 대한 부담을 덜 수 있기를 기대하고 있습니다.참고자료Intersection Observer API SpecificationIntersectionObserver’s Coming into ViewIntersection Observer API
조회수 528

[행사] 미미박스에 대한 호기심을 해결해드립니다!

안녕하세요.미미박스 소식을 전달드리는 Ava입니다. 이 글을 지금 읽고 계시다면 위와 같은 고민을 한 번쯤 해봤을 것 같아요이러한 구직자분들의 고민을 듣고 소통하기 위해!바로 어제, 스타트업 청년채용 페스티벌에 미미박스가 참가했습니다.차츰 미미스러운 부스를 만들어 가고 있습니다.미미박스의 브랜드 제품, 미국, 대만, 홍콩 등 각 지사에서 만든 영상,PPT를 통해 미미박스 사업, 기업문화, 규모, 역사 등을 뿜어낼 수 있는 공간을 만들었습니다.미미박스 부스에서는 여러 작은 이벤트가 있었는데요.어플을 설치한 후 스토어 모드 (미미박스 어플을 키고 휙휙 흔들기) 체험,뷰티 설문 (Discover my beauty) 참여를 하면참여자분들에게 뷰티박스를 드렸습니다! 미미박스 제품과 프로덕트를 체험하게 하여자연스럽게 미미박스의 비전과 나아가는 방향을 설명드렸죠.  ▼뷰티 설문 'Discover my beauty by memebox)두구두구 그렇다면 이렇게 미미박스를 체험한 고객들에게 선물 드린 뷰티박스에는 어떤 선물이 있을까요?짜잔! 사실 뷰티박스에는 해당 피부 타입에 해당하는 제품뿐 아니라 모든 타입의 제품이 다 들어있었답니다네일락커까지!"뭘 좋아할지 몰라서 다 준비했어"참여자분들에게 작은 즐거움과 응원이 되었기를 바랍니다.부스에서 이야기를 나누지 못한 분들을 위해 5시부터 10분간 미미박스 기업설명회가 있었는데요. 미미박스 인사담당자 Clay가 미미박스에 대한 소개를 해주셨습니다.정말 많은 분들이 빛나는 눈으로 참여하였습니다.참여하신 분들께 추첨권을 한장씩 나눠드렸는데요.럭키드로우를 통해 미미박스만의 특별한 선물을 드렸습니다.그 현장, 정말 뜨겁죠?저희도 너무 즐거웠습니다!정말 많은 분을 만나 소통할 수 있던 시간이었는데요.참여자 여러분과 나눈 이야기를 살짝 알려드릴게요!"미미박스 신촌 매장 가봤어요! 핑크월 너무 예뻐요""해외에 있을 때 미미박스가 많은 펀딩을 받은 뉴스를 보고 인상 깊었어요.오늘 미미박스의 성장스토리랑 기업문화에 대해 듣고 보니 더 흥미로운 곳인 것 같아요.""원래 미미박스에 관심이 많았었는데, 오늘 이렇게 설명을 듣고 나니 더 입사하고 싶네요.""여혐 사건 때문에 탈퇴했었는데 이렇게 만나서 성장스토리와 사업에 대한 이야기, 기업문화에 대해들어보니 정말 좋네요. 역시 스타트업 중 최고네요. 다시 좋아질 것 같아요. (재가입 총총.)""앱 기능이 정말 신기해요."아무래도 스타트 업은 정보가 많지 않기 때문에많은 분들이 호기심도 많고, 고민도 많이 하시는 것 같았어요.미미박서 6명이 출동하여 이런 분들께 미미박스의 비전을 알려드릴 수 있던 시간이었습니다.저희도 많은 인사이트를 받을 수 있었답니다혹시 더 궁금하신 것이 있다면 언제든 댓글로 질문 보내주세요!
조회수 1171

스위처 스토리펀딩 종료

지난 1월 25일을 끝으로 44일간, 6편의 글을 연재했습니다. 그리고 35,938,017을 달성하였습니다. 이 숫자를 보고 머릿속에 드는 생각은 다 다를 겁니다. "아이고 기태 잘했네" 하는 사람, "기태 별로네" 하는 사람. 성공의 평가 기준은 주관적이라고 생각합니다. 저는 그저 결과가 나온 과정과, 그 과정의 이유(왜 이런 일을 했는지)에 대해 얘기해주면 독자는 좀 더 객관적으로 생각할 수 있지 않을까? 생각합니다.제가 쓰려는 글은 자랑도, 반성도 아닌 내가 했던 일을 되돌아보고, 결과를 정리하기 위함입니다. (근데, 사실 후자에 가깝습니다.) 위에서 얘기한 결과(숫자)가 나오기까지의 과정, 그 과정의 이유를 정리하기 위함입니다. 그럼 제가 가지고 있는 사고의 한계를 넘어설 수 있지 않을까? 생각합니다.스토리펀딩을 준비하시나요?아님 스타트업에서 마케팅을 하고 계신가요?스토리펀딩을 돌아봅니다. 필요하다? 궁금하다? 싶으면 조금만 기다려주세요. 내용은 다음과 같습니다.(공개는 2월 5일, 일요일 저녁입니다. 빨리 끝나면 빨리 올리고 맥주를 마실 거예요.)1. 스토리펀딩 성과 정리- 스토리펀딩 진행 전 반드시 알아야 할 것2. 스토리펀딩의 목표 (이루고자 한 것)- (1) 목표금액- (2) 스위처 슬로건 변화3. 목표금액 달성을 @을 왜(why?), 어떻게(how) 했는가- (1) 예열 작업- (2) case study- (3) A/B testing4. 스위처 슬로건 변화를 위해 @을 왜(why?), 어떻게(how) 했는가- (1) '귀차니즘' 없애기- (2) 만나야 할 사람 만나기- (3) 메인 영상을 대체할 콘텐츠5. 결과(* 글이 조금 수정될 수 있습니다. 양해해주세요. )궁금한 게 있다면?그냥 써서 올려도 되지만, 고객을 대하듯. 이 글을 읽을 분들이 무엇을 궁금해할지 알면 좀 더 도움이 될만한 글을 쓸 수 있을 것 같습니다. 위 내용과 별개로 궁금한 게 있다면 댓글을 남겨주세요. 확인 후 추가하도록 하겠습니다. (또, 제가 생각하지 못했던 부분도 생각할 수 있으니깐요.)#스위처 #Switcher #콘텐츠 #펀딩 #스토리펀딩 #경험공유 #인사이트 #후기
조회수 525

뛰어난 기획자, 문재인

2018년 4월 27일날씨까지 기획했을까?상쾌하고 화창하기까지 한 날이다.1년 전에는 상상할 수도 없었던 오늘이다.역사속 바로 그날, 오늘!남북 정상회담이 판문점에서 이루어지는 중계를 들으며 지하철 한 켠에서 출근을 하는 중에 문득 이렇게 뛰어난 기획자가 있을까 하는 생각이 들었다.작년 17년 7월 베를린에서 발표했던 한반도 평화 구상 연설이 1년도 채 되지 않아 눈앞에 현실로 구체화되고 있는 사실이 믿겨지지 않는다.정치적 신념과 이해관계를 떠나서, 기획자로서 문재인은 정말 중요한 메시지를 전하고 있다.진정성기획자에게는 기획 의도가 있다.일의 궁극적 목표이기도 한데, 여기에 불순물이 조금이라도 포함되어 있으면 안된다. 여지를 남겨두어서도 안된다. 작은 불순한 의도가 어느 한 순간에 일을 무너뜨리는 경우가 많기 때문이다. 특히 정치인은 대중을 명분으로 사익을 추구하는 전형적인 직업이다.(대부분 그렇다고 확신한다)진정으로 바라는 마음이 명확하고, 정제되어 있다.그런 관점에서 그는 자신을 1도 중심에 두지 않는다. 이 땅에 진심이 느껴지는 정치인이 있다는게 감동적일 뿐이다. 아니, 국가의 기획자로서 있다는게 뿌듯하다.정부가 헌법 개정안을 먼저 발표했을 때도 그랬다. 정황을 고려했다면 통과가 어렵다는 것을 뻔히 계산하고 있었음에도, 그렇게 해야하는 것이 옳다고 믿기 때문에 가능한 일처리이다. 정치적 계산이 아니라 진정성 때문이다.내가 경험한 여러 프로젝트에서 뼈저리게 느낀 것 중의 하나도, 드러나지 않은 작은 숨은 의도들이 얼마나 일을 망치게 하는지 깨달은 점이다. 일을 도모하면서 본래의 취지와 다르게 사적, (사내)정치적, 부수적 이익을 생각하는 구성원이 있을 경우, 그것을 기획자가 선별해내지 못한다면 일은 본래 취지대로 움직이지 않는다. 팀이 중요한 이유이기도 하다.누구도 자신의 이익 추구에서 자유롭기 어렵다. 사회 활동의 근본적인 이유가 사적 이익을 도모하기 위함임을 역시 부정하기 어렵다. 하지만 그것은 의도한 일 자체가 성공을 거둘 때 자연스럽게 자신에게 돌아오는 법이다. 또 다른 욕심을 기획에 담게 될 경우에는 성공도 이익도 멀어져버린다는 것을 미처 생각하지 못하는 것 같다.진심으로 역사적인 오늘을 축하하며 감사한다.세상이 주목하는 오늘 하루를 화창한 날씨와 함께 맘껏 즐기려한다!모두 함께!
조회수 754

채식주의자가 되다

나는 불과 3년 전 까지만 해도 삼겹살과 치맥 없이는 못살던 대한민국의 평범한 식습관을 가진 사람 중 한명이었다. 아침에는 항상 돼지고기 찌개와 생선을 먹어줘야 했고, 친구들과 만나면 삼겹살, 족발, 곱창, 치킨집을 하루에 다 돈적도 있을 정도로 거의 육식에 가까운 식성을 보유하고 있었다.그러다가 지금은 내 와이프가 된 한 여자를 사랑하게 됐다. 그녀는 우리나라와 참 비슷하지만 지구 정 반대편 아일랜드에서 날라온 유럽인이었고, 살생을 혐오하고 동물을 매우 사랑하는 채식주의자 였다. 사실 미국 유학시절 채식주의자들을 많이 봐 왔고, 내 룸메이트 중 한명도 채식주의자 였지만, 내 인생에 채식주의자와 연애를 해 본 적은 없었고, 사실 채식주의자의 개념조차도 모호하던 시절이었다.지구 반대편 아일랜드에서 날라온 디즈니월드의 공주같은 분위기를 풍기는 그녀는 채식주의자였다.채식주의자는 종류가 여러가지가 있지만 (건강상 채식을 하는 사람들을 제외하고는) 기본적으로는 다음과 같다.동물권 보호에 대한 개인적 신념으로 인해 동물로 분류되는 고기, 생선등의 섭취를 거부하고 과일, 곡식, 야채 등 식물성으로 구성된 음식만을 섭취하는 사람들.저런 얘기를 듣게되면 흔히들 묻는 질문이 있다.그럼 도데체 먹을 수 있는게 뭐야? 샐러드?사실 채식주의자의 역사도 깊고 영양학적으로 불균형을 해소하기 위한 채식주의자를 위한 식단이 많이 발달해 왔기 때문에 우리가 먹는 거의 대부분의 음식 메뉴들을 고기와 생선을 뺀 채식으로 만들어 먹는 것이 가능하다. 우리 부부도 사실 먹는 식단은 볶은밥, (비건)스테이크, 두부스테이크, 파스타, 야채볶음 등등 일반적으로 다른 사람들이 먹는 음식 메뉴들과 크게 다를게 없다.자주 만들어 먹는 두부 스테이크 이다.그녀가 채식을 시작한 것은 10살때 부터라고 하는데 계기는 이렇다. 어느날 가족끼리 양치는 농장에 놀러가서 양들과 뛰어 놀며 즐거운 시간을 보내고 집에 왔다. 하필 그날 엄마가 저녁 메뉴로 양고기 요리를 했다. 그녀가 혹시 이게 아까 뛰어놀던 그 양들로 만든 음식이냐고 물었고, 엄마는 같은 양은 아니지만 대략 그렇다고 대답했다. 이때 엄청난 충격의 쓰나미를 겪은 이후부터 채식주의자를 선언했다고 한다.이렇게 귀엽게 웃고 있었던 어린 새끼양이 내 저녁 식탁에 올라와 있는 메커니즘을 깨달은 것이다.이런 그녀의 영향을 받아 결국 나도 채식주의자가 되었지만, 내가 채식주의자된 과정은 그녀의 그것과 매우 다르다. 그녀는 어떤 단편적인 사건이 계기가 되어 채식주의자가 되었지만, 사실 나는 그런 단편적인 사건같은건 없다. 물론 사랑하는 마음에 모든것을 닮아간다지만, 내가 채식주의자가 된건 순전히 개인적인 고민과 성찰의 시간을 통해 점진적으로 된 것이라고 할 수 있다.나는 왜 채식주의자가 되었을까?결론부터 말하자면 나는 '가축'이라는 인간의 행위에 대한 반대의 뜻으로 채식주의자가 되기로 결심했다고 할 수 있다. 나는 가축을 반대한다.가축이라 함은 사전적으로는 인간이 집에서 기르는 동물들을 의미하겠지만, 나는 넓은 의미로 인간이 대량공급을 위해 집단적으로 사육해서 도살하게 되는 동물들을 가축이라고 정의하고 있다. 사실 생태계에서 먹이사슬이라는 건 필연적인 것이다. 풀을 먹는 초식동물이 있고, 이를 잡아먹어야만 하는 육식동물이 있는 것 처럼, 호모사피언스도 사실 태초에는 이런 먹이사슬의 한 지점에 위치한 다른 동물들 중 하나였을 뿐이다. 이들은 수렵과 채집활동으로 영양분을 섭취하였고, 다른 동물들과 마찬가지로 필요하면 사냥을 하기도 하고, 때론 다른 더 강한 육식동물에게 잡아먹히는 존재가 되기도 하였다.중요한 것은 우리 호모사피언스는 먹이사슬의 일원이었지, 먹이사슬을 벗어나서 모든 동물 위에 군림해서 그들을 대량 사육해서 도륙하는 존재는 아니였다는 것이다.나는 이런 현재 인간의 가축 행위에 있어서 그 대상이 되는 동물들의 인생에 대해 고민해 보기 시작했다. 원래 생태계라는건 먹이사슬 하에 나름의 생존권을 누리며 모든 동물들이 자유롭게 인생이란 걸 누리며 살 수 있게 해 준다. 사자의 먹이가 되는 사슴일지라도 사자에게 사냥당하기 전에는 자유롭게 풀을 뜯고 뛰어 다니고 있었을 것이고, 또 어떤 사슴은 사냥당하지 않도록 나름의 생존전략도 가지고 있었을 것이다.하지만 인간이 만든 가축 세상은 모든 동물들이 생존권을 박탈당하고, 상위 먹이사슬에게 사냥당할 100%의 확률이 된 삶을 강요받는 세상이다. 심지어 이 운명은 세대를 오가며 대물림되고, 한번 이 운명의 속박에 구속당하게 되면 자식의 자식까지 평생 이 굴레를 벗어날 수 없는 무자비한 운명이다.가축세상에서는 생존권을 박탈당하고 상위 먹이사슬에게 100% 사냥당하는 삶을 대물림 하는 세상이다. 나도 그렇고 내 와이프도 그렇고 우리는 남에게 채식주의자가 되라고 강요하지도, 기대하지도 않는다. 채식주의라는 건 일종의 신념같은 거고 개인의 신념을 남에게 강요하는 행위는 이유를 불문하고 인간의 자유를 침해하는 행위라고 생각한다. 오히려 나의 특이한 식문화 때문에 같이 식사를 하는 상대방의 자유가 제한되는 부분에 매우 미안한 마음을 가질때가 더 많다. 또한, 이게 어떤 목적성이 있는 운동 같은것도 아니다. 즉, 내가 가축을 반대하는 뜻에서 채식주의를 한다고 진짜 가축이 없어진 세상, 모든 사람들이 고기를 안 먹게 된 세상을 기대하지 않는다는 뜻이다. 사실 그런 세상은 오히려 또 다른 심각한 환경문제를 초래할 것 같다. 내 채식주의는 그냥 인간의 폭력성이 나날이 극대화되가고 있는, 그리고 내 스스로도 자중하지 않으면 나도 모르게 폭력적으로 변하기 쉬운 이 세상에서 나름의 조그마한 자기 성찰, 또는 자기 방어 기작을 마련하기 위한 몸부림 정도라고 생각하는 것이다.모든사람이 채식주의가자 되면 오히려 이 푸른 강산이 더 남아나지 않을수도...

기업문화 엿볼 때, 더팀스

로그인

/