스토리, 사진, 채용까지.
모두 한 곳에서 탐험하세요

쓱- 둘러보기만 해도 내가 다니는 모습이 상상되는 기업콘텐츠 꿀단지.

스토리

밥블레스유

취업 스토리

취업 성공하는 이력서와 자기소개서

...
마케팅 루카스

러시아통역학과 졸업생의 퍼포먼스 마케터 합격키트

15,980원
...
운영 플린

바이오의악학과 졸업생의 물류 운영 합격키트

12,980원
...
운영 브리트니

법학과 졸업생의 채용관리운영 합격키트

19,980원
...
운영 가필드

비즈니스정보기술학과 졸업생의 교직원 합격 키트

9,980원
테마
스펙쌓기

마감 직전 대외활동

...
마감 O일전 ~ 24.03.30

IT 기획자 네트워킹 모임 (서비스 기획, PM 취준~현직자까지)

감터
...
마감 O일전 ~ 24.03.30

픽글 콘텐츠 서포터즈 2기

픽글
...
마감 O일전 ~ 24.03.30

[서울시립청소년문화교류센터] MIZY, 세계와의 만남 축제 운영 지원 자원봉사자 모집(~3/30)

서울청소년문화교류센터
...
마감 O일전 ~ 24.03.30

[수원시청소년청년재단 영통청소년문화의집] 청소년 대상 멘토링 '청년멘토단' 모집

수원시청소년청년재단 영통청소년문화의집
스토리

두근두근 첫 출근

(주) 풀무원 분위기 어때요?

(주) 풀무원, 어떤 생각을 할까?

2020. 03. 30. 조회수 617

풀무원, 라이프 스타일 디자이너가 되다

바른먹거리와 건강생활을 접목시켜 서비스하는 ‘커뮤니티센터’를 소개합니다 # 위례신도시에 살고 있는 유가람씨 가족은 최근 아파트 단지 내에서 보내는 시간이 부쩍 늘었다. 굳이 아파트 밖으로 나가지 않아도 균형 잡힌 영양식단의 식사, 전문가가 함께하는 운동, 여가생활 등 생활에 필요한 부분을 해결할 수 있기 때문이다. ▲위례신도시 자연앤래미안e편한세상 입주민 유가람씨 가족의 주말 일상  흔히 신도시에 들어선 아파트는 개인적이고 삭막한 주거 공간으로 인식되곤 합니다. 현대인들은 집에서 보내는 시간이 적고, 집에 오더라도 옆집에 누가 사는지도 모르고 이웃과 교류하지 않는 경우가 많습니다. 최근 트렌드로 자리잡은 혼밥, 혼술 문화의 장점도 많지만 함께 모여 식사하는 문화를 중시하는 우리 사회의 ‘정’ 문화와는 다소 이질적인 모습을 보이기도 합니다.    풀무원은 ‘커뮤니티센터’에 주목했습니다.헬스장이나 주민편의시설을 운영하는 아파트 커뮤니티센터는 많습니다.하지만 풀무원은 일반적인 커뮤니티센터와는 달리 바른먹거리와 건강한 생활을 접목시켜 서비스하는 ‘커뮤니티센터’ 운영을 해보면 어떨까? 생각했습니다. 그 첫번째 시도가 ‘자연앤래미안e편한세상’ 커뮤니티센터로 풀무원 계열의 생활서비스 전문기업 이씨엠디가 맡아 운영하고 있습니다. 위탁급식과 쇼핑몰, 공항, 호텔 등 식음 시설을 위탁 운영하고 있는 이씨엠디가 보유한 전문성과 오랜 노하우를 통해 ‘자연앤래미안e편한세상’ 입주민에게 ‘이웃끼리 소통하고 함께하는 공간, 더 살기 좋은 생활 주거 환경을 제안하고 있습니다. ‘자연앤래미안e편한세상’ 커뮤니티센터 운영은 입주민의 실생활 가까이에서 로하스 생활을 할 수 있도록 돕는 것으로 이씨엠디의 전문 인력들이 곳곳에 배치되어 운영되고 있습니다.  ▲ ‘자연을 담은 식탁’ 입구  자연앤래미안e편한세상 커뮤니티센터는 2•1•1 식단을 제공하는 ‘자연을 담은 식탁’ 과 헬스장/골프장, 독서실, 도서관, 티카페, 사우나, 게스트하우스 등을 이용할 수 있는 ‘웰니스센터’로 구성되어 있습니다.  ▲ ‘웰니스센터' 전경  바른먹거리를 제공하다 바쁜 현대인들은 식사를 제대로 하기 어렵습니다. 아침은 거르기 일쑤, 저녁은 자극적인 외식을 많이 하게 됩니다.  ▲‘자연을 담은 식탁’의 메뉴(좌), 매일 아침, 점심, 저녁 다른 메뉴를 선보인다. 샐러드바(우)를 운영하여 야채와 과일 등을 충분히 섭취할 수 있다  ‘자연을 담은 식탁’은 입주민들을 대상으로 건강한 식재료와 로하스 식사법을 통한 건강생활과 소통을 위해 조성된 공간입니다. 맞벌이 부부, 독거노인, 아침을 거르는 아이들이 바른먹거리와 건강한 생활 습관을 가질 수 있도록 돕고, 나아가 이웃간의 소통을 이끌어 내기 위해 마련됐습니다.  ▲‘자연을 담은 식탁’ 입구(좌), 다양한 풀무원 제품도 만날 수 있다(우)  ‘자연을 담은 식탁’에서는 매일 새로운 메뉴로 삼시세끼를 제공하며 충분한 야채섭취와 염도를 낮춘 저염식을 지향합니다. 식단은 풀무원의 바른먹거리 식생활 원칙을 반영한 ‘2•1•1식사법’으로 구성됩니다. ‘2•1•1 식사법’은 풀무원이 한국인의 식생활과 영양 균형을 고려해 채소, 단백질 식품, 통곡물을 2:1:1의 비율로 맞춰 고안해 낸 방법입니다.  ▲음식을 담아주는 직원 모습  특히 외식을 하면서 가장 걱정하는 부분인 위생도 특별히 신경 쓰고 있습니다. 위생모 착용은 기본, ‘풀무원 더스킨’ 매트와 청소용품을 사용하여 청결하게 관리하고 있습니다. ‘풀무원 더스킨’은 미세먼지, 황사, 알레르기 유발물질 등으로부터 가족의 건강을 지키는데 도움을 주는 청소 용품 브랜드입니다. ‘자연을 담은 식탁’에서는 눈에 보이지 않는 더러움까지 없애는 등 입주민들의 건강을 위해 노력하고 있습니다.   ▲‘자연을 담은 식탁’ 내 킨포크식 롱테이블  소통의 공간을 제공함으로써 이웃간의 단절 문제도 해결하고자 했습니다. ‘자연을 담은 식탁’ 에는 기본적인 4인, 1인 테이블 외에도 킨포크식 롱테이블이 자리잡고 있습니다. ‘자연을 담은 식탁’ 에서는 서로 잘 모르는 이웃끼리 한 테이블에서 함께 식사하며 일상을 공유하고 대화 하는 것이 자연스러운 풍경이 됐습니다. 같은 아파트 입주민으로서 공통의 이야기가 생성되며 자연스럽게 사랑방 같은 공간으로 자리잡았습니다.  ▲ 치카치카존에 준비된 양치 용품  ‘자연을 담은 식탁’ 한켠에는 치카치카존이 마련되어 있습니다. 치약 및 칫솔 등을 준비해 식사 후 바로 양치하는 위생 습관을 유도하고 있습니다. 특히 아이들의 양치습관을 기를 수 있어 부모님들에게 긍정적으로 평가 받고 있습니다.  ▲ 이용객 대상 만족도 평가  이용객들의 만족도도 높습니다. ‘자연을 담은 식탁’ 에서 제공하는 음식은 짜고 자극적인 외부 음식에 비해 ‘집밥’을 먹는 것 같다는 의견이 많습니다. 입주민을 대상으로 실시한 건강 기여도 설문에서도 71% 이상이 긍정적이라고 답하기도 했습니다.  ▲ ‘GAP WEEK’ 이벤트 진행 모습 이 밖에도 ‘자연을 담은 식탁’에서는 ‘2•1•1 식사 실천 캠페인’, ‘알맞은 밥량 맞추기’, ‘미각테스트’, ‘GAP WEEK’ 이벤트 등 입주민을 대상으로 건강한 먹거리에 대한 이해와 올바른 식습관 형성을 위한 다양한 무료 교육과 이벤트도 진행하고 있습니다. ‘자연을 담은 식탁’은 자연앤래미안e편한세상 입주민을 위한 공간이지만 아파트 상가 내에 위치해 있어 일반인도 이용할 수 있습니다. 위례신도시에 거주하는 주민들도 편안하게 들를 수 있는 지역 맛집으로 자리잡고 있습니다.  주민 건강을 챙기다 ▲ 헬스장에서 운동하고 있는 입주민  단지 안에 위치한 ‘웰니스센터’는 건강한 생활과 여가를 함께 누릴 수 있는 복합 공간입니다. ‘웰니스센터’는 헬스장/골프장, 독서실, 도서관, 티카페, 사우나, 게스트하우스로 등으로 운영되고 있습니다.  ▲ 헬스케어실에서 혈압을 측정하고 있는 입주민, 전문트레이너가 상주하여 체계적인 관리를 받을 수 있다  헬스장 내에는 헬스케어실도 운영하여 입주민들의 건강 관리를 돕고 있습니다. 입주민들은 체성분, 혈압, 신장 등 건강정보를 지속적으로 체크하고 관리할 수 있는 서비스를 받을 수 있습니다.  ▲ 헬스장 전경(좌) 및 GX 프로그램(우)  헬스장에는 최신 시설의 운동기기가 마련되어 있고, 전문 트레이너가 상주하고 있어 입주민의 운동과 건강 관리를 돕고 있습니다. 그 외에도 요가, 에어로빅, 스트레칭, 필라테스 등 다양한 세대를 고려한 GX(Group Exercise)프로그램을 운영하고 있습니다. 특히 GX프로그램의 하나인 줌바 댄스의 경우 같은 단지 내에 거주하는 입주민이 강사로 활동하고 있습니다.  ▲ 골프장 전경  골프 연습시설도 갖추고 있어 아직까지 고급스포츠로 인식되고 있는 골프를 저렴한 가격에 배우고 연습할 수 있습니다. 이 외에도 사우나 및 샤워시설 등 외부 휘트니스 센터에 뒤지지 않는 편의시설을 보유하고 있습니다.  여가를 즐기다 ▲ 도서관(좌) 및 독서실(우)  운동 시설뿐만 아니라 여가 생활을 위한 공간도 조성되어 있습니다. 도서관은 입주민을 대상으로 도서를 대출해주며, 독서실은 깨끗한 환경으로 쾌적한 면학환경을 제공하고 있습니다.  ▲ 서고에 비치된 입주민 기증 도서  도서관은 오픈 후 입주민의 적극적인 참여로 약 4,000권의 도서를 기증받았으며, 주민 주도로 독서 모임도 진행되고 있습니다. 특히 기부자의 메시지를 게시판을 통해 공유함으로써 입주민간의 소통의 기회를 만들었습니다. 독서실도 단지 내에 있어 늦은 시간까지 공부하는 학생들이 안전하게 귀가할 수 있어 인기가 높습니다. 이 밖에도 단지 내 보육시설인 아이룸에서는 풀무원의 공유가치창출(CSV) 차원에서 아이들에게 올바른 식습관을 길러주는 바른먹거리 교육, 구강건강을 위한 치카치카 교육 등 무료 교육 프로그램을 제공할 계획입니다.  ▲ 티카페 전경(좌), 티카페에서 시간을 보내는 입주민(우)  ‘웰니스센터’의 중심에 자리한 티카페는 입주민들의 쉼터 역할을 하는 공간 입니다. 굳이 아파트 밖으로 나가지 않아도 단지 내 카페에서 맛있는 커피와 음료를 즐길 수 있습니다. 커뮤니티센터 회원에 등록한 입주민이라면 누구나 천원~이천원의 저렴한 가격에 음료 구입이 가능합니다. 티카페에서는 입주민들이 삼삼오오 모여 담소를 나누고 휴식을 취하는 모습을 볼 수 있습니다.  ▲ 게스트하우스 입구(좌), 게스트하우스를 둘러보는 입주민(우)  단지 내에 게스트하우스도 운영하여 친척이나 친구 등 지인이 방문했을 때 편안하게 쉴 수 있는 공간을 제공하고 있습니다. 게스트하우스는 입주민의 신청을 통해 저렴하게 이용할 수 있어 인기가 높습니다.  자연앤래미안e편한세상 커뮤니티센터의 모든 시설은 입주민 회원 등록을 통해 이용 가능합니다. 헬스장, 티카페 등 사용료가 필요한 시설의 경우 이용금액이 관리비로 부과 됩니다. 지난 5월 초 오픈한 커뮤니티센터는 운영 초기 임에도 불구하고 전체 1,540세대 중 77.4%인 1,192세대(2,287명)가 회원 등록하는 등 입주민들의 관심과 호응을 얻고 있습니다.  ▲ 티카페에서 음료를 만들고 있는 직원,입주민, 인근지역주민, 경력단절여성 등 지역사회 구성원이 함께 일하고 있다  자연앤래미안e편한세상 커뮤니티센터는 입주민과의 소통을 통해 함께 만들어나가고 있습니다.  이씨엠디는 ‘자연을 담은 식탁’과 ‘커뮤니티센터’를 운영하면서 주민의 의견을 정기적으로 수렴하여 메뉴와 프로그램 등을 개선해 나가고 있습니다. 또한 커뮤니티센터 운영에 필요한 신규 인력을 입주민, 인근지역주민, 경력단절여성을 고용하여 지역사회와 함께하고자 합니다. 직원들도 실제 내가 살고 있는 곳에서 근무할 수 있어 주인의식을 가지고 일하고 있습니다. 앞으로도 풀무원은 바른먹거리와 더불어 건강한 생활을 제안하는 라이프 스타일 디자이너로서 다양한 노력과 도전을 계속할 계획입니다.
2020. 03. 30. 조회수 541

[르포] 바른먹거리 함께 만드는 동반자들과의 만남! '2019 풀무원 베스트파트너스 데이' 현장을 가다!

  지난 21일 서울 강남구 르메르디앙 호텔에서는 '2019 풀무원 베스트파트너스 데이'가 열렸습니다. 풀무원 베스트파트너스 데이는 풀무원이 협력기업을 초청해 감사와 격려의 마음을 전하고 풀무원의 사업방향과 비전을 공유하며 지속가능한 동반성장 실현에 대한 의지를 다지는 행사입니다. 2007년을 시작으로 매년 개최되어 올해로 13년째 진행되고 있습니다.    올해 행사는 협력기업들이 곧 풀무원의 자랑이자 함께 나아가는 동반자라는 의미를 담아 'Proud of U(you)'라는 주제로 진행됐습니다. 풀무원식품과 푸드머스의 60개 협력기업 대표 및 임직원을 비롯해 풀무원 이효율 총괄CEO, 풀무원식품 박남주 대표, 푸드머스 윤희선 대표 등 약 100여 명이 한 자리에 모여 서로에 대한 감사의 마음을 전하고 화기애애한 대화를 나눴습니다.    본격적인 행사에 앞서 풀무원과 협력기업들이 함께 성장해 온 여정을 샌드아트로 표현한 영상을 시청했습니다. 작은 씨앗이 비바람을 맞으면서도 성장해 큰 나무가 되고, 또다른 씨앗이 생명의 근원인 땅과 자연을 보살피며 성장해 두 나무가 하나가 되는 연리지를 형성하는 모습을 그려내 풀무원과 파트너들의 동반성장해 온 과정을 감동적으로 연출했습니다.    이효율 풀무원 총괄CEO는 행사를 시작하는 인사말에서 "창사 35주년을 맞은 풀무원이 한국을 대표하는 바른먹거리, 로하스기업으로 성장할 수 있었던 것은 협력기업들의 아낌없는 도움과 성원 덕분"이었다며 감사의 마음을 먼저 전했습니다.    또한 "풀무원이 35년간 성장하면서 협력기업들의 매출비중도 매년 이에 비례하여 증가하고 있다"며 "협력기업들과 함께 기업경쟁력을 강화하여 공동의 성과 창출을 통한 지속가능성장을 실현할 수 있도록 다양한 신규 지원 프로그램을 도입할 것"을 약속했습니다.    환영 인사 뒤에는 행사에 참가한 협력기업 대표들의 답사가 이어졌습니다. 풀무원 국산콩 무농약 콩나물을 생산하는 강화도 우리마을의 원장, 이대성 성공회 신부는 풀무원이 펼쳐온 동반성장 노력에 감사의 인사를 전했습니다. 또한 기업을 세포나 나무 등의 생명체에 비유하여 상호협력이 도덕적인 측면에서뿐 아니라 장기적이고 지속가능한 발전을 위한 생존 전략의 측면에서도 필수적이라고 강조했습니다.    두번째 답사를 진행한 지엠에프 김호수 대표이사는 2008년 작은 식품 공장으로 시작한 사업이 풀무원과의 만남을 통해 시스템과 설비를 갖추며 성장할 수 있었다고 특별한 감회를 표현하며 든든한 후원자로 성장을 도와준 풀무원에 감사의 마음을 전했습니다.  풀무원의 비즈니스 전략 공유해 장기적 동반성장 위한 공감대 형성 다음으로는 장기적인 성장 방향에 대한 공감대를 형성하기 위해 풀무원의 비즈니스 전략을 공유하는 시간이 이어졌습니다.    박남주 풀무원식품 대표는 SNS 마케팅, 식품 제조기술 지원을 통한 공동 특허출원 등 지원 활동과 제품력 강화를 위해 최신 시장 트렌드를 공유하는 협력기업 워크샵 등 다양한 노력을 통해 협력기업과의 공동 성장을 위해 노력하고 있으며 풀무원식품과 협력기업 생산 매출이 매년 지속적으로 함께 높아져 왔다고 설명했습니다.    또한 전체 식품시장이 저성장 시대를 맞았음에도 성장세를 이어 가고 있는 HMR 시장에 집중하여, 식물성 단백질, Low GL, 동물복지 등 풀무원만의 차별적 가치를 담은 새로운 콘셉트와 유형의 신제품으로 빠르게 변화하는 식품 트렌드에 대응할 예정이라고 밝혔습니다. 이와 같은 목표를 위해 협업 강화, 공동 투자 등 제품 차별화 및 경쟁력 강화를 통해 지속가능한 동반 성장의 기반을 함께 만들어 갈 것을 약속했습니다.    다음으로 발표에 나선 윤희선 푸드머스 대표는 전국 27,000여 개 어린이집, 학교, 오피스, 병원, 요양시설 등에 대한 공급, 공정거래위원회 및 한국소비자원 주최 CCM(소비자 중심경영) 5회 연속 인증, 최신 주문 시스템 등 협력기업과 함께 이뤄 낸 성과들을 소개했습니다. 앞으로 B2B 제조식품군에서의 적극적인 FRM(Fresh Ready Meal) 영역 확장, 고령친화식품 인증 제품 출시를 통한 시니어 시장 선점, 철저한 위해 식재 관리 강화 등을 목표로 두고 협력기업과 함께 바른먹거리 가치 기반의 동반성장을 추진할 것이라고 전했습니다.    이상부 풀무원 전략경영원장은 그동안 협력기업 경쟁력 강화를 위해 진행됐던 다양한 상생협력 프로그램의 성과와 앞으로의 추가적 계획을 소개했습니다. 풀무원은 식품 컨퍼런스, 품질공정혁신 세미나 등 등 훈련∙교육 프로그램, 풀무원 연구원 파견∙지원, 공장 확장/시설 투자/원료 구매 등을 위한 금융 지원, 상생결제시스템을 통한 대금지급 확대 등 협력사와의 동반성장을 위해 다양한 노력을 펴 왔으며, 앞으로는 식품안전 역량강화, 상생협력펀드 조성, 건강검진 복리후생 지원, CCM(소비자중심경영) 인증, CP(공정거래자율준수) 도입 시 컨설팅 지원 등 신규 프로그램을 추가로 도입할 예정이라고 발표했습니다.  다양한 이벤트로 화기애애한 분위기 연출된 소통의 장   묵직한 주제의 발표가 이어진 뒤 분위기를 환기시키기 위한 깜짝 퀴즈 이벤트가 열렸습니다. 이번 행사의 연혁과 주제, 앞서 발표됐던 풀무원의 비즈니스 전략과 관련된 간단한 문제들이 나갔고 이를 맞히신 분들께 작은 선물을 전했습니다.    다음으로는 서용구 숙명여자대학교 경영학과 교수가 '풀무원과 미래경영'을 주제로 과거에 비해 낮아진 경제 성장의 가능성과 그로 인해 변화된 새로운 경제적 가치관과 소비 패턴, 그에 따라 기업이 추구해야 할 전략을 소개했습니다. 참석자 대다수가 기업을 경영하는 입장에 있는 행사였기에 어려운 주제였음에도 집중도 높은 경청의 분위기 속에 강연이 진행됐습니다.     점심 식사 시간에도 진정성 있는 대화를 통한 소통의 시간이 이어졌습니다. 초청 협력기업 측에서 건배를 제의하기도 하고 자리를 오가며 인사를 건네는 파티 분위기가 자연스럽게 연출됐습니다.     식사가 끝나고 우수 협력기업에 대한 시상이 진행됐습니다. 신제품 공헌, 기술혁신, 원가혁신, 품질혁신, 환경안전, 특별상 등 6개 부문에서 푸르온, 이든푸드, 세진식품, 동진기업, 으뜸농산, 광복농산, 모닝후루츠, 지엠에프, 하귀농협 등 9개 협력사가 선정되어 감사패와 상금을 전달했습니다.     이어진 축하공연으로 행사장 분위기는 한층 흥겨워졌습니다. 여성 팝페라 그룹 하니엘(HANIEL)이 무대에 올라 누구나 함께 즐길 수 있는 유명 뮤지컬, OST, 가요, 팝 등 다양한 장르의 곡에 퍼포먼스를 더해 화려한 공연을 선보였습니다.    클래식, 미술, 무용 등 고전예술을 통칭하는 오페라와 현대 대중문화를 상징하는 드라마, 양 극단의 문화장르를 융합한 '오페라마(Operama, Opera+Drama)' 공연도 펼쳐졌습니다. 순수예술과 콘텐츠 융합 전문가인 정경 국민대학교 교수가 스토리텔링을 덧붙인 생생한 성악 공연으로 베토벤의 생애와 음악을 알기 쉽게 전했습니다.    뜻깊은 만남의 자리에 더 큰 의미를 부여해 줄 기부 행사도 진행되었습니다. 광복농산, 시아스, 세진식품, 푸르온, 이든푸드, 우천식품, 덕산식품 등 7개 협력기업과 풀무원이 각 협력기업의 대표 제품을 모았고, 자선단체인 굿네이버스와의 협약을 통해 결식아동 100명에게 바른먹거리를 전달했습니다.    전달식 뒤에는 기부의 활동의 의미를 더욱 키울 수 있는 공연이 이어졌습니다. 발달장애와 자폐장애를 지닌 아이들로 구성된 다원 플루트 앙상블이 무대에 올라 아름다운 선율로 행사장을 가득 채웠고, 연주가 끝나자 뜨거운 박수가 쏟아졌습니다.     이날 행사는 풀무원과 협력기업들이 맺어 온 끈끈하고 탄탄한 협력 관계의 의미를 되새기는 엔딩 영상, '당신이 자랑스럽습니다'와 단체 사진 촬영을 통해 마무리되었습니다.     우리나라에서 동반성장과 상생이 화두로 떠오른 것은 2010년 동반성장위원회가 출범하고 나서부터입니다. 하지만 이웃사랑과 생명존중을 핵심 정신으로 삼아 태동한 풀무원은 그에 훨씬 앞서 공정한 거래 문화 조성 및 동반성장을 위한 프로그램을 실천해 오고 있습니다. 상호 협력을 통해 경쟁력을 강화한 협력기업의 성장이 풀무원의 성장으로 이어지고, 풀무원의 성장이 다시 협력기업의 성장과 발전으로 이어지는 아름다운 선순환 구조가 더 널리 정착되길 기대해 봅니다.  

(주) 풀무원 공고 확인하셨나요?

스펙쌓기

마감 직전 공모전

...
마감 O일전 ~ 24.03.30

2024 부활절 퍼레이드 어린이 미술대회 모집

한국교회총연합 / CTS기독교TV / CTS문화재단
...
마감 O일전 ~ 24.03.30

책도 무료로 주는 독서 에세이 공모전(~3/30)

강물이바다에게
...
마감 O일전 ~ 24.03.31

2024 광양시 캐릭터 매돌이 인스타툰 공모전

광양시
...
마감 O일전 ~ 24.03.31

2024년 생물다양성 TNFD 대국민 아이디어 공모전

ESG Youth Forum

오늘의 스택 Slack 팔로우

직군에서 많이 쓰는 툴입니다. 직군 설정하기

Slack 쓰는 팀

Slack 활용기

2019. 05. 09. 조회수 2439

Node 서버로 Slack 메신저 자동화하기

Overview백엔드 업무를 하면 데이터 요청과 CS문의를 자주 받습니다. 날짜만 다를 뿐 같은 유형의 문의가 대부분이죠. 결국 반복적인 업무를 효율적으로 처리할 수 있는 방법을 고민했고, 사내 메신저로 사용하는 Slack의 몇 가지 API를 사용하기로 했습니다.1. 알림봇 만들기비즈니스 로직을 만들다 보면 정해진 시간에 맞춰 작업을 해야 하는 경우가 발생합니다. Slack 메신저에 로그온한 상태에서 스케줄러를 이용해 지정한 시간에 Slack 메세지를 전송해보겠습니다.1)Slack API 유저토큰 받기Slack API에 사용할 해당 계정의 토큰을 받아야 합니다. Slack 가입 절차 및 채널 생성은 생략하겠습니다.https://api.slack.com/custom-integrations/legacy-tokens 접속합니다.Legacy tokens 메뉴에서 아래로 스크롤을 내려 토큰 생성버튼을 누릅니다.계정 패스워드를 입력하여 확인하면 토큰을 생성할 수 있습니다.생성된 토큰을 복사하여 저장합니다.2)Node.js를 이용한 알림봇 구현2-1.Node.js 설치Node.js 다운로드 해당 사이트에서 운영체제 환경에 맞는 파일을 다운받아 설치2-2.프로젝트 생성해당 프로젝트 폴더로 이동 후 명령어 실행$ npm init --yes // package.json 파일 생성2-3.Slack 연동2-3-1. slack-node 모듈 설치$ npm install slack-node --save2-3-2. 유저토큰을 이용하여 해당채널에 메세지 전송const Slack = require('slack-node'); // 슬랙 모듈 사용 apiToken = "발급받은 유저토큰"; const slack = new Slack(apiToken); const send = async(message) => { slack.api('chat.postMessage', { username: 'dev-test', // 슬랙에 표시될 봇이름 text:message, channel:'#general' // 전송될 채널 및 유저 }, function(err, response){ console.log(response); }); } send('메세지 내용'); 지정한 채널에 메시지가 발송됩니다. 하지만 이와 같은 방법은 유저 토큰이 공개 코드에 노출되기 때문에 보안이 취약할 수 있습니다. 유저 토큰이 필요 없어도 해당 채널에 URL을 생성하는 WebHooks API를 이용하여 메시지를 전송해보겠습니다.3) Incoming WebHooks APIWebHooks는 유저 토큰 대신 Webhook URL을 생성해 HTTP 통신으로 Slack 메세지를 전송할 수 있습니다. 다양한 메시지 형식을 지원하고 게시할 사용자 이름 및 아이콘 등을 통합적으로 관리할 수 있는 장점을 가지고 있습니다.3-2. Webhook URL 생성하기Slack 해당채널에서 Add an app 클릭검색필터에 WebHooks 검색Incoming WebHooks 추가채널 선택 후 Incoming WebHooks 생성생성된 Webhook URL 복사하여 저장해당채널에 생성되었는지 확인봇이름 및 아이콘등 기본 설정 변경하여 저장curl 사용 예제$ curl -s -d "payload={'text':'메세지 내용'}" "Webhook URL"Webhook URL 사용 중인 모든 메시지는 통합적으로 기본 설정이 변경된 걸 확인할 수 있습니다.다양한 형식의 메세지를 전송해보겠습니다.const Slack = require('slack-node'); // 슬랙 모듈 사용 const webhookUri = "Webhook URL"; // Webhook URL const slack = new Slack(); slack.setWebhook(webhookUri); const send = async(message) => { slack.webhook({ text:"인터넷 검색 포털 사이트", attachments:[ { fallback:"링크주소: ", pretext:"링크주소: ", color:"#00FFFF", fields:[ { title:"알림", value:"해당링크를 클릭하여 검색해 보세요.", short:false } ] } ] }, function(err, response){ console.log(response); }); } 다양한 형태의 메시지를 전송할 수 있습니다.4) Schedule 연동이제 스케줄러를 이용하여 지정한 시간에 메세지를 전송해보겠습니다.4-1. node-schedule 모듈 설치node-schedule는 Node.js 작업 스케줄러 라이브러리입니다.$ npm install node-schedule --savenode-schedule 코드 작성const schedule = require('node-schedule'); // 스케줄러 모듈 사용 // rule-style 사용 var rule = new schedule.RecurrenceRule(); rule.dayOfWeek = new schedule.Range(3,4); rule.hour = 19; rule.minute = 50; schedule.scheduleJob(rule, function(){ console.log('rule 방식'); }); // cron-style 사용 schedule.scheduleJob('50 19 * * *', function(){ console.log('cron-style 방식'); }); 취향에 맞는 스타일로 사용하면 됩니다.5) 지정 시간에 메세지를 전송하는 알림봇을 작성해보겠습니다.const Slack = require('slack-node'); // 슬랙 모듈 사용 const schedule = require('node-schedule'); // 스케줄러 모듈 사용 const webhookUri = "Webhook URL"; // Webhook URL const slack = new Slack(); slack.setWebhook(webhookUri); const send = async(message) => { slack.webhook({ text:message, attachments:[ { fallback:"구글드라이브: ", pretext:"구글드라이브: ", color:"#00FFFF", fields:[ { title:"[알림]", value:"해당링크로 접속하여 작성해 주세요.", short:false } ] } ] }, function(err, response){ console.log(response); }); } schedule.scheduleJob('5 19 * * *', function(){ send('업무보고 보내셨나요?'); }); 업무보고 시간을 미리 알려주는 알림봇2. 대화봇 만들기업무 문서는 주로 구글 독스와 같은 온라인 문서로 관리하고 있습니다. 하지만 매번 구글 드라이브에서 문서를 찾는 건 정말 귀찮은 일입니다. 번거로운 건 딱 질색입니다. Slack API를 이용해 관련된 키워드를 입력하면 링크 주소를 바로 받을 수 있는 대화봇을 만들어 보겠습니다.1) Slack API Bots 토큰 받기Slack API에 사용될 Bots 토큰을 받아야 합니다.https://{App Name}.slack.com/apps 에 접속합니다.Bots 추가Bots Api 토큰을 복사해 저장합니다.설정한 봇이름으로 Apps 영역에 자동으로 추가됩니다.2) 구글독스 대화봇 코드 작성2-1. botkit 모듈 설치$ npm install botkit --save2-2. 코드 작성const botkit = require('botkit'); // 봇 모듈 사용 const Slack = require('slack-node'); // 슬랙 모듈 사용 const controller = botkit.slackbot({ debug: false, log: true }); const botScope = [ 'direct_message', 'direct_mention', 'mention' ]; controller.hears(['업무보고'], botScope, (bot, message) => { bot.reply(message, '업무보고 링크주소'); }); controller.hears(['가이드', 'guide', '튜토리얼'], botScope, (bot, message) => { bot.reply(message, '가이드 링크주소'); }); controller.hears(['api', '명세서'], botScope, (bot, message) => { bot.reply(message, 'api명세서 링크주소'); }); controller.hears(['일정', '일정관리'], botScope, (bot, message) => { bot.reply(message, '일정관리 링크주소'); }); controller.hears(['비품', '비품정리'], botScope, (bot, message) => { bot.reply(message, '비품관리 링크주소'); }); controller.spawn({ token: '발급받은 봇 토큰' }).startRTM(); 지정한 키워드를 입력하면 해당 링크가 수신 됩니다.3) 데이터문의 대화봇 코드 작성데이터 요청 시 결과 데이터를 보내주는 대화봇을 만들어 보겠습니다. 일단 먼저 데이터문의 전용 Bots을 생성합니다.3-1. Python 연동 요청한 데이터는 Mysql 데이터를 조회해서 전송합니다. 그러면 Mysql 을 연동해야겠죠? Node.js에서도 직접 mysql 연결할 수 있지만, 기존 프로젝트가 Python으로 구현되어 있어 Python을 실행해 필요한 데이터를 추출해보겠습니다.3-2. python-shell 모듈 설치Node.js에서 Python 실행가능하도록 모듈을 설치$ npm install python-shell --save3-3. Mysql Sample Table3-4. 회원테이블에 저장된 가입일시 기준으로 몇일전에 가입한 회원을 추출하여 전송하는 코드 작성해 보겠습니다.const botkit = require('botkit'); // 봇 모듈 사용 const Slack = require('slack-node'); // 슬랙 모듈 사용 const ps = require('python-shell'); // 파이썬 쉘 모듈 사용 // 몇일 전 날짜 구하기 function getDaysAgo(dayNo = 0) { let nowDate = new Date(); let tempDate = nowDate.getTime() - (dayNo * 24 * 60 * 60 * 1000); nowDate.setTime(tempDate); let getYear = nowDate.getFullYear(); let getMonth = nowDate.getMonth() + 1; let getDay = nowDate.getDate(); if (getMonth < 10 xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed> 3-5. Python 코드 작성 # -*- coding: utf-8 -*- import sys import pymysql // mysql 접속 db = pymysql.connect('hostname', user='', passwd='', db='', charset='utf8') cursor_db = db.cursor() exe_query = "SELECT MEMBER_NAME FROM MEMBER_INFO WHERE MEMBER_REGIST_DETE >= '{}' ORDER BY MEMBER_NO ASC ".format(sys.argv[1]) cursor_db.execute(exe_query) all_rows = cursor_db.fetchall() for idx, row in enumerate(all_rows): print(row[0])     지정한 며칠 전에 가입한 회원 이름이 전송됩니다.   로그도 정상적으로 출력됩니다. 3. Node.js 프로세스 관리를 위한 pm2 모듈 설치 Node.js 는 비동기 I/O를 지원하며 단일 스레드로 동작하는 서버입니다. 비동기식 방식이지만 처리하는 Event Loop는 단일 스레드로 이루어져 있어 처리 작업이 오래 걸리면 전체 서버에 영향을 줍니다. 그래서 pm2를 이용해 프로세스별로 상태를 관리해야 합니다. 1) pm2 모듈 설치$ npm install pm2 -g2) 자주사용하는 pm2 명령어 pm2 list -> 실행중인 프로세스 확인pm2 start {node 파일} -> 시작pm2 stop {id or App name} -> 중지pm2 delete {id or App name} -> 삭제pm2 show {id or App name} -> 상세정보pm2 restart {id or App name} -> 재시작pm2 kill -> pm2 종료pm2 logs {id} -> id 앱의 로그 확인 3) pm2 실행화면$ pm2 start bot.js   프로세스별로 앱 이름, 버전, 상태, cpu 및 memory 사용량이 표시됩니다.$ pm2 show 0   해당 프로세스의 상세 정보를 확인할 수 있습니다. Conclusion 지금까지 Node.js 로 유용한 Slack 메신져 API를 알아봤습니다. 반복적인 업무를 하나씩 줄이다 보면 분명 일의 능률을 높아집니다. 하지만 무분별한 자동화는 서버의 부하를 증가시키기 때문에 꼭 필요한지 확인하고 선택하길 바랍니다. 오늘은 여기까지 글곽정섭 과장 | R&D 개발1팀kwakjs@brandi.co.kr브랜디, 오직 예쁜 옷만  
2019. 01. 31. 조회수 2827

리디북스 서비스 장애 복구 후기

지난 8월 26일에는 약 21분간 리디북스 서비스 전체가 중단되는 장애가 있었습니다.사실 서버 스택 일부에만 영향을 주는 장애는 눈에 잘 띄지 않지만 꽤 흔하게 발생하는 일입니다. 기기 1대당 외부적인 요인으로 인한 장애가 평균 2년에 1번 발생한다고 가정하면, 서버가 100대 있을 때는 대략 1주일에 1번꼴로 장애가 발생하는 셈입니다.이런 형태의 장애는 서버 스택의 한 곳에서만 발생하므로, 이중화 혹은 클러스터링을 통해서 극복하곤 합니다. 또한 원인이 명확하므로 해당 기술에 대한 이해도가 높다면 비교적 빠른 시간 내에 복구가 가능합니다.그러나 이번에 리디북스가 경험한 장애는 달랐습니다. 현재 리디북스는 2개의 데이터센터와 클라우드에 인프라가 분산되어 있는데, 이 중에서 1차 데이터센터의 전원 공급에 문제가 생겨 특정 서버 랙에 있는 서버 17대가 동시에 내려간 것입니다. 즉, 소프트웨어나 머신의 물리적인 장애가 아닌, 데이터센터의 장애였습니다. AWS로 비유를 하자면 가용 영역(Availability Zone)의 장애라고 할 수 있겠습니다.원인에 대해이번 장애의 근본적인 원인은 데이터센터가 전원을 정상적으로 공급해주지 못한 것입니다. 물론 데이터센터 혹은 클라우드 서비스(IaaS)는 고객사에게 전원과 네트워크를 안정적으로 제공해주어야 하는 의무가 있습니다.하지만 이들 역시 천재지변이나 사람의 실수에 대한 대비가 100% 완벽할 수는 없습니다. 따라서 이러한 점을 사전에 고려하고 인프라를 설계하지 못한 것이 2차적인 원인입니다.이번 계기를 통해 데이터센터 이중화를 계획하게 되었고, 사용 중인 클라우드 역시 지역(Region) 전체에 장애가 생길 경우에 대한 대비가 되어있지 않아, 이번 계기로 복제 계획(Geo-Replication)을 세우게 되었습니다.구체적인 상황당시 전원이 차단되어 강제 종료된 서버들은 아래와 같습니다.데이터베이스 프록시 x 2메인 리버스 프록시 x 1읽기 분산용 MySQL 슬레이브 x 1서점용 웹 서버 x 3추천 알고리즘 API 서버 x 1알림센터 API 서버 x 2메인 스토리지 서버 x 2출판 플랫폼용 데이터베이스 x 2테스트 및 배치 작업용 서버 x 3그림으로 표현해 보자면, 대략 아래와 같은 상황에서… 아래와 같은 상황이 된 셈입니다.서버 스택의 여러곳에 순간적으로 장애가 발생한 상황공인 IP가 할당된 메인 프록시 서버 중 1대가 내려갔지만, 실제로는 아래와 같이 가상 IP로 구성을 한 상태였기 때문에 대기 중인(stand-by) 프록시가 동작하여 곧 서점에 장애 공지를 띄울 수 있었습니다.[이미지 출처: DigitalOcean™]공지 이후의 움직임우리는 데이터센터의 복구 시점을 명확히 알 수 없어서 신규 구축(provisioning)을 시작함과 동시에, 서버들의 물리적인 위치 이동을 고려하고 있었습니다. 그러나 다행히 10분이 지난 시점에서 전원 문제는 해결되었고, 서버들은 순차적으로 부팅이 완료되었습니다.일부 서버들은 부팅 과정에서 예상치 못한 지연이 발생하기도 하였지만, 모든 서버의 부팅이 완료된 이후에도 서비스는 완전히 정상으로 돌아오지 않았습니다. 당시 우리가 겪었던 문제와 해결책은 아래와 같습니다.A. 읽기 분산용 MariaDB 슬레이브의 복제 지연(replication lag) 문제슬레이브 서버의 부팅이 완료되자 데이터베이스 프록시(HAProxy)는 해당 서버를 정상으로 간주하여 라우팅 대상에 포함하게 되었고, 애플리케이션 서버들은 정상적으로 커넥션을 맺기 시작하였습니다. 하지만 해당 슬레이브는 수십 분간 마스터를 따라잡지 못한 상태였기 때문에 최신 데이터가 보여지지 않는 문제(stale data)가 있었습니다. 우리는 즉시 해당 슬레이브를 제거하였고 지연이 사라진 이후에 다시 서비스에 투입하였습니다.B. 읽기 분산용 슬레이브의 웜업(warm-up) 문제복제 지연은 사라졌지만 서버의 CPU 사용량이 크게 높은 상태가 한동안 유지되었고, 응답속도는 정상적인 슬레이브에 비해서 많이 느렸습니다. 왜냐하면 캐시가 비워진 상태에서 바로 서비스에 투입되어, 캐시 미스가 휘몰아치는 현상(cache stampede)이 발생하였기 때문입니다. 따라서 간단한 쿼리도 평소보다 오래 걸렸고, 그대로 둔다면 커넥션풀이 꽉 차는 현상이 발생할 것으로 예상되었습니다.곧 우리는 HAProxy로 해당 서버의 가중치를 10%로 낮추어 인입되는 쿼리의 양을 조절하였으며 응답속도는 정상 수치로 돌아오게 되었습니다. 이후 스크립트를 작성하여 수동으로 캐시를 채워나감과 동시에 점차 가중치를 높여 처리량을 정상화하였습니다.프로덕션에서 사용하는 서버는 innodb_buffer_pool 이 100G 이상으로 매우 크게 설정되어 있으며, 재시작 시 캐시가 날아가는 현상을 해결하기 위해 innodb_blocking_buffer_pool_restore 옵션을 적용하고 있습니다. 하지만 지금처럼 메모리를 덤프하지 못하고 비정상 종료가 된 상황에서는 해당되지 않았습니다.C. 인메모리 데이터의 보존 문제알림센터는 다양한 프로모션과 개인화된 정보를 전달해주는 공간입니다. 알림센터의 특징은 데이터의 영구 보존(persistency)이 필요하지 않고, 매일 수백만 건의 개인화된 메시지가 기록된다는 것입니다. 이러한 특징은 인-메모리 데이터베이스에 적합하므로 우리는 Redis를 마스터/슬레이브로 구성하여 저장소로 사용하고 있었습니다.어떠한 이유로든 Redis를 재시작해야 할 경우가 생기면, 메모리 상의 데이터가 날아가는 것을 방지하기 위해 주기적으로 스냅샷을 남기고 있습니다만, 이번에는 로그가 마지막까지 기록되지 못한 상태에서 메모리의 데이터가 날아가 버렸습니다.다행히 알림 발송과 관련된 메타정보는 모두 MariaDB에 기록하고 있으므로, 우리는 이를 기반으로 소실된 시점부터의 알림을 순차적으로 재발송할 수 있었습니다. 물론 모든 알림이 신규 상태로 간주되어 아이콘이 잘못 노출되는 문제가 있었지만, 고객님들은 너그럽게 이해해 주신 것 같습니다. 😅그래서 앞으로는?리디북스 DevOps 멤버들은 이번 데이터센터 장애를 통해 현재 인프라의 한계점을 실감하였고, 앞으로의 개선 방향에 대해 고민하게 되었습니다.몇 가지를 정리하면 다음과 같습니다.랙 단위로 장애가 발생할 수 있음을 인지하고 대비하자.같은 기능을 하는 서버를 하나의 랙이나 같은 가용 영역에 두지 말자.2차 데이터센터는 더 이상 옵션이 아닌 필수다.낙뢰나 지진으로 인해 데이터센터에 문제가 생길 수도 있다.긴급하게 프로비저닝이 필요한 상황에 대비하자.문서화가 되어 있더라도 경험이 없다면 동일한 구성에 많은 시간이 소요된다.모든 구성요소들에 대한 Ansible 스크립트를 작성하여두자.캐시 웜업 스크립트도 작성하여 두자.백엔드 구성요소들 간의 불필요한 의존 관계를 끊자.단 한 줄의 코드라도 참조하고 있다면 이는 독립적인 것이 아니다.언제나 서비스 지향적인 설계를 추구하자.Uptime을 관리하자.최대 180일을 기점으로 무조건 리부팅을 하자.재시작 과정에서 다양한 문제와 개선점이 발견될 것이다.커널 패치, 보안 패치를 할 수 있는 것은 덤이다.아래와 같은 긍정적인 면도 발견하였습니다.장애 상황이 실시간으로 Slack 채널을 통해 전파되었음진행 상황에 대해 모두가 동일한 수준으로 이해할 수 있었다.모니터링 연동(integration) 기능 때문에라도, Slack은 유료로 구매할만한 값어치가 충분하다.같은 기능을 하는 서버들이 다른 랙에 많이 분산되어 있었다.인프라가 확장될 때마다 빈 공간에 필요한 서버를 추가했을 뿐이지만, 자연스럽게 물리적인 위치가 분산되는 효과가 있었다.이 외에도 특정 클러스터를 구성하는 노드들을 분산하여 배치시키자.서버별로 오너쉽이 부여되어 있어서 빠르게 복구가 된 점여러 명의 백엔드 개발자들이 병렬적으로 복구를 진행할 수 있었다.마지막으로넷플릭스의 엔지니어들은 무질서한 원숭이(Chaos Monkey)라는 프로그램을 만들어서 운영한다고 합니다. 이 원숭이는 서비스 인스턴스들을 무작위로 중단시키는 역할을 합니다. 다소 황당하게 들리지만, 넷플릭스에는 일부 서비스에 장애가 발생하더라도 나머지 부분은 문제없이 운영되어야 한다는 원칙이 있으므로, 이를 수시로 시뮬레이션하는 과정을 통해 복구 능력을 높여둔다는 것입니다.실제로 이렇게 급진적인 아이디어를 실천할 수 있는 회사는 매우 드물 것입니다. 하지만, 우리는 이번 계기를 통해 무질서한 원숭이의 필요성을 절감하였고, 이로 인해 서버를 주기적으로 리셋하는 정책을 만들게 되었으며 모든 단일 장애점(SPoF)에 대한 대비를 시작하게 되었습니다.장애를 단순히 피해라고만 생각한다면, 서로를 비난하고 책임을 전가하는 상황이 펼쳐질 것입니다. 하지만 고객의 불편함과 맞바꾼 매우 비싼 경험이라고 생각한다면, 보다 튼튼하고 회복탄력적인 시스템을 갖추기 위해 노력하게 될 것입니다. 그러다 보면 언젠가는 데이터센터 전체에 문제가 생겨도 버틸 수 있는 모습으로 진화할 것이라고 생각합니다.#리디북스 #장애복구 #역경돌파 #개발 #개발후기 #개발자 #서버개발 #서버

기업문화 엿볼 때, 더팀스

로그인

/