고마워서 만든 블로그 by 맛소금

기술 이야기

리뷰하다가 프로젝트 틀어질 뻔한 썰

토이 프로젝트를 누군가와 같이 해본적이 별로 없다. 그리고 주변에서도 성공하는 케이스 보다는 깨지는 케이스를 더 많이 보았다. 아무래도 회사와는 다르게 참여 인력들의 상황이 모두 다르기 때문일 것이다. 그것을 알기 때문에 담당분야를 분명하게 나눠서 후배랑 둘이 프로젝트를 시작해 보았다. 하지만 리뷰하는 과정에서 문제가 발생했다. 그 상황에 대해서 느낀점과 그 동안의 경험에 대해서 기록을 남겨 보려한다. 나는 리뷰를 한다고 했는데, 잘 안되었다. 분석을 위해 몇 가지 인자를 뽑을 수 있을 것 같다. 내 리뷰의 기술 품질, 내 리뷰의 감성 품질, 리뷰를 받는 사람의 자세. 순수하게 내가 느낀 내용을 적어보려한다. 온전히 내 입장에서 혼자 복기를 해본다. 리뷰 기술 품질 우선 리뷰를 얼마나 꼼꼼하게 할 것인지..

기술 이야기

파이썬 빠르게 제대로 익히는 방법

요즘 참 인기가 많은 파이썬을 빠르게 제대로 익하는 방법에 대해서 소개하려 한다. 이 방법은 사실 내가 새로운 언어나 플랫폼, 프레임웍을 익힐때 사용하는 방법으로 Android, Tizen, C++, Java, JSP, Typescript, Angular, Vue, Python을 개발할 때 유용하게 사용했던 방법이다. 파이썬은 고수준의 범용 프로그래밍 언어인데, 배우기도 쉽고 사용하기도 쉬워서 요즘 참 않은 사람들이 배우고 있다. 프로그래밍 도서 순위 상위권에 많은 책ㅇ들이 파이썬 관련 도서이고 유튜브에도 파이썬 학습 영상이 많이 올라와 있으며, 온라인 강좌도 많이 있다. 하지만 막상 파이썬을 배우는 방법으로 기존 프로그래밍 언어를 배우는 오래된 구식 방법을 소개하는 컨텐츠도 많이 있어서 파이썬을 빠르게..

기술 이야기

브라우저로 텔레그램 챗봇 만들기

보통 파이썬이나 nodejs를 사용해서 텔레그램 챗봇을 만드는데, 그 전에 브라우저만을 사용해서 간단하게 텔레그램 챗봇을 만들어서 테스트해보자. 텔레그램의 챗봇 API의 대부분은 http get method를 사용해서 브라우저에서도 테스트가 가능하다. 챗봇에 들어온 메세지를 확인하고, 메세지를 보내는 것과 커스텀 키보드를 브라우저를 통해서 테스트 해보자. 텔레그램 챗봇 생성 텔레그램 챗봇 생성은 더없이 간단하다. 텔레그램 메신저에 접속해서 BotFather에게 /newbot이라고 메세지를 보내면 생성이 시작된다. BotFather는 챗봇의 이름과 username을 물어보는데, 응답으로 각각의 이름을 전송하면, 챗봇을 컨트롤 할 수 있는 토큰을 준다. 만약, username이 이미 사용 중인 경우에는 다른..

기술 이야기

SOLID - SRP 단일 책임의 법칙

Single Responsibilities Principle 함수 단위에 적용을 논하는 원칙이 아니다. 함수가 하나의 기능을 갖도록 리펙토링하는 원칙도 있지만 그것이 SRP는 아니다. 사실 나도 같은 맥락인 줄 알았다. SRP는 OOP의 Class 단위에서, 하나의 클래스가 여러 Actor를 상대하는 책임을 갖게되면 안 된다 것이다. 서로 다른 Actor를 상대하는 책임을 갖다보면 하나의 변경이 여러 Actor에 영향을 주게 되는 곤경에 빠지게 되기 때문이다. 흠...T.Viewer나 smtm은 그런 원칙들을 잘 지키고 있는 것 같아 뿌듯.ㅋ 너무 쉽고 간결하게 핵심을 잘 설명해둔 Clean Architecture 책을 추천한다.ㅎ

기술 이야기

[SW 이야기] EAFP vs LBYL

로맨스 영화를 보면, 썸타던 남녀 주인공이 속시원하게 1일을 시작하지 않는다. 쭈뼛 쭈뼛, 뱅뱅 돌리고 돌리면서 애간장을 태우다가 꼭 무슨 사고가 발생한다. 사고를 간신히 무사히 넘긴 뒤에 남자 주인공과 여자 주인공은 한 숨 돌리며 서로의 존재에 안도한다. 눈빛을 교환하고, 점점 면상이 가까워 진다. 남주가 여주 입술에 입을 맞춘다. 여주는 남주를 밀친다. 당황한 남주의 싸다귀를 후려 갈긴다. 그리고 더 과격하게 키스를 때린다. 이 바보!...BGM 재생...영상미 풀 가동... 이 장면에서 EAFP를 떠올렸다면 당신은 SW 개발자다. 다음은 EAFP와 LBYL에 대한 내용을 설명한 파이썬 가이드 일부이다. 난 EAFP를 선호한다. 키스해도 되냐고 물어보는게 뭐야. 진짜 싫어. EAFP 허락보다는 용서를..

기술 이야기

python coverage with unittest 적용하기 feat. travis

python coverage 사용법에 대해서 검색해보니 하나 같이 비슷한 내용이네. 나는 unittest를 사용 중인데, 진짜 너무 기본적인 내용들 뿐이고 내용도 너무 빈약해서 official guide를 보고 적용하였다. unittest 사용하는 프로젝트에 적용하는 방법, travis CI에 적용하는 방법을 간단하게 정리해서 올려둔다. 설치하기 pip install coverage 로 설치하면 된다. 중요한것은 본인 프로젝트의 setup.py에 의존성을 추가해주는 것이다. 특별히 extras_require에 추가하고, 설치할 때는 pip install -e.[dev] 옵션으로 설치하면 된다. 즉, 개발자는 pip install -e.[dev] 요렇게 설치하도록 가이드 하면된다. README 업데이트 고..

기술 이야기

[Python] Pacakge에서 모듈간 import 에러 __init__.py 순서

파이썬에서 다른 모듈 import가 안된다고 에러가 났다. 철자까지 몇번을 확인하고 다른 곳에서 import해봐도 잘되는데 뭐가 문제일까 30분을 디버깅했다. 같은 패지키내에 모듈을 로딩할 때는 __init__.py에서의 순서가 중요하더라. 파이썬 강좌나 책은 공개된 것은 많은데, 이렇게 중요한 내용은 언급을 안함ㅠ 디버깅으로 체득함. sample code 추상 클래스로 인터페이스를 만들고, 구현체를 따로 만들었다. 둘은 서로 다른 파일에 구현되었다. # /simulator/data_provider.py from abc import * class DataProvider(metaclass=ABCMeta): @abstractmethod def initialize(self): pass 같은 패키지의 DataP..

기술 이야기

mDNS, DNS-SD - Discovery 문제 IGMP를 확인하자

mDNS는 Multicast DNS라는 기술이고, DNS-SD는 DNS Service Discovery라는 기술이다. 둘다 로컬 네트워크의 다른 기기를 검색하기 위해 논의되고, 개발되어 널리 사용 중이다. 대표적으로 구글 크롬캐스트가 mDNS를 사용중인데, 사실 나는 크롬캐스트의 시나리오를 차용하고 싶어서 알아보다가 알게되었다. 널리 익숙하게 사용되는 방식은 그 자체만으로도 큰 가치가 있다고 생각한다. Chromecast#Device_discovery_protocols 거기 누구 없소? 로컬 네트워크에서 다른 기기를 검색하는 일은 매우 중요하다는 것은 알았지만, 그 동안 어떤 일이 있었는지 잘 몰랐다. 사실 아직도 잘 모른다. 다만, 오랜 시간이 지나서야 Window나 Mac, Android 구분 없이 ..

기술 이야기

[.NET] A callback was made on a garbage collected delegate of type

잘 동작하던 API가 갑자기 죽네. 동일한 코드가 샘플앱에서 정상동작 하는 것까지 확인했는데,,,흠... A callback was made on a garbage collected delegate of type GC에 의해 해제된 delegate 델리깃에 접근해서 발생하는 Exception Callback delegates being collected? 질문이 벌써 몇개 있었다. 답변이 아주 간단 명료하다. That's the problem statement. FMod is unmanaged code. You are creating a delegate object here and passing it to the unmanaged code. Problem is, the garbage collector c..

기술 이야기

C# .NET IDisposable을 이용한 Dispose pattern과 SafeHandle

C# .NET에서는 효율적이 메모리 관리를 위해 Dispose pattern과 SafeHandle의 사용이 권장된다. 짧게 요약해 보았다. For the majority of the objects that your app creates, you can rely on .NET's garbage collector to handle memory management. However, when you create objects that include unmanaged resources, you must explicitly release those resources when you finish using them in your app. Cleaning Up Unmanaged Resources 대부분의 경우, 쓰레기..

기술 이야기

오픈소스로 개발하면 좋은점 - 1

오픈소스로 개발하면 좋은 점은 엄청 많은데, 다 적기는 귀찮아서 1이라는 숫자를 붙이고 지금 생각난거 하나만 적어본다.ㅎ 오픈소스는 결과보다 과정을 중요하게 되는 효과가 있다. -맛소금 아주 오래전 내가 회사에 입사해서 개발자로서의 삶을 시작할 때, 심각한 시장 문제가 나오면 상무님이 결론 회의실로 담당자들을 집합시켰다. "이 세상에 버그없는 SW는 없다" 는 말로 부드럽게 시작하시지만, 결국은 최종 코드 작성자를 찾아서 아주 개박살을 내고 회의를 마친다. 무엇이 잘 못 되었는지 앞으로의 대책은 무엇인지, 어떻게 고쳐야 할지에 대한 고민은 별도로 진행되지 않는다. 아니 진행은 추후에 따로 진행된다. 개박살 나는 꼴을 보고 사람들은 겁을 먹고, 뭐가 문제였는지 스스로 각자 자신의 코드를 점검하고, 알아서 ..

기술 이야기

Android Jetpack은 API가 아니다

많은 사람들이 안드로이드 API처럼 사용하고 있는 Jetpack은 API가 아니다. Android Jetpack은 품질이 좋은 Application를 만들 수 있게 도와주는 라이브러리와 개발 도구이다. 사실 별로 중요한 것은 아니다. 개발자는 그냥 쓰면 된다.ㅋ 그냥 쓰면 될 수 있게 만들어 놓은 그 이유에 대해서 생각해 보았다. API란 무엇인가 API는 Application Programming Interface의 약자로 Application 개발자들이 특정 기능을 쉽게 구현할 수 있도록 사용하는 외부 모듈과의 연결 고리이다. 인터페이스! API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로..

기술 이야기

C# async, await와 TAP 놀랍지만...

Task Asynchronous Programming에 대해서 Microsoft에서 소개한 글을 읽고 간단하게 정리해 보았다. 국문도있지만, 기계 번역이라 이해하기 쉽지가 않다. 비동기 프로그래밍 규칙적인 시간 관계가 없는 것으로, 임의의 사상의 출현을 말하고 프로그램 실행에서는 명령순서 예측이 불가능한 것 - 비동기 비동기 프로그래밍은 비동기적으로 실행되는 부분을 포함한 프로그램을 구성하는 것이다. 비동기적 실행이라는 것은 실행의 종료시점과 실행주체가 동기화 되지않고 실행되는 것이다. 쉽게 설명하자면, 정확히 언제 끝날지 모르는 일이다. 비동기 프로그래밍의 대표적인 경험은 Web일 것이다. Javascript는 비동기 콜백이 엄청나게 많다. 너무 많아서 콜백 지옥이라고도 표현한다.ㅋ 익숙해지면 익숙한대..

기술 이야기

Shared Library가 링크되는 과정

컴파일과 링크 과정을 잘 정리해 둔 글은 많이 있다. 찾아보고 잊어버리기를 반복하는데, 날이 갈수록 더 잘 정리해 두니까 더 기억을 안하게 되는것 같다.ㅋㅋㅋ 내가 궁금한 것은 Shared Library는 Dynamic Linking 된다고 하는데, 왜 Compile time에 shared library file이 필요한가였다. 이유는 Compile time의 Static linking 과정에서 reference를 저장해 두었다가 Dynamic Linking 시점에 메모리에 올려진 Shared Library의 실제 주소가 reference와 연결되기 때문이며, 그래서 추가로 메모리가 필요치 않다. 그래서 Shared Library. compile process Static vs Shared Librari..

기술 이야기

한국, 인터넷과 스마트폰 접근율 세계 1위

퓨 리서치는 2017년 조사 데이터에서 한국이 인터넷과 스마트폰 접근율이 각각 96%, 94%로 세계 1위를 차지했다. 소셜 미디어 사용은 69%로 호주, 미국과 함께 69%를 기록했으나, 75%의 요르단과 72%의 레바논보다 뒤지는 것으로 나타났다. ...South Korea stands out as the most heavily connected society, with 96% of adults reporting internet use. Social Media Use Continues to Rise in Developing Countries but Plateaus Across Developed Ones 퓨 리서치는 2017년 2월 16일부터 5월 8일까지 37개 국가들에서 40448명을 대상으로 조사..

기술 이야기

토큰 기반 인증 간단 정리 Token based Authentication

토큰을 사용하여 인증하는 방법에 대해서 간단하게 정리해 본다. 이미 정리된 내용이 많이 있는데, 그 정보들을 바탕으로 요점정리 해 둔 것이라고 보면 된다. 토큰 vs 세션 토큰과 세션의 차이를 설명하는 글이 엄청 많은데, Client가 고유 식별자를 갖고, 그 식별자를 바탕으로 인증을 처리한다는 점에서 두 기술은 같다. 세션이 식별자에 대한 정보를 서버에 저장한다고 하지만, 결국 식별자의 일부는 client에도 저장이 되어야 한다. 보통 cookie로 저장되는데, cookie에 모든 정보를 저장하는 더 낮은 보안수준의 방식과 비교하여 세션 방식은 주요 정보가 서버에 저장된다는 의미이니 오해하지 말자.세션은 그 식별자가 http session에 한정된다는 점에서 토큰보다 제한된 범위의 활용성을 갖는다. 세..

기술 이야기

AWS CloudFront와 S3로 Private Content 전달 방법

AWS S3와 CloudFront를 이용해서 허가된 사람에게만, 제한된 시간동안만 이미지나 미디어 파일을 웹 스토리지를 통해서 공유할 때 유용한 기술(?)을 정리해 본다. 내가 즐겨 사용하는 가장 간단한 방법은 signature를 포함하는 signed URL을 생성해서 공유하는 방식이고, 자세한 내용은 아래 가이드에 자세히 나와있다. 나의 글은 가이드에 나와있는 내용을 간략하게 요약하고, 경험을 곁들인 후기라고 보면 좋을 것 같다! :) CloudFront를 통한 프라이빗 콘텐츠 제공 전체적인 그림 일단, 간략하게 구성을 소개하면 S3는 웹 스토리지이고, CloudFront는 글로벌 컨텐츠 전송 네트워크(CDN)이다. S3는 높은 신뢰성과 안정성을 제공하고, CloudFront는 전세계 어디서나 빠른 속..

기술 이야기

좋은 프로그래머란?(2) - 언제나 옳은 프로그래밍을 하자

좋은 프로그래머에 대한 생각을 한번 정리하고 나니 하고 싶은 말이 몇가지 더 생겼다. 너무 기본적인 이야기들이지만, 기본을 잘 지킨다는 것이 얼마나 중요한지 알기에 가끔씩이라도 기본을 되새겨 보는 것이 좋다고 생각한다. 가끔씩 한번쯤 읽어보면 좋은 글이 되었으면 좋겠지만, 사실 그렇게 잘 쓸 자신은 없다.ㅎ 이번에 이야기 할 내용도 다른 사람과 함께 프로그래밍 하는 방법에 대한 이야기다. 회사에서 일하다가 어떻게 하면 더 좋은 프로그래밍을 할 수 있을지 개인적으로 고민하고 생각했던 내용을 글로 표현하여 적어 둔 것이다. 예상을 벗어나지 말자 잘 짜여진 프로그램 코드를 읽으면, 처음 읽어도 술술 읽힌다. 어느 정도만 봐도 뒷 부분이 예상이 된다. 남이 짠 코드라도 읽고 이해하는데 큰 어려움이 없다. 왜 예..

기술 이야기

BLE iBeacon Eddystone packet format 분석

지난번에 BLE Advertise Packet 내용 자세히 알아보기에서 BLE Avertise Packet이 어떻게 구성되는지 확인했다. 그 내용은 BLE Spec에 따른 원론적인 내용이었고, 그 Spec을 지키면서 새로운 기술을 정의한 것이 Apple에서 만든 iBeacon과 Google에서 만든 Eddystone이다. 두 기술 모두 BLE Advertise Packe의 최대 31Byte의 AdvData를 이용하여, 목적에 맞게 세부 데이터 구조를 정의한 것 뿐이다. iBeacon iBeacon은 2013년 애플에서 만들었고, 애플의 등록상표이다! 아래 그림과 같이 구성되며, 31Byte는 앞서 설명한대로 BLE Advertise Packet의 AdvData에 담겨지는 데이터이다. 별거 없다. 아주 단..

기술 이야기

좋은 프로그래머란? - 코드로 동료를 배려하는 사람

좋은 프로그래머란 어떤 사람일까? 여러가지를 말 할 수 있겠지만, 코드를 작성할 때 동료를 배려하는 사람에 대해서 이야기 해보고 싶다. 후배들에게 꼭 해주고 싶은 말인데, 주석이나 변수명 가지고 리뷰 코멘트 남기는 것이 너무 조심스럽고, 막상 이런 사소한 걸 편하게 말하기가 쉽지 않다. 사실은 정말 중요한 일인데...ㅠ 흔한 말로, 회사라는 곳은 혼자 할 수 없는 일을 함께 해내기 위해서 모인 조직이다. 서로에 대한 배려를 바탕으로 협업이 잘 되는 것이 가장 중요하다. 회사도 이 사실을 잘 알기 때문에 직원을 뽑을 때 커뮤니케이션 능력, 사회성 같은 것을 꼼꼼하게 확인한다. 프로그래머는 이메일 작성이나 회의를 할 때 말고도 코드를 작성할 때 커뮤니케이션 능력을 십분 발휘해야 한다. 프로그래머 간에는 코드..

기술 이야기

Software와 관련된 지식 조각

얼마전에 교육 받으면서 개인적으로 정리한 내용을 올려둔다. 명확한 정의와 설명을 모아둔 것이 아니다. 단지 각각의 개념에 대해서 스스로 쉽게 설명해 볼 필요가 있다고 생각해서 끄적거렸던 것이다. 아마 누군가의 앞에서 물음에 대답해야 하거나, 어떤 개념을 설명하다가 잠시 부연 설명을 할때 도움이 될 것 같다. 정확한 답보다 자신의 문장으로 소화해서 가지고 있는 것이 중요하다.ㅎ Programming Paradigm Procedural Programming Procedure를 통해서 추상화와 재사용성을 만들어내는 것이 핵심이며, 코드의 재활용성이 높고 프로그램의 흐름이 쉽게 이해되며, 모듈화와 구조화가 용이하다. 반면, Procedure를 호출하는 과정에서 필연적으로 비용이 발생한다. 복잡한 프로그램을 만들..

기술 이야기

MongoDB 소소한 정리

몽고DB 정리도 여기 저기 잘 되어 있지만, 내가 쓰는 커맨드, 설치했던 방법들을 모아 모아서 소소하게 정리해 둔다. ubuntu 16.04에서 설치하고, systemd 에 등록하는 것도 매우 유용 했다. Ubuntu 16.04 에 몽고DB 설치 공식 사이트에 가면 14.04 버전 설치 방법만 나와있는데, 크게 다르진 않지만... https://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-ubuntu-16-04 $sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 $echo "deb http://repo.mongodb.org/apt/ubuntu xe..

기술 이야기

Angular에 Webpack 적용 후기 & Tip

Angular를 사용한 웹사이트를 만들었는데, 막상 Release 할 때 첫화면 로딩 성능이 잘 안나와서 급하게 Webpack을 적용해서 성능을 개선했던 기억을 간단하게나마 정리해본다. 기술적인 내용은 참고했던 사이트의 소개 위주로 간단하게 적고, 경험적인 내용을 추가로 정리해서 덧 붙인다. 우선 기술적인 내용! Webpack으로 AOT Compile and Bundling! 결론적으로! Webpack 적용해서 index.html 에는 bundled js 파일만 남겼다. 우선 AOT가 무엇인지 알아야 하는데, Angular는 2가지 compile 방법을 제공한다. 성능 개선이 목적이었기에 당연히 빠르다던 AOT를 적용했다. 1.Just-in-Time (JIT), which compiles your app..

기술 이야기

Software Architect에 대한 단상

몇 주간의 Architect 교육 중에 몇가지 생각을 추려서 적어둡니다. 언제 다시보면 한번쯤 생각해 보는 것도 좋을 것 같아요. 교육 시작할 때, 상무님 말씀 중... 소프트웨어는 정답이 없고, Architect의 주장을 논리적으로 설득할 수도 없다. 그래서 Architect은 고독한 길이다. 당장 증명할 수 없는 의견을 제시해야 하는데, 목에 칼이 들어와도 아닌건 아니라고 말해야 한다. 이 코드는 쓰레기다라고 말할 수 있어야 한다. 그래서 Architect은 Position Power를 갖아야 한다! 신념 없이 욕 안먹고 좋은게 좋은거다라는 사람은 절대 좋은 Architect가 될 수 없다. 여러 교수님들의 생각이 조금씩 다르기도 했지만, 가장 핵심적인 내용은 같았다. 아키텍쳐가 중요한건 품질이 중요..

기술 이야기

검색엔진 최적화(SEO) 방법 핵심 정리

SEO로 불리는 검색엔진 최적화를 위해서 적용했던 내용들을 정리해 놓은 메모를 블로그에 올려 본다. 이미 아는 원론적인 이야기일 수 있으나, 그럴 수록 기본에 충실해야 한다는 생각으로 적어두고 가끔 다시 보려고 굳이 블로그에 올려본다. 본 글은 검색엔진 최적화를 위해서 특별히 타이틀에 낚시맛을 가미해서 작성해 보았다.ㅋ 요약해보면... 검색엔진은 좋은 컨텐츠를 찾기 위해 진화한다. 검색엔진이 좋은 컨텐츠라고 생각하기 위한 불필요한 것은 역효과가 날 수 있다. 검색엔진에게도 좋고, 실제 사용자에게도 좋은 컨텐츠를 갖추면 된다. 우선 순위는 실제 사용자에게 좋은 컨텐츠를 만드는 것에 있다! 결론, 아래 기준들을 바탕으로 실제 사용자에게 좋은 컨텐츠가 될 수 있게 노력하면 그것이 최고의 검색엔진 최적화 SEO..

기술 이야기

Good requirements practices are neither necessary nor sufficient

요구공학 배우고 있는데, 교수님이 읽어보라고 하셔서 읽어본 글을 간단하게 정리해 둔다. 좋은 요구 사항은 성공을 위해서 필요하지 않거나 충분하지 않다 정도로 해석하면 될까? 제목에서 알 수 있듯이 좋은 요구 사항이 꼭 프로젝트의 성공과 직결되는 것만은 아니라는 내용이다. 여기서 Practice 를 어떻게 해석해야 하나...;; 에자일 프랙틱스를 에자일 실천법이라도 번역한 글도 많던데...흠. 일단, 여기서 requirements practice는 요구 사항 도출, 관리, 분석, 문서화, 변경 관리에 관한 모든 행동이라고 가정한다. We consider a requirements practice to be the use of a principle, tool, notation, and/or method in..

기술 이야기

Nodejs 프로세스 매니저 PM2 사용법

서버에서 노드 구동 관리를 위해서 예전에 forever 랑 nodemon을 썼던적이 있는데, pm2를 알게되어서 이번에 사용해 보았다. startup 커맨드가 넘 좋고, 보기 좋고, 잘 동작해서 좋다. 서버에서 웹 애플리케이션을 운영할 때 보통 데몬으로 서버를 띄워야 하고 Node.js의 경우 서버가 크래시나면 재시작을 하기 위해서 워치독(watchdog) 류의 프로세스 관리자를 사용하게 된다.Outsider's Dev Story 시작하기 --name 옵션으로 이름을 정해두면 리스트에서 보기 좋다. --watch 옵션으로 변경사항을 체크해서 자동 재시작 하도록 할 수 있다. $sudo pm2 start [--name ] [--watch] 목록 확인 등록되어 있는 목록 확인 $sudo pm2 list 중단..

기술 이야기

도메인 만료 후 같은 웹서버로 도메인만 변경하기 301 Redirection

delisalt.me 도메인이 만료되어서 msalt.net으로 변경하게 되었다. 변경이 이렇게 귀찮은 일일 줄이야. 귀찮은 일들의 과정을 정리해 둔다. 나같은 누군가를 위해... 정말 가벼운 마음으로 싸게 나온 .me 할인 받아서 샀는데, 연장부터 열라 비싼것이 함정. .net이 6월까지 30%할인 하길래 질렀는데, 할인을 또하네...-_-;어째든, 서버는 그대로인데, 도메인만 변경하는 경우 해줘야 할 일 들을 정리해 본다. 해야 할 일 새로운 도메인에 서버 연결 (당연..ㅎ) 소스에 도메인 하드 코딩된 부분 모두 변경 도메인변경 공지 팝업 띄워주기 301 Redirection 시켜주기 - 제일 중요! 블로그 설정 변경하기! - 티스토리나 네이버에서 설정 검색엔진에 알려주기 (구글 웹마스터, 네이버 웹마..

기술 이야기

AWS 람다로 서버 없이 간단한 REST API 만들기 - 경험담

제 서버에 기생하던 아주 간단한 API가 있었습니다. 필요는 한데 서버를 따로 두는 것은 너무 큰 낭비라서 일단 넣어놨습니다만, 계속 기생시키는 것은 여러모로 찝찝하던 찰나에 문득 AWS 람다를 이용한 Serverless Architecture 가 생각나서 사용해 보기로 했습니다.ㅋ 이미 유명한 서비스라 자세한 설명보다는 경험 위주로 정리해 봅니다. 목표 간단하게 DB Data를 가져오고 업데이트하는 GET, PUT, POST API를 서버 구축 없이 만들기 (DB 구성은 별도, 추가 설명 생략) 서비스 구성 일단 AWS 람다와 API 게이트웨이를 사용해서 만들려고 하는데, 그것이 어떤 것인지는 아래 링크로 대신합니다. 정리를 잘하셨네요. :) [AWS]서버없이 Lambda와 API Gateway로 서버..

기술 이야기

BLE Advertise Packet 내용 자세히 알아보기

BLE를 간단하게 알아보다 Beacon의 세계를 알게 되었다. Beacon의 종류와 데이터 포맷을 알아 보다 Advertise Packet을 자세히 알게 되었다. 다른 블로그에 잘 나와있지 않은 부분들을 직접 Spec을 찾아보면서 알게되었는데, 그 내용을 정리둔다. BLE Advertising Data에는 기기 이름, 주소, UUID 등이 들어있는데, 실제 Packet에서 그 정보를 찾는 방법에 대해서 정리해 둔다. Bluetooth Specification Spec은 Specification의 줄임말인데, 명세서라고 하며, 내용은 시스템이나 기술에 대해 명확한 설명이다. 처음보면 좀 당황스러울 수 있으나 조금만 시간을 투자하면 금방 익숙해지는 아주 잘 짜여진 구조적인 문서이다.블로그에서 자료를 찾아보는..

기술 이야기

깃 git 활용/사용/응용 팁

깃 git에 대해서는 이미 잘 정리된 글이 많지만, 경험을 바탕으로 깃 git 활용/사용/응용 팁을 간단하게 정리해 본다. 누군가에게 도움이 되길...(뭐라 표현해야 할지 고민하다 3개를 나란히 썼다.ㅋ) 목차 도움말을 확인하자 track 옵션 되돌리기 커밋 commit id add 할때 -p 옵션! rebase 로그를 이쁘게 grep 파일 내용 검색 기능 git에서 HEAD란 reflog 든든한 이정표 branch 만들기 remote branch 다루는 방법 stash 간편 저장 log 검색 bash prompt에 git branch 이름 표시하기 blame 수사반장 remote의 HEAD 변경하기 gerrit용 push 설정 gerrit 사용방법 명령어 정리 git GUI 프로그램 추천 기타 도움말을..

기술 이야기

BLE, Bluetooth Low Energy 비콘 간단 정리

저전력 근거리 통신 기술인 BLE, Bluetooth Low Energy에 대해서 찾아본 내용들을 간단하게 정리해 봅니다. 시작은 내가 가진 웨어러블 디바이스를 어떻게 하면 좀 더 유용하게 써볼까였는데, 생각보다 매력적인 기술 같네요.ㅎ 여기서 간단하게 정리하고, 기회되면 아주 조금 더 깊게 정리해서 올려 보겠습니다. 블루투스란? 노르웨이 국왕? 그렇다면…5G는 세종대왕이나 이순신은 어떨까...ㅎ 블루투스라는 칭호 자체의 유래야 어찌됐든 하랄 1세가 나라를 평화롭게 통일(연결)시키는데 큰 업적을 남긴 것처럼, 여러가지 전자제품의 무선규격을 통일시키자는 의도로 기술의 이름을 블루투스로 정했다. 연구개발원 Jum Kardach가 낸 이름인데, 마침 바이킹과 하랄 왕이 주인공으로 나오는 소설을 읽고 있어서 제..

기술 이야기

오픈그록 OpenGrok 고급진 사용법

오픈그록 OpenGrok 고급진 사용법에 대해서 간단하게 글을 써보려고 합니다. 특별히 어려운 것은 없지만, 막상 찾아보면 잘 안나와있는 내용을 정리해 봅니다! 간단한 소개 쉽게 설명하자면, 웹 브라우저에서 코드 검색을 쉽고 빠르게 할 수 있는 프로그램입니다. Java와 Servlet Container 그리고 Exuberant Ctags를 이용하여 구성되며, 다양한 언어와 형상관리툴들의 정보를 색인할 수 있습니다. OpenGrok is a fast and usable source code search and cross reference engine. It helps you search, cross-reference and navigate your source tree. OpenGrok github 설치하..

기술 이야기

onbeforeunload 사용팁, 카카오톡 인앱 브라우저에서 문제 임시해결 방법

onbeforeunload 사용법과 유용한 팁하나 그리고 카카오톡 인앱 브라우저에서 사용할 경우 카카오톡이 죽는 문제(버그인듯)의 임시 해결방법을 간단하게 공유합니다. beforeunload event 브라우저에서 힘들게 작성하던 페이지가 너무 쉽게 닫혀서(예를 들면 back key) 작성하던게 다날라가 버리는 것을 방지하기 위해서 정말 페이지를 벗어날 것인지 사용자에게 한번 더 물어보도록 동작하게 beforeunload 이벤트를 처리해 두곤 합니다. window.onbeforeunload = function() { return '작성하던 내용이 모두 사라집니다'; //표시할 메시지를 반환하면 됨 } 위와 같이 간단히 처리하면 됩니다. 자세한 내용은 아래를 참고하시면 됩니다. The beforeunloa..

기술 이야기

IoT 아직은 아니다! 결코 가깝지 않은 미래

Iot가 요즘 화두가 되고 있지만, 저는 과감히 말해봅니다. IoT 아직은 아니다! 결코 가깝지 않은 미래다. 제가 유명 석학도 아니고 파워블로거도 아니지만, 그렇기 때문에 더 자유롭게ㅎ 제 개인적인 생각을 한번 정리해서 올려봅니다. 기술의 혁신인가? IoT 라는 키워드를 바탕으로 신기술 또는 기술혁신의 이미지가 형성되고 있는것 같습니다만 실질적으로 어떤 기술의 혁신인지 잘 모르겠습니다. 새로운 기술이랄것도 없고, 특정 기술이 새로운 전환점을 맞이한것 같지도 않습니다. IT기술이 지속적으로 발전해 오면서 기존의 한계점으로 받아드려지던 것들이 조금씩 극복되고, 그 과정에서 기술간에 시너지가 발생해서 새로운 가능성이 확보된 것은 사실입니다. 통신기술이나 저전력 프로세싱, 센서 기술과 배터리 및 전력관리 등 ..

기술 이야기

WinSCP 권한 오류 Permission denied code 3 무시 설정

WinSCP 권한 오류 Permission denied code 3 무시하도록 설정하는 방법 WinSCP 사용하다보면, 파일이 정상적으로 업로드 된 이후에 권한 오류 팝업이 발생하는 경우가 있는데, 이럴때는 그냥 무시하도록 설정해서 쓴다. 사실, 가이드 페이지에 자세히 나와있는데...그걸 못찾고...누군가 여기로 왔겠지;; 업로드 조차 안되는 권한 문제는 접속 접근하려는 파일이나 폴더의 권한을 변경해주거나 권한을 갖고 접근해야 한다. 그 문제는 다시 검색해서 해결하시길... 에러 팝업 설정에서 전송 선택 후 편집 권한 오류 무시 ignore permission

기술 이야기

하이차트(highcharts) 부트스트랩(bootstrap) 넓이 오류 문제

하이차트(highcharts)를 부트스트랩(bootstrap)과 같이 쓸때 차트의 넓이가 잘못 계산되어서 오버플로우가 발생하는 문제가 있습니다. 내용과 해결책을 간단하게 공유합니다. 문제 차트의 넓이가 커져서 좌우로 스크롤바가 생겼습니다 아파트실거래가차트 프로젝트에 하이차트를 사용했는데, 차트가 상위 컨테이너 div크기보다 크게 그려지길게 검색을 좀 해보니 관련해서 문제가 좀 있는것 같습니다. 깊게 알아보지는 않았고, 간단한 우회해결책(workaround)이 있길래 적용해서 해결했습니다. 해결방법 차트의 reflow 메소드를 호출해 주면 됩니다. var chart1 = new Highcharts.Chart(config); chart1.reflow(); //해결방법 참고 : Chart size doesn'..

기술 이야기

구글 웹로그 분석(Google Analytics) 스팸/쓰레기 데이터 걸러내기

구글 웹로그 분석(Google Analytics)에 스팸/쓰레기 데이터를 걸러내는 방법을 정리했습니다. 실제 방문하지도 않으면서 불순한 의도로 분석 데이터를 더럽히는 일을 막는 방법 입니다.어느날 우연히 이상한 접속 데이터를 확인하고, 구글 웹로그 분석(Google Analytics)의 데이터에도 스팸/쓰레기 데이터가 발생한다는 것을 알게되었습니다. 폭풍 검색해 봤는데 한글 자료는 별로 없지만 요즘 이슈가 많이 되는 것 같습니다. 찾아본 내용들을 바탕으로 직접 적용해보고 정리했습니다. 도움되시길! 쓰레기 데이터가 있다! 블로그 개설하고 얼마 안되었을때 요상한 곳에서 제 블로그에 들어왔더라구요. 그냥 그려러니 했는데, 스팸 봇이 만들어낸 쓰레기 데이터네요! 모두 같은 사이트로 연결되는 링크다.스킨을 수정하..

기술 이야기

삼성 오픈소스 컨퍼런스(소스콘)에서 리눅스 토발즈를 만나자!

삼성 오픈소스 컨퍼런스(소스콘)에서 리눅스 토발즈를 만나봅시다. 삼성 오픈소스 컨퍼런스 홈페이지 토발즈의 이름은 리누스 베네딕트 토르발스 입니다. 리눅스와 깃을 만들었는데, 프로그래머로서 두 프로그램을 쓰면 쓸 수록 감탄이 나와서 정말 꼭 만나보고 싶었습니다. 무료로 토발즈를 만나볼 수 있는 좋은 기회가 생겼습니다! 바로 삼성 오픈소스 컨퍼런스 입니다! 오픈소스에 관심이 많은 분이라면 더더욱 좋은 기회이고, 관심이 없는 분도 오픈소스에 관심을 갖아볼 수 있는 좋은 기회인것 같습니다. 무료인데 사전 등록을 해야 합니다. 선착순이라고 하는데, 아직 되는것 같으니 얼른 신청하세욧! 토발즈는 기조연설(키노트)에서 깜짝 등장한다는 입소문을 입수했습니다!!! 스페셜 게스트라 쓰고 토발즈라 입소문을... 쌍욕도 잘한..

기술 이야기

아마존AWS 다이나모DynamoDB String Set 타입 정렬 문제

아마존AWS 다이나모DynamoDB String Set 타입 정렬 문제에 대해 사용팁과 고생의 흔적을 남긴다. 문제 String Set 타입을 사용해서 배열을 저장하는데 의도하지 않은 순서로 정렬됨.유투브ID를 배열로 저장해서 다이나모DB에 저장하고 꺼내 쓰려 했다. PutItemRequest와 GetItemRequest로 손쉽게 구현해서 테스트를 해보는데...어랏? 순서가 이상한데? 처음엔 내가 잘 못한 줄 알고 내 코드를 보다가 종착점에 다이나모DB가 있었다. 이상한데? 아마존 콘솔로 DB를 확인해보니 순서가 이상하게 저장이 된다. 흠...자동으로 정렬이 되는 것 같은데...정렬, sort, order로 검색해도 뚜렷한 답이 없다. 아무래도 사용자가 적어서 그런듯.ㅠ결국 아마존 문서에서 원인을 찾았다..

기술 이야기

텔레그램telegram 봇bot 사용법 소개 및 후기

텔레그램telegram 봇bot 사용법을 소개하고 사용 후기를 정리해서 올려봅니다. 관련 내용에 대한 한글 컨텐츠가 별로 없어서...직접….힘들게…ㅠ 텔레그램이란 텔레그램은 뭔지 알고 계시죠? 텔레그램(Telegram)은 여러 플랫폼을 지원하는 인터넷 메신저이다….러시아 최대의 SNS인 VK를 설립한 니콜라이 두로프와 파벨 두로프 형제가 2013년 발표했다.위키백과 위키에도 정리가 되어있지만 우리나라에서는 높은 보안성과 사이버 감찰, 사이버 망명 등으로 유명세를 탔죠. 하지만, 기능적인 면에서도 높은 평가를 받고 있고 실제 사용자도 상당히 많습니다. (우리나라는 카카오톡으로 통일되었지만…ㅎ) 텔레그램 봇이란 텔레그램에서 최근에 새로 추가한 봇을 지원하는 기능 또는 플랫폼 또는 API입니다. 봇은 아시다시..

기술 이야기

파비콘favicon 만들어서 블로그에 적용하기 - 김프gimp사용

김프를 사용하여 티스토리 블로그와 홈페이지에 사용할 파비콘favicon을 만들어서 적용하였습니다. 사실 기존에 사용하던 것이 있었는데 새로 만들려다가 결국은 조금 손보는 수준이 되었습니다. 패비콘(영어: favicon, 'favorites + icon') 또는 파비콘이란 인터넷 웹 브라우저의 주소창에 표시되는 웹사이트나 웹페이지를 대표하는 아이콘이다. 아이콘 크기은 16x16, 32x32, 48x48, 64x64픽셀이 될 수 있고, 8비트, 24비트, 32비트 색상이 가능하다.위키백과, 패비콘 위키에 간단 명료하게 잘 설명 되어 있네요! 아래 코드도 딱! 나와있네요~ㅎ 아래 한줄을 html head태그안에 넣어주면 됩니다. 어떤 포맷으로 할까? ico, jpg, gif, png 포맷들을 대부분의 브라우저..

기술 이야기

텔레그램 기반의 혁신적인 메신저 소셜라이저 소개

웹앱을 대화방에서 바로 공유하는 텔레그램 기반의 혁식적인 메신저 소셜라이저를 소개합니다. 웹앱이란? 웹 애플리케이션 Web Application의 줄임말로 말그대로 HTML5, JavaScript등의 웹기술을 이용하여 만든 애플리케이션입니다. 일반적으로 브라우저에서 실행되기 때문에 운영체제(OS)의 구분 없이 동일한 앱을 사용할 수 있는 것이 장점입니다! 소프트웨어 공학적 관점에서 웹 애플리케이션(web application) 또는 웹 앱은 인터넷이나 인트라넷을 통해 웹 브라우저에서 이용할 수 있는 응용 소프트웨어를 말한다.위키백과, 웹 애플리케이션 웹앱을 공유? 공유하기 버튼 아시죠? 누르면 사진이나 동영상 같은 것을 친구들에게 메신저나 문자 메세지로 보내는 기능! 웹앱 공유도 같은 개념입니다. 그냥 ..

기술 이야기

깃 허브 스타일로 구글 Syntax Highlighter prettify 적용하기

구글의 Syntax Highlighter인 code-prettify를 티스토리에 적용했습니다. 깃 허브git-hub 스타일로 적용했습니다! Alex Gorbatchev가 만든 SyntaxHighlighter 적용하신 분은 상당히 많은것 같은데, prettify 사용하는 사람은 드문것 같아서. 간단하게 정리하고 넘어갑니다~적용방법 사실 prettify 시작하기를 보시면 잘나와있는데, 그걸 더 간단하게 정리해 볼께요. 1. prettify.js 불러주기 아래와 같이 태그 한줄을 앞에 추가해주세요. 여기서 중요! run_prettify.js 가 아니라 prettify.js 입니다! 대신 body 태그에 onload="prettyPrint()" 꼭 넣어줘야 합니다. ... run_prettify.js으로 하면 ..

기술 이야기

웹 서버를 운용하는 5가지 방식

웹 서버를 운용하는 방식에 대해서 알아보다 좋을 글을 보고 정리해 본다. 웹 어플리케이션의 시대가 왔다. 티스토리 블로거라면 곧 웹서버 하나씩 운영하게 될 날이 금방 찾아오지 않을까 싶다. 개인 서버두고 홈페이지 운영하는 것이 점점 쉬워지고 있고, 모바일 환경에서 웹의 영향력이 계속 커지고 있기 때문이다. 조금만 공부하고 알아보면 쉽고 싸게 개인 웹 서버를 운영 할 수 있으며, 이 서버로 할 수 있는 일이 무궁무진하다~! 오늘은 운영 방식만 간단하게 정리. 어떤 일을 할 수 있는지는 나중에 delisalt.me 프로젝트를 참고하면 좋을듯.ㅎ 쉽게 설명해둔 아래 글을 정리한 것이다. 자세한 내용은 원문을 참고! 5 Common Server Setups For Your Web Application 오직 1개..

기술 이야기

HTML5 & CSS3 오늘 구현하는 내일의 웹 표준

10페이지도 채 읽기 전에 내가 얼마나 HTML5와 CSS3에 대해서 잘 못 알고 있었는지 알게 되어 얼굴이 화끈거렸다. 기본적인 코딩 룰도 지키지 않은채 코딩을 했었던 것 같다. 문제 없이 잘 돌아가지만 어디 내놓기 부끄럽다는 걸 알게 되었다. 간단하게 정리해둔다. doctype 선언 (DTD, Document Type Declaration) 현재의 문서가 어떤 형식으로 제작되어 있는지를 나타낸다. 유효성 검사기가 문서에 어떤 규칙을 적용할 지 알려줌 IE6,7,8 버전에서 문서를 '표준모드'로 렌더링하도록 강제함 시맨틱 마크업 semantic - 의미론의, 어의의, 의미의 마크업을 의미적으로 좀 더 잘 표현하는 것이며, 기계와 사람 모두가 좀 더 쉽게 문맥을 이해할 수 있게 해준다. 예를 들어 헤더와..

기술 이야기

깃으로 디버깅 하기 - git bisect 활용

오 맙소사! 이렇게 좋은 기능이 있었다니... 깃은 정말 너무 훌륭한 프로그램인것 같다. 간단하다면 한없이 간단하고 복잡하다면 한없이 복잡한 모습이 매력적이며, 알면 알 수록 유용한 기능과 뛰어난 확장성을 보여준다. (알수록!!!) 먼 옛날 내가 사원일때...디버깅이 정말 어려운 문제가 있었다. 공정 성능 문제여서 디버깅 자체가 쉽지 않은 상황인지라 로그도 없이 코드 분석을 했지만 쉽지 않았다. 결국 나는 구미로 출장을 갔다. 그 거대한 챔버 앞에서 밤을 새면서 내가 한일은...문제가 발생하지 않았던 버전부터 차례대로 빌드해서 결과를 보는 방식이었다. 그때 이진탐색 방법으로 히스토리를 좁혀갔는데 동일한 방법이 git bisect 기능으로 구현되다니!!! 이건 마치 나의 경험을 바탕으로 토발즈가 만들어준듯..

기술 이야기

로드 밸런싱 2가지 타입 - Layer 4(L4), Layer 7(L7)

웹 서비스에서 로드 밸런싱이란 트래픽을 여러 서버로 분산 처리하는 것을 의미한다. 로드 밸런싱은 여러가지 방법으로 구현이 가능하지만, 2가지로 구분해본다면 Layer4 로드밸런싱과 Layer7 로드밸런싱으로 구분할 수 있다. 관련된 내용을 쉽게 설명해 둔 글이 있어서 일부를 발췌해서 정리해 둔다. 아래 영문 사이트 참고 An Introduction to HAProxy and Load Balancing Concepts Layer 4 로드 밸런싱 말그대로 L4(transport layer)에서 로드 밸런싱을 해주는 것이다. 유저는 로드밸런서에 접속하고 로드 밸런서는 여러대의 웹서버 중 한곳으로 포워딩 해주는 간단한 구조이다. 일반적으로 IP 주소와 포트를 기반으로 트레픽을 나누는데, 나누는 알고리즘도 다양하..

기술 이야기

자료 백업 방법

조금씩 느려지는것 같더니 갑자기 접근이 안된다. 아에 접근이 안되니까 부팅도 안되고, 긱기기긱 소리만 난다. 이 상황에서 멘붕을 피할 수 있는 사람은 얼마나 될까? 나도 처음엔 웃었지만, 그 동안 간직했던 소중한 자료들이 이렇게 순식간에 사라진다고 생각하니 실감이 나질 않았다. 다행이 별별 방법을 다 동원해서 간신히 HDD에 다시 숨을 붙여놨고, 얼른 중요한 데이터를 다 빼서 새로 구입한 HDD로 옮겼다. HDD 복구는 다른 블로그들을 참고하면 될것 같고, 여기에다가는 사건이 있은 후 내가 마련한 백업 절차를 공유한다~ 데이터는 주기적으로 백업한다. 고정적인 주기보다는 이벤트에 기반하여 진행 개인적인 이벤트나, PC나 모바일 기기의 상태가 변경되었을때 진행 이벤트에 기반한 주기라는 것은 데이터가 의미있는..