Laravel로 스타트업 기술 스택 구성하기

84
스타트업을 위한 라라벨 기술 스택 정광섭

Transcript of Laravel로 스타트업 기술 스택 구성하기

Page 1: Laravel로 스타트업 기술 스택 구성하기

스타트업을위한라라벨기술스택

정광섭

Page 2: Laravel로 스타트업 기술 스택 구성하기

발표자소개 치킨집 테크트리 안 타려고 노력중인 개발자

“쉽게 배우는 라라벨5 프로그래밍”

“리눅스를 활용한 회사 인프라 구축의 모든 것”

https://lesstif.com

https://github.com/lesstif

Page 3: Laravel로 스타트업 기술 스택 구성하기

오늘함께할내용

팀을꾸리고프로젝트를진행할때흔히접하는실수(발표자가많이하는) 유형및회피술

서비스자체에집중할수있도록라라벨기술스택구성시주의사항및경험공유.

Page 4: Laravel로 스타트업 기술 스택 구성하기

스택선정기준

익숙하고 (발표자가) 사용자가많은제품

인프라(형상관리, 이슈관리등)에는적절한비용을지불

설치형보다는관리가용이한 SaaS 선호

Page 5: Laravel로 스타트업 기술 스택 구성하기

스택선정기준

러시아페인트공알고리즘, 마세라티문제, 야크털깍기회피

Laravel 에서 OOTB(Out Of The Box) 로제공되는기능위주

Page 6: Laravel로 스타트업 기술 스택 구성하기

러시아페인트공알고리즘

페인트공이 첫날은 차선페인트작업을 300야드칠함

Page 7: Laravel로 스타트업 기술 스택 구성하기

러시아페인트공알고리즘

둘째날은 150야드칠함

Page 8: Laravel로 스타트업 기술 스택 구성하기

러시아페인트공알고리즘

셋째날은 30야드칠함

첫날은어떻게 10배를칠했는지관리자가묻자

Page 9: Laravel로 스타트업 기술 스택 구성하기

러시아페인트공알고리즘

"저도 어쩔 수 없었습니다. 매일 페인트 통에서점점 멀어지니까요."

- 조엘스폴스키의 “조엘온소프트웨어” 중

Page 10: Laravel로 스타트업 기술 스택 구성하기

러시아페인트공알고리즘

잘돌지만일정이상규모가되면급격히 성능이저하되고 문제를 일으키는 코드

레거시, 기술 부채등의 원인이기도 함.

Page 11: Laravel로 스타트업 기술 스택 구성하기

마세라티문제(Maserati problem)

Page 12: Laravel로 스타트업 기술 스택 구성하기

마세라티문제(Maserati problem)

어떤마세라티모델과색상을구매할지고민하는것.

Page 13: Laravel로 스타트업 기술 스택 구성하기

마세라티문제(Maserati problem)

나중에마세라티살능력이됐을때할고민을미리하는것.

돈많은금융과증권계에서는 “boat naming” 이라고함.

Page 14: Laravel로 스타트업 기술 스택 구성하기

마세라티문제(Maserati problem)

당장필요하지않은기술을담보되지않은미래의큰성공에대비하여준비하는것

천만명을처리할서비스는사용자가 10만은됐을때고민

엔지니어만 있는 스타트업에서 자주발생하는 현상

Page 15: Laravel로 스타트업 기술 스택 구성하기

야크털깍기(Yak Shaving)

어떤목적을달성하기위해전혀상관없는연속된작업을해야하는상황.

그중마지막작업이야크털깍기

Page 16: Laravel로 스타트업 기술 스택 구성하기

야크털깍기(Yak Shaving)

봄이와서세차를하려는데호스가터졌음

차로홈디포우에가서호스를사려보니다리를지나야하는데통행카드가필요

통행카드가없어서옆집 Bob 한테빌리려는데

아들이캠핑가려고 Bob 한테베개를빌린후에안갖다줌

Page 17: Laravel로 스타트업 기술 스택 구성하기

야크털깍기(Yak Shaving)

그런데베개에있는야크털이많이빠져서지금베개를갖다줄수없음

그래서세차를하기위해동물원에가서야크털을깍는중

- 세스고딘의 “이제는작은것이큰것이다“ 중

Page 18: Laravel로 스타트업 기술 스택 구성하기

기술스택구성시야크털깍기

소스코드를가져와서직접컴파일

컴파일러 최대 최적화 옵션 켜도 속도 향상체감 안 됨.

V8 Java script 엔진은 컴파일만 2시간

패키지 업데이트와 보안 패치는 어쩔….

Page 19: Laravel로 스타트업 기술 스택 구성하기

기술스택구성시야크털깍기

SaaS 대신직접내부에설치및설정

gitlab 사내에설치하는중이라 commit 을못하고있음.

redmine 설치중이라이슈등록을못하는중..

Page 20: Laravel로 스타트업 기술 스택 구성하기

기술스택구성시야크털깍기

필요한모든기능을직접구현…

코드를 StackOverflow 에서찾아서 Copy&Paste하는것도실력인시대

기능구현전에누가구현한게있는지 github나packagist 에서검색

시간을줄이려면정리된 list 참고(awesome-xxx)

awesome-php, awesome-laravel 등

Page 21: Laravel로 스타트업 기술 스택 구성하기

야크털깍기대응법

야크털깍기로배우는것도많지만문제는일정

예정보다많은시간이소요된다면잠시멈출것

원래하려고했던게무엇인지떠올려보고야크털깍기라생각되면했던일을과감히 중지

Page 22: Laravel로 스타트업 기술 스택 구성하기

Laravel

PHP 의태생적한계를보완해주는 Modern Full Stack Framework(MVC, ORM, Template 등)

Page 23: Laravel로 스타트업 기술 스택 구성하기

Laravel

최신 PHP의장점(Name Space, Trait, Anonymous Function)을적극활용

이로인해국내 IDC 등 PHP 버전이낮은경우활용이어려움(PHP 5.6 이상필요)

Page 24: Laravel로 스타트업 기술 스택 구성하기

Laravel

Composer 를적극활용

검증된라이브러리나컴포넌트(Sympony 의컴포넌트 - HTTPKernel, Console)등적극차용

많은기능이 OOTB(Out of the Box) 로제공

Page 25: Laravel로 스타트업 기술 스택 구성하기

Laravel

이때문에라라벨이 PHP 생태계의가두리양식장이되고있는단점도있음.

Page 26: Laravel로 스타트업 기술 스택 구성하기

라라벨활용처

웹서비스를계획하고있다면좋은선택

사용이쉽고확장성이좋아서마세라티문제를피하며서비스개발가능

Ex: 사용자가많아졌을때 file session => redis로변경시약간의코드수정만으로가능(물론세션데이터는수동으로옮겨야….)

Page 27: Laravel로 스타트업 기술 스택 구성하기

라라벨을잘쓰려면

PHP 최신기능습득

객체지향지식

몇가지디자인패턴학습필요 DI(Dependency Injection) IoC(Inversion of Control) CoC(Convention over Configuration) Repository, Façade

Page 28: Laravel로 스타트업 기술 스택 구성하기

라라벨이적당하지않은경우

머신러닝, 빅데이타, Computer vision 등은사용하려는라이브러리나 platform 이잘지원하는언어(python, C++, Java) 채택

Page 29: Laravel로 스타트업 기술 스택 구성하기

개발인프라

서비스개발에꼭필요한인프라시스템에대해알아봅시다.

Page 30: Laravel로 스타트업 기술 스택 구성하기

버전관리

subversion 쓰겠다고하면뜯어말리세요.

당연히 git 사용권장

버전관리는직접구축보다는 SaaS 방식권장(구축과백업에쓸노력은개발에투입)

Page 31: Laravel로 스타트업 기술 스택 구성하기

버전관리

Bitbucket, gitlab, github 중선택은?

Github, Bitbucket 중추천하며웬만하면github

이슈관리로 JIRA 를사용할예정이면특히gitlab 은추천하지않음(연계가귀찮아요…)

Page 32: Laravel로 스타트업 기술 스택 구성하기

이슈관리

버전관리와함께가장중요한인프라

Issue != Problem, Issue is (Problem, Todo, Task, Improvement, etc…)

등록된모든이슈를꼭처리할필요는없음

페인트공, 야크털깍기, 마세라티방지모든업무를이슈관리시스템에등록

진행상황을수시로업데이트및리뷰

처리가끝난일이라도주변상황(사용자수증가)에따라해당이슈갱신

Page 33: Laravel로 스타트업 기술 스택 구성하기

이슈관리

끝판왕 JIRA 추천(Agile 개발시에도추천)

설치형보다는 SaaS 방식의 Cloud 서비스권장

10명이내면 Starter license (연 10$)로저렴하게사용가능

Page 34: Laravel로 스타트업 기술 스택 구성하기

Documentation/Collaboration

Markdown 은비개발자는어려워함

MediaWiki 는훌륭하지만편의성부재

Confluence 추천(관련 slideshare 보기)

Page 35: Laravel로 스타트업 기술 스택 구성하기

기술스택

라라벨기반으로서비스를만들기위한추천기술스택에대해알아봅시다.

Page 36: Laravel로 스타트업 기술 스택 구성하기

On Premise vs Cloud

AWS 등클라우드가결코싸지않음(Instance 외에 Hidden Fee 가많음)

급속도로확장될여지가있는서비스를탄력적으로운영할때 Cloud 가장점이많음

고객이급속히늘지않는서비스라면 x86 서버사서 IDC 에넣는게더저렴하고성능도좋을수있음

Page 37: Laravel로 스타트업 기술 스택 구성하기

Linux 배포판

Ubuntu 권장

RHEL 계열은패키지정책이너무보수적

docker에익숙하다면 RHEL 계열도좋음(반드시7 버전사용)

AWS 사용시 Amazon Linux 도좋은선택 - RHEL 계열이지만패키지업데이트가빠른편

Page 38: Laravel로 스타트업 기술 스택 구성하기

Linux 배포판

금융권과연계하는서버로보안성심의받아야할때 RHEL이나 CentOS 추천

RHEL 사용자들이가장싫어하는기능인SELinux 는심의때매우유용

Page 39: Laravel로 스타트업 기술 스택 구성하기

로컬개발환경구성

자이제 Apache/PHP/MySQL 을설치해서개발환경을구성해봅시다.

APM은 EasyPHP, AutoSet, Apm_Setup, WAMP, XAMPP, MAMP 등너무다양

Page 40: Laravel로 스타트업 기술 스택 구성하기

로컬개발환경구성

운영환경은 nginx 를사용예정인데 deploy때문제되지않을지?

key/value store 로 redis 쓸예정인데개발자 PC 는윈도우

PHP 의 mbstring, openssl extension 설치하고모듈활성화방법은?

Page 41: Laravel로 스타트업 기술 스택 구성하기

로컬개발환경구성

고민하지말고 Homestead

VirtualBox + Vagrant 로빠르게 Ubuntu 기반라라벨개발환경구축가능

라라벨공식서브프로젝트

개발팀이모두 OS X 를쓴다면 Valet 도좋은선택

Page 42: Laravel로 스타트업 기술 스택 구성하기

프로젝트생성

composer create project 명령으로새로생성하는것보다는 boilerplate 프로젝트사용

팀전용 Boilerplate 프로젝트작성 & 갱신

팀원간의존성일치를위해 composer.lock 은꼭버전관리에추가

Page 43: Laravel로 스타트업 기술 스택 구성하기

라라벨의존성관리

라라벨은유의적버전(Semantic Versioning) 따르지않음

LTS(Long Term Support) version 이 LTS 가아님

vendor 밑에들어가는 Illuminate 패키지와 app Root 가라라벨프레임워크

Page 44: Laravel로 스타트업 기술 스택 구성하기

라라벨의존성관리

update 시 Illuminate 만업데이트됨

운나쁘면 patch update 인데기존코드가안돌수도있음.

Page 45: Laravel로 스타트업 기술 스택 구성하기

라라벨의존성관리

의존성을수정하는 composer update/require 명령은주의해서수행

변경된 composer.lock 은참여자간의존성일치를위해즉시 push

production은 composer install 만실행

,

Page 46: Laravel로 스타트업 기술 스택 구성하기

composer.lock 미공유시버전문제,

Page 47: Laravel로 스타트업 기술 스택 구성하기

라라벨의존성관리

중요한모듈은의존성선언시 patch 버전까지지정

,

Page 48: Laravel로 스타트업 기술 스택 구성하기

보안

개발자들은바빠서보안은아예고려대상이아니거나우선순위가 9,999 위

정보통신망법, 개인정보보호법등의 강화로유출사고시사업자체가위험해질수있으므로최소한의보안지식필요

Page 49: Laravel로 스타트업 기술 스택 구성하기

보안 - Application

SQL Injection, XSS, CSRF 에대한이해는필수

라라벨은보안을고려해서설계했지만개발자가잘이해하고사용해야함

Page 50: Laravel로 스타트업 기술 스택 구성하기

보안 - Infra

Deny All, Permit Some 정책

서비스에불필요한서버정보은닉

Server 종류와버전정보및 OS 정보

X-Powered-By 정보제거

Page 51: Laravel로 스타트업 기술 스택 구성하기

보안 - Infra더자세한보안강화방안은 “견고한웹서비스를위한실용적인보안가이드” 참고

https://github.com/lesstif/web-service-hardening

Page 52: Laravel로 스타트업 기술 스택 구성하기

DBMS

PostgreSQL 개발자를만나본적이많지않음

지리정보처리등 PostgreSQL 을꼭써야할분야가아니라면 MySQL 권장

Page 53: Laravel로 스타트업 기술 스택 구성하기

DBMS

서비스성능저하원인 Full scan 또는최적화되지않은Query

대규모 Insert/Update에따른 IO 성능저하

규모가커지면 read only slave 운영

Page 54: Laravel로 스타트업 기술 스택 구성하기

DBMS

NoSQL 의 JSON type 이좋아보이는데익숙하지않다면 MySQL 5.7 사용

예전버전 MySQL 은 DBMS 답지않게Constraint Check 를안하므로주의필요 non strict mode 일때 data constraint 미체크

unsinged int 에 minus 값입력시 0 이저장

varchar 컬럼에긴데이터입력시초과부분잘라버리기

Page 55: Laravel로 스타트업 기술 스택 구성하기

DBMS - 백업

DB 백업은매우중요하므로 SaaS 로제공되는서비스사용권장(Aurora DB등)

직접 IaaS 나 On-Premise 기반으로 DBMS 를구성한다면백업정책수립 필수(Incremental/Full backup 주기등)

백업자동화및정기적인복구훈련

MySQL은 Percona XtraBackup 추천

Page 56: Laravel로 스타트업 기술 스택 구성하기

DB migration

개발/테스트/Staging/Production 간일관된DB Schema 유지필요

Page 57: Laravel로 스타트업 기술 스택 구성하기

DB migration

라라벨은 rails 처럼 migration 기능제공

손쉽게스키마를작성하고버전관리가능

Page 58: Laravel로 스타트업 기술 스택 구성하기

DB migration 적용

php artisan migrate 한방으로스키마적용

실수로 production 에서 migration refresh 나reset 명령시사업접어야할수있음.

Page 59: Laravel로 스타트업 기술 스택 구성하기

DB migration 적용

.env 에 “APP_ENV=production” 으로설정되어있으면 reset 시 prompt 띄우므로반드시설정

Page 60: Laravel로 스타트업 기술 스택 구성하기

DB migration 적용

그래도대형사고의위험은존재

개발자 PC 에서운영 DB 직접접근제한

db migration 시공동작업

Page 61: Laravel로 스타트업 기술 스택 구성하기

DB ERD

Migration 을사용해개발하다보면전체스키마구조와테이블간관계가한눈에안들어옴

테이블정규화등체계적인데이터관리와튜닝을위해서는스키마가시성확보가필요

Page 62: Laravel로 스타트업 기술 스택 구성하기

DB ERD

migration 전에 ERD 를그려보는것을권장

ERD tool 은 Schema Reverse engineering 을지원하므로현재스키마분석에도용이

Page 63: Laravel로 스타트업 기술 스택 구성하기

DB ERD

Page 64: Laravel로 스타트업 기술 스택 구성하기

ORM

Eloquent 이라는가벼운 ORM 내장

웹개발시 CRUD 반복을줄여주는쓸만한프레임워크

ORM 을잘쓰려면 DBMS에대해깊은지식필요

Page 65: Laravel로 스타트업 기술 스택 구성하기

ORM

N+1 문제등 ORM 특성으로인한성능저하대응능력필요(Lazy eager loading 등)

모든쿼리를 ORM 으로작성할필요는없음

복잡하거나성능에민감한쿼리는 Query Builder 사용해서수작업

Page 66: Laravel로 스타트업 기술 스택 구성하기

Cache/Session & Key value Store

Redis 추천

.env 에 CACHE_DRIVER, SESSION_DRIVER 설정변경으로기존코드동작

Page 67: Laravel로 스타트업 기술 스택 구성하기

File Storage

flysystem 라이브러리를사용하여 File System 추상화

로컬파일시스템에서 AWS S3 로전환시코드변경이많이필요하지않음

규모가커질경우 AWS S3 로이전하거나또는개발은로컬파일로하고운영은 S3 사용

Page 68: Laravel로 스타트업 기술 스택 구성하기

Full Text Indexing

Laravel 5.3 부터 Scout Indexing driver 제공

기본 Algolia, Elastic Search 지원

아직기능은미비하여많은 customizing 필요

Sass 기반 Algolia 는설정없이 CJK 도잘지원하나비용발생

Page 69: Laravel로 스타트업 기술 스택 구성하기

Email

Email 은유용한 알림수단

laravel은 swiftmailer library 기반으로추상화된 Email 드라이버제공

Sendmail 보다는 mailgun 이나 AWS SES 같은SaaS 기반서비스추천

Page 70: Laravel로 스타트업 기술 스택 구성하기

Job Scheduling

cron 은 $PATH, $LD_LIBRARY_PATH 등유닉스환경변수에대한이해필요

cron 작업변경이력이관리되지않음

서버가여러대일경우 crontab 변경시반복작업수행필요

Page 71: Laravel로 스타트업 기술 스택 구성하기

Job Scheduling

Laravel 은 cron 기반의 task scheduler 내장

cron 은 laravel scheduler 구동용도로사용

스케줄링이 PHP 코드이므로이력관리및다수서버에배포용이

* * * * * php /path/to/app/artisan schedule:run 1>> /dev/null 2>&1

Page 72: Laravel로 스타트업 기술 스택 구성하기

Logging

Logging != App Performance Monitoring(APM)

Logging 은 App 의 Error Tracking

NewRelic = APM

ELK stack 은로깅취합용으로는너무과다

Page 73: Laravel로 스타트업 기술 스택 구성하기

Logging

ssh + tail –f laravel.log 로 log 파일보는것은불편하고원하는로그를찾기어려움

특정예외(http 500등)가발생하면이벤트를받고싶음

예전로그내용이필요한데이미 rolling 되어버림

Page 74: Laravel로 스타트업 기술 스택 구성하기

Logging Service

Sentry, Rollbar, bugsnag 등다양한 logging service

SaaS 방식의 Sentry 추천

설치형도권장(https://www.lesstif.com/x/t4XUAQ)

Sentry와 Laravel 연동은https://www.lesstif.com/x/7YXUAQ 참고

Page 75: Laravel로 스타트업 기술 스택 구성하기

Sentry - Dashboard

Page 76: Laravel로 스타트업 기술 스택 구성하기

Sentry – Log info

Page 77: Laravel로 스타트업 기술 스택 구성하기

Deploy

PHP 이므로별도의컴파일및패키징없이운영에반영가능

db migration 등의부가작업이없는배포라면 git pull 로배포가능

Page 78: Laravel로 스타트업 기술 스택 구성하기

Deploy

2016년이니더그럴싸한배포전략을사용해봅시다.

Page 79: Laravel로 스타트업 기술 스택 구성하기

Deploy - envoy

Laravel 내장가벼운 ssh task runner

blade 문법과유사

git pull 같은반복작업을여러대에서수행하기적합

Page 80: Laravel로 스타트업 기술 스택 구성하기

Deploy – envoy + CI

운영서버에배포는개발자 PC 보다는별도서버가적합

배포서버에 ssh login 후 envoy 실행귀찮음

누가언제배포를했고결과는어땠는지관리하고싶음

Page 81: Laravel로 스타트업 기술 스택 구성하기

Deploy – envoy + CI

CI 를도입해서 envoy 로배포실행

이왕이면 envoy 배포전에 phpunit 으로단위테스트도구동

Page 82: Laravel로 스타트업 기술 스택 구성하기

Deploy – envoy + CI(bamboo)

Page 83: Laravel로 스타트업 기술 스택 구성하기

Deploy – envoy + CI(bamboo)

Page 84: Laravel로 스타트업 기술 스택 구성하기

감사합니다.