온라인 자료

Introduction to Programming and and Computational Problem-Solving

무료로 제공되는 Java 초급 강의로 타입부터 제네릭, 간단한 자료구조까지 다룬다. 늘 대부분의 강의가 콘솔부터 가르치는 것과 다르게 클래스를 정의하고 내부를 살펴보는 방식이 새롭다. 설명의 깊이는 아쉽지만 찾아볼 수 있는 대부분의 키워드는 제공하고 있다. 더불어 테스트 개념도 같이 얘기해주고 있어서 유익함. 특히 상속과 제네릭을 다루는 부분은 여태 봐왔던 동물-코끼리 같은 상속보다 훨씬 와닿고 실무에 가까운 예제로 설명한다.

How to Design Classes

How to design class: object-oriented programming and computing. Matthias Felleisen, Matthew Flatt, Robert Bruce Findler, Kathryn E. Gray, Shriram Krishnamurthi, Viera K. Proulx

제목처럼 클래스, 인터페이스, 상속, 제네릭 등을 어떻게 활용하는지 예제 중심으로 다루는 책. 디자인 패턴을 다루는 책들에 비해 각각의 맥락을 좀 더 이해하기 편하도록 설명한다.

spring의 gradle로 프로젝트 시작하기를 따라하며 정리한 글이다.

먼저 brew로 java와 의존성 및 빌드 관리/자동화 도구인 gradle을 설치한다.

$ brew tap caskroom/cask
$ brew install brew-cask
$ brew cask install java
$ brew install gradle

문제없이 설치되었다면 버전 정보를 출력한다.

$ gradle -v

gradle로 프로젝트를 초기화한다.

$ gradle init

초기화하면 기본적으로 gradle wrapper를 생성해주는데 이 스크립트는 gradle이 없는 환경에서도 gradle을 사용할 수 있도록 돕는 스크립트다.

예제 클래스를 먼저 작성한다.

$ mkdir -p src/main/java/hello
// src/main/java/hello/HelloWorld.java

package hello;

public class HelloWorld {
  public static void main(String[] args) {
    Greeter greeter = new Greeter();
    System.out.println(greeter.sayHello());
  }
}
// src/main/java/hello/Greeter.java

package hello;

public class Greeter {
  public String sayHello() {
    return "Hello world!";
  }
}

빌드와 관련한 모든 설정은 build.gradle에 담겨 있다. 빌드를 위해 다음 내용을 build.gradle에 추가한다.

apply plugin: 'java'

그리고 빌드를 하면 build 디렉토리를 생성하고 빌드를 진행한다.

$ gradle build

아래 내용을 추가해서 어플리케이션을 직접 구동할 수 있다.

apply plugin: 'application'
mainClassName = 'hello.HelloWorld'

gradle을 설치한 환경에서는 gradle을 사용해도 되겠지만 다음과 같이 앞에서 생성한 wrapper를 사용해서 구동할 수 있다.

$ ./gradlew run

다음은 튜토리얼에서 최종적으로 작성하게 되는 gradle 파일이다.

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'application'

mainClassName = 'hello.HelloWorld'

// tag::repositories[]
// 서드파티 라이브러리의 소스 출처를 추가한다
repositories {
    mavenCentral()
}
// end::repositories[]

// tag::jar[]
// 빌드에서 jar를 생성할 때 메타를 추가한다
jar {
    baseName = 'gs-gradle'
    version =  '0.1.0'
}
// end::jar[]

// tag::dependencies[]
// 버전 의존성을 추가한다
sourceCompatibility = 1.8
targetCompatibility = 1.8

// 의존 라이브러리를 추가한다
dependencies {
    compile "joda-time:joda-time:2.2"
}
// end::dependencies[]

// tag::wrapper[]
// wrapper로 설치할 gradle version을 정한다
task wrapper(type: Wrapper) {
    gradleVersion = '2.3'
}
// end::wrapper[]

java 소스도 겨우 읽는데 tomcat 서버 설치하느라 고생했습니다. 상당히 단순한 절차인데도 개발자분이 올린 소스가 계속 에러가 나서 설치 문제인줄 알고 몇번이고 다시 설치를 시도했는데 다행히도(?) 폴더명이 문제였습니다. 지웠다가 재설치 하는 작업은 반복적으로 하면 서버가 지저분해지는 문제점(?)이 있어 싫어하는데 이번에 처음으로 해본 가상서버 호스팅은 간편하게 서버를 초기화 할 수 있어 엄청나게 편리했습니다. 이 내용은 centOS (64bit)를 기준으로 작성하였습니다.

  1. 먼저 jdk를 설치해야 합니다. http://java.sun.com/javase/downloads/index.jsp 로 가서 해당 환경에 맞는 버전을 내려 받아 설치합니다.

cd /usr/tmp

wget http://download.oracle.com/otn-pub/java/jdk/7u1-b08/jdk-7u1-linux-x64.rpm

rpm -Uvh jdk-7u1-linux-x64.rpm

위와 같이 입력하면 JDK 설치는 완료 됩니다.

  1. tomcat을 설치합니다. http://tomcat.apache.org/ 에 가서 사용하고자 할 버전에 맞춰 내려 받습니다.

wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-7/v7.0.22/bin/apache-tomcat-7.0.22.tar.gz

tar xvfpz apache-tomcat-7.0.22.tar.gz

mv apache-tomcat-7.0.22 /usr/local/tomcat

  1. tomcat을 서비스로 등록해야합니다. 아래의 쉘 스크립트를 작성해서 /etc/rc.d/init.d/에 저장합니다.
#!/bin/sh

Startup script for Tomcat

chkconfig: 35 85 15

description: apache tomcat 6.x

processname: tomcat

Source function library.

export JAVA_HOME=/usr/java/default export CATALINA_HOME=/usr/local/tomcat export PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

See how we were called.

case "$1" in start) echo -n "Starting tomcat: " $CATALINA_HOME/bin/catalina.sh start echo ;; stop) echo -n "Shutting down tomcat: " $CATALINA_HOME/bin/catalina.sh stop echo ;; restart) $0 stop sleep 2 $0 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac exit 0

cat /etc/rc.d/init.d/tomcat #위 내용을 저장

chmod 755 /etc/rc.d/init.d/tomcat

  1. tomcat을 서비스로 등록한 후 서비스 시작을 해줍니다.

chkconfig –add tomcat

service tomcat start

apache-tomcat으로 설치해줬기 떄문에 웹서버 설정은 별도로 변경할 필요가 없습니다. http://localhost:8080 으로 접속하면 tomcat 고양이가 야옹거리며 기다리고 있습니다.

설정하면서 기억할만한 내용들은 아래와 같습니다.

  • web manager, host manager 를 지원하는데 /usr/local/tomcat/tomcat-user.xml 에 계정을 추가해주면 사용할 수 있다.
  • tomcat은 WAS(web application server) 개념이다. 각각의 프로젝트가 /usr/local/tomcat/webapps 에 각 디렉토리로 저장이 되는데 LAPM에서 계정발급 해주고 FTP 접속 열어주고 하는 것처럼 하려면 webapps 쪽으로 vsftp를 수정하기 보다는 기존 계정 발급과 동일하게 생성해주고 webapps 폴더에 해당 계정 디렉토리 심볼릭 링크를 걸어주는 편이 한결 간편하고 쉽다.

색상을 바꿔요

눈에 편한 색상을 골라보세요 :)

Darkreader 플러그인으로 선택한 색상이 제대로 표시되지 않을 수 있습니다.