우리나라 소프트웨어의 문제점

HYEONG HWAN, MUN/ 2월 25, 2017/ 미분류/ 0 comments

잡담입니다. 컴퓨터공학 3학년 교과목에 “소프트웨어 공학론“, “소프트웨어 설계“, “소프트웨어 공학 프로젝트” 교과목이 있습니다. 많은 개발 이론과 배경을 배우고, 다양한 방법으로 실습을 해봅니다. 하지만!! 제 경험상 이 때 배운 지식과 실제 현업의 차이가 상당히 있었습니다. 소프트웨어는 이론적으로 순차적 개발인 폭포수 모델 (https://en.wikipedia.org/wiki/Waterfall_model) 로 많이 개발하며, 순서는 요구사항 분석 -> 설계 -> 구현 -> 테스트 -> 유지보수 입니다. 정보처리 기사 시험 단골문제로 “다음의 소프트웨어 개발 단계에서 가장 많은 비용을 차지하는 단계는?” 이 있는데 정답은 “유지보수” 입니다.  이론상으로는 개발 프로세스에서 50% 이상의 비용을 차지하게 되어 있습니다. 하지만 실제는 다릅니다. 예를 들어 1억의 발주가 나오면 기계값 2천만원 + 개발비 7천만원 + 유지보수비 1천만원 이런식으로 많이들 입찰합니다. (또는 개발비 8천만원, 1년 무상 유지보수) 제가 SI 다닐때 4억7천짜리 사이트 제작에 참여한 적이 있는데, 별반 다를게 없더라구요. 유지보수는 클라이언트의 민원처리(팝업 같은거)이며 기능강화 패치를 하지 않습니다. 유지보수…

Today’s Developer Requirements (현대 개발자의 필수덕목)

HYEONG HWAN, MUN/ 2월 25, 2017/ 미분류/ 0 comments

적당히 돈벌며 회사다니고 있는데, “배움을 멈추면 늙는다” 라는 어느 커뮤니티에 본 글을 떠올리며 뭔가 새로운걸 보고 있다. 새롭다는 것은 NEW 뿐만 아니라 기존 지식의 ENHANCE 도 포함한다.   아무튼 최근에 본 인강(=인터넷강의,멋진말로 webinar, video lecture)에서 다음의 슬라이드를 보았다.   Today’s Developer Requirements(현대 개발자의 필수 덕목) – Horizontal Scale : 서비스의 성능 향상을 위해서 CPU 업그레이드나, RAM 더 꼽는것 말고 서비스를 2개 또는 그 이상으로 분리할 수 있는 능력이다. 요즘은 클라우드가 잘되어 있어서 성능 변경은 정말 쉽지만, 서버를 분리하여 늘리는 – Scale Out 은 능력이 필요하다. – Realtime Availability : 이건 개발자가 24시간 폰 켜놓고 대기하라는 뜻이 아니라, 데이터가 입력되면 바로 사용할 수 있게 하라는 것이다. – Flexible Data Model : 고객의 다양한 형태(숫자, 문자, 파일, 이미지)의 입력을 반영하여 변경할 수…

나만의 GIT 서버를 구축하고 프로젝트에 적용하는 방법 (gitlab ssl)

HYEONG HWAN, MUN/ 1월 11, 2017/ 미분류/ 6 comments

이 글에서는 GIT 버전관리 시스템을 구축하고 프로젝트에 도입하는 방법에 대해 설명한다.   먼저 GIT 이란 [깃-] 이라고 읽으며, 버전관리 시스템 중 하나이다. 몇년전부터 기존의 버전관리 시스템 표준(레거시 표준)인 SVN 을 대체하고 대세로 자리매김 하고 있다. 따라서 최신의 개발자/기획자/디자이너/퍼블리셔 라면 이 GIT의 역할과 사용법에 대해 반드시 익혀두어야 할 것이다.   GIT 의 자세한 정의는 (https://en.wikipedia.org/wiki/Git) 다음과 같고, 요약하자면 “소스 버전 관리 시스템” 이라고 말할 수 있다. 소스 버전 관리 시스템을 통해, 모든 시점에 대해 저장을 하고, 코드의 병합(merge)이나 변경취소, 시점 복원등의 기능을 이용할 수 있다. 문제의 원인을 파악하기 쉬우며, 예상치 못한 소스 망실에 대해서 안전해 진다.(모든 시점에 대해 백업을 한다고 생각하면 된다.) GIT = 수동 백업 + 백업 시점 설명 이라고 말할 수 있다.   GIT 에 대해 간략한 소개는 이만 마치도록…

맥 내부에 apache/nginx 개발서버 세팅하기

HYEONG HWAN, MUN/ 12월 19, 2016/ 미분류/ 5 comments

  지인 요청으로 글을 작성합니다. 본문의 설명은 Mac OS X 기준으로 작성하였지만 Windows OS 환경에서도 적용할 수 있습니다.   개발하는데 맥을 사용하면 매우 편리합니다. 대부분의 서버는 리눅스로 구동되며, 맥 또한 리눅스 기반이기 때문에 명령어도 유사하고, 서버 작업 관련 호환성 또한 매우 좋습니다. 이 글에서는 일반사업체/개발회사/에이전시/팀프로젝트 에서 적용할 수 있는 “맥 내부에 apache/nginx 개발서버 세팅하는 방법”에 대해서 설명하도록 하겠습니다.   1. 대부분의 실무에서 사용하는 작업 방식 실제 운영하는 서버 (라이브서버) 한대를 두고 직접 그곳에서 작업한다. (mysite.com 을 바로바로 작업) 작업 중에는 서버 오류가 발생할 수 있으며, 고객이 이용중 장애를 겪을 수 있다.   2. 더 나은 실무 작업방식 서버는 같은데 분리된 도메인의 (dev.mysite.com) 사이트를 만들고 복제된 사이트에서 개발&테스트 한 후 실제 사이트에 반영하는 방법. 실제 작업 서버에 도메인만 분리후 작업한다. 공유 리소스가 있을…

[Ubuntu] Let’s Encrypt 를 사용하여 무료로 SSL 사이트를 구축하는 방법

HYEONG HWAN, MUN/ 10월 2, 2016/ 미분류/ 49 comments

웹은 계속 발전하고 있으며, 여러 새로운 기술이 끊임 없이 등장하고 있다. 이 글에서는 웹 기술 중 하나인 SSL (Secure Socket Layer) 에 대해서 이야기 해 보고자 한다. < 그림 : OSI Model 에서 SSL 의 위치 >   정확히 말해서 SSL 은 전송계층과 (Transport Layer) 응용계층 (Application Layer) 사이에서 동작한다. Transport 에서 패킷을 받으면 -> SSL 에서 패킷의 암호를 해독하고 -> Application 에게 전달하는 것이다. SSL 을 세션계층(Layer 5), 표현계층(Layer 6)으로 분류하는 사람도 있고, 응용계층(Layer 7)으로 분류하는 사람도 있다. 나름대로 주장에 대한 근거가 일리 있으니 여기서는 따로 정확히 분류하지는 않겠다. 확실한건 Transport 와 Application 의 사이라는 것.   I) 어떻게 SSL 은 암호화 통신을 하는가? – 쉽게 말하자면 SSL 은 “보안인증서” 라고 말할 수 있다. – 사람으로 비유하자면 보안인증서는 암호화코드가 내장된 주민등록증이라고 볼 수…

[PHP] Access-Control-Allow-Origin Multiple Origin Domains

HYEONG HWAN, MUN/ 9월 30, 2016/ 미분류/ 0 comments

Code snippet 용도의 글이다.   이 코드를 사용하여 허용된 곳에서의 xhr 요청을 제어할 수 있다. 기본적으로 브라우저 보안정책 중 하나인 CORS(Cross-Origin Resource Sharing) 설정 상황에서 사용한다. 요청 응답할 부분에서 허용된 Origin 을 설정해주어야 한다.   Access-Control-Allow-Origin 값이 멀티도메인을 허용하지 않기 때문에, 이렇게 프로그램적으로 작성해 주어야 한다.  

HTML5 Fullscreen API 응용 및 Video 네이티브 컨트롤 제어하기 (hide control css)

HYEONG HWAN, MUN/ 8월 18, 2016/ 미분류/ 0 comments

명확하게 정리된 해설이 없길래, 내가 직접 이곳에 요약 정리해 본다.   나에게 “기존 사용하고 있는 HTML5 플레이어를 유튜브 플레이어 같이 작업해달라” 라는 요청사항이 왔다. 이에 맞추어 기술조사를 하였고 처리하였다.   1. UserAgent StyleSheet 의 이해 웹브라우저를 컴퓨터 용어로 UserAgent 라고 부른다. 웹브라우저는 HTML 태그를 해석하고 화면에 그리기(나타내기) 위해서 자체적인 StyleSheet 를 내장하고 있다. 이것을 웹브라우저-스타일시트 라고 부르며 UserAgent StyleSheet 라고 쓴다. 이 웹브라우저-스타일시트는 브라우저 화면 표시 규칙으로써 거의 비슷하나, 브라우저별로 조금씩 다르다. (95%쯤 동일)   2. FullScreen 사용 먼저 FullScreen 을 사용할 객체를 선택해야합니다. 이 객체가 video 라면 특별히 브라우저의 자체의 비디오 플레이어가 실행된다.   video 객체의 fullscreen 의 경우 다음의 css 핵을 사용하여 비디오UI 디자인을 변경할 수 있습니다.     브라우저마다 네이티브 컨트롤의 클래스명이 다르기 때문에 작업 후 확인해 주어야 합니다.…

항상 최상의 속도로 국제데이터를 이용하는방법(리눅스 데이터 포워딩)

HYEONG HWAN, MUN/ 6월 12, 2016/ 미분류/ 20 comments

알면 쉽고 모르면 어려운 것이다. 엄청 대단한건 아니지만 알아두면 유용한 지식을 공유하고자 한다. [노하우] + [상황에 맞는 적절한 프로그램 사용] 으로 문제를 해결할 것이다. 먼저 몇가지 이론을 알고 가도록 하자.   몇가지 이론 1. TCP 와 UDP 장황한 컴퓨터공학 이론 말고 대강의 뜻만 이해하도록 하자. 그림 및 내용 참조 : https://www.pluralsight.com/blog/it-ops/networking-basics-tcp-udp-tcpip-osi-models TCP 는 신뢰된 데이터 전송을 위한 프로토콜이다. 100개의 데이터를 올바르게 순서대로 모두 전송할 때 쓰는 것이다. UDP 는 신뢰되지 않은 데이터 전송을 위한 프로토콜이다. 100개의 데이터를 보내지만 도착여부등을 전혀 신경쓰지 않는다. TCP 는 웹문서(예를들어 HTML) 등을 읽을때 사용한다. UDP 는 인터넷 동영상 재생시에 사용한다. (손실을 허용하는 통신) 라고 배웠으나, 인터넷 동영상도 TCP 통신하더라. (99.99% 이상) DNS 서비스는 UDP 를 사용한다. (0.01% 이하) 아무튼 “통신한다” 라는 말을 듣게되면 모두 TCP 라고 추정하면 된다. 참고로…

서버 성능측정 (벤치마크 방법)

HYEONG HWAN, MUN/ 3월 28, 2016/ 미분류/ 2 comments

다음은 https://blog.lael.be/post/44 에서 각 상품군의 성능 벤치마크시 사용했던 지표입니다. Ubuntu 기준. Windows 는 Novabench(https://novabench.com/) 를 사용하도록 하자. 벤치마크 점수에 너무 신경쓰지 말아야 한다. 점수는 점수일 뿐 당신의 체감 속도가 가장 중요하다. 아래 스크린샷은 라엘이가 개인용도로 사용하고 있는 직접 구축한 클라우드 서버에서 Sysbench 를 실행한 것이다. 서버는 Hyper-V 기반이며, 6코어 5GB RAM, 100GB SSD 사양이다. # 제 서버를 기준 지표로 설정하지 마시고, https://blog.lael.be/post/44 의 업체를 기준 지표로 삼으세요. 0. 대조군 설정 당신이 이미 서버를 운영하고 있는 상태에서 이 글을 읽는다고 가정한다. 빠른 서버에 대한 느낌은 직접 사용해야 알 수 있다. 당신의 서버와 비교할 대조군을 설정한다. VULTR 클라우드서비스 (https://www.vultr.com/)에 가입후 도쿄 또는 싱가포르 지역에 자신의 서버와 동일사양인 서버를 추가해보자. 그 후 아래 명령어로 비교해 보면 된다. 시간단위 과금이니 테스트 후 지우면 된다.  …

Windows RDP 보안 인증서 설정하기 (install Certificate)

HYEONG HWAN, MUN/ 3월 3, 2016/ 미분류/ 0 comments

RDP는 Remote Desktop Protocol 의 약어로 마이크로소프트사 제품 컴퓨터에 원격제어시 사용하는 프로토콜이다. 윈도우 서버 (또는 데스크탑)에 원격 연결을 사용할 때 보안인증서를 사용하는 방법에 대해 알아보자. 물론 이 작업(보안인증서 설정)을 하지 않아도 원격연결은 보안통신을 한다. 가장 편한 방법은 보안경고를 무시하는 것이다.   1. pk12 인증서 생성 Windows 에서 인증서를 사용하려면 .p12(.pfx) 확장자의 파일이 필요하다. openssl 툴을 사용해서 인증서와 개인키를 조합하여 .p12(.pfx) 파일을 만들도록 하자. 나의 경우 인증서 발급 회사에서 제공하는 온라인 p12 생성기를 사용한다.   2. mmc 에서 인증서 설정 후 개인용 > 인증서 > 컴퓨터계정 > 로컬컴퓨터 > import. 원격데스크톱 > 인증서 > 는 할 필요 없음.     3. cmd 에서 명령입력. 인증서 경로 검사를 하기 때문에 인증서가 없거나 인증서 지문(thumb)을 잘못쓰면 invalid parameter error 가 나온다. 레지스트리를 통해 강제로…

리눅스 부팅시 프로그램/명령어 실행하기 (Linux Init script)

HYEONG HWAN, MUN/ 2월 19, 2016/ 미분류/ 0 comments

서버가 완전히 부팅된 후에 무언가 자신만의 특별한 작업을 하고 싶을 때가 있다. Windows 서버의 경우 [관리 도구]의 [작업 스케줄러]를 이용하면 된다. (자세한 설정 방법은 구글 검색을 이용해 보도록 하자.) 리눅스의 경우 다음과 같은 방법으로 설정 할 수 있다.     리눅스는 매우 다양한 설정지점(hooking point)이 있다. 부팅 시작시, 서비스 시작 (전, 중 후), 네트워크 연결 (전, 후), 부팅 후 등이 대표적인 설정지점이다.   이 중에서 가장 많이 쓰이는 “서버가 완전히 부팅된 후” 특정 작업을 실행하는 것을 실습해 보도록 하겠다. Run init-script when server fully startup.   예제는 root 계정에서 실행한다. Ubuntu 14.04 LTS 기준으로 작성되었으며, CentOS나 Fedora 등에서는 명령어가 다를 수 있다. (대략적인 방법은 동일)   1. 예제 실행을 위해 몇가지 프로그램 확인 a) 시간 동기화 프로그램 확인 # ntpdate 만약…

MariaDB 10.0 의 이유 (MariaDB 유래)

HYEONG HWAN, MUN/ 2월 17, 2016/ 미분류/ 0 comments

잡담입니다.   MySQL-Company 가 Oracle-Company에 인수되면서 기대치만큼 발전하지 않자, MySQL 창업자인 마이클 와이드니어스는 Oracle(에 팔린 MySQL 회사)를 나와서, 동료 개발자들과 함께 MariaDB-Company를 설립합니다.   마이클 와이드니어스의 첫째딸 이름이 My, 막내딸이름이 Maria, 첫째아들 이름이 Max 입니다. 실제로 이 때문에 MySQL, MariaDB, MaxDB가 있습니다. (네이밍 참 쉽죠?) 참조 : https://en.wikipedia.org/wiki/Michael_Widenius   그는 MariaDB 초기에는 API 인터페이스만 호환되도록 하고 내부엔진을 바꾸었으며, 이후에는 공격적인 기능 도입을 위해 버전을 많이 건너뜁니다. 그래서 MySQL 5.5 다음 버전은 -> MySQL 5.6 이지만, MariaDB 5.5 다음 버전은 -> MariaDB 10.0 입니다.   MariaDB 10.0 과 MySQL 5.6 은 완전히 다른 것이 아니고 호환 안되는 기능이 있음을 의미합니다.(MariaDB가 훨씬 빠르고, 기능도 더 많습니다.) 일부는 MariaDB 10.0 이 MySQL 5.6 보다 꽤 많이 (버전 번호상 두배쯤?) 좋을 것이라고 하는데, 그렇지는 않습니다. 그냥 버전 번호를 다르게 가는 것일뿐. MariaDB…

대용량 검색 처리를 위한 inverted index (역색인) 설명

HYEONG HWAN, MUN/ 1월 11, 2016/ 미분류/ 0 comments

나름 쉽게 설명한다고 적었는데, 비전공자에게는 어려울 수도 있다. – 빅데이터 먼저 “빅데이터“란 무엇일까? http://en.wikipedia.org/wiki/Big_data 위키피디아에서는 “매우 양이 많고 복잡해서 기존에 사용하던 분석방식으로는 처리하기 힘든 데이터들(Data-Set)” 이라고 정의되어 있다. 과거에 비해서 인터넷이 비약적인 성장을 하였고, 언제 어디서나 인터넷에 접속할 수 있는 “유비쿼터스”의 시대 도래로 인해 우리는 항상 인터넷에 연결되어 있다.그러다 보면 많은 종류, 많은 수의 document 를 생성하게 된다.“빅 데이터”(=BIG DATA)(=HIGH VOLUME DATA) 라고 함은 보통 million(백만) document 이상의 data-set을 말하는데 이런 환경에서 사람들은 useful 한 information 을 찾으려고 한다. (중요한 단어는 영어로 쓰겠다.) 따라서 데이터 덩어리(Data-Set)에서 유용한 정보(Useful-Information)을 채굴하는(찾아내는,mining) 것이 중요한 영역이 되었고, 이것에 대해 주로 연구하는 “데이터마이닝(Data Mining)” 분야가 발전하게 되었다. 사용자들은 백만개가 넘게 쌓여진 document 에서 자신에게 필요한 document를 찾고자 한다. 예를들어 100만개의 글(documents)이 있는 게시판에서 User가  “Buying a Home” 이라고…