표지 디자인은 굉장히 심플하고, 표지부터 복잡하고 어려워보이는 타 Java 책에 비해서 가볍게 접근할 수 있을 것 같은 느낌을 주는 디자인이다.
본 책에서 가장 차별적이고 흥미로웠던 부분은 바로 이 부분이었는데,
필자는 정보처리기사나 토익, 토플등의 수험서를 제외하고는 이러한 학습 계획표가 수록된 책을 본적이 없었다.
하지만 본 책에서는 자바 20일 계획표를 제시함으로서, 처음 자바를 접하는 사람들에게 어떤 템포와 진도로 공부하는 것이 적절한지에 대해서 친절히 소개하고 있다.
아마 방학기간등에 자바를 독학하고자 하는 사람들에게는 굉장히 유용한 부분일 것 같다.
챕터는 16개로 구성되어 있으며, 자바 개발 환경같은 아주 기초적인 내용부터 시작하며 변수,자료형, 주석 개념에 대한 설명과 연산자, 조건문 반복문 등을 다루는 개발 기초 내용 또한 포함되어있다.
사실 개발을 처음 접하는 사람들에게는 변수, 자료형, 주석 등의 용어 자체가 생소하여 개발 독학 서적을 보더라도 어려울 수가 있는데, 이 책같은 경우에는 코딩 자체를 처음 접하는 사람이라도 독학이 가능하게끔 내용을 구성한 것 같다.
또한, 자바와 객체지향언어의 특징인 클래스와 객체, 상속, 추상 클래스, 제네릭, 스레드를 설명하며, 자바 자체에 대한 설명을 충실히 진행하고 있다. 뿐만 아니라, 유용한 패키지와 클래스들을 소개하고 자바 8에서 추가된 람다 표현식등을 소개하며 코드의 가독성까지도 높일 수 있도록 다양한 코딩 방법을 소개한다.
또한 모든 개념은 간략한 코드와 함께 설명이 되며, 코드의 아주 세세한 부분까지도 언급을 하며 설명을 진행하기 때문에, 소스 코드 내에서 이해가 안되는 경우나 개념이 모호할 경우가 없을 것이라고 생각된다.
총평
장점
개발을 전혀 할 줄 모르는 직장인/학생등이 쉽게 Java를 배울 수 있다.
273개의 예제 소스코드가 포함되어있어, 개념을 코드를 통해 머리에 확실히 인식시킬 수 있다.
디자인이 심플하여 개발 서적 특유의 딱딱함을 벗어났다.
개발 환경 구성에 대한 설명이 친절하여 Java 설치등을 쉽게 따라할 수 있도록 하였다.
20일간의 계획표를 제공하여 적절한 진도 속도와 빠르고 효율적인 학습이 가능하도록 하였다.
아쉬운 점
본 책은 자바를 제대로 공부하기보다는 입문서에 가까운 느낌이기 때문에 Java를 배워 취업을 하려하거나, 프로젝트를 진행하려고 하는 경우 이 책에서 다루는 내용만으로는 다소 버거울 수 있다.
전공자들이 보기에는 다소 난이도가 쉽고, 개념을 정리하는 용도 정도로는 쓸 수 있지만 Java를 완벽히 이해하기엔 깊이가 다소 얕다.
예제코드가 많긴 하지만, 학생들이 스스로 해볼 수 있게끔 Quiz나 Assignment등의 명세가 책 중간중간에 있었으면 더 좋았을 것 같다. 코드를 단순히 따라해보기만하고 동작하는것만 확인할경우, 제대로 된 공부가 안될 수 있기 때문에 스스로 응용하여 프로그램을 작성하는 심화 내용이 필요하다고 생각한다.
개발환경을 윈도우로만 설명하여, 리눅스 OS나 애플의 OS X를 사용하는 비전공자 학생의 경우 설치를 어려워 할 수 있을 것 같다.
Continuous Integration의 약자로, 지속적 통합이라는 의미를 가지고 있다.
대형 프로젝트의 경우, 다수의 개발자들이 지속적으로 개발을 진행하면서 점점 저장소가 기존 개발 베이스에서 크게 달라지게 되는데, 이로 인해 개발된 코드를 통합(Integration)하는데에 작업하는 시간보다 통합하는 시간이 오히려 더 오래 걸릴 수 있고, 심지어는 아예 제로베이스에서 처음부터 개발을 진행하는 것이 더 빠른 경우도 있다고 한다.
이러한 문제점을 해결하기 위해 나온 개념이 커밋 단위로 통합과정과 테스트를 거치는 CI개념이다.
CD
Continuous Deploy의 약자로, 지속적 배포의 의미를 가지고 있다.
소스코드를 배포하기 위해 해야하는 과정을 자동화하여 실행하는 것으로, CircleCI의 경우 깃허브의 커밋당 한번씩 배포를 진행한다.
배포 과정은 사용자가 정의할 수 있으며, React에서는 빌드한 결과물을 웹서버에서 돌린다거나, npm install을 실행시킨다거나, make 명령어를 통해 테스트를 진행하는등의 과정을 진행한다.
Circleci
무료 CI/CD 툴, Bitbucket이나 Github와의 연동이 쉽고 간단하여 많이 사용된다.
빌드는 한번에 1개만 가능하다는 한계점이 있다.
개인프로젝트 등에서는 CI(Continuous Integration)보다는 CD(Continuous Deploy)의 목적으로 많이 사용된다.
그 후, 연동하고자 하는 버전관리 툴에 따라서 Github나 Bitbucket 버튼을 클릭한다.
연동이 완료되었다면, 자신의 깃허브 레포지토리가 나타난다.
여기서 Set Up Project 버튼을 클릭하면 연동이 완료된다.
2. 빌드 workflow 정의
아마 연동후에 바로 빌드를 하게 되면 연동이 완료는 되었지만, 아마 Build Error라는 오류 메세지를 보게 될 것이다.
그 이유는 아직 빌드를 어떻게 할건지를 결정하는 Job workflow를 정의하지 않았기 때문이다.
Circleci에서는 일종의 단위 작업인 job과, job들을 호출하는 workflow를 정의한 config.yml 파일을 필요로 하므로 이 파일을 생성해주어야 한다. 해당 리포지토리의 루트 디렉토리로 이동한 뒤 .circleci 폴더를 만들고, 그 안에 config.yml 파일을 만든다.
최근 필자가 진행하고 있는 블록체인 프로젝트의 config.yml 파일 예시를 통해 config.yml 작성법을 소개한다.
# Golang CircleCI 2.0 configuration file
version: 2
# 빌드 작업을 정의한 jobs 스크립트 형식으로 작성
jobs:
# job의 이름을 정의, 굳이 build로 할 필요는 없지만 일반적으로 build를 사용한다.
build:
# 빌드를 실행할 도커 이미지를 설정한다.
# circleci에서 제공하는 이미지를 사용해야 한다.
# https://circleci.com/docs/2.0/circleci-images/
docker:
# Ethereum의 프로그래밍 언어인 Go 컴파일을 해야하므로 go 이미지 세팅
- image: circleci/golang:1.9
# Go의 workspace를 설정해준다.
working_directory: /go/src/github.com/Votereum/votereum-core
steps:
# Deploy의 과정을 한단계씩 정의한다.
# 소스를 checkout 하는 과정
- checkout
# 코드 전체를 컴파일 하는 과정
- run: make all
# 테스트 실행
- run: make test
# 테스트 성공시 good 출력
- run: echo "good"
workflows:
version: 2
build:
jobs:
# 위에서 작성한 job의 이름을 기입하면 된다.
- build
3. 배포 및 테스트
프로젝트 소스에 맞는 config.yml을 작성하였다면, Github에 config.yml을 Push한다.