안경잡이개발자

728x90
반응형

C언어의 개요

나동빈(안경잡이개발자)


C언어의 역사


C언어는 유닉스(UNIX) 운영체제를 만들기 위해 처음으로 개발되었습니다. C언어의 창시자는 미국 Bell 연구소의 데니스 리치(Dnnis Ritchie)이며 1978년에 <The C Programming Language>라는 책을 출간했습니다. 이후에 1983년 ANSI 표준 C가 발표되면서 그 구체적인 틀이 잡히게 되었습니다. 이러한 C언어는 최근에 가장 많이 사용되고 있는 Java, C# 등 고급 언어의 원형입니다. 특히 C언어의 문법을 포함하면서 다양한 라이브러리 및 객체 지향 기술을 지원하는 C++도 매력적인 언어 중 하나입니다.


C언어의 개념


프로그램(Program)컴퓨터가 처리할 작업 처리 절차를 의미하며 프로그래밍이란 프로그램을 만드는 행위입니다. 그러한 의미에서 프로그래밍 언어컴퓨터와 의사소통하기 위해 사용하는 언어라고 할 수 있습니다. 프로그래밍 언어로 가장 대표적인 것이 C언어이며 처음 프로그래밍을 입문할 때 가장 많이 접하는 언어이기도 합니다. 더불어 실무에서도 굉장히 많이 사용됩니다. (특히 나중에 시스템 해킹이나 게임 해킹 등을 공부하실 때 C를 모르면 아무것도 분석할 수 없습니다. 알고리즘 대회도 C++이 가장 많이 사용된다는 점을 기억하세요.)


C언어의 특징


1. 다양한 운영체제의 기반이 되는 언어이다.

  → 다시 말해 C를 할 수 있으면 운영체제를 만들 수도 있습니다.


2. 구조적 프로그래밍 언어로 모듈식 구현이 용이하다.

  → 그렇다면 C언어로 객체 지향 프로그래밍을 못 할까요? 원리적으로 불가능한 것은 아닙니다. 구조적 프로그래밍에 적합하다는 것 뿐이지 C언어로 객체 지향 프로그래밍 언어 자체를 개발할만큼 강력합니다.


3. 함수의 집합으로 구성된 함수형 언어입니다.

  → C 프로그램은 main() 함수부터 시작해 다양한 함수를 반복적으로 불러와 실행하고 종료됩니다.


4. 시스템간 호환 및 이식성이 좋다.

  → C언어는 세계적으로 컴퓨터 시스템의 주축이므로 당연한 소리겠지요?


5. 동적메모리 관리 및 하드웨어 제어에 유리하다.

  → C언어는 컴퓨터 메모리에 직접 접근이 가능한 강력한 언어입니다.


6. 고급 및 저급 언어간 인터페이스가 용이하다.

  → 나중에 리버싱 및 보안을 공부하실 때 어셈블리어를 뜯어보시고 이해해보세요.


7. 비트 및 증감연산자 등 풍부한 연산자를 지원한다.

  → 덕분에 비트마스크 기법 및 다양한 숏코딩이 가능합니다.

728x90
반응형

728x90
반응형

나동빈


이더리움 DAO 재귀적 이더리움 전송 공격

 

  20166월에 이더리움 DAO 계약 플랫폼에 존재하는 취약점을 이용해 360만 개의 이더리움(ETH)이 해킹당하는 사고가 발생했습니다. 이 사건 때문에 이더리움의 가격은 폭락하였고, 궁극적으로 전체 이더리움의 10%에 달하는 이더리움이 해킹당하는 결과를 낳았습니다.

 

  이더리움 DAO 플랫폼은 당연히 코드를 기반으로 작동하며 내부적으로 나누기(Split) 기능이 사용됩니다. splitDAO() 함수는 특정 계정의 잔액과 합계 금액을 갱신하는 함수입니다. 따라서 splitDAO가 다시 호출되기 이전에 어떠한 함수의 호출이라도 발생시킬 수 있다면 무한 재귀 호출(Infinite Recursion)을 발생시켜 원하는 만큼 자금을 이동시킬 수 있습니다.

 

  다시 말해 이러한 해킹 기법의 기본적인 원리는 나누기(Split) 함수를 실행한 뒤에 DAO가 보상(Reward)를 인출하려고 할 때, 인출이 끝나기 전에 나누기 함수를 다시 실행하는 것입니다. 따라서 잔액을 업데이트하지 않고 다시 실행하여 계속해서 이더리움을 가져올 수 있게 됩니다. 쉽게 말해 DAO 토큰을 환불 받고도 DAO 토큰이 계속 남아있어 무한정 인출할 수 있는 것입니다. 취약한 소스코드는 구체적으로 다음과 같습니다.


function splitDAO(

uint _proposalID,

address _newCurator

) noEther onlyTokenholders returns (bool _success) {

 

...

 

// 이더리움을 이동시키고 새로운 토큰을 지정 받습니다.

uint fundsToBeMoved =

(balances[msg.sender] * p.splitData[0].splitBalance) / p.splitData[0].totalSupply;

if (p.splitData[0].newDAO.createTokenProxy.value(fundsToBeMoved)(msg.sender) == false)

throw;

// 공격자가 위 IF문을 재귀적으로 무한정 수행하도록 만들어 부당이익을 취합니다.

 

...

 

// DAO 토큰을 삭제합니다.

Transfer(msg.sender, 0, balances[msg.sender]);

withdrawRewardFor(msg.sender); // 결과적으로 이더리움을 받게 됩니다.

 

...

 

return true;

}


  따라서 원래는 무한정 수행되지 않도록 설계된 소스코드를 무한정 수행하여 막대한 양의 이더리움을 해킹할 수 있었던 것입니다. 구체적인 공격 순서는 다음과 같습니다.

 

  ① 나누기(Split)를 요청하고 투표 기간이 만료될 때까지 기다립니다.

  ② splitDAO() 함수를 이용해 나누기를 수행합니다.

  ③ DAO 플랫폼은 createTokenProxy()함수를 실행해 적절한 토큰을 보내줍니다.

  ④ 3번 과정 이후에 withdrawRewardFor() 함수를 실행해 잔고가 업데이트 완료되기 전에 보상(Reward)을 받을 수 있도록 합니다.

  ⑤ DAO 플랫폼이 4번 과정을 수행하고 있는 동안에 동일한 파라미터로 2번 과정의 splitDAO() 함수를 다시 실행합니다.

  ⑥ 결과적으로 DAO 플랫폼이 더 많은 자식 토큰(Child Token)을 지급해주며, 잔고가 업데이트되기 전에 보상을 받습니다.

  ⑦ 5번 과정으로 돌아갑니다.

  ⑧ DAO가 잔고를 업데이트하도록 둡니다. 7번 과정에서 5번 과정으로 돌아간다는 점에서 이러한 재귀적 과정은 끝나지 않습니다.

 

  기본적으로 많은 양의 수수료(Fee)를 발생시키지 않기 때으므로 사실상 무한정 공격을 수행할 수 있었습니다. 즉 앞서 언급했던 이더리움의 수수료 방어 기법은 이러한 공격 기법에 대한 해결책을 제시해줄 수 없는 것입니다. 결과적으로 악의적인 의도를 가진 공격자는 위 해킹 기법으로 자식 DAO 지갑으로 엄청난 양의 이더리움을 수금(Receive)할 수 있었습니다.

 

실제 공격자의 자식 DAO 지갑: https://www.etherchain.org/account/0x304a554a310c7e546dfe434669c62820b7d83490#history




  실제 공격자의 지갑을 살펴보면 20166월에 무려 360만 개의 이더리움을 소유한 것을 알 수 있습니다. 실로 어마어마한 금액으로 이더리움 개발팀의 빠른 대책이 필요한 상황이었습니다.

 

  물론 취약점은 DAO 플랫폼 자체가 가지는 취약점이며 이더리움 개발팀은 이를 개선하기 위해서 다양한 해결법을 제시했습니다. 다만 블록체인 시스템은 중앙 기관이 없다는 점에서 무분별하게 이더리움 개발팀이 개입하는 경우 그 사회적 파장이 커질 수 있다는 점도 감안해야 했습니다. 또한 공격자의 개인키를 알아낼 수 없다는 점에서 거래를 무효 처리할 수도 없는 상황이었습니다.

 

  그래서 DAO 프로젝트의 책임 개발자는 소프트 포크(Soft Fork)와 하드 포크(Hard Fork)로 크게 두 가지 해결책을 제시했습니다. 소프트 포크를 이용한 방법은 DAO와 해당 공격자의 자식 DAO 지갑의 사용을 정지하는 형태의 소프트 포크입니다. 또한 하드 포크는 DAO 토큰 보유자들이 이더리움을 돌려받도록 하는 형태의 하드 포크입니다.

 

  결과적으로 이더리움 재단이 다양한 관계자들과 협의하여 소프트 포크 기술을 적용하도록 의사결정이 이루어졌습니다. 하지만 네트워크 불안정 문제가 발생하여 재협의를 진행하게 되었고, 하드 포크를 수행하는 방향으로 다시 의사결정이 이루어졌습니다. 따라서 1,920,000번째 블록을 기준으로 하드 포크가 성공적으로 진행되었습니다.

 

  다만 하드 포크가 진행됨에 되어 기존의 기술을 따르는 이더리움 클래식(Ethereum Classic)과 새롭게 탄생한 이더리움(Ethereum)으로 이더리움 블록체인 플랫폼이 나뉘게 되었습니다. 이더리움 클래식은 하드 포크를 수행하기 전의 블록체인을 기반으로 상장된 가상화폐입니다. 다시 말해 기술적인 개선이 사실상 이루어지지 않았다는 점에서 가치가 평가절하 되고 있습니다.



  이더리움 클래식도 이더리움과 동일하게 PoW 방식을 채택하고 있으며 추가적인 하드포크도 주기적으로 진행하고 있는 상황이라는 점에서 이목이 집중되고 있습니다. 현재 공식 이더리움 블록체인은 이더리움(ETH)이며 이더리움 클래식은 잔류 기술로 남아있는 상황입니다.

 

  이러한 블록체인 보안 침해사고 발생의 가장 근본적인 이유는 기술 인증 제도가 명확히 잡혀있지 ISMS, PIMS 등과 같이 기술 인증 제도가 블록체인 플랫폼에도 적절히 적용될 수 있도록 해야 합니다. 더불어 보안 검증을 받은 블록체인 기술만 살아남을 수 있도록 하는, 시장 전체에 걸친 분위기가 형성되어야 한다고 생각합니다.

 

  또한 일정 수준 이상의 시장 규모가 있는 블록체인 개발팀의 경우, 자체적으로 자문 능력이 뛰어난 컨설팅 팀과 보안 전문가 팀을 구성하도록 하여 미연에 침해사고를 방지할 필요가 있습니다. 2018년 이후 앞으로도 계속해서 블록체인 기술과 산업은 호황기를 이룰 것입니다. 빠른 사업화와 개발 능력 또한 물론 중요한 요소이지만 안정적인 시스템을 구축하기 위한 지속적인 노력이 필요한 시점이라고 생각합니다.


728x90
반응형

728x90
반응형

나동빈


이더리움 도스(DoS) 공격

 

  앞서 이더리움은 튜링 완전한 특징을 가진다고 했습니다. 당연히 튜링 완전하다는 점에서 무한 루프가 발생할 수 있을 것입니다. 하지만 이더리움에서는 수수료(Fee)가 존재하기 때문에 공격을 수행할 때마다 일정한 수수료를 공격자가 지불해야 합니다. 이는 결과적으로 채굴자들에게 더 많은 수수료를 지급하여 채굴자들을 유입시키는 역할을 수행합니다. 그래서 공격 덕분에 오히려 보안이 증가하는 것입니다. 이는 이더리움 블록체인의 선순환 구조를 형성합니다.

  

  하지만 만약 이더리움의 수수료가 굉장히 저렴하다면 악의적인 목적을 가진 공격자는 도스(DoS) 공격을 수행할 수 있습니다. 실제로 2016년 말에는 이더리움 네트워크에 지속적인 도스 공격이 감행이 되었습니다. 그 결과 네트워크가 불안정해져 트랜잭션 속도가 느려지고, 채굴에 제약이 생기게 되었습니다. 대표적인 도스 공격 방식으로는 다음의 두 가지가 존재합니다.

 

  · 무작위 계정(Account) 생성 공격

  · 무작위 거래(Transaction) 수행 공격

 

  이더리움은 기본적으로 가스(Gas)라고 불리는 수수료가 매우 저렴하다는 장점이 있는데 이를 역이용하여 의미가 없는 거래를 매우 많이 발생시켜 과부하를 주는 방식이 주로 사용되었습니다. 사실 이 문제의 궁극적인 원인은 수수료가 적절한 수준으로 설정이 되지 않았기 때문이며 이를 해결하기 위해서는 하드 포크(Hard Fork)가 필요했습니다.

 

  따라서 현재까지는 이더리움에 대한 도스 공격의 대응책으로 하드포크를 많이 수행하였습니다. 하드포크의 과정에서는 수수료 비용을 조정하고, 빈 거래 및 계정에 대한 정보를 일괄 삭제하는 작업이 수행됩니다. 실제로 2,463,000번째 블록에서 하드포크를 수행하여 이더리움 블록체인을 개선한 이력이 있습니다. 이어서 2,675,000번째 블록에서도 하드포크를 수행했습니다.

 

  이더리움은 작업 증명(Proof-of-Work) 방식에 근간하고 있으며 하나의 블록에 고작 200개 가량의 거래(Transaction) 정보를 담는다는 점에서 속도 측면에서 한계를 가지고 있습니다. 따라서 도스 공격에 매우 취약한 상태이며 실제로 거래량 폭증으로 인해 거래가 정상적으로 처리되지 않았던 사례가 많았습니다. 이러한 거래 속도 문제를 이더리움이 넘어야 할 산입니다.

 

  컨설팅적 관점에서 이러한 문제의 해결 방안을 제시하자면 기존의 PoW 방식을 고수하지 않고 다른 합의 알고리즘을 부분적으로 채택하는 것이 효율적이라고 생각합니다. 따라서 PoS, DPoS 등의 방식을 적용하도록 하드포크를 수행하여 불필요한 컴퓨터 자원 낭비를 줄이고, 거래 속도를 향상시켜야 합니다. 실질적으로 채굴을 수행하는 노드가 적은 이오스(EOS) 블록체인 플랫폼 등을 벤치마킹할 필요가 있습니다. 물론 보안성을 유지할 수 있는 선에서 높은 거래 속도를 유지할 수 있는 선에서의 의사결정이 필요할 것이라고 생각합니다.

728x90
반응형

728x90
반응형

나동빈


이더리움 개요

 

  이더리움(Ethereum)블록체인 기술을 활용한 어플리케이션을 손쉽게 개발할 수 있도록 해주는 플랫폼으로 비탈릭 부테린(Vitalik Buterin)이 개발했습니다. 현재 존재하는 이더리움 클래식(Ethereum Classic)이 이더리움 가상화폐의 초기 모델입니다. 이러한 이더리움이 매우 사랑받고 성장하게 된 계기는 개발자 친화적인 환경이 구성되어있다는 특징 때문입니다.

 

이더리움은 튜링 완전(Turing-Complete)한 시스템을 갖추고 있어 개발 언어에 구애받지 않고 누구나 이더리움 기반의 어플리케이션을 개발할 수 있습니다. 대표적으로 스마트 컨트랙트나 분산 어플리케이션(Decentralized Application)을 작성할 수 있습니다. 특히 트랜잭션 형식, 상태변환 함수 등을 정의할 수 있다는 점에서 매우 활용도가 높은 가상화폐 플랫폼입니다.

 

이더리움은 익명성(Anonymity), 무국경성(Borderlessness), 탈중앙성(Decentralization), 분산 네트워크(Distributed Network), DDoS 차단(DDoS Attack-Proof), 분할성(Divisibility into Pieces), 투명성(Transparency) 등의 특징을 가진다는 점에서 다른 블록체인과 흡사한 구조를 가지고 있습니다. 다만 여기에서 추가적으로 플랫폼을 통한 응용성스마트 컨트랙트라는 특별한 기술이 적용되어 시장에서 굉장히 큰 영향력을 행사하고 있습니다.


이더리움의 목적

  

  이더리움의 목적은 누구나 손쉽게 분산 어플리케이션을 제작할 수 있도록 공통적인 프로토콜을 제시하는 것입니다. 실제로 이더리움을 기반으로 하는 매우 많은 어플리케이션과 블록체인 플랫폼이 존재합니다. 다양한 분산 어플리케이션에 적용될 수 있는 개발 방법론을 제공하고, 누구나 빠르고 보안성이 높은 어플리케이션을 개발할 수 있도록 해줍니다. 특히 다른 어플리케이션과의 효율적인 상호작용이 필요한 상황에서 적용할 수 있는 플랫폼입니다.

 

이러한 목적을 달성할 수 있는 기술적 근간은 튜링 완전 언어를 지원한다는 점입니다. 튜링 완전 언어란 수학 문제를 풀 수 있는 일반적인 알고리즘을 만들어낼 수 있는 프로그래밍 언어를 의미하는 것으로 조건문, 반복문 등을 포함한 문법 체계를 갖추고 있어야 합니다. 그 대표적인 것이 바로 솔리디티(Solidity)이며 사실상 상상 가능한 대부분의 거래를 프로그래밍 할 수 있습니다.


DAO(Decentralized Autonomous Organization)

 

  DAO(Decentralized Autonomous Organization)란 단어 그대로 탈중앙화 자율조직을 의미합니다. 다시 말해 중앙 관리 조직이 없는 상태에서 참여자들이 자율적으로 제안과 투표 등의 의 사표현을 하여 조직을 관리할 수 있습니다. DAO 시스템에는 자체적인 인공지능이 적용되어 전체 의사표현 과정이 효과적으로 처리되며 궁극적으로 투자자들은 이더리움을 이용해 DAO 토큰을 구매하고, 특정한 서비스에 투자할 수 있게 됩니다.



728x90
반응형

728x90
반응형

작성: 나동빈(2018-04-08)


  이번에 스마트 교육 콘텐츠 개발 수업을 듣게 되어, 수업의 결과물로 제작해 볼 콘텐츠에 대한 개괄적인 내용을 정리해보는 시간을 가져보았습니다.


1. 제목: 2시간만에 이해하는 블록체인(Block Chain) 핵심 이론


2: 대상: 블록체인 이론을 공부하고 싶은 고등학생 이상의 일반인


3. 목적: 어려운 강의를 직접 들으러 가지 않아도 집에서 아이폰 하나로 재미있게 블록체인 이론을 공부할 수 있습니다.


4. 필요성: 현재까지의 블록체인 이론은 일반적으로 두꺼운 책이나 국내외 원서를 찾아서 공부해야 하는 실정입니다. 특히 휴대폰이나 스마트 패드를 이용해 손쉽게 학습할 수 있는 콘텐츠는 매우 부족한 상황입니다. 언제 어디에서나 볼 수 있는 스마트 교육 콘텐츠가 있다면 학생들이 동물에 대해 더 친숙해지고 많은 지식을 얻을 수 있을 것입니다.


5. 내용


  ※ 1차시 ※


  ▶ 학습 주제: 해시(Hash) 알고리즘

   세부 내용


  1) 정보보안의 세 가지 요소(CIA)


    정보보안의 세 가지 요소는 CIA라고 하여 기밀성(Confidentiality), 무결성(Integrity), 가용성(Availability)가 존재합니다.


  2) 해시의 정의


    해시는 '특정한 데이터를 이를 상징하는 더 짧은 길이의 데이터로 변환하는 행위'를 의미합니다. 상징 데이터는 원래의 데이터가 조금만 달라져도 확연하게 달라지는 특성을 가지고 있어 무결성을 지키는 데에 많은 도움을 줍니다.


  3) 비둘기집의 원리


   비둘기집의 원리란 'N + 1개의 물건을 N개의 상자에 넣을 때 최소한 하나의 상자에는 두 개 이상의 물건이 들어가게 되는 원리'입니다.


  4) MD5와 SHA-1


    MD5(Message-Digest Algorithm 5)는 '128비트 고정 길이 결과를 가지는 암호화 해시 함수'입니다. 또한 SHA-1(Secure Hash Algorithm 1)은 '미국 국가안보국(NSA)에서 처음으로 개발한 해시 암호화 모델로 MD5를 대신하여 사용되고 있는 함수'입니다.


  5) 레인보우 테이블 공격


    레인보우 테이블은 '특정한 해시 알고리즘을 적용해 만들어낼 수 있는 데이터를 모두 미리 저장하여 만든 해시 사전'을 의미합니다. 이 사전을 기반으로 하여 해시 값의 원래 데이터를 찾아낼 수 있습니다.


  ※ 2차시 ※


  ▶ 학습 주제: 비밀키와 공개키

  ▶ 세부 내용


  1) 거짓 장부를 작성하는 기본 아이디어


    '동빈'이가 공공 거래 장부를 조작하여 '종구'가 '동빈'에게 가상화폐 100개를 보냈다고 거짓 거래 내역을 작성하면 어떻게 될까?

  

  2) 공개키 기반 구조


    공개키 기반 구조란 '비밀키와 공개키라는 두 개의 키를 이용하는 암호 구조'입니다. 이러한 공개키 기반 구조에서 특정한 데이터를 암호화하고 싶을 때는 먼저 비밀키를 이용해 그 데이터를 암호화합니다. 이후에 암호화된 데이터는 오직 그 비밀키와 한 쌍을 이루는 공개키를 이용했을 때만 복호화를 수행할 수 있습니다.


  3) 지갑 주소


    지갑 주소란 '공개키에 해시 알고리즘일 적용한 문자열'입니다. 네트워크에 참여한 사람들은 특정한 암호 메시지를 공개키로 복호화를 한 뒤에 메시지에 적혀 있는 '코인을 전송하는 사람'이 해당 공개키에 해시 알고리즘을 적용한 값과 일치하는지 확인합니다. 이 때 송신자 지갑 주소가 공개키에 해시를 적용한 지갑 주소와 일치하는 경우에만 정상적인 거래로 인정해주는 방식을 채택합니다.


  4) 공개키를 이용한 블록체인 암호화 과정 이해하기

  

6. 절차: ① 주제 선정 → ② 학습 목표 선정 → ③ 관련 서적 및 논문 조사 → ④ 추가적인 사진, 동영상 콘텐츠 탐색 및 수집 → ⑤ 멀티미디어 콘텐츠 제작 → ⑥ 주요 위젯 제작 → ⑦ 교재 구성 → ⑧ 검토 및 발표 → ⑨ 수정 및 보충 → ⑩ 제출


7. 방법


  ▶ iBooks Author로 위젯 및 교재 제작 

  ▶ 동영상 편집은 애프터 이펙트(After Effect) 혹은 프리미어(Premiere) 이용 예정

  ▶ 자료 조사 도구: 한국 학술 정보(http://kiss.kstudy.com/), 블록체인 컨퍼런스 등

  ▶ 이미지 파일 제작 도구: 온라인 다이어그램 소프트웨어(https://www.draw.io/)


8. 예상결과: 국내 고등학생 이상의 일반인이 블록체인의 핵심 원리를 쉽게 이해할 수 있도록 해주는 총 2차시의 20페이지(Page) 분량의 스마트 교재가 개발될 것입니다.


9. 기대 효과: 일반인이 단순히 어렵게만 생각했던 블록체인의 핵심 이론에 대한 이해도와 관심이 향상 될 것 이라고 생각합니다.

728x90
반응형

728x90
반응형

  이번 시간에는 자격증 시험을 치르신 이후에 응시자격서류를 제출하는 방법에 대해서 알려드리고자 합니다. 흔히 정보처리기사, 정보처리기사 등의 기사 자격증 시험을 치르신 이후에는 자신이 치른 자격증 종목에 대한 응시 자격을 입증해야 합니다. 예를 들어 기사 자격증 시험은 일반적으로 4년제 대학교 졸업 이상의 학력이 필요하므로 자신의 학력에 대해서 입증을 해야 합니다. 다만 응시자격서류는 원칙적으로 직접 공단에 방문하여 제출을 해야하기 때문에 조금 더 간단한 방법인 '등기 우편 제출' 방법에 대해 알아보고자 합니다.


  일단 응시자격서류를 제출하지 않은 상태에서 기사 자격증 시험의 필기만 붙으신 경우 실기 접수가 불가능합니다.



  저는 정보처리기사 필기를 붙었음에도 불구하고 위와 같이 실기 시험 원서 접수가 불가능하다고 나오는 것을 확인할 수 있었습니다. 이 때는 다음의 절차를 따르시면 응시자격서류를 제출하실 수 있습니다.


  ① 응시자격서류 심사 신청서 파일을 작성합니다.


  큐넷(Q-net) 자료실 페이지: http://www.q-net.or.kr/cst006.do?id=cst00601


  위 페이지에 접속하신 뒤에 보이는 '응시자격서류심사신청서' 게시글에 들어갑시다.



  들어가시면 다음과 같이 한글 파일(HWP)과 PDF 파일이 존재하는데 PDF 파일로 바로 출력하셔서 자필로 작성하시는 것을 추천합니다.



② 응시 자격 증명 서류를 준비합니다.


  이제 응시자격서류 심사 신청서가 구비되었으므로 심사를 할 서류를 함께 보내주시면 됩니다. 제가 공단에 전화를 해 본 결과 자신의 소속 학교 및 학과가 포함이 되어 있고, 자신이 현재 적절한 학기를 이수한 상태인지 확인할 수 있는 내용이 들어가면 된다고 말씀해주셨습니다. 대표적인 예시로는 재학 증명서, 졸업 예정 증명서 등이 있습니다. 기사 자격증 시험의 경우 대부분 4년제 졸업의 제한을 걸어놓는다는 점에서 저와 같이 현재 4학년이라서 졸업 예정임을 알려줄 수 있는 재학 증명서를 일반적으로 제출합니다.



  위 사진은 제 재학증명서 PDF 파일의 일부입니다. 보시면 이름, 소속, 학년 정보가 나와있으므로 기준을 충족합니다.


③ 우체국으로 가서 공단의 주소로 등기 우편을 보냅니다.



  이왕이면 자기가 방문할 우체국과 가까운 지부에 보내시면 유리할 겁니다. 저는 충북에 있는 우체국을 이용하므로 충북지사로 전송하게 되었습니다. 혹시 우체국에서 등기 우편 보내실 줄 모르시는 분은 제가 쓴 다른 포스팅을 참고하세요. (http://ndb796.tistory.com/62?category=987004)


④ 등기 우편 송부 다음날에 공단에 전화하여 확인합니다.


  일반적으로 우체국의 등기 우편은 4시 30분 가량에 접수를 마감하고, 그 날 바로 우편 송부 업무를 시작합니다. 다시 말해 4시 30분 이전에는 등기 우편을 보내주셔야 다음 날 공단에 도착하는 것입니다. 따라서 우체국이 조금 늦게 하더라도 4시 30분 이전에는 찾아가시기를 추천합니다. 공단에서는 우편이 들어오면 바로 확인 업무를 진행하기 때문에 다음날 오후 정도에 공단에 전화하셔서 확인하시면 됩니다.

728x90
반응형

728x90
반응형

  일반적으로 우체국 등기 우편은 '중요한 서류 등을 멀리 있는 개인/기관에게 보내고자 할 때' 사용합니다. 저는 최근에 소프트웨어 개발 외주를 맡게 되어 하나의 계약을 하게 되었는데요. 해당 발주 업체가 거리상으로 꽤 멀어서 등기 우편으로 계약서를 보내는 방식으로 계약을 진행하기로 하였습니다. 그래서 우체국을 방문하게 되었는데요. 일반적으로 우체국은 금융 업무는 오후 4시 30분까지이나 우체국 택배 발송 서비스는 오후 6시까지 한다는 점에서 다소 시간 제약의 부담을 느끼지 않을 수 있습니다.



  사실 저는 이번에 등기 우편을 처음 보내보는 것이었습니다. 그래서 나중에 또 잊어버리지 말자는 의미로 포스팅을 작성합니다. 기본적으로 우체국의 택배 배송 코너에 가보시면 위와 같이 봉투를 판매하는 공간이 있습니다. 봉투의 가격이 굉장히 저렴하기 때문에 당연히 카드 결제는 어렵고, 현금을 동전 통에 넣고 봉투를 가져가시면 됩니다. 혹은 현금이 없으면 나중에 우편비용을 지불할 때 봉투 비용까지 한꺼번에 결제할 수 있습니다.



  저는 150원 짜리 등기 우편 봉투를 선택했습니다. 이 봉투가 비싸긴 한데, 안에 들어가는 종이들이 구겨지지도 않고 굉장히 편해요. 그래서 안에 내용을 담은 뒤에 위와 같이 테이프를 붙여주었습니다. 펜, 테이프, 풀 등은 전부 우체국 내에 구비되어 있습니다.



  이후에 위와 같이 왼쪽 위에는 보내는 사람의 주소, 이름, 우편 번호를 적으시면 됩니다. 이어서 오른쪽 아래에는 받는 사람의 주소, 이름, 우편 번호를 적으시면 됩니다. 이후에 우편을 발송하러 번호표를 뽑고, 기다리셔서 우편을 보내시면 됩니다. 저는 마감 시간 쯤에 갔는데요, 보니까 번호표를 뽑는 것을 6시까지 하기만 하면 6시가 조금 넘어가더라도 다 처리를 해주는 것 같았습니다.



  등기 우편을 보내는 방법은 빠른 등기와 일반 등기가 있는데요, 빠른 등기로 보내면 바로 그 다음 날에 받는 사람에게 도착한다는 장점이 있습니다. 정말 편리하죠. 가격도 그렇게 많이 안 비쌉니다. 저는 위와 같이 빠른 등기로 해서 배송 비용이 2,790원이 들었습니다.

728x90
반응형

728x90
반응형

  요즘 상당수의 안드로이드 어플리케이션이 '구독(Subscribe)'을 이용한 수익 모델을 채택하고 있습니다. 구독이란 말 그대로 특정한 서비스를 주기적으로 이용하겠다는 것을 밝히는 것입니다. 구글 플레이스토어에서는 구독을 하면 자동 결제가 이루어지는 서비스 또한 제공하고 있습니다. 대표적인 사례를 알아보도록 합시다. 저는 핸드폰으로 문서를 찍은 뒤에 이것을 PDF 파일로 변환해주는 캠 스캐너(Cam Scanner) 어플리케이션을 주기적으로 사용합니다. 이 어플리케이션의 무료 버전을 사용할 때는 변환된 PDF 파일에 캠 스캐너로 촬영했다는 워터마크가 남게 됩니다.



  그리고 위와 같이 워터마크를 지우기 위해서는 고급 계정으로 업데이트하라고 나옵니다. 기본적으로 7일 동안 무료 체험을 할 수 있다고 하네요. 저는 일단 당장 PDF 변환이 급해서 7일 무료 체험을 하겠다고 클릭했습니다.



  그랬더니 위와 같이 일주일 뒤부터 약 5달러의 요금이 청구될 것이라고 하네요. 사실 그렇게 부담스러운 돈은 아니지만 제가 이 어플리케이션을 계속 사용할 지는 모르는 일이므로 7일 무료 체험만 이용하고 구독은 취소하려고 합니다.



  일단 구독하기 버튼을 눌렀더니 위와 같이 체험 종료 이후에 자동 구독이 이루어져서 구독을 하지 않으려면 무료 체험 종료 전에 플레이스토어에 가서 구독을 취소하라고 하네요.



  저는 한 번 이용한 뒤에 바로 플레이스토어로 가서 구독 취소를 하려고 했습니다. 7일 뒤에 하려고 하면 까먹을 수 있기 때문에 지금 당장 취소를 해놓으려는 거죠. 플레이스토어로 가서 '설정'에 가신 뒤에 위와 같이 '내 구독'에 들어가주세요.



  그럼 위와 같이 현재 구독 중인 어플리케이션이 나오는 것을 알 수 있습니다. 여기에서 '관리'를 누릅니다.



  이제 위와 같이 '구독 취소' 버튼을 눌러주시기만 하면 끝입니다. 이렇게 해주시면 자동으로 금액이 청구되는 것을 막을 수 있습니다.


728x90
반응형

728x90
반응형

  페이팔(Paypal)다양한 방법으로 어떠한 물품을 구매하거나 판매할 때 이용할 수 있는 서비스입니다. 일종의 거래 대행 업체로서 안전하게 클라이언트와 판매자가 서로 거래를 할 수 있도록 중개해주는 역할을 수행합니다. 저 또한 유데미(Udemy) 코리아에서 인터넷 강의 활동을 하고 수익을 지급받을 때 페이팔을 이용하여 지급을 받고 있답니다. 페이팔의 사이트 URL은 https://www.paypal.com/입니다. 이 URL에 접속하시고 회원가입 및 로그인 이후에 서비스를 이용하실 수 있습니다.



  저는 현재 회원가입을 해 놓은 상태이기 때문에 바로 '로그인'을 해주도록 할게요.



  로그인 이후에는 위와 같이 '프로필' 란에 들어갈 수 있습니다. 이후에 '금융 정보' 란에 들어가시면 은행 계좌 정보가 나올 겁니다. 저는 이미 특정한 계좌를 등록 신청한 적이 있답니다. 이제 여기에서 '업데이트'를 누르시면 새로운 계좌를 등록하거나 기존의 계좌를 삭제하는 등의 활동을 할 수 있습니다.



  들어가시면 위와 같이 '새 은행 연결' 란이 있을 겁니다. 바로 새 계좌를 연결을 해보도록 할게요.



  새로운 계좌를 등록하는 경우는 위와 같이 '추가'를 누르시면 됩니다.



  이제 여기에서 은행 정보를 넣으면 됩니다. 자신의 은행임을 입증하기 위해서는 페이팔에서 보내주는 인증 코드를 계좌로 받아서 그에 대한 정보를 넣으시면 됩니다. 제가 사용하고 있는 농협 계좌의 경우 영어로 하면 National Agricultural Cooperative Federation입니다. 따라서 위와 같이 은행 이름에는 'National Agricultural Cooperative Federation'을 넣어주었습니다.



  은행 코드 및 은행 이름을 모르시는 경우에는 위와 같이 '은행 코드 보기'를 누르셔서 찾으실 수 있답니다.



  저는 위와 같이 제 계좌 번호를 입력했습니다. 이제 '계속' 버튼을 눌러 넘어가보겠습니다.



  이후에 위와 같이 확인 메시지가 나오네요. 여기에서 확인을 하시고 넘어가시면 됩니다. 기본적으로 지급 취소 수수료도 존재하기 때문에 정확하게 은행 정보를 확인하여 기입하는 것이 중요합니다.



  추가가 완료되면 위와 같이 2 ~ 4일 이내에 페이팔(PayPal)로부터 소액 입금을 통해 인증 코드가 온다고 합니다. 며칠 뒤에 이를 확인하시고 페이팔에서 입금된 금액을 기입하면 정상적으로 인증이 완료될 겁니다.



  바로 위와 같이 '프로필'에 들어가셔서 '금융 정보'에 들어가도록 합시다. 이제 여기에서 '확인 안 됨'을 눌러봅시다.



  그럼 위와 같이 입금된 두 건의 금액을 입력하라고 할 겁니다. 만약에 6원, 15원이 입금되었다면 6, 15를 입력하시면 될 겁니다. 만약 입금을 해도 처리가 안 된다면 고객센터 02-3483-1131로 전화하여 문의를 주시면 처리를 해 주실 겁니다.



  저는 시간이 조금 흐른 뒤에 11원과 3원이 통장에 입금되었습니다. 그래서 위와 같이 입력을 한 뒤에 '확인'을 눌렀습니다.



  이제 위와 같이 성공적으로 은행 계좌과 확인된 것을 알 수 있습니다.


  (+ 추가 정보)


  추가적으로 많은 분들이 잘 모르는 내용에 대해서 말씀드리려고 합니다. 아직 인증이 되지 않은 계좌라고 하더라도 인출은 가능합니다. 다만 그 한계가 500 달러($)로 한정되어있을 뿐이지요. 한 번 제 페이팔 계정에 있는 잔액 중에서 $20을 인출해보도록 하겠습니다.



  위와 같이 페이팔 '메인' 페이지로 가보시면 왼쪽 부분에 '자금' 란이 보이고 아래쪽에 '자금 인출' 영역이 보이실 겁니다.



  위와 같이 긍액 이체 영역에서 '출금 계좌'와 '입금 계좌'를 선택하시고 인출을 신청하시면 됩니다. 



  그러면 바로 위와 같이 확인 메시지가 출력됩니다. 한번 '이체' 버튼을 눌러서 이체를 수행해보도록 하겠습니다.



  이제 위와 같이 이체 확인 메시지가 뜨면서 성공적으로 이체가 완료된 것을 확인할 수 있습니다.

728x90
반응형

728x90
반응형

  흔히 웹 서버 프로그램을 개발할 때 가장 중요한 것은 보안입니다. 저는 개발을 할 때 보안성을 강화하는 모듈화 방법에 대해서 많이 고민합니다. 예를 들어 특정한 소스코드를 깃 허브(Git Hub)에 올리고 있는 상황에서, 데이터베이스 연결 구문 등을 작성하고자 할 때 데이터베이스 연동 구문에는 데이터베이스의 ID와 비밀번호가 그대로 노출이 될 텐데 그걸 그대로 깃 허브로 푸시(Push) 하지는 않겠죠? 이럴 때 사용하는 것이 바로 파일에서부터 데이터베이스 관련 정보를 불러오도록 하는 것입니다.


  파일에서부터 데이터베이스 관련 정보를 불러오도록 하면 웹 쉘 업로드 공격이 들어오지 않는 이상 데이터베이스 관련 정보를 노출당할 일이 없고, 데이터베이스 또한 적절하게 권한 분리를 함으로써 웹 서버에서 접근할 수 있는 데이터베이스 영역을 잘 관리한다면 상당히 보안성이 높아집니다. (물론 웹 서버를 Root 권한으로 돌리거나, 데이터베이스 또한 Root 권한으로 접속하도록 개발된 서버라면 웹 쉘 한 방에 초전 박살날 수 있습니다.)


  아무튼 카페 24와 같은 호스팅 서비스를 이용할 때 파일에서부터 데이터베이스 관련 정보를 읽어 처리하는 방법에 대해 알려드리고자 합니다.



  먼저 위와 같이 현재의 컨텍스트 경로를 출력하도록 하는 JSP 프로그램을 작성해서 호스팅 서버에 올립니다.


  실행 결과 위와 같이 리눅스 경로가 출력되는 것을 알 수 있어요. 제 루트 디렉토리는 바로 위와 같다고 할 수 있습니다.



  이제 한번 루트 디렉토리의 바로 부모 폴더로 가서 file이라는 폴더를 만들어줍니다. 이제 정상적인 사용자들이 이 경로에 웹 브라우저로 접근할 수 없습니다.



  이제 위와 같이 특정한 텍스트 파일에 아이디 값을 적어서 올려볼게요.


  이제 바로 위와 같이 아까 확인했던 경로 값을 이용해 해당 파일에서 글자를 읽어 출력하도록 해봅시다.



  바로 위와 같이 성공적으로 아이디 값을 읽어온 것을 알 수 있습니다. 그럼 즐거운 시큐어 코딩 되세요!


728x90
반응형