Closed ji-water closed 4 years ago
[ ] 팀원들 이전 프로젝트 경험에서 Git 활용 정도 확인
[ ] Git Branch 사용 유무 정하기
[ ] Git Branch 사용할 경우 Git Branch 전략 세우기
[ ] Git Flow vs GitHub Flow vs GitLab Flow
우형 기술 블로그 글에서 개발자들은 작업을 시작하기 전에 Jira 티켓을 생성한다고 한다. ( Jira = 이슈 & 프로젝트 트래킹 소프트웨어 ) 우리 팀 목표 달성을 위해서 Jira 써보는 것은 우선순위 밀리지 않나 싶다. Git & Jira 연동이 되고 좋은 기능들이 있을 것 같긴 한데 Jira로 관리하는 것 자체가 작업량이 있어 보이면 Git Issues랑 Git Projects로 간단하게라도 관리하는 게 낫지 않을까 싶다.
===
DB 모델링, 정규화
스케일 업, MSA 등등 여러 가지를 고려하여 아키텍처를 구성할 때 기존의 서비스를 보고 언제 어디서 어떻게 부하가 생기거나 병목 현상이 발생하거나 가정하여 고민하면 좋을 듯 게시판 만들기 프로젝트랑 크게 안 다를 것 같기도 해서 위의 고민을 바탕으로 실제 서비스 한다는 가정하에 발생할 문제를 대비하여 아키텍처를 구성하고 개발을 해보는 게 서버개발캠프 참여하면서 많은 배움을 얻어갈 수 있지 않을까? 생각
ex
- 트래픽 몰리는 시간 출근, 퇴근, 웹툰 정기 업로드 시간 밤 11시~01시 쯤?(네이버 요일연재 기준)
- 이미지 저장, 이미지 압축 알고리즘
질문 거리 일부러라도 만들어 보기?
- 의도적으로 프로젝트, 아키텍쳐 등등의 질문거리를 미리 만들어보고 내용 찾아보고 서로 얘기해보고 정 모르겠다 싶은 것은 피드백을 통해서 답을 얻고, 내용 정리
- 이후에 있을 수도 있는 발표, 포트폴리오 관련 질문, 면접 대비
웹 서버 : 정적 컨텐츠(.html, .png, .css등)를 제공하는 서버
웹 어플리케이션 서버 : 동적 컨텐츠를 제공하기 위해 만들어진 애플리케이션 서버 (DB조회, 로직처리가 요구되는 컨텐츠)
Ngnix | 아파치 HTTP 서버 |
---|---|
가벼움과 높은 성능을 목표로 한다. 웹 서버, 리버스 프록시 및 메일 프록시 기능을 가진다. | |
비동기 이벤트 기반 구조 | 스레드/프로세스 기반 구조 |
네이버에서 성능 측정, 부하 테스트 목적으로 jython(JVM위에서 파이썬이 동작)으로 개발 된 오픈소스 프로젝트
CI/CD는 애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법입니다. CI/CD의 기본 개념은 지속적인 통합, 지속적인 서비스 제공, 지속적인 배포입니다. CI/CD는 새로운 코드 통합으로 인해 개발 및 운영팀에 발생하는 문제(일명 "통합 지옥(integration hell)")를 해결하기 위한 솔루션
CI (Continuous Integration)
코드 버전 관리를 하는 VCS 시스템에 PUSH가 되면 자동으로 Test, Build가 수행되고 Build 결과를 운영 서버에 배포까지 자동으로 진행되는 이 과정을 CI (지속적 통합)이라고 합니다.
Build , Test를 실시하는 프로세스를 말하며 이러한 통합 프로세스를 상시로 실시해 주는것을 CI라고 합니다.
CD (Continuous Delivery or Continuous Deploy)
지속적인 서비스제공, 지속적인 배포로 짧은 주기로 개발중인 소프트웨어를 배포하고 그 과정을 자동화 하겠다는 뜻.
로컬 PC에서 Java 코딩 -> git push -> Travis Ci로 build error 체크 -> 실패 경우 stop 성공한 경우 -> Build 결과를 AWS S3 전달, AWS S3에서 AWS CodeDeploy를 통해 EC2 배포 Amazon EC2에서 Ngnix를 통해 무정지 서비스?
Jenkins의 경우 설치형이라 EC2 하나 더 써야 됨.
[스프링부트로 웹 서비스 출시하기 - 7. Nginx를 활용한 무중단 배포 구축하기] (https://jojoldu.tistory.com/267?category=635883)
무중단 배포 전체 구조
일종의 Scale UP : 사양 추가, Scale Out : 장비 추가 웹사이트의 접속자가 증가하는 경우 scale out이 효과적. 세션의 숫자가 폭발하는 경우 scale up은 많은 효과를 기대할 수 없음. 많은 경우 비용이 적게 드는 scale out이 더 효과적 그렇지만 OLTP(온라인 트랜잭션 처리)가 빈번한 데이터베이스의 처리를 위해서는 scale up이 더 효과적이다.
부하 분산을 위해서 가상(virtual) IP를 통해 여러 서버에 접속하도록 분배하는 기능을 말한다. 여러 대의 Server에게 균등하게 Traffic을 분산시켜주는 역할을 하는 것이 Load Balancer 이다.
여러 서버에 요청을 분산시키는 TCP 및 HTTP 기반 응용 프로그램을 위한 고 가용성 로드 밸런서 및 프록시 서버 를 제공하는 무료 오픈 소스
모놀리식 아키텍처란, 마이크로서비스의 각광에 따라 마이크로서비스가 아닌 전통의 아키텍처를 지칭하는 의미로 생겨난 단어이다. 위의 그림에서 처럼 모든 모듈은 서비스 내부의 Product 형태로 종속되어 있으며, 서비스에만 집중할 수 있는 구조로 되어 있다. 하나의 서비스 또는 어플리케이션이 하나의 거대한 아키텍처를 가질 때, Monolithic 하다고 한다.
단순한 아키텍처 구조와 개발의 용이함이 큰 장점이지만 규모가 커짐에 따라 복잡도가 심각하게 증가
하나의 큰 어플리케이션을 여러개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍쳐
기타 참고
3기 백엔드 참여자 후기 포함 내용
- Scale Out & 무정지 서비스
- CI & CD
- Redis
스프링부트로 웹 서비스 출시하기 포함 내용(한 번 해볼 수 있는 것)
- Springboot & Gradle & Github 프로젝트 생성
- JPA로 간단 API 만들기 (아직 SI 환경에선 Spring & MyBatis 를 많이 사용하지만, 쿠팡/우아한형제들/NHN Entertainment 등 자사 서비스를 개발하는 곳에선 SpringBoot & JPA를 많이 사용하고 있습니다. 라고 합니다)
- Test
- Handlebars
- yml
- AWS EC2 & RDS 구축
- EC2 Linux 환경 써보면서 느는 약간의 Linux 명령어
- EC2 배포를 위해 쉘 스크립트로 deploy 스크립트 작성
- Travis CI & AWS CodeDeploy로 배포 자동화 구축
- Ngnix를 활용한 무중단 배포 구축
- 키워드 줍기 등등
참고용 이전 서버개발캠프 참가자들 프로젝트 git repo 혹은 블로그 글과 아키텍쳐
회의 내용
아키텍처
proxy - NGiNX
목표 설정 다듬기
목표 설정 예제)
git 관련
1. 2.
인증서버 jwt - 추가적 저장공간 필요x stateless server 지향 https://jwt.io/ (사용언어마다 라이브러리 설치가능)
아키텍처 예제