안녕하세요

이번 포스트 전까지는 항상 이론을 정리하는 '공통 기초'글만 작성했는데

이 글을 쓰면서 개인공부와 정보공유 두가지 효과를 보고 싶습니다ㅎㅎ

 

오늘까지는 소개이고 다음 코틀린 포스트부터 코딩과 함께 기초적인 문법관련 글을 준비할 예정입니다.

 

지금부터 포스트 시작합니다!

 


 

 

 

코틀린(Kotlin) 소개

 

대표적인 프로그래밍 언어인 C, Java를 비롯하여 시간이 지나면서 개발환경, 페러다임의 변화에 발맞춰 많은 새로운 언어들이 발표되고 있습니다.

 

이런 흐름속에서 JetBrains(제트브레인)사 에서 코틀린(Kotlin)이란 새 언어를 발표하게 됩니다.

JetBrains사는 우리에게 익숙한 InteliJ, PyCharm IDE를 만든 개발회사이다.

추가로 JetBrains은 구글과 협업으로 Android Studio IDE도 만들었다.

 

2016년에 1.0 정식버전이 나온 후 2017년 5월, 구글 I/O행사에서 안드로이드 공식언어로 지정하였습니다.

 

 

- 코틀린(Kotlin) 언어의 특징

 

1. Java, 안드로이드 100% 호환

- Kotlin은 개발코드가 Java클래스로 빌드되어 JVM(자바가상머신)에서 동작하기 때문에 호환이 가능합니다.

이 뜻은 Java로 개발되던 프로그램을 Kotlin 뿐만 아닌 JVM을 기반으로 하는 모든언어로 개발할 수 있다는 것입니다.

 

2. Java, 안드로이드, 브라우저, 네이티브 애플리케이션 개발(범용성 향상)

- Java로 개발된 서버 Web 어플리케이션 뿐만이 아닌 javaScript개발도 가능한 언어를 목표로 발전하고 있습니다.

코틀린 공식블로그에서 JVM, javaScript 이외 iOS, Iot등 다른 플랫폼에서도 사용할 수 있도록 하는것이 Kotlin의 목표라고 말하고 있습니다.

 

3. InteliJ, 안드로이드 스튜디오, 이클립스, Commend 등을 통한 개발

- Kotlin은 JetBrains 그룹에서 만들었지만 JetBrains에서 개발한 IDE에서만 사용가능한 것은 아닙니다.

Kotlin은 개발환경을 특정 개발 도구로 한정하지 않으며 JetBrains IDE를 제외하고 현재 Eclipse, Commend Line Interface에서도 개발이 가능합니다.

 

4. 코드의 간결함

- 다른 언어보다 다양한 프로그래밍 기법을 제공합니다.

바로 아래 Kotlin을 Java와 비교한 자세한 설명을 읽어보면서 코드의 간결함을 직접 확인해보세요!

 

 

- Java와 코틀린(Kotlin)

 

Kotlin은 Java와 비슷하면서도 차이점을 명확이 두고 있습니다.

지금까지 Kotlin 1.2버전까지 출시되었으며 차이점은 아래 설명한 4가지 외에도 많지만 두 언어를 대표할 수 있는 차이만을 비교해보겠습니다.

 

1. Null에 대한 안전성

- 저와 같은 초보개발자 모두가 그렇지는 않지만 저는 Java개발을 하면서 NullPointException에서 애를 먹었던 적이 많습니다.

그렇기에 항상 Null을 처리해주는 코드를 작성하게 되었고 이는 개발코드가 지저분해지는 원인이였지만 이를 처리하는 기법을 제공해줌으로 조금 더 쉬운 개발을 할 수 있습니다.

 

2. 확장 함수

- Java에서도 클랫를 상속하여 하위 클래스에 기능을 확장시킬 수 있었습니다. 이렇게 상속할 때 많은 서브 클래스들이 만들어져 자원낭비를 할 수 있다는 단점이 있었는데 Kotlin에서는 상속이 아닌 함수 확장을 통해 기존 클래스의 기능을 쉽게 추가할 수 있게 하였습니다.

 

3. 함수형 프로그래밍

- 일종의 소프트웨어 개발 패러다임입니다.

이 부분에서 객체지향 프로그래밍인 Java보다 더 좋다 라고 비교할 수는 없지만

Kotlin은 함수형 프로그래밍으로써 기존에 있던 함수형 프로그래밍 언어보다 더 많은 프로그래밍 기법을 제공하고 있어 더 쉽게 사용할 수 있습니다.

 

4. data 클래스

- Spring Framework로 개발을 하는 저에게는 재미있는 부분인 것 같습니다.

data를 저장하기 위해 VO 클래스를 만들어 정의했어야 하나 만드는데 시간과 필요없는 코드를 소모했었는데 이를 짧게 작성할 수 있는 data 클래스를 제공해줍니다.

 

 

- 코틀린(Kotlin) 동향 분석(☆주목☆)

 

최근 구글(google)에 좋지 않은 소식이 들려왔습니다. 그 소식은 바로 '자바 라이센스 분쟁 소송' 이야기 입니다.

([참조] http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=101&oid=001&aid=0009988737)

 

2009년 4월, Database 대표기업 오라클(Oracle)사가 Java언어를 만든 썬마이크로시스템즈사를 인수하게 되면서 안드로이드를 만든 구글에게 Java라이센스 소송을 시작하게 됩니다.

구글이 만든 안드로이드는 개발 언어가 Java이며 안드로이드 플랫폼을 구축하기 위해 오라클의 Java 오픈소스를 이용한 것이 저작권법 위반이라고 주장했기 때문입니다.

 

이 소송은 8년이란 시간동안 진행되어 왔으며 2018년 4월, 미국연방순회항소법원(CAFC)은 오라클을 손을 들어주며 구글은 '자바 라이센스 분쟁 소송'에서 패소와 90억달러(한화 약 11조)+a의 배상금을 지불해야 하는 상황이 되었습니다.

 

이는 앞으로의 안드로이드 생태계에 큰 영향을 미칠 것이라고 다수의 개발자들은 말합니다.

구글은 앞으로 안드로이드 개발에 있어 Java를 사용하려면 오라클사에 라이센스 비용을 지불해야 하고

2017년 5월에 구글이 Kotlin을 공식언어로 하였기에
안드로이드에 더 이상 Java를 사용할 이유가 없을 것이라 판단합니다.

 

이에 따라 현재 안드로이드하면 자연스럽게 Kotlin을 떠올리게 되었고

구글에서 안드로이드의 중심을 잡고있던 Java를 대체할 언어로 Kotlin이 될 것이라는 예측이 많습니다.

이는 앞으로 Kotlin을 주목해야 하는 이유라고 생각 합니다.

 

 

* 참고도서 및 사이트

- 코틀린 공식 사이트 https://kotlinlang.org

- 『깡쌤의 안드로이드 프로그래밍』, 강성윤

지난 포스트에서 RESTful을 전달하면서 Web에서 HTTP 프로토콜을 이용하여 무언가의 자원을 전달하고

메소드 정보에 맞는 역할을 수행한다고 했습니다.

 

오늘 포스트에서는 데이터를 전달하는 HTTP 메소트 'GET', 'POST'에 대해 더 자세히 알아보겠습니다.

 

 

2-(1) [네트워크] RESTful 정리하기 바로가기 >>

 


 

'GET', 'POST'는 클라이언트에서 서버로 data를 전달하기 위해 사용하는 전송방식이다.

 

이 둘은 공통적으로 data를 전달한다라는 공통점을 가지고 있다.

전달형식, 전달할 data의 크기, 그리고 보안적인 측면에서 차이점이 있다.

 

지금부터 알아보자

 

 

- GET 전송방식

 

클라이언트로부터 입력받은 parameter 이름과 값이 결합되어 스트링 형태로 서버에 전송된다.

이는 URL에 그대로 붙어서 전달된다.

 

ex) GET 전송의 URL 표시

http://localhost:8080/example/member?name=kim&phone=01012345678

(name과 phone이 스트링으로 전달되고 있다.)

 

GET전송방식 에는 정보를 보내는데에 있어 단점이 많다.

 

GET으로 보내는 data는 스트링 문자열이 최대 256byte를 넘길 수 없기 때문에 따라서 전달하는 data 크기에 한계가 있다.

또한 위에 URL example처럼 data정보가 그대로 노출되기 때문에 개인정보와 같은 중요한 정보를 전달하는데 보안상 위험한 부분이 있다.

 

그렇기에 GET은 Database에서 정보를 가져올 수 있는 최소한의 조건값을 전달하는데 사용되며

단점을 보안하기 위해 POST방식을 이용하게 되었다.

 

 

- POST 전송방식

 

클라이언트와 서버간에 인코딩하여 서버로 전송된다.

클라이언트에서 데이터를 인코딩을 한 후 전달받은 서버에서 디코딩을 하여 사용한다.

이는 URL에 붙어서가 아닌 HTTP헤더를 통해 전달된다.

 

ex) POST 전송의 URL 표시

http://localhost:8080/example/member

(name과 phone이 URL에 노출되지 않고 전달된다.)

 

URL 전송이 아니기 때문에 문자열에 제한이 없고 당연히 data 전달정보의 크기가 한계가 없다.

그래서 Database에 많은 양을 한번에 갱신할 때 POST를 사용한다.

 

또한 정보를 클라이언트에 보이지 않게 전달하기 때문에 보안상 GET에 비해 더 안전하다.

(그렇지만 POST 또한 보안에 안전한 편은 아니다.)

 

 

- 정리

 

 HTTP 메소드

 GET

POST 

 전송 방식

 parameter의 이름과 값이 결합되어 있는 스트링 형태

 클라이언트와 서버간의 인코딩

 데이터 크기

 제한 있음(256byte)

 제한 없음

 보안

 정보가 그대로 노출 됨

 노출되지 않음(GET에 비해 덜 취약함)

 속도

 빠름

 덜 빠름 

 표시 URL

 http://localhost:8080/example/member?name=kim&phone=01012345678

 http://localhost:8080/example/member

 

 

- 정리 후 나의 생각

 

정리를 하면서 제 업무에 있는 코딩을 보면서 생각해봤습니다.

 

GET : 정보를 가져오다(Select)

 

라고 RESTful 개념에서 공부를 했습니다.

어떤 상황에 GET을 사용할지 POST를 사용할지 생각해봤지만

사실 코딩을 해보면 GET으로 정보를 저장할 수도 있고 POST로 정보를 불러올 수도 있습니다.

 

공부를 통해 특징을 정리하면서 RESTful개념에서 왜 그렇게 나누어 놨는지 이해하게 되었습니다.

 

코딩의 양이 많아서 그런지 기존 회사네 프로젝트 코딩을 보면 검색, 생성, 수정, 삭제 모든 CRUD가

POST 전송 하나로 이루어지고 있습니다.

 

SpringFramework로 RequestMapping을 이용하고 있고 결제관련 프로젝트로 충분히 커버가 되고 있기 때문입니다.

 

 

그러나 이론이라도 정확하게 알고 있는것과 없는것도 큰 차이가 있다고 생각했고

이번 공부를 통해 자세히 몰랐던 GET의 정확한 사용방법(ex. 공유하기)도 이해할 수 있었습니다.

 

블로그를 운영하면서 이론을 공부하고 정리하게 됐고

대충 알고 있던 정보에 알맹이를 꽉 채워 넣는 기분이라 개인적으로 뿌듯합니다ㅎㅎ

 

다음 포스트에는 데이터관련 JSON, xml를 공부해서 작성하겠습니다! 감사합니다

이번 포스트에서는 RESTful를 공부하여 정리합니다.

 

웹 프로그래머로 외부업체랑 협업을 하면 주로 데이터를 주고 받는 작업이 많았기에 RESTful을 알고는 있었지만

자세하게는 알지 못했습니다.

 

뭔지는 아는데...... 대답하라고 하면 말로 표현하지 못하는??

 

그래서 이번 기회로 공부하면서 그 첫시작을 RESTful로 시작합니다!

차후 포스트에서는 이와 관련있다고 생각하는 xml과 JSON, 다음으로 get, post전송 방식 순서로 공부하여 정리하겠습니다!!!!!!

 

 

(오늘로 5개 포스트인데 방문자가 늘어나는게 보여요! 항상 많은 초수, 중수, 고수 개발자들의 방문과 격려와 의견을 기다립니다)

 


 

- RESTful 소개

 

REST(REpersentational State Transfer)

직독하면 '표현상태의 변경' 이라고 하는데 어떤 의미인지 잘 모르겠다.

구글을 통해 내가 가장 쉽게 이해할 수 있는 말을 찾아보니 '웹의 장점을 최대한으로 활용할 수 있는 아키텍처' 라는 표현이 이해하기 쉬웠다.

 

이 용어는 HTTP를 만든(Web을 만든) 사람을 한사람인 Roy Fidlding의 2000년의 논문에서 소개되었다.

많이 거창하게 소개되었을 줄 알았는데 정작 5장 분량밖에 되지 않는 논문이라고 한다.

 

최근 클라이언트/서버 프로그램은 Web뿐만 아닌 안드로이드, 아이폰 이외의 테블릿 등 디바이스의 종류가 다양해졌고 이에 따른 많은 클라이언트가 존재하는데 이를 하나의 서버로 대응할 때 필요한 것이 RESTful이다.

이는 장비간의 통신을 HTTP라는 프로토콜로 간단하게 수행하는 것이 목적이며 웹사이트의 이미지, 텍스트 등 모든 자원에 고유한 URI를 부여해 준다.

 

URI도 의미는 알고 있었는데 흔히 쓰는 URL 그리고 조금은 생소한 URN과의 차이를 명확하게 알지 못해 정리하고 간다.

 

URI(Uniform Resource Identifier)은 '통합 자원 식별자' 인터넷에 있는 자원을 나타내는 유일한 주소이며

URL(Uniform Resource Locator)과 URN(Uniform Resource Name)을 포함하는 더 큰 개념이다.

URL은 자원의 실제 네트웍 경로를 가리키며 URN은 자원에 대해 영속적이고 유일한 이름을 부여한다.

([참고] 영이블로그 http://sunychoi.github.io/java/2015/04/27/uri-url.html)

 

 

- RESTful 메소드 정보

 

클라이언트에서 URI를 통해 서버로 자원을 전달할 때 데이터를 동록하는지, 삭제하는지, 수정하는지, 그리고 정보를 얻어오는지 어떻게 알 수 있을까?

 

자원을 가지고 어떤 작업을 행하는지에 대한 내용을 가지고 있는 메소드를 '메소드 정보(Method Information)'라고 한다.

 

가장 흔한 HTTP메소드로 4가지가 있는데 표를 확인해보자

 HTTP 메소드 이름

기능(CRUD)

example URL

 POST

생성(Create)

http://localhost:8080/example/member/민수

GET

조회(Read)

http://localhost:8080/example/member/민수

PUT

수정(Update)

http://localhost:8080/example/member/민수

DELETE

삭제(Delete)

http://localhost:8080/example/member/민수

 

표와 값이 대표적인 4가지 HTTP 메소드가 있다. 각 메소드의 기능따라 작업이 이루어진다.

 

그런데 example URL을 보면 4개의 기능의 URL이 모두 같음을 확인하고 이상함을 느낄 수 있다.

이것은 보내지는 메소드에 따라 데이터 '민수'를 생성하는지, 조회하는지, 수정하는지, 삭제하는지

기능이 구별되기 때문에 URL 이름이 같아도 문제가 없다.

 

추가적으로 메소드 자체는 움직이는 '동사' 역할을 하기 때문에 URL은 명사로 정의한다.

 

 

- RESTful의 6가지 특징

 

1. Client-Server 구조: REST서버는 API를 제공하며 여러 클라이언트에서 하나의 REST API를 이용할 수 있다.

2. Stateless : 무상태성, 상태 정보 저장없이 REST서버는 들어오는 요청에 대해 처리만 한다.

3. Cacheable : 캐쉬이용이 가능하다. HTTP라는 기존 Web 표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그래도 활용할 수 있다.

4. Uniform Interface : REST는 HTTP표준에만 따른다면, 어떤 기술이여도 사용가능한 인터페이스 스타일이다.

5. Self-descriptiveness : 자체 표현, REST API 자체가 쉽기 때문에 API 메시지만을 보고도 API를 이해할 수 있는 자체 표현 구조를 가지고 있다.

6. Layered System : 계층형 구조, REST 서버는 다중 계층으로 구성될 수 있으며 로드벨런싱/공유 캐시등을 통해 구조상의 확장성과 보안성 유연성을 향상 시킬 수 있다.

([참고] 조대협의 블로그 http://bcho.tistory.com/953)

+ Recent posts