2013년 12월 23일 월요일

토비의 스프링...이런 책의 가격이 겨우 4만원이라니.

며칠 OSX 공부를 중단하고 "토비의 스프링"을 보고 있다. 현재 5장까지 본 상태인데, 샘플로 제공하는 예제 코드도 모두 제대로 돌아가고 진행되는 것에 대한 설명이 자세하게 되어 있어 책의 두께에 비해서 진도는 빨리 나갈 수 있는 교제이다. 샘플 타이핑 치는 시간을 제외하고는 소설책 읽듯이 술술 넘어간다.

대체 왜! 자바에서 Spring으로 통일되었는지 궁금했는데, 5장까지만 보아도 답이 보인다.
5장까지 보고 내린 결론은 Spring은 디자인 패턴 사용을 강제하고 있다는 것이다. 물론 디자인 패턴이고 나발이고 사용할 생각이 없는 상태에서 Spring을 적용할 수도 있지만, 이건 Spring을 사용하는 게 아니라, 그냥 Spring의 jar 파일만 포함해 둔 것이지 아닐까 한다.

PHP의 CI를 보면서 아주 단기간의 학습으로 나름 괜찮은 퀄리티가 나오는 코드를 만들수 있다는 것에 충격을 받았는데, CI는 Spring에 비한다면 정말 '세발의 피' 라고 보여진다. "토비의 스프링"이라는 책이 아주 좋은 교재 인 것도 있지만, 그 동안 개발해 오면서 고민하던 것들에 대해 책을 보면 볼 수록 명쾌하게 답변을 제시 하고 있다. 근 3년간 HTML5 기술에 묻혀서 놀고 있었다는 생각이 많이 든다. 아까운 3년의 시간!

아무튼 5장 까지 보고 난 다음 하고 싶은 말은
"대체 Spring Framework 개발자들은 뭘 만들어 놓은 거야? 이런걸 공짜로 푼다고?"
위의 한마디 이다.

2013년 12월 18일 수요일

10장(아카이브)

10장은 데이터 저장기능에 관련된 챕터이다. 10장의 내용을 한줄로 줄인다면,
어플리케이션에서 생성한 데이터를 파일로 저장/불러오기 하기 위해서 object 를 아카이브(serialize) 하는 방법을 설명 하고 있다.

아카이브(serialize)는 자바나 기타 언어에서도 사용하고 있는 방법이기 때문에, 이해하는데 특별한 어려움은 없다. 다만 Cocoa 프레임워크의 저장/불러오기 관련 함수가 어떤 것들이 있는지 구경 해 보는 의미가 있다. 역시 추후에 기능 사용시 다시 돌아와서 봐야 할 내용으로 생각 된다.

내일 다시 11장 진도를 나가 보도록 하자. 오늘 여기까지...

bash shell로 파일 삭제 cronjob

find mdate 를 이용하여 백업 파일 삭제하는 cronjob 을 걸어 두었는데, find mdate 의 결과가 장비마다 이상하게 나오는 원인 파악 불명인 이상한 현상이 보여서, 그냥 ls, awk 를 이용해서 만들었다. find mdate 의 결과가 왜 이상하게 나오는지 정말 궁금하다???

#!/bin/bash


# _yyyymmddhhMM.tar.gz 형식의 파일을 run time 기준으로 삭제 한다.
# 원래는 find -mdate 로 만들었으나, find -mdate 의 결과가 ls -al 로 테스트 했을때
# 장비별로 다르게 나오는 파악하기 힘든 원인으로 인해 ls, awk 를 이용하여 삭제 하는 것을 만들었음
#
# 추후 _yyyymmddhhMM.tar.gz 파일 형식이면 SRC_DIR 만 수정하여 그대로 사용하면 된다.
# (실제로는 "_yyyymmddhhMM." 까지만 형식이 같으면 사용 가능하다.)


# find mtime 으로 검색이 원하는데로 돌지 않아서, 파일명 매핑으로 변경 한다.
#DAY_AGO=7
#/usr/bin/find /data/backup/fsp/src -mtime +$DAY_AGO -exec rm -rf  {} \;


# 파일을 삭제할 디렉토리 지정
SRC_DIR=/data/backup/fsp/src1

# SRC_DIR 이 존재하는 디렉토리 인지 체크 한다.
if [ ! -d ${SRC_DIR} ]; then
 # cronjob 에서 /dev/null 2>&1 로 redirect 할 것이기 때문에 echo 는 넣어둔다.
 echo "${SRC_DIR} not exist target directory. terminate shell."
 exit
fi

# 파일 삭제할 기준을 설정(파일 이름에서 날짜가 스크립트 run 타임 기준으로 7일 이전)
AGO_DAY=`date +%Y%m%d%H%M -d '7 day ago'`

# ls를 이용하여 파일명을 가져온다.
FILE_LIST=`ls ${SRC_DIR}`

# 파일명으로 돌면서 조건 판단한다.
for fname_full in ${FILE_LIST}; do
 # 파일명의 포맷이 aaa_yyyymmddhhMM.tar.gz 로 되어 있기 때문에 "." 으로 분리된 제일 처음을 가져온다
 fname=`echo $fname_full | /bin/awk -F"." '{print $1}'`
 # 가져온 제일 처음 값에서 "_" 으로 분리된 날짜값을 가져온다.
 cdate=`echo $fname | /bin/awk -F"_" '{print $2}'`
 
 # 가져온 날짜값이 존재하는지 체크 한다.
 if [ "X"${cdate} != "X" ]; then
  # 가져온 날짜 값이 기준 시간 이전이면
  if [ $cdate -le $AGO_DAY ]; then
   # 삭제 한다. cronjob 에서 /dev/null 2>&1 로 redirect 할 것이기 때문에 echo 는 넣어둔다.
   echo "/bin/rm -rf ${SRC_DIR}/${fname_full}"
   /bin/rm -rf ${SRC_DIR}/${fname_full}
  fi
 fi
done

9장(NSUndoManager)

9장 제목에서 솔직히 겁을 먹었는데, 역시 이 책을 보고 처음으로 어렵다는 생각이 드는 챕터였다. undo 자체가 힘든 알고리즘 이기 때문에, 간단하게 보여주는 것도 이해하기가 상당히 힘들다.

일단은 돌아만 가게 코딩을 해 봤는데, 추후 두고 두고 펼쳐 보면서 이해를 해야 하는 챕터로 생각 된다. 더 이상 고민 해 봤자, 진도가 안 나갈듯 하니 키핑해 두고 10장으로 넘어가자!
오히려 10장이 더 쉬울듯...

2013년 12월 15일 일요일

8장(NSArrayController)

8장은 정말 말이 나오지 않을 정도로 마법 같은 것을 알려 준다. Interface Builder를 이용하여 몇 번 클릭과 약간의 코딩으로 쓸만한 테이블뷰를 만든다. 지금 당장은 기억나지만, 앞으로 8장은 앞으로 계속 몇 번이고 다시 볼 것으로 예상한다.

8장의 내용 하나만 알아도 책값은 충분하다고 생각될 정도로 환상적인 결과를 보여주는 챕터이다.

Interface Builder와 코코아 내장 클래스를 이용한 코딩 하는 테크닉에 대해서 알려주는 것이어서 내용을 보고 직접 해 보는 것 외에는 설명할 게 없다.

마지막에 등장하는 연습 문제 2개는 내일 해 보기로 하고 오늘은 여기까지! 9장이 아주 기대  된다.

Mysql 명령어 모음

sql문을 사용할때 마다 계속 찾곤 하는데, 추후 필요할지 몰라서 기록해 둔다. (현재 RasorSQL 을 사용하기 때문에 당장 필요는 없는데, 추후 어떻게 될지 모르니...)

1. 데이터 베이스 생성
mysql> CREATE DATABASE spring CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

2. user 생성
mysql> GRANT ALL PRIVILEGES ON spring.* TO '아이디'@'localhost' IDENTIFIED BY '패스워드';


나머지는 필요할때 마다 추가 하도록 하자.

2013년 12월 14일 토요일

Spring 개발툴 STS

자바 개발을 하지 않아서 맥북에 이클립스 조차 깔려 있지 않은 상태이다. Spring 공부를 위해서 이클립스를 인스톨 하려고 했는데, "토비의 스프링" 9장에 보니, STS 란 것을 소개 하고 있었다. 요즘은 이클립스에 여러 플러그인이 합쳐져서, 플러그인을 모아둔 특정 버전의 이클립스를 사용하는 가 보다. 세상 참 많이 변했다는...

STS 는 Spring.io 사이트에서 무료로 받을 수 있다. spring.io 에서 Spring Tool Suite 란으로 들어가면 된다. Java 이기 때문에 OSX 버전도 있다. 3.4.0.RELEASE 버전을 다운로드 받았다. 



다운로드 받으면 친절하게 dmg 파일로 만들어져 있다.(spring-tool-suite-3.4.0.RELEASE-e4.3.1-macosx-cocoa-x86_64-installer.dmg) dmg 파일을 삽입하면 인스톨러 파일이 보인다.


인스톨러 파일을 실행하면 전형적인 인스톨 단계로 진행된다. 설치 디렉토리만 개발에서 사용하는 디렉토리로 바꿔 주었고 나머지는 디폴트로 인스톨 진행 하였다. 인스톨 완료하면 끝내면서 STS 를 실행 할지 물어 보는데, 실행하지 않게 해서 인스톨러 종료 했다.

STS 의 실행 파일은 설치된 디렉토리 하단에 sts-3.4.0.RELEASE/STS 로 존재한다.


STS 를 더블클릭해서 실행하면, workspace 디렉토리를 물어 보는데 원하는 디렉토리로 잡아 주면 된다. 그리고, Ok 하면 STS 가 처음으로 실행 된다.


실행되고 나면 나머지 설정은 추후에 하기로 하고, 가장 중요한 문서 인코딩 설정을 한다.
메뉴바에서 "Spring Tool Suite > 환경 설정" 으로 들어가서 "General > Workspace" 항목에서 "Text file encoding" 을 원하는 값으로 바꿔 주자. (역시 EUC-KR 이 디폴트로 되어 있는..) 편하게 사용하기 위해서 UTF-8 로 바꿔 줬다.


일단 여기까지 하고 사용해 보기로 하자. 자바를 하도 오랫만에 하고 Spring 을 모르니, 필요한 것은 차근 차근 설정 하기로 한다.

J2EE? JavaEE?

변명이지만 아주 오랫동안 자바를 하지 않아서 자바 진영에서 사용하는 단어도 헷갈린다.
그중에서 J2EE 와 JavaEE. 같은 것으로 알고 있었지만, 확실히 하기 위해서 찾아보았다.

검색 결과, 역시 위키. 위키에 다 나온다. (설명된 위키 페이지 바로 가기)

간단하게 설명하자면 J2EE 1.4 버전까지는 J2EE 라고 불렀지만, 다음 버전부터는 개명을 해서 JavaEE 라고 부른다. 즉, J2EE 1.4 다음은 JavaEE 5라는 것!

자바 버전명에 대해서 자세한 내용도 역시 다른 위키 페이지에 있다. 자바쪽은 이름 외우기도 힘들다. 버전에 대한 위키의 내용을 옮겨 왔다.

자바의 버전은 보통 Java SE 또는 JDK/JRE의 버전으로 말한다.
JDK(Java Development Kit)는 표준 라이브러리를 포함하며, JDK 버전이 바뀜에 따라 이 라이브러리가 확대되고 API가 바뀐다. 초기 1.0/1.1 버전에서 JDK/JRE의 명칭을 사용하다가 Java 1.2가 발표되면서 J2SDK/J2RE라고 개명하여 사용했으나 기존의 명칭으로 사용하는 사람들이 많아 현재는 다시 JDK/JRE의 명칭으로 돌아왔다. 또한 J2SE(Java2 Standard Edition)라는 명칭 또한 Java SE(Java Standard Edition)으로 변경되었다. [2]
자바 버전 체계의 메이저 버전(소숫점 위)이 계속 1.x로 고정되어 마이너 업데이트로 여기는 경우들이 있어 1.5 버전부터 5.0(1.5), 6(1.6)의 형태로 제품 버전을 코드 버전과 별개로 발표하고 있다.[3]
언어 자체는 자바 언어 명세(Java Language Specification, JLS)에서 정의되며, 판(edition)으로 구분한다. JDK가 확장되는 동안 언어는 2판에서 거의 변화가 없었으나, JDK 5와 함께 바뀐 JLS 3판에서 제네릭(generic) 타입, 애너테이션(annotation) 같은 기능이 도입되면서 상당히 바뀌었다.
JDK 7에서는 자바 언어에 상당한 변화가 계획되어 있었으나 JDK 7로 예정되었던 변화가 JDK 7와 JDK 8으로 나눠지면서 JDK 7에는 상대적으로 사소한 언어 특성만이 추가되었다. 구체적으로 이진수 표기 추가, 가독성을 위해 수 표기에 밑줄(underscore)을 허용, 스위치 문(switch에서 문자열 사용, 제네릭 타입 객체 생성 시 타입 추론(type inference), 자동 자원 해제를 위한 try 문법, 여러 예외 타입을 동시에 잡도록 허용하는 문법 등이 추가되었다.


7장(키-벨류 코딩, 키-벨류 옵저빙)

7장을 보고 난 다음 든 생각은 "이런 것도 모르면서 iPhone 개발을 하려고 생각했었나?" 이다. stackoverflow 에서 "OSX 개발자는 대부분 이 책에서부터 시작했다"는 말이 맞을 정도로 interface builder를 사용하면서 가장 궁금한 부분을 알려 준다.

interface builder를 거의 사용하지 않았지만, 한 번씩 사용하면서 안타까웠던 게 "내가 생성한 변수를 여러 가지 UI component와 어떻게 연결 못 시키는가?" 였었다. 그런데 7장에서 이것을 알려 준다.

처음 키-벨류 코딩, 키-벨류 옵저빙이라고 해서 sqlite 인가했었는데, 말 그대로 변수에 바인드를 걸고, 특정 UI Component를 바인드된 변수에 옵저버로 등록하는 것이다. 이렇게 하려면 키-벨류 코딩이 필요하다.

그리고 setter와 getter를 쉽게 사용할 수 있게 만드는 프로퍼티에 대해서 설명하고 있다. 프로퍼티의 속성은 다른 책에서도 설명되어 있지만, 보기 좋게 정리되어 있어서 옮겨 본다.


  • assign : 단순히 대입만 한다. 포인터가 아닌 스칼라형(정수형이나 실수형)에 사용
  • strong : 말 그대로 strong 하게 연관 관계를 맺는 것이다. strong으로 엮여 있는 것은 메모리에서 해제되는 것이 방지됨
  • weak : strong의 반대. 메모리에서 해제되면 자동으로 nil 값으로 설정됨
  • copy : 프로퍼티 대상이 문자열일 때나 뮤터블 서브클래스를 이용하는 클래스를 사용할 때 주로 이용
  • nonatomic : getter, setter에 lock을 걸지 않음(스레드로 돌지 않을 때)
  • atomic : getter, setter에 lock을 걸 때(스레드로 돌 때 접근 경쟁을 막기 위해서)
  • readwrite : 기본값으로 설정되는 것. 프로퍼티가 read, write 모두 가능
  • readonly : 프로퍼티가 read만 가능하게 만들 때(setter가 무시됨)

noatomic, atomic은 스레드 프로그램에서 필수인데, 프로퍼티의 속성으로 쉽게 처리 가능할 수 있게 만든 게 눈에 띈다.

마지막으로 키 경로(Key Paths) 에 대해서 설명하고 있는데, 이건 기억해 두면 추후 코딩량을 많이 줄이게 될 것으로 예상한다.

8장으로 넘어가 보도록 하자. 짧게 챕터가 구성되어 있으니 짬짬이 시간을 내 보는 처지에서 아주 좋다.

2013년 12월 13일 금요일

6장(도우미 객체)

6장은 Delegate와 도우미객체에 대해서 설명하고 있다. (그동안 도우미 객체와 Delegate가 같은 것으로 생각하고 있었는데, 잘못 알고 있었다. 기본 component들을 사용하지 않았으니, 잘못 알고 있었어도 이상 없이 코딩할 수 있었었다.)

한 번씩 샘플로 TableView를 사용 때, Delegate 외에 DataSource 라는 이상한 놈을 사용했는데, 이것이 도우미 객체이다. 자신과 특정한 일을 하는 것을 분리하는 패턴이 정말 유용하게 보인다.

그런데 책에 문제점이 눈에 띈다. 번역의 문제인지 원본의 문제인지 모르겠지만, 예제 코드가 책에 나온 데로 하면 제대로 돌지 않는다. iOS 개발도 하지 않고 OSX 개발을 전혀 하지 않은 경우는 좀 헤맬듯싶다. 대신 헤매다 보면 기능에 대해서 보다 정확하게 알 수 있다.

대신 6장 마지막에 나오는 연습 문제는 괜찮다. 2개의 연습 문제를 해결 할 수 있다면 protocol 사용하기 전의 Delegate 에 대해서 충분히 이해했다고 생각하면 된다.

6장은 좀 실망을 안고, 7장으로 고고싱~

5장(타깃/액션)

5장의 2장에 연속된 내용이다. 2장에서 간략하게 설명한 것에 대해서 5장에서 자세하게 설명하고, interface builder의 또 다른 사용법에 대해서 알려 준다.

interface builder의 또 다른 사용법인 Assistant Editor를 이용하는 것은 예전에 아주 감탄하면서 본 것이었는데, 그동안 까맣게 잊고 있었다.

디버깅의 한 방법으로 Zombie Object를 생성할 수 있는 것을 알려주는데, 앞으로 요긴하게 사용할 것으로 생각된다.

또한, 예제로 TTS를 이용한 것을 보여주는데 함수 호출 한 줄로 TTS가 되다니. 정말 간단하다. 근데 영어만 되어서 ㅜㅜ

마지막으로 연습 문제를 하나 제시하는데, 책만 제대로 보면 아주 쉽게 만들 수 있다. 5장까지 공부한 내용을 최종 정리하는 연습 문제 인 것 같은 느낌이 드는데, 6장부터는 보다 새로운 것을 알려 줄 것 같은 기대가 생긴다.

2013년 12월 12일 목요일

스프링....토비의 스프링 3.1

내년 목표 중의 하나인 스프링을 공부하기 위해서 책을 샀다. (사실 Spring Framework 이 대체 뭐기에 요즘 Java 하면 Spring이라는 말밖에 나오지 않게 만들었는지가 많이 궁금했다. 얼마나 좋은 Framework 이길래.) 많은 분이 스프링의 교과서라고 불리는 "토비의 스프링".


그런데....그런데....
책을 받아 보고, 책 두께에 그냥 질려 버렸다. 1권, 2권 통틀어서 대략 1,700페이지 정도로 보이는데, 대체 이걸 어떻게 봐야 할지 난감하다. 책을 받아본 순간에, 20년도 더 된 고등학생 시절에 맨투맨 영어 참고서 처음 봤을 때와 같은 느낌을 받았다. 그때 맨투맨 영어 참고서가 6권짜리로 기억난다.

아무튼, 목표를 새웠으니 보긴 봐야 할 텐데, 쉬엄쉬엄 보자. 1권에서 책장 빠르게 넘겨 가면서 제목 정도만 훑어 봤지만, 내용은 알찬듯하다. 화이팅!

4장(메모리 관리)

Objective-C도 C이기 때문에 메모리 관리가 중요하다. C 개발할 때부터 메모리 문제 발생하면 디버깅할 때 무진장 머리 아프다고 생각해서, 메모리 문제는 가장 중요하게 체크 하고 웬만하면 이런 상황을 만들지 않거나 최소화하려고 노력해 왔다. 때문에, 예전 Objective-C 책이나 iPhone 개발 책을 볼 때 가장 주의 깊게 본 부분이다.

그동안 iOS 개발을 하지 않아서 Objective-C에서 특징적인 메모리 관리 부분을 다 잊어버리고 있었는데, 4장에서 아주 쉽게 떠올릴 수 있게 도와주었다. 그리고 iOS5에서 ARC가 왜 필요한지에 대해서 이해하게 되었다. ARC 처음 볼 때는 좋은 점을 몰랐는데, 요즘 iOS WRT 급하게 만든 경험으로 ARC가 프로그램 구현에서 많은 부분을 도와주었다는 것을 깨닫게 되었다.

4장에서는 ARC 부터 시작 하지 않고, 예전 고전적인 메모리 할당, 해제 부터 시작하고 있는데 ARC 를 제대로 이해하기 위해서는 이 부분이 상당히 중요하다. ARC 란게 컴파일러가 자동으로 코드를 넣어 주는 것이기 때문에, 고전적인 메모리 관리에 대해서 알고 있어야 ARC 결과에 대해서 개발자가 상상을 할 수 있다.

예전에 공부한 것과 더불어 복습을 하자면 메모리 관리의 룰은 다음과 같다.

[reference count 가 증가 하는 경우]

  • alloc
  • new
  • copy(mutableCopy 포함)
위의 세 가지 경우는 무조건 reference count 가 증가 한다. 또한 개발자가 강제로 reference count 를 증가 시키려면 retain 을 사용하면 된다.

reference count 가 증가한다면 반대로 reference count 를 감소 시켜 줘야 하는데, 이럴때 사용하는 것이 release 이다. 고전적인 메모리 관리는 위의 세 경우 일때는 쌍을 맞추어서 release 를 시켜 줘야 한다.

또한 NSArray object 와 같은 경우는 object 를 array 에 push 할때 자동으로 add 되는 object 를 retain 시키고, pop 할때 자동으로 release 시키게 된다.(NSDictionary 등 기본으로 제공되는 object set 인 경우는 언급 하지 않았지만, 동일하게 retain, release 하게 될 것으로 예상 된다)

autorelease 에 대해서, 이게 정말 제대로 이해가 되지 않았는데 이번에 어느 정도 이해하게 되었다.(주위에 OSX 개발자가 없어서 제대로 이해한 것인지 자신은 없지만, 추후 개발 할때 알게 될 것으로 생각하며 제대로 이해 했다고 그냥 생각 하자 ^^;)

autorelease 로 release 된 것은 release 예약이라고 볼 수 있는데, 예약 해 둔게 과연 어느 시점에 실행될지 정확하게 이해하지 못했는데, "이벤트 루프의 끝" 이라는 말에서 정확하게 이해 되었다. 

java 에서는 object 의 메소드 호출이라고 말을 하는데, Objective-C 에서는 메소드 호출이 아니라 object 로 메시지를 보낸다고 말을 한다. 결국 object 로 메시지 이벤트를 발생 시키는 것으로 보여진다. 즉, "이벤트 루프의 끝" 이란 것은 object 로 메시지 보낸 것이 완료 되었을때 라는 말과 동일한 것이 아닐까 한다.

그리고 임의로 autorelease pool 을 사용하는 이유는 개발자가 임의로 autorelease pool 을 만들고, 임의로 생성된 autorelease pool 에 autorelease 를 예약하고 이벤트 루프가 끝나기 전에 예약된 release 를 실행 시키기 위해서라고 보여 진다.

마지막으로 ARC 에 대해서...iOS 개발에 대해서 제대로 공부 하기 시작 했을때가 iOS5 때 부터 였다. ARC 가 최초로 적용 될때 인데, 그때 다른 개발자의 블로그를 보면 "이해하기 힘들다", "사용하기 힘들다", "코드가 상상이 안간다" 등등의 이유로 ARC 를 사용하지 않고 개발을 한다는 말이 많았는데, 물론 라이브러리 들이 ARC 로 되어 있지 않다는 것도 큰 이유 중의 하나 였다.

그런데, 그 당시 그냥 스치고 지나간 말인 ARC 를 사용하므로 인해 reference count 보다는 "객체의 관계" 에 더욱 신경 쓸 수 있다는 말이 있었다. reference count 는 그냥 프로그램 코딩상의 관점이고, "객체의 관계"는 좀 더 고차원적인 설계의 문제이다.(어떻게 보면 같을 수 있지만......^^;) 아무튼 좀 더 폭 넗게 생각해서 프로그램을 할 수 있게 되었다는게 중요하다.

아무튼 4장도 다시 공부를 시작하는 입장에서 예전 기억을 떠올리는 많은 도움이 되었다.

타임캡슐(2013년형) 3TB 설치기

예전에 회사에서 프린터를 구입 할때, 네트웍 카드가 없는 프린터(HP LaserJet P3010)를 구입해서 그 동안 MS윈도우 PC 하나에 USB 로 프린터를 붙여서 사용하고 있었다.

그런데, MS윈도우 서버가 필요해서 프린터가 붙어 있는 컴퓨터의 MS윈도우 버전을 올리고 난 다음 부터 프린터가 되었다 안 되었다...지 마음대로 돌고 있는 상태 였다. 내가 사용하는 맥북에서도 프린터기를 이용할 수 없는 상태 ㅜㅜ

마침 회사에서 장비 살수 있는 기회가 있어서 3TB 짜리 애플 타임캡슐과 맥미니 서버 풀 옵션으로 구입하게 되었다. 그런데, 안 좋은 소리 들어 가면서 이렇게 구입 하게 만들어 놨더니, 다른 사람이 중간에 쏙 끼어 들어 구입한 장비를 가져 가는 사태가 발생 했다. 짜증 이빠이 되어서 타임 캡슐 까지 던져 줬는데....설치 못한다고 한마디 하고 케이스 뜯지도 않고 있는 상황을 보다 못해서, 그냥 내가 설치 하기로 하였다. 아오~ 욕나오는....

아무튼, 회사 네트웍 구성 때문에 타임 캡슐을 무선랜 기능 끄고 설치 해야 해서 약간 헤맷다. 더더군다나 나도 처음 사용하는 것이 었기 때문에.....

그럭저럭 설치해서 타임 캡슐 잡히고 프린터 까지 이젠 정상적으로 동작하게 되었다.
타임 캡슐 설정은 다음과 같다. 혹시 동일하게 사용하는 사람 있으면 참조 하면 된다.

<Fig1. 맥북에서 본 AirPort 유틸리티 화면>

1번 그림에서 흰색의 타임캡슐을 클릭하면 설정 할수 있는 팝업이 뜬다.

<Fig2. 설정 들어가기 직전>
일렬 번호는 삭제 했다....^^;
편집 버튼을 누르면 타임캡슐의 설정 화면이 나온다. 총 5개 탭메뉴로 구성 되어 있다.
<Fig3. 베이스 스테이션 설정>
베이스 스테이션 설정에서 타임 캡슐의 이름을 주고, 패스워드 설정을 한다.
<Fig4. 인터넷 설정>
타임 캡슐 설치 메뉴얼을 보면 WAN 포트에 LAN 선을 꼽아라고 되어 있는데, 타임 캡슐을 공유기 모드로 사용하지 않아야 하기 때문에 WAN 포트에 랜선을 꼽지 않고 일반 랜 포트(타임 캡슐 뒷면 구멍중 가장 위의 구멍)에 랜선을 꼽았다. Fig4 는 회사 공유기로 부터 IP 받아온 상태 화면이다.
<Fig5. 무선 설정>
무선은 그냥 죽였다. 주위 다른 사무실, 회사 내부 등등 워낙 WI-FI 가 많아서 신호 방해 하지 않기 위해서 그냥 죽였다. 휴대기기에서 프린터 사용하려고 하면 그때 생각 해보기로 했다. 또한, 무선 끄더라도 동일망 내라면 휴대기기에서도 프린터 사용 가능 할 것으로 생각 된다.
<Fig6. 네트워크 설정>
무선을 끄면 자동으로 라우터 모드가 "끔(브리지 모드)" 로 바뀐다. 그냥 그대로 두면 된다.
<Fig7. 디스크>
마지막으로 디스크...파일 공유 활성화 시키고, 공유 디스크 보안은 "계정 사용" 으로 바꿨다. 3TB 짜리라도 아무나 접속해서 막 쓰면 관리하기도 힘드니....

맥에서야 아무런 문제 없이 잘 사용되는데, 이젠 MS 윈도우 에서 프린터 할 수 있게 한번 해 보도록 하자.

MS 윈도우는 Bonjour 프린터 마법사 프로그램 설치가 필요하다. 다음 사이트로 가서 다운로드 가능하다.



다운로드 받은 것을 설치하면(바탕 화면에 아이콘 생성 하도록 최종 선택), 바탕화면에 Bonjour 프린터 마법사 아이콘이 보인다. 아이콘 클릭해서 실행 시키면, 프린터기가 보일 것이다.

선택해서 설치하면 되는데, 프린터 드라이버를 물어 본다. 이건 상황에 맞게 선택 하면 된다.(회사 프린터기는 HP LaserJet P3010 이어서 "HP LaserJet P3011/P3015 PCL6 Class Driver" 을 선택 했다)

프린터기 설치 이후, 제어판으로 가면 설치된 프린터기가 보일 것이다.(만일 안 보이면 당연히 제대로 설치가 안된 것.....해결 방법? 이렇게 발생하지 않어서 아직 모른다는 흐흐...)

개인적으로 하나 사서 집에 있는 iptime 있는 자리를 대신하고 싶은데, 이러면 와이프에게 엄청난 소리 들을것 같은 불길한 예감이 흐흐흐...내년에 생각해 보도록 하자!

3장(Objective-C)

3장쯤 되면 objective-c 문법 설명에 대해서 대부분의 책들이 나오는데, 이건 좀 틀리다. 솔직히 objective-c 는 동일한 책에서 세트로 묶어서 보는 것 보다는 다른 교재로 공부 하는 것이 훨씬 낮다.

그런 면에서 3장에서는 Objective-C 문법 이런것 보다는 네이밍룰이나 기본구조에 대해서 설명을 하고 있다. 마지막 부분에 디버거 사용법에 대해서 약간 언급 한 것도 괜찮았다.

그동안 디버그창의 버튼들을 사용하지 않고, gdb 명령어로 사용 했었는데, 버튼들이 명령어와 동일하다는 것을 알게 해 주었다. 물론 100% 대체는 불가능 하지만, 가장 많이 사용되는 next, step in, step out 정도를 타이핑 치지 않고 클릭으로 할 수 있는 것이 어디냐~

또한 예전에는 알았는데, 지금 다 까먹은 Analyze 에 대해서 언급을 하여 다시 기억을 떠 올리게 만들어 준것도 좋다.

마지막으로 Selector 가 클래스 메서드를 색인화 하고, 객체를 생성하는 클래스 구조체를 가리키는 포인터인 isa 에 대해서 설명 해 둔게 정말 꿀정보이다. 이런 것들이 정말 중요한데, 알려주는 교제들이 드물거나 아니면 이해 못하게 비비꼬아 설명 하고 있으니.....

아무튼 3장 제목만 보고 그냥 건너 뛸려고 했는데, 건너 뛰지 않은게 다행이다.
그럼 4장으로 고고씽~

2013년 12월 11일 수요일

2장(시작해보자!)

iOS WRT 개발시에는 interface builder 를 사용하지 않고 했기 때문에, iOS 공부시 이 부분을 대충 넘어 갔었는데, 2장을 보면서 interface builder 사용법에 대해서 다시 한번 상기 시키는 계기가 되었다. 그리고 대충 넘어간 부분에 대해서도 확실하게 이해가 되었다.

확실 하게 이해하기 된 부분은 다음과 같다. 맞게 이해 한건지 ㅜㅜ

[단어정의]

  • 애플리케이션(Application) : 윈도우를 만드는 프로그램
  • 툴(Tool) : GUI 가 없는 프로그램. 명령행 유틸리티나 daemon이 전형적인 예.
  • 번들(Bundle) 또는 프레임워크(Framework) : 애플리케이션이나 도구에 쓰이는 자원이 들어 있는 디렉토리. 애플리케이션은 실행될 때 번들을 동적으로 불러온다. 일반적으로 애플리케이션은 컴파일될 때 프레임워크와 링크 된다.
[XIB 와 NIB 의 차이점]
예전에 iOS 책 보면서 NIB, XIB 파일이 같다는 글을 본 기억이 있는데, 틀린 말이 었다.(아니면 iOS 는 같은 건지...?)
  • XIB : 사용자 인터페이스 객체들과 이들의 연결 정보를 나타내는 XML
  • NIB : 애플리케이션을 빌드할 때 XIB 파일은 NIB 파일로 컴파일 됨.
즉 최종적으로 애플리케이션은 NIB 파일을 사용하게 된다.

[단어정의]
  • 아웃렛(outlet) : 객체를 가리키는 인스턴스 변수(즉, 인터페이스 빌더에서 생성한 객체를 가르키는 인스턴스 변수). 텍스트필드 아웃렛 등등
  • 액션(action) : 사용자 인터페이스 객체가 호출하는 메서드(버튼 눌렀을 때 호출되는 메서드가 액션)

[인터페이스 빌드를 위한 형타입]
인터페이스 빌더를 위해서 사용되는 타입들

  • IBOutlet : 아무것도 하지 않는 매크로
  • IBAction : void 와 같다.


그리고, 2장 마지막에 이벤트에 대한 그림이 2장 있는데, 이벤트 처리 되는 방식에 대해서 단순 명료하게 바로 이해 할 수 있는 그림이다. 

OSX 프로그램 처음 공부하는 초보자가 보기에는 정말 좋은 책인듯 싶다....굿!


2013년 12월 10일 화요일

1장(코코아:그게 뭐야?)

마공서가 아닌듯 싶다. 만족 한다. 하긴 4판 까지 나올 정도이니...

그 동안 그냥 무시하고 지나간 내용을 1장을 보고 알게 되었다. 다음과 같은 내용이다. 가장 기초 인거 같은데..흐...

  • 프레임워크 : 여러 클래스 가운데 함께 사용할 수 있는 클래스를 모아놓은 집합
정확하게 알지는 못했는데, 프로그램 하다 보니 OSX 에서 말하는 프레임워크가 평소에 말하는 프레임워크와는 틀리게 라이브러리 인걸로 유추 했었는데, 과연 그랬다.

그리고, 다음 중요한 한가지...

코코아는 다음 세 가지 프레임워크로 이루어져 있다고 한다.
  • 파운데이션(Foundation) - 객체지향형 프로그래밍 언어는 모두 표준 값에 관련된 클래스, 컬렉션 클래스, 유틸리티 클래스가 필요하다. 문자열, 날짜, 리스트, 스레드, 타이머 등이 파운데이션 프레임워크에 내장되어 있다.
  • 앱킷(AppKit) - 사용자 인터페이스에 관련된 모든 것은 앱킷 프레임워크에 있다. 윈도, 버튼, 텍스트 필드, 이벤트, 화면 표시 클래스 등이 그것이다. 이 프레임워크는 애플리케이션킷(ApplicationKit)이라고도 한다.
  • 코어데이터(Core Data) - 코어 데이터는 객체들을 파일에 저장하거나 파일로 저장한 객체를 메모리로 손쉽게 불러올 수 있도록 돕는다. 우리는 코어 데이터를 퍼시스턴스 프레임워크(Persistence Framework) 라고 부른다.
위의 3가지만 잘 사용하더라도 기본적인 어플리케이션은 만들 수 있을 것으로 유추 된다. 나머지는 특정 상황에 불러다 사용하면 되는 것이니...많은 것도 아니고 3가지 뿐이니 왠지 희망이 생기지 않은가? ㅋㅋㅋ

계속 2장으로 진행해 보도록 하자.

OSX Cocoa 공부 시작

OSX Cocoa 는 그냥 취미 삼아서 공부 할 예정이다. iOS 개발하면서 XCode 이용한 개발이 상당히 재미있었다. 결국 일반 맥용 어플을 만들어 보자는 생각 까지 미치어서 시도 해 보기로 한다.

구글링으로 교제를 찾아 보니, iOS 개발에 관련된 교제는 무진장 많은데 정작 OSX Cocoa 용 교제는 별로 없었다. 그러다가 한권 발견 한 것이 이것이다.


책의 목차만 보았는데, 가장 기본은 배울수 있을 거 같아서 회사를 통해서 구입 했다.
앞으로 공부 열심히 해서 개인적으로 필요한 어플 좀 만들어 보기로 하자. 파이팅!