2013년 12월 12일 목요일

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 용 교제는 별로 없었다. 그러다가 한권 발견 한 것이 이것이다.


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

2013년 11월 26일 화요일

macbook(매버릭스)에 sqldeveloper 설치

sqldeveloper 를 다운로드 받아서 그냥 실행하면 실행이 안되는데 다음 단계를 거치면 된다.
실행 안되서 당황 하지 말고 쉬우니 그냥 따라 하면 된다.


SUN 에서 배포하는 jdk 가 없어도 실행이 가능 하지만, 안전빵으로 sun 에서 배포하는 jdk 부터 설치 하도록 한다.

1, http://java.sun.com 에서 jdk 7u45 버전을 받는다.(2013년11월26일 현재 가장 최신 버전)
   mac osX 용이 있기 때문에 이것을 받으면 된다.

2. 다운받은 dmg 파일을 실행하면 인스톨 파일이 있기 때문에 더블클릭

3. 설치된 디렉토리는 다음과 같다.
    /Library/java/JavaVirtualMachines/jdk1.7.0_45.jdk 

4. sqldeveloper 사이트 에서 sqldeveloper 를 다운 받는다.(2013년11월26일 최신 버전 다운로드 받았음)

5. 다운 받은 gz 파일을 풀면 패키지 파일이 나온다.

6. 응용 프로그램 안으로 옮기고 난 다음, 바로 실행하지 말고 “패키지 오픈” 을 한다.
   그냥 실행하면 제대로 실행 안될 것임.

7. 터미널로 sqldevloper 패치지 안으로 들어간다.
    Contents/Resources/sqldeveloper/sqldeveloper/bin 디렉토리로 들어가면 됨.

8. sqldeveloper 파일을 실행 한다.
  파일 실행하면 "Type the full pathname of a J2SE installation (or Ctrl-C to quit), the path will be stored in ~/.sqldeveloper/jdk”
  이런 설명으로 j2se 경로를 넣으라고 하면 위에서 설치된 경로를 넣는다.(bin 디렉토리 바로 위까지)

  "/Library/java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home” 이것을 넣으면 된다.

9. 경로를 넣고 엔터 치면 sqldeveloper 실행 되고, 추후는 그냥 아이콘 클릭 하면 된다.


그나 저나 sqldeveloper 실행하면 미친듯이 쿨링팬 돌아가는 싸구려 회사 macbook...
요즘 회사에서 장비 문제 때문에 말이 많은데, 내년에는 내가 회사에서 받은 노트북 던져버리고 
더러워서 그냥 내가 mackbook 하나 사서 사용한다....젠장

근데, 저기까지 가면 회사 옮길 준비 끝인데...ㅋㅋㅋ

2013년 6월 14일 금요일

Request Payload 와 Form Data ??

맥북에 아파치 설정하고 테스트를 하니 기존에 생각하지도 못하고 그냥 지나가던 문제를 발견 했다. 후...이것 때문에 한 시간 삽질 한듯...

크롬의 개발자 디버그툴에서 request 시 네트웍 결과를 보면 POST 요청시에 넘겨주는 데이터가 어떤 때는 Form data 로 나오고 어떤때는 Request Payload(REST Client 를 사용하면 종종 이렇게 된다) 로 나온 걸로 기억이 난다.

그런데!
Request 시에 Content-Type 이 application/x-www-form-urlencoded 이 아니면 Post 데이터가 Request Payload 여서 현재 맥북 아파치설정에서 POST 데이터를 막고 있는듯 하다. 보안 때문에 그런듯...

이전에 ajax 로 post 데이터를 던졌는데, 특정 서버에서 데이터를 못 받았던게 기억이 나는데, 지금 보니 이게 원인으로 생각 된다.

REST Client 를 사용하려면 이거 풀어 줘야 할듯 한데....막막하다 ㅜㅜ
일단 Fetcher 라는 툴로 Content-Type 을 강제로 설정하고 진행을 하도록 하자. 시간 나면 아파치 설정 찾아 보도록 하자.(설마 아파치 설정이 맞겠지?)

추가1)
일단 아파치 설정으로 풀지 않고 php 에서 자체적으로 풀수 있는데,

$request_body = file_get_contents('php://input');

위의 코드를 사용하면 request payload 값을 가져 올 수 있다.


mysql foreign key 지정

출처: http://wory.tistory.com/181

Mysql은 3.23.43 이후 버전부터 지원.

테이블을 생성시 type=innodb 옵션을 주어야 한다. 그러기 위해서는 Mysql 자체에서 innodb를 지원하는지 확인한다.

mysql> show variables like 'have%';

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| have_bdb         | YES   |
| have_crypt       | YES   |
| have_innodb      | YES   |
| have_isam        | YES   |
| have_openssl     | NO    |
| have_query_cache | YES   |
| have_raid        | YES   |
| have_symlink     | YES   |
+------------------+-------+

부모 테이블 생성( type=innodb 옵션을 부여)

create table user_info(
no int not null auto_increment,
name varchar(20) not null,
primary key(no)
)engine=innodb;    # 또는 type=innodb;


자식 테이블 생성(type=innodb 옵션 부여 및,, index 및 외래키 설정)


/* 이용자 교육 접수 관리 */
create table user_education(
no int not null auto_increment,
user_no int not null,finish int default '1',
finish_no varchar(50),
want text,
index (user_no),    #외래키로 지정할 컬럼을 index로 지정한다.
foreign key(user_no) references user_info(no)
on delete cascade
on update cascade,
primary key(no)
)TYPE=innodb;         #또는 engine=innodb;

Mysql 5.x 버전대에서는 외래키로 지정할 컬럼이 index로 지정이 안되어도 테이블 생성이 되나 그 아래 버전은 인덱스를 지정해야만 외래키로 사용할 수 있다.

*외래키 옵션
on delete cascade : 부모의 해당키가 삭제되면  자동으로 삭제가 된다.
on delete set null : 부모의 해당키가 삭제되면 자동으로 null로 만든다.
on update cascade : 부모의 해당키가 갱신되면 자동으로 갱신된다.


외래키를 사용하여 테이블을 생성하다보면, 부모가 항상 먼저 생성이 되어 있어야 한다거나 참조 무결성등 외래키 제약 조건을 검사한 후에 문제가 없을 시 자식 테이블을 생성하게 되어 있다. 

하지만 다음과 같이 하면 외래키 검사를 하지 않고 생성이 된다.(물론 테이블 구조 및 참조 무결성이 확인된다는 100% 보장이 있다면 사용해야 겟지??)


mysql>set foreign_key_checks=0;   #외래키 검사를 하지 않는 옵션
... 외래키 수행하는 테이블 생성 및 수정 작업 등등등....
mysql>set foreign_key_checks=1;   #검사를 하는 옵션..


* 오류해결
ERROR 1216 (00000): Cannot add or update a child row: a foreign key constraint fails
: 자식 테이블에 외래키로 지정된 컬럼의 값이, 부모에게 없는 값일 때 (참조 무결성 제약 조건)
- 해결 방법 : 외래키 검사를 하지 않거나, 부모에게 없는 값을 갖는 자식 테이블의 컬럼값을 변경 또는 제거하면 된다.