여러 언어를 이용해 프로그램을 개발할 수 있는 통합 개발 환경 툴이다. 무료로 사용 가능하고 버그가 많은 편이지만 널리 쓰이고 있다.
스프링 프레임워크를 사용한다면 여러가지 xml 설정파일이 필요하다. 복잡하고 외우기 어려워서 복사 붙여넣기 하거나 인터넷 검색을 통해 설정해야 했다면, 스프링 부트는 더 간단하게 설정해 쉽게 사용할 수 있다. pom.xml에 입력된 스프링 부트의 버전에 맞게 자동으로 호환되는 라이브러리 버전을 다운해준다. 톰캣이 내장되어있어 @SpringBootApplication 어노테이션이 선언된 클래스의 메인 메소드를 실행하기만 해도 서버가 실행된다.
메이븐은 자바용 프로젝트 도구로 프로젝트 전체적 라이프 사이클을 관리한다. 빌드 프레임워크이다. 빌드란 작성한 코드를 배포하기 위한 준비과정이다. 메이븐은 라이브러리를 공유하는 파일 서버(중앙저장소)로 자동 라이브러리 관리를 해준다. 필요한 라이브러리를 pom.xml에 정의해 놓으면 내가 사용할 라이브러리에 더해 해당 라이브러리가 작동하는데 필요한 다른 라이브러리까지 자동으로 다운받는다.
그래들은 메이븐과 같은 빌드 프레임워크이다. 설정을 xml을 이용하지 않고, groovy라는 언어를 이용한 코딩을 통해 간결히 할 수 있다는 장점이 있다. 빌드 라이프사이클은 3단계로 초기화 - 구성 - 실행 순이다. settings.gradle 과 build.gradle 두가지 설정 파일을 사용한다.
슬랙은 채널 기반의 메시징 툴이다. 채널에 초대되거나 참여해 해당 채널의 예전 기록들까지 열람할 수 있다. 메시지, 파일 등의 정보가 모두 기록되고 대화내역 검색을 통해 정보를 확인할 수 있다.
깃랩은 깃 저장소에 대한 원격 액세스를 제공하는 서비스이다. 다른 사람 간의 코드 공유 등의 기능도 제공한다. 깃허브와의 차이점은, 깃허브는 무료계정의 경우 모든 코드를 공개하는 것이 필수적이다. 깃랩은 무료계정 사용자 코드에 대해 비공개/공개 여부를 선택할 수 있다. 푸쉬/풀이 깃허브만큼 빠르지 않다는 단점이 있다. 저장소당 10기가의 공간 제한이 있다.
서비스형/설치형 : 우리는 설치형. 깃/이슈관리 기능. 머지 리퀘스트 - 커밋코멘트에 #이슈넘버 적으면 깃의 해당 코드와 연결됨!
젠킨스는 CI(continuous integration), 지속적 통합 서비스 툴이다. 여러 개발자가 협업할 때 버전 충돌을 방지하기 위해 소스의 커밋을 감지하면 자동적으로 빌드가 작동되도록 설정할 수 있다. 메이븐과 그래들을 이용한다면 젠킨스와 연동해 효율을 높일 수 있다. 가장 큰 이점 중 하나는 자동화테스트이다. 원할 때 빌드하고 자동화 테스트를 거쳐 빌드가 작동된다. 자동화 테스트란, 응용 프로그램 실행 예상 결과와 실제 테스트 결과를 자동으로 비교하는 것이다. 프로그램이 예상대로 수행하는지 여부를 확인할 수 있다.
CI: 빌드 / CD: 배포 / 소스코드를 깃에서 가져와 동일한 환경에서 컴파일, 빌드한다. 커밋메시지까지 가져와 히스토리 누적.
코드 커버리지는 소프트웨어 테스트가 얼마나 충분한지를 나타내는 지표중 하나다. 조건이 많은 경우 한 가지만 테스트 할 때보다 각 케이스별로 테스트 코드를 작성해 실행할 때 코드 커버리지 수치가 높다. 현실적으로 100%는 불가능하며 80%정도를 목표치로 잡는 것이 업계의 대부분의 시각이다. 최소 60% 이상의 커버리지를 목표로 한다. Junit은 자바용 단위테스트 도구이다.
정적 코드 분석이란, 프로그램을 실행하지 않고 코드분석을 하는 것이다. 대부분의 정적분석 도구는 개발자의 통합개발환경에 포함되어있어서 개발환경 내에서 솔루션을 제공한다. 정적분석은 실행 시점 이전에 수행한다. 개발 초기부터 사용할 수 있다. 주요 기법으로 소스코드 검증(검증 가이드라인 이용), 코드 리뷰(동료 검토. 제3자 개발자가 정해진 방법을 통해 검토) 등이 있다.
젠킨스, 코드커버리지, 정적코드분석 : 빌드 단계
MySQL은 관계형 데이터베이스 관리 시스템(RDBMS)이다. 오픈소스이며 무료로 사용할 수 있다. C언어, 자바, PHP 등 다양한 언어와 연동된다.
다양한 운영체제에서 사용할 수 있고, 큰 데이터도 빠르고 효과적으로 처리할 수 있다. 오라클이 소유하고 있다.
깃은 분산형 버전관리 시스템의 한 종류이다. 여러 개발자의 컴퓨터에 코드를 분산 저장해 중앙저장소에 에러가 발생하더라도 로컬 저장소에 커밋할 수 있고, 버전을 릴리즈 해놓으면 이를 이용해 중앙저장소를 복원할 수 있다. 브랜치를 통해 개발한 뒤 본 프로그램에 merge해 여러 인원이 동시에 개발할 수 있다. 깃은 버전관리 시스템, 깃허브는 웹에서 프로젝트 버전관리를 할 수 있게 하는 서비스이다.
레디스는 NoSQL DBMS(비 관계형 데이터베이스. 데이터간 관계를 정의하지 않고 테이블은 독립적 테이블. 조인 불가능하다. 확장성이 좋다.)로 분류되기도 하고, 인메모리 솔루션으로 분류되기도 한다. 메모리에 상주하는 캐시 솔루션이다. 인스타그램, 라인 등 소셜 서비스에서 사용한다. 키-밸류 구조를 가지고 있다. 레디스는 인메모리 데이터 저장소이기 때문에 서버에 장애가 생기면 데이터를 잃을 수 있다.
래빗 엠큐는 메시지 브로커 역할을 하는 소프트웨어다. 송신자와 수신자 사이에 브로커 역할을 하는데, exchange로 메시지를 전달, binding규칙에 의해 queue로 메시지가 복사된다. 수신자는 브로커의 queue를 통해 메시지를 받는다. exchange는 송신자에게 받은 메시지들을 어떤 queue로 보낼지 결정(경로 배정. 라우팅)하는 객체이고, queue는 메시지가 수신자에게 소비되기 전까지 보관되는 장소다. queue는 이름으로 구분된다. binding규칙은 특정 조건에 맞는 메시지를 특정 큐에 전송하도록 설정할 수 있는 규칙을 지정하는 행위이다.
micro services architecture. msa는 monolithic architecture의 한계를 보완한 프레임워크이다. 모놀리식 아키텍쳐는 특정한 물리적 서버에 서비스를 올렸다. 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어있다. 모듈별로 개발한 결과물을 하나의 결과물로 패키징해 배포하는 형태다. 성능에 문제가 생겼을 시 서비스 전체의 장애로 확대될 수 있다. 반면 마이크로 서비스 아키텍쳐는 클라우드 환경을 이용해 서버를 구성한다. 각 서비스는 따로 모듈화가 되어있어 각각 개별 서비스 개발을 빠르게 할 수 있다. 유지보수도 수월하다. 디비 또한 서비스별 별도의 디비를 사용하기 때문에 데이터가 분산되어있다. 따라서 독립적으로 개발/배포/운영할 수 있다. 하지만 각 개발 환경과 실제 운영 환경을 동일하게 가져가는게 쉽지 않아 통합테스트가 어렵다는 단점이 있다. 각 서비스가 다른 서버에 분리/배포되어있기 때문에 url이 각기 다르다. 이 때 api(application programming interface)를 이용해 각 모듈을 연결한다.
netflix open source software. 넷플릭스가 2007년에 데이터베이스의 심각한 손상으로 3일간 서비스 장애를 겪으면서 클라우드 환경으로 7년에 걸쳐 이전했다. 이 과정에서 넷플릭스가 경험한 노하우와 문제해결 방법을 공유하기 위해 MSA 전환 기술을 오픈소스로 공개한 것이다. 넷플릭스는 핵심 자바 프레임워크로 스브링 부트를 택해 전환했다.
eureka/ribbon/zuul/hystrix - 스프링 클라우드. 스프링 부트를 기반으로 msa 구축에 특화된 라이브러리들의 집합이다.
이론인 MSA를 실현, 구현한 게 넷플릭스OSS다. 넷플릭스가 라이브러리 만들어 배포.
아마존 웹 서비스. 아마존 닷컴에서 개발한 클라우드 컴퓨팅 플랫폼이다. IaaS(Infrastructure as a Service)로 가상 서버(컴퓨팅)나 스토리지, 가상 네트워크, 관리/보완(사용자인증, 권한부여 등) 등의 리소스를 서비스 형태로 제공한다. 사용자는 물리적 하드웨어를 관리할 필요가 없고 서비스 이용을 통해 컴퓨터 리소스를 사용할 수 있다.
도커는 리눅스 기반의 리눅스 컨테이너를 만들고 사용할 수 있도록 하는 컨테이너화 기술이다. 리눅스 컨테이너란 운영체제 수준의 가상화 기술로, 프로세스를 격리된 환경에서 실행하는 기술이다. 하드웨어를 가상화 하는 가상머신과 달리 커널을 공유하는 방식이기 때문에 실행속도가 빠르다. 커널이란 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스이다. 커널의 기능은 메모리 관리, 프로세스 관리, 장치 드라이버, 시스템 호출 및 보안이다. 즉 쉽게 말하면 경영진(하드웨어)을 위해 일하는 비서. 비서의 일은 직원/대중(사용자)으로부터 수신되는 메시지/요청(프로세스)를 경영진에게 전달하고, 어디에 무엇이 저장되어 있는지 기억(메모리)하고, 언제 누가 얼마동안 경영진을 만날지 결정하는 역할.
ELK는 Elasticsearch, Logstash, Kibana 오픈소스 프로젝트 세 개의 줄임말로 접근성과 용이성이 좋은 로그/데이터 분석 도구이다. 각 제품이 연동되어 데이터 수집/분석 툴로 동작한다.
cf)로그파일 - 사용자가 어디에 언제 접근했는지 기록되는 프로그램의 메모장. 개발자가 필요한 곳에 로그를 기록하도록 코드를 짜야함.
모놀리식은 1개의 로그파일만 존재해 시간순 확인이 가능하지만 MSA식은 기능별 로그파일이 따로 존재해 시간순으로 확인하기 어렵다.
이 기능별 로그파일을 모아서 순서 정렬해 보여주는 툴이 ELK이다.
cf) RESTful API - RESTful API로 간주되려면 요청이 HTTP로 관리되는 클라이언트-서버 아키텍쳐여야 한다. 요청 간에 클라이언트 정보가 저장되지 않아야 한다. 수신한 표현을 통해 클라이언트가 리소스를 조작할 수 있어야 한다. 즉 충분한 정보가 표현에 포함되어있어야 한다. 요청된 정보를 검색하는데 관련된 서버의 각 유형을 클라이언트가 볼 수 없는 계층구조로 체계화 해야 한다. 사용자를 위한 인터페이스
cf) API - Application Programming Interface