인턴 Day21 (배포 관련 개념)
0. Day21
이번주는 배포 관련해서 배워보려고 한다. 예전에 친구들과 얼렁뚱땅 aws 써서 배포한 경험이 있긴한데 그때는 정말 메뉴얼 대로 어찌저찌 해서 한거라 개념을 몰랐다. 이번에 새로 배우게 되었다.
1. 빌드란
- 컴파일 : 작성한 소스 코드를 바이너리 코드로 변환하는 과정. 컴퓨터가 알아들을 수 있는 언어라 바꿔주는 것.
- 빌드 : 소스 코드를 실행가능한 소트프웨어 산출물로 만드는 일련의 과정. (JAR, WAR)
- 빌드 도구: maven, gradle
2. 배포란
- 작성한 코드를 빌드하고 빌드가 완성된 실행가능한 파일을 사용자가 접근할 수 있는 환경에 배치하면 배포가 완료 된 것. 빌드를 하고 생성된 jar, war 파일을 was에 올리는 것이 배포.
- git에 올려두고, 테스트 코드 작성하고 검증 하면 배포가 가능한 상태이다.
3. CI /CD
- CI(continuous intergration) 지속적인 통합 : 개발자를 위한 자동화 프로세스인 지속적 통합으로 모든 개발이 끝난 후에 코드 품질을 관리하는 고전적 방식의 단점을 해소하기 위해 나타난 개념. Jenkins, Travis 가 대표적인 툴이다.
- CD(continuous deploy) 지속적 배포 : 소프트웨어가 항상 신뢰가능한 수준에서 배포될 수 있도록 관리하자는 개념
- 지속적으로 통합하면서 테스트와 빌드를 진행하고 이를 통과한 코드에 대해서 신뢰할 수 있고 배포할 수 있다는 내용
4. 무중단 배포
기존에 동작하고 있는 거버(배포가 완료된 존재) 그 상태에서 새롭게 업데이트한 코드를 배포한다면? 충돌이 발생한다. 그래서 서버를 내리고 배포하고 다시 올리고. 내리는 시간(downtime)이 생김.
그래서 두대 이상의 서버를 서비스 해야한다. 다운타임이 발생하지 않으려면 실제 서비스 중인 서버와 새롭게 배포한 서버가 동시에 존재해야 한다. 비용을 줄일려면 배포할 때만 새롭게 서버를 띄우고 배포가 완료된 후에 기존 서버는 죽이면 된다. Rolling 배포 / Canary 배포 / Blue-Green 배포
5. 아파치 (Apache) / 톰캣 (Tomcat)
아파치: 소프트웨어 재단의 오픈소스 프로젝트이다. 일명 웹서버로 불리며, 클라이언트 요청이 왔을때만 응답하는 정적 웹페이지에 사용된다.
- 웹서버 = 80번 포트로 클라이언트 요청(POST,GET,DELETE)이 왔을때만 응답함.
- 정적인 데이터만 처리한다.(HTML,CSS,이미지 등).
톰캣: dynamic(동적)인 웹을 만들기 위한 웹 컨테이너, 서블릿 컨테이너라고 불리며, 웹서버에서 정적으로 처리해야할 데이터를 제외한 JSP, ASP, PHP 등은 웹 컨테이너(톰캣)에게 전달한다.
- WAS(Web Application Server) = 대표적인 was 종류가 tomcat 이다.
- 컨테이너, 웹 컨테이너, 서블릿 컨테이너라고 부름
- JSP,서블릿처리,HTTP요청 수신 및 응답
- 아파치만 쓰면 정적인 웹페이지만 처리하므로 처리속도가 매우 빠르고 안정적이다.
하지만 톰캣(WAS)를 쓰면 동적인 데이터 처리가 가능하다. DB연결,데이터 조작, 다른 응용프로그램과 상호 작용이 가능하다. 톰캣은 8080포트로 처리한다.
6. 웹서버와 WAS(web application server)
웹 서버: 클라이언트(사용자)가 웹 브라우저에서 어떠한 페이지 요청을 하면 웹 서버에서 그 요청을 받아 정적 컨텐츠를 제공하는 서버이다. 여기서 정적 컨텐츠란 단순 HTML 문서, CSS, javascript, 이미지, 파일 등 즉시 응답가능한 컨텐츠이다. 그렇다면 웹 서버는 정적 컨텐츠만 제공하느냐? 그것은 아니다. 웹 서버가 동적 컨텐츠를 요청 받으면 WAS에게 해당 요청을 넘겨주고, WAS에서 처리한 결과를 클라이언트(사용자)에게 전달해주는 역할도 한다. 대표적으로 아파치가 있다.
WAS: 웹 서버와 웹 컨테이너가 합쳐진 형태로서, 웹 서버 단독으로는 처리할 수 없는 데이터베이스의 조회나 다양한 로직 처리가 필요한 동적 컨텐츠를 제공한다. 덕분에 사용자의 다양한 요구에 맞춰 웹 서비스를 제공할 수 있다. WAS는 JSP, Servlet 구동환경을 제공해주기 때문에 웹 컨테이너 혹은 서블릿 컨테이너라고도 불린다.
7. 4 Tier Web Application Architecture

8. Tomcat 2개 돌리는 방법
- tomcat 8.5 버전과 9 버전 두개를 설치하고
- conf 폴더에 server.xml의 <Server port="18005" shutdown="SHUTDOWN" ><Connector connectionTimeout="20000" port="8089" protocol="HTTP/1.1" redirectPort="8444"/> 숫자를 각각 바꿔준다.
- webapps폴더에 war 파일을 넣어주고
- bin 폴더에 startup.bat을 실행시켜주면 된다.
