견고한 웹애플리케이션 개발...

Post on 15-Apr-2017

172 Views

Category:

Technology

7 Downloads

Preview:

Click to see full reader

TRANSCRIPT

견고한웹애플리케이션개발환경구축 ­ 지원자 남규진

• 제성격의장점이자단점은지나치게꼼꼼한성격입니다. 항상 외출하기전, 두고 가는것이없는지방안을많게는다섯번되돌아봅니다.

직장에서퇴근을하기전에도제자리를여러번다시돌아봅니다.

• Clean Code that works 라는 말을좋아합니다. 웹에서잘작동하는탄탄한애플리케이션을만들고싶습니다. 작성한코드를버전관리시

스템에커밋하기전, 항상수차례확인합니다. 하지만수백줄의코드를확인하다보면놓치는부분이발생하였습니다. 점점제코드를신뢰

할수없게되었고커밋하기를주저하게되었습니다.

• 회사에 입사하여 두번째로 참여한 프로젝트에서 운영 서버에 애플리케이션 배포를 경험하였습니다. 단순 반복 되는 컴파일-WAR압축-FTP

전송-WAS재가동과정과배포이력관리가전혀되지않는점을파악하며지속적통합도구의필요성을느꼈습니다.

• 이를극복하기위한키워드는테스트와제코드를검증해주는자동화된프로세스라고생각했습니다.

• 자바웹프로그래밍(박재성 저) 책을학습하며직접웹서버를개발해보는과정에서이를위한인프라구축을시도하였고, 본 포트폴리오는

각단계에대한요약입니다.

iamkyu

git commit

github push

빌드유발

pull code

Merge�toDeploy�Branch

코드분석

빌드유발

pull code

배포

빌드 결과알람

①자바, 메이븐프로젝트 ②버전관리시스템에커밋

• 버전관리 시스템의 커밋 이력 관리도 중요하게 생각되어 커밋

메세지의 첫번째 라인은 업무 영역에 대한 대분류명과 요약

메세지를 작성하고 그 아래 좀 더 세부 사항을 작성하는 규칙

을 적용했습니다.

[Junit 단위테스트]

[커밋 히스토리]

• 테스트 코드를 작성했을 때 좋았던 점은, 내가 작성한 코드가 내가 아닌 무언가를 통해(여기에서는

Junit 프레임워크) 검증되었다는 안도감 때문이었습니다. 또한, 테스트를 우선적으로 작성하며 개

발을 진행할 경우 내가 일단 당장 뭘 구현해야 하지 하고 막연히 고민하는 시간이 많이 줄었습니다.

다만 처음부터 너무 완벽한 코드를 작성하려다 보면 오히려 아무 코드도 작성하지 못하는 경우도 발

생하였습니다. 따라서 우선 테스트를 통과하는데 집중하고 그 후에 다시 코드를 개선하였습니다. 반

면, 먼저 개발 코드를 작성하고 테스트를 작성하는 경우에는 작성한 코드에 맞춰 형식적인 테스트

코드를 작성하게 되는 경향이 있었습니다.

관련작성글

• TDD이야기(오해와진실)을 읽고 http://www.iamkyu.com/124• 테스트주도개발을읽고 http://www.iamkyu.com/86• 다시토비의스프링,2장테스트 http://www.iamkyu.com/93• NHN은이렇게한다소프트웨어품질관리를읽고 http://www.iamkyu.com/69• 컴퓨터동작원리와테스트주도개발(TDD)를읽고 http://www.iamkyu.com/45

관련작성글

• GIT더꼼꼼하게커밋하기 http://www.iamkyu.com/118• 나의커밋룰규정 https://github.com/iamkyu/TIL/blob/master/vcs/git-commit-rules.md

②버전관리시스템에커밋 ③원격저장소에푸쉬와동시에빌드및테스트코드커버리지레포트생성

[Travis�CI의 빌드]

[codecov 테스트코드커버리지레포트]

• 로컬저장소에서 원격저장소로 푸시(Push)를 하면 Travis

CI 라는 지속적통합툴은 메이븐을 통해 컴파일 > 테스트

를 진행하고테스트 코드의 커버리지에 대한 레포트를

codecov 도구가 생성하여줍니다.

• 빌드의 결과는 슬랙 메신저를 통해 통보하도록 구성하였

습니다.

• 원격저장소에 연동한 CI도구가 빌드를 성공하면 이 소스

들을 deploy 브랜치로 병합을진행합니다. 이 때, Github

저장소에서 Jenkins로 hook을 보내 서버의 소스를 업데

이트 합니다. 그 후 젠킨스에서는 다시 메이븐 빌드를 진

행합니다.

• 역시 빌드의 결과는 슬랙 메신저를 통해 통보하도록 구성

하였습니다.

④빌드성공시Deploy 브랜치에병합

⑤젠킨스에서다시빌드진행.성공시배포

관련작성글

• JenkinsCI삽질기 http://www.iamkyu.com/119• Jenkins-Github-Slack연동설정 http://www.iamkyu.com/121

[Jenkins의 배포 상황및이력조회]

배포 (Deploy)

관련작성글

• 우분투 서버 설정 https://github.com/iamkyu/TIL/blob/master/server-infra/ubuntu-server-setting.md

• 모든 빌드 과정을 무사히 통과하면 쉘스크립트를 통해 애플

리케이션을 배포 합니다. 해당 애플리케이션은 자바로 작성

한 웹서버 프로그램으로, 8089 포트로 소켓(Socket)을 열고

요청을대기하게됩니다.

JRE

해당과정을진행하며느낀점

https://github.com/iamkyu/my-web-server

• 처음환경을구축하는일이쉽지않았지만, 이러한프로세스를가지는것이안하는것보다무조건낫다고생각했습니다. 소프트웨어의품질

은개발자의자존심과연결된문제이기때문입니다.

• 테스트나배포자동화과정을경험해본사람은계속하지만경험하지못한사람은계속안한다는말을들은적이있습니다. 앞으로근무하

는환경에이런시스템을어떻게설명하고적용할지고민하는것이현재가장큰숙제로남아있습니다.

• 혼자 진행하는 작은 프로젝트이다 보니 코드 컨벤션이나 정적 분석툴((PMD, Find Bugs 등) 까지 적용해보지는 못했으나, 이 역시 시도해볼예정입니다.

top related