You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 23 Next »



신규기능 추가에서 배포까지 과정을 스토리화 합니다. 

이것은 어떠한 개발 프로세스를 학습하고 기술하는게 아닌,

이전에 했던 경험을 바탕으로 개발자 기준으로 픽션화 하였습니다. 


 하루에도 여러차례 서비스코드를 개선하기위해 커밋을하고, 그 커밋은 어떠한 결정에 의해 이루어지며

그 어떠한 결정은 , 내개 알고있는 담당자, 가장 정확하게 말하면 가장 편하게 물어볼수 있는 사람에게

어떠한 중요한 내용을 문의하고 그것을 서비스 코드에 반영해버립니다.

그리고 책임소재를 따지기 위해 메일을 뒤지기 시작합니다.


또한 장애처리를 위한 서버재부팅도 어떠한 원인 파악을 통해 이루어졌지만

지식및 운영에 관련하여 그어떠한 노하우도 쌓이지않고

추적이 되지 않으니 개선도 되지않습니다.


 1년전과 똑같은 오늘을 보내고 있다라고 생각한 상위 관리팀에서 이러한 지침이 내려왔습니다.


그냥 놀아라, 너가 노는것을 보장해주겠다.

하지만 활동을 하고 싶은면 너가 하는일이무엇인지?  사소한 일도 티켓을 만들어라~

티켓:특정한 것을 할 수 있는 자격. (네이버사전)

그렇게 이야기는 시작이 됩니다.

신규기능 추가

 신규기능은 어떻게 추가하나? 사업부에서 어떠한 아이디어를 떠올려 초안을 세웁니다.

티켓이름  "PRD-001:다중기기 사용자를 대비한 멀티로그인 기능 추가"  

내용: 다중기기 사용자가 늘고있으니, 멀티로그인을 허용해라~~ 이하 생략,아니 없음

하지만 어딘가 이러한 티켓이 발견이 됩니다. "BI-001 다중기기를 허용했을때 수익증가율 분석"

그리고 사업부 에서 BA에게 이 티켓을 좀더 분석해 구체안(기획서)을 만들라고 던집니다.

비지니스 분석가가 기획서를 만들어야하는것인가?에 대해서는 개발자는 알수없습니다.

기획자라고 부르지 않았으니까요~~ 

기획초안 작성

 이제 BA는 발빠르게 움직입니다. 도대체 이게 무슨 내용이지?  기존 작동법부터 배우기시작합니다.

유니크한 로그인이 뭔지 그떄 파악하고 , 멀티로그인이 가능함으로 할수 있는 여러가지 아이디어를 넣기시작합니다.

기존 기능과 충돌나는 사항에 에대해 고려하지 못할수도 있습니다.

그리고 기획문서 초안이 완성되는 시점, 관련 개발팀을 소집합니다.

"기획-001:멀티 로그인을 통한 플래폼 기능개선"  내용: prd에서 내용약간 추가됨

BA와 개발자는 의사소통이 어렵기 때문에, 아케텍트에게 개발가능하게 구체화 해달라고 토쓰합니다.

분석

 각 개발팀이 모여 어떻게 누가? 어떻게 개발해야할지 분석에 들어갑니다.  PM은 이때 냄새를 맡고 , 개발관련 스케쥴을 컨트롤 하려고 합니다.

"PKIV-001-다중기기 사용자를 대비한 멀티 로그인  대장정(EPIC)"  일단 티켓을 만들고 봅니다.  

(여기서 PKIV는 프로덕트기준 그들만이 사용하는 개발관련 티켓명이며 자동으로 붙습니다.)

아키텍트의 참관하에 BA가 설명을하고 어떤 개발팀이 필요한지 물어봅니다.  개발팀의 거짓말을 방지하기위해

감독역활로 아키텍트는 그냥 참관합니다. QA는 QA범위 산정을 위해 미리 참관을하지만, 기존 작동되는 방식에대해 더많은 설명을 하게되며

BI를 가르쳐줍니다. 이것은 문제가 될것 같은데요 라구~~  

서버팀도 한마디 합니다. "이거 부하 증가가 예상되어 로그인서버 2대더 필요합니다." 하지만  뒤늦게 후회합니다.

괞히 부하이야기 꺼냈다가 아키텍트가 로드 테스트팀을 붙여서 로드테스트 티켓도 만들어버립니다. 차라리 스케일업할껄이라고~


갑자기 PM은 그래 서버가 필요해? 잘 쉬고 있는 데브 옵스를 데리고 오고, 데브옵스는 "ITO-001-개발서버두대추가" 티켓을  즉석으로 만들고

PKIV- 멀티로긴 개발대장정(EPIC) 티켓에 연결시킵니다. 물론 이 서브티켓에는 BIGIP등록및 SSL인증서 라우터룰셋팅등 잡다한 티켓이 생성됩니다.

알고싶지는 않지만, 서버두대 추가로 해야되는 고급 일들이 많아 보입니다. 그리고 데브옵스는 임무를 마치고 자기일 하러 갑니다.  

이것의 의미는, 추가되는 장비 변경되는 환경등을 데브옵스에 공유하여 미리 파악 해두고 준비해두지 않으면

런칭이 다되어가서야~~  '긴급 작업요청-다음주 런칭이니 서버추가하고 IP등록하고 해주시오'  긴박하게 셋팅합니다.

대부분 이러한 요청은 정상적인스텝에의해 요청이 되는게 아닙니다. 정확하게는 권한이 별로없는 담당개발자가 요청했다가 , 

어디선가 드랍당하고.. 런칭당일 서버가 없는것을 알게됩니다. 팀장은 버럭합니다 왜 이것을 빨리 이슈제기 안했냐? 라고



결국 DB / 서버 / 클라이언트/모바일팀  4팀에서 개발을 하기로 결정하고 숨겨지고 함축된 의미에 대해

기획문서를 두리뭉실하게 재해석을 하고 파이팅을 외치며 회의는 끝나게 됩니다.

설계

 아키텍트는 이떄부터 개발팀과함께 다이어그램을그리기 시작하며

어떠한 기능에대해  비지니스 로직이 어디에 있어야 하는가에 대해 분쟁이 시작됩니다.

DB냐? 서버냐?  게으른 서버개발자는 이것을 클라이언트에게 넘기기도 합니다.

아키텍트는 아름다운 중재를 합니다. 반반씩 해라~~~  DB반 서버반....  이 단계가 길어집니다. PM이 개입합니다.

뭣이 중한디? 아무나 빨리하고 일정을 맞추시오. 어느정도 아키텍쳐가 그려지는듯 하더니   이러는 동안 PRD(프로덕요구사항)에 수정이 일어나고,

기획서가 변경됩니다.   기획-001 티켓을 은근슬쩍 수정하여 공지합니다

멀티 로그인 허용이지만 모바일은  허용하고,PC는 비허용

다시 분석단계를 돌아 설계단계로 와서  아키텍/서버/DB 의 논쟁이 끝나지 않습니다.

이런문제는 관련 충돌 담당자 모두를 수용을 시켜야 해결이되며, 일을 시작할수 있습니다.

이때 영웅이 등장하여, 어떠한 아키텍쳐를 제시하여 그 문제를 해결을 합니다.  

이러한 티켓번호는 분쟁이 심하면 내용으로 기억되지 않습니다.

숫자로 기억됩니다.  7782번 티켓이라고  ..... 개발시간을 다 까먹었지만 릴리즈 날자는 변경없이 다음 단계로 돌입하게 됩니다.

개발

PKIV-001 대장정(EPIC) 에대한 서브 티켓으로  스토리가 생성됩니다.

  • PKIV02-DB팀의 다중 로그인 추가에 대한 이야기(STORY)
  • PKIV03-서버팀의 다중 로그인 추가에 대한 이야기(STORY) 
  • PKIV04-클라이트팀의 다중 로그인 추가에 대한 이야기(STORY)
  • PKIV05-다중로그인 테스트에대한 아름다운 QA의 이야기(STORY)


각팀에서 해야할 스토리들이 만들어집니다.  

그 이야기에 대한 하부를 어떻게 그룹핑하고 풀어야 할지는 각 개발팀이 만들어야 하며 이때부터

진행사항을 PM이 개입하기 시작합니다. PM은 스토리 과정에 관심이 없고 스토리가 완료되는것에만 관심이 있습니다.

실질적인 하위 일(TASK)이 빨리끝나 이야기를 끝내어야 하기때문에 당근과 채찍을 준비합니다.


개발팀은 당근과 채찍을 구분을 하지 못합니다. 그냥 일이 생겨 일을 하기 시작하며  

소스변경범위를 어느정도 예측하여 QA에게 테스트 범위를 대략 알려주지만, 쓸모없습니다.

대부분 버그는 개발자가 안 알려준곳에서만 생깁니다.

최신 master로부터  featured-기능 브랜치를 각각 만들고,  개발테스트가 완료되면   release-1 브랜치로 통합하여 QA를 준비합니다.

이와 동시에  데브옵스는 릴리즈 브랜치를 확인하고 DEV 배포 환경을 준비합니다. (완전 자동화는 아님)

DEV 배포환경이라고 각 기능서버가 한대씩만 존재 하지 않습니다. 실전과같이  스위칭 환경 테스팅도 포함되기때문에

스위칭이되는 장비는 최소  이중화가되어 쌍을 이룹니다.

또한  개발서브 도메인을 사용합니다.  host를 변경하여 테스트하는 순간 변질된 테스트이기때문입니다.

host를 변경하는 테스트를 DEV테스트라고 하지 않습니다. 이것은 QA에 내보낼수 없는 로컬 테스트입니다.

사용자에게  system 폴더에 있는 host파일을 관리자 권한으로 열어서 따따따.com을 111 로 바꾸면 우리의 솔류션은

완벽하게 작동됩니다. 라고 이야기하는것입니다.

DEV-QA

release 브랜치를 통해 QA가 시작됩니다. 여기서 여러가지 수정사항이 생깁니다.

기획서의 내용이 추가되고 개발이 추가됩니다.

동시에 기능 TEST를 하고 A를 FIX하고 문제가 없던 B가 문제가 생깁니다. 

QA는 불평을 합니다. A를  개선하고 FIX 하였는데, B가 왜 문제 생기냐고?

개발자는 쏘리하고 B도 수정해줍니다. 험난한 고비를 넘어 QA의 SING-OFF가 나기직전입니다.

개발내용에따라, 이중화된 서버중 한대를 내리거나, 인터넷 연결선을 단절하거나 극단의 테스트를  마지막에 수행하기도 합니다.

이것에 대한 복구도 개발서버가 커버를 해야하는 부분입니다.  이러한 극단 테스트는 

10번 시도하고 8번정도 복구가됩니다.  인터넷 제공업체의 인터넷 품질에 대해 커버를 모두할수는 없기에 테스트 OK하고

넘어갑니다. 


 이제 대서사시(EPIC) 종료를 위해

통합 테스트 환경인  INT 단계로 넘어가게 됩니다. INT로 넘어가면 가급적 수정이 일어나면 안됩니다.

대서사시의 마무리단계에서, 중간 이야기를 변경하면 그 이후의 이야기도 다시 작성해야 하기때문입니다.(QA를 또해야한다는 뜻)

우리끼리 약속한 릴리즈가 프리징단계에서는 문제가 없을것이라고 희망을 합니다.

INT-QA

INT환경은 소스통합 테스트를 위한 개발환경이 아닙니다. 소스통합에 따른 문제는 DEV단계 Release를 통해 이미 완료 되었으며

희망사항이 이어진다고 하면, 여기서 넘어온 릴리즈 환경이 리얼서비스환경에 반영이되어도 문제가 없어야합니다.

여기서 버그를 찾고 머지되고 반복하는 행위는.., 곧 INT를 포기하고 DEV로 넘어가야한다는것을 의미 합니다.

INT환경은 실제 서비스환경과 비슷한 테스트 환경으로,  DB가 서비스수준으로 노이즈가 없어야합니다.

DEV 테스트단계에서 이루어진 여러가지 설정은 DB에 변경 사항이 발생하지만 , 운영수준에서는 사실 DEVQA수준으로 변경이 발생하지 않습니다.

설정조작방지외에 , 기능을위해 DEV단계에서만 추가한 설정사항이 없어 발생하는 누락사항도 찾아야 합니다.

SignOff전에는 Release브랜치를 통해 QA버그 FIX가 진행되지만,  SignOFF가 일어나도  Release가 바로 운영에 반영되는것이아니라

SignOff는 Release → Master로 통합될수 있다란 의미이자  실반영을 해도 된다란 약속이며 실제로 머지가 됩니다.

하지만 여기서 끝이아니고 실제 운영반영 민방위 훈련을 최소 하루전  수행합니다.

데브옵스는 INT의 모든 배포 변경사항을  현재 운영 서비스와 동일하게 롤백하고

그동안 INT가 Release대상으로 디플로이 된것을 , Master로 변경합니다.   

Master를 통해 실서비스 반영과 똑같은 스텝으로 , 실제 반영  가상 테스트 시나리오 에 돌입하게 됩니다.

이상적으로 운영 순서에따른,혹은 설정사항 순서 적용에따른 문제를 미리 찾을수 있습니다.

때로는 논스톱 서비스 진행을 확인을 위해..., 어떠한 설정변경은 백오피스를통해 실시간으로 모든사용자에게 푸시를하며

이상적인 보증은 사용자가 업데이트를 감지못하는것이며,  이것은 서버가 최대한 보증을 하려고 합니다.

교체과정의 문제확인을 위해, 교체과정중에도 정상적인 QA가 활동중입니다. 


이쯔음 데브옵스는  동시에 Master를 통한 운영 빌드및 디플로이를 준비합니다.

(빌드와 배포는  분리되어야하는것으로 빌드를 미리해둡니다. )

-만약 이때, 운영버그를 발견한다면,그것은 지금것 방치되었다란 의미이며  무리하게 Fix하지 않고 다음으로 미룹니다

이경우 stable 브랜치를 통해 fix는 가능하나, 인생에도 그렇듯이 후회하는것을 되돌리는것(롤백)은 실제로는 타임머신이 없이는 불가능하며

전체  스냅샷을 돌리는것은 , 큰 리스크가 따릅니다.

LOADTEST-QA

INT-QA가 진행되는 동안 로드테스트가 필요한 프로젝트이면 INT에 배포된 릴리즈를 통해 LOADTEST가 진행됩니다.

개발자에게 불행이지만 LOADTEST장비는 실제 운영 장비수와 같습니다. 가장 최악 시나리오는

LOADTEST에서 실패나서  SIGN-OFF난 INT환경을 수정해야되는 케이스입니다.

다시 INT테스트를 수행하야하며, 다시 LOADTEST도 해야합니다. 이 모든것을 통과하고도

진정한 부하문제는 부하 시나리오에 고려하지 못한것이 운영중에 나오게 됩니다.  그렇다고 최악은 아닙니다.

통과한 9개는 관련이 없으니까요~  9개를 제외하고 나머지 1~2내외로  용의자가 좁혀질수 있습니다.

운영

 INT-QA/LOAD TEST 가 완료되었다고 운영에 반영할수 있는것은 아닙니다.

배포단계에 보안에 문제가 있는부분은 없는지? 이상하게 배포하고 있지 않는지?

"DA001-멀티로그인운영반영"  티켓이 만들어집니다.  이곳에는 각종 적용스텝,롤백플랜등이 들어있습니다. (DB는 자동화제외)

만약 하나라도 이상한점이 있거나 수동으로 조작하는 사항이 있다고 하면, 최고 빌드관리자의  승인거부하여 프로덕에 올라갈수 없습니다.

하지만 런칭일정준수상  프로덕트 관리자의 조건부 승인으로 올려 보내게 되며, 운영 수동배포는 다음에 빅이슈가 되어 처리해야할 개발과제가 생기게됩니다. 

이제 겨우 배포후 , 실행을 하였으나~~ 이제부터느 운영이기때문에 집중 테스트가 진행됩니다.

테스트기간 1주일동안 못찾은 문제를, 1분만에 찾는 초능력을 발휘하기도 합니다.


서비스 운영에 반영후, hotfix가 생기면 아직 master가 최신개발반영소스라 master를 통해 hotfix 진행이 가능합니다. 

운영에 발생한 버그는 , QA와 분리하여 올라옵니다  "OP-001 로그인안됨  심각단계 : L2"

아주 큰 결정력이 따르지만 , 만약 긴급 롤백이 생긴다면, 개발소스를 통해 하는게 아니라... 이미 운영에 빌드완료되고 디플로이 셋트가 있기때문에

디플로이 스냅샷을 통해 롤백이 가능합니다. ( 여기서 디플로이 스냅샷은 자동으로 생성되는것 or 수동으로라도 운영빌드된 소스를 백업이 됨을 의미)

이러한 문제는 퇴근후 잠자려고할때 발생하고, 롤백후 개발복구는 기존 개발과 QA를 다 다시해야된다란 의미 이기때문에 권장되지 않으며

최소한의 범위내에서 문제를 찾으려고 합니다. 이때 이미 회사는 퇴근후 개인 사생활을 보장했기때문에 개인 휴대폰을 통해 연락하지 않으며

개인 전화번도또한 리스트업을 하지 않았습니다. 참 좋은 회사죠......

그래서 회사가 준비했습니다. 운영대응 개발자에게 폰을 하나씩 지급했습니다. 휴대폰비도 내줘서 잘썻습니다.

하지만 이 전화는 새벽에 울립니다. L2일때 말이죠 

여기서 L3정도의 우선순위 Fix이면 바로 반영 하기보다, 반영과정에 문제가 없는지 체크가 필요하기 때문에

약소한 INT단계를 한번더 거친후 문제가 없음을 확인하고, 서비스에서 HOTFIX 반영이 이루어집니다.

이 모든 과정이 끝나면  PKIV-001 멀티로그인 대장정(EPIC) 티켓이 끝나게 됩니다.

정리

이 긴내용에 언급된 티켓을  생성순으로 리스트업하면

  • PRD-001:다중기기 사용자를 대비한 멀티로그인 기능 추가
  • 기획-001:멀티 로그인을 통한 플래폼 기능개선
  • PKIV-001-다중기기 사용자를 대비한 멀티 로그인 추가
    • PKIV02-DB 다중로그인 추가
      • SP A 수정
      • SP B 추가
    • PKIV03-서버 다중로그인추가
      • LS변경
      • GS변경
      • DC변경
      • TMS변경
    • PKIV04-클라이언트 다중로그인추가
      • 관련 메시지추가
  • ITO-001-멀티로긴 운영서버 두대추가
    • ITO-002-잡다한 설정하기
  • PKIV-005 다중로그인 QA
    • 여러가지 아주 많은 이슈
  • DA001-멀티로그인운영반영
    • 업데이트 절차
    • 롤백방안
    • 서버적용범위
    • 관련 PRD
  • OP-001 로그인안됨 심각단계 : L2
    • PKIV-새벽에 잠깨는 ,로그인해결개발티켓


 위와같이 한가지 개발 프로세스가 PRD를 통하여 연관 작업을 모두 파악할수 있으며

반대로, 장애 이슈를 통해서도 이 이슈의 태초의 이슈인 프로덕 요구사항을 파악할수가 있습니다.

이것의 중요한 의미는 티켓을통한  서사시(epic)가  축적이되어  자산(백과사전)이 된다는 것입니다.

한가지 예로 동일 문제처리를 위한 코드수정이, 기존에도 있었다란 점이며

1년짜리 SSL갱신문제가 1년전에 있었고,  다가올날짜 전에 대비할수 있었던것....




현재 개발 프로세스를 다시 공부하면서 다음 4가지를 통합 구축중에 있습니다.

JIRA : http://jira.webnori.com/secure/BrowseProjects.jspa?selectedCategory=all&selectedProjectType=all

빌드/배포 CI툴 : http://bam.webnori.com/allPlans.action

GIT툴 : http://git.webnori.com/dashboard

개발 프로세스와 연동되는 문서화 기능  : http://wiki.webnori.com/


  • No labels