Java 워크 프로세스

Java는 어떻게 배포되는가? 키워드 중심으로…

  • 아키텍트의 역할: 아키텍처의 비용, 일정, 품질 세 가지의 균형을 맞추는 것
  • 시스템 Life Cycle
    제안 > 구축(분석 → 설계 → 구축 → 테스트 → 전개) > 최적화
  • 스프링: 스프링으로 애플리케이션을 개발하려면 사전에 많은 작업을 해야 한다. 라이브러리 추가 및 의존성 관리 그리고 스프링 프레임워크가 처리할 작업을 알려주고 이를 위한 여러가지 구성 및 설정 파일을 작성하는 것은 모두 개발자가 해야 할 작업
    → 프로젝트에 따라 자주 사용되는 라이브러리들이 미리 조합되어 있음
    → 복잡한 설정을 자동으로 처리해줌
    → 내장 서버를 포함해서 톰캣과 같은 서버를 추가로 설치하지 않아도 바로 개발이 가능
    → 톰캣과 같은 웹 어플리케이션 서버에 배포하지 않고도 실행할 수 있는 JAR 파일로 웹 어플리케이션을 개발할 수 있다.
  • 어플리케이션을 쉽게 배포하고 동작시킬 수 있도록 관련 파일들을 패키징해주는 역할
    Jar 파일(Java Archive) [ 라이브러리 ] 자바 프로젝트 압축 파일
    WAR 파일(Web Application Archive) [ 배포 ] 웹 어플리케이션 압축 파일 포맷
  • 스프링 MVC 프레임워크
    스프링의 프로젝트는 하나의 모듈과 같기 때문에 애플리케이션에 필요한 것부터 시작해서 상황에 따라 하나씩 추가하면 됨
  • JDK
  • Eclipse [Integrated Development Environment]
    코딩, 디버그, 컴파일, 배포 등 프로그램 개발에 관련된 모든 작업을 하나의 프로그램안에서 처리하는 환경 제공
  • STS 플러그인: 호스트 응용 프로그램과 서로 응답하는 프로그램
    → 깃, 메이븐 등의 개발에 필요한 개발 도구 뿐만 아니라 톰캣을 따로 설치하지 않고도 바로 스프링 어플리케이션을 실행시킬 수 있도록 내장 톰캣을 포함하는 등 여러가지 기능이 내장되어 있다.
  • Tomcat
  • SVN
  • 빌드 관리
    Maven: 자바용 프로젝트 관리 도구 →라이브러리 관리 및 빌드
    Gradle
  • VM
  • CPU는 1코어, 메모리는 3GB: 비용을 고려하여 코어와 메모리 적당히 조절
    → 테스트용이기 때문에 CPU가 많이 필요하지 않으므로 1코어
    → 메모리는 다양한 프로그램을 설치해서 사용하기 때문에 3GB
  • CentOS: RedHat Enterprise Linux를 기반으로 오픈 소스. RHEL 과 100%호환되고 무료로 사용할 수 잇다.
  • 내장 WAS 서버: 성능이나 튜닝, 다른 서비스들과의 연관성 때문에 실제 서버에서는 내장 톰캣만으로 서비스를 하기 어렵다.
  • 기본 사용자가 jenkins로 되어 있습니다. 이 jenkins는 젠킨스를 관리하기 위한 사용자 이기에 SSH를 이용해서 다른 서버에 접속할 수 없습니다.
    젠킨스의 자동 빌드 및 배포를 위해서는 젠킨스의 사용자를 변경해서 SSH로 대상 서버에 접속할 수 있게 변경해야 합니다.
  • 젠킨스가 SSH를 이용해서 서버에 접근할 수 있도록 SSH 키를 등록

기존에는 Java application 내 properties 파일로 관리

application profiles의 설정 파일을 분리하고 프로파일 기능을 사용해서 환경에 적합한 설정 파일을 손쉽게 적용했습니다. 설정이 변경될 경우 프로젝트의 모든 개발자들이 변경된 설정을 적용해야 합니다. 설정 파일의 변경은 프로젝트 기간동안 계속해서 바뀔수 밖에 없다. → 설정파일이 어플리케이션 내에 포함되게 되면, 설정이 변경될 때마다 다시 빌드, 배포해야 한다.
코드와 설정을 분리하고 효율적으로 관리해야할 필요가 생김

스프링 Cloud Config → 설정정보만 가지는 서버와 이 설정 정보에서 애플리케이션에 필요한 설정 정보를 받아오는 클라이언트로 구성된다.
→ 클라이언트에서는 설정정보를 가지고 있지 않기 때문에 설정의 변경사항을 모든 개발자 및 서버에서 쉽게 반영할 수 잇다.

  1. 설정 파일을 깃 저장소에 저장
  2. 설정서버는 깃 저장소에 저장된 설정 파일을 확인 및 배포하는 역할을 함
  3. 각각의 어플리케이션들은 설정 서버로부터 자신들에게 필요한 설정정보를 가지고 옴

깃 관리자에 의해 깃 저장소의 설정 정보가 수정되었을 경우(Push Config) 설정 서버는 이를 감지하고, 수정된 설정 정보로 갱신합니다.

각 어플리케이션은 수정된 설정정보를 재시작 없이 설정서버로부터 받아와서 갱신합니다. 따라서 설정 정보는 중앙에서 관리할 수 있으며 설정이 변경되더라도 사용하는 서버의 숫자에 관계없이 즉각적으로 설정 정보를 변경할 수 있습니다.

[ 자바 어노테이션 ]

이 어노테이션으로 인해 데이터의 유효성 검사 등을 쉽게 알 수 있고, 이와 관련한 코드가 깔끔해지게 됩니다.
일단 어노테이션의 용도는 다양한 목적이 있지만 메타 데이터의 비중이 가장 크다 할 수 있습니다.

메타-테이터(Meta-Data) : 데이터를 위한 데이터를 의미하며, 풀어 이야기하면 한 데이터에 대한 설명을 의미하는 데이터. (자신의 정보를 담고 있는 데이터)

[ 함수 데코레이터 ]

함수를 받아 명령을 추가한 뒤 이를 다시 함수의 형태로 반환하는 함수이다.
함수의 내부를 수정하지 않고 기능에 변화를 주고 싶을 때 사용한다 .
일반적으로 함수의 전처리나 후처리에 대한 필요가 있을때 사용을 한다.
또한 데코레이터를 이용해, 반복을 줄이고 메소드나 함수의 책임을 확장한다

데코레이터 패턴(Decorator pattern)이란 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안이 될 수 있다.

[ properties 파일에서 yaml 파일로 수정 ]

  • 각 설정이 계층적으로 구성되어 좀 더 쉽게 알아볼 수 잇다.
  • 하나의 파일로 여러개의 설정을 구분할 수 있다.

[ Config server ]

  • Config server 의존성과 어노테이션, 저장소 설정만으로 끝남

[ Config Client ]

  • 의존성: gradle에 Cloud Config Client 의 역할을 하도록 추가해줌.
  • Config server를 참조하도록 properties 변경: Config Server의 주소

[ 배포 ]

  • 어플리케이션 설정된 경로에 높기
    (자바는 WAE 파일의 압축 풀기)

[ 젠킨스를 사용해서 자동 빌드 & 배포 환경 구성하기 ]

I will be a software architect.

I will be a software architect.