Java와 JVM -2

Newbie's Log 2014. 10. 18. 23:42

지난 포스팅에서 Java는 "Write Once, Run Everywhere"라는 하나의 철학(물론,JRE에 기반하기 때문에 꼭 그렇지만은 않다;;;)으로 시작되어 발전된 개념인데 이 철학을 실현하기 위해 Java는 아래와 같은 네 가지의 상호 연관된 기술을 엮어놓았다고 설명을 했다 


- The Java Programming Language

- The Java Class File Format

- The Java Application Interface

- The Java Virtual Machine(JVM)


오늘은 이 4가지 기술 중 The Java Programming Language와 The Java Class File Format 에 대해 자세히 설명하고자 한다. 


Java Programming Language


보통 Java라는 언어를 언급할 때 가장 자주 등장하는 것이 바로 객체지향이라는 단어이다. 그러나 프로그램 언어 측면에서 Java의 가장 큰 특징은 무엇보다 생산성의 극대화와 동적인 면에 있다고 생각한다. 


java에는 Multi-Threading,구조화된 에러 핸들링, Garbage Collection, Dynamic Linking,Dynamic Extension 등의 기술

들이 있지만 이 중에서 방점을 찍고 싶은 기술은 다름아닌  Dynamic Linking이다. Java의 Class파일은 엄밀히 말하면,저번 포스팅에서도 말했듯이 실행 가능한 형태로 변경된 것이 아닌 JVM이 읽을 수 있는 형태로 번역된 것으로 이해할 수 있다. 이것은 JVM위에서 다시 실행 가능한 형태로 변형된다. 실행을 위한 Linking작업은 그때 일어나게 된다. 

Class파일은 실행시 Link를 할 수 있도록 Symbolic Reference만을 가지고 있다. 이 Symbolic Reference는 Runtime시점에서 메모리상에서 실제로 존재하는 물리적인 주소로 대체되는 작업인 Linking이 일어나게 되는 것이다. 이러한 Link작업은 필요할 때 마라 동적으로 이루어지기 때문에 이를 가리켜 Dynamic Linking이라고 한다. 


이 Dynamic Linking이라는 기술 덕분에 Class파일의 크기를 작게 유지할 수 있다. 

이것은  Java의 철학을 구현한다는 의미로 확대 된다. Java는 플랫폼에 독립적이기 때문에 Compile된 파일만 있으면 그대로 수행이 가능하다. 또한 Network을 통해 객체를 전송하고, 배포하는데 있어 파일의 크기는 작을수록 유리하다는 것은 충분히 예상 가능한 것이다. 그렇기 때문에 Compact한 Class파일은 Java의 철학을 실현하는데 있어 필수적인 요소가 되고 있다. 

하지만 무엇보다 프로그램의 언어로서 Java가 지니고 있는 특징은 생산성을 극대화 한다는 데 있다. 

Java가 생산성을 가질 수 있게 된 것은 역시 Runtime Memory를 직접 핸들링 하지 않기 때문이다.Java사용자는 Runtime Memory를 핸들링 해서도 안되고, 또한 할 수 있는 방법도 전혀 없다는 의미이다.(물론 핸들링을 할 수 있지만 왠만하면 사용하지 말라고 한다 ;;)이를 위해 Java는 Garbage Collection과 같은 기술을 채용했고 이는 개발 및 운영에 소요되는 시간과 노력을 많이 단축시켜 주었다. 



Java Class file format


Java는 개발자가 작성한 프로그램을 Compiler를 통해 Class파일로 재생성되는 과정을 거치게 된다. 

이렇게 생성된 Class파일은 다음의 네 가지 특징을 가지게 된다. 


-Compact한 형태 

-Bytecode로의 변경

-Platform 독립적

-Network Byte Order의 사용 


Java의 철학을 가장 두드러지게 대변하는 것이 바로 이 Class File Format이다. Class 파일은 Bytecode를 Binary형태로 담아놓는 것이라 할 수 있다. 

Bytecode는 JVM이 읽을 수 있는 언어를 의미한다.  Bytecode는 Java의 철학을 실현하는 중요한 요소들 중 하나이다. Bytecode가 JVM을 위한 언어라는점, 모든 Code가 Bytecode의 Binary형태로 실체화된 Class라는 것으로 배포된다는 점은 Platform의 제약을 뛰어 넘을 수 있게 되었다는 것을 의미하기 때문이다.  JVM이 Unix에 설치되어 있건,Windows에 설치되어있건 상관없이 Bytecode는 동일하게 수행된다. 이것을 다르게 표현하면 'Platform 독립적이다'라고 하는 것이다. 


또한 Bytecode는 Source Code를 단순히 JVM의 언어로 번역해 놓은 것이기 때문에 Source Code와 비슷한 크기를 가지고 있다. Compiler를 통해 실행파일로 변경되는 과정에서 Library들을 포함하는 C++과 같은 언어에 비한다면 아주 작은 크기라 할수 있다.  Class파일에는 라이브러리를 포함하지 않고, 단지 Symbolic Reference만을 가지고 있는데 Symbolic Reference는 참조하고자 하는 대상의 이름만으로 참조관계를 구성하는 것을 의미한다.  Class파일이 JVM에 올라가게 되면 Symbolic Reference는 그 이름에 맞는 객체의 주소를 찾아서 연결하는 작업을 수행한다. 이러한 과정을 Dynamic Linking이라 하는데 이것덕분에 Class 파일은 Compact한 형태를 유지 할 수 있는 것이다. 


마지막으로 Java Class file format 는 Network Byte Order를 사용한다는 것이다. Network Byte Order는 서로 다른 계열의 CPU끼리 데이터를 전송 받을 때의 문제점을 해결하기 위해 정해진 일종의 약속이다. RISC계열의 CPU를 사용하는 Unix머신에서 Pentium CPU를 장착한 Windows로 데이터를 보내는 것을 가정하자. Byte Order를 고려하지 않고 보낸다면 서로의 데이터는 주소가 반대로 되어 있어 제대로 전송되지 않을 것이다. 그렇기 때문에 Network를 통해 데이터를 전송할 때는 통일된 방식을 따르기로 약속을 했는데 이것이 바로 Network Byte Order 이다. Nerwork Byte Order는 Big Endian을 사용하기로 약속이 되어 있다. 

Class File Format은 Network Byte Order를 사용하기 때문에 Big Endian 방식을 사용하게 된다. 


이렇게 2가지 기술에 대해 설명해 보았다.

다음 포스팅에는 The Java Application Interface, The Java Virtual Machine(JVM)에 대해 설명하도록하겠다. 


참고

Java Perfomance Fundamental(김한도 저) 

Posted by 알 수 없는 사용자
,

Java와 JVM -1

Newbie's Log 2014. 10. 6. 22:35


회사에 입사하기전 여러군데에서 면접을 보면서 간혹 java에 특징에 대해 말해보라는 질문을 받곤 했었다. 

그러면 나는 객체지향 프로그래밍 언어의 한 종류이며, 플랫폼에 독립적어서 어디서나 실행된다는 말을 내뱉곤 했다. 단순히 java기본서에서 외워서 대답하던 것이었는데 나는 그것을 단순히 외우기만 할 뿐 왜 플랫폼에 독립적인지 그 이유에 대해선 따로 생각하지 않고 있었다. 회사에 입사하고 난 후에도 말이다. 


개발자로서 일을 한지 8개월이 되가고 있는 지금, 내가 java를 이용해서 개발을 하고 있는데 나는 java에 대해서 얼마나 알고 있을까 이런 생각이 들었다. 그래서 한 개발자 커뮤니티에서 운영하는 java와 jvm을 주제로 하는 스터디에 참여하게 되었다. 스터디를 하면서 나 혼자 알고 있기엔 너무나 아까운 내용도 많고, 공부한 내용도 정리 할겸 포스팅을 하려고 한다. 


Java는 단순히 프로그래밍 언어라는 틀에 가두기에는 너무나도 큰 개념이다 

"Write Once, Run Everywhere"라는 하나의 철학(물론,JRE에 기반하기 때문에 꼭 그렇지만은 않다;;;)으로 시작되어 발전된 개념인데 이 철학을 실현하기 위해 Java는 네 가지의 상호 연관된 기술을 엮어놓았다. 


- The Java Programming Language

- The Java Class File Format

- The Java Application Interface

- The Java Virtual Machine(JVM)


위에 4가지의 기술들을 살펴보기전에 우리가 Java로 프로그램을 만들어 수행하는 과정에 대해 알아보자.


우리가 Java Source Code를 작성하면 java라는 확장자를 가진 파일로 만들어지게 된다.

Java Source파일은 단순히 코드만을 담고 있는 파일일 뿐, 이 자체로는 수행 불가능하므로 수행하도록 하기 위해서는 Class 파일의 형태로 변경해 주어야 한다. 이 작업을 Compile이라고 한다. 


Java에서 Compile은 보통 JDK에 내장되어 있는 'javac'라고 하는 Compiler를 이용하여 수행한다




이 작업을 수행하면 Source File과 같은 이름이지만 class라는 확장자를 가지는 Binary파일이 생성된다. 

이 class라는 확장자를 가진 파일은 수행이 가능한 형태의 파일이다. exe파일처럼 수행할수 있는 형태가 아니라 단순히 수행 가능한 형태라는 말이다. 

이것을 수행하기위해서는 적어도 JRE(Java Runtime Environment)라는 것이 필요하다. 물론 JDK도 가능하다. 


이 프로그램을 수행하기 위해서는 ' java'라는 프로그램을 호출하여 우리가 생성한 Class파일을 인수로 제공하면 된다. 이때  'java'라고 하는 프로그램은 Java실행 환경에 Class파일을 가지고 들어가는 역할을 하게 된다. 이러한 수행과정을 좀 더 자세히 살펴 보면 다음과 같다. 'java'라고 하는 프로그램은 Java Virtual Machine을 하나의 프로세스로 올리는 작업과 함께 Class파일의 로딩도 수행한다. 

그 이후 Class파일을 분석하여 JRE내에 있는 Java Application Program Interface(Java API)와 더불어 프로그램을 수행하도록 하는 것이다. 


java라는 확장자를 가진 소스파일로 Class파일로 생성하는 시점을 Compile Time이라고 하고, 앞서 생성된 Class파일을 수행하는 시점을 RunTime이라고 한다. 


앞서 언급한 4가지 기술


- The Java Programming Language

- The Java Class File Format

- The Java Application Interface

- The Java Virtual Machine(JVM)


들이 아래의 그림에 모두 포함되어 있다. 




처음 프로그램을 작성할때는 Java Programing Language이고, 작성한 프로그램을 Compile하면 Java Class File Format으로 변경된다. 이를 수행하기 위해서는 Java Virtual Machine을 구동시며 Class파일을 로딩한다. 

JVM으로 로딩된 프로그램은 단독으로 수행되는 것이 아니라 Java Application Pragramming Interface와 동적으로 연결되어 실행되는 것이다.


다음포스팅에서는 각각의 4가지 기술들에 대해 자세히 알아보는 시간을 가지겠다.

그때까지 See you soon!


참고

Java Perfomance Fundamental(김한도 저) 


Posted by 알 수 없는 사용자
,

크롬 웹스토어에는 참 다양한 앱들이 있다. 설치 및 삭제가 쉽고 브라우저 하나만 있으면 웬만한 작업들을 할 수 있다는 컨셉이 가장 큰 메리트인것 같다.


오늘은 크롬 브라우저의 확장 앱중의 하나인 SecureShell에 대해 소개해 보겠다. 

이름에서부터 알 수 있듯이 이 앱은 터미널 에뮬레이터인 동시에 SSH클라이언트 기능을 가지고 있다.

세부정보 
Terminal emulator and SSH client.

Hterm is an xterm-compatible terminal emulator and stand-alone ssh client for Chrome.  It uses Native-Client to connect directly to ssh servers without the need for external proxies.

Hterm is currently under active development and has missing functionality and known bugs.  You can view the list of open issues in the Chromium OS bug tracker listed in the Support link.


PC에 putty를 따로 설치 하지 않아도 브라우저만 있으면 바로 실행 가능하기에, 회사 밖에서 작업시 애용하는 프로그램이다.

자잘한 버그들이 있지만, 눈감아 줄 정도이므로 사용을 적극 추천한다. (이전까지는 서버에서 뿌려주는 한글을 읽지 못했는데 최근 업데이트 이후 한글이 표시가 된다!!)


크롬 브라우저에서 아래의 링크로 SecureShell확장 프로그램을 설치해주고 실행할 수 있다.

https://chrome.google.com/webstore/detail/secure-shell/pnhechapfaindjhompbnflcldabbghjo?hl=ko



사용방법은 매우 간단하다.

New Connection을 눌러주고 입력창에

사용자 ID@호스트명

이렇게 적어주고(특정 포트명이 있으면 port항목에 입력) 연결버튼을 누르면 일반 터미널 사용하는것과 똑같이 사용 가능하다.


사실 putty가 익숙하고 부가기능도 많아서 굳이 무거운 크롬 브라우저에 이 앱을 설치해야할 이유를 찾기 힘들수도 있겠지만, 오히려 브라우저 한개로 개발자들의 작업도 가능하다는 점을 봤을때 충분히 사용해볼만한 가치가 있는 프로그램인 것같다.


다음번에 또 유용한 확장 프로그램을 발견하면 소개해보기로 하며, 이번 포스팅을 마친다.

'Newbie's Log' 카테고리의 다른 글

Java와 JVM -2  (0) 2014.10.18
Java와 JVM -1  (0) 2014.10.06
SAR(system activity reporter) 파일로 시스템을 엿보자.  (0) 2014.10.04
초보 개발자의 6개월, 그리고 좌충우돌 실수담.  (0) 2014.09.15
Unity 3D란?  (0) 2014.08.29
Posted by 알 수 없는 사용자
,

시스템 관리 툴 ( System Activity Reporter )

sar는 Solaris운영체제에서 파생된 시스템 모니터 커맨드이다.
주로 CPU activity, memory/paging, device load, network과 같은 system loads를 기록한다.


sar에서 모니터링 가능한 항목은 다음과 같다.

    • I/O 전송량
    • 페이징
    • 프로세스 생성 숫자
    • 블락 디바이스 활동
    • 인터럽트
    • 네트워크 통계
    • run 큐 및 시스템 부하 평균
    • 메모리와 스왑 공간 활용 통계
    • 메모리 통계
    • CPU 이용도
    • 특정 프로세스에 대한 CPU 이용도
    • inode, 파일, 기타 커널 테이블에 대한 상태
    • 시스템 스위칭 활동(context switch)
    • 스와핑 통계
    • 특정 프로세스 통계
    • 특정 프로세스의 자식 프로세스 통계
    • TTY 디바이스 활동


전체 항목에 대하여 바이너리를 텍스트로 풀려면 
다음의 명령어로 풀 수 있다.

LC_ALL=C sar -A -f  /var/log/sysstat/sa날짜

그림 1.을 보면 텍스트로 나열된 시스템 정보를 볼 수 있다.

<그림 1. 텍스트 버전>


그러나 특정 시간대의 시스템 정보를 보는것이 아니라면 텍스트 파일로 하루치 또는 여러 날짜의 정보를 한눈에 보기 힘들다ksar프로그램을 사용하면 이 정보들을 그래프로 한번에 볼 수 있다.

1. 먼저 ksar프로그램을 다음의 링크에서 다운받는다.

http://sourceforge.net/projects/ksar/

2. 적절한 곳에 압축을 풀고 kSar.jar파일을 실행시킨다.


3.1 미리 다운받아 놓은 sar파일이 있다면 로드하여 볼 수 있다. 

3.2. 또는, 원격 서버 실행으로 시스템에 바로 접근하여 볼 수 있다.

이때 기본 command가 sar -A로 되어있기 때문에 오늘 00시부터의 정보를 볼 수 있다.
다른 날짜의 데이터를 보려면
sar -A /f /var/log/sa/sa날짜 로 볼 수 있다.


4. 로드된 파일의 정보를 왼쪽 탭에서 클릭하여 볼 수 있다.




이처럼 그래프와 요약 정보들을 한눈에 볼 수 있다. ksar를 이용하면 단순 텍스트 파일보다 보기 쉽고, 시스템 분석에도 용이하게 사용될 수 있다. 

리눅스 시스템이 뭘하고 있었나 궁금하다면 ksar를 사용해보는것을 추천한다. 어렵게만 느껴질 수 있는 리눅스 시스템 모니터링을, 툴을 사용하면 훨씬 쉽고 간단히 사용 할 수 있음을 체험할 수 있을것이다.



reference: 

http://en.wikipedia.org/wiki/Sar_(Unix)

http://jmnote.com/wiki/KSar_%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95

'Newbie's Log' 카테고리의 다른 글

Java와 JVM -1  (0) 2014.10.06
크롬브라우저로 터미널을 사용해보자 - SecureShell  (0) 2014.10.04
초보 개발자의 6개월, 그리고 좌충우돌 실수담.  (0) 2014.09.15
Unity 3D란?  (0) 2014.08.29
Scala Tutorial part 2  (0) 2014.08.08
Posted by 알 수 없는 사용자
,

입사한지 엊그제 같았는데, 돌아오빈 어느새 6개월이 훌쩍 지나갔다.

처음 두달동안은...

코드 리팩토링, 테스트 케이스 작성, 각종 프레임 워크들, 잘 알지 못했던 DB쿼리들 그리고 php를 접했다. 
이것들은 마치 퍼즐 조각들처럼 나뉘어서 내 머리속에서 굴러다녔다. 
이 조각들을 언제, 어떻게 사용해야 할지 참 궁금했다.
사실, 이 퍼즐 조각들을 내가 쓸 일이 있을까도 의심이 갔었다.


6월쯤 나에게 개발 및 운영 업무가 하나 떨어졌다.
오픈소스로 나와있는 툴을 커스터마이징 하는것이었다.
최근에 배우기 시작한 php를 사용해야 한다는것이 조금은 부담스러웠지만, 무작정 덤벼봤다.
파일이 너무 많아서 처음엔 어디를 어떻게 고쳐야 할지 감도 안왔다. 
그때 내 느낌을 표현하자면, Jackson Pollock의 그림을 본 것 같은 느낌이었다.

< Convergence, 1952, Jackson Pollock >

아직도 소스 파일들을 보면 울렁거리긴 하지만, 우여곡절끝에 필요한 기능들에 대해 커스터마이징을 끝냈다. 
일단 사용자들이 사내 개발자들이라서 크게 부담은 없었다. 그리고, 신기했다. 내손이 닿은 툴을 사람들이 사용하고 있다니... 뿌듯했다.

7월쯤에는 운영업무를 할당받고, 초반에 경험했던 새로운 지식퍼즐들을 붙여나가볼 수 있는 기회가 생겼다. 
새로운 일에 조금씩 적응해 나아가면서 운영을 시작하였다.
사수님께서 적당한 레벨의 비슷한 업무들을 알기쉽게 설명해 주셔서, 슬슬 자신감도 붙고, 일하는것도 어렵지 않았다.


운영업무는 사람들과 대화도 많이 해야하고, 원하는것을 전달해줘야하는 일이었다. 사람들이 내가 잘 모르는 문제로 찾아오면 부담이 되기도 하고, 부담스럽기도 했다. 선배님들의 조언을 귀담아 들으며 어리버리하게 업무를 해나아가는동안 시간은 점점 지나갔다.

점점 운영업무가 늘어나고, 요구사항들이 늘어가면서, 슬슬 실수를 하기 시작하였다.
자잘자잘한 실수가 점점 내 스스로를 옥죄었다. 그날그날 털어버렸어야할 실수가 더해져서 결국엔 나 스스로를 냉철하지 못하게 만들었다. 

결국엔 사고를 치고 말았다. 설정파일을 제대로 확인하지 않고 올려서 20~30분간 서비스가 안되는 사고였다. 머리가 하얘지고 멘붕을 겪는 와중에 사수님께서 해주신 말씀은 이런 사고를 수습하기 위해서는 주변상황에 휩쓸리지말고 문제점을 찾아서 침착히 해결해 나가야 한다고 하셨다. 정말 그랬다. 사고를 친 사람이 나인데, 이 상황을 정리할 사람도 나였던 것이다. 사수님의 도움을 받아서 서비스는 곧 정상으로 돌아갔고, 나는 그 후 모니터에 "침착해!"라는 쪽지를 붙여놓았다. 이후에 사고가 나더라도 이 쪽지를 보고 내 마음을 진정시키고, 또 주변에서 업무로 찾아오는 사람들이 한번씩 읽어줄때마다 나 스스로 침착하고 대범하게 일 처리 할 수 있도록 단련시켜나갔다. (하지만, 그 후에도 사고는 많이 쳤다 ㅜㅜ)

누구나 실수는 다 하기 마련이다. 물론 실수를 줄이기 위하여 꼼꼼하게 일처리 하는것이 best지만, 같은 실수는 하지 않기 위하여 노력하는 자세가 더 중요한 것 같다. 좀더 성장하기 위한 코스를 밟고 있다는 느낌과, 6개월동안 일하며 경험한 실수(라고 쓰고 사고라고 읽는다) 를 바탕으로 좀더 진화해나가는 나를 만나고 싶다.

  

 


Posted by 알 수 없는 사용자
,

Unity 3D란?

Newbie's Log 2014. 8. 29. 10:29

전부터 게임에 관심이 있어 살펴보던중에 Unity 3D(이하 Unity)를 알게 되었다. 

Unity는 2D, 3D 게임 엔진이다. 게임 엔진은 게임 개발에 필요한 여러 기능을 제공하여, 쉽게 게임을 만들 수 있게 돕는다. 게임 엔진 중 Unity는 쉽게 배워 사용하기 용이하며, 빠른 개발을 도와주기 때문에 최근 주목받고있는 아이 이다.

실제로 Unity 개발사가 말하는 "게임 개발의 민주화"라는 표어는 "고성능 개임 엔진의 높은 가격으로인한 부담으로 게임을 개발하려는 개인 또는 학생이 접하기 어려운 현실에서 벗어나, 누구나 쉽게 게임을 만들 수 있는 훌륭한 게임 엔진을 제공하자"라는 것이다.

앞서 Unity의 장점을 크게 말했지만 이번엔 자세히 항목을 나누어 살펴보자.


  Unity 장점 


Unity는 2001년에 덴마크에서 처음 개발이 시작되어, 2005년에 Apple의 WWDC에서 Unity1을 선보였다. 그 이후로도 지속적인 업그레이드를 하며 많은 이들의 사랑을 받으며 크게 성장하였다. 

2012년도 Apple의 AppStore에 출시된 모바일 게임중 53.1%가 Unity로 개발되었을 만큼 정말 폭발적인 인기를 끌고있다해도 과언이 아니다! 이처럼 Unity가 폭발적인 인기를 끌게된 이유를 꼽자면 다음과 같다.


1. 멀티 플랫폼 지원

멀티 플랫폼 지원이 Unity의 가장 큰 장점이라 할 수 있다. 해당 라이선스만 보유하고 있다면 매우 간단하게 플랫폼을 변경할 수 있다. Unity는 다음과 같은 플랫폼을 지원하고 있다.

  • PC, Mac, Linux
  • iOS, Android, BlackBerry, Windows Phone 8, Tizen(예정)
  • Web Player (IE, Chrome, Firefox, Safari)
  • Smert TV


2. 통합 개발환경 제공

스테이지 디자인, 스크립트 코딩, 테스트, 빌드까지의 개발 프로세스가 모두 Unity안에서 이루어 지므로 매우 높은 생산성을 자랑한다.


3. 합리적인 가격 정책

Unity는 크게 1)베이직 버전2)프로 버전으로 나뉘어 있다. iOS 및 Android와 같은 모바일 애드온도 베이직 버전과 프로 버전으로 세분화 되어 있다.

베이직 버전은 무료로 제공되고 있으며, 프로 버전의 기능이 필요할 때 별도의 라이선스를 구매해야 한다.


4. 빌트인 미들웨어

유니티는 다음과 같이 개발에 필요한 여러 미들웨어를 탑재하고 있다.

지형 엔진

지형을 디자인할 수 있는 에디터를 제공하며, 여러 지형물 표현이 가능하다. 또한, 생성한 지형 데이터를 외부,내부로 보내거나 임포트할 수 있다.

라이트맵핑

실감 나는 조명 효과를 생성하는 비스트 엔젠이 탑재되어 있다.

오클루젼 컬링

오클루젼 컬링은 카메라의 시야를 기준으로 전방의 큰 물체 때문에 가려지는 객체들을 렌더링 처리에서 제외하여 속도를 높이는 기술로, 엄브라 엔진이 바재되어 있다.

3D 사운드 엔진

게임 사운드로 다양한 음향 효과 연출이 가능하다.


5. 커뮤니티 활성화

오픈 커뮤니티에서는 많은 메뉴얼과 체계적인 예제 소스를 제공하며, 동영상 튜토리얼 또한 제공하고 있어 유니티 학습에 편리하다. 


6. 에셋스토어 운영

에셋은 자산이라는 뜻으로 유니티에서 에셋은 게임 제작에 필요한 모든 요소를 말한다. 즉, 3D 모델, 텍스쳐이미지, 사운드, 파티클 효과, 유틸리티 등을 유니티에서는 에셋이라 한다. 에셋스토어는 이러한 에셋을 사고 팔수있는 오픈마켓이며, 무료로 되어있는 에셋도 있다.


마무리하며..

 이번 포스팅에서는 유니티에 대한 간단한 특징을 살펴보았다. 다음 포스팅에서는 유니티의 설치 및 인터페이스에 대해 알아보도록 하겠다.




출처   절대강좌! 유니티4 위키북스 이재현 지음

Posted by 알 수 없는 사용자
,

오늘은 스칼라 환경셋팅에 대해 포스팅 하도록 하겠다.

스칼라 언어는 유닉스나 윈도우시스템 어디던지 설치될수 있다. 


스칼라를 설치하기 전에, 먼저 여러분의 컴퓨터에 설치된 자바버전이 1.5이상인지 확인해 봐야 한다. 


스칼라 환경셋팅에 대한 포스팅은 우분투 14.04를 기반으로 하겠다. 


STEP 1 : java 셋팅.


여러분의 컴퓨터에 설치된 자바버전이 1.5이상인지 확인해 보고 JAVA_HOME 환경변수를 셋팅하고 PATH 변수에 jdk 빈 디렉토리를 추가한다. 


잘 되었다면 명령창에 java -version 을 입력하고 enter를 치면 다음과 같은 내용을 볼것이다.




다음 java 컴파일러가 설치되었는지 확인 해 본다.  javac-version을 치면 다음과 같은 내용을 볼것이다.





STEP 2 : scala 셋팅.


우분투에서 스칼라를 설치하는 방법은 스칼라 다운로드 페이지에서 다운로드 받아 설치할 수도 있는데, 나는 우분투에서 간단한 명령으로 설치하였다.

 apt-get install scala

위와 같은 명령을 치면 스칼라가 설치된다.


이제 스칼라 버전을 확인해 보자.






나 같은 경우는 버전이 2.9.2이다. 


STEP 3 : scala 간단 테스트.


이제 설치를 해봤으니 스칼라 간단 테스트를 해보자.


아래와 같은 명령을 날리면  




scala>


이런식으로 나온다.  이제 Hello, Scala!를 출력해 볼까?





정상적으로 출력됐다면 위에 과정을 성공한 거다!.


다음에는 스칼라 문법에 대해 소개 하는 글을 가지고 돌아오겠다.


그때까지 see you soon~!


'Newbie's Log' 카테고리의 다른 글

초보 개발자의 6개월, 그리고 좌충우돌 실수담.  (0) 2014.09.15
Unity 3D란?  (0) 2014.08.29
Scala Tutorial part 1  (0) 2014.08.07
MVC(Model, View, Controller) 패턴에 대하여.  (0) 2014.08.07
AngularJS Tutorial  (0) 2014.07.29
Posted by 알 수 없는 사용자
,

회사업무중 play framework를 사용할 계기가 있어 알아보던중 scala라는 언어를 알게 되었다.


그리고 급 관심이 생겼고 scala에 대해 공부하기 시작했다.


이를 바탕으로 오늘 포스팅은 scala에 대한 간단한 소개를 하려고 한다. 


스칼라 소개는 tutorialpoint.com의 scala tutorial문서를 기반으로 번역한 글이다.


scala는 Scalabla Language의 줄임말로 하이브리드한 함수형 프로그래밍 언어이다. 


Martin Odersky가 개발했고 2003년에 처음 배포되었다. 


scala는 객체지향 언어와 함수형 언어를 통합한 것이 특징인데 JVM(자바 가상머신)위에서 컴파일 된다.


비즈니스 응용프로그램에 의지하는 많은 회사들이 개발생산성과 어플리케이션의 확장성, 전체적인 신뢰성을 끓어올리기위해 스칼라로 전환하고 있다.


여기 어플리케이션 개발자들이 스칼라를 우선적으로 선택하게 만드는 스칼라의 중요한 특징들이 있다.


1.scala는 객체 지향적이다.


scala는 모든 value들이 객체인점에서 보면 순수한 객체지향 언어이다. 

객체의 타입과 행동들에 대한 설명은 다음 포스팅에서 설명하도록 하겠다.

클래스는 다중상속을 위한 깔끔한 대체물로써 서브클래스와 유연한 mixin기반의 혼합 메카니즘으로 확장된다.-->이 말은 번역하면서도 먼말인지 몰라 영어로 추가해서 써 놓았다.

(Classes are extended by subclassing and a flexible mixin-based composition mechanism as a clean replacement for multiple inheritance.)


2.scala는 함수적이다.


또 scala는 모든 함수가 value이고 모든 value가 객체이며 그 결과 모든 함수가 객체인 면에서 함수형 언어이다.

scala는 익명의 함수를 정의하기 위한 경량화된 문법을 제공하고, 고차 함수(higher-order function)를 제공한다.

scala는 함수중첩을 허용하고 currying을 제공한다. 이러한 개념은 다음포스팅에서 자세히 설명하도록 하겠다.


3.scala는 statically typed형 언어이다.


scala는 다른  statically typed형 언어(java,c++,c)와 다르게 쓸모없는 타입 정보를 제공해주지 안는다.

대부분의 경우의 type들을 구체화해 줄 필요가 없으면 반복할 필요도 없다.


4.scala는 jvm위에서 돌아간다.


scala는 java byte code로 컴파일 되면, jvm에 의해 실행된다. 이 의미는 scala와 자바는 공통된 런타임 플랫폼을 가지고 있다는 있다는 것을 의미한다. 그래서 여러분은 자바에서 scala로 쉽게 이동할 수 있다

scala 컴파일러는 scala 코드를 java byte code로 컴파일 하는데 이것은 scala 명령어로도 실행될 수 있다. scala 명령어는 자바명령어와 비슷한데, 즉 컴파일된 scala 코드를 실행시키는 것이다.


5.scala는 자바코드를 실행할 수 있다.


scala는 scala안에서 java sdk의 모든 클래스와 자바클래스,자바오픈소스프로젝트를 사용할수 있게 해준다.



Scala vs Java


Scala는 자바와 다른 몇가지 다른 특징들이 있다.


-모든 타입이 객체

-타입 추론

-중첩 함수 

-함수는 객체

-Domain specific language(DSL) 지원

-Traits.?--> 이건 더 알아봐야 겠다.

-Closures.? --> 이것도.

-Erlang의 영감을 받은 동시성 지원?? -->이것도.



Scala Web Frameworks


Scala는 엔터프라이즈 웹 어플리케이션으로 어디서나 중요하게 사용되고 있다. 

아래가  인기있는 Scala 웹프레임워크가 있다.


1.The Lift Framework

2.The Play Framework

3.The Bowler Framework


scala를 간단하게 소개해 보았다.

다음 포스팅때는 scala 환경을 셋팅하는 것을 주제로 포스팅 하도록 하겠다.

그때까지 see you soon~!




'Newbie's Log' 카테고리의 다른 글

Unity 3D란?  (0) 2014.08.29
Scala Tutorial part 2  (0) 2014.08.08
MVC(Model, View, Controller) 패턴에 대하여.  (0) 2014.08.07
AngularJS Tutorial  (0) 2014.07.29
TDD를 위한 Library: Toast - Unit Testing for CodeIgniter  (0) 2014.06.22
Posted by 알 수 없는 사용자
,

오늘은  Software Design Pattern중에서 Architectural Pattern의 하나인 MVC패턴에 대하여 포스팅을 하겠습니다.


1. MVC란??

MVC패턴은 Model, View, Controller의 약자입니다.

Model은 모든 데이터의 상태와 로직을 처리합니다.

View는 모델이 가진 데이터를 표현하는 방법을 제공합니다.

Controller는 사용자로부터 받은 정보를 모델에게 상태 변경 요청하고 필요에 따라 뷰의 상태 변경을 요청합니다.




웹 어플리케이션에 MVC 패턴을 적용시켜보자면,



위와 같은 그림으로 설명 할 수 있습니다.


2. MVC의 장점?

>> 유연하고 확장하기 쉽다

View와 Model간의 간섭을 피하고 Controller가 중간 관리를 하는 역할을 하여 간접소통을 통해 좀더 유연한 구조를 설계할 수 있는것이 MVC의 가장 큰 장점입니다.


3. MVC의 단점?

>> 복잡한 구조로 보일 수있다.

>> Model과 View의 완벽한 분리가 어렵다.

기본기능 설계를 위해 클래스들이 많이 필요하기 때문에 복잡할 수 있습니다. 이것은 속도가 중요한 프로그램에서는 권장 되지 않을 수 있습니다. 또한 설계시간이 오래 걸리고 숙련된 개발자가 필요합니다. 
가장 큰 문제점은 Model과 View의 의존성이 완벽히 분리 할 수 없기 때문에 패턴이 모호해질 수 있고 변형이 올 수 있습니다.


4. 대안방안

Model과 View의 완벽한 분리가 이루어질 수 있으면서 MVC의 장점을 갖고있는 MVP(Model, View Interface, Presenter)라는 패턴을 사용 하면 됩니다.


MVP 패턴은 다음번 포스팅에서 다뤄보겠습니다.


Reference:

http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

http://bomb0730.tistory.com/19

http://0zine.tistory.com/57

http://lefigaro.tistory.com/39





'Newbie's Log' 카테고리의 다른 글

Scala Tutorial part 2  (0) 2014.08.08
Scala Tutorial part 1  (0) 2014.08.07
AngularJS Tutorial  (0) 2014.07.29
TDD를 위한 Library: Toast - Unit Testing for CodeIgniter  (0) 2014.06.22
Apache VirtualHost에 대해 알아보자  (0) 2014.06.19
Posted by 알 수 없는 사용자
,

AngularJS Tutorial

Newbie's Log 2014. 7. 29. 10:39



이번 포스팅은 AngularJS에 대해 알아보기 위해 주요 용어 소개 및 간단한 예제를 설명한다.

Angular에 대해 더 자세히 알아보고 싶다면 Angular 홈페이지의 여기를 참조하고, 테스트 환경 마련은 이전 포스트인 여기를 참조하길 바란다.

이제 본격적으로 AngularJS가 무엇인지, 어떻게 사용하는지 간단하게 알아보도록 하자.


AngularJS 란?

AngularJS는 오픈 소스 웹  어플리케이션 프레임워크이다. 사용시 적은 소스 코드로 쉽고 빠르게 웹 어플리케이션을 만들수있어 최근 많은 관심을 받고있는 추세이다.


AngularJS 용어 소개

AngularJS에대한 이해를 돕기 위하여, 다음 4가지에 대해 간단하게 설명하고자 한다.

1. Model

보통 JSON으로 표현되는 어플리케이션의 특정한 데이터 구조를 말한다.

2. View

HTML 템플릿을 통해 모델을 비춰낸다.  이는 Model이 변할때 View 또한 갱신된다는 의미이다. 

3. Controller

말 그대로 무언가를 조정하는 것이다. 여기서 무언가란 데이터를 의미한다. 즉, 데이터를 조정한다. 

4. Scope

Model과 View를 연결하며, Controller로 데이터를 보낸다.


AngularJS Example

간단한 AngularJS의 예제를 통하여 AngularJS에 대해 좀더 설명하도록 하겠다.

예제는 아래 그림과 같이 Text가 하단에 출력되는 것이다.  예제를 위한 환경이 모두 구성되어있다는 전제하에 다른 설명없이 코드에 대해서만 설명하도록 하겠다.

Index.html : 

<html ng-app="phonecatApp">
<head>
  ...
  <script src="bower_components/angular/angular.js"></script>
  <script src="js/controllers.js"></script>
</head>
<body ng-controller="PhoneListCtrl">

  <ul>
    <li ng-repeat="phone in phones">
      {{phone.name}}
      <p>{{phone.snippet}}</p>
    </li>
  </ul>

</body>
</html>

1. ng-app : AngularJS를 로드하고, 초기화 시킨다. AngularJS를 사용하겠단 의미로 생각하면 된다.  AngularJS는 이처럼 '-'가 포함된 형태의 작명법을 지원하며, 이는 태그안에 속성처럼 이용할수 있다는 특징이 있다. html 태그에 ng-app 속성을 주면 하위 요소 모두는 AngularJS Application으로 다뤄진다.

2. ng-controller : Controller를 추가한다.

3. ng-repeat : 리스트류를 표현하고 싶을때 foreach나 each처럼 사용한다. 

4. {{phone.***}} : '{{' 와 '}}'에 감싸진 부분은 일종의 AngularJS 표현식을 나타낸다. 위의 예제에서는 phone의 name과 snippet데이터를 출력한다.


controllers.js : 

var phonecatApp = angular.module('phonecatApp', []);

phonecatApp.controller('PhoneListCtrl', function ($scope) {
  $scope.phones = [
    {'name': 'Nexus S',
     'snippet': 'Fast just got faster with Nexus S.'},
    {'name': 'Motorola XOOM™ with Wi-Fi',
     'snippet': 'The Next, Next Generation tablet.'},
    {'name': 'MOTOROLA XOOM™',
     'snippet': 'The Next, Next Generation tablet.'}
  ];
});

phones를 $scope에 정의해주면 해당 Controller의 범위 내에서 사용할수 있다.



마치며..

위 예제는 AngularJS 홈페이지의 Tutorial을 참조하였으며 더 많은 예제와 API는 아래에 링크를 걸어 두었다. JQuery를 봐왔던 글쓴이에게 AngularJS는 신세계였다. 

이렇게 간편하게 사용할수 있다니! 이 글을 보았다면 당장 AngularJS 홈페이지의 Tutorial로 고고씽~ 이렇궁 저렇궁 할것없이 일단 써보고 말하길! 영어로 되어있다고 쫄지 말자 일단 Tutorial 0부터 12까지 따라해보고 난다면 아! 이런거구나 알수있을테니 말이다.


참조


Posted by 알 수 없는 사용자
,