IT이야기/입코딩2017. 7. 1. 23:26

Front end dev skills

https://www.frontendhandbook.com/practice/skills.html


프론트 엔드(front-end) 개발자의 기본 스킬입니다.
보통 html, css, javascript 정도 생각하실텐데
프론트 엔드라는 정의가 애매하기도 하고
이런이런 스킬들이 있다고 정리해 두면 좋을거같네요.

* Content Management Systems (aka CMS)
* Node.js
* Cross-Browser Testing
* Cross-Platform Testing
* Unit Testing
* Cross-Device Testing
* Accessibility / WAI-ARIA
* Search Engine Optimization (aka SEO)
* Interaction or User Interface Design
* User Experience
* Usability
* E-commerce Systems
* Portal Systems
* Wireframing
* CSS Layout / Grids
* DOM Manipulation (e.g., jQuery)
* Mobile Web Performance
* Load Testing
* Performance Testing
* Progressive Enhancement / Graceful Degradation
* Version Control (e.g., GIT)
* MVC / MVVM / MV*
* Functional Programming
* Data Formats (e.g., JSON, XML)
* Data APIs (e.g Restful API)
* Web Font Embedding
* Scalable Vector Graphics (aka SVG)
* Regular Expressions
* Content Strategy
* Microdata / Microformats
* Task Runners, Build Tools, Process Automation Tools
* Responsive Web Design
* Object-Oriented Programming
* Application Architecture
* Modules
* Dependency Managers
* Package Managers
* JavaScript Animation
* CSS Animation
* Charts / Graphs
* UI Widgets
* Code Quality Testing
* Code Coverage Testing
* Code Complexity Analysis
* Integration Testing
* Command Line / CLI
* Templating Strategies
* Templating Engines
* Single Page Applications
* XHR Requests (aka AJAX)
* Web/Browser Security
* HTML Semantics
* Browser Developer Tools

Posted by Joseph514
IT이야기/입코딩2017. 6. 30. 16:17

-웹 풀스택 입문을 위한 약 500페이지 분량의 교재



인터넷 커뮤니티를 하던 중 웹 풀스택 입문을 위한 약 500페이지 분량의 교재를 무료로 배포라는 글이 있더군요.

예전에 풀스택 개발자에 정의에 대해서 한번 포스팅해 본적있는데, 좀 비약하자면 혼자서 웹사이트 제작이 가능한 사람을 이야기 한다는 이야기를 했었었죠.


okjsp에 올라온 글입니다.

웹 풀스택 입문을 위한 약 500페이지 분량의 교재를 무료로 배포하고 있습니다.


풀스택 개발자에 대해서 많이 배우고 싶은 저로서는 참고해 보고 싶은 자료가 아닐 수 없더군요.

많은 분들도 아시겠지만 혹시나 보시면 좋을까 해서 한번 포스팅해봅니다.

목차입니다.


<목차> 

1 기초 이론 

1.1 커리큘럼 소개 / 추상화 

1.2 컴퓨터 구조와 파일 

1.3 프로그램과 프로세스 

1.4 GUI/CLI, Shell, 파일 권한 

1.5 네트워크 


2 프로그래밍 연습 

2.1 프로그래밍 언어 

2.2 Node.js 설치 

2.3 기본 부품과 조합 

2.4 제어와 반복, 함수와 재귀, 에러 

2.5 명령형 프로그래밍, 스코프와 콜 스택 

2.6 객체지향 프로그래밍, 복사와 참조 

2.7 타입과 유추, 명명 규칙 

2.8 함수형 프로그래밍, 콜백과 클로저 


3 웹 프론트엔드 

3.1 웹 브라우저 

3.2 HTML 

3.3 CSS 

3.4 JavaScript 

3.5 모델링 

3.6 이벤트 시스템 

3.7 jQuery 

3.8 확장성있는 코드짜기 


4 웹 백엔드 

4.1 모듈, NPM 

4.2 스트림, 표준입출력, 소켓 

4.3 HTTP 프로토콜 

4.4 웹 브라우저의 Request 

4.5 정적 웹 서버의 Response 

4.6 동적 웹 서버 

4.7 Express.js 

4.8 쿠키와 세션, 인증 

4.9 동기와 비동기, Promise 

4.10 Ajax, WebSocket 

4.11 보안, Same Origin Policy 

4.12 REST API, OAuth, SPA 


5 데이터베이스 

5.1 메모리와 파일 

5.2 DB와 DBMS 

5.3 MySQL과 SQL 

5.4 Connector, SQL Injection, ORM 


6 개발과 배포 

6.1 패키지 매니저, 자동화 도구 

6.2 버전 관리, Git, GitHub 

6.3 호스팅, SSH, FTP 

6.4 DNS, 도메인, 메일 서버 (작성중) 

6.5 암호화, 전자서명, 인증서와 SSL 

6.6 비밀번호 해싱 


7 다른 플랫폼으로 

7.1 다른 플랫폼들 (작성중) 

7.2 GUI 프로그램 아키텍쳐, MVC 패턴 


게시글 하단에는

본 자료는 벤젠(Benzen)이 서비스하는 웹서비스 풀스택 워크샵 (workshop.benzen.io)에서 제공하는 컨텐츠입니다. 무단 전재 및 복제를 금합니다.

라고 적혀있더군요. 그래서 pdf를 퍼오지는 못하고 링크만 걸었습니다.


PDF 보러가기


아직 작성이 완료되지 않은 글들도 있긴 한데, 알기쉽게 하드웨어나 운영체제부터 개발, html까지 설명을 해주고 있습니다. 물론 풀스택 개발자라고 해서 모든 분야에 전문가가 된다는것은 아닙니다.

하지만 이 PDF를 통해서 제가 몰랐던 부분들을 좀 더 알 수 있게 되어서 좋았습니다.

Posted by Joseph514
IT이야기/입코딩2017. 6. 29. 11:27

개발자의 평생공부 -임백준 IT칼럼니스트


요 몇일전에 올라온 글인데, 혼자 보기 아깝게 너무 좋은 글들이 많이 적혀있어서

다 중요한 내용이긴한데, 마음에 와 닿는 몇몇 내용 발췌해 봅니다.



개발자의 평생공부

원문보기



평생 공부하는 건 개발자만이 아니다. 다른 직업을 가진 사람들도 쉼 없이 공부하고, 컨퍼런스와 세미나를 참가하고, 스터디를 한다. 공부없이 할 수 있는 일이 없기 때문이다. 

언뜻 보기에 공부와 거리가 멀어 보이는 바텐더조차 공부할 것이 많다. 바텐더를 위한 컨퍼런스는 물론이고 전문적인 팟캐스트 방송까지 있다. 

공부는 누구나 하는 것이므로 공부한다는 사실만으로 엄살을 떨 필요는 없다. 문제는 공부의 방향이다.

개발자의 경우는 평균적으로 보았을 때 3년 전에 학습한 지식이면 낡은 징후를 보이기 시작하고 5년이면 생명을 다한다. 더 오래가는 지식도 물론 있다. 프로그래밍의 본질에 가까운 지식은 수명이 오래가고 파편적인 지식일수록 수명이 짧다. 그래서 본질을 추구하며 에피파니(Epiphany)를 경험한 사람은 그렇지 않은 사람에 비해서 공부로 인한 스트레스를 덜 받는다. 중요한 것과 중요하지 않은 것을 구별하는 혜안이 있기 때문이다.


중략....


개발자가 공부하는 것은 그래서 두 번째 유형의 사람이 가진 능력, 본질적인 능력을 키우는 것을 의미한다. 프로그래밍의 본질은 문제의 해결이다. 

트렌드를 좇는 것은 파편적인 지식을 획득하는 것에 불과하기 때문에 큰 의미가 없다. 

페이스북이나 트위터의 타임라인을 보면 수만가지 새로운 기술과 도구가 날마다 쏟아진다. 

좋은 개발자라면 그런 것들을 모두 알아야 하는가? 전혀 그렇지 않다. 파편적인 지식은 파편적인 태도만으로 충분하다. 

트렌드에 필요한 것은 가벼운 눈팅이지 공부가 아니다. 공부는 본질에 다가서려는 노력이다.


중략....


우리는 종종 실력을 이미 알고 있는 지식의 총량으로 착각한다. 

실력과 지식의 총량은 희미한 상관관계가 있기는 하지만 사실상 무관하다. 

진짜 실력은 임기응변이기 때문이다. 실력은 주변상황에 휘둘리지 않는 집중력이다. 

해결해야 하는 문제가 무엇인지 알아채는 감각이다. 

처음 본 문제를 해결하는 능력이다. 

이러한 임기응변, 집중력, 감각, 그리고 능력은 이미 알고있는 지식으로부터 나오는 것이 아니다. 

그것은 본질에 다가가기 위해서 감내해온 고통, 불면의 밤, 좌절, 환희, 이런 것으로 점철된 뜨거운 경험에서 나오는 것이다. 그래서 실력은 지식의 총합이 아니다. 고통의 총합이다.

여러분이 페이스북 타임라인을 보다가 누가 공유한 새로운 기술에 대한 링크를 저장했다고 하자. 

영원히 볼 일이 없는 글을 저장하는 행위는 쇼핑몰 사이트에서 위시리스트나 보관함에 마음에 드는 상품을 담는 심리와 정확히 일치한다. 즉, 그것은 공부가 아니라 쇼핑이다. 

쇼핑과 눈팅이 자체로 의미없는 일은 아니지만 그걸 공부로 착각하는 사람은 파편적인 지식의 늪에서 빠져나오기 어려울 것이다.


1. 지금 다니고 있는 회사에서 하는 일을 잘하기 위해서 노력하는 것이 가장 좋은 공부다.

2. 회사에서 하는 일과 개인적으로 공부하는 내용을 최대한 근접시키기 위해서 노력하라.

3. 새로운 기술을 익히는 최선의 방법은 스스로 문제를 정의한 다음, 새로운 기술을 이용해서 그 문제를 풀어보는 것이다. 책을 읽거나 동영상을 보는 것은 그보다 하위수준의 방법이다.

4. 신기술을 좇는 메뚜기가 되지 말라.

5. 모든 것을 알아야 한다는 강박을 버려라. 미리 획득하는 지식의 99%는 무용지물이다. 필요할 때 필요한 기술을 익힐 수 있는 것이 능력이다. 그 능력을 키워라.

6. 이상한 나라의 앨리스에 나오는 토끼굴(rabbit hole)을 피하라. 

카테고리이론을 알아야 함수형 언어를 쓸 수 있는게 아니고, 선형대수학을 공부해야 머신러닝을 할 수 있는게 아니다. 토끼굴에 빠져서 한없이 들어가다보면 비본질적인 공부에 시간을 허비하게 된다.

7. 겉만 핥는 것은 경박하지만 토끼굴에 빠지는 것은 우매하다. 둘 사이의 적당한 지점에서 균형을 잡는 것이 개발자의 능력이다.

8. 머리에 들어오지 않는 어려운 개념이나 용어는 자투리 시간을 이용해서 반복적으로 읽고 암기하라. 나중에 큰 그림을 공부할 때 도움이 된다.

9. 항상 겸손해야 하지만 동시에 자긍심을 가져라. 그대가 지금 작성한 코드, 지금 읽은 책, 지금 공부한 내용을 그대보다 잘 아는 사람은 지구상에 없다. 

모든걸 알고 있는 것처럼 보이는 다른 사람들도 그대와 마찬가지로 불안해하고, 위축되고, 두려워하면서 살아가고 있다. 자긍심이란 그런 타인을 돕고자 하는 마음가짐의 다른 이름이다.

10. 혼자 하지 말고 함께 공부하라.



혼자서 풀스택 개발자가 되어 보려고, 또는 최신트렌드가 어떻다 저렇다 라는 이야기만 듣고, 그걸로 게시판 만드는 수준 정도만 만들어보자.

이렇게 생각하고 집에와서 개인프로젝트로 환경을 세팅해서 작업해보고 했었는데요.

파이썬이고 node.js고 수박 겉햝기 정도의 지식만 알뿐, 이력서에 쓸때 경력으로 쓰기도 민망한 수준이더군요.

위에서 이야기 한데로, 너무 트랜드에 뒤처지지도 말아야겠지만 신기술 쫓는 메뚜기, 그리고 너무 토끼굴에 빠져서 정작 필요한 부분에 지식을 얻지 못하는 경우가 아닌가 생각이 들기도 합니다.



Posted by Joseph514
IT이야기/입코딩2017. 6. 29. 10:58

2016년에 자바스크립트를 배우는 기분-번역

작년에 인터넷에 떠돌던 2016년에 자바스크립트를 배우는 기분이라는 글이 있었는데요.

한글로 번역해놓으신 분께 있어서 일부 발췌해 왔습니다.


How it feels to learn JavaScript in 2016

원문보기




Cool. I need to create a page that displays the latest activity from the users, so I just need to get the data from the REST endpoint and display it in some sort of filterable table, and update it if anything changes in the server. I was thinking maybe using jQuery to fetch and display the data?

쩐다. 난 지금 사용자들이 남긴 최근 행동들을 보여주는 페이지를 짜려고 하는데, 그러면 일단 REST를 이용해서 데이터를 불러와 필터가 되는 테이블에 표시해 준 다음, 서버에서 갱신되는 게 있다면 테이블을 업데이트 해주려고 해. 데이터 불러오고 표시하는 데 jQuery 쓰면 되지?

-Oh my god no, no one uses jQuery anymore. You should try learning React, it’s 2016.

- 야잌ㅋㅋㅋㅋ 누가 jQuery 쓴다고 그러냐. 2016년 잇 아이템인 React를 써야지.

Oh, OK. What’s React?

헐, 그게 뭔데?

-It’s a super cool library made by some guys at Facebook, it really brings control and performance to your application, by allowing you to handle any view changes very easily.

- 페이스북 존잘러들이 만든 슈퍼쿨 짱짱 라이브러리지. 네가 웹앱 만들 때 뷰를 마음대로 다루면서 기능과 성능도 모두 챙길 수 있지.


중략...


What’s wrong with HTML?

HTML 가지고 뭐가 부족하길래 그런 걸 씀?

-It’s 2016. No one codes HTML directly anymore.

- 야 2016년에 직접 HTML을 다루는 사람이 어딨어.

Right. Anyway, if I add these two libraries then I can use React?

알았어. 그럼 그 둘만 더하면 React 쓸 수 있는거지?

-Not quite. You need to add Babel, and then you are able to use React.

- 글쎄, Babel을 추가해야 React를 쓸 수 있을껄.


중략...


I have no idea what you just said, and all these names are confusing. Look, I’m just loading a bunch of data from a server, I used to be able to just include jQuery from a CDN and just get the data with AJAX calls, why can’t I just do that?

... 뭐라고 하는지 하나도 모르겠는데. 이름도 헷갈리고. 난 그냥 서버에서 데이터 불러서 보여주고 싶은 건데. CDN에서 jQuery 받아서 걍 AJAX 콜 하려는거고. 이렇게 하면 왜 안 되는데?

-It’s 2016 man, no one uses jQuery anymore, it ends up in a bunch of spaghetti code. Everyone knows that.

- 2016년이잖아. 아무도 jQuery 같은 건 안 쓴다고. 그런거 썼다간 쓰레기 같은 스파게티 코드만 남아. 그것도 몰라?

Right. So my alternative is to load three libraries to fetch data and display a HTML table.

후... 그럼 대안으로 세 가지 라이브러리를 로드하고, 데이터를 받아와서 화면에 HTML 테이블로 뿌리면 되나?

-Well, you include those three libraries but bundle them up with a module manager to load only one file.

- 음... 뭐 예전처럼 각각 포함해도 되긴 하는데 가능하면 모듈 매니저를 통해 번들로 묶어서 파일 하나만 로드하는게 낫지.


중략...


-I would transpile it from Typescript using a Webpack + SystemJS + Babel combo.

- 난 보통 Typescript를 Webpack + SystemJS + Babel 콤보로 써서 트랜스파일하지.

Typescript? I thought we were coding in JavaScript!

뭐? Typescript? 우리 자바스크립트 얘기하고 있지 않았나???!

-Typescript IS JavaScript, or better put, a superset of JavaScript, more specifically JavaScript on version ES6. You know, that sixth version we talked about before?

- Typescript는 자바스크립트이기도 하고 자바스크립트를 포함하기도 하지. 음, 특별히 자바스크립트 ES6의 수퍼셋이라 할 수 있겠다. 아까 말한 여섯 째 기억나지?


중략...


You know what. I think we are done here. Actually, I think I’m done. I’m done with the web, I’m done with JavaScript altogether.

있잖아. 우리 여기까지만 하자. 나 질렸어. 웹에도 질렸고 자바스크립트 같은 것들 따위에도 죄다 질렸어.

-That’s fine, in a few years we all are going to be coding in Elm or WebAssembly.

- 괜찮아. 어차피 몇 년 내에 Elm이나 WebAssembly로 갈아탈 거거든.

I’m just going to move back to the backend. I just can’t handle these many changes and versions and editions and compilers and transpilers. The JavaScript community is insane if it thinks anyone can keep up with this.

난 백엔드나 하련다. 너무 많이 바뀌어서 감당이 안 돼. 이런 걸 다 따라올 수 있다고 생각했다면 자바스크립트 커뮤니티는 미친 거야.

-I hear you. You should try the Python community then.

- 그래. 그럼 너 파이썬 커뮤니티에 가봐.

Why?

왜?

-Ever heard of Python 3?

- 파이썬 3 소식 못 들었어?



벌써 저 글이 나온지도 1년이 지났군요.

아직까진 한국에서는 자바 스프링프레임워크에 jquery, javascript이용해서 웹 만드는게 사실상의 표준에 가깝기에

2016년에도 사용안한다는 제이쿼리는 저는 아주 요긴하게 써먹으면서 먹고 살고 있긴합니다.

파이썬, React, 에귤러 js... 이런건 듣기만 했었고, 어떤 것들인지는 생각도 못해봤는데 금세 새로운 기술들이 나오네요. 저런 기술이란것도 있구나 싶고 몰랐던 단어들을 보게 되네요.

Posted by Joseph514
IT이야기/입코딩2017. 6. 26. 16:16

-[IT용어]하드코딩과 날코딩 정의

프로그래밍을 하다보면, 하드코딩을 해놨니, 날코딩을 했니 등등의 이야기를 간혹 듣습니다.

말도 비슷한데, 이 말들이 정확히 하드코딩이 어떤 뜻이고 날코딩이 어떤뜻인지 정의해보겠습니다.



1.하드코딩에 대해서

-하드코딩의 정의

데이터를 코드 내부에 직접 입력하는 것입니다. 

기술적으로는 데이터가 실행 바이너리(exe 파일 등)에 합쳐져 있는 상태를 말합니다. 반대말은 로딩이라 합니다.

프로그램의 소스 코드에 데이터를 직접 입력해서 저장한 경우, 즉 모든 '상수'는 하드코딩입니다. '변수'의 초기값이나 기본값도 하드 코딩입니다. 

기본값 자체를 외부 리소스 파일로부터 읽어서 초기화하는 경우도 있지만 그 '리소스' 파일의 로딩은 실패 확률이 존재하기 때문에 로딩 전까지는 null, 0, nil등의 값이 하드 코딩 돼 있습니다.

주로 파일 경로, URL 또는 IP 주소, 비밀번호, 화면에 출력될 문자열 등이 대상이 됩니다.


-하드코딩의 장점

코드의 목적이 매우 직관적이라 가독성도 괜찮은 편이고 컴퓨터의 입장에서는 타입 체크나 유효성 검사 등이 빠지고 별도의 로딩 절차가 없어서 속도가 올라가므로 정말 절대로 변경되지 않을 것이라고 자신할 수 있는 작은 부분에 한정적으로 사용하면 좋습니다. 

또는 데이터를 수정하면 로직도 수정이 불가피해서 재컴파일을 피할 수 없는 경우에도 하드 코딩이 적절합니다. 

예를 들어 SQL같은 경우에는 조회 변수 외의 식 자체는 하드 코딩하는데 SQL의 식을 변경하면 SQL이 수행된 뒤의 처리 로직 전체도 바꿔 줘야 해서 재컴파일이 불가피해지기 때문입니다.


-하드코딩의 문제점

하드코딩은 프로그램의 유연성 있는 운용이나 향후의 유지보수에 큰 어려움을 줍니다.

예를 들자면, 특정 DB에 접속하여 자료를 조회하는 프로그램에 DB 비밀번호가 하드코딩된 경우, DB의 비밀번호가 노출되어 변경해야 한다면 프로그램 역시 수정하고 다시 배포해야 하는 번거로운 절차를 거쳐야 합니다. 

이런 경우에는 DB 비밀번호를 별도의 파일에 저장하고 불러와 사용하도록 개발하는 것이 적절합니다.

다국어를 지원하는 프로그램의 경우 화면에 출력해야 하는 문자열을 소스코드에서 분리하면 번역과 다국어 지원 작업이 훨씬 수월하게 이루어 집니다. 윈도우 응용프로그램 개발 시 사용하는 String Table이 좋은 예입니다.


2.날코딩에 대해서

-날코딩의 정의

프로그램 개발자들의 은어로 막코딩이라고도 합니다. 

프로그래밍에 도움이 되는 개발도구를 거의 사용하지 않고 오직 텍스트 에디터로만 프로그래밍을 만드는 행위를 말합니다. 반대말은 통합 개발 환경을 포괄하는 WYSIWYG이 있습니다.


-날코딩을 하는 이유

주로 웹개발 하는쪽에서 날코딩을 하는 사람들이 많은데, 웹개발의 특성상 수많은 언어들을 사용하게 됩니다. 

HTML, CSS, JavaScript는 기본에 PHP, JSP, ASP등의 서버 사이드 스크립트와 각종 템플릿 문법, 거기다 DB쿼리를 위한 SQL, 데이터 교환 포맷으로는 XML과 JSON을 사용합니다. 

이게 현업 레벨의 웹 개발에서 요구하는 사실상의 최소입니다. 

이걸 전부 다 통합적으로 지원하는 IDE는 이클립스 정도를 제외하면 거의 없고 그나마도 저것들이 한 파일 안에 다 섞여 있는 경우가 많아 IDE도 헷갈려 합니다. 

이런 상황이니 그냥 텍스트 에디터를 써 버리는 것입니다.

어느정도 프로그래밍에 익숙해지면 개발툴보다 날코딩이 더 빠르고 편해서 이쪽을 택하는 경우도 있습니다. 

Java의 경우 UI를 만들때 적당한 개발툴이 없다보니 역시 날코딩으로 UI를 만듭니다. 

이클립스 플러그인으로 비주얼 스튜디오처럼 UI를 그릴수 있도록 해주는 물건도 있지만 쓰기 불편하고 비주얼 스튜디오에 비하면 불친절하거나 귀찮은 부분들이 많습니다. 

더불어 개인이나 서드 파티에서 만드는 플러그인이라 불안정한 요소도 있고 하여 조금 익숙해지고 나면 코드를 직접 타이핑쳐서 해결하는 경우가 많습니다.

이러한 요소들 외에도 개발툴에서 제공하는 UI 기능을 사용할 때 자동으로 생성해주는 코드가 거지같아서 마음에 안든다는 이유, 개발툴에서 제공하는 소스코드 자동 들여쓰기가 마음에 안든다는 이유 등으로 개발툴은 대충 클래스나 사용할 메소드 틀을 잡는데 쓰거나 아예 컴파일 돌릴 때만 쓰고, 코드 작성은 날코딩하는게 더 편하다는 이유로 텍스트 에디터만 고집하는 사람들도 제법 있습니다. 

코드 작성은 vim/Emacs으로, 컴파일은 gcc와 Makefile로, 디버깅은 로그 찍거나 gdb로 하는 경우가 일반적입니다.


-날코딩을 위한 툴

메모장은 말 그대로 텍스트를 메모하는 용도이기 때문에 날코딩을 하기에 좋은 툴은 아닙니다. 

그 때문에 변수나 메소드 등에 색깔을 넣어 예쁘게 꾸며주고, 함수의 영역을 표현해주거나 여는 괄호와 닫는 괄호 등의 위치를 파악할 수 있게 알려주는 텍스트 에디터들을 애용합니다. 

대표적으로 윈도우 환경에서는 EditPlus나 UltraEdit 등이 있습니다. 

만약 비주얼 스튜디오를 사용한다면 Visual Assist라는 탁월한 도구를 사용할수 있습니다. 

Notepad++(메모장++) 이라는 오픈소스 에디터도 있습니다. 이름이 메모장같다고 해도 기능은 확연히 차이가 납니다. 

유닉스 환경에서는 vim과 Emacs라는 탁월한 에디터계의 2강이 있습니다. 

리눅스 데스크톱 환경에서는 저것보다 더 좋은 에디터를 쓸 수 있습니다. 

맥 환경에서는 XCODE라는 종결자가 있고. 그리고 상용 프로그램인 서브라임 텍스트도 있습니다. 

원래 IDE이지만 언어를 굉장히 폭넓게 지원하는 Visual Studio Code도 IDE치고는 매우 가벼워서 날코딩용으로 쓰기에 좋습니다. 

단 Visual Studio Code는 실행 후 메모리를 좀 많이 잡아먹는 편입니다.


사실 하드코딩은 좀 부정적으로 쓰입니다. 

심각한 경우. 전달 받은값이 로직을 타고 나온게 아니라 하드코딩된 값을 보이면서 정상적인 값인척 하는 경우도 있기 때문이죠.근데 날코등도 하드코딩 처럼 부정적으로 쓰이는줄알았는데, 그냥 IDE를 쓰지 않고 코딩한다 정도의 의미였던거같네요.물론 하드코딩도 어쩔수없이 쓰는게 나을때는 고정된 값을 넣어줘야 합니다.



Posted by Joseph514
IT이야기/입코딩2017. 6. 15. 13:41

-[IT용어]루팅(Rooting)



안드로이드 폰에서 사용하는 루팅(Rooting)이라는 말을 알아보도록 하겠습니다.

보통 안드로이드 폰을 쓰다보면, 흔히들 루팅해서 작업할수 있다는 것들을 많이 봅니다.

안드로이드 공기계에 리눅스를 깔아보려고 하는데 루팅이 되어 있어야 되느니 마느니 하는 말들이 많아서 한번 찾아보았습니다.


단어를 뜯어보자면

root + ~ing. 

라는 뜻이군요.

이 말은 루트 권한이 원래 허가되지 않은 기기에서 루트 계정 권한을 취득하는 것입니다. 

오... 어디서 많이 들어본 단어군요.

root란 리눅스의 최고 관리자 권한입니다.

리눅스 계통의 운영체제에서는 루트권한 취득이 기본적으로 가능하지만, 이러한 루트권한을 획득하는 것을 막아놓아서 시스템에 함부로 접근할 수 없게 만든 기기에 대해서는 시스템의 보안 구멍 등을 통한 해킹을 통해 루트 권한을 획득하는 절차가 필요하게 됩니다. 

내가 휴대전화 관리자인데 내가 관리자 권한이 없다니 억울하기 짝이 없지 않습니까?

이러한 루팅이라는 말이 매우 잘 알려진 것은 안드로이드를 통해서일 것입니다.


iOS의 탈옥(jailbreaking)도 넓은 의미의 루팅이라 할 수도 있습니다. 

그런데 iOS의 경우에는 루트 권한을 얻지 않고 일부 시스템 파일의 조작이 가능한 경우가 많습니다.

리눅스나 유닉스나 그놈이 그놈 아닌가 했는데, iOS는 유닉스 계통입니다.(정확히는 유닉스-넥스트 스탭-Mac OS-OS X-iOS 로 이어집니다.)

리눅스에 비해 보안에 취약한 유닉스 계통이기 때문이라고 합니다.(어떻게 보면 더욱 개방적이라고도 볼 수도 있습니다.)


루팅만 한다고 해서 변하는 것은 루트 권한을 획득할 수 있다는것 하나이지만, 안드로이드 (리눅스)의 특성상 이것 하나가 큰 위력을 발휘하게 됩니다.


아래에는 나무위키에 등제된 루팅을 함으로 사용할수 있는 것들입니다.


1. 하드웨어의 성능 조절이 가능합니다.

오버클럭을 생각하면 된됩니다. 다만 커널이 지원해야 하고 순정커널이면 이런 기능이 없다고 합니다. 

실제로 스마트폰의 CPU의 클럭을 올려서, 본래 가진 성능보다 더 높게 쓰는 방법이 있고 반대로 클럭을 낮춰서 배터리 소모를 줄이는 방법이 있습니다. 

오버클럭을 한다고 해서 휴대폰이 항상 최대클럭으로 도는 것은 아니기 때문에 배터리 타임에는 큰 차이가 없다고 볼 수 있습니다. 

화면 OFF시 클럭다운 등 설정만 잘해준다면 고성능이 필요한 게임같은 경우 더 원활하게 사용하면서도 배터리 타임은 더 좋을 수도 있습니다. 

실제로 화면이 꺼졌을 때의 최대클럭을 낮게 잡아주면 대기시간의 배터리소모를 체감할 수 있을 정도로 크게 줄일 수 있습니다. 

또, CyanogenMod같은 커스텀 롬에는 시스템 I/O 스케쥴러를 설정할 수 있는데, 이 설정을 통해서도 최적화된 성능을 내게 할 수 있습니다. 

클럭별로 걸리는 전압을 낮춰 배터리 소모를 줄일 수도 있는데 너무 낮출 경우 프리징이 걸리거나 휴대폰이 그대로 뻗을 수 있으니 주의를 요망합니다.


2. 제작사나 통신사의 필수 프로그램 삭제가 가능합니다. 

통신사나 제조사에서는 현지화나 자신들의 이익을 앞세워 느린 프로그램을 지울 수 없게 설치하는 경우가 많습니다. 

옵티머스 Q의 한국형 프로그램이나 디자이어 HD의 마켓 프로그램 등이 이에 해당합니다. 

루팅을 하면 시스템의 모든 권한이 생기기 때문에 이러한 프로그램들을 지우고 기기를 좀 더 최적화시킬 수 있습니다. 

심지어는 구글에서 안드로이드에 끼워주는 기본 프로그램[GAPPS]들도 삭제가 가능합니다. 

쓸모 없는 시스템 앱은 비활성화하더라도 램을 좀먹는데, 이를 지워줌으로써 최적화를 이룰 수 있습니다. 

초창기 안드로이드 기기에서 그 효과가 극적으로 나타났으나, 신형 안드로이드 기기에서도 체감이 가능하다고 합니다.


3. 각종 알림음이나 폰트의 교체가 가능합니다. 

몇몇 기본으로 여러 폰트가 내장되어 있는 폰을 제외하면 나머지 폰들은 루팅을 하지 않으면 폰트 교체가 불가능합니다. 폰트 교체를 위해 루팅하는 유저도 많은 편입니다. 

다만 갤럭시 S 이후에 국내에 나온 몇몇 안드로이드 폰들은 자체적으로 폰트 변경을 지원합니다. 게다가 갤럭시S7 은 Samsung sans밖에 없습니다만 다른 글씨체들이 워낙 가독성이 구려서 그냥 기본으로 쓴다고 합니다. 

안드로이드는 기본적인 알림음, 문자음 등은 기본적으로 바꿀 수 있지만, 카메라 셔터음같은 경우 국내법에 의해 도촬 등을 막고자 셔터음이 강제로 납니다. 

이것도 루팅 후에 자유롭게 바꿀 수 있습니다.


4. 외장 메모리의 내장 메모리화가 가능합니다.

외장 메모리의 파티션을 나누고 나눈 파티션의 일부를 내장 메모리에 쓰이는 포맷으로 바꾸면 외장 메모리를 내장 메모리처럼 사용할 수 있습니다. 

더구나 안드로이드는 프로요 이전 기준으로 개발된 프로그램의 외장 메모리 설치가 지원되지 않습니다. 

위젯 프로그램같은 경우는 아예 내장에만 설치해야 합니다. 

그래서 이런식으로 파티션을 나눠 쓰면 용량 문제 해결에 큰 도움이 됩니다. 내장 메모리 용량이 작은 폰들의 경우 외장 메모리와 바꿔치기해서 쓰는 경우도 있습니다.


5. 각종 키 맵핑/기타등등을 사용할수 있습니다.

예를 들어 전원 버튼 말고 다른 버튼으로도 화면이 켜지게 할 수 있으며, 화면이 꺼졌을 때 볼륨 키를 두번 누르면 다음곡으로 넘어가게 할 수 있다든가, 트랙볼로 재생 중인 노래를 변경할 수 있게 하는 등 각종 키 맵핑으로 인해 많은 것을 할 수 있습니다. 

또한 host 파일을 수정해 특정 광고를 차단한다거나, 부팅애니메이션의 변경, 마켓의 국가별 차단 프로그램 해제, 각종 하드웨어 봉인 해제, 화면 녹화, 휴대폰 디스플레이의 색온도 조정, 스피커의 최대볼륨 부스팅, 라디오 모듈이 있는 모델의 경우 FM라디오 기능 설정, 하드웨어 키를 비활성화시키고 소프트웨어 키를 활성화, DNS조정으로 인한 각종 웹사이트/동영상 스트리밍의 속도향상 등 많은 것을 할 수 있다. 예를 들어 HTC의 태블릿 플라이어 4G의 경우 통화기능이 없지만 build.prop의 수정으로 전화기능을 활성화시킬 수 있습니다. 

홈 버튼과 관련된 문제도 해결할 수 있는데 가장 많이 쓰이는 경우는 안드로이드 계열 폰에서 많이 보이는 터치 버튼과 홈 버튼의 속도 차이,일명 홈딜레이를 해결하기 위해 쓰이는 경우. 루팅 후 시스템 내부를 직접 수정할 수 있는 프로그램을 이용해서 작업을 하는데 대부분은 인식을 담당하는 파일을 교체하는 수준에서 끝나지만 해당 모델의 패치된 파일이 없어서 직접 코드를 손대야 하는 경우도 있습니다.

무언가 엄청나게 많군요.

전자의 경우는 그나마 좀 쉽지만 후자의 경우 짤없이 주변에 있는 안드로이드 관련 개발자의 손을 빌려야 합니다. 함부로 코드 건들다가는 모든 게 맛이 가기 때문입니다. 


6. 보안을 우회하는 것이지만 OS차원에서 기본적으로 제공하지 않는 보안을 위해서도 사용됩니다. 

예를 들면 안드로이드 백신인 어베스트의 방화벽 기능에 필수이며, 도난방지 기능의 무력화를 완벽히 막는데도 필요합니다. 또한 특수한 프로그램을 통해 프로그램이 갖는 권한을 제작자가 정해준 그대로가 아니라 직접 통제해서 필요없어 보이거나 보안상 위협이 되는 권한을 차단할 수도 있습니다. 

안드로이드용 Tor가 모든 인터넷 연결에 대해 작동하게 할때도 필요합니다. 

부팅시에 추가적인 파일을 시스템에 불러올 수 있게 하는 Xposed framework의 등장으로 루팅만 되어있다면 롬 수준에서 갈아엎어야 추가가 가능했던 기능들의 추가가 가능해졌습니다. 

작게는 소소한 UI의 커스텀부터 모든 애플리케이션에 적용가능한 소형 창(멀티윈도우), 한손모드, 애플리케이션별로 UI, DPI, 클럭설정을 바꾼다든가 등 중에서 골라잡아 추가하는게 가능해집니다.


7. 외장 SD 카드 쓰기 권한 부여가 가능합니다. 

킷캣 이전의 안드로이드 버전 혹은 의견을 받아들여 정책이 개선된 것으로 알려진 롤리팝 이후 버전을 사용하는 유저들은 이게 무슨 소리냐고 받아들이겠지만, 킷캣 업데이트 이후 구글 기본앱을 제외한 서드파티 앱에서 외장 SD카드의 쓰기 권한이 박탈되었습니다. 

기본 앱 '내 파일'외의 다른 파일관리자 툴(ES 탐색기 등)에서 외장 SD의 파일을 삭제조차 불가능하며, 브라우저의 기본 다운로드 및 토렌트 등의 경로를 외장 SD로 설정하면 다운로드가 완전히 불가능합니다. 

어떤 식으로든 외장 SD 카드의 쓰기 권한을 요구하는 모든 작업 즉 파일을 옮길 때도, 사진 뷰어에서 사진을 지울 때도, 동영상 플레이어에서 폴더간 동영상 복사를 할 때도 극소수의 구글 공식 앱이 아니면 작동하지 않습니다. 

사실상 기본앱 사용 강제+클라우드로 끌어들입니다. 하지만 유저들이 착각하지 말아야 할게 애초에 안드로이드를 만드는 구글은 SD카드를 추가용량으로 활용하는 것을 지원한 적이 없습니다. 

안드로이드 유저들이 그걸 지원했다고 생각하는 이유는, 대개 제조사 커스텀으로 우회돼서 가능케 된 일종의 꼼수를 구글이 공식 지원한 것처럼 여기고 있기 때문입니다. 

구글이 원래 지원해 왔는데 킷캣에 와서 막았다고 생각하는건 틀린 것이라는 말이네요. 

순정을 쓰고 싶었으나 이 문제 때문에 울며 겨자 먹기로 루팅을 하게 되는 경우가 흔합니다. 루팅 후에는 시스템 구역의 xml 파일을 수정함으로서 간단히 해결 가능합니다.


그럼 이 많은 기능들을 하게 하기 위해서 루팅하려면 어떻게 해야 할까요?

루팅을 하는 방법은 크게 리커버리를 통하는 방법과 취약점을 이용하는 방법 두 가지로 나뉜다고 합니다. 


1. 리커버리를 통하는 방법

아예 안드로이드를 꺼 버리고 별도의 OS인 리커버리를 구동시켜서 저장장치에 접근한 뒤 슈퍼유저 바이너리를 설치하는 것으로, 부트로더 락만 걸려있지 않다면 안드로이드버전과 관계없이 가장 확실하게 루팅이 가능하나 약간 번거롭다는 단점이 있습니다. 


2. 취약점을 이용하는 방법

OS와 함께 켜져 있는 보안시스템을 휘저어서 뚫어버린 뒤 슈퍼유저 바이너리를 설치하는 것으로, 안드로이드의 버전에 따라 통하는 방법이 달라져서 루팅 이전에 사전지식이 약간 필요하며, 최신 버전의 안드로이드의 경우 취약점이 알려지기 전에는 이 방법으로 루팅하는 것이 불가능하다는 단점이 있습니다. 


최신 OS를 탑재하고 부트로더를 언락하기 쉬운 넥서스 계열의 폰은 전자의 방법이 주로 사용되며, 부트로더를 언락하기 어려운 제조사의 폰은 OS버전이 어떻든 간에 후자의 방법을 사용할 수 밖에 없습니다. 

루팅에 사용되는 취약점은 근본적으로 OS의 보안체계를 휘저어 놓는 취약점입니다. 다시 말해, 루팅툴이 개발됐다는 것은 그 기기의 보안이 완전히 날아갔다는 것과 다름없는 말입니다. 

어떤 앱이 취약점을 이용해서 사용자 모르게 루트 권한에 접근하고 시스템을 휘저어 놓는다면 OS 입장에서 그보다 더한 재앙은 없습니다. 

그러므로 구글과 제조사는 취약점을 막을 수 밖에 없는 것입니다. 

가장 이상적인 경우는 제조사에서 부트로더를 락을 걸지 않으면서 OS를 최신으로 맞춰 주면 루팅을 원하는 사용자는 루팅을 하고 그렇지 않은 사용자는 OS의 보안에 의해 보호받는 것이겠으나 현실은 루팅하다 벽돌돼서 AS센터를 찾는 사람이 한둘이 아니라 기업 입장에서는 손해만 보는 일입니다.



루팅할때 주의사항


하기전에 정말 루팅이 필요한지 잘 생각해보고 신중하게 결정해야 합니다. 

일단 보안상의 허점이 매우 많아집니다.(백신을 사용하면 되긴 하지만 사용자에 따라 보안수준은 달라집니다.) 따라서, 터치한번 잘못해서 바로 핸드폰이 고장나는 경우가 있습니다. 

여러 스마트폰 커뮤니티에 가보면 대개 루팅을 하지 않고 사용합니다. 

혹시 위에 써진 장점만 보고 호기심에 루팅할 생각을 하는 초보자들은 하지 않는 것을 권합니다. 

윈도우에서 최고 관리자 권한에 맘대로 접근 할 수 있던 정책때문에 여러 악성 프로그램에 허약했다는 것을 명심해야 할것입니다. 

슈퍼유저 앱과 바이너리를 꼭 제때 업데이트 하고, 루트 권한 허가 창이 뜰 때 마다 그냥 넘기지 말고 과연 이 앱이 정말로 루트 권한이 필요한 상황이라 띄우는 것인지 한번씩만 생각해주고 넘어가야 합니다.또한 루팅을 하면 제조사의 무상 AS가 불가능해집니다. 

심지어 구입한지 1달이 채 지나지 않더라도 루팅을 했다는것이 발견되면 바로 무상AS가 불가능해지며 심지어 일부 제조사는 유상AS마저 거부합니다. (모토로라가 이런 케이스) 

특히 커스텀롬을 설치하고 AS센터를 찾는 호갱님들은 AS를 받지 못한다고 합니다. 심지어 루팅하면 충전기 AS도 거부하는 경우도 있습니다. 하지만 이는 케바케가 좀 심한게 같은 기종을 수리받아도 루팅을 이유로 AS를 거부하는 경우와 루팅 여부에 별 관심없는 경우가 나뉘며, 심지어 루팅검사를 해보고도 주의만 주고 쿨하게 무상수리해주는 수리기사도 있습니다. 

AS를 장점으로 미는 삼성은 루팅에 관대한 경우가 많은 편이며 .용산에 있는 LG 전자도 가끔은 해준다고 합니다. 또한 기기에 따라 OTA를 받을 수 없습니다. 

공장초기화를 해도 루팅흔적이 남아있어 받을 수 없기 때문에 루팅흔적을 잘 지우지 못하겠다면 루팅 전 잘 생각해보아야 합니다. 물론 pc에 연결하면 업데이트 할 수 있긴 합니다.


루팅자체는 하드웨어의 수명에 영향이 절대로 없습니다. 루트권한에 대한 지식이 없는 유저가 처음에는 폰트나 알림 음을 바꾸는 수명에 영향이 없는 소극적인 커스터마이징을 하다가 갈수록 오버클럭같은 행위를 위험성조차 숙지하지 않고 시도하는 등 말 그대로 휴대폰을 혹사한다면 하드웨어 수명에 영향을 줄 수 있습니다. 

실제로 스마트폰을 어리숙하게 아는 좆문가들은 오버클럭 자체에 대한 이해가 없는 상태로 어? 속도가 빨라진다네? 오,좋은 거네?라는 식의 마인드로 오버클럭을 시도하는 경우가 많은데, 이 경우 휴대폰의 내부 기기 자체의 수명을 갉아먹을 수 있는 위험부담이 큰 행동이고, 성능이 좋은 컴퓨터도 권장하지 않는 방법입니다. 

게다가 검증되지 않은 프로그램들과 잘못된 오버클럭 방법을 쓰다 보니 오류가 범람하고 온갖 악질 프로그램들이 판을 치고 있습니다.


간혹 루팅하면 기기의 속도가 빨라진다고 착각하는 사용자도 존재합니다만 루팅은 관리자 권한을 획득하는 것으로 하드웨어의 속도와는 직접적인 관련이 없습니다. 

빨라지는 경우, 혹은 느려지는 경우는 루팅을 한 후에 시스템을 직접 변형한 이후, 예를 들자면 기본 앱을 지웠다거나, init.d/스크립트를 적용했다거나, 커스텀 리커버리를 통해 커스텀 커널을 올리는 등의 시스템 변형을 하는 경우에 생기는 일입니다. 그러니 쓸데없이 루팅해서 곤란한 일에 처하지 않는것이 좋겠죠.


자동차로 예로들면, 순정상태의 차량이 낼 수 있는 최대 속도가 정해져있다. 이를 리미트 라고 하는데 ECU를 조작하는 맵핑 튜닝으로 리미트를 해제 할 수 있게 됩니다. 

차량의 성능은 올라갑니다만 당연히 오버 성능을 했으므로 엔진 내구도는 심각하게 저하됩니다.


그리고 은행, 금융앱 등 보안에 극히 민감한 앱이나 주로 메이저한 게임회사의 앱들 중 상당수가 앱들이 루팅을 한 기기는 실행이 되지 않도록 방지하고 있어 언루팅 혹은 루팅 숨김을 하지 않는 이상 루팅 실행 방지 처리된 앱은 사용하지 못합니다.

SuperSU 또는 RootCloak 등 루팅 관리 앱에 숨김 기능이 있지만 이마저 잡아내는 앱 또한 적지 않습니다. 

곰돌라이트 커스텀 롬의 경우 컴퓨터 없이도 루팅/언루팅을 할수 있습니다.SuperSU에서 언루팅 기능으로 언루팅을 하여도 루팅 기기로 인식하여 실행을 거부하는 앱도 있습니다. 

대표적으로 SafetyNet을 사용하는 Pokémon GO. 이 때는 PC에 연결하여 온전한 순정 롬으로 되돌리는 수밖에 없습니다.



-루팅 제어용 프로그램

안드로이드에서 루팅여부를 확인할수 있는 가장 간단한 방법은 SuperUser 프로그램이 설치되어 있는지를 보는것입니다. 이 프로그램이 루트권한의 획득을 제어하기 때문에 사실상 루팅 그 자체라고 생각하는 경우가 많으나 사실은 그렇지 않습니다. 

SuperUser 프로그램은 su 바이너리와 같이 연동되어서 루트 권한을 취득하는데, su가 설치되기 위해서는 반드시 루팅툴이나 기타 보안 구멍을 통한 해킹을 통해 루트 권한을 획득하고 나서야 su를 설치할 수 있기 때문입니다. 

또는 리커버리에서 설치하여 루팅+바이너리 설치를 동시에 하는 방식도 있지만 의외로 이 방법을 모르는 사람이 많습니다. 이 프로그램이 없다고 하더라도 기술적으로 얼마든지 루트권한을 획득하고 파일을 조작하는 것이 가능하지만, SuperUser 프로그램은 다른 프로그램들로부터 요청되는 루트 권한을 보다 손쉽게 컨트롤 할 수 있게 도와줍니다. 

이렇게나 중요한 프로그램임에도 불구하고 특유의 아이콘 생김새때문에 바이러스로 오해하는 경우도 많고 실제로 백신 프로그램들은 SuperUser 프로그램을 바이러스라고 알려줍니다. 

한동안 관련 프로그램은 하나였다가 2011~2012 사이에 SuperSU가 새로 등장했는데, 안정성 향상 및 수시로 언루팅 상태로 바꿔줄 수 있는 기능에, 유료버전의 경우는 UAC와 같은 암호를 통한 권한제어를 최초로 제공하기 시작한 프로그램입니다. 

언젠가부터 유료기능을 간단한 설정변경으로 개방하는 것을 공식적으로 지원하고, CM팀과 XDA 사이의 문제로 인해, 2015년 현재 커스텀롬 기본 탑재 프로그램의 주류입니다. 국내의 경우는 국내 은행앱을 사용하기 위해 변경된 SPAPASU가 존재합니다.

ClockworkMod 개발자로 알려진 Koush가 또 다른 프로그램 Superuser를 만들었습니다. 

플레이스토어 링크. 이 프로그램은 오픈소스이며, 소스는 github에 공개했습니다. 

그래서 그런지는 몰라도 CyanogenMod롬과 대부분의 롬에는 아예 설정 자체에 Superuser가 메뉴로 넣어져있는 경우가 많습니다.

이러한 루팅 제어용 프로그램들은 각종 루팅 비권장 프로그램들의 좋은 타겟이 되곤 합니다. 

즉 핸드폰의 루팅 여부를 이 프로그램이 있느냐 없느냐만으로 확인하는것으로 이 프로그램이 있다면 루팅폰으로 판단하여 서비스 제공을 거부하는 형식입니다. 

주로 단말기 인증이 필요한 몇몇 프로그램과, 돈이 오가는 금융 프로그램 및 인터넷 쇼핑 프로그램등이 이런 방법을 사용하는데, 이건 말 그대로 프로그램의 유무만 체크하는 것이라서 루팅 없이 제어 프로그램만 있어도 루팅폰으로 취급하여 서비스 제공을 거부합니다. 

위에서 언급했듯이 국내 은행앱을 사용하기 위해 변경된 SPAPASU를 이용한 임시 언루팅으로 많은 유저들이 인터넷 뱅킹을 이용하고 있습니다.


-기타

안드로이드의 루팅은 SDK등의 개발도구나 프로그램을 통해서 이뤄집니다. 

Bootloader를 언락하지 않았다면, 약관을 어긴것은 아니고 자국도 안남기 때문에 언루팅하여 일반 폰 처럼 A/S를 받는 것이 가능하다고 합니다. 

그렇다 하더라도 루팅의 절차가 간단한 것은 아니며, 소위 말하는 벽돌이 될 확률도 있습니다. 

루팅 전에 충분히 절차를 숙지하고, 복구 방법을 정확히 알아둔 후, 중요한 데이터의 백업이 이뤄진 상태에서 할 수 있도록 해야 합니다. 

되도록 첫 루팅 시도는 주변의 경험자에게 부탁하여 같이 해보는걸 추천 하기도 합니다.


xda-developers

위 사이트는 HTC 팬 사이트에서 시작된 스마트폰 관련 커뮤니티 사이트입니다. 스마트폰뿐만 아니라 태블릿 컴퓨터도 취급하네요. 주요한 활동은 스마트폰에 대한 토론, 정보 공유, 커스텀 롬 개발, 애플리케이션 개발 등등입니다. 

이 사이트는 거의 모든 세계공용기종을 밑바닥인 커널, 드라이버, 리커버리, 드물게는 컴퓨터의 BIOS나 UEFI에 해당하는 부분인 부트로더까지의 수준까지 취급합니다. 

최신 세대의 듀얼코어 이상에 안드로이드 4.0 이상 전용으로 만들어진 센스 4 이후버전을 매끄럽진 않지만 공식적으로 4.0 업데이트도 되지 않은 싱글코어 기기에서 구동하도록 손보거나 커스텀 커널을 통해 클럭을 2배나 그 이상으로 뻥튀기할 수 있는, 말 그대로 B급을 싸제 수준으로 바꿔줄 수 있는 곳입니다.

영어로 되어있지만 다양한 정보들이 많네요.


마지막으로 안드로이드 루팅자체가 불법이라고 오해하는 사람들이 있는데, 결론부터 말하면

루팅은 불법 행위가 아니라고 합니다.

우선 안드로이드 자체가 오픈소스이며 제조사별로 커널소스나 부트로더소스 같은 중요 영역을 공개하고 있는 상태입니다. 모든 루팅은 이 영역의 허점을 이용합니다. 라이센스의 특성상 오픈소스를 뚫어서 바꾸는 것은 저작권법에도 아무런 문제가 없습니다.

루팅은 불법이라고 아는 사람들이 많은것 같더군요.

저도 이번에 알게 된 건데 우선 저작권법 제124조 제2항을 보면 알겠지만 안드로이드는 오픈소스이고 그것을 변경하는 것이기 때문에 '저작권 그 밖에 보호되는 권리의 기술적 보호조치'가 아니다는 것입니다.

애초에 리눅스 자체가 아파치 라이센스로 적용받으며, 오픈소스입니다. 

즉, 법적으로는 아무 문제가 없습니다. 그렇지만, 약관 위반은 맞기 때문에, 루팅을 하다가 벽돌폰이 되는 등의 문제가 발생되었을때, 무상 A/S를 거부당할 수 있는것 입니다.


루팅 프로그램 목록

-CF Auto Root

-framaroot

-gingerbreak

-kingoroot

-lg one click root

-nexus root toolkit

-stump root

-superoneclick

-tegrak kernel

-towelroot

-z4root

-Baiduroot

-iroot



-출처 : 나무위키, 본인생각

Posted by Joseph514
IT이야기/입코딩2017. 6. 9. 18:00

-[IT용어정의]스프링 프레임워크(Spring Framework)에 대해 알아보겠습니다.



한국에서 SI, SM으로 대기업 및 공공기관에 프로젝트를 뛸때 빠질수없는 단어가 있습니다.


스프링 프레임워크(Spring Framework)

보통 스프링으로 사이트를 관리하거나 제작한다는 이야기를 많이 듣습니다.

공부할적에는 집에 컴퓨터에 게시판 만들때는 jdk 설치하고, 그냥 이클립스에서 스프링 프로젝트 띄워서 tomcat이랑 mysql 연동해서 뚝딱 만들어봤겠죠.


WAS서버는 톰켓이 아니라 JEUS나 웹로직을 사용하고, DB는 oracle이나 db2, mssql을 사용하겠죠.

model2 형식의 게시판이나 사이트가 운영되는 곳도 종종있겠지만 대부분은 스프링프레임워크를 이용하는것으로 알고 있습니다.


스프링 프레임워크는 자바 플랫폼을 위한 오픈소스로 애플리케이션 프레임워크로서 간단히 스프링(Spring)이라고도 불립니다.

동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있습니다. 

대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로서 쓰이고 있습니다.

3개월 국비지원 자바학원에가면 100이면 100 다 가르치는 것 같더군요.


간혹가다가 좀 프로그램에 무지한 인력업체 해드헌터들이 요즘 스프링 안쓴다,전자정부 프레임워크 쓴다 라는 아주 재미없는 농담을 하시는 때가 있는데. 무시하셔도 될만큼 무사합니다.

사실 컴퓨터공학과 전공자이라면 스프링 프레임워크를 손될 일이 없습니다. 웹개발자를 하면서 독학으로 따로 배울 확률이 크죠.


길다면 긴 시간이긴 한데 역사가 그렇게 오래되진 않은것 같습니다.

로드 존슨이 2002년에 출판한 자신의 저서인 Expert One-on-One J2EE Design and Developement 에 선보인 코드를 기반으로 시작하여 점점 발전하게 되었다고 합니다. 

2003년 6월에 최초로 아파치 2.0 라이선스로 공개되었다고 합니다.


이 프로그램의 종류 애플리케이션 프레임워크로, 개발자는 피보탈 소프트웨어입니다. 자세한 정보는 없군요.최근 버전은 4.3.8까지 요즘에 나왔습니다.

운영 체제로는 크로스 플랫폼 (멀티 플랫폼)입니다. JAVA 웹개발자들이 쓰므로 당연하지만 플랫폼은 자바 가상 머신을 사용합니다.

현재는 2017년 기준 4.3.8버전까지 나왔습니다.


위키피디아에 등제된 스프링 프레임워크의 특징입니다.

사실 깊게 파고들면, 두꺼운 책 한권으로 알아먹지도 못할 용어들로 내용을 가득채워져있었던 기억이 나네요.

전반적으로 이런 특징이 있다 정도고, 실제로는 예제 따라해 가면서 게시판을 만들어보면 이게 어떤건지 어느정도 감이 옵니다.


스프링은 다른 프레임워크에 비해 다음과 같은 특징을 가집니다.

경량 컨테이너로서 자바 객체를 직접 관리합니다. 

각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있습니다.


스프링의 특징입니다.

POJO(Plain Old Java Object) 방식의 프레임워크입니다.. 일반적인 J2EE 프레임워크에 비해 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍습니다.

제어 반전(IoC : Inversion of Control)을 지원한다. 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출합니다.

의존성 주입(DI : Dependency Injection)을 지원한다. 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜줍니다.

관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)을 지원한다. 따라서 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있습니다.

영속성과 관련된 다양한 서비스를 지원한다. iBATIS나 Hibernate 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공합니다.

확장성이 높다. 스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리가 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이합니다.


스프링에서 사용되는 주요 모듈은 다음과 같습니다.

-제어 반전 컨테이너

제어 반전(IoC: Inversion of Control) 컨테이너는 스프링의 가장 중요하고 핵심적인 기능으로서 자바의 반영(reflection)을 이용해서 객체의 생명주기를 관리하고 의존성 주입(Dependency Injection)을 통해 각 계층이나 서비스들간의 의존성을 맞춰줍니다. 

이러한 기능들은 주로 환경설정을 담당하는 XML 파일에 의해 설정되고 수행됩니다.


-관점 지향 프로그래밍 프레임워크

스프링은 로깅이나 보안, 트랜잭션 등 핵심적인 비즈니스 로직과 관련이 없으나 여러 곳에서 공통적으로 쓰이는 기능들을 분리하여 개발하고 실행 시에 서로 조합할 수 있는 관점 지향 프로그래밍(AOP)을 지원합니다. 

기존에 널리 사용되고 있는 강력한 관점 지향 프로그래밍 프레임워크인 AspectJ도 내부적으로 사용할 수 있으며, 스프링 자체적으로 지원하는 실행시(Runtime)에 조합하는 방식도 지원합니다.


-데이터 액세스 프레임워크]

스프링은 데이터베이스에 접속하고 자료를 저장 및 읽어오기 위한 여러 가지 유명한 라이브러리, 즉 JDBC, iBATIS(MyBatis), Hibernate 등에 대한 지원 기능을 제공하여 데이터베이스 프로그래밍을 쉽게 사용할 수 있습니다.


-트랜잭션 관리 프레임워크

스프링은 추상화된 트랜잭션 관리를 지원하며 XML 설정파일 등을 이용한 선언적인 방식 및 프로그래밍을 통한 방식을 모두 지원합니다.


-모델-뷰-컨트롤러 패턴

스프링은 웹 프로그램밍 개발 시 거의 표준적인 방식인 Spring MVC라 불리는 모델-뷰-컨트롤러(MVC) 패턴을 사용합니다.

DispatcherServlet이 Contoller역할을 담당하여 각종 요청을 적절한 서비스에 분산시켜주며 이를 각 서비스들이 처리를 하여 결과를 생성하고 그 결과는 다양한 형식의 View 서비스들로 화면에 표시될 수 있습니다.


-배치 프레임워크

스프링은 특정 시간대에 실행하거나 대용량의 자료를 처리하는데 쓰이는 일괄 처리(Batch Processing)을 지원하는 배치 프레임워크를 제공합니다. 

기본적으로 스프링 배치는 Quartz 기반으로 동작합니다.


사실 요 스프링 프레임워크라는게, 자바개발자의 시작이자 끝일거같다는 생각이듭니다.

아직 제 짧은경력으로 뭐라 그러긴 어렵지만, 최소 향후 10년까지는 프로젝트에서 스프링 프레임워크 다룰줄 아는 개발자를 뽑을것이고(금융권, 공공기관등) 제대로 익혀두면 좋겠더군요.

model2 형식으로 jsp에서 각 페이지마다 쿼리 만들고, 디비 연결해서 게시판 만들던거를 생각해보면 훨씬 업무가 간단해 지고, 유지보수도 용이해집니다.



Posted by Joseph514
IT이야기/입코딩2017. 6. 9. 11:19


-위키리크스(WikiLeaks)가 무엇인지 알아보겠습니다.


19대 대선후보 홍준표 후보가 대선토론때 한번씩 이야기하던 위키리스크를 기억하십니까?


원문보기

"

...

이날 홍 후보는 일심회간첩단과 관련해 "당시 김승규 국정원장이 일심회 간첩단 사건과 관련된 사건들을 수사하면서 보니 문재인 후보의 세력들, 386 운동권 세력들이 많이 개입했고 일부는 북한에 정보를 넘겼다"며 

"노무현 정부에서 수사를 그만두라고 해서 수사가 중단됐고 그걸 버시바우 당시 미국 대사가 미국에 보고해 위키리스크에 폭로됐다"고 주장했다.

...

"


후에 정정하기는 한 거 같은데, 처음 홍준표 후보가 이야기한 '위키리스크'가 아니라 '위키리크스'입니다.

과연 위키리크스란 무엇일까요?


아래는 위키리크스 사이트입니다.

위키리스크

그리고 한국어로 위키리크스도 있습니다.

위키리스크 한국

나무위키에 있던 내용을 보면

한국 관련 외교 전문들을 한국어로 번역하는 프로젝트를 진행하고 있으며, 이미 상당히 많은 문서들이 번역 완료되었다고 합니다. 다만 메인페이지 사이드바부터 천안함 음모론이나 세월호 음모론 같은 정치적 견해를 피력하며, 번역 문서 한 가운데는 오마이뉴스나 자주민보의 기사 내용을 임의로 넣었습니다. 

위 사이트는 단순한 정보 번역 전달 사이트는 아닙니다. 가려 읽으라는 조언을 합니다.



 

위키리크스에 관한 명언들입니다.


"우리는 너무 젊었고, 어리석었고, 교만했다. 그러나 우리가 옳았다"

(We were young, we were foolish, we were arrogant, but we were right.)

– 애비 호프먼(Abbie Hoffman)


"정보자유법 만큼이나 중요한 저널리즘 도구가 될 수 있다."


전세계 정부와 기업의 비윤리적 행태를 담은 기밀문서들을 공개하여 폭로하는 미디어 위키 엔진 기반의 사이트입니다. 

이것만 보면 위키피디아나, 리브레위키, 제타위키처럼 아무나 글을 고칠수 있는게 아닌가.. 하는 의심도 들긴 한데.

다음 설명을 보면 초창기에는 위키위키로 출발하였으나 이후 위키의 이념인 자유로운 편집 방침이 허용되지 않고 위키리크스 운영자들의 손에 의해서 편집되는 것으로 바뀌었기 때문에 형식상으로는 위키위키이나 운영방식은 위키위키라고 할 수 없게 되었습니다. 트위터나 위키위키사이트들처럼 아무나, 아무글을 올릴 수 있는건 아닌가 보네요. 아래에 이야기할 800여명의 위키러 운영자들의 손에 의해서 쓰여진다는 것입니다. 위키라는 이름을 달고 있지만 위키미디어 재단과는 무관합니다. 그리고 위키릭스라고도 표기한다고 합니다.


나무위키에서 발췌한 설명입니다.

07년 설립된 이래 중국의 반체제 인사와, 미국, 호주등의 언론인, 수학자, 공학자들이 참여했다고 스스로 밝히고 있습니다. 스웨덴과 아이슬란드에 서버를 구축해놓고, 정크파일과 암호화를 이용하여 해커의 공격을 방어하고 있습니다. 2010년 기준 5명의 멤버가 무보수로 운영하고 있다고 합니다.

아직까지도 추적받는 것을 염려할 필요 없이 익명으로 문서를 공개할 수 있어서 비밀리에 문서를 올리려는 제보자들에게는 유용한 매체로 실제로 여러 기밀 문건들을 공개중입니다. 

2010년 초를 기준으로 120만여건의 문서들이 있으며 약 800여명의 위키러들이 간간히 활동하고 있는 듯합니다.

2008년에 샌프란시스코에서 위키리크스의 폐쇄판결이 내려졌지만, 2017년 현재까지 여전히 유지중입니다. 

한국 관련 문서도 다수 올라와 있는 걸로 봐선 한국에서도 활동하는 사람이 있을 가능성이 있기는 하지만 확실치는 않습니다. 

덧붙여 러시아, 이스라엘, 북한, 중국에선 위키리크스에 접속할 수 없다고 합니다. 

애초에 북한은 특정 소수가 아니면 인터넷자체에 접속을 못하고, 대부분 그들만의 인트라넷인 광명망에만 사용가능합니다.

안타깝게도 정부나 기업의 후원을 받지 않고 철저히 기부만으로 사이트가 운영되기 때문에 자금 부족으로 도움을 요청하고 있습니다. 

위키리크스 운영진에 따르면 연당 60만 달러 이상이 든다고 합니다. 

2009년 12월부터 2010년 3월 사이에는 잠시 서비스를 멈추고 기부를 호소하는 글과 동영상 하나만 올려 놓았던 적도 있었습니다.


위키리스크의 업적으로는 

9.11 테러 관련한 기밀 폭로가 있습니다. 

2001년 9월 11일 9.11 테러 당시 정부기관 관계자들이 주고받은 문자 메시지 57만 3천여건이 까발려진 것입니다.

그리고 2010-2011 아랍권 민주화 운동에 영향을 주었는데, '줄리언 어산지'의 위키리크스에서 공개한 정치 지도층의 적나라한 부패가 아랍에서 트위터 등으로 퍼지며 혁명이 시발하는데 일조하였다고 합니다.


그 외에도 세계적으로 막대한 영향력을 끼치고 있습니다.

그런 그들이 당연히 정부에서 좋게 보이지는 않겠죠.


이런 기사가 있더군요.


위키리크스, 바다 한 가운데로 피난간다

원문보기


"

보도에 따르면 위키리크스는 어떤 정부나 기관도 자신들의 정보 입수 및 기밀 폭로 활동을 제한하지 못하도록 아예 대륙으로부터 멀찍이 떨어진 바다 위에 서버를 설치하는 방안을 추진하고 있다. 

그럴 경우 해상법의 적용을 받게 돼 법적인 구속으로부터 자유로울 수 있기 때문이다.

위키리크스 활동에 정통한 몇몇 소식통에 따르면 현재 위키리크스 재정 후원자들이 비밀리에 이같은 작업을 진행 중이며 세계에서 가장 작은 나라로 알려진 '시랜드 공국'이 유력한 피난 후보지로 떠오르고 있다.

"


위키리크스를 고사시키려는 미국 정부의 노력에도 불구하고 위키리크스는 유럽에서 미국이 벌인 감청 자료들을 폭로하는 등 아직까지도 버티고 있는 중이라고 합니다.


물론 이 위키리크스도 비판 받는 점이 있습니다.

현실국제정치의 가면을 벗겼다는 점이나 처음의 아파치 민간인 공격영상 등 군 내 각종 비리를 폭로한다는 점에서 긍정적이라고 볼 수 있으나, 아프가니스탄 정보원 실명공개 이후 위키릭스와 어샌지의 무분별한 행태에 대한 비판의 목소리가 있습니다. 특히 언론을 자처하면서 정보원 보호를 포기, 방기했다는 점 때문에 욕을 먹었습니다. 


외교 전문 공개에 대해서도, 위키리크스의 마구잡이식 폭로가 오히려 각국 정부들의 정보공개를 움츠러들게 만들어 오히려 지금까지 보장되던 투명성이 훼손되는 반작용을 유도할 수 있다는 우려를 제기하기도 합니다. 

실제로 전문 공개 이후 미 의회에서 가장 먼저 터져 나온 소리가 위키리크스 규탄이 아니라 기밀문서망에 대한 접근권이 지나치게 많은 사람들에게 부여되어 있다며 정보당국을 질책한 것이었습니다. 

또한 이번 유출자료 중에는 기밀열람권한 없이도 접근할 수 있는 정보도 다수 포함되어 있다고 알려져 있는데, 앞으로 이런 민감한 문서에 대한 관리가 엄격해질 것이 불을 보듯 뻔한 상황이니 장기적으로 볼 때는 

오히려 전세계 정부들, 특히 미국의 정보공개 흐름을 크게 후퇴시켰다고 볼 수도 있습니다. 


게다가 주재국 외교관 인원들의 정보활동은 일종의 국제관습법화되어 거의 서로 짜고치는 고스톱이 되어있는 현실에서, 지난번 아파치 민간인 공격같은 부당한 비리도 아닌 멀쩡한 외교 문서를 터뜨려 놓고 미 정부의 위선 운운하는 것은 이런 대규모 폭로사태에 대한 명분으로는 많이 부실하다고 할 수 밖에 없습니다.


'위키리크스'. 이름에서 알수있듯이, 위키리크스라는 게 저는 그냥 나무위키나, 다른 위키위키 사이트처럼 별 공신력 없는 사이트인 줄 알았습니다. 근데 실상은 목숨 걸고, 서버를 관리하면서 정부의 내부 고발자들에 의한 비리를 폭로하는 세계적으로 영향력을 끼칠 수 있는 사이트였군요. 위키리크스도 사람이 만들은 이상, 위키리크스에 등재됐다고 100% 진리라고 생각하지는 않지만 그들의 노고로 인해서 많은 사람들이 진실을 알게 되는 고마운 사람들이네요.


출처 : 나무위키, 본인생각


Posted by Joseph514
IT이야기/입코딩2017. 6. 8. 13:45

-[IT용어정리]나스(NAS)란 무엇일까요?


구글에서 검색하면 나오는 Inter NAS입니다.


사람들이 남는 데스크탑으로 나스 서버를 구축했다. 나스 서버에 있는 파일을 받았다. 다운 받아놓은 동영상을 불러왔다. 이런 이야기를 하더군요.

부끄럽게도 컴퓨터 만지고 논지도 오래 됐고, 컴퓨터 공학 학사 전공하고, 웹 개발자로 먹고 산지는 제법 되었지만, 그다지 신경을 안 쓰고 산덕에, 나스라는 것을 있는지 뭔지도 몰랐습니다.

제 머리속에 있는 나스란


Long live the idols, may they never be your rivals

Pac was like Jesus, Nas wrote the bible

우상들이여, 영원하길. 또 그들이 내 라이벌이 되지 않길.

팍은 예수였고, 나스는 성경을 써냈지.


Hiphop is dead를 부른 뮤지션 나스 밖에 몰랐습니다. 스팰링도 똑같이 나스(Nas)군요.

학부생시절에, 알고리즘과 자료구조를 공부하기 보단, 가사와 라임에 집중했던 것이 문제였던거 같습니다.


-당연한 이야기지만 이분은 아닙니다.



나스(NAS)란 Network Attached Storage 네트워크 결합 스토리지 입니다. 

쉽게 말하면 LAN으로 연결하는 외장 하드디스크입니다. 

컴퓨터에 직접 연결하지 않고 네트워크를 통해 데이터를 주고 받는 저장장치를 말합니다.

반대 개념은 컴퓨터에 직접 연결해서 쓰는 DAS(Direct Attached Storage)가 있습니다. DAS로는 내장형 하드디스크나 eSATA 규격 외장 하드디스크를 예로 들 수 있습니다..

 

현대의 클라우드 스토리지와 비슷한 부분이 많습니다. 구조적으로는 스토리지 서버를 단순화, 소형화한 것이구요.

과거에는 SOHO 나 기업에서 문서 공용 저장소 등의 목적으로 사용하였습니다. 

일반적인 리눅스 서버를 통해서도 유사하게 구현이 가능하지만, 리눅스 서버는 유지보수가 귀찮은 관계로 전용 NAS 솔루션을 사용하는 경우가 많았다고 합니다. 

2015년 전후로는 SSD 용량을 보조할 HDD의 HDD에 의한 HDD를 위한 독자적인 기기의 유용성이 널리 알려지기 시작했으며, 일반 개인이 부담 없이 사서 쓸 수 있는 제품과 소규모 사무실의 업무용이 주력 제품군으로 떠오르기 시작했습니다.


NAS의 특징을 설명 드리겠습니다.


첫번째로 데이터 공유가 쉽습니다.

NAS의 초기 목적은 여러 사람이 데이터를 쉽게 공유하기 위함이었습니다. 

윈도우등 PC 운영 체제에서도 공유 폴더 설정이나 파일 서버를 꾸미는 등을 통해 같은 기능을 제공합니다. 

그러나 공유 폴더 기능은 PC를 계속 켜놓아야 하고 리소스를 쓰게 만들어 작업을 느리게 만듭니다. 

파일 서버는 성능이 좋은 대신 전력 소비량이 많고 구매 비용도 비싸며 관리에도 손이 많이 듭니다. 

NAS는 간단한 초기 설정만 거치면 대부분의 운영체제, 컴퓨터에서 어렵지 않게 데이터를 공유할 수 있습니다. 비용 대비 효율성이 뛰어납니다.


두번째로 저장장치를 가지고 다닐 필요가 없습니다.

NAS는 내부 네트워크와 인터넷과 연결할 수 있어 외부에서 인터넷을 통해 NAS의 데이터를 읽고 기록할 수 있습니다. 인터넷 회선의 성능에 따라서 데이터 전송 속도는 제한받지만, 외장 하드디스크나 USB 메모리의 필요성이 상대적으로 줄어듭니다.

NAS는 일반적인 하드디스크를 기반으로 하여 용량의 압박을 받는 휴대기기에는 구세주나 다름 없습니다.

모바일 기기 중에서는 (특히 스마트폰) 내장 저장공간이 128GB 이상으로 넘어가는 기기를 찾기 어렵지만 NAS는 가정이나 중소기업용 모델로도 적게는 1~2TB, 많으면 10TB 이상의 용량을 자랑합니다. 

일부 회사에서는 하드디스크를 제외한 제품을 팔기도 하는데, 이를 이용해 집에서 노는 하드디스크를 장착해 쓰기도 합니다. 320GB, 200GB 하드를 꼽아도 유료 클라우드보다 용량이 많습니다.


세번째로 다재다능한 용도로 사용될수 있습니다.

NAS의 원래 목적은 파일 서버의 목적인 데이터의 공유였습니다. 

하지만 지금은 기능이 계속해서 늘어나 영상스트리밍,트랜스코딩 스트리밍. 토렌트, 데이터 백업, 채팅봇, 음악스트리밍, 가상머신, 웹페이지 호스팅 등 대체 NAS하고 서버를 분류를 왜 하는지가 의문일 정도로 용도가 다양합니다. 

커스텀도 가능한데 가상 OS를 설치하고 여러가지 작업을 다 하는 사람도 있습니다. 

무거운 작업을 하기에는 어렵지만 개인 사용자가 쓰기에는 충분한 성능이라고 합니다. 

일례로, 컴퓨터를 잘 다루는 정치인으로 유명했던 고 노무현 전 대통령이 자신이 개발에 참여했던 청와대 내 문서 관리 시스템인 e지원을 봉하마을 사저의 업무 시스템에 백업본을 만들어두어 사후 논란이 된 적이 있었는데, 이 때 고성능 NAS에 스토리지 복사본을 장착해 시스템을 구축했다는 것이 언론 보도들을 통해 알려졌었던 적이 있습니다. 

한 마디로 상용 서버에서 돌릴 수 있는 거의 모든 프로그램을 NAS에서도 동작시킬 수 있다는 것입니다.

사실 애초에 NAS도 고급화 되기 시작하면 일반 서버랑 차이점이 사라지기 시작했습니다. 특히 기업용 NAS정도만 되면 거의 동일한 수준이라고 합니다.


네번째로 저렴한 유지비를 들수 있습니다.

ARM이나 MIPS, 그리고 아톰 CPU를 기반으로 만들어진 제품이 대부분이라 전기를 적게 먹습니다. 

하드디스크 소비 전력을 뺀 소비 전력이 10W 정도인 제품이 대부분입니다. 따라서 서버에 비해 압도적인 전력 소비량 대비 효율성을 보여줍니다. 

2016년 이후 인텔 기반 CPU의 전력 소비량은 많이 줄어들었습니다. IDLE 상태의 전력 소비량이 크게 개선되었기 때문입니다. 

각종 포털 사이트가 제공하는 클라우드 저장소의 용량 추가보다 월등히 저렴합니다. 

당장 100GB를 몇 달 추가하는데 1만 원 이상의 돈을 투자해야 하지만 NAS는 하드디스크를 장착해 사용하므로 가성비가 우월합니다. 전기요금 외에 별다른 월 이용료가 없습니다.

또한 DDNS를 위한 도메인 주소의 경우 무료도메인도 찾아보면 많습니다. 굳이 따로 구입하더라도 일 년에 2만원이면 갱신이 됩니다.

기존에 사용하던 구형 컴퓨터에 NAS용 운영체제를 깔거나 NAS용 프로그램을 사용해서 x86 컴퓨터로 NAS를 만들어서 추가 비용을 절감할 수 있습니다. 

단, 구형 제품이여서 전력 소모가 상당할 수 있으니 전기요금에 주의해야 합니다.


다섯번째로 보안을 들수 있습니다.

포털 사이트가 운영하는 클라우드 서비스는 안정성은 뛰어나다고 합니다. 

그러나 저장된 데이터가 안전한지는 확실하지 않습니다. 

서비스 운영자가 임의로 열람하여 자신들의 빅 데이터를 구축하거나 관심 기반 광고를 다듬는데 이용할 수도 있습니다.

한국과 중국, 그리고 이슬람 문화권 국가에서는 정부나 사법기관의 요구에 데이터를 검열 할 가능성도 있습니다. 

실제로 대규모 기업의 스토리지 서비스 약관을 읽어보면 이에 대해 언급해 놓은 조항이 못 해도 하나씩은 있습니다. 

NAS는 자신만의 클라우드 서비스로서 누군가에게 압수라도 당하거나 해킹을 당하지 않는 이상 데이터 유출 가능성은 낮습니다. 

혹은 https을 활용해 SSL을 적용해 보안을 강화할 수도 있습니다. 

다만 대부분의 NAS는 대기업의 서버와 비교했을 때 보안 성능은 떨어지는 편이므로 외부 공격에 취약할 수 있습니다. 

즉, 기기 외적인 이유로 데이터가 유출될 가능성이 낮고 보안 성능은 낮다는 뜻입니다. 

따라서 암호는 보안성이 보장될만한 충분히 복잡한 형태를 쓰고, 사용하지 않는 기능은 비활성화 시키며, 안 쓰는 포트는 닫아두는 것이 좋습니다.

NAS도 컴퓨터이기에 해킹 사례가 있습니다. 

대표적으로 시놀로지의 DSM이 해킹 당해 도기코인이라는 가상 화폐 채굴기로 쓰인 사례입니다.

기타 보안 이슈들도 있습니다. 가령 NAS 운영체제에 제조사가 백도어를 만들어 놨다는 등의 의혹이 있을 수 있습니다. 다른 기기들의 사례들을 보면 있을 수 있는 가정입니다. 


NAS에는 장점만이 있는건 아니고, 단점도 존재합니다.

단점을 이야기 해보겠습니다.

첫번째로 네트워크 연결은 필수입니다.

당연한 이야기겠지만, 유선이든 무선이든 네트워크 연결을 해야 합니다. 

인트라넷처럼 인터넷 연결이 되지 않는 분리된 네트워크에서도 NAS는 쓸 수 있습니다. 

그리고 NAS에 따라서는 인트라넷 마저 없을 때를 대비하여 USB로 NAS 비슷하게 쓸 수 있는 모델도 있습니다. 

하지만 원격 연결을 하려면 외부 인터넷 연결이 필수입니다. 

현대에는 데이터 무제한 요금제, 통신사 Wi-Fi 등 각종 대규모 무선 네트워크 덕분에 접속은 용이합니다. 

하지만 회선 속도에 영향을 받으므로 느린 회선에서는 속 터지는 속도를 경험할 수 있다고 합니다. 

NAS가 쓰는 회선과 자신이 접속한 회선의 속도가 중첩되면 더더욱 느려질 수도 있습니다. 


두번째로 성능의 한계를 들수 있습니다.

대부분의 개인용 시판 NAS는 CPU를 임베디드 모델(주로 ARM)로 쓰며, 이는 X86(일반 서버)에 비해 성능이 떨어집니다. 

그래서 제대로 된 서버처럼 이것저것 서비스를 올려 쓰기는 어렵습니다. 

이런 용도로 쓰려면 NAS보다는 일반 데스크톱 PC 또는 서버를 쓰는 편이 효율성을 생각하면 더 싸게 먹힙니다. 

물론 전기요금 부담과 소음 문제는 개인의 부담할 책임입니다. 

그래서 좀 더 상위 제품인 아톰같은 저전력 x86 CPU를 사용한 제품들이 생겼으며 아예 직접 저전력 PC를 기반으로 고성능 NAS를 자작하는 사례도 많아졌습니다.

굳이 NAS라는 틀 안에서 해결해야겠다면 별도의 NAS를 통해 부하를 분산해야 합니다. 분산으로도 해결되지 않는다면 고성능 NAS를 자작하던가 다른 방식을 생각해보는 편이 좋습니다. 

제일 중요한점은 바로 속도입니다. 

네트워크 속도가 빨라도 직접 컴퓨터에 연결된 대부분의 외장하드보다 느립니다. 

NAS용도가 공유 및 외장하드 없이 저장할 수 있는 장치인데 다운/업로드 속도를 우선시한다면 NAS는 별 의미없습니다. 물론 나스를 운영하다보면 기가인터넷 상급공유기 도메인을 자동적으로 도입하게 됩니다.


세번째로 설정의 복잡함을 들수 있습니다.

NAS는 서버보다는 관리가 쉽고 설정도 어렵지 않지만, 상대적으로 그렇다는 뜻입니다. 

무언가 서비스 하나를 더하려면 여러 설정을 해야 합니다. 

단순한 파일 공유조차 네트워크 기본 설정, NAS 이름 설정, 드라이브의 포맷 및 할당, 사용자 및 사용자그룹 지정이라는 작업을 반드시 해야 합니다. 서비스를 더 올린다면 설정은 늘어날 수밖에 없습니다. 

게다가 NAS나 서버나 근본은 똑같은 리눅스입니다. 인터넷 공유기조차 설정하지 못해 쩔쩔매는 사람이 태반인 현실 앞에 NAS도 공부를 하려는 의지를 갖춘 사람만 제대로 다룰 수 있습니다.

가령 기본적으로 공유기의 포트포워딩(특정아이피의 특정포트를 외부 네트워크에 여는 설정)은 필수로 알아야 합니다. 프로토콜 (SMB,FTP,WebDAV)의 사용 방법, 조금 파고들면 리눅스 운영체제의 특성과 터미널 명령어나 제조사가 만든 OS의 특성도 알아야 합니다.

또한, NAS에서 쓰이는 파일 시스템은 주로 리눅스 파일시스템이므로 윈도우와 호환 문제가 일어날 수 있습니다. 그리고 NAS에 쓰던 하드를 컴퓨터에 연결해도 파일들을 볼 수 없는 불편함도 있습니다. 

이 정도면 컴퓨터의 아주 익숙한 사람이라도 쓰는데 어려움이 있을 정도입니다. 윈도우의 파일 시스템인 NTFS를 쓰는 NAS도 있지만 수도 적고 한계는 있습니다. 


NAS를 제조하는 대표 브랜드로는 시놀로지(SYNOLOGY),큐냅(QNAP),아이피타임(IPTIME)가 있으며, 그외에도 웨스턴 디지털, 시게이트, 버팔로 등등 여러 회사들이 자체적인 NAS를 제작해서 내놓고 있습니다. 

또한, 세마전자등 일부 제조사에서는 외장하드(혹은 외장하드 케이스)에 Wi-Fi 공유 기능을 달아 FTP, SAMBA, DLNA등을 지원하는 간이 NAS로 사용할 수 있게 했습니다. 

클라우드 서비스(N드라이브, Dropbox, Onedrive, Google Drive등)를 대체하려는 목적으로 사용에는 적합하지만 본격적인 NAS보다 기능면에서 떨어지지만 그 대신 초보자도 사용이 쉽다는 점은 장점이 있습니다.


무언가 상당히 쓰면 편리할거같고 재미있 을 거 같아 보입니다. 하지만 이런 호기심 충족을 위해서는 섣부르게 지갑을 열기가 어렵지요. 그래서 찾아보니, NAS를 자작으로 만들 수 도 있는데요.

-다락방 속의 서버입니다.


보통 서버를 구축 할 때 자주 쓰는 방법인데, 

우선 구형 PC를 이용해서 만들어보는 것입니다.

쓸모없는 컴퓨터를 해놀로지 같은 걸 깔아서 NAS화 시키는 경우는 꽤 흔한 편이며 싸기도 합니다. 

눈에 띄지 않는 다락방에 두고 서비스를 한다고 외국에서는 '다락방 서버' 라고도 부른다고 합니다.

제 짧은 영어로 보면 Attic server? server in Attic 정도로 쓰이는거 같더군요.

한국에서는 대부분이 아파트나 빌라에 살기에 다락방이 없죠.

학부생 시절에 과동아리 데스크탑을 마우스랑 키보드 모니터도 없이 리눅스 설치해 두고, 포트 열어둔채로 빈 컴퓨터실 구석에 꽂아서 사용했던 게 기억나네요.

보통 서버를 구축할 때 자주 쓰는 방법인데, 우선 구형 PC를 이용해서 만들어보는 것입니다.

쓸모없는 컴퓨터를 해놀로지 같은걸 깔아서 NAS화 시키는 경우는 꽤 흔한 편이며 싸기도 합니다. 

눈에 띄지 않는 다락방에 두고 서비스를 한다고 외국에서는 '다락방 서버'라고도 부른다고 합니다. 

따로 시스템을 살 필요 없이 기존에 사용하는 장비를 전환하다 보니 비용이 적게 듭니다. 

그리고 그래픽 카드나 사운드 카드같이 NAS에는 필요 없는 부품을 제거해 팔아버릴 수도 있구요. 

성능 또한 ARM 계열 NAS보다 월등하다고 합니다. 

물론, 구형 일반 PC는 전성비가 낮아 전력소모가 큰 단점이 있습니다. 

평범한 조건이라면 150W 정도가 소모될 수 있으며 전기세 폭탄을 맞게 될 수도 있습니다. 

구형 노트북(저전력 설계가 아닌 제품)을 사용할 경우 25W 정도의 전력이 소모됩니다. 

자판이나 LCD가 망가져 중고로 팔지 못할 때에도 NAS로는 사용하는데 지장이 없습니다. 

그리고 성능 나쁘기로 유명한 넷북 1세대라 하더라도 ARM 계열 NAS보다는 성능이 더 좋다는 장점도 있습니다. 

용량을 늘리기 위해 외장하드를 쓰게되면 USB 2.0의 속도가 걸리는게 문제입니다.

나중에 한번 포스팅 하겠지만 라즈 베리파이 같이 컴퓨팅 성능이 꽤 되는 저렴한 개발자 보드를 이용해 임베디드 개발자보드로 NAS를 제작하기도 합니다. x86 저전력 저소음 자작 NAS를 이용하기도 합니다.

그리고 PC나 서버를 아예 NAS처럼 만드는 전용 운영체제도 있습니다. FreeNAS와 NAS4Free(Free NAS에서 갈라진 (포크) 프로젝트), OpenMediaVault(OMV), Xpenology 같은 운영체제가 대표적인 예입니다.

PC에 이 운영체제를 설치하고 초기 설정만 하면 나머지는 시판 NAS 사용과 별반 차이가 없게 된다.


안드로이드 폰으로 웹서버도 가능하다는 이야기를 들었지만, 당연하게도 안드로이드 스마트폰과 휴대폰 충전기로도 간단한 NAS의 흉내가 가능합니다. 

가장 큰 장점은 아주 싸게 기기를 구성할 수 있다는 점과 저전력입니다. 

완충된 스마트폰이 소모하는 전력은 2.5W 미만으로 매우 적습니다. 

단점으로는 용량, 속도 등을 들 수 있습니다. 용량을 보면, 구형폰의 경우 microSD를 합쳐도 32GB~64GB 정도로 정상적인 하드디스크를 장착한 상용 NAS 용량에 미치지 못합니다. 

다만, 이는 분리형 배터리를 사용하는 폰에 직접 전원을 꽂고 OTG 기능을 이용해 외장하드를 달아서 보완할수 있습니다.


뭔가 실증 잘내고 귀차니즘이 많지만 집에 컴퓨터나 노는 노트북으로 한번 자작으로 구축해볼까 하기도 합니다. 전용 프로그램을 쓰면 인터넷에 보니 별로 어려워 보이는 건 없더군요.


출처 : 나무위키, 본인생각



Posted by Joseph514
IT이야기/입코딩2017. 6. 7. 17:55

-[용어정의]서버(Server)


서버(Server)란 클라이언트에게 네트워크를 통해 서비스하는 컴퓨터입니다.


나무위키에 있는 서버에 대한 내용을 발췌해 보겠습니다.

인터넷은 수많은 서버들이 거미줄처럼 얽혀서 형성된다고 합니다. 

홈페이지를 운영하려면 서버가 반드시 필요하며, 온라인 게임이나 웹게임들도 서버를 통해서 서비스를 하고 있습니다. 보통 어느정도 규모가 있는 기관에서는 데이터베이스, 웹 어플리케이션 서버 등등에 방화벽, 라우터등이 붙어 네트워크를 형성합니다.

구글 데이터센터의 서버들처럼 랙 안에 설치되어 항온항습기를 사용해 온도/습도가 유지되는 환경에서 보관되어 지는 경우에서 부터, 그냥 일반적인 PC를 사용하여 서비스를 제공하는 경우까지 매우 다양합니다. 

물론, 전문적으로 서비스를 제공하는 업체에서는 전용의 장비를 사용하는 것이 일반적입니다.

서비스 규모가 커질수록 서버의 규모도 크고 아름다워지기 때문에 구글이나 페이스북같은 경우 자체적으로 인터넷 데이터 센터를 운영합니다. 

국내에서도 2013년 6월 네이버에서 데이터 센터를 완공하여 운영하기 시작했는데 구글데이터센터나 네이버 데이터 센터 그리고 페이스북 데이터 센터를 보고있자면 이게 서버인지 우주기지인지 구분이 안될 정도로 엄청난 것을 알 수 있습니다. 

접속량이 많을 수록 서버의 부담도 많아지기 때문에 규모에 따라서 운영하는 서버의 성능과 대수가 다릅니다. 

온라인게임들이 주기적으로 점검을 하는것도 바로 서버점검을 하기 위함이며, 사용자가 몰려서 게임이 제대로 안돌아간다면 바로 이 서버가 감당하지 못해서 생기는 현상입니다. 

법적으로, 인터넷 컨텐츠를 수사할 경우 서버의 소재 국가에 따라서 어느 나라 법을 적용하느냐가 달라지며 이것도 속지주의의 일종입니다. 

나무위키는 서버가 해외에 위치해 있어 대한민국 법률이 적용되지 않습니다. 하지만 작성자가 대한민국에 있다면 제한적으로 적용될 수 있습니다.

VPS 호스팅 업체에서는 가상서버라는 것을 임대해 줍니다. 

물리적 서버를 분할하여 root권한을 가진 서버를 가질 수 있습니다. 

가상서버 한개를 임대하면 웹서버를 포트를 정하여 여러개 운영할수 있습니다. 이론적으로 사용 가능한 포트 번호는 0~65535 사이이나, 이 중 상당수의 포트는 이미 예약되어 있다고 합니다. 

1024 이하의 포트는 정해진 프로토콜 이외에는 함부로 사용하지 않는 것이 좋습니다.



뭔가 굉장히 어렵게 설명되어 있지만 딱 잘라 말해서 서버도 컴퓨터입니다. 


우리가 쓰는 컴퓨터와 똑같은 종류의 부품을 사용하기 때문에 가정에서 쓰이는 평범한 컴퓨터를 서버로 쓸 수도 있습니다. 

다만 안정성을 높이기 위해 좀 더 비싼 고급 부품을 쓰고 하드디스크와 전원장치는 2개 이상씩을 달아 서버를 끄지 않는 상태에서도 교체가 가능한 비싼 컴퓨터를 사용합니다. 

가정용 컴퓨터는 나만 필요할 때 쓰고 끄면 되지만 서버의 경우는 다른 사람들이 접속하여 사용하는 셈이므로 특별한 일이 없다면 24시간 내내 돌리게 됩니다. 

그래서 굳이 RAID 확장카드 달고 하드디스크도 3~4개씩 꽂아서 RAID로 묶습니다. 

일반적으로 쓰는 (옛날은 EIDE지만)SATA같은 인터페이스가 아닌 SCSI나 SAS를 이용합니다. 

이들은 컨트롤러가 제어하는 인터페이스여서 CPU랑 독립적으로 돌아가기 때문에 CPU 점유율이 낮아서 안정성을 요구하는 서버에 잘 맞는 인터페이스지만, 상당히 가격이 비싸며 컨트롤러 카드도 가격이 비쌉니다.

개인이 운영하는 웹사이트/웹게임 정도는 개인용 컴퓨터로도 홈서버로 서비스에는 무리가 없지만, 가정용 회선으로는 부족할 수도 있습니다. 

보통 DDoS 테러를 한다고 하면 타겟이 되는것이 바로 이 서버들이라고 하더군요. 접속량을 과도하게 늘리면 서버가 감당하지 못하다 뻗어버림으로써 사이트가 마비 됩니다.

서버 컴퓨터용 OS도 따로 있습니다. 사용하기 보다는 서버용으로 돌리는게 목적이므로 일반용과는 차이가 많습니다. 

유닉스, 리눅스 계열 서버운영체제는 대부분 CUI인 경우가 많지만 macOS 서버나 윈도우 서버의 경우는 가정용과 인터페이스 차이가 거의 없습니다. 

또 하드디스크의 가격하락과 유무선공유기의 보급덕에 집에서 NAS나 애플의 맥 미니를 이용해 개인용 서버를 운영하는 경우가 늘어나고 있습니다. 

NAS에는 주로 시놀로지 DSM OMV free4nas Cent OS라는 리눅스계열 운영체제가 탑재되는 경우가 보통이며 애플의 맥 미니에는 옵션으로 macOS Server가 들어갑니다. 

과거 애플은 서버컴퓨터인 Xserve도 내놓았지만 단종되었다고 하네요. 

맥 사이에서 써야 빛을 내는데 애초에 그런 환경이 당시 드물었고, 가성비까지 별로라 단종되었다고 합니다.현재 맥 프로와 맥 미니로 대체되있으며, 랙마운트 어댑터도 구매할 수 있습니다. 


서버에 종류에 대해서 한번 알아보겠습니다.

보통 서버를 돌리려는 이유는 마인크래프트 등의 게임 서버, 블로그 서버, 파일 서버 등이 있습니다.


-FTP 서버

대용량 파일 전송을 위한 프로토콜입니다. FTP서버는 HTTP서버 다음으로 해킹 표적이 되는 서비스입니다. 

파일 배포 서비스가 필요한 것이 아니라면, SSH 환경에서 실행할 수 있는 SFTP를 이용하는 것으로 충분합니다. 

윈도우 환경에서는 FileZilla등의 FTP클라이언트가 sftp서비스를 지원합니다.

만약 제어 콘솔(PC)도 리눅스라면 sshfs패키지를 설치해서 서버를 원격 마운트할 수 있습니다. 

참고로 sshfs는 samba와 달리 라우터를 자유롭게 넘어다닌다고 합니다. 

지구 반대편에서도 서버를 원격 마운트할 수 있습니다. 다만 윈도우에는 없는 패키지라서 윈도우 사용자는 가상머신을 이용해야 합니다.


-웹 서버

대표적으로 Apache2, lighttpd, nginx등이 있습니다. 

범용성은 apache2가 가장 우월하나 동접자가 늘어날수록 메모리를 많이 먹고 속도도 조금 느립니다. 

nginx는 동접자가 늘어도 추가 메모리를 거의 필요로 하지 않으며 가장 속도가 빠르나 .htaccess를 읽어들이지 못하는 것 등으로 인하여 설정이 번거롭다고 합니다. 

lighttpd는 nginx와 같은 비동기식 웹 서버라 성능 면에서도 괜찮고 .htaccess 파일 또한 읽어들일 수 있기 때문에 nginx에 비해서 설정이 간단합니다. 

다만 .htaccess는 모든 요청을 처리 할 때마다 읽기 때문에 정적 서버에서 권장하지 않는다고 합니다.그리고 참고할 문서가 적은 게 흠이라고 합니다.


-데이터베이스 서버

데이터베이스를 구동하는 서버입니다. 개인이 취미로 돌리는 웹 서버 정도에선 애플리케이션 서버와 같은 서버에서 돌아가는 것이 대부분일 것입니다. 

하지만 대형 서비스로 간다면 독립된 DB서버를 구동하는 것을 심심찮게 볼 수 있습니다. 

서비스 규모가 커질수록 DB부담이 수직상승하기 때문입니다. 

보통 기업 보유 자산 중 가장 빠르고 가장 메모리가 많고 SSD로 도배한 서버로, 제일 성능이 좋은 서버가 DB서버로 사용됩니다.

소규모 개인 서비스에서 쓰이는 것은 대부분 MySQL, MariaDB 또는 SQLite 정도입니다. 다만 PHP와 달리 MySQL과 마리아DB는 대형 서비스에도 쓰이는 강력한 데이터베이스 엔진입니다.

개인이나 SOHO 레벨이면 APM(Apache + PHP + MySQL)이 점유율의 대부분을 차지하지만, 대한민국 정부, 즉 관(官)에서 주관하는 중대규모 사업은 JSP/Tomcat + ORACLE이 사실상 표준입니다.


-기타

토렌트 서버, 게임 서버등이 있습니다.

토렌트 서버를 만들고 싶다면 "transmission-daemon" 또는 "uTorrent for Linux"를 설치합니다. 

근데 토렌트 서버는 네트워크 대역폭을 엄청 빨아먹으므로 민폐가 될 수 있다고 합니다.

게임서버란 인터넷 상에서 여러 플레이어가 같이 게임을 할 수 있게 하기 위한 프로그램이나 해당 프로그램을 기동중인 컴퓨터를 말합니다.



버추얼박스로 리눅스 하나 깔아서, putty로 접속하고 서버 돌려보는것도 나름 재미있네요.

사실 서버 전문가들은 SE 라고 웹개발자와는 직군이 좀 다른것 같습니다만, 혼자서 개발환경정도는 세팅할수 있게, 간단하게 데이터베이스 깔고, 파일서버 만들고, svn에서 공유하고 하는정도는 스킬을 익혀두는게 좋겠더군요.

Posted by Joseph514