보통 면접에서의 첫번째 질문은 API, Restful API, CloudNative 이다
cncf.io
오픈소스를 지향하는 곳
https://landscape.cncf.io/
서비스 메시를 쓸수 있냐 없냐를 나눌 정도
클라우드 네이티브의 핵심
- 컨테이너를 사용해야 한다
- 서비스 메시를 사용해야 한다
- 마이크로 서비스를 구축해야한다
- 불편 인프라를 갖춰야 한다
- 선언적 API (api 문서 등)
-> 클라우드 네이티브 기술
확장성, 탄력성 및 장애 격리성이 뛰어난 애플리케이션을 구축해야 한다
즉, 장애가 발생해도 사용자 입장에서는 장애가 없어야 한다
Point: 클라우드 네이티브 기술을 적용해야 경쟁력이 있다!!
핵심 기술
DevOps
소프트웨어 개발 방법론의 하나로, 개발 담당자와 운영 담당자가 연계하여 협력하는 자동화된 협업 프로세스
CI/CD
마이크로 서비스
코드형 인프라 (IaC) <- 요즘 많이 물어보는 주제
모니터링 및 로깅 (Observability, 관측 가능성) < -중요 개념
커뮤니케이션 및 협업 ex. Jira, Slack, Git 등등
CI/CD
개발 생산성을 높이기 위한 방법론
코드, 빌드, 테스트까지는 CI
프로비저닝, 배포, 모니터링은 CD
Containers
애플리케이션 실행을 위한 바이너리와 라이브러리 등을 Packaging하여 가상화 한 것
기존의 가상 머신에 비해 경량의 가상환경을 만들고, 이식성이 뛰어나기 때문에 동일한 서버 환경에서 더 많은 애플리케이션을 구동할 수 있음
-> 이미지화
MicroServices
데브옵스에 최적화된 작고 독립적인 서비스로 구성된 구조적이고, 조직적인 접근 방식
애플리케이션을 구성하는 각 모듈을 독립된 서비스로 분리
각 서비스가 하나의 워크로드를 책임지도록 함
즉, 컨테이너 등을 통해 독립적으로 서비스를 구현하여 서로 영향을 끼치지 않도록 한다
MicroServices의 반대인 Monolithic 구조는 신규 기능 추가 시 테스트, 빌드, 테스트 등의 작업 시간이 길어질 수 있다.
또한, 버전 업데이트 시 다른 모듈에서의 오류가 발생할 가능성이 있다

애플리케이션 개발을 위한 클라우드 네이티브 원칙

- 안정성
- 확장성
- 예측성
- CI/CD
- 보안
으로 이해하면 된다
CI/CD 배포 자동화 도구가 필요한 이유
- 효율성 향상: 배포 시간 단축
- 일관성: 동일 프로세스로 반복적 수행
- 빠른 피드백: 검증을 통한 빠른 문제 해결
- 팀 협업 증진
- 품질 향상: 코드 품질 향상, 릴리즈의 신뢰성 확보
- 신속한 배포
Bamboo, CircleCI, Jenkins 등등 좋은 CI 도구가 많지만 보통 Jenkins가 무료 오픈소스이기 때문에 많이 사용된다

실제 S사의 모델

Jenkins
- 광범위한 플러그인 제공
- 높은 사용자 정의 가능성
- 스크립팅 가능성 (Jenkinsfile) <- 이걸 열심히 공부하면 된다
- 강력한 커뮤니티 지원
GitLab
- 통합 CI/CD
- 자동 DevOps
- 포괄적인 Toolset 지원
- 높은 확장성
- 유료