스토리 홈

인터뷰

피드

뉴스

조회수 1635

[Tech Blog] PhantomJS를 Headless Chrome(Puppeteer)로 전환하며

버즈빌에서는 모바일 잠금화면에 내보내기 위한 광고 및 컨텐츠 이미지를 생성하기 위한 PhantomJS 렌더링 서버를 다수 운영하고 있습니다. 일반적으로 PhantomJS는 웹페이지 캡쳐에 많이 쓰이지만, 기본적으로 headless하게 웹페이지를 렌더링하고 캡쳐할 수 있다는 특성 때문에 동적인 이미지 생성에도 많이 활용됩니다. 버즈빌의 렌더링 서버는 200개 이상의 컨텐츠 프로바이더로부터 실시간으로 잠금화면 컨텐츠 이미지를 생성하고 있어 분당 수백 건의 이미지를 안정적으로 생성하는 것이 가능해야 합니다.  렌더링 서버의 스케일링 이슈를 해결하기 위해 버즈빌에서는 여러 대의 렌더링 서버를 둬서 횡적으로 확장을 함과 동시에, 개별 서버 내에서도 리소스 사용률을 높이기 위해 Ghost Town이라는 라이브러리를 작성해 PhantomJS 프로세스 풀을 구성하여 사용하고 있었습니다(Scaling PhantomJS With Ghost Town ) 한편, 시간이 지나면서 잠금화면에서 렌더링하는 이미지 템플릿의 종류가 다양해지고, emoji 및 여러 특수문자를 표현하기 위해 렌더링 서버에 여러 폰트(대표적으로 Noto Sans CJK)를 설치해야 하는 요구사항이 추가됐는데, PhantomJS에서 폰트 렌더링이 일관적이지 않은 문제가 발생했습니다. 동일한 템플릿이지만 폰트가 비일관적으로 렌더링되고 있는 모습 이 문제의 정확한 원인은 결국 찾지 못했지만 PhantomJS의 이슈였거나 시스템 상에 폰트가 시간이 지나면서 추가 설치됨에 따라 font cache가 서버마다 일관되지 않은 상태가 되었기 때문인 것으로 짐작하고 있습니다. 다른 워크로드와 마찬가지로 렌더링 서버도 최초에는 packer를 이용해 일관되게 이미지를 빌드하고 업데이트하려고 했지만, 자주 기능이 추가되거나 배포되는 서비스가 아니기에 서버를 오래 띄워놓고 수동으로 유지보수를 한 케이스들이 누적되어 더 이상 packer를 이용해 시스템이나 폰트를 최신 상태로 유지하는 것이 어려운 상태였습니다. 모든 눈꽃송이가 자세히 보면 조금씩 다르게 생겼다는 것에서 비롯된 snowflake, 즉 배포된 서버들이 시간이 지남에 따라 조금씩 다른 상태가 된 것입니다. 평소에는 문제가 없어 보이지만, 추가적인 확장성이 필요해 scale out을 하거나 새로운 템플릿을 개발해 배포를 하면 문제가 발생하는 상황이었습니다. 사실 더 큰 문제는 PhantomJS 프로젝트가 더 이상 관리되지 않는다는 점이었습니다. 2017년 Google Chrome 59버전부터 Headless Chrome이 내장되기 시작하였고, 곧바로 Node API인 puppeteer가 릴리즈 되어, 현시점에서 가장 많이 쓰이는 렌더링 엔진을 손쉽게 headless로 사용할 수 있는 환경이 되었습니다. 때문에 PhantomJS 관리자가 사실상의 중단을 선언하였고, 2018년에는 최초 개발자에 의해 프로젝트가 아카이브 되었습니다. 프로젝트가 업데이트되지 않는 것은 템플릿에 최신 CSS 스펙을 사용하지 못한다는 것을 의미하고, 버그 수정도 되지 않기에 어플리케이션의 유지보수가 굉장히 어려워짐을 의미합니다. 현재까지의 문제점을 정리하면 아래와 같습니다.  자주 배포되지 않는 서비스 특성으로 인한 서버들이 snowflake화 되는 현상(특히 폰트) PhantomJS의 개발 중단으로 인해 버그 픽스 및 최신 CSS 속성 사용이 어렵게 되고, 향후 유지보수나 새로운 템플릿 개발이 어려워짐  해결방안은 명확했습니다. 첫번째 문제를 해결하기 위해서는 어플리케이션과 폰트가 설치된 시스템을 통째로 컨테이너로 만들고, CI/CD 파이프라인을 통해 지속적으로 빌드하여 snowflake화 되지 않도록 하면 됩니다. 사실 최초에 packer를 이용해 AMI 이미지를 생성하도록 구성이 되어있었기에, 매 배포마다 AMI를 새로 생성하고 지속적으로 렌더링 서버를 배포하는 환경이기만 했으면 snowflake를 방지할 수 있었을 것입니다. 하지만 자주 기능이 추가되거나 배포되는 서비스가 아닌데다, AMI를 빌드하는 과정이 CI/CD에 통합돼 있지 않고 어플리케이션만 지속적으로 배포하는 환경이었기에 편의상 서버를 종료하지 않고 장기간 관리를 해 오게 되었고, packer로 새로운 AMI 이미지를 빌드하는 것이 어려워 졌습니다. 때문에 AMI 빌드를 통한 배포 대신, 이미 운영 중인 kubernetes 클러스터에 도커 컨테이너를 빌드해 immutable한 형상으로 배포하기로 결정하였습니다. 두번째 문제의 간단한 해결책은 PhantomJS를 puppeteer로 변경하는 것입니다. 이 부분은 생각보다 간단했습니다. 의도했는지는 알 수 없으나 puppeteer의 api는 PhantomJS와 꽤나 비슷합니다. drop-in replacement까진 아니지만, PhantomJS api 호출하는 부분만 살짝 바꿔주는 정도로 교체가 가능하였습니다. 물론 교체만 하였다고 해서 기존에 개발된 템플릿이 의도된 대로 출력되는 것을 보장하지는 않기에, 렌더링 서버가 렌더링하는 수많은 템플릿들을 PhantomJS와 puppeteer로 각각 출력하여 일일히 비교하는 작업이 필요했습니다. 어떤 템플릿이 어떤 인자를 필요로하며 의도된 출력 결과가 무엇인지에 대한 정의가 남아있지 않았기에 템플릿마다 샘플 케이스들을 생성하는 작업이 필요했습니다. 아직까지는 수동으로 결과를 비교해야하는 문제점이 있지만 적어도 직접 확인할 수 있는 것은 큰 도움이 되었습니다. 향후에는 자동화된 테스트 케이스를 구성하여 기능 개발이 좀 더 용이하도록 보완할 계획입니다. 결과는 만족스러웠습니다. 많은 경우 기존과 출력 결과가 달랐지만, 최신의 크롬 웹킷이 사용되면서 오히려 템플릿을 개발할 때 의도했던대로 CSS를 더 정확하게 렌더링하게 된 것이었습니다.  FROM node:10-slim RUN apt-get update && \ apt-get install -yq gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 \ libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 \ libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 \ libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 \ fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst ttf-freefont \ ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget unzip && \ wget https://github.com/Yelp/dumb-init/releases/download/v1.2.1/dumb-init_1.2.1_amd64.deb && \ dpkg -i dumb-init_*.deb && rm -f dumb-init_*.deb && \ apt-get clean && apt-get autoremove -y && rm -rf /var/lib/apt/lists/* RUN yarn global add [email protected] && yarn cache clean ENV NODE_PATH="/usr/local/share/.config/yarn/global/node_modules:${NODE_PATH}" RUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser # Set language to UTF8 ENV LANG="C.UTF-8" RUN wget -P ~/fonttmp \ https://noto-website-2.storage.googleapis.com/pkgs/NotoSans-unhinted.zip \ https://noto-website-2.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip \ https://noto-website-2.storage.googleapis.com/pkgs/NotoSansCJKkr-hinted.zip \ https://noto-website-2.storage.googleapis.com/pkgs/NotoSansCJKtc-hinted.zip \ https://noto-website-2.storage.googleapis.com/pkgs/NotoSansCJKsc-hinted.zip \ https://noto-website-2.storage.googleapis.com/pkgs/NotoColorEmoji-unhinted.zip \ && cd ~/fonttmp \ && unzip -o '*.zip' \ && mv *.*tf /usr/share/fonts \ && cd ~/ \ && rm -rf ~/fonttmp WORKDIR /app # Add user so we don't need --no-sandbox. RUN mkdir /screenshots && \ mkdir -p /home/pptruser/Downloads && \ mkdir -p /app/node_modules && \ chown -R pptruser:pptruser /home/pptruser && \ chown -R pptruser:pptruser /usr/local/share/.config/yarn/global/node_modules && \ chown -R pptruser:pptruser /screenshots && \ chown -R pptruser:pptruser /usr/share/fonts && \ chown -R pptruser:pptruser /app # Run everything after as non-privileged user. USER pptruser RUN fc-cache -f -v COPY --chown=pptruser:pptruser package*.json /app/ RUN npm install && \ npm cache clean --force COPY --chown=pptruser:pptruser . /app/ ENTRYPOINT ["dumb-init", "--"] CMD ["npm", "start"]  puppeteer를 사용하면서 약간의 권한 문제가 있어서 결과적으로 위와 같은 Dockerfile을 작성하게 되었는데, puppeteer 도커 이미지 작성에 관한 최신 정보는 여기서 확인할 수 있습니다. 컨테이너 오케스트레이션(K8s)을 사용하면 process 기반의 스케일링은 컨테이너를 여러대 띄워 로드밸런싱을 손쉽게 할 수 있지만, 개별 컨테이너의 throughput을 향상시키기 위해 기존에 Ghost town을 작성해 PhantomJS 프로세스 풀을 만든 것처럼 크롬 프로세스 풀을 구성하기로 하였습니다. 프로세스 풀 구성에는 generic-pool 라이브러리를 사용하였으며 아래처럼 구성하였습니다.  const puppeteer = require("puppeteer"); const genericPool = require("generic-pool"); const puppeteerArgs = ["--no-sandbox", "--disable-setuid-sandbox", "--disable-dev-shm-usage"]; const createPuppeteerPool = ({ max = 5, min = 2, maxUses = 50, initialUseCountRand = 5, testOnBorrow = true, validator = () => Promise.resolve(true), idleTimeoutMillis = 30000, ...otherConfig } = {}) => { const factory = { create: async () => { const browser = await puppeteer.launch({ headless: true, args: puppeteerArgs }); browser.useCount = parseInt(Math.random() * initialUseCountRand); return browser; }, destroy: (browser) => { browser.close(); }, validate: (browser) => { return validator(browser) .then(valid => Promise.resolve(valid && (maxUses <= 0 || browser.useCount < maxUses xss=removed xss=removed xss=removed> genericAcquire().then(browser => { browser.useCount += 1; return browser; }); pool.use = (fn) => { let resource; return pool.acquire() .then(r => { resource = r; return resource; }) .then(fn) .then((result) => { pool.release(resource); return result; }, (err) => { pool.release(resource); throw err; }); }; return pool; }; module.exports = createPuppeteerPool;  Caveats PhantomJS에서 puppeteer로 전환함에 있어서 몇가지 주의해야 할 점이 있었는데요. 첫째는 기존에 사용하던 템플릿의 html에 이미지 소스를 file:// url 프로토콜을 이용해 로드하는 경우가 있었는데, PhantomJS에서는 정상적으로 로드가 되지만 Headless Chrome에서는 보안 정책으로 인해 로컬 파일을 로드할 수 없었습니다(관련 이슈). 때문에 로컬 이미지가 필요한 템플릿은 Express 서버에서 static file serving을 하도록 하고 http:// 프로토콜로 변경하였습니다. 다음으로 발생한 문제는 PhantomJS을 이용한 기존 구현에서는 jade template을 compile한 후 page 객체의 setContent 메소드를 이용해 html을 로드하였는데, puppeteer에서는 page#setContent API 호출 시 외부 이미지가 로드될 때까지 기다리지 않는다는 점입니다. puppeteer 에 올라온 관련 이슈에서는 `=setContent`= 대신 아래와 같이 html content를 data URI로 표현하고 page#goto의 인자로 넘기면서 waitUntil 옵션을 주는 방식을 해결방법으로 권하고 있습니다.  await page.goto(`data:text/html,${html}`, { waitUntil: 'networkidle0' });  이 때 주의해야 할 점은 waitUntil의 옵션으로 networkidle0이나 networkidle2 등을 사용하면 외부 이미지가 충분히 로드될 때 까지 기다리는 것은 맞지만, 500ms 이내에 추가적인 네트워크 커넥션이 발생하지 않을 때까지 기다리는 옵션이기 때문에 외부 이미지가 로드되더라도 추가적으로 500ms를 기다리게 됩니다. 때문에 SPA 웹페이지를 캡쳐하는 경우가 아니라 정적인 html을 로드하는 경우라면 `load` 이벤트로 지정하면 됩니다. 이외에도 향후에 프로젝트의 유지관리나 운영 중인 서비스의 모니터링을 위해 Metrics API 엔드포인트를 만들어 prometheus에서 메트릭을 수집할 수 있도록 하고 grafana 대시보드를 구성하였습니다. 이 대시보드는 어떤 템플릿이 실제로 사용되고 있는지, 템플릿 렌더링에 시간이 얼마나 소요되는지 등을 모니터링할 수 있도록 구성하여 사용되지 않고 있는 템플릿을 판단하거나 서비스 지표를 모니터링 하는 데 이용하고 있습니다. grafana와 prometheus를 이용해 구현한 렌더링 서버 모니터링 대시보드. 마치며 최근에 들어서는 PhantomJS를 사용하던 많은 곳에서 puppeteer로의 전환을 해오고 있어 본 포스팅에서 다루고 있는 내용이 크게 새로운 내용은 아닐 수 있습니다. 하지만 버즈빌에서는 렌더링 서버가 과거에 이미 PhantomJS를 사용하는 것을 전제로 상당한 최적화가 진행되어 왔고, 꽤나 높은 동시 처리량이 요구되는 상황에서 puppeteer로 교체를 해버리기에는 여러 불확실한 요소들이 존재하는 상황이었습니다. 버즈빌의 핵심 비즈니스 중 하나인 잠금화면에 사용되는 이미지를 렌더링하는 서비스가 레거시(개발이 중단된 PhantomJS)에 의존하는 코드베이스 때문에 변경이 어려워지는 것은 향후 꽤나 큰 기술부채로 작용할 것이라 판단하였습니다. 이번 마이그레이션을 진행하면서는 이 부분을 염두에 두고 컨테이너를 사용해 CI/CD 파이프라인을 구축해 지속적으로 컨테이너 기반의 이미지를 생성하도록 변경하였고, 그 결과는 꽤나 만족스러웠습니다. 마이그레이션 이후 그간 밀려 있던 신규 템플릿 개발이나 신규 컨텐츠 프로바이더를 추가하는 과정이 수월해졌기 때문입니다. 빠르게 변화하는 비즈니스 요구사항에 대응하다보면 기술부채는 필연적으로 쌓일 수밖에 없습니다. 개발자에게는 당연히 눈에 보이는 모든 기술부채들을 청산하고 싶은 욕구가 있지만 늘 빚 갚는데 시간을 쓰고 있을 수만은 없는 노릇입니다. 리소스에는 한계가 있으니까요. 어떤 기술부채를 지금 당장 해결해야하는지 의사결정을 하는데 있어 고민이 된다면 일단 “측정”을 해보는 것을 권장합니다. 수치화된 지표가 있다면 당장 의사결정권자나 팀을 설득하는 데 사용할 수도 있지만, 서비스의 핵심 지표들을 하나 둘씩 모니터링 해나가다 보면 서비스에 대한 가시성이 높아지고 미래에 정말로 병목이 되는 지점을 찾아내기 쉬워질 것입니다. 참고 자료  https://docs.browserless.io/blog/2018/06/04/puppeteer-best-practices.html https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md Icons made by Freepik from Flaticon is licensed by Creative Commons BY 3.0    *버즈빌에서 개발자를 채용 중입니다. (전문연구요원 포함)작가소개 Liam Hwang, Software Engineer 버즈빌에서 DevOps를 담당하고 있습니다. Cloud Native 인프라를 구현하기 위해 여러 노력을 기울이고 있으며 새로운 기술들을 공부하는 것을 좋아합니다.
조회수 1431

취미는 바뀌지 않는다. 단지 늘어날 뿐이다.

종종 "취미가 몇개에요?" 라는 질문을 받는다. 아마 다른 사람이라면 "아마 취미가 뭐예요?"라고 물어봤을 질문이었을테지만, 수시로 뭔가를 시작하는(혹은 구매하는) 내 모습이 적잖이 신기해보였나보다. 그럴법도한 것이, 디제잉을 하겠다고 했던게 고작 작년 8월이고, 드론을 사고 한강공원에서 애쓰는게 겨우 5개월 사이의 이야기니. 아마 그들의 눈에는 수시로 취미를 바꾸거나 혹은 일을 벌이는 관종 그 이상 그 이하도 아니었을지 모르겠다. 일면 맞는 말이라, 딱히 반박할 생각은 없지만 내 삶에서 '취미'가 어떤 의미인지는 문득 정리해보고싶다는 생각이 들어 자판을 잡았다.'잡기에 능하다'는 말을 좋아한다. 특출나게 잘하는 것이 있는 것은 아니지만, 그 어떤 것도 평균은 '해낸다는' 그 말의 어감을 좋아한다. 부모님은 내가 어렸을 적, 하고 싶은 것들은 다 하게 해주셨지만 그 어떤것도 내 대신 해주시지는 않았다. 그 흔한 미니카조차 한 번도 내 대신 조립해주신 적이 없다. 갖고 싶은 것이 생겨서 떼를 쓸때에는 단 한 번도 혼난적이 없었지만, 금방 질려 중간에 그만두거나 부모님에게 도움을 요청할 때에는 매섭게 혼나기 일쑤였다. 아마 그때부터 '하고 싶은 것들을 고르는 기준'과, '어떻게든 끝을 보아야 한다'는 것을 배웠을지도 모르겠다.'평균은 한다'는 말은, 다시 말해 '언제든 유지가 된다'는 말이기도 하다. 내가 갖고 있는 취미들이 언제든 다시 '평균은 되는' 이유는 늘 취미를 배웠을 때마다 정해놓은 목표를 어떻게든 이뤘기 때문일 것이다. 기타를 손에서 놓은지 시간이 지났어도 언제든 다시 연주를 할 수 있는것도, 붓펜을 잠시 잊고 살아도 언제든 글씨를 쓸 수 있는 것도 다 그런 이유다. 그래서 나는 취미가 '바뀌는' 게 아니라, '많아지는' 것이라 믿는다. 그리고 그러한 나름의 기준을 넘어야지만 비로소 '취미'라 부를 수 있다고도 믿는다.정작 최근까지도 나는 내 취미의 다양함이 '좋다'고 생각한적은 없었다. 그러다 글을 쓰기 시작하면서부터 조금씩 생각이 바뀌기 시작했다. 사람들을 만나고 글을 쓰고, 때로는 내 이야기가 아닌 다른 사람의 입장에서 글을 쓰면서 취미를 통해 만났던 사람들의 삶을 떠올릴 수 있었다. 음악인이 되고 싶었지만 현실의 벽에 무너져 직장인이 되었던 밴드 친구들, 낮에는 학생이지만 밤에는 작은 가게를 운영하며 노래를 틀던 학교 앞 술집의 사장님, 사랑하는 사람에게 청혼을 하기 위해 글씨를 배우려했던 나의 지인들까지 모두. 내가 아닌 다른 사람들의 이야기에 몰입할 수 있던 단 하나의 매개는 그들과 내가 같이 이야기할 수 있었던 '취미'였다.취미라는게 그렇다. 취미를 바꾸면 만나는 사람이 바뀌곤한다. 그리고 그 취미를 빌미로 서로 이야기를 시작하곤 한다. 처음 만난 사람이 나와 같은 취향을 가지면 마음을 쉽게 열듯, 나는 내 다양한 취미덕에 보다 많은 사람들의 마음에 쉽게 다가갈 수 있었다. 적어도 '평균은 했던' 시간투자 덕분에, 대화의 보조를 맞추는 것도 어렵지 않았다. 같은 취미라도 다른 목적과 동기로 찾아오는 다양한 사람들을 만나면서는, 취향이 같다고 모든 사람이 같은 생각을 하는건 아니란것도 알게 됐다. 사람들의 내면의 향기를 맡는 법도, 평범해 보이는 누군가를 더 멋지게 볼 수 있는 능력도 기를 수 있었던 것도 모두가 취미 덕분이었다.결국 나는 글을 쓰는 일을 하게 되었다. 마케팅이란 결국 다른 사람의 마음을 읽어내는 글과 표현방식을 고민하는 일이기에, 나는 비지니스 세계에서의 작가가 되었다고 믿으며 일을 한다. 마케팅을 고민할 때면, 나도 모르게 언제나 다른 사람의 입장에서 글을 떠올리곤 했다. 그럴때마다 내가 떠올렸던 것은 수 많은 취미생활과 만남 속에서 스쳐갔던 사람들의 이야기였다. 취미는 그런 내게, 그들이 무엇을 좋아할지, 그들이 어떤 생각을 하고 있을지 유추할 수 있게 해주는 도구이기도 했다. 그래서였을까, 나는 어느새 다양한 사람들의 입장에서 그들이 바라보는 세상을 어렴풋하게 그릴 수 있게 되었다. 아직은 조금 더 다듬어야 하겠지만, 그 수많은 취미와 사람들의 이야기 속에서 도움을 받았던 것만은 확실한 것 같다.어느덧 나는 인생에서 7번째 취미를 맞이하게 되었다. (통기타, 밴드생활, 글쓰기, 맥주, 캘리그라피, 디제잉, 그리고 드론) 드론을 시작하며 벌써 만나는 사람들도, 내가 속하는 집단도 달라지고 있다. 드론은 30-40대 아저씨들이 그득한데, 그들 틈에서 그들의 삶을 관찰하는 것에서 또 다른 재미를 느끼곤 한다. 가족여행을 늘 드론으로 담고 싶어하는 사람과, 조기축구를 중계하기 위해 드론을 쓰는 사람들 모두 내게는 본받고 싶으면서도 재미있는 연구 대상들이다. 그리고 나 역시도 그들처럼 드론으로 이루고 싶은 목표가 있다. 그리고 늘 그랬듯 그 목표달성의 시점은 곧 다시 다른 취미의 시작이 될 것이다.나도 나의 다음 취미가 무엇이 될지 궁금하다. 그러나 분명한 것은 결국 이 취미들이 모여 나의 향기를 만들어 줄 것이라는 것, 그리고 다른 사람들의 마음에 다가갈 수 있는 또 하나의 열쇠를 만들어 줄 것이라는 점이다. 보다 더 많은 사람들의 마음과 생각을 이해할 수 있게, 그리하여 더 많은 사람들의 입장이 되어 글을 쓰고 표현할 수 있게 되는 것, 아마도 그것이 내 인생에서 '취미'라는 단어가 지니는 의미는 아닐까. '취미생활'이 '취미'가 되는 삶, 그게 아마도 내가 궁극적으로 이루고 싶은 것일지도 모르겠다.'한 가지 일을 오래한 사람에게는 향기가 있다. 그러나 그 향기는 자신의 향기를 지닌 사람만이 맡을 수 있다.'는 말을 좋아한다. 내가 더 많은 향기를 지닌 사람이 되었으면 좋겠다. 그만큼 내 향기를 알아주는 많은 사람들을 만났으면 좋겠다. 그 과정을 지금처럼 늘 즐거워했으면 좋겠다. 취미를 통해 만났던 사람과 겪었던 경험 모두가 소중했기에, 꼭 지치지 않고 생기있는 삶을 위해 끊임없이 극딜했으면 좋겠다. 그럼 더 없이 유쾌한 인생일 것 같다. 똑같이 무언가에 미친 사람들을 만나서 외롭지 않을 수 있다면, 그야말로 진정 유쾌한 삶이 아니겠는가? #어니스트펀드 #마케터 #마케팅팀 #취미생활 #인사이트 #경험공유
조회수 2017

모든 기업가들이 블로그를 해야되는 5가지 이유

Fastcomapny에서 5 Reasons Every Entrepreneur Should Start Blogging 이런 기사가 포스팅이 되었는데 1bytebeta의 CEO인 Shlomi Nissan가 쓴 글이고 그의 블로그는 다음과 같다.이 기사의 5가지 이유를 요약해보면1.블로깅은 아이디어를 발전시킨다.글쓰기는 단지 아이디어를 전달하는 것이 아니라 그 과정에서 새로운 것들이 만들어지기도 한다. -Paul Graham, Y-Combinator2.블로깅은 당신의 비전을 명료하게 하고 이해하는데에 도움을 준다.당신이 이해가능한 완벽한 문장으로 자신의 아이디어를 써야할 때 이것은 더 깊고 명료한 사고를 하게끔 자신을 몰아넣는다.-Jeff Bezos, Amazon3.블로깅은 당신의 팬을 만드는 데에 도움을 준다.우리는 글쓰기를 통해서 단순한 고객이 아닌 우리의 팬을 만드려고 해야한다.-David Heinemeier Hansson, Danish programmer and the creator of the popular Ruby4.블로깅은 당신을 산업의 전문가로 만들어준다.내가 공개된 일을 할 때 나는 매번 더 열심히하게 된다. 처음하는 것처럼그것은 믿기 힘들만큼 강력하다. -Fred Wilson, American businessman, venture capitalist and blogger5.블로깅은 당신에게 기업가정신에 대해서 가르쳐준다.자기 훈련에 있어서 정보를 접하는 것보다 글쓰기를 하는 것이 더 나은 수단이다.-andy grove , Intel필자는 2014년 7월 22일에 shareme 블로그를 오픈하였다. 그리고 2016년 10월 20일 약 2년 3개월이 지난 시점에 1,000개 포스팅이 완료되었다. 사실 블로그를 하기 전만 해도 6개월 정도가 걸렸다. 어떻게 블로그 컨셉을 잡아야될지 뭐부터 시작해야될지 네이버 블로그를 해야될지 티스토리를 해야될지 구글의 blog를 해야될지 고민이 많았다.결론을 내렸고 블로그의 원칙은 다음과 같았다.1.개인 데이터베이스최현일의 삶에서 일어나는 모든 것들이 대상이지만 기억할 만하고 의미있는 것들을 위주로 기억할 것.2.티스토리(tistory)숫자로 표현되고 주제별 분류가 쉬운 블로그를 선택할 것.이렇게 2개의 원칙만 정하고 일단 시작하니깐 서서히 감이 잡혔다. 어떤 글의 카테고리를 추가할지 어떻게 컨셉을 잡아가야할지. 그리고 처음 콘텐츠는 거의 정말 개인 일기장의 형태로 써내려가서 다른 사람이 쉽게 보기엔 가독성이 떨어지는 UX의 형태였는데 점차 다른 독자도 편하게 읽을 수 있게끔 UX를 개선해 나갔고 나중엔 GA(google analytics)를 사이트에 심어서 어떤 콘텐츠들이 반응이 좋은지 보기 시작했다.1년 5개월 정도 236,250자  A4로 315장을 아날로그로 내 생각을 써내려갔다.원래는 종이에 펜으로 글을 쓰는 것부터 시작하였다. 글쓰는 요령/동기는 아티스트웨이라는 책에서 영감을 받았고 계속 글을 써내려 갔는데 좋은 생각들을 종이에만 놔두는게 아쉬워서 디지털의 형태로 변환했다.(블로그) 그리고 그 정보/생각들을 블로그를 통해 사람들과 같이 공유한 것이다.(블로그를 하면서 손으로 직접 글쓰기도 병행했다. 손으로 글을 쓰는 것과 타자로 글을 쓰는 것과는 또 다른 장.단점이 있는데 개인적으로 종이에 펜으로 글을 쓰는 것은 상대적으로 더 깊게 사고,고민할 수 있는 것 같다.) 블로그를 2년 넘게 계속적으로 하다보니 정말 위의 기사에서 말한 5가지 경험들을 다 겪게 되었다.필자가 블로그를 하면서 가장 크게 도움받는 두 가지를 꼽는다면1.새로운 뇌가 생겼다.디지털 뇌. 블로그에 와서 주제,키워드 검색만 하면 나의 진짜 뇌가 기억하지 못한 정보들을 거의 다 찾을 수 있다.그리고 사람들과 얘기할 때 정보/근거들을 모바일로 블로그에서 검색해서 보여준다.2.회사 이력서, 프로그램 제안서 같은 것들을 제출할 때는 블로그 링크를 다 걸어서 포트폴리오로 증명했다.굉장히 편하고 담당자들도 좋게 보는 눈치다.필자는 개인적으로 블로그는 많은 사람들이 했으면 좋겠다는 생각을 한다.왜냐하면 본인이 자기 인생에서 정말 간절한 것이 있고 진짜 이루고자 하는 뜻이 있다면 블로그는 그 목적을 달성하게 도와주는 정말 훌륭한 도구이기 때문이다.블로그가 나를 그렇게 도와주었고 앞으로도 그럴 것이라고 믿어 의심치 않는다.모든 사람들은 하나의 small media다. 이제는 자신의 미디어를 중심으로 사람을 모으고 나의 연결을 촉진하는 동시에 나를 통해 연결된 그 사람들끼리도 같이 충돌시키는 네트워크를 잘 활용해야되는 시대이다.블로그는 정말 재미난 일이다. 우연히 한 해커톤 행사장에서 나의 블로그를 구독한 사람을 만나기도 했고 친구들은 나의 글을 통해 영감을 받으며 고마움을 전하고 있고 모르는 사람이 콜드콜을 요청해 한번 꼭 만나보고 싶다고 해서 직접 만났고 서로 좋은 영향력을 주고 받고 있다.블로깅은 단순히 인터넷에 콘텐츠를 비트값으로 남기고 공유하는 일이 전부가 아니라 실제와 이 세계를 연결하는 미디어이다.우리는 블로그에 대해서 좀 더 심도있는 이해를 위해서 글쓰기의 가치를  이해할 필요가 있다. 사실 블로그라는 것은 글쓰기라는 본질적 속성을 인터넷에 맞게끔 디자인한 것이다.건축가 중 백희성이라는 분이 계시는데 정말 창의적이시고 놀라우신 분이다.(유투브에 세바시나 다른 동영상들이 많으니 한번 꼭 보길 바란다. 보이지 않는 집 이 책은 주위 지인들이 극찬한 책) 백희성님은 블로그 형태는 아니지만 '자기관찰노트'라는 노트에 펜으로 여러 감정의 자신에 대하여 글을 쓰신다. 이 동영상에서 말씀하시길 이 자기관찰노트가 자신의 삶에 있어서 굉장히 많은 것들을 바꾸어놓았다고 하신다.블로깅의 본질은 글쓰기에 있다. 이것을 이해하고 블로깅을 하면 더욱 도움이 된다.위에 사진을 첨부해 놨듯이 필자도 종이에 아날로그로 글쓰기를 시작하다가 블로깅을 시작했다.글쓰기는 현재의 나와 과거의 나에 대해서 깊게 들여다 보게 해준다.인간의 진보와 성장은 과거와 현재에 대해 스스로가 깊게 돌아보고 곱씹을 때 가능했다. 글쓰기는 자신의 진실한 모습에 대해 마주하고 사색하는 위대한 방법론 중에 하나다.그런 글쓰기가 인터넷화 되면서 블로그의 형태로 큰 효용성을 가져왔다.글자가 종이에 머무를 때는 공유하기가 힘들었고 그 글을 매개로 사람들의 연결이라는 건 있을 수 없었다.블로그는 사람들의 삶의 양식들을 바꿔나가고 있다. 책 출판의 형태만 보더라도 블로그에 포스팅 하나 하나가 모여 책이 되는 시대다.우리는 우리의 감정과 생각과 아이디어, 의견,경험들을 글쓰기의 형태로 기록할 수 있다. 그리고 그것들을 블로그의 형태로 활용할 때 더욱 자신의 기회를 증대시키고 자신의 브랜딩을 확산시키는데 용이하다. 우리는 이것을 적극적으로 활용할 필요가 있다고 생각한다. 앞으로도 블로그는 디지털 뇌로서 좋은 도구가 될 것이다.이 글을 통해 많은 사람들이 블로그를 잘 활용하여 좋은 결과물들을 내기를 희망한다.언어는 쓰여지지 않으면 잊혀진다.나의 이야기는 기록되어지지 않는다면 그 누구도 기억해주지 않는다.우리가 기록하기 시작했을 때 그 다음에 우리는 더 나은 것들을 기록할 수 있다. 역사도 그렇게 기록되어진 것들을 발판 삼아 진보해왔다.#페오펫 #peopet #인사이트 #마케팅 #마케터 #블로그 #경험공유 #조언
조회수 2210

모두가 Yes라고 할 때,

조금 오래된 광고 카피라이트지만,뇌리에 박혀 버린 말이 있다.모두가 예스라고 답할 때, 노라고 말할 수 있는 사람!모두가 노라고 답할 때, 예스라고 말할 수 있는 사람!(2001년 동원증권 CF 중에서 카피라이트 문구)한 때는 그것이 멋져 보였다.왠지 자신만의 주관이 뚜렷하고,개성이 있는 인재상처럼 느껴졌고남들과는 다른 창의성, 혁신의 뉘앙스가묻어나는 행동처럼 비쳤다.그렇다고 믿었다.이것이 맞느냐!아니다 저것이 더 낫다!이건 안된다.아니다 된다라는 이분적인 회의는결론 도출이 안 되는평행선을 달리기가 될 수 있다.예, 그렇습니다, 맞습니다 또는 아니요, 그렇지 않습니다. 틀립니다라는 대답만으로는 부족하다.그 주장이 나오게 된 원인과그렇게 생각하는 근거는사람에 따라 다를 수 있다.그렇기에 더 많은 시나리오와그만큼 많은 대안과 출구전략들이나타나야 하는 게 정상이다. 그 이후에Yes와 No에 대하여, 더 명확하게는Go or Stop 사이에서 최종 결정은 마지막에 정리되어야 한다.(물론 Plan B와 Plan Z까지 첨부해서...)1. 시작은 Why로부터...어떠한 프로젝트 의제에 대하여생각은 다 다를 수 있다.탐탁지 않은 부분이 있어 반대할 수 도 있고,적극적으로 밀어붙이고자 찬성할 수 도 있다.적극적 반대도 있고, 어정쩡한 찬성도 있다.여전히 반반 사이에서 부동층을 형성할 수도 있다.이러한 고착상태에서 의견을 모을 수 있는 방법은 논리이다.논리는 순서이다.원인과 근거를 제시하는 것부터 시작이다.때문에모두가 Yes를 외칠 때, Why라고 묻는 것이다.모두가 No라고 외칠 때, Why를 묻는 것이다.어린아이가 성장하면서 호기심과 궁금증이 많아지면서 "왜요?", 왜 그래요?"라는 말의 빈도가 높아진다.마찬가지로한창 성장하고 있는 회사에는"왜"라는 질문이 매우 중요하다.문제를 진행할지 안 할지 이전에문제의 근본적인 원인을 되짚는 것이 우선이다.Why는 몇몇 리더들이 불편해하는 질문이기도 하다.특히 시간에 쫓기며,빠른 결정을 해야 할 때는 더더욱중간 단계를 skip 하길 원한다."그냥 하라면 해!""그건 이미 다 결정된 거야""지금 와서 돌이킬 순 없어."라는 식의 반응은 어디선가 많이 들어보지 않았을까?꼰대라고 여기던 직장 상사라던가,고압적인 교수님이라던가,고지식한 군대 선임에게서도...그러한 조직 내지는 리더에게Why라는 물음은 군말이 많다,대든다,오지랖이다,주제넘는다라는 핀잔으로 돌아오곤 했다.그렇게 하나둘씩 입을 다물기 시작하고,나중에는 거수기들만 남아있는 회의, 의사결정 자리가 되어버리지.2. 본론은 룰(Rule)로부터...일반적으로 스타트업의 의사결정은 동료들과 문제에 대한 해결방안, 대안을격렬하게 논의하면서 진행된다.스타트업에서회의의 진짜 묘미는바로 다양한 아이디어와 의견을 도출하되마지막은 결론이 정리될 수 있어야 한다는 점이다.중구난방으로 쏟아진 의견은 자칫 회의가 산으로 갈 수가 있다.정리되지 않은 아이디어들은 다음 날이 되면 우리가 뭣 때문에 회의를 한지 방향성을 잃게 만들기도 한다.역으로,제한적으로 과한 통제는시계 초침이 "똑딱, 똑딱" 느껴질 정도로지루하고, 숨 막히는 회의가 될 수도 있다.그렇기에 회의에는 룰이 필요하다.최소한 정해 놓아야 할 룰은 다음과 같다.1) 회의 전 사전검토에 대한 룰(회의 내용 사전 숙지 및 검토),2) 회의시간 한도의 룰(무한정 회의는 삼가자),3) 구성원 간의 발언 룰(발언자/사회자/경청자가 지켜야 할 룰),4) 결과 정리의 룰(의견을 정리, 취합하고, 다음 단계로 넘어갈 수 있도록 액션을 정할 것)적어도 위의 4가지 rule은 경험적으로,많은 시행착오를 거치면서 필수적이라고 깨달았다.  3. 결론은 How로부터...난 하와이를 좋아한다.가 본적 없는 여행지인 하와이가 아니라나름대로 이름 지은Howhy(하우 와이)!아재 개그인가....ㅠ.,ㅠWhy라는 질문으로 문제의 본질을 찾는다면,How는 질문으로 문제의 해결책을 찾는다.그래서 어떻게 할 건데!How는 육하원칙의 하나이지만,다른 단어들과 동등하다고 생각하지 않는다.How 안에는 언제 해야 할지,무엇을 해야 할지,누가 해야 할지,어디서 해야 할지를 포함한다.따라서,Why와 How는 문제 해결로 가는가장 중요한 열쇠이다.그럼에도(주)클린그린의 회의가 이상적이지는 않다.습관화가 덜 되어서인지,뭔가 간과한 부분이 있는 건지,아니면,회의 진행에 있어 여전히 미숙한 건지딱 하나 꼬집어 말하기는 어렵지만늘 100% 만족할만한 회의는 없었다.하지만 분명한 것은이전보다는 효율적이고,보다 다양한 의견과 정리된 결론으로진일보하였다는 점이다.제품이나 서비스만 피봇 되는 게 아니다.회사도,시스템도,업무도,사람도 피드백과 수정을 거쳐발전해 나가는 것이다.우리는 계속 발전하고 있는 중이다.#클린그린 #스타트업 #창업가 #창업자 #마인드셋 #조언
조회수 4066

KT 채용 필수 정보! 실무자가 직접 말하는 KT 人사이드(영업/마케팅 직무 편)

저녁이면 선선한 바람이 불기 시작하고 하늘도 점점 높아지고 있는 것을 보니 가을이 다가오고 있는 듯 한데요.이맘때쯤,조금은 긴장된 마음으로 기다려지는 것이 있으니 바로 하반기 공채 시즌입니다!대학생이나 취업준비생이라면 곧 다가올 하반기 채용을 기다리며 입사지원 준비에 박차를 가하고 계실 텐데요.대학생활 동안 다양한 경험을 쌓았지만 막상 내 재능과 열정을 가지고 어떤 직무에 지원할 수 있을까 고민하는 분들도 많을 것 같습니다.그래서 여러분의 고민을 조금이나마 덜어드리고자, KT입사에 성공한KT人들의 인터뷰를 준비해보았는데요.가장 먼저KT의 이미지를 책임지고 있는 영업/마케팅 직원들의 이야기를 들어보려고 합니다.직무에 관한 정보는 물론 사내 분위기,취준생을 위한 입사지원 팁까지! KT人들에게 직접 듣는KT人사이드,지금 바로.들어갑니다.“KT는 젊은 직원들의 소리에 귀 기울여주는 조직입니다.”- KT유무선사업본부 무선요금기획팀 장은정Q.현재 어떤 직무를 담당하고 계신가요?A.저는 마케팅부문의 무선요금기획팀에서'요금기획 및 운영'업무를 담당하고 있습니다.무선요금기획팀에서는 사내 각 전문부서와 협업을 통해 요금제 출시 전 기획부터 출시 후 운영까지 요금제 전반에 관한 업무를 수행합니다.기획 단계에서는 고객 데이터 분석뿐 아니라 고객분석실과 협업을 통한FGI/FGD등으로 고객 니즈를 발굴하여 요금 기획에 참고합니다.기획한 요금제는IT부서의 전산 개발과정을 거쳐 고객에게 보다 효과적으로 홍보될 수 있도록 홍보실, IMC담당과 함께 출시와 동시에TV광고,보도자료 배포,프로모션 진행 등 다양한 마케팅 활동을 진행합니다.출시 후에는 실적 분석 및 고객 의견 수렴을 통해 필요 사항들을 개선하고,해당 내용들을 참고하여 다음 요금제 기획을 다시 준비합니다.Q. KT를 선택한 이유는 무엇인가요?A.통계학 전공자로서 숫자를 많이 다룰 수 있고 데이터 분석 쪽 커리어를 쌓을 수 있는 통신사에 입사하고자 하는 마음이 있었고,3사 중에서도 고객과의 소통을 중시하여 가장 신뢰감을 주는KT를 선택하게 되었습니다.실제로 입사하고 보니 연령대별 이용 요금제,데이터 이용 패턴 등 분석할 숫자들이 무궁무진하고,제가 관여한 상품이 출시되어TV광고에 나오고 지인들이 만족스럽게 이용하는 모습에 성취감을 느끼며 즐겁게 일하고 있습니다.Q.회사에서 가장 보람 있었던 일은 무엇인가요?A.작년에‘Y24요금제’출시에 참여한 것이 가장 보람 있었던 일로 기억에 남습니다.처음으로요금제 기획-개발-출시-마케팅-운영의A to Z까지 참여하게 되어 많이 배우고 한층 성장할 수 있는 계기가 되었습니다. Y24요금제는 만24세 이하의Young타겟이 데이터와 콘텐츠 이용이 활발하다는 부분에 착안하여 매일3시간 데이터 무제한과 콘텐츠 반값 혜택을 제공하는 특화 요금제입니다.연말에는 해당 요금제의 우수성을 국제적으로 인정받아'글로벌 텔레콤스 어워드'수상도 하게 되어 훈훈하게 한 해를 마무리할 수 있었습니다.Q.회사 분위기는 어떤가요?A.다른 회사를 다니는 친구들과 대화를 하면서 항상 느끼는 점은'우리 회사가 참 수평적인 조직이구나'하는 점입니다.KT는 상명하복의 문화보다는 본인의 의견을 언제 어디서든 자유롭게 개진할 수 있는 열린 조직 문화가 보편화되어 있습니다.또한 사원/대리 직급의 주니어를 중심으로 아이디어 협의체 등을 구성하여,사내 주요 과제에 대해 아이디어를 제시하고 실제 사업에도 반영하는 등Top-down방식보다는젊은 직원들의 소리에 귀를 기울여주는 조직이라는 생각이 듭니다.“KT는 능력보다 가능성을 높이 평가하는 회사라고 생각합니다.”- kt cs고객서비스본부CS기획팀 강윤Q.현재 어떤 직무를 담당하고 계신가요?A.저는CS품질혁신파트 소속으로 대/내외 고객으로부터KT고객센터가 완벽한1등으로 인식되기 위한 업무를 맡고 있습니다.우선KT고객님들에게 국내 최고 수준의 상담을 제공하기 위해CS품질혁신 업무를 맡고 있습니다.전국14개 센터 관리자들을 대상으로 혁신조직을 기획하고,상담컨설턴트에게 발생하는 허들을 찾아내고,이를 개선하기 위한 활동을 지원합니다.또한'행복한 컨설턴트가 고객인식1등을 만든다'라는 슬로건 아래 컨설턴트들이 자신의 일의 의미를 찾아 보람 있게 일할 수 있도록 내부직원을 케어하는 활동을 합니다.마지막으로는 외부 대회에 참가해KT고객센터의 품질 혁신 사례를 대외적으로 인정받고, kt cs의 우수한 상담 품질과 업무 프로세스를 홍보하는 업무를 맡고 있습니다.Q. kt cs를 선택한 이유는 무엇인가요?A.신입사원에게 허드렛일만 시키는 현실을 비꼬는 말로'내가 회사에서 복사나 하려고 대학 졸업했나'등의 말을 심심치 않게 들어오면서,회사를 선택할 때'주도적으로 일할 수 있는가?'하는 점을 가장 중요시했습니다. kt cs의 경우,회사 홈페이지 및 대외채널에서 선배 입사자들이 한결같이 꼽은회사의 강점은 바로‘신입사원에게 주도적인 역할이 부여된다’는 것이었습니다.이점이 가장 큰 매력으로 다가왔습니다.또한KT고객센터와 유통사업의 운영 노하우를 바탕으로 타 기업의 컨택센터 수주,강사도급사업, APP개발 등 다양한 분야의 사업 영역을 가지고 있기에 여러 방면에서 저의 역량을 펼칠 수 있을 것이라 생각했습니다.Q.하루 일과를 설명해주세요.A.아침에 출근하면 사내 그룹웨어 메일함을 열어 이슈를 확인하고 부서원들과 공유하며,업무의 우선순위를 정리하는 것으로 하루를 시작합니다.통신업계는 실시간으로 이슈가 많은 업종이다 보니,매일 그때의 이슈에 맞추어 새로운 스케줄로 움직이는 것이 일상입니다.그럼에도 변하지 않고 가장 중요한 업무는현장(KT고객센터)과의 소통입니다.모든 일의 시작과 끝은 현장과 닿아 있기에 원활한co-work를 위해 메신저를 항시 열어두고,필요시 전국 팔도에 위치한 현장으로 즉시 출장을 나갑니다.매월 말에는 현장에서 진행한 혁신활동의 진행상황 및 개선결과를 체크하면서 좋은 아이템은 좀 더 확대 발전시키고,전사에 공유될 수 있도록 제도화 합니다.Q.지원자에게 마지막으로 전하고 싶은 취업 팁은?A.kt cs는획일화된'스펙'보다는 학창시절 무언가를 위해'노력했던 열정과 과정'을 중요시하는 회사입니다.즉'얼마나 잘하느냐'보다는'얼마나 잘할 수 있는지'그 가능성을 높이 평가하는 회사라고 생각합니다.회사와 사업에 대한 명확한 이해를 바탕으로 본인이 그 사업에서 어떤 역할을 해내고 싶은지,나아가 그 사업을 어떻게 이끌어가고 싶은지 구체적인 비전을 그려 본다면 합격은 물론이고,입사 후에도 회사에서 누구보다 똑똑하게 성장할 수 있을 것입니다.“KT는 로열티를 가지고 즐겁게 일할 수 있는 회사입니다.”- kt m&s운영혁신본부 고객경험혁신팀 권순욱Q.현재 어떤 직무를 담당하고 계신가요?A.고객경험혁신팀에서 직영매장Pull Marketing기획,운영 및 매장 영업 효율화 업무를 수행하고 있습니다. KT를 대표하는 직영매장의 차별화된 고객 중심 매장마케팅을 기획하고,이를 기반으로 성과분석을 통한 개선작업을 수행하며,현장 조직과 매장의 효율적 마케팅 활동이 가능하도록 지원하는 업무입니다.구체적으로 고객의 통신상품 구매Cycle인‘접객-집객-응대-사후Care’에서 고객에게 효율적으로 정보를 제공하고 접근할 수 있는 마케팅 방법을 제공하고,효율적인 성과로 이어질 수 있도록 운영하며 지원하는 업무입니다.기존의 다양한 마케팅 방법 이외에도 새로운 방법들을 기획하여 성과와 직결되도록 운영하는 것이 핵심업무입니다.Q. kt m&s를 선택한 이유는 무엇인가요?A.기업 브랜드 가치,발전성,안정성 등을 종합적으로 고려했을 때KT그룹은 가장 우수한 레벨에 속한 기업입니다. KT가 가지고 있는 다양한 요소들은 충분히 제가로열티를 가지고 즐겁게 일할 수 있는 회사라 생각했습니다.특히 다양한 그룹사 중에KT그룹의 통신유통전문회사인m&s는 제가 가장 잘할 수 있는 분야라 생각했습니다.대학시절부터 통신산업에 대해 관심을 가져왔고,경영/경제를 공부하며 자연스럽게 유통∙마케팅에 관심을 가지면서 역량을 최대화할 수 있는 곳이라 생각했기에 KT를 선택했습니다.Q.하루 일과를 설명해주세요.A.출근하면 가장 먼저 오늘 해야 할 업무들을 리스트화합니다.주요업무 및 협업해야 하는 팀과의 스케줄 조정을 진행합니다.간단한 업무정리 후 본격적인 업무를 시작합니다.가장 먼저 월/일 단위로 진행되고 있는 마케팅 프로그램 및 효율화 정책의 성과를 도출합니다.유관부서 및 현장 직원들과 소통하며 프로그램들이 현장에서 원활하게 운영되는지 지표화하여 추출하고,이슈포인트에 대한 대응방향을 수립하여 지원합니다.오후에는 업무 특성상 다양한 아이디어 회의와 장기 프로젝트들이 많기 때문에,각 아이템을 수행하기 위한 사전 미팅 및 준비 작업을 진행합니다.이후에는 관리 예산 정리 및 스팟성 업무들을 대응하고,차주/월 마감 성과관리를 위한 계획을 수립하여 하루를 마무리합니다.Q.지원자에게 마지막으로 전하고 싶은 취업 팁은?A.'자신감'이 가장 중요하다고 생각합니다.본인이 지원하고자 하는 회사와 업무에 대해 충분히 이해하고 명확한 의견과 방향을 가진다면,경쟁력 있는 인재가 될 수 있다고 생각합니다.단순한 암기와 조급함이 아닌,이해를 바탕으로 한 명분 있는 자신감을 가지고 준비하신다면 조금 더 좋은 결과를 얻으실 수 있을 겁니다.“KT는 업계에서 가장 유능하고 열정적인 사람들이 일하는 곳입니다.”- KT미디어사업본부VOD수급팀 최융Q.현재 어떤 직무를 담당하고 계신가요?A.영화<워낭소리>의 주인공 할아버지에게는30년간 함께하며 가족이 된 소중한 소가 있습니다.할아버지는 고령에도 불구하고 소에게 먹일 풀을 베기 위해 매일 산을 오르고,소의 건강을 우려해 논에 농약도 치지 않으며,본인의 건강이 악화되어 소를 넘기려 시장에 나갔다가60만원짜리 소를500만원은 받아야 팔겠다고 큰소리 치고 그냥 돌아오기도 합니다.제가 하는 일은 할아버지와 협상하여 결국60만원에 소를 사오는 것입니다.대신 제가 사는 것은 소가 아닌 영화,시리즈,애니메이션 등의VOD콘텐츠입니다.콘텐츠 시장에는 다양한 할아버지가 존재합니다.자신의 콘텐츠에 자부심이 넘치는 분이 있고,신기술로 무장한 콘텐츠를 파는 분도 있으며,돈만 중요한 분도 있습니다.이런 분들에게서우리가 필요한VOD콘텐츠를 적정한 가격에 수급하여KT올레tv의 콘텐츠 경쟁력을 높이는 것이 저의 직무입니다.Q.본인이 속해있는 회사 분위기는 어떤가요?A.미디어/콘텐츠 산업은 계속 성장하고 있으며 변화무쌍합니다.불과 십 년 전 영화DVD를 우편으로 대여해주던 회사였던‘넷플릭스’는 이제1억 가입자를 보유한 세계 최대의 미디어 플랫폼이 됐으며,외국 콘텐츠를 베끼기 바빴던 한국 제작사들은 이제 콘텐츠를 할리우드에 수출하는 수준까지 도달했습니다. KT의 올레tv는 대한민국1등 유료방송 플랫폼으로서 이러한 기업들과 경쟁하고 협력해야 하는 엄중하고도 위태로운 위치에 놓여 있습니다.그래서 그럴까요?저희올레tv는 업계에서 가장 유능하고 열정적이며 스마트한 구성원들로 이루어져 있습니다.이런 분들과 함께 한다는 것은 영광스럽지만 한편으론 만만찮은 것도 사실입니다.그러나 미디어/콘텐츠 산업 메인스트림을 경험해보고자 한다면, KT의 올레tv가 정답입니다.Q.하루 일과를 설명해주세요.A.VOD수급팀원의 하루 일과를 느껴보기 위해서는 올레tv란 플랫폼을CP(콘텐츠 공급사)입장에서 이해해야 합니다.올레tv는20만 편이 넘는VOD콘텐츠를 백 군데가 넘는CP로부터 수급하고 있는데,평균의 가구가 모든VOD를 시청하기 위해선432년이 필요합니다.제가CP라면 고객이 제 콘텐츠를 찾아볼 때까지 손 놓고 있을까요?당장VOD수급팀 담당자에게 연락해 스크린 상 좋은 위치에 노출하기 위해 어필하고 설득하는 것이 정상적인 모습일 겁니다.VOD수급팀원은 이러한CP의 심정을 이해함과 동시에,섬세한 저울질과 조율을 통해 플랫폼의 공정하고 일관된 정책 및 매출 경쟁력을 지켜나가야 합니다.이를 위해서는 치밀하게 작성된 자료가 필요할 때도 있고,용기 있는 전화 한 통이 요구되는 순간도 있습니다.이런 식으로 몇 가지 이슈를 처리하고 보면,파랗던 하늘은 이내 붉은 빛으로 물들어 있더군요.Q.지원자에게 전하고 싶은 취업 팁!A.KT는 커다란 회사입니다.주변을 둘러보면 어딘가KT인이 꼭 있을 것입니다.그들로부터 정보와 조언을 최대한 긁어 모으세요.저는 취업을 준비하면서KT에 먼저 합격한 학교 동기를 여러 차례 만나고 밥도 사줘 가며 제가 지원하는 사업의 현황과 방향,한계점 등을 상세히 파악하였습니다.덕분에 인터넷 검색이나 스터디를 통해 만든 것보다 훨씬 설득력 있고 구체적인 자기소개서를 작성할 수 있었습니다.서류전형에 합격한 후에는KT에서 퇴직하신 친구 아버지께 면접 스타일,예상 질문 등에 대한 코칭을 구했습니다.친구 아버지께서는 하루 종일 진행되는 면접의 고단함에 대해 면접관 입장에서 설명해 주셨는데,실제 면접 시 저는 간단한 유머를 통해 첫 긴장을 해소하여 면접 내내 면접관 분들로부터 좋은 반응을 이끌어 냈습니다.지금까지KT그룹의 영업/마케팅 분야에서 역량을 십분 발휘하고 계신 네 분의 인터뷰를 소개해드렸는데요.인터뷰를 보고 나니 하반기 공채가 다가오는 게 좀 더 실감이 나는 것 같지 않나요?취업관문에 정답은 없지만 자신만의 돌파구를 찾는 게 중요한 것 같습니다. KT인들의 조언과 같이,단순히 높은 스펙을 쌓는데 열중하기보다는 직무에 대한 명확한 이해와 나의 장점을 연관 지어 어필하기!면접에서 자신감 넘치는 태도와 직무에 대한 열정을 뽐내주신다면 모두들 하반기 취업 성공하실 수 있을 거에요~그럼 하반기 공채까지 모두 파이팅! #kt #기업문화 #조직문화 #업무환경 #직무정보 #구성원인터뷰 #영업 #마케팅 #kt공채
조회수 1658

개발자 직군 파헤치기 3 | 블록체인 개발자

이번 포스팅은 블록체인 개발자!2017년 대한민국은 가상화폐의 광풍에 휩싸이게 된다. 남녀노소 가릴 것 없이 많은 사람들이 가상화폐에 투자를 했다. 전 세계에 유례가 없을 정도로 국내 가상화폐 투자 열기는 뜨거웠으며 해외의 가상화폐 투자자들은 국내 투자자들의 움직임에 예의주시하면서 투자할 정도였다.이와 동시에 가상화폐의 기술적 원천이 된 블록체인(Block Chain) 기술에 대한 관심도 증가했다. 제2의 인터넷이 될 거라는 찬사를 받으면서 가상화폐의 부상은 뜨거운 관심의 대상이었다. 정부의 가상화폐 규제가 있었지만 시장에서는 블록체인 기술의 잠재적 가능성에 주목을 하면서 이것을 가지고 어떻게 혁신적인 서비스를 제공할지 고심하고 있다. 이에 따라 일반 개발자는 물론이고 기업에서도 블록체인 개발자에 대한 수요와 관심이 늘고 있다.이러한 관심 때문에 개발자를 꿈꾸는 많은 분들이 블록체인 개발자는 무엇을 하고 어떻게 될 수 있는 것인지 궁금해하고 있다. 그래서 이번 포스팅에서는 블록체인 개발자가 되기 위해서는 어떻게 해야 하는지와 더불어, 블록체인 기술에 대한 전망 그리고 블록체인 개발자의 시장 수요에 대한 글을 써 볼 것이다.*이 글은 블록체인 기술에 대한 자세한 설명은 하지 않고 있습니다.*Photo by Andre Francois on Unsplash미래를 여는 신기술, 블록체인의 전망블록체인 기술이 뜨고 있다고 하지만 도대체 어떤 분야에서 적용될 수 있기에 이렇게 많은 관심을 받고 있는 것일까? '딱 이 분야가 유망합니다'라고 말하기가 어려울 정도로 블록체인은 폭넓은 분야에 걸쳐서 파괴적인 혁신성을 가지고 있다. 그중  몇 가지만 추려서 이야기하고자 한다.1. 금융, 은행블록체인의 기술의 특징은 탈 중앙화, 신뢰성, 보안성이다. 전문가들은 기존의 은행들이 하던 업무를 핀테크 기업들이 혁신적인 서비스와 가격으로 대체할 것으로 예상한다. 블록체인 기술이 가지고 있는 신뢰성과 보안성으로 인해 일반 기업들도 거대 은행이 보유하고 있는 보안성을 획득할 수 있는 것이다. 거래 과정에서 제3자를 거치지 않기 때문에 거래의 속도와 효율성 그리고 경제성이 크게 증가한다.핀테크 스타트업뿐만 아니라 거대 금융권의 은행들이나 기존의 대기업들도 블록체인 기술을 이용한 서비스를 발 빠르게 준비하고 있다. 마스터카드는 블록체인 기술을 통해 즉석 지불 시스템을 개발하고 있다. 또한 글로벌 기업 IBM은 서로 다른 국가에 위치한 금융 기관이 블록체인 기술을 이용해서 결제를 처리할 수 있도록 하는 뱅킹 솔루션을 개발했다.현재 이더리움이 선도하는 스마트 계약도 금융권에서 주목하는 분야다. 스마트 계약은 특정 조건이 충족되면 은행과 같은 제3자를 거치지 않고 계약을 이행하게끔 도와준다. 예를 들어, 납품 기업과 발주 기업이 스마트 계약을 맺었다. 납품 기업이 발주 기업의 창고에 물품을 보내고 물품이 도착을 하면(IOT 센서로 감지된다) 납품 기업은 자동으로 결제 대금을 자동으로 받게 된다.2. 물류위에서 블록체인 기술의 특징 중 신뢰성과 보안성을 언급했다. 정보의 신뢰성과 보안성은 물류 시스템에도 파급력을 미칠 것이다. 많은 전문가들이 블록체인으로 인해 물류 시스템에 혁신적인 변화가 가능하다고 말한다. 블록체인 기술이 어떻게 물류 시스템에 적용될 수 있는지 직접 예시로 살펴보자.영국의 소프트웨어 회사 프로비넌스는 블록체인 기술을 이용해서 소매업자와 식당들이 원래 계약했던 대로 재료가 들어오는지 확인할 수 있게 만들었다. 트래킹(tracking) 기술과 결합하여 만든 이 소프트웨어는 재료가 수확되는 과정부터 최종 소비자가 구매하는 단계까지 꼼꼼히 추적하고 관리한다. 공급망의 모든 단계에서 변경 불가능한 데이터가 블록에 추가된다. 이 소프트웨어를 통해 소비자들은 자신이 무엇을 먹는지, 기업이 불법 조업을 통해 재료를 조달한 것이 아닌지, 이 농작물에 대한 적절한 보상이 농부에게 돌아갔는지, 이 식재료가 유기농이 맞는지 명확하게 확인할 수 있다.한편, 중국의 월마트와 IBM이 협력해 중국에서 유통되는 돼지고기의 유통 전 과정을 블록체인 기술을 활용해 추적을 하기도 했다. 월마트는 더 나아가 농산물 공급망의 모든 단계를 추적하기 위한 프로젝트를 IBM과 진행하고 있다. 또한 영국의 신생기업 에버레저는 블록체인 기술을 이용해 다이아몬드와 같은 고부가 가치 상품들의 원산지 추적과 인증을 IBM 블록체인 기술을 활용하고 있다.3. 디지털 콘텐츠블록체인 기술로 디지털 콘텐츠에 대한 지적 재산권 보호를 더 확실하게 할 수 있다. 기존에는 불법적인 경로로 승인되지 않은 디지털 콘텐츠들이 유포가 됐다. 하지만 블록체인 기술로 온라인 콘텐츠에 대한 저작권, 권한, 결제를 관리할 수 있도록 작업할 수 있다. 블록체인 기술을 통해 콘텐츠 원저자의 증명을 더 쉽게 하고 해당 콘텐츠에 누가 접근을 했는지 추적할 수 있다.또한 항상 이슈가 되어 왔던 뮤지션들의 음반 판매 금액에 대해서도 블록체인 기술이 혁신을 가져다줄 것이다. 기존의 중간 단계의 서비스를 없애고 비용을 절감해서 음반 제작자들에게 더 많은 몫이 돌아갈 수 있다. 위에서 언급한 스마트 계약을 통해 라이선스 이슈의 문제들도 해결할 수 있다.블록체인 개발자, 얼마나 핫해?블록체인 기술에 대한 뜨거운 관심에 힘입어 블록체인 개발자에 대한 수요도 크게 증가하고 있다. 아직은 국내에서 가상화폐에 대한 비즈니스가 주를 이루고 있지만 정부의 정책과 시장의 기대와 맞물려 그 수요는 더욱더 커질 예정이다. 여기 블록체인 개발자의 수요에 대한 기사 있다.기사에 따르면 지난 1분기 취업사이트 잡코리아에 블록체인 키워드로 등록된 채용공고는 총 1500여 건이다. 이는 전년 동기 대비 9배 이상 늘어난 수치라고 한다. 또 잡코리아가 분석한 결과 지난해 하반기부터 암호화폐 개발자 수요가 급증했다고 한다. 지난해 1분기와 비교하면 올해 1분기 등록건수는 9배 이상이며 직전 분기와 비교해도 3배에 달한다.다른 아웃소싱 플랫폼 사이트도 비슷하다. 4만 7천 명의 유저를 보유한 위시캣에 따르면 2014년 8월부터 지난달까지 등록된 암호화폐 관련 프로젝트는 108건이다. 그리고 이 중에 절반인 55번이 올해 1분기에 등록이 되었다고 한다. 개발자 커뮤니티 OKKY에 올라온 구인 글에는 월 급여 900만 원을 제시하고 암호화폐 개발하는 개발자를 찾고 있었다. 또 구인 사이트에 올라온 암호화폐 거래소 프로젝트 중 개발비용이 45일 동안 2억 5천만 원에 이른 사례도 있었다.기사에 나온 것처럼 블록체인 개발자의 수요는 암호화폐에 집중되어 있기는 하지만 빠르게 증가하고 있다. 또 많은 기업들이 암호화폐가 아닌 다른 비즈니스의 모델을 찾으면서 블록체인 서비스를 준비하고 있다. 블록체인 개발자는 말 그대로 요즘 가장 핫하다고 할 수 있다.그래서 블록체인 개발자 되기 위해서는?이렇게 핫한 블록체인 개발자가 되기 위해서는 어떤 기술들을 공부해야 할까? 물론 어떤 분야의 개발자가 된다는 것이 특정 기술을 익힌다고 되는 것은 아니다. 웹 개발자가 된다고 해서 자바스크립트와 HTML, CSS를 익힌다고 되는 것이 아닌 것처럼 말이다. 회사마다 진행하는 프로젝트가 있고 그것에 맞춘 기술 스택들을 익혀야 한다. 하지만, 그럼에도 블록체인 개발에 있어서 주류가 되는 기술들은 있다. 이것들을 공부해 가면서 블록체인 개발자를 준비한다면 한층 더 수월해질 것이다.1.솔리디티(Solidity)솔리디티는 블록체인 플랫폼에서 스마트 계약을 만들기 위한 프로그래밍 언어다. 이더리움의 핵심인 스마트 계약을 만들기 위해서는 솔리디티를 배워야 한다. 솔리디티는 EVM(Ethereum Virtual Machine)에서 돌아가도록 설계되었고, 자바스크립트와 비슷한 문법 구조를 갖고 있다. 자바스크립트를 알고 있다면 배우기가 훨씬 수월할 것이다.블록체인은 다양한 분야가 존재하지만 그중 스마트 계약은 가장 대표적인 혁신 기술이다. 그 스마트 계약 기술을 선도하는 이더리움 프로젝트를 다루기 위해서는 솔리디티를 배우는 것이 필수적이다. 블록체인 개발에도 다양한 기술 스택들이 있겠지만 주류 기술을 배운다고 하면 솔리디티를 배워야 한다.솔리디티를 배우기 위해서는 다양한 방법이 있겠지만, 유데미의 강좌를 들으면서 공부하는 것을 추천한다. 저렴한 가격에 퀄리티 높은 강좌를 들을 수 있다. 자세한 사항은 이곳을 참고하면 된다.2.하이퍼레저(Hyperledger)블록체인이 개념이 퍼블릭 네트워크 기반의 시스템이기는 하지만 누구나 데이터를 볼 수 있기 때문에 기밀문서 관리에는 사용되기 힘들다. 특히 금융권이나 기업 문서 같은 경우는 더더욱 그러하다. 그래서 폐쇄적인 프라이빗 네트워크 내에서 블록체인을 활용할 수 있는 기술이 필요하다.하이퍼레저는 이러한 프라이빗 블록체인을 필요로 하는 기업들의 연합체라고 볼 수 있다. 이 기업들은 컨소시엄을 맺고 프라이빗 블록체인을 더 발전시키려고 다양한 분야에서 협업하고 있다. 하이퍼레저 프로젝트는 리눅스 재단에서 주도하며 금융, 은행, 제조, 기술 등 다양한 분야에 관여한다. 그리고 이 프로젝트는 스마트 계약, 분산 합의 네트워크에 목표를 두고 있다.지금까지 에어버스, 엑센츄어, 바이두, IBM, J.P 모건, 히타치, 삼성 SDS 등 다양한 기업이 하이퍼레저에 포함되어 있다. 그만큼 많은 기업들이 하이퍼레저 프로젝트에 관심을 가지고 있다. 하이퍼레저 역시 유데미의 강좌를 통해서 배울 수 있다. 자세한 사항은 이곳을 참고하면 된다.블록체인 개발자의 첫걸음블록체인 개발자가 되기 위해서는 위의 기술 스택뿐만 아니라 기본적으로 백엔드에 대한 지식과 최소한 암호 기법에 대한 기본 지식이 있어야 한다. 또한, 블록체인의 많은 API 및 SDK가 자바스크립트와 nod.js로 이루어져 있다. 무엇부터 시작해야 할지 모르는 분이라면 자바스크립트부터 시작하면서 첫걸음을 떼는 것을 추천한다.블록체인은 IT 기술의 최전선에 있는 기술이다. 그렇기 때문에 산업 동향을 항상 예의주시하면서 빠르게 움직여야 한다. 기업이 원하는 블록체인 기술 스택을 빠르게 습득하고 그에 맞는 실력을 갖추는 것이 중요하다.지금까지 블록체인 개발자에 대해 알아보았다. 많은 내용들을 다루다 보니 각각에 내용들에 깊이 있게 다루지는 못했다. 그래도 이 글을 통해 블록체인 개발자가 되기 위한 가닥은 잡을 수 있었으면 좋겠다.
조회수 859

[Tech Blog] How we pipe data

버즈빌에서는 미국과 일본을 비롯한 전 세계 30개국에서 1,700만 이상의 유저의 행동에 대한 데이터를 수집하고 있습니다. 이 데이터에는 유저들이 잠금화면에서 어떤 Action을 수행하는지부터 잠금화면에 어떤 광고가 노출되고 유저들이 어떤 광고를 클릭 하는 지 등의 정보들이 포함되는데요. 이러한 데이터는 여러 종류의 다른 소스로부터 오고 각기 다른 종류의 DB (MySQL, DynamoDB, Redis, S3 등등) 에 저장됩니다. 하지만 데이터를 분석하고 활용하기 위해서는 이렇게 흩어져서 저장된 데이터들을 한 곳으로 모으는게 필수적입니다. 그래서 저희 팀에서는 이렇게 다양한 소스로 부터 발생해서 다양한 DB에 저장된 데이터를 어떤 과정을 통해 한 곳으로 모을 것인가에 대해서 고민하게 되었습니다. 그리고 고민 끝에 각각의 DB에 저장된 데이터를 하나의 큰 데이터 스토리지에 모을 수 있는 ‘데이터 파이프라인’을 구축하는 계획을 세우게 되었습니다. 하지만 다양한 소스로부터 수집된 수많은 데이터들을 잘 유지해가며 하나의 큰 DB에 모을 수 있는 데이터 파이프라인을 구축하는 것이 쉽지 않았는데요. 이 포스팅을 통해서 버즈빌에서는 어떻게 각각의 데이터들을 수집하고 저장하는지 또 이런 데이터들을 통합하기 위한 파이프라인을 어떻게 구축했는지 공유하고자 합니다. 본격적인 이야기에 앞서 현재 버즈빌에서 모든 데이터가 모이는 데이터 스토리지로 사용 중인 RedShift에 대해 이야기하고 싶습니다. 개인적으로는 정말 쓰면 쓸수록 감탄이 나오는 데이터 스토리지라고 생각합니다. Redshift는 AWS에서 관리하는 SQL기반의 열기반 스토리지(SQL based columnar data warehouse)이며 복잡하고 대규모의 데이터 분석에 적합합니다. 고객들로부터 생성된 수많은 종류의 데이터를 기반으로 다양한 인사이트를 얻고자 하는 많은 기업들(Yelp, Coursera, Pinterest 등)이 사용하고 있는 솔루션 이기도 합니다. 버즈빌에서는 여러가지 특징을 고려하여 Redshift를 도입하게 되었는데요. 그 이유는 아래와 같습니다.  Performance Performance Performance.     Column 기반 스토리지 -> 필요한 Column에만 접근한다.   Join이나 aggregation이 많은 복잡한 쿼리도 쉽게 계산할 수 있다.   분산 저장 방식 (Distributed Storage)   Date Ingestion이 빠르다. (Ingest first, index and clean later)     Horizontal Scalability   sharding이나 clustering에 추가적인 complexity가 필요하지 않다. 데이터가 원래 노드에 저장되기 때문에 horizontal scaling을 위해서는 그냥 추가적인 노드만 붙이면 된다. 다른 AWS서비스들과 쉽게 연동이 가능하다. (장점 이자 단점)    하지만 몇 개의 아쉬운 점들도 있습니다. :  다른 RDBMS와 달리 Mutilple indice를 지원하지 않는다.  1 Distribution Key and 1 Sort Key   MySQL이나 다른 RDBMS처럼 uniqueness나 foreign key constraint를 걸 수 없다.     모은 데이터를 어떤 방식으로 Redshift로 옮겨야 할까요? 버즈빌이 구축한 데이터 파이프 라인은 크게 3갈래의 메인 루트가 있습니다.   1) Athena Preprocessing Batch job을 통해서 (잠금화면 활동, 광고 할당) Why? 전처리 작업(Preprocessing)이 필요한 가장 큰 이유는 들어오는 데이터의 어마어마한 크기 때문입니다. 또 어떤 데이터들은 너무 raw하기 때문에 애널리스트나 데이터 사이언티스트가 분석에 활용할 수 있는 형태로 바꾸기위해 전처리가 필요하기도 합니다. 버즈빌에서는 이런 데이터들을 처리하기 위해서 AWS Athena를 사용하고 있습니다. Athena는 과금 방식이 Athena 쿼리로 읽은 데이터의 사이즈를 기반으로 하기 때문에 다른 EMR이나 MapReduce solution들을 사용했을때보다 상대적으로 적은 비용으로 활용할 수 있다는 장점이 있습니다. How?  먼저 S3로 데이터를 보냅니다. 그 후, Athena를 활용하여 데이터를 가공/처리합니다. 가공된 데이터를 읽어서 Redshift로 보냅니다. (COPY command 활용)  Pros?  서버를 따로 가질 필요가 없습니다. (EMR 클러스터나 서버를 관리할 필요가 없음) 경제적입니다. (S3에서 1TB를 읽을때마다 $5 정도의 비용)  Cons?  사용량이 몰리는 시간대 (12:00 AM UTC)에는 일부 쿼리가 실패할 수 있습니다. -> 중요하고 필수적인 데이터는 Athena가 아닌 다른 방법을 통해 처리하는것이 적합합니다. PRESTO DB의 기능을 (아직은) 온전히 활용할 수 없습니다.     2) Firehose를 통해서 (Impression, Clicks, Device, Events) Why? Kinesis Firehose는 Redshift, Elasticsearch, S3와 같은 최종 목적지까지 다양한 데이터들을 안정적으로 옮길 수 있는 파이프라인을 제공할 뿐 아니라 Fluentd와 매끄럽게 잘 연동된다는 점에서 굉장히 뛰어난 서비스 입니다. Fluentd는 서버로부터 firehose까지 데이터가 안정적이고 꾸준하게 전달 될 수 있도록 도와줍니다.  따라서 firehose와 fluentd의 연동을 통해서 따로 두개의 파이프라인 ( SERVER -> S3, S3 -> Redshift) 을 관리할 필요 없이 데이터 소스부터 최종 저장소까지 이어지는 하나의 파이프 라인만 관리할 수 있게 됩니다. How?  (https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html)  적절한 data format과 원하는 ingestion period를 설정하여 Firehose delivery stream을 만듭니다.   conf["user_activity"] = { "DataTableName": "user_activity", "DataTableColumns": "user_id, app_id, activity_type, timestamp", "CopyOptions": "FORMAT AS JSON "s3://buzzvil-firehose/sample/user_activity/jsonpaths/user_activity_log-0001.jsonpaths" gzip TIMEFORMAT AS "YYYY-MM-DDTHH:MI:SS" ACCEPTINVCHARS TRUNCATECOLUMNS COMPUPDATE OFF STATUPDATE OFF", "jsonpaths_file": "buzzvil-firehose/sample/user_activity/jsonpaths/user_activity_log-0001.jsonpaths", } configuration = { "RoleARN": "arn:aws:iam::xxxxxxxxxxxx:role/firehose_delivery_role", "ClusterJDBCURL": "jdbc:redshift://buzzvil.xxxxxxxxx.us-west-2.redshift.amazonaws.com:5439/sample_db", "CopyCommand": { "DataTableName": sample_table, "DataTableColumns": conf[type]["DataTableColumns"], "CopyOptions": conf[type]["CopyOptions"], }, "Username": db_user, "Password": db_password, "S3Configuration": { "RoleARN": "arn:aws:iam::xxxxxxxxxxxx:role/firehose_delivery_role", "BucketARN": "arn:aws:s3:::firehose_bucket", "Prefix": "buzzvil/user_activity/", "BufferingHints": { "SizeInMBs": 64, "IntervalInSeconds": 60 }, "CompressionFormat": "GZIP", "EncryptionConfiguration": { "NoEncryptionConfig": "NoEncryption", } } }  2. Fluentd docker containers을 각각의 서버에서 세팅하고 실행합니다.  @type tail path /var/log/containers/buzzad/impression.json pos_file /var/log/containers/td-agent/impression-json.pos format none tag firehose.impression @type kinesis_firehose region us-west-2 delivery_stream_name "prod-buzzad-impression-stream" flush_interval 1s data_key message  3. Firehose에서 데이터를 잘 모아서 Redshift 문제없이 보내고 있는지 모니터링 합니다.  Pros?  빠르고 안정적인 데이터 전송이 가능합니다. 모니터링이 편합니다.  Cons?  Schema가 자동으로 바뀌지 않습니다.( Redshift의 Schema를 수동으로 일일히 변경해주어야 합니다.)     3) MySQL Asynchronous Loads를 통해 (Ads, Contents, Ad Provider, Ad Publishers) Why? 여러대의 RDS MySQL DB로부터오는 데이터간의 sync를 맞춰가며 Redshift로 데이터를 복제하기 위해서는 3가지의 테크닉을 활용해야만 합니다. (이 방법은 소개하고 있는 세 메인 루트 중에서 가장 매력도가 떨어지는 방법입니다..) How?  FULL_COPY  MySQL 테이블 전체를 복사해서 SQL insert를 통해서 Redshift에 복사합니다.     INCREMENTAL_COPY  이전에 복사한 가장 마지막 Primary key부터 시작해서 새로생긴 row들을 읽어서 Redshift로 복사합니다.     UPDATE_LATEST_COPY  이전에 복사한 가장 마지막 타임스탬프부터 시작해서 새로 생성되거나 업데이트된 row들을 Redshift로 복사합니다.(중복된 값은 삭제).    Pros?  데이터의 특징에 맞게 잘 조정된 방법입니다. binary log를 통한 Replication보다 훨씬 다루기 쉽습니다.  Cons?  MySQL을 잘 조정하기 위해 여러대의 서버나 lambda를 다루어야만 합니다. -> Redshift sync task를 위해서 안정적인 schema altering을 할 수 있을 만큼 Redshift의 ORM이 발전된 상황은 아닙니다..    어떤 데이터를 다루는지에 따라서 위에서 소개한 3가지 방법 중 어떤 방법을 활용해야할지가 달라진다고 할 수 있습니다. 예를 들어 Transactianl log 같은 데이터들의 경우에는 firehose를 통해 전달하는 방법이나 먼저 aggregate하는 과정을 거친 후에 Redshift에 저장하는 식으로 처리를 해야 합니다. 그리고 MySQL에 저장된 fact table같은 데이터들은 CDC (change data capture) sync method를 통해서 Redshift에 데이터를 전달하고 동기화를 하는 과정이 필요합니다. 버즈빌에서는 위에서 소개해드린 3가지 방법을 적절히 조합해가면서 BD 매니저나 애널리스트들이 서비스간 플랫폼간의 데이터분석을 쉽게 할 수 있는 데이터 환경을 구축하기 위해서 노력하고 있습니다.
조회수 1515

8퍼센트 '프로덕트' 팀 인터뷰

안녕하세요, 8퍼센트입니다.8퍼센트는 다양한 매체와 콘텐츠로 이야기를 전하고 있습니다. 이번엔 인터뷰를 통해 8퍼센트를 이루고 있는 각 팀들의 이야기를 들어보며 고객에게 더 가까이 다가가고자 합니다. 그 첫 번째 주인공은 서비스 개발을 담당하는 ‘프로덕트’ 팀입니다.Q. 안녕하세요, 인터뷰를 위해 프로덕트 팀 허재영 님과 이호성 CTO님이 자리해주셨는데요. 먼저, 8퍼센트의 제품을 만드는 프로덕트팀은 구체적으로 어떤 일을 하시나요?A. 프로덕트 팀은 8퍼센트의 서비스를 만드는 팀입니다. 고객들이 8퍼센트를 이용하는 데 있어서 불편함이 없도록 서비스를 개선하고 유지하는 역할을 하고 있습니다. 예를 들어 기존의 인터넷 기반 금융 서비스는 공인인증서, Active X를 보면 알 수 있듯이 사용자의 편리함에 초점을 두고 있지 않습니다. 저희의 역할은 사용자들에게 더 편리하고 효율적인 금융 생활을 할 수 있도록 새로운 금융서비스를 시도하는 것입니다.Q. 새로운 금융시스템을 구축하고 운영해나가는 과정이 쉽지 않을 것 같은데, 그것에 대해 어려움과 극복해낸 경험이 궁금합니다.A. 8퍼센트는 이미 만들어진 솔루션을 사용하거나 외주를 통해 시스템을 구축하는 기존의 회사들과 다르게 직접 바닥부터 금융 시스템을 쌓고 있습니다. 금융시스템은 정확함과 안정성을 빼놓을 수 없는데 사용자가 많아지고 시스템이 거대해질수록 생각지 못한 부분에서 오류가 생기게 됩니다. 이러한 오류는 회사의 손실을 발생시키고, 고객들의 신뢰를 잃게 합니다. 위와 같은 일이 발생하지 않게 시스템을 정밀하게 설계하는 것은 기본이고 추가로 발생하는 문제들에 대해 올바르게 대처하는 것이 금융 시스템을 구축하고 운영하는 과정입니다. 물론 힘든 과정이지만 단계별로 시스템을 구축하는 것이 앞으로 남들과 다른 서비스를 제공할 수 있는 기반이 된다고 생각합니다.서비스 초기, 지급 프로세스에 문제가 있었던 적이 있었는데, 이를 인지하고 그에 대한 대응을 진행했습니다. 또한, 대응에 그치지 않고 테스트와 수정한 부분에 대해 제대로 동작하고 있는지 알아보는 QA(Quality Assurance) 프로세스를 갖추는 계기가 되었습니다. Q. 그렇게 만들어지는 8퍼센트 서비스만의 차별화된 점은 무엇인가요?A. 첫 번째는 '자동 투자'입니다. 자동 투자를 선택하게 되면 예치금과 상환된 투자금이 지속적으로 재투자됩니다. 따라서, 고객이 직접 신경 쓰지 않아도 자산을 쉽게 불릴 수 있습니다. 두 번째는 '스페셜딜'입니다. 일부 스페셜딜은 기업이 제공하는 서비스를 투자자가 직접 체험해볼 수 있으며, 이를 통해 고객은 투자 이외의 부수적인 혜택을 누릴 수 있습니다. 소개해드릴 마지막 차별점은 다양한 업체와의 제휴입니다. 8퍼센트는 현재, 기존 금융권에 있는 많은 금융 회사들과 제휴를 맺고 있습니다. 기존 금융 회사가 오랜 시간 쌓아놓은 시스템과 노하우, 그리고 8퍼센트의 서비스를 합쳐 좋은 서비스를 제공하는 것은 저희 서비스의 강점이 된다고 생각합니다. 또한, 기존 금융권뿐 아니라 토스와 같은 스타트업과의 제휴 역시, 토스 플랫폼에서 간편하게 8퍼센트 서비스를 이용할 수 있다는 점에서 이런 다양한 제휴는 저희만의 차별점이 된다고 생각합니다.Q. 8퍼센트 서비스에는 정말 다양한 장점이 있는 것 같습니다. 이렇게 좋은 서비스를 구상할 때 중요하게 생각하는 기준이 무엇인가요?A. 프로덕트 팀에서는 제품을 구상하는 데 있어서 ‘고객들에게 전달될 수 있는 가치’, ‘안정성과 정확성’, ‘사용성’ 이렇게 세 가지 기준을 중요하게 생각하고 있습니다. 금융 서비스는 대부분 돈으로 환산되는 가치를 추구합니다. 프로덕트 팀이 추구하는 금전적인 가치 역시 투자를 했을 때 돈을 벌고, 대출을 통해 돈을 절약하는 것입니다. 이러한 금전적 가치는 개인과 개인들이 서로 연결되어 발생한다는 점에서 사회적 가치에 기여한다 생각합니다. 또한, 핀테크 서비스들이 나오기 이전에 투자와 대출은 상당히 무겁고 다가가기 힘든 면이 있었습니다. 그래서 프로덕트 팀에서는 투자와 대출로 이뤄진 8퍼센트 서비스를 이용자가 손쉽게 쓸 수 있게 만드는 ‘사용성’이 제품을 구상하는 데 있어서 중요한 기준이 됩니다. 예를 들어, 토스 플랫폼을 통해서 저희 투자 서비스를 이용할 수 있게 하는 것도 ‘사용성’을 높이는 것의 일환입니다.Q. 얘기를 들어보니 명확한 기준을 통해 좋은 서비스가 나오는 것 같습니다. 8퍼센트 투자나 대출 서비스를 직접 이용하시나요? A. 모두가 소액부터 거액까지 다양하게 투자 서비스를 직접 체험하고 있습니다. 이는 고객의 입장에서 생각해볼 기회가 되어 일하는데 좋은 자극이 됩니다. ‘개밥 먹기’라고 개 사료를 만드는 회사에서 실제로 먹어보면서 제품이 어떤지 테스트하는 것에서 유래한 말이 있습니다. 8퍼센트 역시 이런 '개밥 먹기' 테스트를 꾸준히 하고 있습니다. 상품 2.0이 처음 출시되었을 때, 직접 소액 대출을 받아 안내, 혹은 연체 문자가 잘 오는지 등 대출 프로세스를 경험하기 위해서 대출 서비스를 이용했습니다. 물론 회사 내부 관계자에게 대출하기 위해 투자자를 모은다는 것은 윤리적인 문제가 있기 때문에 딜을 내부로만 열어서 회사 분들이 투자한 것만으로 모집했습니다. 신용등급은 당연히 떨어지지 않았고 상환하며 아직 잘 쓰고 있습니다.Q. 현재 P2P 금융 법제화에 대한 논의가 활발히 진행되고 있는데, 과거 새로운 규제가 생겼을 때 대처한 경험이 궁금합니다.A. 지금까지 가장 큰 변화는 작년 5월 가이드라인이 시행되면서 일어났습니다. 그전까지 투자자들로부터 모집한 자금은 회사의 소속으로 되어있었는데, 회사가 부도가 나게 되면 그 돈이 압류되어 투자자들의 돈을 못 빼는 현상이 발생할 수 있었습니다. 가이드라인에서 제시한 부분 중 가장 큰 것이 바로 이에 대한 것입니다. 투자자의 돈을 제삼자가 보관하게 해라 즉, 금융기관이 그 돈을 보관하게 하라는 것인데 이를 위해 농협과 함께 설계부터 시작해 지금의 시스템을 만들었습니다. 농협 측에 자금을 보관하고 저희가 시스템상으로 자금의 흐름을 요청하는 식으로 자금이 직접 저희를 통하지 않고 P2P 거래가 이루어지게 되었습니다.Q. 프로덕트 팀의 대처 능력이라면 법제화 같은 변화에서도 흔들림 없는 서비스를 제공할 수 있을 것 같습니다. 마지막으로 프로덕트팀의 목표는 무엇인가요?A. 프로덕트 팀에서는 항상 ‘우리가 바라는 프로덕트가 무엇일까?’ 고민합니다. 개발자로서 가장 안타까운 것은 열 명의 팀원들이 서로 힘내서 만들어내는 서비스가 사라지는 것입니다. 더 나아가, 사라지지 않는다는 것은 사회적인 가치를 인정받는다는 것입니다. 물론 돈을 만들어낸다는 얘기이기도 하지만 우리가 열심히 만든 자식과도 같은 서비스의 사회적인 가치를 인정받고 지속가능하게 하는 것이 최종적인 목표입니다. 특히 이번 18년도 1분기에 8퍼센트의 단기적 성장과 함께 미래 계획이 구체화 되고 그에 대한 긍정적인 확신이 생겨 큰 동기부여가 되었습니다. 8퍼센트 고객들도 더 편리하고 효율적인 서비스를 만들어갈 저희와 끝까지 동행해주셨으면 좋겠습니다.인터뷰는 8퍼센트의 모든 팀을 소개할 때까지 계속되니 많이 기대해주세요:)> 8퍼센트 서비스 보러 가기 #8퍼센트 #에잇퍼센트 #프로덕트팀 #프로덕트 #인터뷰 #팀원소개 #팀소개
조회수 610

질문에 답이 있다

정확한 시점은 기억나지 않지만,어느 순간 일에 대한 막연한 두려움이 사라지게 된 기적(?)을 경험했다.주니어 시절에는경험이 부족하기 때문에 정답을 찾으려는 의지가 강했다.어떻게 답을 찾을 것인가가 최우선 과제였다.새로운 'A'를 기획하라는 일을 받게 되면과거에 선배들이 진행했던 유사한 사례를 파악하거나, 경쟁사들이 접근했던 방식을 벤치마킹 하는 것이 늘 첫번째 순서였다.혹시라도 적절한 선례를 찾지 못한다면어디서부터 무엇을 해야할지 모르는 두려움과 당황스러움에 안절부절하지 못하는 상태를 경험하곤 했다. 나 뿐 아니라,대부분 이 과정을 거쳐서 '선배'가 되어가는 것이다.지금 하는 일이 익숙한가?직장에서 90%이상 업무는하면 할수록 경험이 쌓이고 숙련도가 올라가서 일정한 패턴에 익숙해지는 일들이다. 선임자는 그 패턴 공식을 통해 능숙하게 일을 처리할 수 있게 된다.대개 자신의 일을 10년 이상 하게 되면 그런 경지(?)에 올라가게 된다.한편으론, 이 때부터는 '다르게 생각'하기가 어려워지게 된다. 이른바 '혁신'이 불편하게 되는 시기가 온다.이미 익숙해진 패턴을 부정해야하기 때문이다.자신도 모르는 사이에 꼰대로 변신하는 시기가 이 때다.차/부장님들의 얼굴이 떠오를 것이다.불행하게도나의 주된 업무는늘 혁신을 해야하는 일이었다.창의적인 일은 참으로 신나는 일이기도 하지만,이게 일상의 일이되면 사실 유쾌하지만은 않다.익숙해져서는 안되기 때문이다.숙련되면 '뻔~'해지기 때문이다.늘 그런 부담감과 두려움을 갖다가어느 순간 그 두려움에서 벗어나게 된건'올바른 질문'을 스스로 던지게 된 후 부터다.올바른 질문이란거창하고 어려운 질문이 아니다.매우 상식적이고 근본적인 질문이어서,오히려 그 질문이 질문할 '깜'도 안될 것 같은 그런 내용들이었다.'이걸 왜 해야하지?''왜 지금 해야하지?''이 일이 꼭 필요한 일인가?''내가 사장이라도 이 일을 시켰을까?'...에서 시작해서,구체적인 방식, 기대하는 결과물, 이 일을 시킨 의도 등을 포함해서 백지 위에 스스로 질문지를 작성하는게 나의 첫번째 스텝이다.흰 종이 위에 이 질문들을 반나절 써가면서 일의 구조를 잡는다. 혼란스럽고 답변하기 어려운 질문들로 내 머리 속 역시 어지럽지만, 이 과정을 지나고나면 평화가 다가온다.반나절이 30분 정도의 길이로 느껴질 만큼몰입의 과정을 겪는다.이렇게 몇 번의 반복을 거치면 질문의 답이 아니라질문 자체가 정결해진다.꼭 필요한 질문이 정리되면문제의 반 이상이 해결되는 느낌이 든다.Big Questions두려움이 사라지는 과정이다.올바른 질문을 스스로 찾는 과정이 생각하는 힘이 된다.이제는 일이 두렵지 않다.두렵지 않게되니, 새로운 것도 즐기게 되는 것 같다.그것이내가 퇴사를 결심한 이유다.
조회수 2931

넌 어디에 있니? 스타트업 올래?

오늘로써 2017년 상반기(주)클린그린의 신규 채용공고 마감이다.이렇게 쓰니까 꽤 거창해 보이지만,작은 스타트업이 멤버를 꼬시는 미팅 수준이다.물론,공작새처럼 한껏 꼬리날개를 펼쳐화려함으로 유혹하지는 않는다.많은 지원자분들께내일이면 결과를 고지해야 하고그에 따른 메일 초안을 작성하고 있다.누군가에게는 아쉬움이 담긴 메일을,누군가에게는 함께 해 보고 싶다는 제안을진심을 담아 한 분, 한 분께 전하고자 한다.2016년 채용 때는 준비가 미흡하여첫 만남 자리부터 횡설수설하고,떨기도 하며,밤새 고민의 연속이었다.이번 채용에서는그때보다는 좀 나은 것 같다.지원해 주신 분들과 이야기를 나누며,우리 자신을 되돌아보게 되었다.참 좋은, 탐나는 분들이 많아내부적으로 난상토론도 이루어지고,우리에게 채용 가능한 한계가너무 아쉽고 미안하기도 하더라.올해에는 성장 속도를 좀 더 올려야 하는이유를 찾았다고 할까?우리가 선택한 주요 채용 사이트는로켓펀치, 오피스엔, 더팀스였다.그 외에더 많은 채용 지원 사이트(원티드, 위시켓) 등이 있지만,이전에 채용을 수행했던 사이트들에공고를 올려놓은걸 수정 작업만 살짝 해도 되기에 선택하였다.한 가지 이유를 덧붙이자면,우리가 일일이 관리하기 어려운 점에서채용 사이트를 한정할 필요가 있었다.다른 스타트업 채용 사이트가 더 좋고, 나쁘고의문제가 아니라 그냥 익숙함과채용 업무량을 줄이고자 정한 거일 뿐!오해하지 마시라~!잡코리아나 커리어, 사람인과 같은 채용사이트의 경우,스타트업에 특화된 인재를 찾기가 어렵더라.(물론 이건 개인적인 의견!)대체적으로 스타트업 채용에 특화된 사이트들을통해 지원한 분들은주위에 스타트업 경험이 있는 지인이 있다던가,스타트업에 관심이 있다던가,스타트업의 한계와 특성에 대해 어느 정도사전 지식이 있는 편이다.채용을 하는 데 있어지인 추천/소개도 있고,프리랜서 계약 후, 채용 제안을 하는 방법도 있다.이런 방법도 있다고 넌지시 오지랖 첨언~!다시 본론으로 돌아와서...채용을 진행하는 데 있어 사전 준비가 필요하다.특히나 우리 같은 스타트업 입장에서첫 단추를 잘 끼워야 하니 더더욱 신중해져야 한다.1) 신규채용이 왜 필요한가에 대한 타당성 확보단순히 사업 확장을 위해?아니면, 기존 멤버들이 업무로드 상태라서?확실한 채용 근거가 있어야 한다.예를 들어, 우리 회사에 부족한 부분이 마케팅이라면,이것으로 어떻게 해결할 것인가에 대한 논의가 필요하다.외주를 주는 것이 나을 것인가?그럼 어떻게 관리할 것이고 예상 소요 비용은 어떠한가?외주로 얻을 수 있는 것은 무엇인가?위의 질문들에 비해 신규채용으로 얻을 수 있는 이점이더 클 때, 신규채용을 고려할 수 있다.2) 어떤 동료를 원하는가: 이 부분은 개념을 넘어선 구체적인 인재상이 필요!막연하게창의, 도전, 비전이 있는 인재상!모두가 원한다.심지어 대기업 채용 인재상에도 빠지지 않고 나온다.근면하고, 성실하고 등등등~~~~~우리가 원하는 인재는구체화되어 있어야 한다.지원자와 만나서 묻고자 하는 바를미리 공부해야 한다.좋은 지원자는 회사에 대해 찾아보고,나름 공부하고 온다.채용 담당자는 지원자에 대해 공부해야 한다.지원자가 우리 인재상에 맞는지 알려면먼저 지원서에서 그러한 흔적을 찾아내는 노력을 해야 한다.잠깐 쓴소리 하나만 하자면...이력서나 지원정보 등은 좀 미리 메모라도 해 둬라하다 못해 이름 정도는 알아두는 게 최소한의 예의다.(출처: 영화 테이큰, 리암 니슨)이 정도는 하는데...딱 거기까지만 공부하면,딱 거기까지만 알 수 있다.미리 질문을 만들어야 한다.나이라던가, 외국어 성적이라던가그런 쓸데없는 거 묻지 말고...실제적인 질문!생각할 수 있는 질문!우려되는 질문!'우리의 컨셉은 이러이러한데이걸 어떻게 고객들에게 인지 시킬 수 있을까요?''우리의 제품은 이건대이게 고객에게 어떻게 하면 구매까지 이뤄질 수 있을까요?''우리가 해결하지 못한 문제는 이거고문제 해결을 위한 방법은 무엇이 있을까요?'"우리는 언제 언제쯤 이런 이슈가 있는데어떻게 해야 할까요?"등의 질문을 산정하고 이에 맞춰어떤 직무와 어떤 세부적인 방향을 추진할 수 있는지에대하여 리스트를 작성해야 한다.창의적인 거? 근면한 거? 도전적인 거?그거 알고 싶으면 그걸 알아낼 수 있는질문을 해야 지원자도 어필할 수 있는 거지.그런 질문 하나 없이 인재상을 어떻게 알아낼 수 있는가?또한, 자연스럽게 지원자의 입에서회사에 대한 질문이 나올 수 있도록 유도해야 한다.그래야 동등한 입장에서 커뮤니케이션이 된다.그리고 협상을 할 수 있다.협상에서 진짜 구체적인 인재상을서로 짜 맞출 수 있다.(출처: MBC 무한도전, 무도탐정사무소편)실제로 대화가 자연스레 이루어지면,카페에서 수다를 나누듯이 진행된다.우리 회사에서 줄 수 있는 급여는 이 정도고,근무환경은 이렇고, 복리후생은 이런 건데...그쵸? 많이 열악하죠?근데요. 이거는 약속드릴 수 있고요.지금 우리는 이렇게 하고 있는데그게 이 때는 완료할 거라 이렇게 저렇게 블라블라~~OOO 님은 어떻게 생각하세요?그럼 이건 이렇게 하면 어떨까요? 블라블라~~~이게 더 솔직하잖아.우리 스타트업에서 원하는 인재상이라는 건열악한 조건이고, 불안정함에도 불구하고,함께 읏샤읏샤 하면서, 잘 살아보세~웃으면서 행복하게 동행할 사람 뽑는 거잖아.인재상이라는 게...한 두 번 만나서 알 수 없는추상적인 개념은 지원자에게도,채용담당자에게도 곤욕스럽다.물론,이런 개념적인 인재상이 필요 없다는 것이 아니다.개념을 잡고 상세한 계획을 잡을 수 있으니까.내가 하고자 하는 말은 단지 개념만 잡고채용을 진행하지 말라는 것이다.3) 경력자와 신입 중 누구를 원하는가스타트업은 항상 경력자에 갈증을 느낀다.능숙한 경력자가 회사에 큰 힘이 되어준다는 점은부인할 수 없는 사실이다.하지만, 경력자로 채용을 채우는 것만이 능사는 아니다.경력자가 필요한 것인지,아니면,신입이 필요한 것인지에 대한 고민이 필요하다.경력자가 합류하였을 때,우리는 무엇을 기대하고, 무슨 리스크가 있는가.신입이 합류하였을 때,우리는 무엇을 지불하고, 무엇을 얻는가.보상의 문제는 오히려 단순한 셈법이다.기존의 구성원들과 충분히 논의하였는가,어떤 변화를 예상할 수 있으며,어떤 안정을 기대할 수 있는지에어느 정도 그림을 그려야 한다.우리 회사의 경우,좀 독특한 채용규정이 있다.신입은 수습이나 인턴기간이 없고,경력자에게만 3개월 수습기간을 둔다.급여나 업무 지원은 동일하다.그 이유는 경력자의 경험과 노하우가우리 회사에 적용될 수 있는지,기존 구성원들과 잘 융합될 수 있는지를가늠하기 위한 최소한의 방침이다.역으로 신입의 경우는..,어차피 제로베이스부터 시작이라는 가정하에굳이 수습기간이 필요 없다고 만장일치로 동의하였다.대신 경력자의 경우,3개월 수습기간 이후에 연봉과 직급에 대한협상을 다시 한다.4) 시간을 줄이는 것과 늘리는 것이 부분은 3)의 주제로부터 연장선에 있다.채용에 있어서우리는 시간을 잘 계획하여야 한다.충분히 교육과 대화를 나눠서키워야 할 사람을 채용할 것인지,바로 전장에서 싸워줄 사람을 채용할 것인지에 대한기준이 섰다면,적응이라는 시간에 대하여 고민하여야 한다.설령 경력자라 하더라도,회사의 문화와 비전, 가치관을 파악하고스며드는데 최소한의 시간이 필요하다.모든 일은 처음과 끝이라는 기한을 정해서진행해야 한다.그것이 기준이 되고, 지표가 되고,정량적으로 판단할 수 있는 근거가 된다.5) 역시나 손익을 계산해야 한다.채용에 앞서 손익이 빠질 순 없다.기업활동이라는 게 결국 비용과 수익이라는외줄 타기에서 합리적인 판단이 나오는 거니까.(출처: 영화 영웅본색, 주윤발)단지 연봉이 얼마, 월 실급여가 얼마라는계산 같은걸 말하는 게 아니다.멤버가 한 명 들어오게 되면,급여뿐만 아니라 각종 부대비용이 발생한다.그리고 시간이라는 비용과재교육이라는 비용도 발생한다.우리가 예상할 수 있는 수익은 무엇일까?회사에 내재되어있던 리스크의 감소다.약점이 되던 분야에 담당할 멤버가 생기고,발생하는 회사 업무의 총량에 대한 분할의 폭이 넓어져개개인의 업무 총량이 줄어들 수 있다.그리고 그만큼 외부에서의 활동 영역이 더 넓어진다.실제로지난해의 채용을 통해 나의 활동 반경이 꽤 넓어졌고,이전에는 엄두 못 내던 업무들도 하나씩 클리어할 수 있는여력이 생겼다.사실 업무가 밀리다 보면 우선순위에서 밀린 업무들은그냥 맘 편히 포기하는 경우가 많았었다.(말이 쉬워 "맘 편히"지... 포기란 건 항상 맘이 불편하다)회사 가치를 늘리는 효과도 크다.꾸준한 고용은 외형적으로도 기업이 성장하는 지표로 사용된다.이때, 4)에서 언급된 시간과 연계하여 생각해야 한다.최소한 6개월 정도의 앞날에 대한 큰 이슈들을 예상해야 한다.우리가 외부적인 요인으로 발생하는 이슈는 알 길이 없지만,내부적으로 계획된 올 한 해의 이슈들은 예상할 수 있다.예를 들어,전시회는 언제 갈 것이고, 제품 출시는 언제이며,사무실 임대 기간은 언제까지고연장을 할 것인지 이사를 할 것인지,진행하고 있는 프로젝트는 언제 끝나는지 등에 대한시점들은 오차가 있더라도 어느 정도 알아 두어야 한다.그래야 그 시점에 맞춰 신규 멤버가무엇을 준비할 것인가,어느 타이밍에 투입될 것인가,누구와 매칭 하여 수행할 것인가,지불하는 비용은 어느 정도 일 것이고,얻을 수 있는 수익은 무엇일 건지...가늠할 수 있다.6) 그 외의 이야기: 캐주얼 미팅(면담이랄까? 면접이랄까?)에서...채용 프로세스와 결과 발표 일정 등은 꼭 말해주자.-> 면접 후, 기다리는 사람은 신경이 곤두선다.급여와 복리후생에 대해서는 확실히 말해주자.-> 나중에 달라지면, 시작부터 불신이 생긴다.서로 동등한 위치에서 협상하는 자리란 걸 잊지 말자.-> 일방적인 질문 공세가 아니라 커뮤니케이션을 하는 자리여야 한다.-> 대화의 자리가 되어야 조율/협상을 할 수 있고,면접용 컨설팅 모범답안이 아니라 지원자의 진짜 답안을 얻을 수 있다.-> 상대방도 생각할 시간을 주어야 한다.솔직하라.-> 어차피 같이 일하게 되면 알게 될 일들을 굳이 숨길 필요 없다.오히려, 문제점과 우려되는 점을 까놓고 이야기하는 것에서부터 신뢰는 형성된다.가급적이면 일대다 면접을 하지 마라.-> 무슨 줄 세우기냐? 지원자들 경쟁시키는 것도 아니고...스타트업이 시간과 인력이 부족하다고 지원자들은 모아서 만나는 거...매우 안 좋다. 그리고 그 만남에서 얻을 수 있는 답변은 의미 없는 공허의 소리.메모를 하여 기록을 남겨라.-> 나중에 지원자에 대해 기억이 안 날 수도 있다.기억을 믿지 말고 기록을 믿어라.어정쩡한 기억은 좋은 지원자를 놓치게 만든다.(이건 내 경험담이다. 진짜 반성반성초초초반성!)면접이 끝나고... 꼭 결과 메일을 보내줄 것!-> 채용을 못 하게 된 분들께 꼭 메일을 보내주되,정성을 들여 메일을 써서 보내자.-> 이왕이면 대표가 직접 보내주는 게 좋다.채용 유무와 상관없이 우리 고객이다.예의를 갖추어서 대하고, 진심으로 대할 것!더... 생각나는 게 없어서 여기까지~~!위의 사항들은실제로 창업 이후부터 시행착오를 거쳐우리가 시행하고 있는 채용 규칙이다.처음엔 지원자보다 대표인 내가덜덜 떨면서 미팅을 가졌었다.질문이 두서없었고,한 이야기 또 하기도 하고...;;;지금 이 글을 쓰면서혼자 웃고 있다.'내가 이런 글을 남기게 될 줄이야...ㅎㅎㅎ'지금 동행하고 있는 동료들은이전의 나와 첫 만남을 기억한다.평생 기억할 거라더라.너무 초짜인 티가 확~나는 대표란다.우리 멤버들에게 진심으로 감사한다.참 좋은 분들이 합류해 주셨고,그 덕분에 회사가 성장하고,내가 월급을 받고 있다.이제 곧 만나게 될 새 멤버들에게미리미리 고마움을 전한다.앞으로 잘 부탁드립니다~~!#클린그린 #스타트업 #초기창업 #팀빌딩 #초기멤버 #인사이트 #조언 #성장
조회수 7405

Kafka 모니터링

Kafka 도입 이후에 점진적으로 모니터링을 개선해나간다. Kafka와 그 제반 환경에 대해 이해한만큼 모니터링을 구성하고 모니터링 시스템에서 피드백을 받아 다시 학습하고 그렇게 배운 것을 토대로 다시 모니터링을 구성한다. 그 과정을 따라 나가며 Kafka 를 어떻게 모니터링하면 좋을지 알아보자.프로세스 모니터링아무래도 가장 기초적이면서 중요한 지표는 Kafka 프로세스가 잘 살아 있는지 확인하는 것이다. 다섯 대로 구성한 클러스터라면 상시 Kafka 프로세스가 확인되어야 한다. 만약 Kubernetes의 StatefulSet으로 Kafka 클러스터를 구성한 경우라면 Kafka 프로세스 다섯과 프로세스 모두를 엮는 서비스, 그러니까 로드밸런서 하나를 포함해 총 여섯 개의 프로세스를 확인해야 한다. DataDog(통칭 멍멍이)을 이용해 모니터링하는 경우라면 다음과 같이 설정하면 된다.Monitoring Kafka ClusterKafka는 Zookeeper를 이용하므로 ZooKeeper 역시 동일하게 모니터링하면 된다.DataDog을 이용한 메트릭 모니터링`dd-agent는 Kafka 관련 메트릭을 Broker, Consumer, Producer 세 측면에서 수집한다.Monitoring Kafka with DatadogMonitoring Kafka performance metrics위의 두 문서가 Kafka 모니터링의 상세한 측면을 기술하는데 멍멍이를 이용하지 않더라도 꼭 한번 읽어볼만하다. 두 문서가 매우 훌륭하므로 이 글에서는 Kubernetes 환경에 초점을 맞춰 주목할 점만 살펴본다.Kubernetes 환경에서 멍멍이 에이전트는 보통 PetSet으로 구성한다. 말인즉 Kubernetes Worker 한 대마다 에이전트를 한 대씩 띄워서 Worker 안에서 작동하는 모든 도커 인스턴스의 메트릭을 수집한다. 일단 에이전트를 설정하고 나면 아래와 같이 Kafka 모니터링이 정상 작동하는지 확인하면 된다.kube exec -it dd-agent-17vjg -- /opt/datadog-agent/agent/agent.py info kafka ----- - instance #kafka-kafka-0.broker-9999 [OK] collected 46 metrics - instance #kafka-kafka-1.broker-9999 [OK] collected 46 metrics - instance #kafka-kafka-2.broker-9999 [OK] collected 46 metrics - Collected 138 metrics, 0 events & 0 service checks Emitters ======== - http_emitter [OK]Broker의 경우는 설정하기가 비교적 쉽다. Kubernetes에서 Kafka 같은 Stateful cluster는 StatefulSet으로 구성하게 되는데 이때 호스트 주소가 kafka-0, kafka-1 같이 예측 가능한 이름으로 정해지기 때문에 kafka.yaml을 미리 작성해두기 쉽다.instances: - host: kafka-0.broker port: 9999 # This is the JMX port on which Kafka exposes its metrics (usually 9999) - host: kafka-1.broker port: 9999Producer와 Consumer 모니터링은 이와는 다르다. 구현하기 나름이지만 Producer 또는 Consumer가 되는 응용프로그램은 Stateless cluster일 때가 많고 그런 경우에는 Kubernetes에서 Deployment로 클러스터를 구성한다. 이때는 StatefulSet인 경우와 달리 호스트 주소가 worker-903266370-q3rcx와 같이 예측하기 힘들게 나오므로 에이전트에 미리 설정을 넣을 수가 없다. 상당히 까다로운 문제이다.Consumer 모니터링Kafka의 설계는 매우 단순하면서도 강력해서 감탄하곤 한다. 하지만 복잡한 문제를 단순하게 풀어냈다고 해서 이를 둘러싼 환경을 제대로 모니터링하는 것도 쉽다는 뜻은 아니다. 특히 Consumer groups이 제대로 제 몫을 하고 있는지 파악하기는 더 어렵다. Consumer group마다 모니터링 체계를 갖추자니 번거롭다. 게다가 그런 번거로움을 극복하더라도 Kafka에 문제가 있는 경우를 탐지하기는 여전히 어렵다. 예를 들어 Consumer에게 가야 할 메시지 중 5%가 실제로는 전달되지 않는다 하면 이를 Consumer가 알기는 어려울 것이다. 이 외에도 Consumer 측 모니터링이 엄청나게 까다로운 문제임은 Burrow: Kafka Consumer Monitoring Reinvented에서 잘 밝혔다.Burrow: Kafka Consumer Monitoring Reinvented에 등장하는 Burrow는 Kafka를 세상에 내놓은 LinkedIn 엔지니어링 팀이 개발한 Kafka 컨슈머 모니터링 도구이다. 커뮤니티에서는 대체로 현존하는 가장 뛰어난 모니터링 도구라고 인정하는 분위기이다. 그러니 다른 도구도 많지만 우선 Burrow로 모니터링을 강화하기로 한다.Burrow로 Consumer 모니터링하기Burrow는 Dockerize가 잘 되어 있기 때문에 사용하기 어렵지 않다. LinkedIn이 공식 도커 이미지까지 제공했더라면 더 좋겠으나 GitHub에 Dockerfile과 docker-compose.yml을 올려놓아서 도커를 잘 아는 사람이라면 큰 어려움 없이 바로 설정하고 설치할 수 있다. 컨테이너 환경의 관례대로 주요 설정을 환경변수로 미리 빼놨으면 더 좋았겠지만 …알람 받기Burrow는 문제가 생겼을 때 알람을 발송하는 기능이 있다. 위키에는 이메일 알람과 HTTP 알람(Webhook)을 어떻게 설정하는지 설명한다. 그런데 Burrow 소스코드를 살펴보면 문서화되지 않은 알람 기능도 있으니… 바로! Slack 알람을 제공한다. 아직 공식 문서가 없고 소스코드도 godoc 관례에 맞춰 설명해놓은 부분이 전혀 없기 때문에 소스코드를 읽거나 GitHub 이슈에서 논의된 내용을 토대로 설정해야 한다.[slacknotifier] enable=true url=https://hooks.slack.com/services/xxxx/xxxxxxxxxx group=local,critical-consumer-group group=local,other-consumer-group threshold=0 channel="#general" username=burrower interval=5 timeout=5 keepalive=30멍멍이로 메트릭을 꾸준히 수집하고 이슈가 생겼을 때 알람을 받고자 한다면 packetloop/datadog-agent-burrow를 이용하면 된다.This plugin will push the offsets for all topics (except the offsets_topic) and consumers for every kafka cluster it finds into Datadog as a metric.멍멍이 에이전트에 필요한 파일과 설정을 넣고 나면 아래와 같이 메트릭이 수집된다.kafka.topic.offsets 와 kafka.consumer.offsets 이렇게 두 개의 메트릭만 수집하지만 각 메트릭을 cluster, topic, consumer 세 개의 토픽으로 세분화하기 때문에 실제로는 꽤 다양한 지표를 멍멍이에서 확인하고 이용할 수 있다.알`람 설정하기앞서 살펴봤지만 프로세스 모니터링 등은 어렵지 않다. 클러스터에서 한대라도 빠지면 바로 알람을 받는다. 끝!하지만 그 외의 지표는 알람의 기준을 설정하기가 힘들다. 예를 들어 Burrow의 kafka.topic.offsets 값이 600이면 정상인가? 그렇다면 700은? 또는 400은? 도무지 감을 잡을 수가 없다. 이럴 때는 멍멍이가 제공하는 Outlier detection기능으로 알람을 걸면 쉽다. 이 기능은 쉽게 말해 평소와 다른 행동을 감지했을 때 알람을 보낸다. 그러므로 정상의 범위를 확실하게 모를 때 아주 유용하다.설정 자체는 DBSCAN 또는 MAD라는 알고리즘이 등장하는 것만 빼곤 여타의 모니터링과 다르지 않기 때문에 매우 쉽다.참고 문헌How to Monitor KafkaCollecting Kafka performance metricsOriginally published at Andromeda Rabbit.#데일리 #데일리호텔 #개발 #개발자 #개발팀 #인사이트 #기술스택 #스택소개 #Kafka

기업문화 엿볼 때, 더팀스

로그인

/