개발 전체 프로세스

빌드 과정
- 컴파일: 소스코드를 실행 가능한 바이너리로 변환하는 과정
- 패키징: JAR(WAR)파일을 만들고 버전 관리하는 과정
- 셰어링:
- 빌드된 애플리케이션 파일을 저장소(예: Nexus, Artifactory, Maven Repository)에 업로드하는 행위
(자스에는 npm, 자바에는 maven 등이 있음)
- 패키지 매니저라는 서버에 빌드된 app의 jar파일이나 war파일을 올리면서 버저닝을 진행
테스팅 과정
- Unit Testing (단위 테스트)
- 개별 함수 및 모듈이 올바르게 동작하는지 검증
- Integration Testing (통합 테스트)
- 여러 모듈이 함께 작동하는지 확인
- 데이터베이스 및 외부 API와의 연동 테스트를 포함
- System Testing (시스템 테스트)
- 전체 시스템이 기대한 대로 동작하는지 검증
- 서버, DB, 네트워크 등 다양한 요소가 포함될 수 있음
단순히 서버 코드만이 아니라 다른 서버나 db에 영향을 받으면 테스트의 속도가 길어질 수 있고, 안전하지 않을 수 있다.
단일 테스트 이후로는 점점 복잡해짐.
배포
환경 분류
- Dev; 개발 환경
- UAT; 사용자 수용 테스트 환경
- Staging; 스테이징 환경
- Prod; 운영 환경
무중단 배포 전략(Canary, Rolling, Blue-Green)
프로덕션 배포까지 자동으로 이뤄지는 경우는 드물다
마이크로 서비스가 굉장히 잘게 쪼개져, 바로 배포되어도 괜찮다는 확신이 있으면 무중단 배포를 선택하기도 한다.
Rolling 배포

- 무중단 배표의 가장 기본적인 방식
- 사용 중인 인스턴스들에 새 버전의 서비스를 점진적으로 배포하는 방법
- 서비스 중인 인스턴스 하나를 로드 밸런서에서 라우팅하지 않도록 한 뒤, 새로운 버전의 서비스를 적용하여 다시 라우팅하도록 한다.
- 이를 반복해 모든 인스턴스에 새 버전의 서비스를 배포한다.
Canary 배포
Canary: 카나리아 새
- 유독 가스에 민감한 새.
- 과거 광부들이 광산에서 가스 누출 위험을 감지하는 용도로 사용

- 잠재적 문제 상황을 미리 발견할 수 있는 배포 전략
- 지정한 서버 또는 특정 유저에게만 배포했다가 정상적인 경우 전체를 배포한다.
- 서버의 트래픽을 일부 신 버전으로 분산시켜 오류 여부를 확인할 수 있다.
- 블루그린 배포와 달리, 트래픽을 한번에 바꾸는 것이 아니라 단계적으로 전환한다.
Blue-Green 배포
배포 전 | 배포 후 |
---|
 |  |
- Blue: 기존 버전, Green: 새로 배포될 버전
- 신 버전을 배포(새로운 서버에)하고 일제히 전환하여 모든 연결이 신 버전을 바라보게 하는 전략
- 운영 중인 구 버전과 동일한 신 버전의 인스턴스를 나란히 구성한 후 배포 시점에 로드밸런서를 통해 모든 트래픽이 일제히 전환된다.
- 시스템 자원이 두 배가 필요해 비용이 더 많이 발생한다.
모니터링
- Dashboard: 서비스 상태를 시각적으로 모니터링하는 도구
- Alert: 장애 발생 시 알림을 제공하는 시스템
- Notification: Slack, Email, SMS 등을 활용한 자동화된 알림 전송
개발 프로세스

요구사항 분석
개발 프로세스의 초기 단계
사용자 또는 이해관계자의 필요와 기대를 파악.
소프트웨어가 무엇을 해야 하는지, 어떤 문제를 해결해야 하는지 명확히 정의한다.
기능적 요구사항(시스템이 수행해야 할 기능)과 비기능적 요구사항(성능, 보안, 사용성 등)으로 구분된다.
와이어 프레임
사용자 인터페이스의 기본 구조와 레이아웃을 시각적으로 표현하는 단계
디자인 요소나 색상보다는 기능과 콘텐츠 배치에 중점을 둔 단순한 스케치
사용자 경험(UX)을 초기에 계획하고 이해관계자와 소통하는 도구로 활용
설계
시스템의 전체 구조와 아키텍처를 정의하는 단계.
데이터베이스 설계, 시스템 아키텍처, 모듈 간의 인터페이스, 알고리즘 등을 계획한다.
UML 다이어그램, ER 모델 등의 도구를 활용해 시스템의 청사진을 만든다.
구현
실제로 코드를 작성하는 단계.
설계 문서와 계획에 따라 프로그래밍 언어, 프레임워크, 라이브러리 등을 사용해 기능을 구현한다.
코딩 표준과 지침을 따르며, 버전 관리 시슽메을 활용해 코드 변경을 추적한다.
Reference