네이밍 컨벤션
좋은 코드란 제 3자가 봐도 쉽게 이해할 수 있는 코드이다. 컴퓨터가 이해할 수 있는 언어를 작성하는 건 바보도 할 수 있다. 코드는 사람이 이해할 수 있게 작성해야한다. 변수 명, 메소드 명, 클래스 명, 모듈 명 등 모든 명에는 규칙이 존재해야하며, 이 것이 바탕이 되어야 역할이 명확해지고 정체성 또한 분명해진다. 이 것이 OOP를 향한 첫 단추이다. 네이밍이 가장 어렵다면, 여러분만 그런 것이 아닙니다. 저도 그렇고, 다른 타 프로그래머들 또한 많이 동감하는 부분입니다. 그 만큼 네이밍은 프로그램에서 가장 중요한 역할 중의 일 부분이고 가장 기본이 되는 것 입니다. **Unclear 한 코드는 쓰레기 코드이다. ** 프로그래머로써 다른 프로그래머가 작성한 코드를 참고해서 작업해야 될 경우는 비일비재 할 것 이다. 목적을 이해할 수 없는 메소드 명과 변수들, 가독성이 떨어지는 코드는 업무의 효율을 저하시키며, 시간 또한 많이 소요하게한다. 예를 들어 “X, AO, C2” 이 와 같이 정확한 목적을 담지않은 변수들이 있다. 가급적으로 짧게 네이밍을 하려는 프로그래머의 욕심으로 발생하는 문제일 수 도 있으나, 이는 너무나 잘 못...
청소력, 행복한 자장을 만드는 힘
청소가 사전에서 뜻하는 바는 아래와 같다. 더럽거나 어지러운 것을 쓸고 닦아서 깨끗하게 함 이 책을 읽게 된 건 본인이 청소를 좋아해서가 아니다. 청소에 대한 필요성을 느꼈고, 이를 통해 내 삶에 얼마만큼의 큰 변화를 가지고 올 것인가 내심 기대했기 때문이다. 사실 이 책을 읽기 이전에 초등학생 시절 도덕 선생님이 보여준 영상으로부터 나는 청소에 대한 중요성을 인지하고 있었다. 바로 , broken window theory 덕분이다. (* 자세한 설명은 아래 영상 참고) 나는 현재 혼자 살고있고, 집은 항상 더럽다. 설거지 되지 않은 식기구들과 빨래 바구니에 쌓여있는 빨래들 버리지 못 한 쓰레기들이 내 마음을 병들게하고 있었다. 항상 늦은시간 돌아오고, 몰려 오는 피로에 샤워만하고 곧장 침대에 뻗어 잠들기 다반사였다. 그리고 일어난 이후 더러원지 방을 보곤 함숨을 길게 쉬고 지각을 피하기 위해 쓰레기 더미 들을 대충 발로 치우고 집을 나섰다. 날짜를 정해서 대 청소를 하곤하는데, 그 또한 잠시 일 뿐 머지않아 다시 또 더러워진다. 이런 반복되는 악순환의 고리를 끊고자 나는 계획했고 이를 실천에 옮겼다. 청소는 하루의 한번...
도전
도전은 언제나 옳다. 자신의 성공 가능성만 믿는다면, 무조건 이룰 수 있다. 단, 모든 일을 임할 때 정말 죽을각오라 생각하고 덤벼야 이룰 수 있다. 그래서인지 도전의 성공한 사람들은 그리도 위대해 보이나보다. 난 정말 죽을각오로 도전을 받아들여본 적 있는가.. 실패는 의미 없다. 오직 성공만이 위대함을 부여받는다. Callenges are what make life interesting ovecoming them is what makes lif meaningful 도전은 인생을 흥미롭게 하고, 도전에 성공함으로써 인생은 의미를 갖는다. Joshua J. Marine
CDATA (Character Data) 설명
CDATA는 Character Data를 뜻 한다. 즉 문자 데이터를 말한다. 좀 더 정확한 표현을 하자면 (Unparsed) Character Data (파싱하지 않는 문자 데이터) 이다. 이 반대는 PCDATA 라 칭한다. 좀 더 정리하자면 SGML 또는 XML에서 스트링을 표현할 때 사용하는 토큰 해당 구문 안 내용들은 문자 데이터를 뜻 한다. 해당 구문 안에 포함된 태그는 무시해도 된다고 파서에게 알림으로써 오동작 또는 오류를 막을 수 있다. All text in an XML document will be parsed by the parser. But text inside a CDATA section will be ignored by the parser CDATA - (Unparsed) Character Data The term CDATA is used about text data that should not be parsed by the XML parser. Characters like “<” and “&” are illegal in XML elements. ”<” will generate an error because the parser interprets it as the start of a new element. “&” will generate an error because the parser interprets it as the start of an character...
Got a packet bigger than 'max_allowed_packet' 해결 방안
문제원인 max_allowed_packet은 클라이언트와 통신할 때 핸들링 할 수 있는 데이터의 양을 의미합니다. 기본 값은 16M 이므로 요청 데이터가 설정 값 이상으로 넘어가면서 발생하는 오류 사항입니다. 해결방안 mysql.cnf 설정 파일을 수정하여, 해결할 수 있습니다. debian 기준으로 /etc/mysql/mysql.cnf 경로에 위치해있습니다. 16M 에서 128MB 로 수정하면 됩니다. 수정 이후, MySQL 데몬을 재 실행하면 됩니다. 위 방법 이외 mysqldump command 를 통하여 아래 명령어를 실행하여 해결할 수 있습니다. mysql --max_allowed_packet=128M -u user -ppass database < database.sql  참고 error mysql : Got a packet bigger than ‘max_allowed_packet’ bytes http://stackoverflow.com/questions/13218975/error-mysql-got-a-packet-bigger-than-max-allowed-packet-bytes
Javascript filename naming convention
주로 내가 사용했던 방법은 큰 분류의 디렉토리별로 묶고 그 항목 아래 트리 형식으로 구성하여 실질적으로 파일명에는 영향력을 미치지 않았다. 하지만 일관성이 없고 확장성이 없어 어떤식으로 해결할지 고민하다가 찾은 문서의 내용을 좀 참고하여 정리하고자한다. 일반적으로 한 모듈 당 버전 또한 따로 히스토리를 남기지 않는 경우가 많다. 업데이트 사항에 따라서 버전을 구분한다면 좀 더 유연한 프로그램을 구성할 수 있다. 아래 방식으로 jQuery가 사용하는 명명규칙이다. 물론 이전의 나와 같이 자신만의 규칙을 만들어 작업할 수 도 있다. 해당 구조를 본 떠 자신의 규칙을 좀 더 일관성있고 유연하게 만들 수 있다. One possible naming convention is to use something similar to the naming scheme jQuery uses. It’s not universally adopted but it is pretty common product-name.plugin-version.filetype.js where the product-name + plugin pair can also represent a namespace and a module. The version and filetype are usually optional. filetype can be something relative to how the content of the file is. Often seen are: min for...
Git 에서 Out of Memory
Out of MemoryCommit ,Pull, 병합 또는 Rebase 시에 out of memory에러가 발생할 경우가 발생한다. 위 의 에러사항의 대처방법은 아래와 같이 .gitconfig 파일 (git 설정 파일)을 수정하여 해결할 수 있다. ## 본인의 설정파일 [user]  email = [email protected]  name = webhacking [core]  packedGitLimit = 128m  packedGitWindowSize = 128m [pack]   deltaCacheSize = 128m   packSizeLimit = 128m   windowMemory = 128m 참고 1. http://unix.stackexchange.com/questions/203183/git-fatal-out-of-memory- malloc-failed-on-branch-push
Snort Network IDS-IPS
snort 는 공개 네트워크 침입탐지시스템(NIPS. Network IDS/IPS)이며, ‘Sniffer and more’라는 말에서 유래되었다. (콧방귀 흥킇흨킁) 오픈소스이며, 실시간으로 트래픽 분석과 패킷을 기록하는 시스템이다. 호환성이 좋으며 탐지 Rule을 직접 지정할 수 있다. KISA에서 정의한 IDS/IPS는 아래와 같다. 사용자 및 외부 침입자가 컴퓨터 시스템, 네트워크 자원을 권한 없이 불법으로 사용하기 위한 시도 또는 내부 사용자가 권한을 오용하여 권한 이외의 자원을 사용하기 위한 시도를 탐지하여 그 피해를 최소화하는 시스템 방화벽과의 큰 차이점은 방화벽은 일정한 규격에 의해 완전 접근을 차단하는 반면에 IDS는 직접 차단하는 기능을 제공하지않고 탐지하여 경고를 해주는 역할을 한다. IPS 같은 경우는 차단을 하지만 L7까지 볼 수 있다. 기능 패킷 스니퍼 모드 tcpdump 와 같은 네트워크의 TCP/IP 패킷을 읽어 보여줌 패킷 로거 모드 모니터링 한 패킷을 저장하고 로그를 기록하는 기능으로 트래픽 디버깅에 매우 유용하게 사용 Network IDS 모드 침입탐지시스템(IDS)이며, 패킷 분석 및 공격 탐지 기능을 제공 Snort Inline 침입방지시스템(IPS) 이며, 패킷 분석 공격 차단 기능을 제공 ** ** 용도 패킷 Sniffer / Logger 네트워크의...
Why hasn't Facebook migrated away from PHP
아래는 참고한 내용. https://www.quora.com/Why-hasn-t-Facebook-migrated-away-from-PHP https://www.quora.com/Does-Facebook-still-use-PHP
Zabbix vs Nagios
2016 년 12월 12일 기준으로 Zabbix 가 좀 더 우세하네요. 앞으로 계속 더 쭉쭉 치고나가길.. https://www.google.com/trends/explore?date=all&q=zabbix,nagios
Avoid Character Encoding Problems, 엑셀 한글 파일명 깨짐 현상
문제점 : 엑셀 다운로드 시, 한글이 기재된 파일이름이 깨지는 현상. 이 현상은 캐릭터셋이 동일하지 않아 발생하는 경우가 대부분 입니다. 해결방안 : 따라서 PHP 내부 함수 중, iconv 를 통하여 UTF-8 캐릭터셋으로 변경(인코딩)합니다. string iconv ( string $in_charset , string $out_charset , string $str ) $ExName = iconv('UTF-8', 'UTF-8', '파일명'); header('Content-Type: application/vnd.ms-excel;charset=utf-8'); header('Content-Disposition: attachment;filename="' . $ExName. '.xls"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output');
데이터베이스 서버 지연
해당 이슈 전달받았을 때, 간단히 서버 상태 먼저 확인함. 이후, 추려내린 문제점은 network bandwidth , DB 서버 응답 지연이라 생각하였고 실질적으로 확인해보니 DB 서버의 부하가 심하여 발생한 문제점이었음. 인스턴스 타입을 한 단계 업그레이드 한 이후 slow query log 설정 추가하여 실질적으로 transaction time 이 길어지는 문제점을 찾음. 이 후 전반적인 데이터베이스 최적화가 필요하다고 생각하여 작업함. 간단하게 작업한 내용을 누군가에게 도움이 될까 공유함.. 전박적으로 개발 속도를 높이다보니, 데이터베이스 구조에 있어서 너무 아닐하게 확장한 면이 없지않아있는 것 같다는 생각에 처음부터 다시 꼼꼼히 살펴고 수정함. 슬로우 쿼리 로그를 보고 분포도를 확인하고 아래 내용 위주로 수정함. query_cache_size join_buffer_size key_buffer tmp_table_size max_heap_table_size innodb_buffer_pool_size Connection Usage(%) = Threads_connected / max_connections * 100 Connection Usage(%)가 100% 라면 max_connections 를 증가시켜주세요. mysql> show status like ‘%thread%’; mysql> show variables like ‘%connect%’; 위 명령어를 통하여 확인 가능합니다.
Docker 빌드 할 때, 쉘 스크립트 에러
도커 파일 빌드 중에 쉘 스크립트가 동작하는데, 동작에 있어서 service * start 명령어가 실행되지않아 stack overflow 통하여 질문해보니 답변이 왔다. 혹시 나와 동일하게 이 와 같은 RUN path/your-sh.sh 형식으로 진행하였다면 아래와 같이 수정하길 바란다. **ENTRYPOINT [“path/your-sh.sh”] , **ENTRYPOINT는 컨테이너가 시작되었을 때 명령을 실행한다. ENTRYPOINT는 Dockerfile 에서 단 한번만 사용할 수 있다.
scp파일복사 시, 마지막 파일 가져오기
scp파일복사 시, 마지막 파일 가져오기기 스크립트 $ dir="~"$ server="[email protected]"$ scp $server:$dir/$(ssh $server 'ls -t $dir | head -1') .
Connect to docker container from host
docker ps 를 통하여 현재 동작중인 컨테이너 목록을 출력합니다. root@ip-172-31-19-244:/home/docker# docker psCONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS                         NAMES80376906269a        hax0r/nginx:latest   "nginx -g 'daemon off"   2 minutes ago       Up 2 minutes        0.0.0.0:80->80/tcp, 443/tcp   docker_nginx_1067bb179d53a        hax0r/tensorflow:0.1        "/bin/sh -c '/usr/sbi"   2 minutes ago       Up 2 minutes        9000/tcp                      docker_app_1 exec 해당 명령어를 통하여 접속합니다. 외부에서 컨테이너 안의 명령을 실행하는 exec 명령입니다. docker export docker exec -it 80376906269a /bin/bash