android Soket를 활용한 통신 - Client

Socket에서 Server에 이어 Client를 진행 하겠습니다. android에서 개발을 진행 하면 Server를 만들일은 특수한 경우 아니면 없다고 생가 할수 있습니다. Client의 경우 필요에 따라 만들어 써야 하는 경우가 있습니다. 그렇기 때문에 직접 구현 하지 않더라도 Socket.io처럼 잘되어 있는 라이브러리도 존재 하기는 합니다. 하지만 여기서는 Server와 Client에 대한 구현 부분을 알아보는데 의미를 두어 Client도 직접 구현 하겠습니다. android 네트워크 통신에서 가장 기본이면서 중요한 부분은 무엇일까요? 당연히 비동기 통신을 통한 UI쓰레드에서 UI 갱신 일 것입니다. Socket 통신도 당연히 이부분은 해당 되며 통신 모든 부분에서 비동기 처리 및 UI  갱신은 UI쓰레드에서 진행 되어야 합니다. 저는 개인적으로 runOnUiThread보다 AsyncTask를 활용하는 것을 선호하기 때문에 Client 부분도 AsyncTask를 이용 하겠습니다. public interface OnSocketConnectCallback{ public void onConnect ( ) ; public void onFail ( String msg ) ; } public interface OnSocketListenCallback{ public void onListen ( String data ) ; public void onError ( String msg ) ; } public interface OnSocketSendCallback{ public void onSendComplete ( ) ; public void onFail ( String msg ) ; } private Socket client = null ; private Da

android Soket를 활용한 통신 - Server

android에서 socket을 활용하여 Server, Client를 구현하여 통신하는 법을 알아보도록 하겠습니다. 우선 Server를 만드는 일인데요. android 디바이스에서 Server를 만들기 위해서는 Wifi환경이어야 가능 합니다. public static String getLocalIpAddress(Context appContext) { WifiManager wifiMgr = ( WifiManager ) appContext . getSystemService ( WIFI_SERVICE ) ; WifiInfo wifiInfo = wifiMgr . getConnectionInfo ( ) ; int ip = wifiInfo . getIpAddress ( ) ; String ipAddress = String . format ( "%d.%d.%d.%d" , ( ip & 0xff ) , ( ip > > 8 & 0xff ) , ( ip > > 16 & 0xff ) , ( ip > > 24 & 0xff ) ) ; return ipAddress ; } Wifi환경에서 디바이스의 IP주소를 가져오는 소스입니다. Server가 직접 쓰는 것은 아니지만 Client가 Server에 접근하기 위해서는 필요 합니다. private ServerSocket serverSocket ; private void createServer() { try { isRunning = true ; serverSocket = new ServerSocket ( SERVER

[정보] Git을 이용한 형상관리 #3 - Git 브랜치

이미지
안녕하세요 남산돈가스입니다. 지난 포스팅에 이어 마지막시간으로 Git 브랜치에 대해서 포스팅해보겠습니다. 지난 시간 저희는 Git 저장소를 생성하고 커밋까지 해보았습니다. 이제 조금 더 완전한 버전 관리를 위하여 브랜치에 대해서 알아보도록 하겠습니다. 프로젝트 단위로 개발을 하다 보면 반영되어있는 코드와는 상관없이 독립적으로 개발을 진행할 경우가 생기는데, 이렇게 독립적으로 개발하는 것이 브랜치입니다. Git에서의 브랜치는 커밋 사이를 가볍게 이동할 수 있는 어떤 포인터 같은 것이다. 기본적으로 Git은 최초 생성 시 master 브랜치를 만들고. 커밋을 만들 때 마다 브랜치가 자동으로 가장 마지막 커밋을 가리키게 됩니다. 위에 보이는 그림처럼 master라는 브랜치가 생성이 되고 그 마스터는 항상 최종 커밋의 위치를 가리키고 있습니다. 그리고 위에 HEAD는 원격 저장소에 최신 버전을 가리키고 있다는 의미인데요. 최초에 master로 브랜치 설정이 되어있으니 HEAD가 바라보는 건 master가 되겠죠. 설명을 길게 하기 보다는 실제로 만들면서 확인해봅시다. 현재 자신의 브랜치가 어떤 것인지 확인해보기 위해서 명령어를 입력해봅시다. $ git branch * master git branch 명령어를 입력하면 현재 바라보고있는 브랜치를 보여줍니다. 현재 저는 master를 보고있습니다. 여기서 새로운 브랜치 testing을 하나 만들어보겠습니다. $ git branch testing $ git branch * master testing git branch testing 명령을 통해 브랜치를 생성했습니다. 이 브랜치도 역시 현재 작업중이었던 마지막 커밋을 가리키는 브랜치입니다. 그럼 여기까지 testing이라는 새로운 브랜치를 생성해보았습니다. 현재까지 작업 된 master 브랜치는 그대로 두고 다른 개발 사항이 생겨 testing 브랜치에 개발을 진행해보겠습니다. 현재 master로 되

[앱 디자인] 디자인 가이드 작업에 유용한 툴 + 소개

이미지
*이 문서는 지속적으로 업데이트 될 예정입니다 Assistor PS http://wit-web.azurewebsites.net/ko/assistor/product 제품소개영상 GUI 디자인 일을 잠깐 배운 친구에게 추천받은 툴인데 아주 유용하지만 약간 느려서 나중에는 그냥 이걸 안쓰고 파워포인트로 디자인가이드 작업을 하게 되었다는;; (치수 기입을;;;) 그러나 작정하고 쓰면 아주 유용한 툴입니다. 사용법도 간단한데, 설치하고 나서 포토샵과 함께 켜두고 포토샵에서 수치를 알아야 하는 레이어 선택 + Assistor PS 의 버튼 선택하면 알아서 간격, 크기 등을 재서 포토샵 레이어 위에 기입해줍니다. 그걸 복사해서 디자인 가이드 문서에 붙여넣기 하면 끝! ...인데, 레이어를 처음부터 매우 정확하고 정교하게 간격이나 위치 조정을 해서 작업하지 않으면 시안 잡고 나서 가이드 작업 할때 다시 위치 조정을 일일이 해야 하는 치명적인 단점이 있습니다. 처음부터 레이어 정리를 잘하세요! ㅠㅠ (저는 그래서 레이어 정리 다시하느니 PPT 로 쓰게 되었습니다;;) 레이어 정리를 못한 채로 AssistorPS 를 사용하면 아래처럼 됩니다. 수치가 0 으로 끝나는게 거의 없죠;; 이러면 개발자들이 해상도별 좌표 계산 같은걸 할 때 문제가 많습니다. 레이어정리_못한_예.jpg 디자인가이드 작업용 툴 대세는 스케치 + 제플린 이런 것 같지만 스케치는 아직도 맥에서만 쓸 수 있다는 치명적인 단점(?)이 있고, 그 비슷한 제품으로 Adobe에서 내놓은 XD 도 맥/윈도우용으로 출시되었는데 스케치처럼 디자인가이드가 자동으로 나오거나 할 만큼 매력적인 툴은 아닌 것 같더라구요. 써 보게 되면 후기를 올리겠습니다 ^ㅁ^ *그 밖에 디자인 가이드 작업할 때 유용한 추천 링크 바이널 X 블로그 GUI 디자이너가 알아야 할 GUI 가이드라인 문서 작업의 기본 원칙  http://bit.ly/2eWsRmG GUI 디자이너가 알아야

[앱 디자인] 디자인 가이드 만들기 - 안드로이드

이미지
*아이프렌즈펫 앱 디자인 가이드 경험을 공유합니다. 이게 처음 작업한 앱 디자인 가이드라서 미흡한 점이 많을 수도 있는데 문제가 있는 부분이 있다면 댓글로 알려주시면 반영하겠습니다 ^^ * 안드로이드 앱 디자인 가이드 작업의 특징 안드로이드의 해상도입니다 이미지 출처: http://bit.ly/2hifr90 보시다시피 어마어마하게 많습니다 ^^ 이 모든 해상도를 일일이 지원할 수가 없어요~ 그래서 몇 가지 대표적인 해상도를 지원하는 방향으로 가이드를 잡고 이미지 작업을 합니다. 아이프렌즈펫의 경우에는 저해상도, 중간 해상도, 고해상도 3개를 지원해서 720 x 1280 1080 x 1920 1440 x 2560 이 세 가지로 이미지를 오렸구요, 가이드는 720 x 1280 기준으로 작업했습니다. *좌표 안드로이드는 상대 좌표로 작업합니다. 워낙 다양한 폰 사이즈 때문에 절대 좌표로 잡기 어려워요. 그래서 가이드에 중요한 정보는 좌표보다는  간격, 크기 입니다. *색상값  #123456 헥사 컬러 코드를 주로 사용합니다. 가이드에 이 값을 표기해주세요. *이미지 작업 수치값 계산 작업을 했다면 아이콘 등등을 잘라서  PNG  로 공유합니다. 이건 당연히 해상도별로 아이콘을 오려야 하는데요... 수치값은 720 기준으로 했다 하더라도 1440 등 다른 해상도 기준으로도 아이콘을 잘라드려야 합니다. 따라서 당연히 이미지는 Vector 아이콘으로 작업하셔야합니다 ^ㅁ^ Ctrl + I 눌러서 해상도 크기 늘리시면 되구요 (디자인 경력 1개월 미만을 위한 충고 ㅋ ) 이미지 버튼의 경우 단순한 사각형, 원형 같은 버튼의 경우 코딩으로 작업이 가능하지만 특별한 모양의 버튼의 경우 이미지를 잘라드려야 하는데요, 버튼을 자를 때는 기본적으로 세 가지 상태에 대해서 만들어 주셔야 합니다. (경우에 따라 한두가지 필요없는 게 있을 수 있구요) * 나인 패치 안드로이드에서는 앱 퍼포먼스를 높이기 위해

[AWS] 부하분산과 고가용성을 위한 ELB 구성하기

이미지
이번 포스팅에서는 AWS 에서 제공하는 ELB 서비스에 대해 알아보겠습니다. ELB 란 ? AWS 에서 부하분산 및 고가용성을 위해 제공하는 서비스로  Elastic Load Balancer 의 약자 입니다. ELB 서비스 구성 EC2 인스턴스 생성 ELB 구성을 위해서 먼저 2개의 EC2 인스턴스를 생성 하도록 하겠습니다. 고가용성 구성이 목적이므로 각각의 AZ (Availability Zone)에 하나씩 인스턴스를 생성합니다. 로드밸런서 생성 Instance가 준비되면 Load Balancer 생성을 진행합니다. 좌측 메뉴에서 Load Balancers 를 선택하고  상단 Create Load Balancer 를 선택합니다. 로드 발란서 형식 선택 화면이 표출됩니다. Classic Load Balancer  의 Create를 선택합니다. Load Balancer Name 에 이름을 입력하고 Protocol 과 Port 정보를 입력합니다. Load Balancer Port 와 Instance Port 를 다르게 설정하면  EC2 인스턴스 서비스 포트를 외부에 노출하지 않고 ELB 를 통해서만 접속이 가능하도록 구성할 수 있습니다. 아래  그림과 같이 설정하게 되면 ELB 80 포트로 접속된 서비스를 Instsnce 3000 포트의 서비스로 연결합니다. 입력이 완료되면 Next 를 선택합니다. Security Group 을 설정합니다. 새로운 Security Group을 생성하여 Load Balancer Port  접속을 허용하도록 구성합니다. 입력이 완료되면 Next 를 선택합니다. HTTPS를 사용하지 않는 경우 아래와 같은 경고가 표출됩니다. HTTPS 구성 및 SSL 인증서 설정은 따로 포스팅 하도록 하겠습니다. 우선은  Next 를 선택합니다. Health Check 설정 화면이 표출됩니다. Load Balancer 에 연결된 EC2 인스턴스가 정상적으로 동

[AWS] AWSome Day - Tech 2017 참관기

이미지
안녕하세요 남산돈가스입니다. 지난 주 9월 15일에 세종대학교에서 AWSome Day - Tech 2017 교육행사가 진행되어 참석했습니다. AWSome Day 행사는 아마존웹서비스(이하 AWS)의 기술 에센셜 과정의 내용을 기반으로 컴퓨팅, 스토리지, 데이터베이스 및 네트워크 등 AWS의 핵심 서비스들에 대해 단계적으로 알아볼 수 있도록 구성되어 있는 행사라고 할 수 있는데요. AWS의 핵심 서비스들을 다루어보면서 조금은 더 AWS의 익숙해질 수 있는 자리였습니다. 오전에 세종대학교에 도착했습니다. 처음으로 와본 세종대학교였는데. 생각했던 것 보다 건물들이 세련되고 깔끔하더라구요. 함께 참석했던 분들 모두 오랜만에(?) 대학생의 마음을 가지고 등교하는 기분으로 교육장을 찾아갔던 것 같습니다.ㅎㅎ 행사장을 찾아가면서 곳곳에 AWSome Day 현수막들을 볼 수 있었습니다. 교내에서 이렇게 좋은 행사가 진행되는데 클라우드서비스의 관심이 있는 세종대학교 학생들에겐 정말 좋은 기회라고 문득 생각이 들었습니다. 행사장이 지하 2층에 있어 에스컬레이터를 타고 내려가면서 행사가 준비되고있음을 로비의 소란스러운 소리를 통해 알 수 있었습니다. 로비에는 AWS의 파트너사들인 메가존, 농심데이터시스템, 슈퍼트랙 등 다양한 부스 전시가 진행되고 있었고, 저희는 행사장 안으로 들어갔습니다. 행사장 규모는 정말 엄청났습니다. 물론 세계적인 행사인 AWS Summit보다는 작았지만 일반적인 IT행사라고는 생각할 수 없을 정도로 큰 행사장에 수많은 사람들이 있었습니다. 자리를 찾아 앉아 교육자료까지 준비해놓고 이제 강의를 들을 준비를 마쳤습니다. 기조연설을 시작으로 행사가 본격적으로 시작되었습니다. 아마존 테크니컬 트레이너 두 분이서 번갈아가며 강의를 해주셨는데, 자칫 지루해질 수 있는 강의에서 특별했던 점이 트레이너 한 분이 실제로 AWSome Day를 위한 데모 서비스를 구축해오셔서 AWS 서비스를 이용한 데모에서 행