늘모자란, 개발

늘모자란, 개발


여러가지 이유가 있을테지만 나는 See console 해도 아무 내용이 없었다.
벙쪄서 며칠보다가... 어이가 없이 문제를 찾아냈는데

JAVA 가 깨져서 그랬다 -_-

자바가 깨져도 놀랍게도 안드로이드는 빌드가 가능했고....
기기에서 돌리니 굳이 필요가 없던것이었다. 그러다 release 는 jre를 이용해서 proguard를 돌리니까 see console에러가 나오고..
cmd에서 java 가 제대로 동작하나부터 확인하고 시작하자... 어이가 없네 진짜
2018/01/17 14:24 2018/01/17 14:24

2017년

Gossip 2018/01/08 17:13
2017년도엔 이렇게 적어놨었다.

2017년

이 순간이 제일 싫다. 앞으로 내가 살아가야할 지침을 내가 정해야 된다는것..?지금 나는 이제 귀속된 몸이다. 뭔가를 자유롭게 하겠다는 생각을 하기엔 좀 섣부른 감이 있다. 내 작은 계획들은,
1. 블로그를 좀 해볼까 한다. 개발 블로그를 지향한다면 당연히 개발을 해야 한다.
2. 일상이 챗바퀴처럼 돌게 냅두지 않겠다. 나는 탈선을 꿈꾼다!
3. 건강.. 건강을 꼭 보살피겠다. 나를 사랑하자.....

흠..

2017년도에 블로깅은 꽤 열심히 했다. TIL (Today I Learn) 위주의 글들도 제법 작성했고 워게임을 풀이하는 바람에 꽤 많은 글을 작성한 해 였다. 방문자가 20명대에서 매일 40명대 찍히는거보면 헛짓거리는 아니었던 모양이다. 그래봐야 40명이긴하지만...

두번째로 일상이 챗바퀴..
자전거를 열심히 탔다. 인천에 경인항에도 갔다오기도 하고 꾸준히 탔으나 그외에는 기존의 나를 탈선시킬정도까지 어마어마한 취미는 없었다. 좋은 사람이 생긴거 정도는 ... 음...

세번째 건강은 꽤 호전이 있었다.
좀 많이 쳐줘서 2 3키로만 감량하면 20키로쯤 감량된거같다. 좀 어거지긴하지만 감량이 된건 된거고, 혈압도 훈련소안에서 제자리를 찾아왔기때문에 이대로 쭉 유지도 하고, 감량도 계속해볼 생각이다. 그래도 근력이 딸리는건 마찬가지라 운동도 필요하고...

2018년

훈련을 다녀오니 이제 다 끝난 느낌이다. 날 가로막는 모든 장애물이 사라진 느낌?
좀 더 적극적으로 공부를 해야겠다. 그리고 보안 공부를 소홀히 하지 않겠고.. 자격증을 취득해보는게 목표다. 자격증을 취득한다는 거도 의미가 있지만, 일단 목표가 있고 공부를 한다는 행위에 의미를 두기로 한다. 한자, 토익, 리눅스 마스터 등이 생각하고 있는 목표인데 잘 모르겠다.
그리고 알고리즘과 자료구조를 다시 공부할 생각이다.

결국 기초가 중요한건데 모래성을 계속 쌓아갈 순 없다. 워게임 대신 온라인 저지를 좀 풀어볼 생각이다.
두루뭉술한 목표가 되었지만 잘 실천한다면 도약을 위한 발판을 준비하는 한 해가 되지 않을까? 아듀 2017.
2018/01/08 17:13 2018/01/08 17:13
네이버 블로그가 아니라 사람들이 얼마나 유입될지 모르겠지만 느낀 바가 있어 작성해봅니다.
같은 분대원들의 의견도 있고, 모두가 제 의견은 아니지만 이 글을 읽고 실천함으로써 발생하는 어떠한 일에 대해서도 책임지지 않습니다.

시작하며


전문연구요원은 대략 6개월에서 1년 6개월 사이에 기초군사교육을 위해 입소하게 됩니다.
입소시기는 병무청에서 자신이 선택할 수 있는데, 1년을 넘기게 되면 신청할 수 없고 통지서가 날아오게 되고 따르거나, 늘리거나(얼마 못늘리는걸로 압니다) 하는 식으로 시간을 조율합니다. 결국 이 훈련은 피해갈 수 없습니다. 좋든 싫든 훈련을 받아야하니 자기가 가고 싶을때 가는게 제일 좋겠죠.

4주라는 시간은 제법 긴 시간입니다. 28일간의 훈련이며 여러 준비물들을 챙기게 됩니다. 그런데 이렇게 챙기는 준비문들이 과연, 모두 쓸모가 있을까요? 그래서 훈련은 제외하고 챙기는 준비물들의 허와실을 좀 따져보고자 글을 쓰게 되었습니다. 그리고 글의 주제와는 맞지 않지만 겨울에 가는건 다시 생각해보세요. 추운건 그냥 참는다치더라도 훈련가는 날 아침 눈이 오면 영내는 제설하지만 훈련길은 다 빙판입니다. 두배로 피곤합니다.. 대신 땀이 흐르지 않는 다는 점에 찝찝한 점은 없다는게 장점입니다.

쓸모없는 것(거의 필수라 여겨지지만)


꼭 챙겨가야된다고 여겨지는 아이템들이 있습니다. 하지만 생각외로 전혀 필요하지 않은 것들도 있었습니다.

1. 라이트펜
라이트펜은 모포를 뒤집어쓰고 일기같은걸 쓸때나 불침번때 사용한다고 반드시 필요한 물건이라 여겨지고 있습니다만 전혀 필요 없습니다. 야간사격때 사로에서 라이트펜이 필요한데 이때 빌려주면 포상을 받을 수 있습니다. 그외에 전문연이 시간이 없어서 일기를 못쓴다거나 하진 않습니다. 일기나 글을 쓸 시간은 정말 충분히 있습니다. 잠을 줄여가며 글을 쓸 목적이라면 전혀 필요 없습니다.

2. 무릎/팔 방지보호대
각개전투, 사격 특징 상 엎드려서 많이 기게 됩니다. 하지만, 전문연에게 완벽한 자세를 요구하지 않습니다. 적당히 안아플것 같은 자세로 기면 됩니다. 물론, 있으면 좋은 물건이나 정말 필수냐고 물으면 아닌 것 같아요. 각개전투 훈련 중 벽 넘던 훈련병 하나가 크게 다친 일도 있었는데, 제가 드리고 싶은 말은 굳이 열심히 할 필요없습니다. 중간정도만 하면 되는 것 같습니다...

3. 물집방지패드
훈련소에서의 교육은 차등간 교육과 열외라는 시스템으로 운영됩니다. 물집같은게 생기게 되면 이동간 차등제에 편승할 수 있게되고, 아주 천천히 걷거나 버스로 이동합니다. 또한 행군도 40분 걷고 20분쉬는 식입니다. 전투화를 조여맨다면 물집이 생길일이.. 있을지 잘 모르겠네요. 부피가 크진 않으니 챙기는것도 나쁘지 않을지도 모르겠습니다

4. 깔창
물집방지패드와 동일

5. 핫팩
외부 훈련을 나갈땐 핫팩을 하나씩 다 줍니다. 붙이는 핫팩은 몰라도 흔들어 사용하는 핫팩은 별로 유용하지 않습니다


정말 중요한 것들

1. 상비약
몇개를 챙겨도 안 부족합니다. 백개쯤 챙겨도 괜찮아요. 정말입니다. 훈련중 감기가 미친듯이 돕니다. 끊이질 않고 주기도 없습니다. 감기에 걸리지 않는건 불가능합니다. 종합감기약, 지사제, 타이레놀 등 떠오르는 약을 많이 챙기세요. 막사내에도 상비약이 있고, 영내에도 의무실이 있지만 모든 약은 군의관 허가하에 먹을 수 있어 막사내의 약을 함부로 복용할 수 없습니다. 또한, 의무실 방문을 희망한다고 아침에 신청하더라도 군의관이 출근해야 의무실에 방문이 가능하고, 20명이 의무실을 신청했다면 20명이 동시에 이동하고, 20명이 동시에 돌아와야 합니다. 즉, 상당히 번거롭습니다.

2. 안대/귀마개
잠에 민감하다면 꼭 챙기세요. 보통 3,4분대는 큰 생활관을 쓰게 되는데 칸막이같은게 없어 코골이 하모니를 들을 수 있습니다.

3. 김서림방지 안경닦이
1번에서도 얘기했지만 훈련소내엔 항상 감기가 돌고 있습니다. 때문에 훈련소내에서도 감기와 폐렴에 아주 민감하게 반응하며, 거의 매일 체온을 잽니다. 또한 방지책으로 마스크를 사용하는걸 강제하는데 잘때, 먹을때, 씻을때 빼곤 무조건 착용을 요구합니다. 때문에 안경을 낀 사람들의 안경알은 대개 뿌옇게 될 수 밖에 없습니다. 필수까진 아니지만 저는 진짜 라식해야겠다고 마음을 먹을정도로 귀찮습니다.  1,2번은 몰라도 3번은 정말... 필요하다고 생각합니다.
https://www.coupang.com/np/search?q=%EA%B9%80%EC%84%9C%EB%A6%BC%EB%B0%A9%EC%A7%80+%EC%95%88%EA%B2%BD%EB%8B%A6%EC%9D%B4&channel=relate

4. 주소 및 전화번호
인터넷 편지에 답장할 수 있습니다. 도착까지 약 10일정도 (-_-) 걸리지만 답변할 수 있다는 점에 의미가 있겠죠?
전화도 2회에서 많게는 3회까지 할 수 있습니다. 분대장 훈련병등의 직책을 맡게 되면 더 많이 할 수 있으니 연락처는 반드시 챙깁시다

5. 시계
불침번시 시간을 기록하는 일이 잦습니다. 없어도 옆사람에게 물어보거나 생활관의 시간을 보면되지만 귀찮고 아주 어두워 식별이 어렵겠죠? 불빛 나오는걸로 하나 차고 갑시다. 앞에 많이 팔아요..

그외 필요한 것


1. 화장품
보급품은 치약, 칫솔, 비누를 받게 됩니다. 또한 추가 지급은 거의 없다보면 됩니다. 클렌징 폼, 바디워시, 스킨, 로션 등 하나도 거부당하지 않으니 마음껏 챙기셔도 좋습니다.

2. 물티슈
처음에는 변기가 막힌다고 싹 걷는데 내지 않으면 사용할 수 있습니다. (글 하단에 따로 작성). 또한 총기를 닦을 일이 있는데 물티슈만한게 없습니다. 분대원들이 모두 챙기는 경우는 없기 때문에 큰거 몇개 챙겨가면 200% 활용할 수 있습니다

3. 구두약
훈련소에서는 구두약이 많이 부족합니다. 나올때까지 기다리고 해야하는데 내 전투화를 깔끔하게 유지하고 싶으신 분이라면 하나 챙겨도 좋을 것 같습니다.

4. 간식
초코파이같은 간식은 부식에서도 가끔나오고, 종교행사에서 많이 얻을 수 있습니다. 오히려 마이쮸 같이 간단히 먹을 수 있는 간식이 더 필요한 것 같습니다.

5. 베개
훈련소의 베개는 빨대같은게 들어가 있는 베개입니다. 그리고 좀 높기도 하고요. 내용물을 빼서 높낮이를 조절하기도 하지만 딱딱하고 불편합니다. 솔직히 베개를 들고가는건 과하다 생각하지만 안맞을 수 있으니 일단 기재합니다...

6. 수건, 팬티
지급되는 수건은 2장이고, 팬티는 3장입니다. 팬티는 입고 간거까지 치면 4갠데 전부 사각입니다. 95사이즈 정도는 삼각이니까 자기가 삼각을 입어야겠다 싶으면 따로 챙기길 권합니다. 그리고 수건은 빨아서 쓰려면 좀 부족합니다. 두장정도 더 있으면 여유 있겠죠

7. 가십거리 일체
시간이 정말 어마어마하게 안갑니다. 주말간에는 훈련이 없기때문에 잠만 자야될 때도 있습니다. 잠자고 일어나는건 밥먹으러간다고 깨우고... 사육이 따로 없습니다. 책, 스도쿠, 퍼즐 등 닥치는데로 놀거리를 준비해가세요. 진짜 차라리 훈련을 시켜달라고 하는 사람도 있습니다

그외


분대장들은 훈련병의 가방안을 수색할 수 없습니다. 관물대에 올려진 가방은 그러니까 도라에몽의 창고같은 곳입니다. 처음에 이거 써도 되냐 저거 써도 되냐 검사받을 필요 없이 가방에 있으면 계속 쓸 수 있습니다. 이 말은 무엇이냐, 말 그대로 풀면 스마트워치나 휴대폰을 내지 않아도 상관없다는 말입니다. 아이코스같이 냄새가 나지도 않는 담배도 화장실에서 피면 걸리지도 않겠죠... 하지만 걸리면 예외없이 퇴영이고 3개월 뒤에 재 입소 해야합니다. 권하진 않고요.. 책임도 지지 않습니다. 물티슈같은 꼭 필요한 물건등을 가방에 넣어놨다가 나중에 관물대로 옮겨 쓰는 식으로 활용하면 좋을 것 같습니다.

그리고, 편지 보내줄 사람을 구해보세요. 바깥 세상의 이야기를 들려줄 사람이 있으면 좋죠. 굳이 연인이 아니더라도 뉴스라던지 안부라던지.. 남들은 다 받는데 나는 못받고 있으면 괜히 기분이 별롭니다. 저는 행운의 편지를 보내준 친구가 있어 그날 밤은 재밌게 보냈던 것 같아요.

그리고 커피/포카리 분말은 ... 아주 유용합니다. 음료가 많이 제한되어있기 때문에 먹고 싶을때 먹는다는게 중요합니다. 인스턴트 커피같은게 많다면 신이 될 수도 있겠죠.

맺으며


입영통지서에는 피복도 주고 필요한 일체의 물건을 다 준다고 적혀있어서 저는 정말 단 하나도 안들고 입영했습니다.
헌데 그건 너무 멍청한짓인거 같고, 적당한 준비는 좋은 것 같습니다. 어마어마하게 캐리어를 끌고온 사람도 있었는데 그건 별로인것 같고요, 이발도 처음에 안걸리면 중간에 자르거나 하진 않으니 너무 짧게 자르지 않으셔도 좋습니다.

훈련의 강도가 그리 높진 않으나 이렇게 장기적인 무료한 시간을 보내게 되는 경험은 아마 다신 없을 겁니다. 한번 잘 생각해보고, 건강히 다녀오세요.
2018/01/06 23:01 2018/01/06 23:01
서버에서 도커를 사용해 DB 컨테이너를 운영하고 있는데, 업데이트를 진행 후 컨테이너에 들어가 mysql 을 작동하니 다음과 같은 에러를 내며 동작하지 않는다

mysqld: error while loading shared libraries: libaio.so.1: cannot stat shared object: Permission denied


읽기쓰기 권한을 확인해봐도 제대로 설정되있고 문제가 될 부분이 없어서 한참을 헤매는데 docker의 privileged 를 끄면 된다고 한다. 혹은 devicemapper 를 설정하거나..
그런데 이건 이미지에 커밋 후 컨테이너를 다시 만들고 인자를 줘서 다시 실행해야하는 매우 번거로운 작업을 해야해서 고민에 빠져있었다.

참고:
https://github.com/docker-library/mysql/issues/133
https://stackoverflow.com/questions/32353055/how-to-start-a-stopped-docker-container-with-a-different-command
http://ongamedev.tistory.com/entry/%EC%8B%A4%ED%96%89%EC%A4%91%EC%9D%B8-%EB%8F%84%EC%BB%A4-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%97%90-%EC%B6%94%EA%B0%80-%ED%8F%AC%ED%8A%B8-%EC%98%A4%ED%94%88%ED%95%98%EA%B8%B0


그런데 여러 글들을 읽다보니 apparmor 라는게 자주 나온다. 이름만 봐도 뭔가 보호 하는 느낌이라 찾아보게 되었다.
결론부터 말하자면 도커 설정은 건드릴필요없다.

호스트에 apparmor 가 설정되어 있을건데 다음 링크를 참고해 disable 하면 설정변경없이 그냥 실행된다.........................
https://support.plesk.com/hc/en-us/articles/213909965-How-to-disable-AppArmor
2018/01/06 11:30 2018/01/06 11:30
오늘 mysqldump 한 sql 파일들을 보다가 기존 백업에 비해 용량이 1/3도 안되게 남아있는걸 봤다.
디비가 개박살이 났나. 왜이러나 하면서 근심과 걱정에 빠져있었는데 아무리봐도 멀쩡했다.

알고보니까, myisam 을 쓰는 한 테이블이 repair가 필요하다고 리턴했고, mysqldump는 에러가 발생하니 그대로 작업을 멈춘것이었다.
황당함 그 자체였는데 repair table을 해주고 나니 제대로 덤프가 되었다.

음..
mysqldump에는 -f옵션이 있어서 에러가 나던말던 진행하라는것도 있는데 고려해보던지 해야겠다.

*수정
이를 해결하기 위해서 mysqlcheck 를 넣기로 했다.

mysqlcheck -u -password= --auto-repair --check --all-databases


이런느낌이다.
https://stackoverflow.com/questions/4582832/repair-all-tables-in-one-go
2017/11/29 17:50 2017/11/29 17:50
이걸 어떻게 설명해야할지 모르겠는데 나는 shell에서 사용하는건 다 똑같은 bash 인줄 알았다.

.sh를 실행할때 보통 이렇게 실행한다고 가정해보자. 권한을 적당히 주고 다음과 같이 실행하는게 일반적이다.

./aaaaa.sh


실행에 있어서는 별 문제가 없다.
그런데 얼마전에 쉘 스크립트를 짜는데, 

mysql query 결과를 command line 으로 실행해서 뽑고, 거기서 특정 문구를 regex로 처리해 변수로 쓰려고 시도 했다. 다음과 같은 모양이다
쉘 스크립트를 잘 몰라서 매끄럽진 않으니 참고만;

myvar=$(mysql -u ... -p ... -e "QUERY")
a=$(print %q " $myvar)
myvar2=$(echo $a | sed -rn 'REGEX....')
echo $myvar2


뭐 이런느낌으로 작성했다. 
그런데 아무리 돌려도 나오질 않는다. 정말 짜증나 미치려고 하고 있던 와중에 shell에서 쓰는 regex는 posix라고 부르는 문법을 사용한다.
단순 execute 가 아니라... bash 로 따로 실행을 해야 돌아간다고 한다.

요컨데

/bin/bash aaaaa.sh


로 실행하면 결과값이 다르다. 확장 익스텐션이랑 같이 실행되는 느낌이라고 할까..
간단한 작업들만 실행하게 하는 용도로 사용하다보니 쉘 스크립트도 이런게 있는줄은 처음 알았다. 어쨌든 bash로 실행하면 말끔하다.
2017/11/24 17:24 2017/11/24 17:24
mysqldump를 뜨다보면 자연스럽게 swap이 생기는것 같다.
이렇게 생긴걸 굳이 남겨둘 필요가 없어서 swapoff -a 와 swapon -a 를 통해 풀곤 했는데 자동화하려고 crontab에 추가했는데 돌아가질 않는다.

swapoff -a && swapon -a


.sh 에 작성해서 돌려봐도 안된다. 왤까하다 구글링으로 찾아보니 full path를 작성해줘야 하는 것 같다.

/sbin/swapoff -a && /sbin/swapon -a


잘된다.

2017/11/19 12:48 2017/11/19 12:48
제목이 점점 산으로 가는 기분인데..

Android 에 Intent 가 있다면 iOS에는 UIDocumentInteractionController가 있다.
annotation을 태워서 같이 보내거나 하는 등의 intent와 여러모로 비슷한 옵션인데, 기본적인 동작은 AirDrop을 호출해 파일을 다른 앱의 번들안에 저장한 후 파일을 오픈하게 하는 구조이다.

그런데..
10.3에서 돌아가는 다음 소스가 11에선 돌아가지 않는다.

 NSString* filepath = [[NSBundle mainBundle] pathForResource:@"Filename" ofType:@"pptx"]; 
NSURL *url = [NSURL fileURLWithPath:filepath]; 
self.documentController = [UIDocumentInteractionController interactionControllerWithURL:url]; 


아무리 로그를 봐도 그냥 파일 복사가 실패했다는 말만 나온다. 영문도 모르겠다. 더 열받는건 iOS의 기본앱(메모, 페이지)로는 또 열린다는 것이다. 그러다가 비슷한 처지의 글들을 보게 되었는데 결론은 그냥 iOS의 보안정책이 변했다.

AirDrop이란건 그냥 뻔한건데,
iOS에서 파일을 받을 경우 앱내에 있는 번들 스페이스에 저장하게 된다. 이 번들안에 저장된 URL을 서드파티앱에 넘기고, url을 받은 서드파티앱이 해당 url로 접근 후 파일을 복사해서 자신의 번들안에 저장하고 여는 구조라고 할 수 있는데, iOS 10까지는 이런 일련의 과정들이 허용되었으나 이젠 애플 기본앱이 아니면 접근 할 수 없다.

고로 접근할 수 있는 임시 디렉토리를 생성하고, URL을 다르게 전달해야만 앱이 오픈된다

 NSURL *tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory() isDirectory:YES];        // get /tmp folder path 
NSURL *fileURL = [[tmpDirURL URLByAppendingPathComponent:@"Filename"] URLByAppendingPathExtension:@"pptx"]; 
self.documentController = [UIDocumentInteractionController interactionControllerWithURL:fileURL];
 


정말 봐도봐도 거지같단 생각밖에 안든다. 여튼 이러면 열린다..
2017/11/13 15:14 2017/11/13 15:14
사건 발생
지난 10월 25일 0시경, 사이트가 이상하다는 말을 듣게 되었습니다.
확인해보니 MySQL 서버가 말썽, 근데 좀 이상합니다. 잘될땐 잘되는데 새로고침할때마다 DB가 에러를 throw하고 있는데 왜지..?
가끔은 no such file or directory도 뜨고, too many connections도 뜨고.. 그리고 gone a way도 뜨는 등 난리도 아닙니다. 도대체 무슨일이 일어난걸까요.

서버 다운
처음 의심했던것은 MySQL 을 5.7.20으로 업그레이드 했기 때문 아닌가였습니다. 그런데 업그레이드는 아침에 이뤄졌고, 오류가 난건 거의 15시간이 지난 이후.. 연관이 없어보입니다. 아직도 업그레이드 했기때문에 터진게 아닌가 하는 강력한 의심을 가지고 있지만, 어쨌든 사건에 집중해봅시다.

제일 먼저 사이트를 활성화 시켜야했습니다. 뭐 할때마다 에러가 나는데 되는것도 아니고 안되는것도 아닌 기괴한 상태가 지속되고 있었습니다. 쉘에서 MySQL에 붙으려고 해도 too many connections로 붙을 수가 없을정도로 이미 점거 당한 상태. 보나마나 process에 행이 걸려서 뒤의 요청을 처리 못하고 있는 것이겠지요. 도저히 확인을 할 수 없을정도로 밀려들어오니 일단 웹서버를 내렸습니다. (어차피 서비스가 정상작동하고 있지도 않았습니다)

이제 살펴보자
서버를 내린 이상 시간끌리지 않고 최대한 빠르게 문제를 확인해야 했는데 에러로그를 보니 메모리 관련해서 에러가 찍혀 있었습니다. key buffer size를 조절하라.. 뭐 memory trap 이라고 적힌거도 있고, because you hit a bug 이런식으로도 쓰여있는데 아니... 그래서 뭐가 문제라는건데... 정작 유추할 수 있는 에러로그는 없고 미칠 노릇입니다. 친구말로는 메타데이터 파일이나, 권한 문제가 일어났을 수 있다고 하던데 (바로 며칠전에 비슷한 에러를 겪음) 문제도 없었습니다. 

일단 뭐가 깨져도 깨진건 확실합니다. MySQL에서는 innodb 엔진을 쓰는 경우 1~6 레벨(?)까지 강제 복구 옵션을 지원하고 있습니다. recovery 레벨을 설정하면 read-only가 되는데 이때 살릴 수 있는거라도 살리려면 mysqldump해주는게 좋습니다. 저도 데이터를 일단 백업해야겠다는 생각에 mysqldump로 DB를 하나씩 덤프뜨긴했는데 특정 DB에 접근하니 바로 dump가 중지됩니다. select를 못한다는거죠. 어떤 DB가 깨졌구나하고 대강 범위를 좁힐 수 있었습니다.

2017-10-25T01:35:15.821493+09:00 4 [ERROR] InnoDB: Failed to find tablespace for table [ ] in the cache. Attempting to load the tablespace with space id 23958


왜 범위를 좁혔냐 하면, 위 로그는 전혀 상관없는 DB에서 났기때문입니다. 아마 하나가 깨지니 뒤에 따라오는 테이블을 모두 읽지 못하는 현상이 아닌가 싶은데.. 범위를 줄여나가는게 중요합니다.

그다음에는 .ibd 및 .frm을 모두 cp한후에, 문제가 일어났을것이라 생각하는 db의 내용을 모두 지우고, MySQL을 재시작해 싹 밀고, 다시 붙여넣어봤습니다. 해당 DB가 없으니 기가막히게 잘 굴러갑니다만 다시 데이터를 넣자마자 바로 db가 재시작되어버립니다. 여기서 ibdata가 박살이 났구나하고 감을 잡을 수 있었습니다.
보통은 이럴때 mysqlfrm을 사용해 테이블 구조를 새로 만들고, 데이터를 다시 밀어넣는식으로 복구합니다만, 저 같은 경우는 테이블 수도 많고, 일단 db에 select를 하면 db가 재시작되어버리기때문에 별 의미가 없다 생각했습니다. (사이사이 frm및 ibd 데이터를 하나씩 넣어서 산 테이블을 확보해보려했으나 거의 소용없는 짓이었습니다). 메모리 에러 일 수 있을것이라 생각해 서버 재부팅도 두번이나 했으나.. .안되네요.

결국 여기서 손을 들었습니다. ibd와 frm이 있지만 애초에 붙어지질 않으니 복구할 수가 없구나. 마지막 백업이 언제지? 아침 6시입니다. 그리고 새벽까지 삽질하고 있었으니 그 동안에 누적되지 못한 로그들도 많으니 문제가 된 DB는 최대 24시간정도의 데이터 유실이 발생합니다. 사이트는 다시 돌지만, 뼈아픈 경험입니다. 24시간마다 백업이 돌고 있으나, 유실될 양을 생각해보면 터무니 없이 부족합니다. 어떻게 해야할까요?

무중단 백업은 어떻게?
4년전 쯤에서는 MySQL의 replication을 활용하고 있었습니다. 이때는 DB쿼리가 최적화 되어있지 않아 쿼리한개가 DB를 잡아먹던 시절이기도 하고, VPS에서 사용했기때문에 서버 사양이 워낙 안좋아 시도때도 없이 DB가 죽을때가 있었습니다. 정확히 다시 말하면, 백업이 아니라 cpu 와 메모리 사용량을 분산시키기 위한 cluster개념으로 replication을 사용했습니다.

그러나 세월이 꽤 흘렀죠? 문제가 된 DB 쿼리도 다 수정되었고, 서버 스펙은 그때와 말도 안되게 뻥튀기되었습니다. 서버 두대를 돌릴 이유가 없으니 자연스럽게 replication 서버를 내렸었죠. 이 얘길 왜 하느냐? 지금부터 replication을 사용할 것이기 때문입니다.

왜? 기존에 사용하고 있는 mysqldump는 모든 db를 full select 합니다. 또한 쿼리 캐시 옵션을 비활성화하기때문에 DB에 심각한 부하가 발생하며, 사이트 전체의 성능저하도 일어납니다. 따라서 백업텀을 줄이면 안되겠느냐 같은 말은 사용량이 많은 시간대엔 절대 먹히지 않는 말입니다. 고로, 부하가 발생하지 않으면서도, 실시간 백업을 할 수 있는 방법 = 데이터가 insert되면 다른 데이터베이스에 저장하는 방법은 뭐가 있죠? replication입니다. 그래서 docker를 이용해 가상 서버를 하나 만드는걸로 진행합니다.

다음과 같이 변경했습니다
모든 과정이 매끄럽게 진행되진 않았지만, 주말동안 작업해 적용된 내용은,
Replication 서버를 돌려서 한쪽 DB가 맛이 가더라도 관리자 확인하에 즉시 DB를 변경할 수 있게 변경했습니다.
서비스 중일때 발생하는 dump 백업의 텀을 3시간으로 줄였습니다.(기존 24시간)
마지막으로, 서버 이미지를 하루마다 저장해 허브에 푸시합니다. DB 두개가 한번에 박살나도, 최대 10분내에 복구가 가능합니다.(순수하게 다운로드 시간)

얻은 결론
서버 용량이 풍족하진 않습니다. 이번 구성으로 인해 꽤 많은 용량을 차지하게 되었습니다만... 서버 용량이야 좀 더 자주 확인하면 되는 것이고, 밤을 안새게 해주진 않습니다. 또한 사용자 여러분들의 사이트 사용에도 차질이 없도록 만반의 준비를 했어야 했는데, 진작해야할 일을 이제야 한 것 같습니다. 좋은 교훈을 얻었다 생각하고, 서버 안정화에 더 힘쓰겠습니다
2017/10/26 10:02 2017/10/26 10:02

VPN 사용..

Gossip 2017/10/13 17:24
원룸에 hcn 이라는 현대 케이블 네트워크.. 즉 케이블 인터넷이 들어와있다.
8월부터 스멀스멀 느려지더니 9월 10월을 거쳐 속도가 100kbps 가 나오고 있다. 뭐 하나 받으려고 하면 2시간 넘게 찍히는건 일상이라 너무 열받아서 kt 인터넷으로 바꾸려고 하였으나...

속도 테스트를 해보고 화가 치미는 상황이라면 VPN을 꼭 권해본다

1. 건물에 kt쓰는 사람없어서 전봇대에서 끌어와야함
2. 건물에 구멍남
3. 외관 드러워짐

의 이유에 의해서 kt인터넷을 쓸수가 없었다. 결국 VPN을 사용해야만 하는 상황..
나는 아이피팩토리 란데서 결제했다. (IE로 접속하세요. 액티브X있음)
esvpn 이란데도 있는데 만오천원이고 일단 결제 액티브엑스가 안깔리길래 그냥 싼걸루..

30일에 13200원이다.
그냥 설치하고 접속하니 4메가 쯤 나오는데 속도가 몇배 상승한건지... 
HCN에 문의하는 사람 많다는데 공사중이라는 답변을 많이 한다고 하지만 일단 당장 불편하니까 한번 고려들 해보시라..
트윗덱이랑 나무위키 바로 로드 되는거보고 눈물 흘릴뻔했네 

2017/10/13 17:24 2017/10/13 17:24