레이블이 IT 용어인 게시물을 표시합니다. 모든 게시물 표시
레이블이 IT 용어인 게시물을 표시합니다. 모든 게시물 표시

2015년 4월 21일 화요일

Gradle 고찰 - Part.1

1. 배경

어느 날인가, 갑자기 개발환경을 최신화 해야 겠다는 생각이 들어서, Android ADT를 기동하고 SDK을 업데이트 하였으나, 예상대로 매끄럽게 업데이트가 되지 않았다. 그래서 Android 개발자 페이지(https://developer.android.com/index.html)에 가서 ADT를 받으려고 하였으나... 어디에도 찾아 볼 수 없고, 그 자리에 정식 버전으로 릴리스된 Android Studio 가 차지하고 있었다. (헉!! 그래도 현재 Eclipse Plug-in을 통해서 동일한 방식으로 빌드는 할 수 있다.) 
새로운 환경으로 옮겨가기로 맘도 먹었으니 가벼운 마음으로 Android Studio를 설치 하고 기존으로 프로젝트를 임포트 하였으나...빌드가 되지 않는 것이다. 그때 부터 약 30분 간 구글링을 한 결과 빌드 방법이 바뀌었기 때문에 Converting을 해야 만 한다는 사실을 깨달았다. 
그 빌드 방법이 바로 "Gradle"(http://gradle.org)!!!! 이 녀석이 뭐길래 구글의 Android 빌드로 선택 되었나 궁금하여 이 녀석을 고찰 하기로 한다. 

2. Gradle 개요

OPEN SOURCE BUILD AUTOMATION
From command line to IDE to continuous integration, only one Enterprise build automation system to rule them all. Declare and execute all tasks necessary to compile, test, package and ship multi-language multi-platform multi-project and multi-channel software, SaaS and Mobile Apps.


홈페이지에 들어가면 위와 같은 문구를 가장 먼저 볼수 있다. 굳이 직역하자면 

오픈소스 빌드 자동화로서 CLI(Command Line Interface) 부터 IDE(e.g Eclipse, Intelli J....)까지 지원 하는 함. 컴파일, 테스트, 패키지,다양한 언어, 플랫폼, 프로젝트 그리고 SaaS, 모바일 App 등의 다양한 채널로 배포(Ship)을 정의 하고 실행 함. 
(다수의 오역이 있을 수도 있습니다. 지적해주세요)

위와 같다.

흠 그냥 느낌은 뭐 이런 아이들은 많잖아 기존 Ant(http://ant.apache.org)나 Maven(https://maven.apache.org)도 있는데 왜 Android Studio는 Gradle을 공식 빌드로 수용 하였을까? 라는 느낌이다.

https://gradle.org/why/polyglot-builds/#av_section_2 의 "Android's Build System" 부분을 참조하면 의존성 관리, 여러 프로젝트를 통합하여서 빌드해야 하는 경우에 대하여 손쉽게 구성할 수 있는 장점이 있다고 한다.
개인적으로 느낄때는, 기존에는 Ant를 사용하거나 혹은 그냥 Plug-in 에 내장되어 있는 Build를 사용하여도 크게 문제는 없었던 것 같은데 좀 더 명확하게 관리 할수 있게 된것이 장점으로 생각된다. 
오~! 그리고 Signing도 한큐에 어러가지로 할 수 있는 것 같다.(이 부분은 좀 좋은 것 같다~!)

* Gradle?!Groovy??

Gradle은 기본적으로 XML이 아닌 Groovy(http://www.groovy-lang.org) Syntax 로 기술한다.
XML 대비 장점은 다음의 글을 참조 하기 바란다. 

내가 생각하는 Maven의 가장 큰 문제점은 두가지이다.
  • 프로젝트 구성/빌드 툴로써 프로젝트 구성은 정적인 설정 정보이고 빌드는 동적인 행위이다. 그런데 이것을 정적인 데이터를 저장하는데 적합한 XML로 그 내용을 기술하게 함으로써 동적인 행위인 빌드에 크나큰 제약을 가한다. 게다가 XML은 너무 장황해서 실제 설정 내용보다 XML 뼈대가 더 많다.
  • 다른 하나는 Gradle을 사용하다 느낀 것인데, Maven은 설계상의 문제도 있다. 바로 멀티 프로젝트 구성을 상속 구조로 한 점이다. 그에 반해 Gradle은 구성 주입 방식(Configuration Injection, 설정 주입 방식이 더 나은 번역일까?)을 사용한다. 이는 빌드 구성 정보에서 매우 큰 차이를 만든다.
Gradle은 Groovy DSL로 작성하며, 설정 정보는 변수에 값을 넣는 형태로, 동적인 빌드는 Groovy 스크립트로 Gradle용 플러그인을 호출하거나 직접 코드를 짜면 된다.

요컨데 심플하고 환경에 따라 동적으로 빌드 할 수 있는 장점인것으로...

이상 Gradle이 어떤 것인가 대하여 대략 적으로 살펴보았다. 이후 Android의 빌드를 중심으로 Gradle 활용에 대하여 정리하고자 한다. 

to be Continued....

PS. 잘못된 내용이나 문제가 발생할 수 있는 내용은 지적 부탁드립니다.

2015년 1월 15일 목요일

Base64란?


Base64

Base64 인코딩은 8비트 이진 데이터(예를 들어 실행 파일이나, ZIP 파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 가리키는 개념이다.
Base64를 글자 그대로 번역하여 보면 64진법이란 뜻이다. 64가 2의 제곱수(64 = 2^6^)이며, 2의 제곱수들에기반한 진법들 중에서 화면에 표시되는 ASCII 문자들을 써서 표현할 수 있는 가장 큰 진법이기 때문이다.
 
즉, 다음 제곱수인 128진법에는 128개의 기호가 필요한데 화면에 표시되는 ASCII 문자들은 128개가 되지 않는다. 그런 까닭에 이 인코딩은 전자 메일을 통한 이진 데이터 전송 등에 많이 쓰이고 있다.
일반적으로 Base64는 바이너리 데이터를 문자열로 변환 해 준다고 생각하면 된다. 변환 되는 문자열을 다음과 같이 64개의 문자로 이루어진다.

            "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" 

위에서 볼 수 있듯이 64개의 문자는 A~9까지 일반적인 알파벳 대소문자와 숫자 그리고 "+" 와 "/" 
두가지의 기호로 이루어진다.


Base64 인코딩 과정

  1. 바이너리 데이터는 아래와 같이 8bit씩 나누어져 있다
  • 00110011 | 01110010 | 01101011 | 00001010
     
  2. 이를 아래와 같이 6bit씩 나누어 묶어 준다 
      (왜 6bit인가? 이유는 64개의 문자이기때문에 2^6^으로 표현할 수 있기때문이다)
  • 001100 | 110111 | 001001 | 101011 | 000010 | 10
     
  3. 그런데.. 다 나누어보았더니 마지막에 "10"이 남는다. 6bit로 이루어져야 하는데.. 이것은 어찌해야 할까? 
      (정답은 남은부분을 "0"으로 채워주는 것이다)
  • 001100 | 110111 | 001001 | 101011 | 000010 | 10 0000 
  • 위와같이 "0"으로 채워주는 경우가 있을때에는 남는 bit에 따라서 패딩문자 "=" 한개 또는 "==" 두개를 붙여준다. (2bit가 남으면 "=" , 4bit가 남으면 "==")
     
  4. 6bit로 나눠진 비트들을 각각 정수로 변환해 위의 64개의 문자(첫번째부터 차례대로 0 ~ 63)에 맞춰 문자를 
      만들어준다.




Example

"Pointi"라는 글자를 Base64 인코딩을 해보자.

1. 먼저 각각의 문자를 2진수(8bit)로 변환한다.



2. 만들어진 2진수 값들은 아래와 같다.
01010000 | 01101111  | 01101001 | 01101110 | 01110100 | 01101001

3. 이것들은 6bit로 나눠준다.
010100 | 000110 | 111101 | 101001 | 011011 | 100111 | 010001 | 101001

4. 나눠진 6bit로 이루어진 2진수는 아래와 같이 정수로 바꿔준다.
20  |  6  |  61  |  41  |  27  |  47  |  17  |  41

5. 아래의 표에 맞춰 문자를 만들어준다.


6. 결과는 UG9pbnRp 이다.