서버는 네트워크에서 다른 컴퓨터나 소프트웨어와 같은 클라이언트에게 서비스를 제공하는 컴퓨터
네트워크는 컴퓨터와 하드웨어 장치들이 데이터를 포함한 자료들을 서로 주고 받는 통신 연결드의 집합..
예를 들어 웹 서비스를 이용한다고 해보자.
웹 사이트의 콘텐츠 정보와 html 코드...등등을 가지고 있는 콤퓨터가 서버인 것이다.
그리고 브라우저의 정의가 무엇이냐
웹 서버와 통신하여 리소스를 받아 사용자에게 보여주는 클라이언트 소프트웨어인 것이다.
클라이언트/서버 시스템이다.
애플리케이션 배포란 먼저, 완성된 실행 가능한 파일을 사용자가 접근할 수 있는 환경에 배치시키는 일
- 컴파일: 사용자가 작성한 코드를 컴퓨터가 이해할 수 있는 언어로 번역하는 일
- 빌드: 컴파일된 코드를 실제 실행할 수 있는 상태로 만드는 일
- 배포: 빌드가 완성된 실행 가능한 파일을 사용자가 접근할 수 있는 환경에 배치시키는 일
- 혹은 컴파일을 포함해 war, jar 등의 실행 가능한 파일을 뽑아내기까지의 과정을 빌드한다고도 함.
출처 : https://itholic.github.io/qa-compile-build-deploy
내가 영차영차 만든 서비스를 local로 실행시켜서 내가 본다면 그거슨 배포는 아닌 것이다. 왜냐면 사용자는 접근할 수 있는 서비스가 아니니까!
하지만? 내가 네트워크를 연결하고 외부에서 접근할 수 있도록 포트를 열고 이것저것 설정을 하여 외부에 공개한다면? 배포를 했다고는 할 수 있다. 근데 이때는 내 컴퓨터를 서버로 사용을 하게 되는 것이다.
https://kibbomi.tistory.com/219
근데 일반적인 웹 서비스 or 그냥 서비스들을 사용자한테 제공한다고하면 은행처럼 영업시간을 정해놓고....서비스를 운영하는 경우는 없지요?
24시간 사용자가 엑세스해서 사용하는 것이 당연한데, 내 컴퓨터를 서버로 쓰려면..?
내 컴퓨터에서 계속 서비스가 실행되어야하고 끄면 안됨, 그리고 정말 많은 사용자가 사용하는 서비스가 되면..? 서버의 사양도 늘려야하고...? 그냥 우리가 아는 컴퓨터 사양으로는 감당할 수 없게 된다.
그래서 일반적으로 서버 센터라고 하면 나오는 사진들
대학교에서도 있는 서버실...이런 것은 서버용 컴퓨터인것이다.
쨌든 쟤들도 컴퓨터!
근데 각 기업들이 이런 서버를 구축해서 사용하는 것이 하드웨어적 지식을 가지고 있는 엔지니어가 필요하고 유지보수 측면에서 비용적 문제가 발생하고...이것저것 어쩌고 해서...
요즘 뜨는게 바로 클라우드 컴퓨팅, AWS가 신나게 쓰이기 시작한 것이다.
데이터 센터, 서버를 직접 사서 유지보수하지 않고 아마존이 가지고 있는 짱 크고 멋진 서버를 빌려다 쓰는 것이라고 표현할 수 있는 것이다. 근데 이외 이것저것 관리도 잘 해주네? 로그 관리, 모니터링, 네트워크 관리까지? 쫀다! 하지만 비싸
Jenkins는 CI/CD를 위한 플러그인으로 구성된 소프트웨어이다.
젠킨스 구축을 한다고 하면 먼저 3가지 방향성이 있다.
빌드..는 그냥 빌드 치면 빌드 되는 거고 자바 파일 실행시키면 서비스야 시작이 되는데, 대체 왜 젠킨스 구축이 어렵다고 표현하는 걸까.
파이프라인을 작성하고, 도커 이미지 파일을 만들고...네트워크 통신을 위한 설정이 당장 처음에 하기에 많이 당황스럽기때문이다. 스텝 바이 스텝으로 하면 이해가 나쁘지 않음
1번 냅다 빌드하기? 어렵지않다. 왜냐면 그냥 내가 인텔리제이로 빌드해서 실행하는 거랑 다른 것이 없어. 아 물론 깃 레파지토리 연동은 처음하면 어려울 수 있긴 하지만...
내 컴퓨터에 젠킨스를 깔고...깃 연동하고 빌드..시작..끝..!
아 근데 물론 진짜 외부에서 접근할 수 있게 방화벽이랑 포트 열어주는 설정은 해줘야함
근데 내 컴터를 서버로 안쓸거니까....! 스킵!
찬찬히 보다보면 가장 많이 겪을 상황은 바로바로 application.yml 이 없어서이다.
DB 접속 정보등의 env는 github에 커밋을 하지 않기 때문인데, 가장 빠른 방법은 직접 내부로 들어가서 yml 파일 만들어주는거임....^^....
jenkins_home/workspace/.....
근데 열심히 구글링을 해보니 이런 의견이 있어서 이를 이용하면 되겠다는 생각을 했다.
https://redcoder.tistory.com/300
https://resilient-923.tistory.com/422
사실 AWS를 이용한 배포시에는 해당 건들의 설정이 용이하며, 일반적인 회사에서는 private 저장소를 쓰기 때문에 이후에 크게 신경쓸 사항은 아닌 거 같긴 허다!
원격으로 배포를 해야한다고 하면 처음엔 좀 빡세보이는데 별거없다!
일반적인 배포 상황은 다 원격이다. AWS EC2나 서버실에다가든
그러면 원격 배포는 어케 하냐
젠킨스는 플러그인으로 구성되어있다고 했지않나. SSH 통신을 위한 플러그인이 있다!
SSH는 네트워크 상의 다른 컴퓨터에 로그인하고나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용 프로그램 또는 프로토콜을 말하는데, 인터넷과 같은 public network를 통해 통신을 할 때 보안적으로 안전하게 통신을 하기 위해 사용하는 프로토콜이다.
( 참고 : https://hanamon.kr/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-ssh%EB%9E%80/ )
이 통신 방식을 위해서는 public key와 private key를 생성해서 인증과정을 거치게 된다. 통신하려는 컴퓨터에서 키를 생성한 후 public key를 가져다가 다른 컴퓨터에서 이용하는 것
당장 내 컴터 배포 실습을 한다쳐도 깃에서 코드를 끌어오기 위해서 SSH 통신을 해야하기때문에, 이건 내가 당장 PUTTY로 접속 안한다쳐도 하고는 있는것!
이걸 실제로 실습해보고 싶다고 하면 컨테이너 두개 띄워서 하면 되긴하는데, 네트워크 설정...이미 회사에서 하는 거 보면서 지쳐서 하고싶지가 않다.....
고로 기존부터 해보고 싶었던 AWS 배포로 바로 가겠어.
EC2도 컨테이너에 배포하는거랑 ssh 플러그인을 추가해서 SSH 서버를 설정하고 빌드해서 실행하기!
보낼 파일을 지정하고 실행할 커멘드를 쳐준다.
나는 지금 당장은 진짜 냅다 실행만 할거라서 바로 자바 냅다 실행!
그러면
호출이 된다!
결국 컨테이너, EC2 든 어쨌든 어떤 컴퓨타 하나를 할당받아서 서버로 사용한다는 것은 동일하다.
하지만! 어려워지는 이유는.....배포 환경을 위해 컨테이너를 사용하고, K8s를 사용하고...그러면 젠킨스로 도커를 올리고 하는게...어엇..? 데브옵스....?의 길로
그래도 목표는 도커 파일과 젠킨스 파일을 만들어 SCM을 통한 컨테이너 배포를 해보려고 한다.
투비 컨티뉴...