APNS 따라하기 시리즈 (프로바이더 구성하기)

프로바이더에서의 개발 개요

두번째 시리즈인 프로바이더에서 개발 방법에 대해서 알아보겠습니다.
이미 인증서 만들기에서 제작한 apns.pem 인증서 파일을 FTP 프로그램을 이용해 임의의 경로로 업로드 합니다.
보통 웹루트내에 파일을 올리면 주소나 파일명만 알면 바로 다운로드 받아갈 수 있기때문에 가급적 웹루트가 아닌 곳에 올려주시기 바랍니다.

이 인증서로 APNS 서버와의 통신을 통해 인증을 받고 인증을 받은 상태에서 Payload에 애플이 요구하는 텍스트를 채워 json데이터를 APNS서버로 전송해주기만 하면 됩니다. 이런 부분을 손쉽게 접근할 수 있도록 도와주는 친구들을 아래에서 몇 명 소개시켜드리겠습니다.

그래도 어떤 원리인지는 간단하게 알고 넘어가야겠죠?

 

Payload 작성 양식

다음의 애플문서를 보면 아주아주 자세하게 나와있습니다. 영어가 되시는 분은 애플에서 제공하는 원문을 보시는게 더 좋을 것 같네요!
기본적으로 Payload는 JSON 형식으로 전달되며 형식은 다음과 같습니다.

여기서 aps 키값은 Dictionary 형태로 만들어지며 각각의 키들은 다음과 같은 역할을 합니다.

  • alert : 스트링 혹은 딕셔너리 형태로 값이 들어갈 수 있으며 스트링으로 할 경우 보내고자하는 메시지를 적어 넣어주시면 됩니다.
    • body : 전달할 내용을 입력합니다.
    • action-loc-key : LocalizedString의 키값을 참조해 AlertView의 View Detail이라는 버튼을 언어에 맞게 변경시켜줍니다.
    • loc-key : LocalizedString의 키값을 참조해 내용을 채워줍니다.
  • badge : 배지의 숫자를 입력합니다.
  • acme1 or acme2 : 커스터마이징 변수값으로 임의의 문자열로 키와 값을 만들어 스트링 혹은 배열의 형태로 전달 할 수 있습니다.

PHP 테스트 코드:

아래는 EasyAPNS가 아닌 막코딩으로 전송테스트를 해보았습니다.
상단에 deviceToken정보만 제대로 입력해주면 해당 디바이스로 메시지가 잘 전송되는 것을 확인했습니다.

 

개발에 사용할 오픈소스

위와 같이 Github 및 검색을 해보시면 아시겠지만 다양한 개발자들이 만들어 놓은 오픈소스가 많이 있습니다.
가장 최근에 등록된 PHP_APN의 경우 API를 기능별로 세분화시켜놓아 관리기능을 별도로 제작할때 좋지 않을까 싶습니다.
하지만 저는 PHP로 개발코자 EasyAPNS를 이용해서 개발을 시작하다가 일이 커져 지금은

별도로 개발해 안드로이드까지 통합발송이 되도록 만들어 사용하고 있습니다.
GCM(Google Cloud Message)에 대한 정보는 다음에 시간날때 게재하도록 하겠습니다.

 

관련 참고 자료:

Why was my device token rejected by Apple?

Local and Push Notification Programming Guide

How to build an Apple Push Notification provider server (tutorial)

 

APNS 따라하기 시리즈 (인증서 만들기)

APNS 포스팅 개요

1년만에 다시 푸쉬서비스를 만들려고 하니 기억도 안나고 검색해서 찾아보니 너무 옛날 데이터들이라 헷갈리기도 해서 “이참에 좀 자세하게 기록해놓자!!” 하는 마음에 포스팅을 했습니다. 총 3단계로 나누어 인증서 설치, 서버단에서 푸시 보내기, 앱단에서 푸시 처리하기로 해서 포스팅을 시작하고자 합니다.
APNS란 용어는 애플 개발자 레퍼런스에도 너무 자세하게 나와있고 검색해도 수도 없이 나오기때문에 생략하고 철저하게 개발 적용에만 촛점을 맞추도록 하겠습니다.

 

APNS 인증서 발급 조건

  • 발급일 2013년 7월경
  • Mac OS  X 버전 10.8.4 (산사자)
  • Xcode 버전 4.6.3
  • iOS7이 베타3까지 출시

 

APNS 인증서 발급을 위한 개인 인증서 만들기

우선 애플(Apple) 사이트에서 Notification 인증서를 만들기 위해서는 아래와 같이 키체인을 이용해
CertificateSigningRequest.certSigningRequest 라는 인증서를 만들어야 합니다.

이 인증서는 Notification 인증서를 발급받을 때 반드시 필요하니 우선 따라서 만들어 봅시다.
키체인(Keychain)을 실행한 후 다음과 같이 따라 해보세요!

APNS 설치 인증서 만들기 1
키체인을 실행한 후 키체인접근> 인증서지원 > 인증 기관에서 인증서 요청을 누릅니다.

 

APNS 설치 인증서 만들기 3
디스크저장됨을 선택하고 본인이 키 쌍 정보 저장을 체크하세요! 특히 이메일은 개발하는 애플 개발자 아이디를 넣어주시기 바랍니다.
APNS 설치 인증서 만들기 4
그림과 같이 설정하시고 다음으로 넘어가세요!
APNS 설치 인증서 만들기 5
인증서 서명을 하기 위한 요청 파일이 완성되었습니다.

이렇게 작업을 완료하시고 Finder에서 보기를 눌러 보시면 다음과 같은 파일이 만들어집니다.

CertificateSigningRequest.certSigningRequest

 

 

APNS 인증서 발급받기

[box type=”warning”] 반드시 애플 개발자 계정을 가지고 계셔야 접근하실 수 있습니다. 일반 애플 계정과는 다르니 안되시는 분은 개발자 등록부터 해주시기 바랍니다.[/box]

이제 개인 인증서를 만들었으니 애플 개발자 사이트로 이동합니다.
개발자 사이트에 접속하시면 상단에 Member Center라는 곳이 있습니다.
접속하시면 바로 아래의 이미지와 같은 화면을 보실 수 있습니다. 그림을 보시면서 순서대로 따라하시면 금방 APNS용 인증서를 발급받을 수 있습니다.
그럼, 멤버센터에서 Certificates, Identifiers & Profiles > Identifiers > APP ID’s 메뉴로 이동하세요!

 

Member Center - Apple Developer_1
멤버센터 메인 화면에서 빨간 박스의 Certificates, Identifiers & Profiles를 클릭하세요!
Member-Center---Apple-Developer_2
APP IDs 메뉴를 눌러 들어온 화면입니다. 자신이 만들어놓은 앱아이디를 한눈에 보실 수 있습니다. 그럼, 노티를 원하는 앱아이디를 선택하세요!
Member-Center---Apple-Developer_3
선택하시면 해당 앱에서 무슨 서비스가 연동되고 사용되는지 한눈에 보실 수 있습니다. 그중 Push Notification 서비스가 Enable 되어있는지 확인하고 Disable 되어있으면 하단의 Edit 버튼을 누릅니다.
Member-Center---Apple-Developer_4
저는 이미 만들어 놓아 인증서 내역이 보이지만 몇개고 만들 수 있습니다. 개발용과 배포용으로 만들 수 있으며 우선 개발용으로 해보겠습니다. 자 그럼, Create Certificate를 눌러주세요!
Member-Center---Apple-Developer_5
이과정은 아까 맥에서 만들었던 인증서를 만드는 방법에 대해서 안내해주는 화면입니다. 우린 이미 만들었으니 다음 단계로 넘어가시죠!
Member-Center---Apple-Developer_6
아까 만들었던 인증서를 업로드해야 합니다. Choose File을 눌러 CertificateSigningRequest.certSigningRequest 파일을 연결해주세요!
Member-Center---Apple-Developer_7
자! 그럼 Generate를 눌러 APNS 인증서를 발급받아보세요!
Member-Center---Apple-Developer_9
드디어 인증서가 만들어졌습니다. 다운로드를 눌러주세요!
Member-Center---Apple-Developer_10
인증서가 이제 다운되었습니다. 다음은 인증서를 클릭해 실행해주세요! 그럼 키체인에 인증서가 추가됩니다.

 

이렇게 해서 인증서 발급을 과정을 마쳤습니다. 생각보다 어렵지 않습니다.
자 그럼, 이제부터가 중요한데요! 서버에 직접 설치할 인증서를 만들어 보겠습니다.

 

APNS 서버인증서 만들기

서버인증서를 만드는 작업을 하기전에 우선 키체인을 열어 방금 설치한 Apple Development(or Production) iOS Push Services: kr.co.godo.godo 인증서를 찾아서 Export(내보내기)를 해서 .p12 파일로 만들어줘야 합니다.
다음의 그림을 보면서 따라하시면 되겠습니다. 그림과 같이 인증서 옆에 화살표 아이콘이 있고 그걸 누르면 개인키가 나타나오니 참고하시면서 작업하시기 바랍니다.

Keychain에서 서버인증서 만들기 1
저는 개발과 출시용 Push Service 인증서를 둘다 설치해서 2개가 나타나며 원하는 것을 선택해서 만들어주시면 됩니다.
Keychain에서 서버인증서 만들기 2
우선 그림과 같이 마우스 오른쪽을 눌러 보내기 메뉴를 눌러주세요!
Keychain에서 서버인증서 만들기 3
그럼 이러한 창이 뜰 것이고 별도저장(Save as)에 cert라고 넣어주세요!
Keychain에서 서버인증서 만들기 3-1
저장을 누르면 패스워드를 넣으라는 창이 나타납니다. 이곳에 원하는 패스워드를 넣고 승인을 눌러주세요!
Keychain에서 서버인증서 만들기 4
다음은 개인키입니다. 그림과 같이 열쇠모양의 개인키를 선택해 오른쪽 마우스 눌러 보내기를 클릭합니다.
Keychain에서 서버인증서 만들기 5
별도저장(Save as)에 key라고 입력하고 저장을 눌러줍니다.
Keychain에서 서버인증서 만들기 3-1
외우기 쉽도록 cert에서 만든 패스워드를 동일하게 넣어주세요!

 

이작업을 하시면 바탕화면(여러분이 지정한 경로)에 cert.p12와 key.p12 파일들이 만들어집니다.
이제부터 중요합니다. 인증서 형식을 변환하기 위한 작업으로 Terminal에서 작업을 할 것 입니다.
딱 4가지 명령만 실행하시면 됩니다.  ———- 이걸로 표시된 부분은 결과값을 보여주려고 나타낸 것이니 터미널에서는 입력하지 말아주세요!

다음과 같이 입력하고 엔터를 치면 비밀번호를 물어봅니다.
이 비밀번호는 아까 cert.p12 만들때 작성하신 패스워드를 넣어주시면 됩니다.
이렇게 하고 나면 해당 경로에 cert.pem 이라는 파일이 생깁니다.

 

위 코드는 key.p12를 key.pem으로 만들어주는 작업입니다.
바로 윗부분에 cert.pem 만드는 작업과 동일하지만 마지막에 패스워드를 생성하는 작업을 해주셔야 합니다.

 

위에서 만들어진 key.pem을 가지고 key.unencrypted.pem을 만드는 코드입니다.
하단의 출력결과에도 써있다 시피 윗단계에서 새로 생성한 패스워드를 입력하시면 됩니다.
이제 마지막 하나가 남았습니다.

 

마지막부분에 apns.pem이라고 적어놓은 부분은 여러분이 만들고 싶은 이름으로 변경해서 작성해주시면 됩니다.
이렇게 마무리 하시면 작업하신 해당 경로에 아래리스트와 같이 6개의 파일들이 생성되어 있을 것이니 꼭 확인해주시기 바랍니다.

  • cert.p12
  • key.p12
  • cert.pem
  • key.pem
  • key.unencrypted.pem
  • apns.pem

 

윗 단계를 하나의 이미지로 보면 다음과 같습니다.

Keychain에서 서버인증서 만들기 6
총 6개의 파일이 생성되며 터미널 안에 보시면 타이핑한 내역이 그대로 있습니다.

 

이제 모든 것이 끝났습니다. 결국 apns.pem 이 파일 하나 만들고자 이짓을 했던 것 입니다.
푸시서버로 구성할 곳으로 apns.pem 파일을 업로드 해주시면 됩니다.
위치는 아무곳에나 하셔도 상관없지만 경로만 알면 다운로드가 가능한 웹루트는 피하시기 바랍니다.

이렇게 만들어진 인증서를 이용해 SSL Connect의 연결을 유지한 상태에서 Push메시지를 발송하면 됩니다.
개발에 관련된 부분은 다음 스텝에서 안내해드리겠습니다.

 

APNS관련 포스팅 보기

 

Manziel now has four sixty minute assessments to prove he is the future of the franchise and give the Browns fans some hope for next year. If oakley outlet he can’t do that then the city of Cleveland will likely be in for cheap nba jerseys a few more years despair.. The identity of these cell population was also further confirmed and functionally characterized by quantitative RT PCR in the presence or absence of lipolysaccharide (LPS) using microglia specific PCR primers sets (IBA1, CD11b, CX3CR1 and TNF) (Fig. 5C). You see, the media is like the attractive girl at your high school who you always hated. They’re deceptive, in love with the best, and as much as you want to stay away from them, you keep on giving them the attention they desire. If it turns out that a wedding, birthday, or bar mitzvah dares to interfere with throwback nba jerseys your upcoming Jimmy Buffet or Dave Matthews show, you needn’t fear. Selling your tickets over the Web is easy and legal.. The report showed Sirius XM’s short interest for the two weeks ending Nov. 15 had increased to just over 212 million shares, from its previous reporting period of 183 million. Now looking ahead to Q4, when I came back to Electronic Arts I made a commitment to invest in quality both because I believe it is the right decision for the long term financial health of the company and because it is what our consumers have a right to expect. This is an important principle, even if it results in short term pain.. Again I expect to see the $2.00 level act as a pivot for at least 4 weeks, with trading above and below that figure. If we have an entire mild winter, thanks to a strong El Nino, we could spend February and March 2016 having a ceiling of $2.00, with dips cheap oakleys down to the $1.50 to $1.60 level. This Cheap nfl jerseys is a good starting point for ideas. Each soo unique and amazing. While it was a substantial offer, we were advised by Jarryd’s management that it was not comparable to the other proposals. The club wishes Jarryd well in his future endeavours.”. This will help the stinger to pop out. Never use tweezers as they might actually push the stinger further in.. And for years they exempted athletics from the cut, but then these last few years there’s just been no choice. And that’s what the players are feeling now.. Stats Cheap nfl jerseys show the Lakers and Clippers main bench units have been equally good this season. The Laker group offensive rating, which measures points scored per 100 possessions, is 104.9. “Fair point” is where Clinton left it. Inevitability: Clinton launched her 2016 campaign pushing back hard on the perception that she expected to win ray bans ale the sense of inevitability that surrounded her campaign in 2008.

Galaxy S4 Switch Cover 케이스 출시기념! 체험 리뷰

ElevenPlus Switch Cover Case 체험 리뷰

Movie Passengers (2016)

Elevenplus switch cover case

25가지의 컬러조합이 가능한 일레븐플러스 스위치 커버

이번에 스마트폰 네이버 카페에서 체험단 신청해 당첨되어 받자마자 찍어봤습니다.
제가 쓸 건 아니고 와이프가 사용할 것이기에 Inspiring OrangeGold Pink로 신청했습니다.

Movie Passengers (2016)

Movie Passengers (2016)

환경까지 생각하는 일레븐플러스 스위치 커버

제품 케이스는 두껍고 튼튼한 종이재질로 된 하얀 판위에 투명 케이스로 제품을 덮어 깔끔하고 고급스러운 느낌이 들었고,
케이스의 크기를 제품에 맞춰 최소화시켜서 그런지 환경도 함께 생각하는 기업이라는 느낌을 받을 수 있었습니다.

우선 커버부터 보시겠습니다.

스위치 케이스 커버

천연소재로 만들어진 부드러운 촉감의 일레븐 플러스 스위치 커버

Inspiring Orange 색상의 커버입니다. 재질은 초극세사를 만지는 듯 굉장히 부드럽고 입자간의 간격이 아주 촘촘해서 부드러운 가죽같은 느낌도 느낄 수 있었습니다.
특히나 요즘같이 항상 손에서 떨어지지 않을 만큼 사랑스러운 존재가 되어버린 스마트폰 유저들을 위해 천연소재의 커버를 사용한 제조사의 센스가 돋보입니다.
요즘같이 엄마, 아빠가 아이들을 달래기 위해 핸드폰을 많이 주는데 아이들 피부까지 생각한다면 좋은 선택이 되지 않을까 싶습니다.

그럼, 이 멋드러진 케이스에 휴대폰을 장착해보도록 하겠습니다.

스위치 케이스 휴대폰 장착 전

탈부착이 쉽고 반영구적으로 사용 가능한 리어플라이어블 소재 사용

사진을 보시면 아시겠지만 짙은 회색의 양면테이프가 존재합니다. 이곳의 비닐을 벗겨내고 그냥 얹으시기만 하면 제품이 찰싹~ 하고 달라 붙습니다.
쓰다보면 어떨지 모르겠지만 자국도 남지않고 스마트하게 잘 붙습니다.
제품 설명서에는 잘 붙지 않을시 물티슈로 먼지를 닦아내면 다시 잘 붙는다고 설명해놓았습니다.

그럼, 붙여보도록 하겠습니다.

스위치 케이스 부착 후

카메라가 잘 보이도록 위치를 잡는게 좀 어려워서 여러번 떼었다 붙였다를 반복해 잘 붙였습니다.
꼭 붙이시기전 휴대폰 뒷면을 이물질이 없도록 깨끗하게 닦아서 붙여주시면 여러번 떼었다 붙여도 문제없이 잘 붙습니다.
이렇게 붙이고 와이프에게 보여주니 굉장히 좋아하더라구요!

카드수납 공간이 2개나 되는 일레븐 플러스 스위치 커버

옆에 카드꽂이와 인포켓이 있어 교통카드나 현금도 넣고 다니실 수 있습니다.
저는 옛날 신세계 포인트 카드를 꽂아보았습니다. 100% 다 집어넣은 건 아니구요!

재질 자체가 미끈미끈한 레자가 아니라 다른 케이스처럼 카드가 쉽게 빠지지 않습니다.
전에 사용하던 케이스는 카드가 미끄러져서 항상 신경을 써야 했는데 이 부분은 정말 좋은 것 같습니다.

IMG_0666

다양한 칼라 조합으로 나만의 스타일이 완성

하단은 골드핑크 칼라 커버로 변경해서 부착해 본 것 입니다.
특히나 요즘같은 개성시대에 딱 어울리는 제품이네요~!! 자신의 스타일에 맞춰 구매할 수 있습니다.

탈부착이 가능한 커버

Movie Passengers (2016)

아래는 일레븐플러스에서 제공해드리는 이미지입니다.
25가지 나만의 스타일을 만들어보세요!!

아참! 한가지~!!
이 제품을 구매하시면 유니세프로 일부금액이 기부됩니다.
좋은 일도 하시고 나만의 스타일도 만드시고 1석 2조를 누려보세요!

Movie Passengers (2016)

elevenplus_gs4_front_cover

 

크롬의 개발자툴 스킨 바꾸기

시작하며

download-hero-win

웹개발하실때 크롬은 거의 필수품이라 많이들 쓰시리라 생각합니다.
크롬 개발자도구에서 사용할 아주 괜찮은 스킨이 하나 나와서 소개하려고 합니다.
왠지 ST2에서 사용하는 테마와 느낌이 유사해서 그런지 더 마음에 드네요!
우선 뭘 소개하려는 것인지 밑에 이미지를 봐주세요!

 

변경 전모습

크롬 적용 전
크롬 적용 전

 

변경 후모습

크롬 적용 후
크롬 적용 후

 

나만의 스타일 만들기

우선 크롬 개발자 도구의 CSS를 변경하기 위해 해당 CSS 파일의 위치를 알아야 합니다.
플랫폼별로 경로는 다음과 같습니다.

MAC에서의 경로

 Ubuntu에서의 경로

 Windows Vista이상 에서의 경로

 Windows XP에서의 경로

사용중인 플랫폼에 해당 위치로 가시면 Custom.css가 있습니다. 능력있으신 분들께서는 이부분을 수정해서 나만의 개발자 도구 스타일을 만드시면 됩니다.
제가 위에 보여드린 것은 Zero Mark Matrix라는 이름을 가진 테마이며 Github에서 공개 배포 중 입니다.  테마를 다운 받으시면 Custom.css와 Custom-stable.css 2개가 있습니다.

이중 Custom-stable.css 파일을 Custom.css로 변경하셔서 해당 위치에 덮어씌우시면 끝납니다.
그런후, 크롬 종료후 재실행하여 확인해 보시면 적용되어 있는 것을 보실 수 있을 것 입니다.

자세한 내용과 설명들은 해당 링크 참고하시고 잘 사용하세요! ^^

 

 

 

PHP로 구현한 SEED128 + CBC + PKCS5 암호화

SEED 암호알고리즘
SEED를 제공하는 인터넷진흥원 사이트 스크린샷

 

Prologue

회사에서 미션이 하나 떨어졌습니다. 한국인터넷진흥원에서 순수 국내기술로 개발된 SEED128을 PHP로 구현하는 것 입니다.
참고로 한국인터넷진흥원에서 JAVA나 C언어로는 SEED소스를 제공하고 있습니다. 심지어 안드로이드와 Objective-C도 제공하는데 PHP만 없습니다.
SEED에 관련된 내용은 해당 사이트에서 참고하시기 바라오며, 현재 표준으로 채택되어져 각종 금융기관에서 널리 사용되고 있다는 것만 알고계시면 될 것 같습니다.

SEED 암호화 기술은 블록 암호 알고리즘을 채택하고 있어 통신하기 위한 곳 모두 동일한 Key를 가지고 있어야 암호화와 복호화가 가능합니다.
저 역시 금융기관쪽과 중요한 데이터를 통신을 하기 위해서 사용하는 것 이며 해당 금융기관쪽은 자바로 이미 구현되어 있어 동일한 Key를 가지고 저희쪽 PHP로 암/복호화가 가능해야 합니다.
사실 말이 PHP로 구현하는 것이지 Native 언어는 명확한 기준으로 변수타입들이 정해져 있기라도 하지만 웹 전용으로 유연하게 만들어진 PHP에서 지원할리 없기때문에 무수한 삽질이 예상되었습니다.

우선 검색하기 시작했습니다. 다행히도 SEED자체에 대한 프로세스는 PHP로 구현해놓으신 분이 계셨습니다. 아래에서 class.seed.php를 다운로드 받으시면 됩니다.
다시한번 이자리를 빌어 정말 감사드립니다.

출처: http://docs.cena.co.kr/textyle/15770

하지만 위의 소스는 순수하게 SEED만 구현해 놔서 제가 원하는 것을 구현하기에는 부족했으며, 기존 class.seed.php 클래스는 운영체제가 64bit인 경우 Integer의 Max값이 커지다보니 라운드키의 정수값을 오버플로우 시키지 못하는 증상으로 인해 값을 제대로 출력하지 못하는 문제가 있어 이 부분은 별도로 해결했습니다.

[box type=”info”]자바는 플랫폼에 관계없이 32비트 고정이지만, PHP는 플랫폼에 따라 32비트면 정수의 최대값이 2147483647이고, 64비트면 9223372036854775807로 자동으로 할당됩니다.[/box]

암호화를 운용하기 위해서 저의 경우에는 CBC와 PKCS5 방식으로 구현을 해야하며 통상적으로 검색하면 나오는 IV의 값도 PHP에서 사용하는 랜덤 스트링 형태가 아닌 자바와 동일하게 바이트 배열로 정해진 값을 만들어서 써야 하기 때문에 본젹적인 개발과 검색에 들어가기 시작했습니다. 말 자체를 이해 못하시는 분들을 위해 용어에 대한 정의들 부터 살펴보겠습니다.

 

암호 블록 체인 방식 (CBC)

그림을 보면 더 이해가 잘 되야 하는데~ 저는 이런 그림을 별로 좋아하지 않아서 이해가 잘 되지 않았습니다.
간단하게 설명하면 이전 블록의 암호문을 현재 평문 블록을 암호화할 때 사용하면서 운용하는 모드입니다. 따라서 같은 평문들도 서로 다른 암호문 블록으로 순차적으로 암호화가 이루어지게 됩니다. 하지만 처음 나오는 평문을 암호화할 암호문이 없기 때문에 보통 랜덤으로 만들게 되며 이를 IV(초기화 벡터)라고 합니다.
평문의 첫번째 블록이 IV와 XOR을 수행하고 나서 암호화를 수행하게 되며 다음은 그 암호화된 블록이 평문의 다음블록을 XOR하는 식으로 평문 블록을 마칠때까지 반복하는 구조입니다. 이게 저도 수도 없이 봤지만 쉽게 이해가 되지 않더군요! 그래도 이해하고 넘어가셔야 합니다. 아래는 위키피디아에서 발췌한 이미지를 첨부하였으며 이해가 안되시는 내용은 구글링을 통해 확인하시기 바랍니다.

Cbc encryption.png
CBC 운영모드에서의 암호화
Cbc decryption.png
CBC 운영모드에서의 복호화

Continue reading PHP로 구현한 SEED128 + CBC + PKCS5 암호화

코드 편집기 Sublime Text 2 소개

 

Prologue

보통 에디터하면 PHP/HTML/CSS 자동완성으로 좀더 편리하게 코딩할 수 있는 도구라고 생각하고 있습니다. 저도 메모장부터 시작했지만 맥에서는 Coda를 사용하고 PC에서는 EditPlus를 사용해왔습니다. 하지만 이제 떠날때가 온 것 같습니다.

[box] 가볍고 확장성이 뛰어난 Sublime Text 2라는 에디터를 소개합니다.[/box]

혹 할만한 동영상을 찾지 못해 간단한 Feature에 대해서 설명해놓은 동영상을 첨부했습니다. Sublime Text 2 사이트의 메인페이지를 보시면 다른 에디터에서 보기 힘든 기능들을 보실 수 있으니 참고하시기 바랍니다.
ST2가 이미 나온지 꽤 됬음에도 불구하고 아직도 존재를 모르시는 분들이 많은 것 같습니다.
써보지 않으셨던 분들께서는 꼭 한번 사용이라도 해보라고 권해보고 싶습니다.

ST2는 작은 덩치에도 불구하고 확장성이 뛰어나고 리눅스, 맥, 윈도우 모두 지원합니다. 어떤분이 써놓으신 글을 보니 “한번 써보면 vi를 버리게 만드는 녀석”이라고 해놓으셨더군요! 그만큼 코딩하는 사람들만을 위해 만들어진 프로그램임에는 틀림없습니다.

그래서 그런지 설정하는 부분도 UI가 아닌 설정 파일을 열어서 텍스트를 수정하면 설정이 완료되는 방식입니다. 처음에는 적응이 잘 안되지만 사용하면 할 수록 편해지는 제 자신을 보곤 합니다.  아래 그림에서 우측의 스크롤 영역에 보이는 코드 프리뷰 기능도 신선하게 느껴지지 않나요?

 

간단한 특징 소개

sublime_text_2
Sublime Text 2의 기본 UI

보기 좋은 떡이 맛도 있다고 처음 접했음에도 낯설지 않은 정감 있는 모습입니다. 간단하게 제가 느끼는 장점들을 간략하게 나열해보도록 하겠습니다.

  • 작고 가볍다.
  • 모든 기능들을 단축키로 이용할 수 있다.
  • 플러그인을 통해 기능 확장이 용이하다.
  • 좌측의 네비게이션에서 클릭만해도 파일의 내용을 바로 볼 수 있다. (일종의 프리뷰 기능)
  • Python Interpreter가 내장되어 있어 Python 개발에 용이하다.
  • 파일 전체검색 뿐만 아니라 쓸 수 있는 기능들에 대해서도 검색해서 해당 기능을 바로 이용할 수 있다.
  • EUC-KR 작업시 FTP에서 Encoding 에러가 나니 EUC-KR 환경의 유저는 사용을 피하시는게 좋습니다. (2013년 7월)
  • Sublime Text 2 블로그에서 소개하는 신기한 편집 기능들을 이용할 수 있다.

패키지 컨트롤 설치방법

  1. 패키지 컨트롤 (Package Control) 메뉴를 추가하겠습니다.
  2. 상단 메뉴바의 View > Show Console을 클릭하면 아래 이미지와 같이 하단에 콘솔 박스가 출력됩니다.
    install_package_control
    패키지 컨트롤 설치 안내 화면

     

  3. 아래 그림과 같이 소스코드를 콘솔에 붙여넣고 Enter를 누릅니다.

  4. 재부팅하라는 메시지가 콘솔에 나타나고 프로그램을 종료하시고 다시 실행합니다.
  5. 재실행후 메뉴의 Preferences > Package Control 이라는 메뉴가 생성되는 것을 보실 수 있습니다.
  6. 클릭해서 열어보시면 패키지와 관련된 메뉴가 쭈욱~ 나타납니다.
  7. 여기서 Install Package 를 누릅니다.
  8. 패키지메뉴 창이 닫히고 패키지 리스트가 나타납니다.
  9. SFTP, WordPress, Emac과 같은 키워드로 검색해서 원하시는 플러그인을 설치하시면 됩니다.
  10. 설치시 클릭만 하시면 자동으로 자기가 다운받아서 설치합니다.

 

워드프레스 플러그인 설치

저희가 알고자 하는 워드프레스 함수를 자동완선시켜서 작업을 도와주는 플러그인을 설치해보도록 하겠습니다.
설치하시게 되면 아래와 같이 Sublime Text 2에서 편리하게 사용하실 수 있습니다.
참고로 woocommerce의 함수 지원이 가능한 플러그인도 제공합니다.
그럼 설치하는 방법에 대해서 안내해드리도록 하겠습니다.

wordpress_plugin

  1. Github의 서브라임2 워드프레스  페이지로 이동합니다.
  2. 해당 플러그인을 다운로드를 받습니다.
  3. Preference > Browse Packages… 를 클릭하면 탐색기가 열립니다.
  4. 해당 위치에 다운받은 워드프레스 페이지를 올려놓습니다.
  5. ST2를 종료후 다시 실행하면 적용됩니다.
  6. 자동설치 안되는 플러그인은 이와 같이 설치하시면 됩니다.

 

참고 사이트

http://windtale.net/blog/sublime-text-tip/

IE9 이하에서 HTML5 사용을 위한 필수요건

현재 회사 프로젝트 홈페이지 구축하면서 IE에서 버전 및 쿼크/표준모드에 따라 레이아웃이 무너지는 증상을 잡기 위해 사용중인 것들입니다.
몇년을 IE 신경안 쓰다가 다시 IE를 신경쓰면서 작업하려고 하니 미칠 것 같습니다. ㅋㅋ

특히나 IE8에서 레이아웃이 무너지는데 저 같이 고생하시는 분들 없으셨으면 합니다.

 

IE9 미만에서 HTML5 엘리먼트 지원 (구글 코드에서 다운로드)

위 코드가 html5shiv가 지원하는 HTML5 엘리먼트

 

IE7 미만에서 HTML 및 CSS 엘리먼트, 투명 PNG 지원 (구글 코드에서 다운로드)

이는 현재 사용하는 IE보다 버전이 낮을 경우 작동하는 스크립트로 버전이 낮은 브라우저에서 호환성을 보장하게 만들어줍니다.
저는 <!–[if IE 9]> 이런 형식으로 IE9일때만 혹은 IE8일때만 불러올 수 있도록 변경해서 사용중입니다.
특히 IE8부분은 아예 제거를 해버리니 레이아웃이 정상적으로 나오더군요!!
참고만 해주세요! 각자의 환경에 따라 다르게 작동할 수 있으니 유의하셔서 작업하시기 바랍니다.

 

IE9 미만에서 HTML5 DOM 인식

 

스크립트도 크로스 브라우징 생각하면 IE와 다르게 사용해야하는 부분들도 많습니다만 여기서는 그 부분은 다루지 않겠습니다.
급하게 작성하는거라 틀린 부분이나 추가사항 코멘트 달아주시면 참고하도록 하겠습니다.

 

G4와 iMac에서 외장하드 같이 쓰기

프롤로그

와이프의 부탁으로 시작된 일이였지만, 한번의 쓰라린 실패를 겪고 정말 힘들게 완수한 작업입니다.
힘들었던 만큼 고생하지 마시라는 의미에서 좀 상세하게 포스팅 해볼까 합니다.
G4에 사용할 외장하드 구매기 및 사용기입니다.

G4

 

첫번째 실수이자 마지막 실수

seagate_backup_plus

씨게이트 백업플러스를 구매한건 상식도 없는 무지한 저의 최대의 실수였습니다. G4를 써본적이 없으니 아무생각 없이 구매한 것이였습니다.

G4는 USB1.1만 지원합니다. 즉, 데이터 전송 대역폭이 1.5Mbps ~ 12Mbps이기때문에 느려도 너~~~~무 느립니다.  반드시 G4는 Firewire400 혹은 IEEE1394A 라고 불리우는 포트가 있어야 합니다. 이걸 이용해야 USB2.0보다 조금 느린 전송속도를 얻을 수 있습니다. 포트의 핀수는 6핀입니다. IEEE1394A는 4핀짜리도 있으니 주의하셔야 합니다.

여튼 백업플러스의 하단 트레이를 변경하면 썬더볼트는 물론 Firewire400도 쓸 수 있다고 하여 구매한 것이였는데, 막상 외장하드를 구매하고 트레이를 구매하려고 하니 국내에서는 구할 수도 없고 해외 구매대행으로 구매하면 배보다 배꼽이 더 큰 격이더군요! 어이없음으로 인한 상실감이 컸습니다.

이 실수를 통해 전제조건을 작성하게 되었습니다. 아래를 참고하세요.

 

전제조건

  1. 주 작업이 PowerPC(PPC) 기반의 G4에서 이루어지며 작업내용을 외장에 저장할 수 있어야 한다.
  2. 기존 작업물들이 iMac에만 연결되는 외장에 있어서 이 내용물을 G4와 호환되는 하드디스크에 옮겨야 한다.
  3. Firewire400 (6핀)을 사용할 수 있어야 한다. (G4에서는 USB1.1만 지원해 전송속도가 차라리 안쓰고 말겠다는 마음이 듬)
  4. iMac에서의 연결을 위해 firewire800 혹은 USB2.0/USB3.0을 동시에 지원하는 외장하드여야 한다.

 

다시 외장하드와 2TB하드 구매하기

전제조건들을 충족하는 외장하드를 찾는게 정말 쉽지 않더군요! 찾아보신 분들은 다 공감하실 겁니다. 불과 2년전만 해도 쉽게 구할 수 있었던 것들이 지금은 어디로 갔는지 다 사라졌습니다. 현재 Firewire400 제품은 국내용이 거의 없습니다. 선택의 폭도 너무 좁아서 모양새도 다 맘에 안듭니다. 그나마 새로텍 제품 많이 사용하시는거 같던데 저의 경우 새로텍 제품에 당한 적이 있어서 제외하고 검색했습니다. 그러다 가격대비 만족도 좋은 녀석을 찾은 것이 OWC의 Mercury Elite-AL Pro 였습니다.

아참, Firewire400을 왜? 사용해야하만 하는지에 대해 대충 써놓은 것 같아 짚고 넘어가겠습니다.
굳이 USB1.1로 파일 전송을 하시겠다는 분이 계시다면 정말 말리고 싶을 정도로 느립니다. 오죽하면 저도 이 고생을 하면서 이렇게까지 쓰겠습니까? 다 이유가 있는 것입니다.
Firewire400은 빠릅니다. USB2.0의 전송속도에는 미치지 못하지만 거의 버금가는 속도로 파일을 데스크탑과 주고 받을 수 있으니 이정도 이유면 충분히 이해가 가시리라 믿습니다.

owc_mercury_elite_pro

가격은 케이스만 14만원정도 합니다. 하지만 OCW이라는 회사가 미국에서 규모가 큰 회사이기도 하고 결정적으로 맥 유저들의 평가가 극찬일색이였습니다. 그걸 믿고 구매하기로 결심하고 구매완료 했습니다. 그리고, 하드디스크는 외장하드가 SATA2 (3Gbps)만 지원해 요즘 나오는 최신하드를 장착하기에는 무리가 있더군요! 이 하드 역시 구하기 쉽지 않았습니다. 대부분 SATA3 (6Gbps) 하드들이라 힘들었고 요즘 나오는 하드들은 Advanced Format이라고 하는 저절전 기술(?)이 적용된 하드들 뿐이더군요!

맥에서는 상관없다고들 하는데 구형PC에서 작동하는 윈도우 XP에서는 인식이 안되는 문제도 발생하고 인식이 되도 느리게 반응한다는 의견들이 많이 있어 찜찜했습니다. 그러다 우연히 Advanced Format 기술이 적용안된 중고하드 찾아서 저렴하게 그걸로 장착 해버렸습니다.

 

사용할 준비하기 (포맷하기)

처음에 G4에서 포맷하고 iMac에 연결하니 연결이 되지 않습니다. 이런 경우 반드시  Mac OS 확장(저널링) 으로 포맷하셨는지 확인해보시기 바랍니다.
그래도 안된다고 하시면 iMac에서 확실하게 포맷할 수 있는 방법이 있어 소개하고 마무리하겠습니다.

  1. 디스크 유틸리티 실행합니다.
  2. 해당 디스크를 선택합니다.
  3. 파티션 탭을 선택합니다.
  4. 원하는 파티션의 갯수를 선택합니다.
  5. 하단에 활성화된 옵션을 선택합니다.
  6. 아래 그림과 같이 Apple 파티션 맵을 체크합니다.
  7. 승인하고 적용을 눌러 파티션을 만듭니다.

imac_format

GUID 파티션으로 하시게되면 내용과 같이 10.4버전 이상에서만 작동되게 되있습니다.
저희가 사용하는 G4는 Mac OS 9.x 버전이기때문에 반드시 Apple 파티션 맵으로 선택하신후 적용하시면 됩니다.

 

사용후기

사용해보니 외장디스크를 추출했을때의 꺼지는 소리도 안정적입니다. 개인적으로 가장 중요하게 생각하는 부분입니다.
일전에 새로텍 제품을 사용하고 있었는데 그게 지금은 맛이 가셨습니다. 물론 저렴해서 좋긴 하지만 디스크 추출할때 전원 차단 소리가 좀 크게 나는듯하고 이부분이 하드디스크에 부담을 많이 준다는 느낌입니다. 결국 2년 사용하니 하드가 맛이 가더군요! 요즘은 기술이 좋아져 안그럴 수도 있는데 중요한 자료들을 날리고 나니 다시는 사용하고 싶지 않는 브랜드가 되어버렸네요!

지금 구매해서 사용중인 제품은 맘에 듭니다.
현재 기존 데이터들을 집어넣고 연결해보았는데, iMac에서도 G4에서도 잘 작동됩니다. 외장에 있는 편집 파일 열어서 작업해도 버벅임 없이 잘 되더군요.
제품 자체는 통 알루미늄 바디라 열방출도 잘 될 것 같아 보입니다. 또한, 외장을 손으로 들어보면 꽤 묵직한 느낌인데요 무겁다기 보다는 왠지 튼튼하다는 느낌이 더 강하게 듭니다. ㅋㅋ 자기만족에서 나오는 발언일 수도 있으니 참고하시기 바라오며, G4용 외장하드를 구매하고자 하시는 분들께 한줄기의 빛이 됬으면 하는 바램으로 이상 포스팅을 마치겠습니다.

궁금하신 부분은 댓글 주시면 답변해드리겠습니다.

윈도우7에서 가상 무선 공유기 만들기

회사에 사람이 많다보니 Wi-Fi가 그 역할을 제대로 하지 못하고 있어, 방법을 찾던 중 SoftAP라는 것이 있어 소개하고자 합니다.

SoftAP는 가상와이파이 어댑터를 만들어 주는 것으로 실질적으로 무선랜을 공유기처럼 만들어주는 것을 말합니다.
예를 들자면 제 PC의 로컬연결의 공유를 통해 가상의 무선랜카드로 인터넷을 송신해 결국 제 아이폰에서 인터넷을 할 수 있게 해주는 것 입니다.
써놓고 보니 말이 참 어렵네요!

참고로 제가 회사에서 받은 PC는 무선랜이 달려있는 PC라 가능합니다.
작업전 자신의 PC에 무선랜이 장착되어 있는지 반드시 확인후 사용하시기 바랍니다.

자, 그럼 아래와 같이 스텝by스텝으로 진행해보시면 아래 그림과 같이 작동되도록 여러분들도 쉽게 따라하실 수 있습니다.

virtual_wifi

 

  1. CMD창을 관리자 권한으로 열기
    반드시 CMD창을 관리자 권한으로 열어주셔야 명령어가 동작합니다. (시작 > 보조프로그램 > CMD 마우스 우버튼 클릭후 관리자로 열기)
  2. Virtual Wi-Fi Adaptor 만들기
    열린 CMD창에 아래와 같이 작성하고 name에는 넣고 싶은 이름을 pass에는 넣고 싶은 암호를 넣어주시면 됩니다.

  3. 네트워크 > 속성 > 어댑터 설정변경
    위의 그림처럼 Virtual wifi monoport adaptor 가 제대로 생성되었는지 확인해주세요!
    다음 아래 그림과 같이 로컬 영역 속성의 공유탭을 눌러 회선을 공유한다고 체크합니다. 그런후 가상 아답터를 선택하시면 위 그림처럼 상태필드에 “공유됨”이라는 표시가 됩니다.
    share_local_internet
  4. 서비스 시작
    준비가 모두 끝났습니다. 서비스 시작만 하시면 됩니다. 아래줄은 중지시킬때 사용하는 명령입니다.
    CMD창에서 아래와 같이 시작 혹은 종료 메시지를 날려주시면 됩니다.

이렇게 해놓고 보니 윈도우 시작시 자동으로 실행되었으면 좋겠지요?
그럼, 2가지 방법으로 파일 첨부합니다. 다운받으신 후 압축을 풀어주세요!
다운로드 링크 : Virtual WiFi 다운로드

첫번째, netsh.exe를 시작프로그램안에 넣어놓으시면 시작시 자동으로 작동됩니다.
두번째, Virtual WiFi.reg 를 실행하시면 레지스트리가 등록되어 시작시 자동 적용됩니다.

둘 중 편한 방법으로 사용하시면 됩니다. 저는 걍 레지스트리 등록해서 사용합니다. ^^

팝업에서 부모창의 iframe으로 접근하기

새로운 회사에 이직해 정말 오랫만에 자바스크립트를 만지다 보니 많이 헷갈립니다.

제가 근무하는 곳은 주로 IE위주로 작업이 되어 있어 타 브라우저에서 작동 안되는 경우가 많습니다. 이것들을 언제 고치나 앞이 캄캄하기도 하지만 덕분에 좀더 깊이 있게 배울 수 있지 않을까 하는 마음으로 첫 테이프를 끊습니다.

부모창에서 iframe을 두고 그 iframe에 팝업 호출 함수를 통해 팝업을 띄우는 방식에 대해서 설명합니다.
보통 이렇게 하면 브라우저에서 팝업차단이 설정되어 있어도 팝업이 차단되지 않고 호출됩니다.

이곳에서는 실명인증이나 본인확인 혹은 아이핀 팝업을 호출할때 사용하고 있습니다.
보다 쉬운 이해를 위해 아래와 같이 그림을 첨부하오니 참고하시기 바랍니다.

How to access form between window objects (2)

 

1. 부모창에서 경로 없는 팝업 생성 및 아이프레임으로 원하는 주소를 호출

; 비어 있는(about:blank) 팝업이 호출되면서 동시에 특정 주소를 아이프레임으로 호출합니다. 여기서 특정 주소의 소스코드는 2번을 참고하세요!

 

2. 부모창에서 아이프레임으로 호출한 파일

; POST 타입 폼 전송을 팝업으로 호출해 이미 떠 있는 비어있는 팝업에 폼으로 전송한 내용이 들어가게 됩니다. 여기서 중요한 것은 빈 팝업을 호출할때의 윈도우의 이름인 ” popupWindowName” 입니다. 반드시 이것으로 타겟을 지정해주어야 이미 열려져 있던 빈 팝업창으로 폼을 전송해줍니다.

사파리에서 간혹 Unsafe Javascript라는 에러가 About:blank 팝업 창에서 뜨는 경우가 있는데 이럴 경우 iframe src에 orgin=[자신의 도메인] 파라미터를 추가해주시면 일단 작동 되는 것을 확인할 수 있습니다.

 

3. 팝업에서 처리한 내용을 부모창으로 가져오기

; 팝업에서 아래와 같이 작성하게 되면 부모창의 아이프레임 즉 2번 소스의  receivedForm을 submit해서 진행해주게 됩니다. 한가지 주의해야 할 점은 contentWindow라고 적혀있는 부분인데, IE에서는 빼도 상관없지만 타 브라우저에서는 작동하지 않는 문제점을 야기 시키니 주의가 필요합니다. 그리고 iframe을 호출할때 반드시 getElementById를 이용해 iframe을 호출해야 정상 작동합니다.

 

가령, 부모창의 iframe이 아닌 부모창 자체의 폼을 submit하려면 어떻게 해야할지 궁금해하시는 분들도 계실까하여 아래 소스코드 첨부합니다.