jnk1m
Foliage IT
jnk1m
전체 방문자
오늘
어제
  • 분류 전체보기 (209)
    • Today I Learned (34)
    • Java (47)
    • Database (15)
    • [NHN Academy] (27)
    • Spring (47)
    • HTML + CSS + JavaScript (11)
    • JSP (3)
    • Node.js (10)
    • React Native (2)
    • 기타 (8)
    • 스크랩 (5)

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
글쓰기 / 관리자
jnk1m
[NHN Academy]

[개발환경] 2일차 Gradle

[개발환경] 2일차 Gradle
[NHN Academy]

[개발환경] 2일차 Gradle

2022. 10. 5. 12:17

Gradle


안드로이드를 위해 만들어진 빌드 툴

 

장점: 스크립트 언어기 때문에 좀 더 유연하게 개발을 할 수 있다. 멀티 프로젝트 지원.

 

단점:  빌드 스크립트 언어와 DSL에 대한 학습 필요. 

 

gradle의 스크립트

  • 초기화 스크립트: init.gradle
  • 설정 스크립트: settings.gradle
  • 빌드 스크립트: build.gradle

 

build.gradle: 라이브러리에 내 프로젝트가 의존한다면 의존성 설정도 여기에 넣음 

필요한 의존성을 끼워넣으면 된다. 라이브러리, 프레임워크

 

라이브러리와 프레임워크의 차이?! 

둘 다 누군가가 만들어 놓은 걸 쓰는 건 동일하지만..

 

라이브러리는 

나의 코드와 상대방의 코드를 호출해야 하는 경우

내가 주도권을 가지고 상대방의 코드를 호출하는 경우

log라는 라이브러리에 로그를 남기기 위해 내가 의지를 가지고 log를 쓰겠다고 명시를 한다. 

 

프레임워크는 프레임워크는 지정한 방식으로 내 코드르 맞춰서 끼워넣어줘야 한다.

이미 만들어진 거대한 애플리케이션에 내가 원하는 기능을 만들기 위해 프레임 워크가 지정한 방식대로 내 코드를 맞춰 넣어야 한다. 

 

라이브러리는 내가 주도권을 가지고 있고 프레임워크는 프레임워크가 주도권을 가지고 있다.

 

 

 

gradle wrapper 

gradle이 여러 버전이 있어서 다른 버전을 사용하는 컴퓨터에서는 정상적으로 동작하지 않을 수 있다. 

프로젝트에서 요구하는 특정 gradle 버전을 유지하기 위해서, 또는 gradle이 설치되어 있지 않은 상황에서 gradle을 편리하게 이용하기 위해 사용한다. 

 

윈도우 환경을 위해 자동으로 gradlew / gradlew.bat이 생성됨

 

 

groovy

JVM에서 동작하는 스크립트 언어

 

import문 

자바에 있는 패키지를 기본적으로 임포트 해줌...

그래서 자바 쓰듯이 사용하면 된다 

  • java.io*
  • java.lang.*
  • java.net*
  • java.util.*
  • goovy.lang.*
  • groovy.util.*
  • java.math.BigDecimal
  • java.math.BigInteger

문자열:

''

"" : 이거 사용하면 내부에 $기호로 동적인 내용을 넣을 수 있음

 

''' '''

 

메서드 호출 시 괄호 생략 가능

다만 println() 안에 인자가 없는 경우에는 생략이 불가능

 

 

def

타입 지정 생략 가능. 자바에서 Object 타입 선언과 같다. 

 

 

 

도메인

애플리케이션에서 가장 중요한 로직을 가진 부분을 도메인이라고 한다. 

 

도메인 객체

 

빌드라는 영역의 문제점을 쉽게 해결해줄수 있는 객체들 (Project 라는 클래스가 있음)

빌드 과정에서 해결해야하는 것들이 그레이들 프로젝트의 도메인.

자바 파일이 어디에 있고 자바 파일을 컴파일한 클래스는 어느 디렉토리에 있어야 하고.. 이런 정보를 프로젝트라는 객체가 가지고 있다. 빌드라는 과정을 해결하기 위해 가장 중요한 것들을 가지고 있는 객체 

프로젝트의 이름, 프로젝트 어디에 자바 클래스가 있는지 알아야지 컴파일해서 컴파일한 파일을 어느 디렉토리에 모아놓을 것이고, jar이름으로 패키징하고.. 클래스의 위치를 알아야하는데 프로젝트라는 클래스에 정의가 되어 있고 지금 이 프로젝트의 정보들은 gr

 

 

 

adle을 시작할 때 필요한 정보들을 가지고 객체를 생성함. 

 

task는 우리가 직접 만드는거라서 쉽게 참조 x

내장 객체는 이미 gradle을 시작할 때 이미 만들어져 있고 우리가 참조할 수 있다.

 

 

학장님이 알려주시는 중요한 거...

프로그래밍 언어론- 디버깅할 때 콜스택을 따라가면 (콜체인) 컴파일러 내부에서 스택처럼 쌓아올린다. 하나의 프로시져나 펑션을 실행시키면 하나의 독립된 공간으로 찍어낸다. activation record. 이게 하나 생기면 액티베이션 레코드 인스턴스가 생김. 이거와 라이프 사이클을 함께하는 변수를 static variable 이라고 부름. 이거와 관계 없이 본체는 다른 곳에 있고 이름만 같이 하는걸 heap이라고 부름. 여기서 가져온 변수를 래퍼런스하면 heap variable이라고 부름. 

static 과 dynamic의 차이는?

스태틱은 at 컴파일 타임 (전산 방언) / 다이나믹은 at 런타임

하나의 변수에 두가지 속성이 부여됨. 

스태틱 스코핑, 다이나믹 스코핑

프로그램 언어로서 변수의 범위를 컴파일 타임에 정으할수 잇는가 스태틱 스코핑, 런타임에 가야 정의할 수 있는걸 다이나믹 스코핑

 

다이나믹 링크를 따라가는걸 다이나믹 체인

스태틱 링크를 따라가면 스태틱 체인

 

도메인!! - 특정 분야의 문제를 푸는 거?

DSL domain specific language

문제들을 정의한 정의역?

도메인 (인터스트리 도메인)이랑 헷갈리면 안된다....

도메인 스페시픽 임베디드 랭귀지?

 

1. 인더스트리 도메인-> 비즈니스 도메인 (DNS 아님)

2. 프라블럼 도메인 (현실의 문제를 해결하는)

 

둘을 먼저 비교해봐라!!!

로직은 뭔가를 해결하는 것

 

 

 

 

 

 

 

 

싱글 프로젝트 & 멀티 프로젝트


우리가 만든 프로젝트는 대부분 다 싱글 프로젝트

자식 프로젝트를 넣어서 구성하면 멀티 프로젝트가 된다

멀티를 구성하는 이유는 각각의 프로젝트가 밀접한 연관이 있을 때 그 관계를 놓치지 않고 각각의 관계에 참조를 걸면서 같은 환경에서 제품을 빌드할 이유가 있을 때 

 

 

 

Task 객체


task도 task끼리 의존 관계를 가질 수 있다.

 

dependsOn: 태스크의 의존 관계

enabled: 태스크의 실행 가능 여부

 

태그의 실행 순서도 정할 수 있다. 

  • mustRunAfter
  • shouldRunAfter

 

Gradle 객체

 

해당 프로젝트에서 그레이들 자체의 실행 환경을 나타내는 객체

 

속성:

gradleHomeDir: 그레이들의 홈 디렉토리 경로

gradleUserHomeDir: 사용자 홈 디렉토리 경로

gradleVersion: 그레이들 버전

rootProject: 루트 프로젝트 위치

startParameter: 빌드 실행 시의 파라미터 정보

 

 

 

 

task hello1 {
    println 'hello1'
}

task hello2 {
    doLast {
        println 'hello2 last'
    }
}

task hello3 {
    doFirst {
        println 'hello3 first'
    }
    doLast {
        println 'hello3 last'
    }
    println 'hello3'
}

 

dolast, dofirst는 hello2, hello3에 의해서 실행이 됨

settings에 있는건 configuration에 의해서 실행이 된다 

멀티 프로젝트로 구성했는데 child1에서 실행을 했다면 부모의 setting과 child1의 ?에서만 실행이 됨..

 

'hello3'은 configuration 단계에서 실행된다

hello3 first hello3 last는 execution 단계에서 실행된다 

 

 

환경 구성 정의

애플리케이션은 실행된 단계에서 라이브러리가 필요하다

컴파일단계에서 필요한 라이브러리는 별로 없다..

다만 테스트하는 단계에서 몫? 라이브러리가 필요하다면 런타임( 프로그램을 실행하는 단계)에선 필요하지 않다. 왜냐면 테스트하는 단계에서 필요한거니까.. 

configurations {
    conf1
}

그럴때 configurations를 사용

 

 

 

플러그인


미리 구성해놓은 Task들의 그룹

 

 

 

리소스란? 프로퍼티 파일 등을 보통 리소스라고 함. 

프로그램에 필요한 자원을 리소스라고 한다. 

 

 

자바에선 패키징이라는 과정을 거쳐야한다

명령어 하나로 자바를 실질적으로 실행할 수 있는 파일 포맷 JAR : 중간에 실행할 수 있는 매개체가 없어도 되고 단독실행할 수 있다

클래스들의 묶음! 압축하지 않고 파일을 묶음

 

WAR로 올리면 톰캣 위에 올려야 함 

 

ear 파일, 소비 프로토콜, 리모트 프로시콜? 을 쓰는 회사는 피하자...

war 파일 만드는 회사도 피하자..

 

 

멀티 프로젝트

 

계층형 멀티 프로젝트에선 root

 

 

과제

뱅크를 멀티 프로젝트로 구성하는데 

도메인 프로젝트에는 도메인 클래스를 넣고 서버 클래스는 restApi

클라이언트 프로젝트엔 atm 클래스 

루트가 그 세개 프로젝트를 인클루드 하는 식으로 작성하면됨

루트엔 application.java 가 있을거고 어플리케이션을 작동시키면 세개 파일이 유기적으로 호출이 돼서 작동해야함 

zip 파일로 압축해서 제출.. 

  • Gradle
  • gradle wrapper 
  • groovy
  • 싱글 프로젝트 & 멀티 프로젝트
  • Task 객체
  • 플러그인
'[NHN Academy]' 카테고리의 다른 글
  • [개발환경] Git 기초 사용법
  • 스레드
  • 스레드: 스레드 풀
  • 배열

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.