주니 개발 도서관

자바(JAVA)

(주말) 영상과제

주니홍 2022. 6. 13. 02:22

https://www.youtube.com/watch?v=JgRCaVwkPE8

  • 컴파일과 빌드

https://www.youtube.com/watch?v=6SvUZqbU37E 

  • 빌드와 배포

https://www.youtube.com/watch?v=IEH3YA2Nn4Q

  • 알고리즘

https://www.youtube.com/watch?v=vZRmCbl871I 

  • JVM의 Garbage Collector

 

 

컴파일과 빌드

 

원시파일
사람이 읽을 수 있는 알아들을수 있는 형태로 만들어진 파일

 

컴파일(compile)

원시파일을 컴퓨터가 알아들을수 있게 이진코드(바이너리 코드)로 변형해주는 과정
이런 변형을 도와주는 프로그램을 컴파일러라고 한다

링크(link)
컴파일한 결과물에서 우리가 필요한 외부 리소스를 같이 연결을 하여
실행 가능한 파일만들기 연결해 주는 작업이며
이 작업를 해주는 프로그램을 링커 라고한다

빌드(build)
원시파일에서 시작하여 실행파일까지 만들어지는 과정을 빌드라고 한다

(빌드 안에 컴파일과 링크가 있다고 생각하면된다)

 

이러한 빌드를 자동화 해주는 프로그램을 "빌드 도구"라고 한다

 

빌드도구
소스코드로부터 실행 가능한 어플리케이션을 생성하는 것을 자동화하는 프로그램
즉, 빌드를 자동화하는 프로그램


자동화
매번 반복적으로 수행해야하는 수동적인 일을 프로그램이 자동으로 해주는 과정

 

빌드도구를 사용하는 이유

대규모 프로젝트에선 빌드프로세스를 수동으로 호출이 실용적이지 않다.

무엇을 빌드할지, 어떤 순서로 할지, 어떤 의존성이 있는지 모두 추적하기 쉽지 않기 때문이다.

빌드도구를 사용하면 이를 일관되게 할 수 있다.

 

대표적인 빌드 도구

 

 

배포

 

배포

작성한 코드를 빌드하고, 빌드가 완성된 실행 가능한 파일을 사용자가 접근할 수
있는 환경에 배치하는 것

 


CI / CD에 대하여

CI ( Continuous Integeration ) 지속적 통합
개발자를 위한 자동화 프로세스인 지속적 통합으로 모든 개발이 끝난 이후에
코드 품질을 관리하는 고전적방식의 단점을 해소기 위해 나타난 개념

  • 주기적으로 통합하여, 발생하는 에러들을 확인하고 고쳐나가는 개념

1. 코드를 통합한다
2. 통합한 코드가 제데로 동작하는지 테스트한다
3. 제데로 빌드가 되는 지도 테스트한다
4. 결과를 정리하고 버그가 존재한다면 적어둔다.

ㅡ> 수동적으로 하기엔 매번해야하기 때문에 자동화된 도구들이 있다

 

 

CD (Continuous Deploy) 지속적 배포
소프트웨어가 항상 신뢰 가능한 수준에서 배포될 수 있도록 관리하자는 개념

 


CI / CD - 정리
지속적으로 통합하면서 테스트와 빌드를 진행하고 이를 통과한 코드에 대해서
신뢰할 수 있고 바로 배포할 수 있게 하자!


 

 

무중단 배포

기존에 동작하고 있는 서버(배포가 완료된)가 존재한다고 하자
그 상태에서 새롭게 업데이트한 코드를 배포한다면 충돌이 발생한다
그렇기에, 기존 서비스중인 서버를 잠시 내리고

코드를 배포한 후 다시 서버를 동작시켜야함

  • 서버가 다시 동작하는데 30초의 시간이 걸린다고 한다면 그 시간만큼
    다운타임(유저에게 서비스가 불가능한 시간)이 발생한다

  • 다운타임이 자주 발생한다면 문제가될수있다
    제공하는 서비스에서 문제가 안된다면 무중단 배포를 고려하지 않아도 괜찮지만
    지속적인 서비스가 필요한 환경에선 무중단 배포를 고려해야한다

 

무중단 배포필요조건

  • "두 대 이상의 서버"를 서비스해야한다

다운타임이 발생하지 않으려면 서비스 중인 서버새롭게 배포한 서버동시에 존재해야 한다
비용을 줄이려면 배포할 때만 새롭게 서버를 띄우고 배포가 완료된 후에 기존 서버는 죽이면 된다.

 

 

Rolling 배포 Canary 배포 Blue & Green 배포

// 무중단 배포방법의 종류

 

Rolling 배포

  1. 서버 1로드 밸런서에서 뺀다
  2. 서버 1에 배포한다
  3. 서버 1을 다시 로드 밸런서에 넣는다
  4. 서버 2로드 밸런서에서 뺀다
  5. 서버 2에 배포한다
  6. 서버 2를 다시 로드 밸런서에 넣는다

*로드 밸런서

서버에 가해지는 트래픽을 여러대의 서버에게 균등하게 분산시켜주는 역할을 하는 것

*트래픽

일정 시간 내에 흐르는 데이터의 양



단점

  • 배포할 서버가 많다면 배포가 끝나기 전까지는
    누구는 이전의 서비스를 받고 누구는 신규 서비스를 받을 수 있다는 문제가 존재

  • 1대에 배포하는 것 보다 최소 2배이상 느리다
     ㅡ> N번의 배포를 여러번해야하기 때문

 

 

Canary 배포

소수의 유저(혹은 사내)만 사용하는 환경(Canary 환경)에 신규 버전을
배포하고 문제가 없다고 판단됐을 때 다른 모든 서버에 배포한다.

 

장점

  • A/B 테스트가 가능하고, 오류율 및 성능 모니터링에 유용하게 사용할 수 있다

* A/B테스트는 기존서비스(A)와 새로 적용하고 싶은 서비스(B)를 통계적인 방법으로 비교하여

새로운 서비스가 기존서비스에 비해 정말 효과가 있는지 알아보는 방법

 

단점

  • 버전 관리를 위해 동시에 여러 개의 소프트웨어 버전을 관리해야 하는 것에서 오는 비용이다.

 



Blue / Green 배포

실제로 서비스 중인환경(Blue)과 새롭게 배포할 환경(Green)을 세트로 준비해서 배포하는 방식


장점

  • 새롭게 배포할 환경에만 배포하면 되기 때문에 배포 속도가 매우 빠르다

  • 언제나 Green 환경이 떠있기 때문에 만약 잘못된 버전으로 배포했을 경우에 신속하게 롤백이 가능하다


단점

  • Green 환경이 항상 떠있어야 하기 때문에 비용이 두 배로 든다.

 

 

 

 

알고리즘JVMGarbage Collector는 평일에 따로 이해하고 정리해야할 것 같다

이해를 확실히 하고 정리하는 것이 좋을 것 같다

'자바(JAVA)' 카테고리의 다른 글

(6)메소드, 재귀함수  (0) 2022.06.14
(5) 배열과 배열관련 알고리즘  (0) 2022.06.13
0607~0610 Exception(오류) 정리  (0) 2022.06.11
(4) 중첩 반복문, 배열  (0) 2022.06.10
(3) 반복문  (0) 2022.06.09