- Application Architecture 소개
- 애플리케이션 아키텍처의 시대 별 변화 과정

- 각 아키텍처의 특징과 단점, 그리고 해결책
- 실습 프로젝트 : mini-pms(프로젝트 관리 시스템)
- 1-a 단계: 자바 프로젝트 폴더 준비
-
gradle 빌드 도구를 사용한다.
-
Maven 빌드 도구의 표준 디렉토리 구조로 프로젝트 폴더를 구성한다.
1-프로젝트 폴더를 생성한다.
mkdir bitcamp-project//해당 폴더에 들어가서 생성
cd bitcamp-project//해당 폴더에 들어간다.
2.gradle을 사용하여 자바 애플리케이션 프로젝트에 필요한 설정 파일과 폴더를 준비한다.
$ gradle init--------gradle에 대한 명령을 내린다.
Starting a Gradle Daemon (subsequent builds will be faster)
Select type of project to generate:
1: basic
2: application <== 프로젝트 유형을 '일반 애플리케이션 개발'로 선정한다.
3: library
4: Gradle plugin
Enter selection (default: basic) [1..4] 2
Select implementation language:
1: C++
2: Groovy
3: Java <== 프로그래밍에 사용할 언어를 '자바'로 선정한다.
4: Kotlin
5: Swift
Enter selection (default: Java) [1..5] 3
Select build script DSL:
1: Groovy <== 빌드 스크립트 파일을 작성할 때 사용할 언어를 'Groovy'로 선정한다.
2: Kotlin
Enter selection (default: Groovy) [1..2] 1
Select test framework:
1: JUnit 4 <== 단위 테스트로 사용할 프레임워크를 'JUnit'으로 선정한다.
2: TestNG
3: Spock
4: JUnit Jupiter
Enter selection (default: JUnit 4) [1..4] 1
Project name (default: java-project): <== 그냥 엔터치면 현재 디렉토리명을 프로젝트 이름으로 사용한다.
Source package (default: eomcs.java.project): com.eomcs.pms <== 기본 자바 패키지를 설정한다.
3.프로젝트의 디렉토리 구조 확인한다.
tree명령어를 이용하여 확인하는데 맥의 경우엔
brew install tree
로 tree 명령어를 설치하고 tree를 입력하여 디렉토리를 한눈에 보이도록 출력한다.
tree -a//숨겨진 파일과 폴더를 tree형태로 출력
$ gradle run
Starting a Gradle Daemon (subsequent builds will be faster)
> Task :run
Hello world. <== 실행 결과
BUILD SUCCESSFUL in 16s
3 actionable tasks: 3 executed
$ gradle run- app/src/main/java 폴더에 있는 모든 자바 소스 파일을 컴파일 한다.
- settings.gradle 파일에 등록된 정보에 따라 자바 메인 클래스를 찾아 java.exe를 사용하여 실행한다.
- 프로젝트 빌드한다
Gradle을 사용하여 일반 사용자에게 배포할 파일을 만든다.
[~/mini-pms]$ gradle build
build 절차
- 소스 파일을 컴파일한다.
- 단위 테스트를 수행한다.
- .jar 아카이브 파일을 만든다.
- 실행과 관련된 파일을 생성한다.
- .tar, .zip 배포 파일을 생성한다.
프로젝트 빌드를 통해 생성된 파일과 폴더는 build 디렉토리 아래에 놓인다.
```java
배포 파일을 받은 일반 사용자는 보통 다음의 절차에 따라 애플리케이션을 실행한다.
적당한 폴더에 배포 파일(.tar 또는 .zip)의 압축을 푼다.
배포 파일을 `Downloads` 폴더에 다운로드 받았다고 가정하자.
```console
[~/Downloads]$ tar -xvf mini-pms.tar <== 압축 파일을 푼다.
[~/Downloads]$ tree <== 압축판 폴더의 구조를 확인한다. tree 가 없으면 따로 설치해야 한다.
배포 파일에 들어 있는 스크립트 파일을 실행한다.
Windows OS:
```console
[~/Downloads]$ ./mini-pms/bin/mini-pms.bat
Hello world.
macOS/Linux/Unix OS:
[~/Downloads]$ ./mini-pms/bin/mini-pms
Hello world.
####
```java
plugins {
id 'java'
id 'application'
id 'eclipse' <== 이 코드를 추가한다.
}
2.이클립스 IDE용 설정 파일 생성한다.(터미널)
gradle eclipse
3.이클립스 IDE로 프로젝트를 import한다.

- build.gradle 파일을 편집한다.
eclipse그래이들 플러그인 추가$ gradle eclipse명령을 실행하여 이클립스 IDE 관련 설정 파일을 준비한다.- 이클립스에서 프로젝트를 임포트 한다.
- 1-c 단계: 프로젝트에 버전 관리 시스템 Git을 적용하기
1.프로젝트 폴터를 깃 저장소로 만든다.(터미널)
git init
2.버전 관리 대상에서 제외할 항목을 지정한다.
.gitignore파일로 제외할 항목들을 기재한다.
- **gitignore.io** 사이트에 접속한다.
- 제외 대상 목록을 생성한다.
- java,linux,macos,gradle,windows,eclipse,java-web,visualstudiocode,node 으로 검색.
- `.gitignore` 파일 변경
- `~/bitcamp-project/.gitignore` 파일에 위에서 준비한 대상 목록을 복사한다.
주의!
.gitignore 작성시 주의사항이다.
빨간원의 내용들이 활성화 및 추가되있는지 확인한다.


——————–추가예정——————–
- 학습 목표 달성 확인 목록
- [] 시스템 소프트웨어와 애플리케이션 소프트웨어를 설명할 수 있는가?
시스템 소프트웨어:응용 소프트웨어를 실행하기 위한 플랫폼을 제공하고
컴퓨터 하드웨어를 동작/접근할 수 있도록 설계된 컴퓨터 소프트웨어이다.
애플리케이션 소프트웨어:운영체제에서 실행되는 모든 소프트웨어를 뜻한다.
- [] 애플리케이션 아키텍처의 종류와 특징을 설명할 수 있는가?(참조)
주어진 상황의 소프트웨어 구조에서 발생하는 문제점을 해결하기 위한 일반화된 재사용 가능한 솔루션이다.
- [] gradle 빌드 도구를 사용하여 자바 애플리케이션 프로젝트를 구성할 수 있는가?
상단 참조
- [] gradle을 사용하여 애플리케이션을 실행(run)하고 빌드(build) 할 수 있는가?(터미널)
gradle run//해당 디렉토리에 들어가서 실행
- [] gradle을 사용하여 Eclipse IDE 프로젝트로 전환할 수 있는가?(터미널)
gradle build//해당 디렉토리에 들어가서 build
- [] 형상 관리 시스템이 무엇인지 알고 있는가?
줄여서 SCM(Software Configure Management)으로 불리며 소프트웨어 소스 코드 뿐 아니라 개발 환경,빌드 구조 등
전반적인 환경,내역에 대한 관리 체계를 정의한다.
- [] CSV, Subversion, Git 버전 관리 시스템의 차이점 이해하고 있는가?

CSV
CSV특징:파일을 통째로 업로드한다.
1.프로젝트를 가져온다->2.프로젝트를 편집->3.해당 파일만 업로드->4.저장소에 있던 해당파일은 백업을 하고
편집된 해당파일은 변경되서 저장된다

SVN
SVN특징:변경 내용만 업로드한다.
1.서버에서 가져온다->2.프로젝트를 편집한다->3.편집된 부분만 업로드한다->4.이전 파일은 백업한다->5.변경된 파일을 저장한다

Git
Git특징:여러명의 사용자들 간에 해당 파일들의 작업을 조율하기위한 분산 버전 관리 시스템이며 소스코드 관리에 주로 사용되지만
어떠한 집합의 파일을 변경사항을 지속적으로 추적하기 위해 사용 될 수 있다.
1.서버에서 clone->2.프로젝트 편집->3.로컬에 변경된 파일들을 push전에 백업한다->4.서버에 push
반대로
저장소에 레포지토리 생성->로컬로 clone 할 수 있다.
다른 사용자가 clone을 이용하여 파일들을 업로드 할 수 있다.
- [] 프로젝트를 git 저장소로 설정할 수 있는가?(터미널)
git init//해당 디렉토리에서 실행
그러면 숨겨진 디렉토리로 .git이라는 폴더가 생기는데
여기는 저장소로 commit으로 명령하여 해당 디렉토리의 모든 변경 내용을 저장하는 곳으로 절대 삭제하면 안된다.
지우게 되면 더 이상 깃으로 폴더의 변경사항을 추적할 수 없다.
| 설명 | 코드 |
| git init | git으로 초기화 |
| git add . | 변경된 파일을 목록화 |
| git commit -m “기록할 메시지” | 백업 명단을 로컬 저장소에 백업 |
| git push | 로컬 저장소의 변경된 내용을 서버 저장소에 업로드 |
| git clone 원격 저장소 주소 | 해당 주소의 파일들을 다운로드 |
| git pull | 해당 디렉토리의 서버 저장소에서 파일들을 다운로드 |