안드로이드에서 서버와 통신하기 위한 방법으로는 HTTP통신과 Socket통신 방법이 있다. 우리는 주로 DB에 저장되어 있는 데이터를 이용하기 위해 서버통신을 한다. 하지만 안드로이드 특성상 외부DB에 직접적으로 접할 수 없기 때문에 중간 매체인 WEB을 이용한다.

[안드로이드와 WEB, DB 연결방식] - 출처 : http://mailmail.tistory.com/13



안드로이드에서 네트워크 처리

안드로이드에서는 UI에 관련된 모든 작업은 메인스레드(UI스레드)에서 처리된다. 특별한 스레드처리를 하지않는 액티비티에서 발생하는 모든 작업은 메인스레드에서 담당하게 된다는 것이다. onCreate()에서 다운로드와 같은 오랜시간이 걸리는 작업을 하게되면 작업을 완료하기 전까지 UI스레드가 묶여있기 때문에 다운로드동안 UI가 먹통이 되어버린다. 이러한 문제를 해결하기 위해 비동기처리를 해야하며 AsyncTask를 이용한다.



'웹 개발 > 안드로이드' 카테고리의 다른 글

안드로이드 타이틀바 없애기  (0) 2017.05.11
RecyclerView란?  (0) 2017.05.10
가변 비트레이트 스트리밍(Adaptive Bitrate Streaming)  (0) 2017.04.11
GCM( Google Cloud Messaging ) 이란?  (0) 2017.04.10
Parcelable  (0) 2017.04.08

Maven Resource Filtering 사용 시에 An error occured while filtering resources 오류가 발생하는 경우가 발생했다.


해당 오류 메세지를 제거하기 위해서


프로젝트 메뉴에서 Maven > Update Project... 또는 Alt + F5를 눌러서 업데이트를 실행하고 나면 에러가 사라진다.

Node.js Application 만들기


필요한 모듈 import

어플리케이션에 필요한 모듈을 불러올 땐 require 명령을 사용한다. 다음 코드는 HTTP 모듈을 불러오고 반환되는 HTTP 인스턴스를 http변수에 저장한다.



서버 생성하기



'웹 개발 > Node.js' 카테고리의 다른 글

Node.js 로컬 작업환경 설정  (0) 2017.05.11
[Node.JS]소개  (0) 2017.05.11

로컬 작업환경 설정

윈도우 계열 PC를 사용하고 있다면 아래의 URL에서 Node.js를 설치하면 된다.


본 블로그에서는 WebStorm을 사용하려고 함.  WebStorm은 유료이기 때문에 알아서들 구하셔야 합니다

WebStorm 설정

  • 웹스톰 실행 후 프로젝트 새로실행(Node.js)
  • File > Setting으로 설정창을 열기
  • Languages and Frameworks > Node.js and NPM 을 선택
  • Node Interpreter에 설치한 node.exe의 위치를 입력
  • Node.js Core Modules의 소스코드 위치에는 Node.js의 Source를 다운받은 root 디렉토리를 설정
  • Languages and Frameworks > Javascript > Libraries 에서 node.js 관련된 항목이 모두 check되었는지 확인
test.js 파일 생성 후 테스트 로그 작성.
node test.js 로 정상 작동되는지 확인.




출처 : https://velopert.com/195
출처 : http://dakoostech.blogspot.kr/2015/03/windows-81-webstorm-nodejs.html


'웹 개발 > Node.js' 카테고리의 다른 글

Node.js 맛보기  (0) 2017.05.11
[Node.JS]소개  (0) 2017.05.11

Node.js 란?

Node.js는 구글 크롬의 자바스크립트 엔진 (V8 Engine)에 기반해 만들어진 서버 사이드 플랫폼 이다. Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임이다. Node.js는 이벤트 기반, 논 블로킹 I/O 모델을 사용해 가볍고 효율적이다. nODE.JS의 패키지 생테계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 이기도 하다.

 Node.js는 웹서버가 아니다. Node 자체로는 아무것도 하지 않는다. 아파치 웹서버처럼 HTML 파일 경로를 지정해주고 서버를 열고 그런 설정이 없다. 단, http서버를 직접 작성해야 한다(일부 라이브러리의 도움을 받아서). Node.js는 그저 코드를 실행할 수 있는 하나의 방법에 불과한 그저 Javascript 런타임이다. 

 Node.js의 특징
  • 비동기 I/O 처리, 이벤트 위즈 : Node.js 라이브러리의 모든 API는 비동기식이다. Node.js 기반 서버는 API가 실행되었을 때, 데이터를 반환할때까지 기다리지 않고 다음 API를 실행한다. 그리고 이전에 실행하였던 API가 결과값을 반환할 시, NodeJS의 이벤트 알림 메커니즘을 통해 결과값을 받아온다
  • 빠른 속도 : 구글 크롬의 V8 자바스크립트 엔진을 사용하여 빠른 코드 실행을 제공한다.
  • 단일 스레드/ 뛰어난 확장성 : Node.js는 이벤트 루프와 함께 단일 스레드 모델을 사용한다. 이벤트 메커니즘은 서버가 멈추지않고 반응하도록 해주어 서버의 확장성을 키워준다. 반면, 일반적인 웹서버는 요청을 처리하기 위하여 제한된 쓰레드를 생성한다. 
  • 노 버퍼링 : Node.js 어플리케이션엔 데이터 버퍼링이 없고, 데이터를 큰 덩어리로 출력한다

Node.js를 쓰기 좋은 곳은?

  • 입출력이 잦은 어플리케이션
  • 데이터 스트리밍 어플리케이션
  • 데이터를 실시간으로 다루는 어플리케이션
  • JSON API 기반 어플리케이션
  • 싱글페이지 어플리케이션

Node.js가 적합하지 않은 곳은?

CPU 사용률이 높은 어플리케이션에선 Node.js 사용을 권장하지 않는다. 



출처 : https://velopert.com/133

'웹 개발 > Node.js' 카테고리의 다른 글

Node.js 맛보기  (0) 2017.05.11
Node.js 로컬 작업환경 설정  (0) 2017.05.11

기본적으로 프로젝트를 생성하고 실행시키면 아래와 같은 모습으로 실행된다. 



 TrohPlayer라고 적혀있는 영역이 타이틀바이며, 그 위의 시간 배터리 등등 표시되는 곳이 상태바이다. 이번 포스팅에서는 타이틀바의 제거와 , 풀스크린 즉 앱이 전체화면을 차지하도록 하는 방법에 대해 알아보려고 한다.


타이틀바 없애기

안드로이드 프로젝트의 Manifest.xml 파일을 열어보면 아래와 같은 코드가 보일 것인데, 이중에 theme부분을 보면 "@style/AppTheme " 이라는 부분에 주목해야 한다.



Ctrl키를 누른상태로 AppTheme부분을 클릭해보면 아래와 같이 되어 있을 것인데, 여기에 타이틀바에 대한 설정을 추가해줘야 한다. 아래와 같이 타이틀바와 풀스크린에 대한 정보를 추가해주면 설정이 완료된다.



<타이틀바 제거만 추가한 경우>


<풀스크린으로 실행한 경우>






'웹 개발 > 안드로이드' 카테고리의 다른 글

Android Clinet와 Web통신(작성중)  (0) 2017.06.18
RecyclerView란?  (0) 2017.05.10
가변 비트레이트 스트리밍(Adaptive Bitrate Streaming)  (0) 2017.04.11
GCM( Google Cloud Messaging ) 이란?  (0) 2017.04.10
Parcelable  (0) 2017.04.08

5.0(롤리팝) 버전이 ListView 보다 유연하고 성능이 향상된 RecyclerView와 함께 발표되었다. 기존의 ListView는 커스터마이징 하기에 힘들었고, 구조적인 문제로 성능상의 문제도 있었다. RecylerView는 ListView의 문제를 해결하기 위해 개발자에게 더 다양한 형태로 커스터마이징 할 수 있도록 제공되었다. RecyclerView와 ListView의 가장 큰 차이점은 Layout Manager와, View Holder 패턴의 의무사용, Item에 대한 뷰의 변형이나 애니메이션할 수 있는 개념이 추가 되었다. 리스트 뷰의 성능 상의 이슈도 해결해주면서, 많은 타입의 뷰들을 가독성 있게 보여줄 수 있는 뷰가 리사이클뷰이다. 


주요 클래스

  • Adapter - 기존의 ListView에서 사용하는 Adapter와 같은 개념으로 데이터와 아이템에 대한 View생성.
  • ViewHolder - 재활용 View에 대한 모든 서브 뷰를 보유. 
  • LayoutManager - 아이템의 항목을 배치
  • ItemDecoration - 아이템 항목에서 서브뷰에 대한 처리
  • ItemAnimation - 아이템 항목이 추가, 제거되거나 정렬될 때 애니메이션 처리

Adapter

리스트 뷰는 데이터가 어디서 왔냐에 따라 BaseAdapter를 상속한 ArrayAdapter(배열로부터 데이터를 가져올 경우), CursorAdapter(DB로 부터 가져올 경우), sIMPLEaDAPTER(xml 등으로 부터 가져올 때)를 구분하여 사용합니다. 하지만 리사이클러 뷰는 Universal한 Adapter를 사용하여 데이터 소스를 처리합니다. 이것은 리사이클러 뷰의 유연성을 보여줍니다. 다음의 3가지 인터페이스를 구현해야 합니다. 

  • onCreateViewHolder(ViewGroup parent,int viewType) : 뷰 홀더를 생성하고 뷰를 붙여주는 부분
  • onBindViewHolder(ListItemViewHolder holder,int position) : 재활용 되는 뷰가 호출하여 실행되는 메소드, 뷰 홀더를 전달하고 어댑터는 position의 데이터를 결합시킵니다. 
  • getItemCount() : 데이터의 개수를 반환


리스트 뷰가 사용했던 getView() 메소드는 매번 호출되면서 null 처리를 해줘야했다면, onCreateViewHolder는 새롭게 생성될 때만 호출된다.



 리스트뷰에서는 뷰홀더 패턴을 권장했었는데, UI를 수정할 때 마다 부르는 findViewById() 를 뷰홀더 패턴을 이용해 한번만 함으로서 리스트 뷰의 지연을 초래하는 무거운 연산을 줄여주었다. 이 문제를 리사이클러 뷰에서는 뷰 홀더 패턴을 꼭 사용하도록 함으로써 해결했다.

 뷰홀더 패턴은 오래된 기기일수록 효과가 좋지만, 최신기기같은 경우 사용 유무에 대한 성능차이는 미미하다. 뷰홀더 패턴을 사용한 리스트뷰와 리사이클러뷰의 성능은 같다. 단지 차이점은 리사이클링뷰는 뷰홀더 패턴이 강제된다는 차이점이 있다. 


LayoutManager

 리스트뷰는 수직 스크롤만 가능하다. 리스트뷰를 수평으로 사용할 수 없었는데, 리사이클러뷰에서는 수평 스크롤을 지원해줍니다. 뿐만 아니라 더 다양한 타입의 리스트들을 지원하고, 커스텀할 수 있도록 해준다. 리사이클러뷰는 아래와 같은 3가지의 미리 정의된 Layout Managers를 제공한다.
  • LinearLayoutManager : 리사이클러 뷰에서 가장 많이 쓰이는 레이아웃으로 수평,수직 스크롤을 제공하는 리스트를 만들 수 있다.
  • StaggeredGridLayoutManager : 뷰마다 크기가 다른 레이아웃을 만들 수 있다.
  • GridLayoutManager : 사진첩 같은 격자형 리스트를 만들 수 있다


ItemDecoration

리사이클러뷰에서는 RecyclerView.ItemDecoration 클래스를 통해 divider를 원하는 아이템에 추가해줄 수 있다. 조금 복잡해졌지만 동적인 데코레이팅이 가능해졌다


Item Animator

리사이클러 뷰에서는 RecyclerView.ItemAnimator 클래스를 통해 애니메이션을 핸들링 할 수 있게 되었다. 이 클래스를 통해서 아이템 삽입,삭제,이동에 대한 커스터마이징이 가능하고, 또한 DefaultItemAnimator가 제공되므로 커스터마이즈가 필요 없이 사용할 수도 있다. notifyItemChanged(int position), notifyItemInserted(int position), notifyItemRemoved(int position)을 ItemAnimator을 통해 특정 아이템에 대한 애니메이션을 발생시킬 수 있다. 


Serializable 인터페이스를 구현하겠다는 결정을 내리게 되면 버그나 보안 결함이 생길 가능성이 높다. 하지만 이런 위험을 크게 줄일 수 있는 기술이 하나 있다. 직렬화 프락시 패턴이라고 알려진 기법이다.


 우선 바깥 클래스 객체의 논리적 상태를 간결하게 표현하는 직렬화 가능 클래스를 private static 중첩 클래스로 설계한다. 이 중첩클래스를 직렬화 프락시라고 부르는데, 바깥 클래스를 인자 자료형으로 사용하는 생성자를 하나만 가진다. 이 생성자는 인자에서 데이터를 복사하기만 한다. 일관성 검사를 할 필요도 없고, 방어적 복사를 할 필요도 없다.


 아래는 Period 클래스의 프락시 코드이다.


 이 프락시를 추가한 다음, 바깥 클래스에 아래의 writeReplace 메서드를 구현한다.

이 메서드가 있으면 직렬화 시스템은 바깥 클래스 객체 대신 SerializationProxy 객체를 직렬화한ㄷ. 다시 말해서, writeReplace 메서드는 직렬화가 이루어지기 전에 바깥 클래스 객체를 직렬화 프락시 객체로 변환한다.


writeReplace 메서드를 갖추게 되면 직렬화 시스템은 바깥 클래스로 직렬화된 객체는 절대로 만들지 않는다. 하지만 공격자는 클르새의 불변식을 훼손하고자 그런 객체를 만들려 할 수도 있다. 그런 공격을 막으려면 아래의 readObject 메서드를 바깥 클래스에 추가해주면 된다.



마지막으로, SerializationProxy 클래스에 자기와 논리적으로 동일한 바깥 클래스 객체를 반환하는 readResolve 메서드를 추가해야 한다. 이 메서드가 있으면 직렬화 시스템은 역직렬화를 끝내자마자 직렬화 프락시 객체를 다시 바깥 클래스 객체로 변환하게 된다.


요약

클라이언트가 확장할 수 없는 클래스에 readObject나 writeObject를 구현해야 할 때는 직렬화 프락시 패턴 도입을 고려해 보라는 것이다. 이 패턴은 단순하지 않은 불변식을 만족해야 하는 객체를 안정적으로 직렬화 하는 가장 쉬운 방법이다.



+ Recent posts