DDD에 대한것들을 공부하다가 관리, 운영, 배포에 관한 글을 읽고 배운것이 많아 글로 남기게 되었습니다. 기술에 대한 자세한 내용은 없고 철학이나 각각의 역할에 대해서만 서술하겠습니다.
# 시대 변화
시대는 하루가 빠르게 변화하고 있습니다. 특히 이공계쪽은 미래가 상상이 가지 않을정도 입니다. 결국 사용자에게 '서비스'를 제공하는 개발자라는 사람들은 알 수 없는 미래에 빠르게 대응해야 하는 상황입니다. '성능(속도)'과 '확장성'이 굉장히 중요해졌습니다. 서비스라는 것도 결국 돈에 의해 만들어지고 운영되는 것이기 때문에 2가지 특성을 가지고 가면서 비용을 최소화하려고 노력하였습니다.
# 어떻게 변하고 있는가
1. 대규모 silo 조직 -> 다기능 소규모 squad 조직
2. 서버 단위가 작아지고 있습니다. 물리서버 -> vm -> container (docker)
3. 어플리케이션 단위도 작아지고 있습니다. monolithic (mega service) -> micro service -> function service
서비스가 서로 영향을 미치는 것을 막고자 서비스를 분할하고 자체적 db 사용합니다. 또한 api로 통신해서 영향도 최소화합니다.
4. on-premise -> cloud
# 지속 성장을 위한 프레임 워크
1. 애자일 핵심사상 M (철학, why)
interactive - dev-ops간 쌍방향 협업, 소통
value oriented - 가치가 없는것은 버리거나 바꾼다.
iterative - 지속적 반복을 통한 발전
( I , V , I 를 붙여서 M으로 부릅니다.)
2. 마이크로 서비스 (수단, how)
좋은 서비스의 조건 - 3s / speedy, scale, service always
# 좋은 서비스를 만드는법
1. 서비스를 잘게 쪼개라
2. 서비스간의 독립성 보장
3. 모든 서비스를 만들지말고 최소한의 기능을 갖춘 서비스를 빠르게 출시해서 더해가라
이에 필요한 수단이 마이크로 서비스입니다.
# 구현 방법
1. 나누어서 설계하고 개발 - Domain Drivent Design
2. 마이크로 서비스를 개발,배포,운영하는 MSA(micro service architecture) 필요
3. MSA feature와 12 factors 만족
4. 마이크로 서비스 패턴, msa 기술 적용
# 마이크로 서비스 4가지 문제
1. complex - 서로 연결 통제 복잡
2. consistentcy - 자체 db간의 데이터 불일치
3. operational overhead - 운영을 위한 테스트, 배포, 버전관리 등이 더 어려움
4. performance - 서비스간의 네트워크 트래픽 발생
3. 데브옵스 (수단, how)
초기에는 "개발조직, 운영조직의 벽을 최소화하자"였지만 진짜 의미는 "비즈니스 조직과 it조직의 협업을 강화하자"입니다.
데브옵스 조직문화의 생명은 speed와 iteration 입니다. 이를 위해 서비스의 CI(continuous integration), CD(continuous deployment) 가 자동화될 필요가있습니다.
CI 과정 : 소스 업로드 -> 단위테스트 -> 소스보안검사 -> 실행파일 생성 -> 배포이미지 빌드 ->배포이미지 보안검사 -> 이미지 저장소 업로드
CD 과정 : 개발계 배포 -> 검증계 배포 -> 시스템/성능 테스트 -> 운영계 배포
이러한 CI/CD를 위한 업무절차를 '파이프라인', 각 단계 수행 도구를 '툴체인'라고 합니다.
4. 클라우드 플랫폼 (플랫폼, how)
플랫폼의 진정한 의미는 '만나는 곳'이며 사람과 기술, 기술과 기술을 연결해줍니다.
클라우드는 이런 플랫폼을 speedy하게 만들수있는 공간을 제공해줍니다.
# 클라우드
클라우드는 초기 비용을 절감해주지만 전체 비용이 크게 줄진않습니다. 진짜 목적은 혁신적인 서비스를 보다 빨리 출시 가능케 하는것입니다. (혁신 플랫폼)
종류로는 iaas, paas(쿠버네티스), saas 가 있습니다.
# 컨테이너 docker
OS, WAS, 라이프러리의 버전충돌이 너무 빈번한 문제 해결, 격리성 제공
# 컨테이너 관리 플랫폼 쿠버네티스
여러개의 가상머신에서 컨테이너들을 관리 힘듬으로 등장 (매우복잡하고 광범위)
간단한 예시
1. 여러개의 컨테이너를 사용중인데 하나가 꺼졌다면 이를 모니터링해서 빠르게 재시작
2. 각각의 컨테이너에 업데이트가 필요한 경우 서비스가 중단될 필요없이 컨테이너에 적용이 가능하게해줍니다.
# references
https://happycloud-lee.tistory.com/261?category=8322466
chatgpt
'Back-end' 카테고리의 다른 글
[JVM 동작원리] 2. Runtime Data Area (0) | 2023.10.12 |
---|---|
[JVM의 동작원리] 1. 클래스 로더 (0) | 2023.10.10 |
Java의 compile 과정 (0) | 2023.10.09 |
Web server 와 Web application server (0) | 2023.03.23 |
JAVA란 (0) | 2022.12.24 |