누구를 위한 시큐리티 정책(security policy)인가…

난 보안 관련으로는 그렇게 내가 스트레스를 받을 것이라고 생각해 본 적이…. 모르겠다. 근데 일단 보안 관련해서는 기술적인 문제로는 머리 싸메고 그럴 거라고는 생각해본 적은 없다. 보안 관련해서는 오히려 사람에 의해서 생기는 사고가 너무 많아서 그런가, 기술적인 걸로 뭐 내가 보안 관련된 업데이트나 기본적인 것들만 잘 갖춰놔도 스크립트 키즈들한테 당할 거라고는 생각하지도 않고, 포너블 하면 멋있어 하는 것도 현실적으로 실무에서는 그런 것보단 그냥 계속 기능 돌려보면서 취약점인지 확인하고, 의심되면 리버싱 하기 바쁜 일상에서 그렇게 뭐 쉽게 뚫리려나… 하는 생각도 좀 있다.

정말 뚫린다면 레인보우 테이블 돌려서 비밀번호 뚫리는 게 더 빠르겠다만….

그래서 좀 생각을 깊게 안하다가 요즘 일로 인해서 여러모로 좀 생각을 깊게 하게 되었는데…

다른 게 아니라 바로 저놈의 security policy의 남발이다.

말로는 멋있는데, 그냥 이거 안됨. 저거 안됨. 이라고 그냥 사람이 명시해놓은 게 전부다. 거기에 시스템이 더해지면 무슨무슨 금지 프로그램 같은 거 막 깔리고, 디렉터리 서비스로 인해서 어떤 계정 그룹에서는 이런 작업 금지, 어떤 계정 그룹에서는 이런 거 금지 하는 걸 걸어버리는 그런 것까지 확장되는데…

문제는 이게 신규 도입 시스템하고 충돌날 경우에 발생한다. 신규 도입 솔루션에서는 하지 말라는 걸 통해서 문제 해결이 되면서 생산성이 향상된다는 것에는 프로젝트 구성과 설계를 해서 명세까지 내놓았다. 난 그걸 확인해달라고 고객한테 요청도 했다. 그러나…

“시큐리티 폴리시 때문에 힘들 거 같습니다.”

…좀 뒷목 잡고 싶다.

님들 기술 개선 하고 싶다면서요. 네?

신규 솔루션을 새로운 작업 도구라고 정의하면 솔직히 문제 될 건 없다. 작업을 위해서 이런 이런 도구들이 필요하다라는 형태라면, 그 도구에 새로운 도구가 더 있을 뿐이다. 작업을 더 진행하기 위해서 말이지.

근데 그걸 거부한다. 그놈의 시큐리티 폴리시 때문에… 특히 일본 회사들이 이게 좀 심한 거 같다.

이전 회사에서도 뭔 허접이 보안 땜에 개발 툴 성능 깎아먹는 프로그램 중지 시켰다고 위에 사람 부르고 난리치고 그러던데…. 그때를 다시 보는 듯 하다. 실제로 보안 문제 없는거 검증하라고 프로그램하고 소스코드까지 들이 밀면 검증도 못하는 것들이 말이다.

후…. 그럴꺼면 진짜 시큐리티 폴리시를 대체 누구를 위해서 그렇게 만들어서 사람들 죄여 메냐…

진짜 백그라운드 지식 있으면 관련된 거 배우는 거 금방이다.

이번에도 좀 경험에 의한 이야기인데….

지금 내가 있는 팀은 컨설팅도 하면서 우리가 프로토타입 같은 것들도 개발하거나 해서 이렇게 할 수 있습니다 하고 시연용 프로그램도 만들고,

사내에 직접 개발을 하는 부서가 있어도 그곳에서 만든 걸 이용해서 여러모로 응용도 하고 하는 그런 조직이다.

즉, 컨설팅이랑 개발이 다 되지 않으면 살아남을 수 없다.

근데 내가 여기서 살아남을 수 있을까를 생각해봤을 때 좀 힘들다 싶은게…. 웹 경험이 옛날 옛적 php가 전부다. ㅠㅠ

이거 괜찮은 거 맞냐?

그래도 웹을 모르는 것도 아니고, 임베디드 하다보면 어디서나 쓸 수 있는 웹 서버를 이용할 수 없는 경우가 많아서 웹 서버를 직접 개발해서 넣어야 하던 것도 있다보니 웹을 모르는 건 아니다. (은근슬쩍 이상한 이야기가 섞인 거 같으면, 기분탓이다.)

이런 상황에서 회사에서 예전에 개발했던 데모 소프트웨어의 유지보수를 하면서 요즘 많이 쓰는 파이썬 백앤드와 프론트앤드인 vue.js 코드를 한번 보는데… 왠지 튜토리얼로 개념만 잡으면 금방 할 수 있을 거 같은 구성이었다.

그리고는 30분만에 대충 이해하고는 이거겠지 하고 고쳤는데 정답이었고…

이거겠지가 예전부터 알고, 들어왔고 했던 그런 내용들이었다.

짜맞출 수 있었던 거다.

이래서 알아야 한다고 하는 건가를 다시 한 번 느낍니다. ㅠㅠ

이런 저런 구조니 뭐니 해도, 코드로는 금방 구현되는 게 요즘 개발인 거 같군요.

제가 요즘 전직을 해서 개발에 손을 좀 뗀 상황입니다.

그러다가 만들고 싶은 거 있어서 여러모로 찾아보고 있는데… 요즘 웹이나 앱 개발의 경우에는 어느정도의 언어 기술 있으면 그 뒤는 그냥 프레임워크 떡칠이라는 건 알고는 있지만, 실제로 보니 여러모로 대단하네요.

구조적으로는 여러모로 도와주는 것들이 많은 건 알겠습니다. 설명 잘 되어있고, 많은 분들이 신경써서 프레임워크 만들어서 공유하고 업데이트 참여하고 하는 거 보면 대단해요.

근데 그냥 쓰는 사람 입장에서는 여러모로 코드로는 금방 구현되니깐 이거입니다. 하고 간단하게 적어서 공유하고 하는 걸로도 끝나는… 좀 영양가 없는 그런 형태의 정보 공유도 많이 일어나고 있는 것 또한 사실이군요.

뭐 근데 접근성은 확실히 좋군요. 웹이랑 거리 엄청 멀던 저도 금방 할 수 있는 거 보면….

게다가 이렇게 금방 쓰고 자주 써주고 하는 기술들이 계속 남아나겠죠. 지금같이 이렇게 라이브러리들 난입하는 환경에서는 특히 더더욱 그럴 거 같군요. 그냥 이름만 다른 듯한 라이브러리들도 너무 많다고도 느끼고….

간만에 잡소리긴 한데, 진짜 개발 난이도는 많이 내려오는 거 같습니다.

뭐, 그래도 정작 중요한 것은 바뀌지 않는 건 여전하지만요.

사람 구하는 근본적인 걸 해결해야지, 이딴 서비스에 눈돌리면 안됩니다. 진지합니다.

이건 좀 오래전에 올리고 싶었는데 바빠서 못올렸던 글입니다.

솔직히 진짜 그냥 빡쳤습니다. 뭐 이딴 개 XXX 같은…. 하….

결론부터 말하면, 파견의 또 다른 이름입니다. 지금 있는 일본이라는 나라의 파견이랑 다를 거 단 하나도 없는…. 아니라고 댓글로 반박하면 댓글 승인하고 반박 듣겠습니다.

그리고 파견이 제대로 제도화로 자리잡지도 않은 한국에서 과연 저런 서비스가 제대로 돌 거라고는 생각은 안되네요.

그래서 제 개인적인 의견으로는 진짜 욕나오는 기사였습니다.

개발자가 왜 부족한지, 경력직 채용이 왜 어려운지, 신입 가르치고 하는 게 왜 어려운지에 대한 근본적인 문제부터 해결할 생각 없이 저런 서비스 이용하면서 대체 뭘 하고 있다는 거냐고 묻고싶은 회사들 진짜 많습니다.

분명 개발자들이 업무 진행하는 데 있어서 방해되는 요소들이 있을 껍니다. 그런 걸 해결해주지 못하면 개발자는 개발 일이던 개발 이외의 일이던 모든 일에 치여서 그냥 지쳐서 이직 자리 알아보게 됩니다. 아예 개발자 그만두고 다른 직업 알아볼 수도 있습니다. 그거 자체가 엄청난 인력 낭비입니다.

근데 이런 일에 대해서 근본적인 내용이 뭔가에 대해서 고민해야 합니다. 그런 개발자들이 뭐 개발 관련되어서 기능이 모자란 사람만 있는 것도 아니고, 그렇다고 나쁜 맘 먹고 그냥 놀고 먹으려고 하는 것도 아니고, 그냥 머리 자체가 나쁜 사람이 있어서 그런 것도 아닙니다. 그럼 개발 이외의 조직들이 이러고 싶어서 그럴까요? 아닐껄요? 간혹 진짜 그런 사람이 있다고 해도 그런 사람들로만 채워진 회사가 있을까요? 애당초 회사 조직 자체가 it 개발 회사 조직에 맞는 형태가 아니라면요? 서비스 방향 자체가 그냥 it가 필요 없어도 되는 거라면요? 솔루션 사서 해결해도 되는 걸 멋대로 개발한다고 내부 개발만 하다가 회사 내부에서 불만만 듣는다면요?

정말 근본적인 문제에서부터 생각해야 합니다. 단순히 사람 더 늘려서 자리 채운다는 생각으로 저런 서비스 이용한다고 생각하면… 솔직히 그런 회사가 필요로 하는 it 서비스 개발이라는 건 뻔한 일이라고 생각되네요. it가 없어도 그쪽의 사업은 할 수는 있을 것입니다.

그런 생각이 기본으로 되는 상황에서 저런 내용 보면… 절대 좋은 소리 안나오네요 전.

그게 지금 그냥 사람만 갈아넣어서 되는 그런 걸 이야기하는 거라고 어떤 생각도 안드네요. 이미지가 좋게 보이질 않아요.

전직하고 이사를 하고 하느라 정신이 없네요…ㅠㅠ

좀 살아있는 근황 좀 적으면…

일본 내에서 전직을 했습니다.

그리고 그거 땜에 지금 이사 관련해서 이런 저런 거 하다보니 정신이 없습니다.

….그래서 블로그 못쓰고 있습니다.

자료는 엄청 만들었는데도 말이죠..ㅠㅠ

ㅠㅠㅠㅠㅠ

최대한 많이 공개할께요. 저도 지금 쓰고 싶은 거 많아요. ㅠㅠ

[octave] 2. octave 설치 방법들

아니, 설치방법 그냥 홈페이지에 있잖아? 라고 하려고 해도….. 그렇게 설명하기 힘든게 옥타브 환경 같습니다. 이유를 좀 설명할께요. 우선 다운로드 사이트를 확인합시다.

처음부터 소스 빌드과정과 리눅스, BSD라니… 여기서 뉴비들은 덜덜거릴 수 있습니다.

맥하고 윈도우는 밑에 있습니다. 근데 맥은 왠지 모르게 wiki를 알려주죠?

윈도우를 제외하고는 거의 코드 빌드를 이용하거나, 옥타브에서 제공하는 ftp에서 제공하는 바이너리 빌드된 녀석을 make로 만들어서 이용하는 것이 가장 최신의 버전을 이용할 수 있습니다. 저는 리눅스 민트와 윈도우를 이용하고 있습니다만, 리눅스 민트의 경우에 그냥 뭣모르고 sudo apt install octave를 입력해서 하면 바로 설치는 깔끔하게 되는데, 버전이 6버전이더군요. 패키지 관리자에 아무래도 6버전대를 제공하는 듯 합니다.

그래도 기왕 쓰는데 최신 버전 쓰는 게 낫지 않나…

그래서 일단 제일 쉬운 윈도우는 exe 인스톨러 받아서 설치하면 됩니다. 처음 쓰시는 분들에게는 윈도우 과정을 추천합니다. 근데 윈도우 64비트는 버전이 둘 있는데, 64bit linear alg for large data라고 있는 것이 바로 메모리가 64G 이상의 고용량 메모리를 이용한 연산이 되는 버전입니다. 일반적으로는 그냥 64비트용을 이용하면 충분히 가능합니다.

윈도우에서 GUI로 실행한 환경

윈도우 설치법 및 리눅스 설치법은 별도로 기회되면 작성해보겠습니다.

[octave] 1. octave 시작하기

octave 관련된 간단한 글을 쓰고 싶었는데, 이 기회에 시작합니다.

회사 다니면서도, 아는 중학생과 고등학생 몇명에게 옥타브를 가르쳐 주면서 그냥 간단한 것만 보여주면서 수치해석에 대한 이야기를 간단하게 원격으로 강의를 했었습니다. 근데 애들이 생각 이상으로 즐겁게 시도해보기도 하는 걸 보면서, 쉽게 접근 가능한 녀석으로 가르쳐 주는 것도 좋을 거 같아보이더군요.

뭐, 대학 오면 매트랩(matlab)도 써보고 하면 그쪽에서 충분히 익히겠지만, 전 이쪽이 좀 더 좋아보입니다. 그 이유를 좀 정리하면…

  1. GPL 라이센스의 오픈소스이다.
    이건 엄청 중요하다고 생각합니다. 접근성이 엄청 좋은 것이니깐요. 쉽게 설치해서 쓸 수 있는 것은 시작하기 쉽다는 것이기도 하니깐요.
  2. 여러 운영체제에서 이용 가능하다.
    이게 윈도우, 맥, 리눅스 뿐 아니라 안드로이드에서까지도 사용이 가능합니다. ios도 되었으면 좋겠는데….ㅠㅠ
  3. MATLAB 문법과 거의 비슷하게 이용할 수 있다.
    일부 차이점은 존재하지만, 그것들을 제외하면 어느정도 matlab 코드를 이해하면서 사용할 수 있습니다. 필요하면 그대로 짜서 만들면 그만이니깐요.
  4. 다양한 패키지를 무료로 내려받아서 적용할 수 있다.
    이거 은근 사용하는 사람들이 많아서 좀 많은 패키지들이 존재합니다. 이들을 무료로 받아서 이용할 수 있고, 그를 통한 지식을 습득할 수도 있습니다.

그러나, 이렇게 적어도 좀 단점이랄 것들도 당연히 존재하는데, 단점에 대해서 이야기하면 다음과 같습니다.

  1. 느리다.
    뭐 아주 못쓸 정도로 느린 건 아닌데…. 이걸로 실무에서 쓴다고 하면 그냥 돈주고 매트랩 쓰는 곳들도 많을 것입니다. 근데 이건 개인적으로는, 리눅스 환경이나 윈도우 환경에서 메모리 엄청 때려박는 환경은 그나마 나을지도요.
  2. MATLAB 대비 지원 기능이 떨어진다.
    자료형 관련부터 시작해서 여러모로 matlab에서는 지원하는 자료형 변수, 함수가 octave에는 없을 수 있습니다. 이런 것들은 코드 만드는데 좀 어려울 수 있는데, 이런 것들도 충분히 코드로 짤 수 있으면 문제 없다고 봅니다.
  3. 프로그래밍 환경만 제공하는 octave는 사용에 제약이 있다.
    매트랩은 수치해석 관련한 여러 툴박스를 가지고 있습니다. 이를 통해서 여러 환경을 지원해줄 수 있는데, 그에 반해서 octave는 코드를 짜서 돌리는 것에만 한정된 환경을 제공하기만 해서, 사용성 관련해서 떨어진다고 볼 수 있습니다.

장점과 단점이 명확하지만, 전 그래도 좋은 접근성을 통해서 여러모로 이용할 수 있는 옥타브를 추천하고 그를 간단한 강의로 사용법을 정리해보고 싶어지더군요. 못하는 것이 아니라 좀 번거로운 것이니깐요. AMD GPU로도 딥러닝, 인공지능을 구현하고 할 수 있지만 굳이 사람들이 CUDA 땜에 엔비디아 GPU로만 딥러닝, 인공지능을 이용하는 것과 같은 거라고 보고 있습니다.

그래서 하나하나 쉬운 걸 해보는 걸로 한 번 쭉 써보고, 이걸 가지고 여러모로 활용하는 내용들도 조금씩 적어서 하나하나 정리해보려고 합니다.

잘부탁합니다~

p.s. 좀 많이 써보고 많은 사람들과 내용 공유도 했으면 좋겠네요. 커뮤도 있긴 할텐데… 그래도 내가 써봐야지 말하기 편하죠. ㅇㅂㅇ

인텔 맥에서 부트캠프 이용 시, 가상화 안되는 문제 해결 – 시스템 무결성 보호 비활성화

지금 뭐 여러모로 돈이 나갈 일이 많아서 오랫동안 써오던 맥북 프로 15인치 2015 버전에다가 부트캠프를 쓰고 있습니다. 그리고 거기에 윈도우를 설치해서 쓰고 있죠. 아직 전 윈도우 개발이 주인 개발이 여럿 있어서요…ㅠㅠ

그런 와중에, 언제부턴가 가상화가 사용할 수 없는 현상이 발생하더군요. 테스트 머신인 가상머신이 있는데…. 그걸 써야 되는데…왜…..ㅠㅠㅠㅠㅠㅠㅠㅠ

안돼…ㅠㅠ

그러던 와중에, 맥을 쓸 일이 있어서 맥으로 부팅을 해서 맥을 업데이트 하고, 여러모로 작업 후 다시 윈도우로 돌아와도 안되더군요….ㅠㅠ

‘보통 맥을 쓰다가 다시 돌아오면 된다고는 하던데…뭐지….ㅠㅠ’

하다가 발견한 녀석이 있었으니,

바로 시스템 무결성 보호라는 녀석이었습니다. 설명에 대한 것은 링크로 달아뒀습니다.

OS X El Capitan과 iOS 9에 적용된 오래된 기술이더군요. 간단히 말하면, 유닉스 기반의 운영체제이기 때문에 rm -rf / 같은 명령어면 그냥 시스템 싹 다 날려먹고 그럴 수 있으니, 그걸 보호하기 위해 root 권한을 무시하는 루트리스(rootless)라는 녀석을 쓰는 거더군요.

이러면 root 권한이 있더라도 쉽게 변경할 수 없도록 되었고, 그 안에는 애플 소프트웨어 업데이트와도 연계되어 있어서 업데이트가 꾸준히 되어서 항상 시스템 관련된 부분을 보호하는 형태가 되는 것입니다.

써놓은 거 보면 그냥 SELinux라고 보면 이해가 확 될 겁니다만… 그게 뭐야 씹덕아 라고 하면…ㅠㅠ

SELinux 정도는 알아야 합니다! (퍽!)

뭐, 그 덕분에… 솔직히 그냥 아무 잘못없이 시스템 망가지는 건 있을 수 없게 되긴 했습니다. 일반 이용자 입장에서는요…

대신 아마 시스템 유틸리티나 그쪽 관련된 개발 하던 사람들은 그냥 포기하고 나가지 않았을까 싶은데… 생각보다 코드 인젝션 처리해서 유틸리티 만들던 사람들이 많아서요. 그게 불가능한 상황이니 그냥 개발 포기하는 그런 형태가 되었을 꺼 같군요.

근데 이녀석이, CPU의 가상화 기능과도 연관이 있더군요. 하긴, 프로세서 관련된 것들은 보호받는 쪽이 제조사나 os 제공자의 입장에서는 확실히 문제가 없는 거니깐요…

뭐, 좀 잡설이 길었는데, 이거 해제하는 방법은 간단합니다.

초기 부팅할 때, 전원 누른 다음에 Command + R을 누르면 복구 모드에 들어갑니다. 그때에 터미널을 열어서 다음과 같은 명령어를 입력하면 됩니다.

csrutil disable

다시 설정하려면 아래와 같이 입력하면 됩니다.

csrutil enable

어렵지 않죠? 그렇게 해서 다시 가상화가 사용되게 되었습니다. ㅠㅠ

평화로운 개발 환경이 다시 왔습니다. ㅠㅠ

[Oh! 반면교사 시즌 2] 앞에서 다른 팀에서 시간 다쓰고는 2일밖에 안남았는데 그 안에 해결해주세요 하면서 절차는 다 지키라고..?

ㅎ… 지금 회사 D-1 인데… 인수인계 때문에 힘들다. 근데 그것보다… 이 시리즈 쓰는 소재는 많은데… 생각하면 그냥 머리만 아프다.

여기 일은 수주하면서 특수 버전에 대한 기능 수정이 들어가야 하는데… 개발 및 배포 단계에 대해서 다음과 같은 절차를 거칩니다.

참고로, 회사 비밀땜에 일부 내용은 뺐습니다.

  1. 이전에 작성한 버전의 소스코드 폴더 복사합니다.
  2. 폴더명에 버전 올립니다.
  3. 개발자 노트북으로 복사합니다.
  4. 사양서 작성, 체크리스트 작성, 버전 정보 기록, 코드 수정을 합니다.
  5. 코드 내에 버전이력.txt 파일에 버전에서 수정한 내용 적습니다.
  6. 테스트를 합니다. 테스트 시트에서 각 부서 통과할 때마다 각 부서마다 버전 관리 기록 문서를 작성합니다.
  7. 테스트 프로그램을 사내에 배포합니다. 사내 배포정보에도 버전 관리 기록 문서 작성합니다.
  8. 테스트 후, 폴더 압축합니다.
  9. 압축 파일과 압축 안한 폴더를 다시 서버에 복사합니다.
  10. 서버 내에 버전 관리 엑셀 파일에 버전 업데잍트 정보 작성합니다.
  11. 수정 완료 정보에 대한 기록을 기록물 관리 서버에 업로드 합니다.
  12. 모든 기록물을 대조하여 버전 관리 기록이 하나라도 빠졌는지 확인합니다.
  13. 릴리즈용 프로그램 빌드를 합니다.
  14. 릴리즈 관리 문서를 작성하고, 릴리즈 버전 관리 문서를 작성합니다.
  15. 릴리즈 프로그램을 릴리즈 담당자에게 전달합니다.
  16. 릴리즈 담당자가 관런 버전 기록물을 만듭니다.
  17. 오더에 따라 출하되는 프로그램마다 버전 기록물을 만듭니다.
  18. 릴리즈 끝.

저희 팀만 해도 이 단계대로 해야 정상인 것입니다.

근데 저희만 일을 하는 게 아니라, 수주이기 때문에 앞에서 수주 관련 설계를 해야 하고, 클라이언트쪽에서 개발하는 시스템에 따라서도 커스터마이징이 들어가는지도 다 따지고 해서 소프트웨어 검토에 들어오니… 2일 밖에 안남았습니다.

근데 수정 사항은 2일 꼬박 다 써도 모자랍니다.

그래서 저 과정 중 일부가 생략되어서 나가기도 합니다. 주로 문서 관련해서가 생략될 때가 많습니다. 문서는 나중에 만들면 되니깐요.

근데 그러다가 저처럼 사람 나가고 하는 일 생기면, 그땐 이야기가 다릅니다.
그럴 때에 뭐 관련해서 인수인계 다 해주고 가야 하는데…
바쁘니깐 펑크난 문서들이 발생합니다. 그것도 한두곳이 아니라 여러 곳에서요. 그래서 까입니다.

근데 시간은 제대로 줄 수 있는 상태에서 까시죠? 저거 다 지키면서 앞에서 다 까먹고 남는 시간에 작업해야 할 일 터지면서 무슨넘의…

….하…. 저 단계 관련해서도 다른 할 말이 좀 많네요.