★ 자바웹프로그래밍 3일차 중요 포인트
1. 분산관리시스템의 장점
2. Gradle 사용법
3. 개별 Class 사용법
분산관리시스템의 장점:
중앙 집중식 관리 시스템보다 여러 가지 장점이 있다.
분산 관리 시스템은 파일의 스냅샷을 전부 복제하여 저장하므로 서버에 문제가 생기더라도
모든 변경 내역을 보존할 수 있다.
Gradle 사용법:
Gradle은 빌드 자동화 도구로, 프로젝트 빌드 및 관리에 사용.
Gradle을 사용하려면 프로젝트 폴더에서 gradle init 명령을 실행하여 초기화하고,
build.gradle 파일에 빌드 스크립트를 작성하고 gradle build 명령으로 프로젝트를 빌드할 수 있다.
개별 Class 사용법: 자바에서 개별 클래스를 사용하려면 해당 클래스가 정의된 소스 파일을 컴파일하여
클래스 파일(.class)을 생성해야한다. 컴파일은 javac 명령을 사용하여 수행.
컴파일된 클래스 파일은 java 명령으로 실행할 수 있다.
* 소프트웨어 형상 관리 시스템 (SCM : Software Configuration Managment)
→ 버전 관리 시스템 (+ 변경사항을 추척하고 통제함)
① 로컬 버전 관리 시스템 (RCS)
- 간단한 데이터베이스를 이용하여 파일에서 변경되는 부분(patch set)을 관리한다.
② 중앙 집중식 버전 관리 (CVS, Subversion) (SUN)
- 파일의 마지막 스냅샷을 받는다(checkout).
- 스냅샷(snapshot)? 특정 시점의 파일 버전을 기록한 것.
- 로컬은 한 개의 스냅샵만 유지한다.
- 만약 서버에 문제가 생기면 모든 변경 내력(history)을 잃는다.
- 로컬에 있는 스냅샵 중에서 최신 버전으로 복구한다.
- 예) CVS, Subversion(SVN), Perforce 등
- CVS: commit 할 때 파일 전체를 보관한다.
- Subversion: commit 할 때 파일에서 변경한 부분만 보관한다.
* 분산 버전 관리
③ 분산 버전 관리
- 저장소 전부를 복제한다.
- 변경 내력(history)까지 모두 복제한다.
- 예) Git, Mercurial, Bazaar, Darcs 등
JAVA APP 개발 준비
* git 사용법 - snapshot 대상에 등록된 파일을 로컬 저장소에 백업한다. (백업 대상 파일 명단 작성)
$git add : 백업대상 파일 추가/변경/삭제된 파일
$git add docs/프로그래밍개론. pdf
$git add . : 현재폴더 및 하위폴더의 추가/변경/삭제된 모든 파일
$git commit (vi 편집기가 열리며 여기에 내용을 작성한다)
$git commit -m "백업 이유" (local 저장소에 저장됨)
* git 사용법 - 로컬 저장소를 서버 저장소와 일치시킨다.
$git push : 현재 브랜치의 커밋들을 서버로 보내고, 서버 저장소와 로컬 저장소를 일치시킴
$git pull : 현재 브랜치의 최신 커밋들을 서버로부터 가져와 로컬 저장소를 업데이트
* git Directory
강의자료 공유받는 폴더
https://github.com/eomjinyoung/bitcamp-study bitcamp-teacher
개인 작업 폴더 (github에 push 되어 있음)
https://github.com/eomjinyoung/bitcamp-study bitcamp-study
* 자바 컴파일러 사용법
bitcamp-study/Hello.java
① 단순 컴파일
$javac 소스파일명
$java Hello.java 소스파일 같은 폴더에
↓
Hello.class
② -d 옵션
$javac -d : 베포디렉토리 소스파일명
$javac -d bin Hello.java
③ 소스파일과 클래스 파일 분리
bitcamp-study/
ㄴsrc/Hello.java
ㄴbin/Hello.class
* 프로젝트 폴더
① 1 저장소 : 1 프로젝트
bitcamp-study/ ← 저장소 겸 프로젝트 폴더
ㄴsrc/
ㄴbin/
↑
실무에서 사용하는 방식
프로젝트 변경관리 = 저장소의 파일에 대해 변경관리
② 1 저장소 : 다중 프로젝트
bitcamp-study/ ← 저장소 폴더
ㄴjava-basic ← 프로젝트 폴더
ㄴsrc/ ← 소스 폴더
ㄴbin/ ← 컴파일된 파일을 두는 폴더
* 실무 JAVA 프로젝트 폴더 구조
bitcamp-study/ ← 저장소 겸 프로젝트 폴더
ㄴsrc/
ㄴmain/
ㄴjava/ ← java 자바 소스 파일
ㄴresources/ ← .xml, .yml, .preperences 등 App 설정 파일
ㄴtest/
ㄴjava/ ← .java 단위 테스트 소스 파일
ㄴresources/ ← .xml, .yml, .preperences 등 단위 테스트 설정 파일
ㄴpom.xml
* Build 도구
컴파일
소스파일 → 바이트코드 → 단위테스트 → 테스트보고서
설정파일
데이터 파일
복사
자원파일 이미지 파일 → → 배포파일(.jar)
영상 파일
=================→======Build============================→ ↑IDE 도와주는 도구 : Ant →Maven→Gradle(통합개발환경)EclipseInteliJ
* Build 도구 구동
프로젝트 폴더/
ㄴ소스/ →
빌드도구 → 산출물
ㄴ빌드스크립트파일/ →
* 주요 Build 도구
의존라이브러리 관리 groovy 프로그래밍 언어 도입
Ant → Maven → Gradle
↓ ↓ ↓
빌드스크립트파일 : build.xml pom.xml Maven 호환
↓
의존라이브러리를 다운로드 받을 Maven 중앙 서버 사용
* xml은 프로그래밍 언어가 아니기때문에 빌드 과정을 정교하게 기술할 수 없다. (통제할 수 없다)
* Gradle 사용법
$gradle init
프로젝트 폴더/
ㄴ.gradle/ ← Gradle을 실행하는 동안 사용하는 임시 폴더. 실행할 때마다 재생성
ㄴ gradle/ ← Gradle을 다운로드 받고 실행할 수 있도록 해주고 설정파일과, shell script가 들어있다.
ㄴ app/ ← main project
ㄴ src/ ← 소스 및 설정 파일
ㄴ build.gradle/ ← 빌드 스크립트 파일. 해당 프로젝트만 제어.
ㄴ settings.gradle/ ← 빌드 스크립트 파일. 전체 프로젝트들을 제어하는 역할
ㄴ gradlew (unix용)
ㄴ gradlew.bat (winodws용)
ㄴ .gitignore → git 실행과 관련된 설정파일
ㄴ .gitattributes → git 실행과 관련된 설정파일
* 프로젝트 빌드
② 프로젝트 빌드
$gradle build = compile → test → packing
프로젝트 폴더/
ㄴsettings.gradle ① 실행
ㄴapp/
ㄴsre/ ← java 자바 소스 파일 ③ compile -> test
ㄴbuild.gradle/ ← ② 실행
ㄴbuild/
ㄴclasses/ ←
ㄴdistributions/ ←
ㄴgenerated
ㄴlibs
ㄴreports
ㄴscripts
ㄴtest-results
ㄴtmp
* 프로젝트 실행
③ 프로젝트 실행
$gradle run
$gradle -q run (--quiet) error 발생 시에만 로그 출력
build.gradle
id 'application' ← run task를 실행할 수 있다.
application { ←application plugin settings
mainclass = "bitcamp.App" ← run task 에서 실행 할 클래스를 지정
}
* 개별 클래스 실행
④ 개별 클래스 실행
프로젝트 폴더 $java -classpath build/classes/java/main bitcamp.App
클래스가 소속된 폴더는 패키지이다.
* 자바소스 파일과 클래스 블록, .class 파일
Test1.java
class A {}
Test2.java
class B {}
class C {}
* 클래스 블록 단위로 컴파일 수행 → .class 파일 생성
* public 클래스 : 클래스 공개 범위
Test3.java
class D {} ← default 접근 범위 = 같은 패키지에 소속된 경우만 접근 가능
public class E {} ← public 접근 범위 어느 패키지에 소속되어도 상관없이 접근 가능
* 생성되는 class 없음
오류
public class 가 있는 소스파일은 클래스 이름과 같아야 한다.
↓
Test4.java
public class Test4 {}
class F {}
class G {}
* 출력결과 오류가 없다면 모든 클래스가 컴파일되는 것을 확인할 수 있다.
* 소스파일과 클래스 블록
1 소스 : 1 클래스 블록
Test5.java
class Test5 {}
→ 유지보수를 쉽게하기 위함. (클래스가 있는 소스파일을 빠르게 찾을 수 있다.)
↓
소스파일명을 클래스 블록 이름으로 한다.
Test6.java
class Test6{}
* main() 메서드
JVM이 클래스를 실행할 때 제일 처음 실행하는 코드 블록 (함수→메서드) → 진입점(centry point)
main()이 없는 클래스는 실행할 수 없다.
https://dev-with-gpt.tistory.com/71
* Git clone 명령어
"git clone"은 Git 버전 관리 시스템에서 원격 저장소의 프로젝트를 로컬 환경으로 복제하는 명령어
Git을 사용하여 프로젝트를 공유하고 협업하기 위해 중앙 원격 저장소에 프로젝트를 올려놓고,
다른 개발자들이 해당 프로젝트를 로컬 환경으로 가져와 작업할 수 있도록 함.
[예시]
이전 기수들이 작업했던 내용이 담긴 강사님의 repo를 git clone 을 통해서 가져와보았다.
[결과]
vscode에서 가져와보니 성공적으로 코드를 확인할 수 있었다.
앞으로 열심히 예습해야겠다 ! 야호 ~
* Gradle 설치 및 실행
1.gradle 설치
2. 스크롤을 내리다 Installing manually 에서 Binary-only 클릭
3. 시스템 환경변수 편집을 통해 설치한 gradle 경로를 지정해준다.
혹시 위의 내용이 어렵다면 아래 링크를 참고
https://dev-with-gpt.tistory.com/68
4. 설치한 grandl을 init 하고 build 하는 과정
(* 반드시 아래 절차대로 진행할 것. 입력이 없다면 엔터를 눌러 디폴트로 진행한 것)
5. build가 완료되면 해당 폴더에 app 폴더가 형성되며 1번 경로에 있는 폴더를 2번 경로로 이동
↓ 아래 경로로 이동하고 압축해제
6. 2번 경로로 이동하여 ./app.bat 명령어를 통해 실행
7. gradle run 명령어를 통해 4번 init 단계 완료 후 5번으로 가지않고 바로 gradle run을 해도 실행된다.
자바 패키지와 디렉토리를 이해하고 컴파일 실행해보기
해당 코드를 실행하기위해서는 javac 중간언어 컴파일과 java 컴파일 과정이 필요하다.
위의 디렉토리 경로를 참고해보자.
javac은 bin/main src/main/java 에 bitcamp 패키지 안에 있는 Test1.java 를 컴파일하고
java는 위에서 생성된 bin/main 폴더 안에 bitcamp 패키지 안에 있는 Test1.class 를 컴파일하는 것이다.
* 프로그래밍 언어의 변천사 (프로그래밍 개론)
①절차적 프로그래밍 → ②함수 프로그래밍 → ③ 객체지향 프로그래밍 → ④ 패키지
goto f1(c) { Class A package
→ → f1(c) {
f2(c) { f2(c) { ↓
→ module
f3(c) { Class B
→ → f3(c) {
f4(c) { f4(c) {
명령문을 기능 단위 묶는다.
Why ? 코드 관리를 쉽게 하기 위해서.
① 객체지향 프로그램이 등장한 배경 ?
C 에서 C ++ 이 생겨난 이유.
객체지향 프로그래밍을 도입하여 코드 관리를 편하게하고
개발자들이 기존에 작성된 코드 수정을 용이하게 하기 위해서.
가독성과 유지보성을 향상시키는 중요한 원칙이다.
② JAVA는 메모리 관리를 개발자에게 맡기는 것이 아니다.
Java는 Java 가상머신(JVM)에 의해 자동으로 수행되는 프로세스, 가비지 컬렉션(Garbage Collection)이라는 메모리 관리 기법을 사용하여 더욱 편리한 메모리 관리를 제공한다. 이를 통해 개발자가 명시적으로 메모리를 할당하고 해제하는 번거로움을 덜어준다. 더 이상 참조되지 않는 객체들을 자동으로 탐지하고 해제하여 메모리를 회수한다.
즉, 개발자는 명시적으로 메모리 할당과 해제에 대한 관리를 신경쓰지 않아도 된다.
JAVA 언어를 C++ 언어 대신에 사용하게된 주된 이유.
GPT Answer :
Java가 C++ 대신 주로 선택되는 이유에는 다음과 같은 요인들이 있습니다:
플랫폼 독립성: Java는 플랫폼 독립적인 언어로, 한 번 작성한 코드를 다양한 운영체제에서 실행할 수 있습니다. 이는 Java의 가상머신(JVM)을 통해 구현되며, JVM은 특정 운영체제에 종속되지 않고 Java 코드를 실행할 수 있도록 지원합니다.
메모리 관리의 편의성: Java는 가비지 컬렉션(Garbage Collection)을 통해 메모리 관리를 자동화하므로, 개발자가 명시적으로 메모리 할당과 해제에 대해 걱정할 필요가 없습니다. 이는 개발자의 작업 부담을 줄여주고 메모리 관리로 인한 오류를 방지할 수 있습니다.
객체지향 프로그래밍의 강점: Java는 객체지향 프로그래밍(OOP)을 강력하게 지원합니다. 클래스, 상속, 다형성 등의 개념을 활용하여 모듈화된 코드를 작성하고 재사용할 수 있습니다. 이는 코드의 구조화와 유지보수를 용이하게 하며, 대규모 프로젝트의 개발과 확장성을 향상시킵니다.
강력한 라이브러리와 생태계: Java는 다양한 표준 라이브러리와 프레임워크를 제공하며, 이를 활용하여 개발 속도를 높일 수 있습니다. 또한, Java 개발자 커뮤니티와 생태계가 넓어서 문제 해결 방법을 공유하고 다양한 도구와 지원을 받을 수 있습니다.
보안성: Java는 내장된 보안 기능을 가지고 있어서 안정성과 보안성이 요구되는 애플리케이션 개발에 적합합니다. 자바 바이트코드를 실행하는 JVM은 보안 관련 기능을 강화하여 악성 코드의 실행을 방지하고, 사용자의 시스템을 보호합니다.