IT이야기/입코딩2017. 8. 1. 13:04

-알고리듬 체크리스트


알고리즘? 알고리듬?

영어로는 algorism보다는 algorithm(알고리듬)으로 훨씬 더 자주 쓰지만 한국에서는 알고리듬보다는 알고리즘의 사용 빈도가 높다고 합니다.

이 포스팅에서는 알고리듬으로 이야기하겠습니다.



인터넷에서 검색해서 알고리듬 얼마나 공부했는지 알고 있는지 체크 리스트가 있네요.

이중에서 몇 개를 할 수 있을까요...

사실 학부생 때 배운 게 전부다 보니..기억이 안 납니다.

출처는 사내 SW검정 Professional 양성과정 라고 적혀있는데, 본 글은 작도닷넷에서 퍼왔습니다.

[알고리듬 기본]

1. 재귀함수 설계, 구현

2. 정수, 실수형 변수의 메모리 크기와 구조를 이해, 활용

3. 비트연산자(&, |, ^, <<, >>, ~) 이해, 활용

4. 10^19 이상의 매우 큰 정수를 더하고, 빼고, 곱하는 프로그램을 API 활용하지 않고 구현


[탐색 및 정렬]

5. 깊이 우선 탐색과 너비 우선 탐색 이해, 활용

6. 자신이 설계한 탐색 알고리듬의 시간복잡도 계산

7. 이분 탐색 이해, 활용

8. Bubble sort 구조와 원리 이해, 활용

9. Quick sort와 Merge sort의 장단점 이해, 활용

10. Counting sort와 Radix sort 이해, 활용

11. 히스토그램에서 최대 면적을 가지는 부분 직사각형을 선형 시간내에 구하기


[자료구조]

12. Stack, Queue, Double-ended-queue 이해, 활용

13. Vector(ArrayList)와 List(LinkedList) 장단점 이해, 활용

14. Heap(Priority Queue) 이해, push, pop 등의 연산 활용

15. DSU(Disjoint Set Union, 서로소집합) 개념 이해, Union Find 경로압축기법 구현

16. Indexed Tree 및 Sparse Table 이해하고, 값이 변하는 배열에서 구간 합, 구간 최소/최대값 구하기


[확률 이론]

17. 순열 이론(중복 순열, 원 순열, 염주 순열, 완전 순열) 이해, 활용

18. 조합 이론(중복 조합, 이항 정리, 파스칼 삼각형, 카탈란 수) 이해, 활용

19. 조건부 확률(베이스 정리) 이해, 활용

20. 이항분포(Binomial Distribution), 정규분포(Gaussian Distribution) 이해, 활용


[이산 수학]

21. 에러토스테네스의 체를 이용하여 오일러 피 함수 값 구하기

22. 페르마의 소정리를 이해하고, 이를 이용하여 모듈러에서 곱셈의 역원 구하기

23. 확장 유클리드 호제법 이해, 활용

24. 중국인의 나머지 정리 이해, 활용

25. 포함 배제의 원리를 이용하여 여러 문제에서 경우의 수를 계산


[그래프]

26. 인접 행렬 및 인접 리스트의 장단점 이해, 활용

27. Dijkstra, Floyd-Warshall, Bellman-Ford algorithm 이해, 활용

28. Prim's algorithm, Kruskal's algorithm 이해하고 이를 이용하여 MST(Minimum Spanning Tree, 최소 비용 신장 트리) 구하기

29. DAG(Directed Acyclic Graph)를 이해하고, 위상 정렬 구현

30. LCA(Lowest Common Ancestor, 최저 공통 조상) 이해하고 이를 시간복잡도 log n 시간에 구현

31. 양방향 그래프에서 절단점과 절선 구하기

32. Network Flow 이론 이해, 활용


[문자열]

33. 문자열 매칭을 KMP 알고리듬, Rabin-Karp fingerprinting, Suffix Array & LCP 이용 구현

34. 여러 문자열을 하나의 Trie로 나타나기

35. Aho-Corasick algorithm 구현


[계산 기하학]

36. CCW(Counter ClockWise)와 벡터 외적의 원리 이해, 구현

37. 단순 다각형 면적 구하는 사선식 원리

38. 두 선분의 교차 여부, 다각형 상의 점의 위치를 CCW 이용 구현

39. Convex hull을 CCW 이용하여 시간복잡도 n log n 이내에 구현

40. Plane Sweeping 이용하여 직사각형 합집합의 면적 구하기


[동적 계획법]

41. 동적 계획법에서 상향식 접근법과 재귀식 접근법의 차이 및 장단점 이해, 활용

42. 동적 계획법의 요소(기억공간, 점화식, 기저 조건) 이해 및 상황에 맞게 적용

43. 널리 알려진 동적 계획법 문제(Knapsack, LIS, Bit Mask DP) 해결


출처: 사내 SW검정 Professional 양성과정




Posted by Joseph514
IT이야기/입코딩2017. 7. 11. 10:25

-[IT용어]스프링부트(Spring Boot)


요 몇년전부터 스프링 프레임워크가 아니라 스프링 부트라는 이름을 어디선가 들어봤었습니다.

그래서 무언가 찾아보니 스프링 프레임워크에 잡다하게 xml 설정하고, 세팅할 필요없이 손쉽게 만들수 있다고 하더군요. 인터넷에 예제를 보거나 Github에 보면 스프링 부트로 만든 게시판이나 블로그 소스들 예제를 볼수 있습니다.

설정을 최소하 하여 pom.xml, web.xml 수정하고 왜 안되는지 구글링해보고 하던 시간을 상당히 단축시킬수 있다는 이야기군요.



Spring Tool Suite에서 발췌하였습니다.

링크


영어 능력이 별로 안되다 보니, 긁어서 구글번역을 돌리고 몇몇 말이 안되는 부분만 수정했습니다.



제작 준비가 된 Spring 애플리케이션을 구축하는 것에 대한 의견이 많습니다. 

Spring Boot는 컨벤션보다 컨벤션을 선호하며, 가능한 한 빨리 당신을 기동시키고 실행할 수 있도록 고안되었습니다.

Spring Boot를 사용하면 "바로 실행"할 수있는 독립 실행 형, 프로덕션 급 Spring 기반 응용 프로그램을 쉽게 만들 수 있습니다. 우리는 Spring 플랫폼 및 써드 파티 라이브러리에 대한 의견이 많으므로 최소한의 소동으로 시작할 수 있습니다. 대부분의 Spring Boot 응용 프로그램은 Spring 구성이 거의 필요하지 않습니다.


Features

독립 실행 형 Spring 애플리케이션 작성

Tomcat, Jetty 또는 Undertow를 직접 임베드 (WAR 파일을 배치 할 필요 없음)

의견이 분명한 '스타터'POM을 제공하여 Maven 구성을 간소화하십시오.

가능한 경우 자동으로 Spring 설정

메트릭, 상태 확인 및 외부 구성과 같은 프로덕션 기능을 제공합니다.

XML 생성을위한 절대 코드 생성 및 요구 사항 없음

참조 가이드에는 모든 기능에 대한 자세한 설명과 일반적인 사용 사례를위한 광범위한 하우투가 포함되어 있습니다.


Quick Start

자바 개발자 인 경우 start.spring.io를 사용하여 기본 프로젝트를 생성하거나 아래 "빠른 시작"예제를 따르거나 참조 설명서 시작 안내서를 읽으십시오.

프로젝트에서 spring-boot를 사용하기 시작하는 데 권장되는 방법은 종속성 관리 시스템을 사용하는 것입니다. 

아래의 스 니펫을 복사하여 빌드에 붙여 넣을 수 있습니다. 

도움이 필요하다? Maven 및 Gradle을 사용하여 빌드하는 방법에 대한 시작 안내서를 참조하십시오.


<parent>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-parent</artifactId>

    <version>1.5.4.RELEASE</version>

</parent>

<dependencies>

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-web</artifactId>

    </dependency>

</dependencies>


스프링 부트 CLI

스프링 부트는 스프링으로 신속하게 프로토 타입을 작성하려는 경우 사용할 수있는 명령 행 도구와 함께 제공됩니다. 

Groovy 스크립트를 실행할 수 있습니다. 

즉, 코드가 너무 많이 작성되지 않아도 익숙한 Java와 유사한 구문을 사용할 수 있습니다. 

Spring Boot CLI를 설치하려면 주요 문서의 지침을 따르십시오.


저 사이트에 들어가보면 레퍼런스들도 제공되고 있네요.



스프링 부트에 관한 설명입니다.


이클립스에 STS를 설치하거나, STS용으로 나온 이클립스를 받아서, Spring Starter Project를 실행해서 만들면 됩니다.

이렇게 편하고 좋은 방법들이 나오는데, 저는 익숙하지 않다고 안쓰고 있었네요.




Posted by Joseph514
IT이야기/입코딩2017. 7. 7. 13:47

-[IT용어]전자정부 표준프레임워크


간혹, 속칭 보도방이라 불리는 인력업체에서는, 어디서 주워 들었는지. 전자정부프레임워크 할줄 아느냐 라고 물어보는 경우가 있습니다.

요즘은 스프링 안쓴다고, 전자정부프레임워크 쓴다고. 마치 제가 시대에 뒤떨어져 있는 사람인양 이야기 하는데 막상 털어보면 스프링과 큰 차이는 없습니다.

스프링 기반에, 플랫폼을 표준화해서 만든 프레임워크입니다.



전자정부 표준프레임워크는 대한민국의 공공부문 정보화 사업 시 플랫폼별 표준화된 개발 프레임워크를 말합니다.

JAVA 언어는 사설 표준으로 우후죽순으로 업체의 자체 프레임워크를 개발하여 적용되다 보니 각 개발프레임워크의 구조 및 수준의 차이에 의하여 여러 가지 문제점이 발생할 수 있습니다.

현재 배포되고 있는 프레임워크는 과거 JAVA 플랫폼 기반의 정보화 구축 사업 시 수행업체의 자체 개발프레임워크를 사용하여 정보시스템이 구축되어 유지보수 등 여러 가지 문제점이 있어, 2008년에 스프링 프레임워크 등의 오픈소스를 기반으로 웹 사이트 개발 시 필요한 여러 가지 기능들을 미리 구현해 놓았으며 최근에는 모바일 개발을 위한 프레임워크도 출시되었습니다.


전자정부 프레임워크 홈페이지


-역사

2009년 대한민국 안전행정부에서 국내 공공부문 국가정보화사업(전자정부) JAVA 플랫폼 기반의 추진 시에 개발 프레임워크의 표준 정립으로 응용 소프트웨어의 표준화, 품질 및 재사용성을 향상을 목표로 하며 특정 업체의 종속성 심화와 사업별 공통 컴포넌트 중복 개발을 막기 위해 개발하여 아파치 라이선스 2.0으로 배포하고 있습니다.

2007년 12월에서 2008년 6월까지 정보화 전략계획(ISP)을 수립하였고 2008년 11월부터 2009년 11월까지 1, 2단계 구축사업을 추진하여 대기업(삼성 SDS, LG CNS, SK C&C) 및 중소기업(티맥스소프트 등 6개)이 공동으로 JAVA 플랫폼 기반의 표준프레임워크 실행/개발/관리환경 및 공통 컴포넌트 172종을 개발하여 1.0 버전을 발표하였습니다.

그 후 2010년 4월부터 11월까지 3단계 구축사업을 통해 공통 컴포넌트 47종을 구축하고 CMMI 인증을 획득하였으며 2011년 4월부터 11월까지 4단계 구축사업을 통해 오픈소스의 버전 업그레이드, 경량화, 모바일 프레임워크 등을 구축하고 2.0 버전을 발표하였으며 배치 프레임워크를 포함한 2012년 5단계 구축사업이 완료되었다. 2015년 6월 표준프레임워크 버전 3.5가 배포되었습니다.


-특징

개방형 표준 준수 : 오픈소스 기반의 범용화되고 공개된 기술의 활용으로 특정 사업자에 대한 종속성 배제

상용 솔루션 연계 : 상용 솔루션과 연계가 가능한 표준을 제시하여 상호운용성 보장

표준화 지향 : 민, 관, 학계로 구성된 자문협의회를 통해 표준화 수행

변화 유연성 : 각 서비스의 모듈화로 교체가 용이하며 인터페이스 기반 연동으로 모듈간 변경 영향 최소화

편리하고 다양한 환경 제공 : 이클립스 기반의 모델링(UML, ERD), 에디팅, 컴파일링, 디버깅 환경 제공


기본적으로 사용되는 게시판 등의 기능이 예제로 다 정의되어 있습니다.


-출처 위키피디아



잠자리 채널이라는 유튜브 방송으로 강좌를 보았는데, 엄청 쉽게 잘 설명해 주시더군요.

확실히 세팅하고, 예제 파일 뜯어보느라 할애할 시간에 좀 더 개발에 집중할 수 있게 도와줍니다.

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

-웹개발자를 위한 로드맵


GITHUB 내용을 보시려면 아래를 클릭하시면 링크됩니다.


WEB DEVELOPER ROADMAP - 2017


github 내용을 좀 발췌했습니다.




2017 년 웹 개발자가되기위한 로드맵

아래에는 취할 수있는 경로와 프론트 엔드, 백엔드 또는 디프 로프가되기 위해 채택하고자하는 기술을 보여주는 일련의 차트가 있습니다. 

나는 이 대학의 학생들과 공유 할 것을 원했던 옛날 교수에게 이 차트를 만들었습니다.

어쨌든 개선 할 수 있다고 생각한다면 제안하십시오.


Roadmap to becoming a web developer in 2017

Below you find a set of charts demonstrating the paths that you can take and the technologies that you would want to adopt in order to become a frontend, backend or a devops. 

I made these charts for an old professor of mine who wanted something to share with his college students to give them a perspective.

If you think that these can be improved in anyway, please do suggest.


기부

로드맵은 바르사 미크 (Balsamiq)를 사용하여 제작되었습니다.

프로젝트 파일은 / project-files 디렉토리에서 찾을 수 있습니다. 

로드맵을 수정하려면 Balsamiq을 열고 Project> Import> Mockup JSON을 클릭하면 로드맵이 열리고 업데이트되며 readme에서 이미지를 업로드 및 업데이트하고 PR을 작성합니다.


향상된 풀 요청 열기

문제에 대한 토론

단어를 퍼트립니다.

kamranahmed.se@gmail.com 또는 Twitter URL에서 나에게 직접 연락주세요.


Contribution

The roadmaps are built using Balsamiq. 

Project file can be found at /project-files directory. 

To modify any of the roadmaps, open Balsamiq, click Project > Import > Mockup JSON, it will open the roadmap for you, update it, upload and update the images in readme and create a PR.


Open pull request with improvements

Discuss ideas in issues

Spread the word

Reach out to me directly at kamranahmed.se@gmail.com or Twitter URL


웹개발자들을 위해 Front-end, Back-end, DevOps에 대한 로드맵이 씌어져 있습니다.

project-files 라는 폴더 안에, json 형태로 값이 담겨져 있고. README.md 화면에 차트로 표시되게 되어 있는거 같네요.프로그래밍이라는 거대한 나무에서도 웹개발자는 극히 일부의 나뭇가지일 뿐인데, 그 나뭇가지들이 잔가지를 쳐서 뻗어나간 분야들도 엄청 다양하네요.

어떤식으로 어떤걸 순차적으로 공부해나갈지 참고해볼때 유용할거같아서 한번 공유해봅니다.

Posted by Joseph514
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. 16. 14:52

-윈도우에서 APM(Apache, Php, Mysql) 웹서버를 설치해 봅시다.


버추얼박스를 쓴다거나 아마존이나 구글클라우드 같은 것을 이용하지 않는다면 보통 한국에서는 윈도우 환경에서 작업을 하시리라 생각됩니다.

리눅스에서는 명령어 몇번이면 주루루룩 설치가 다되던데, 윈도우에서는 어떻게 해야 할까요?


윈도우용으로 편리하게 더블클릭하고 예 예 몇번 누르면서 설치한번에 웹서버를 구축할수 있는 패키지들이 존재합니다.아파치는 아무래도 리눅스 베이스로 만들어진 프로그램이다보니 윈도우에서는 제 속도가 나오지 않는다고 합니다. 보통 이 프로그램들은 리눅스 서버 입문자의 디버깅 환경 구축용 혹은 PHP+MySQL 연습용 정도로 쓰는 분들이 많다고 하네요. 거기다 윈도우 서버에는 MS가 자체적으로 만든 인터넷 정보 서비스(IIS)가 있기 때문에, IIS에 FastCGI 모듈로 PHP를 연결시켜서 돌리는 것이 보통이라고 합니다. 이 때문에 PHP의 윈도우 버전은 IIS용과 Apache용이 따로 나옵니다.

그래도 일단 집에서 mysql 가지고 놀고, php뛰워서 쿼리날리고 화면 뛰우는정도 연습하려면 아주 유용하게 쓰입니다.

그리고 공유기 포트 열어서 외부에서 접속하는것도 가능합니다. 유동아이피라 다시 접속할때 바뀔수도 있지만요.



-Autoset


홈페이지 링크

홈페이지에 있는 설명을 발췌하였습니다.


오토셋을 이용하면, 개발/운영을 위한 웹 서버(Apache HTTP Server)와 PHP, MySQL, CUBRID 설치를 위해 투자하는 시간을 절약하실 수 있습니다.

오토셋은 신속하게 기반 시스템을 설치 할 수 있도록 패키지가 구성되어 있으며, 사용자가 선택적으로 필요한 요소를 설치할 수 있도록 제공하고 있습니다.

3분만 투자하세요. 그러면 초보도 내 컴퓨터에서 홈페이지를 만들고, 운영 할 수 있는 환경이 만들어 집니다.

오토셋 매니저는 텍스트 파일로 구성되어 있는 Apache HTTP Server, PHP, MySQL, CUBRID의 주요 설정 파일을 GUI 기반으로 쉽고 간편하게 변경 할 수 있도록

다양한 기능을 제공합니다. 각 서버별로 가지고 있는 설정 방법, 내용을 외우고 있을 필요가 없습니다.



-apmsetup


홈페이지 링크

공식 홈페이지는 현재 문이 닫혀있습니다. 

아마 제가 제일 처음으로 써본 윈도우용 apm 패키지일것입니다. 10여년도 전에 사용했었군요.

apmsetup7이 올라온지 엄청 오래된 버전인데. 어느센가 업데이트도 안되더니 결국 사이트도 문을 닫았더군요.

내 컴퓨터를 웹서버로 활용 할수 있도록 Apache, PHP, MySQL, Perl을 자동 설치 및 설정해주는 프로그램입니다.

그래도 아직 네이버 자료실에 올라온게 있어서 다운받을수는 있습니다.

블로그에 글들을 보면 php5.6 버전으로 업그레이드 할수도 있다고 본거같은데, 일단 옛날버전에 64bit 컴퓨터에 설치하려면 불가능은 아니지만 번거롭습니다.

자료실링크


-홈페이지 접속시 매드사이언티스 같은 캐릭터가 보이는군요.


-wampserver

홈페이지 링크

외국 사이트인데, 요즘 윈도우용 웹서버 구동할때 많이 사용한다고 들었습니다.

사이트에서 발췌한 프로그램 설명입니다.


WampServer installs automatically all you need to start developing web applications and is very intuitive to use. 

You will be able to tune your server without even touching the setting files.

WampServer는 웹 애플리케이션 개발을 시작하는 데 필요한 모든 것을 자동으로 설치하며 사용하기가 매우 쉽습니다. 설정 파일을 터치하지 않고도 서버를 조정할 수 있습니다.



-xampp

홈페이지 링크

다른 프로그램들도 유명하지만 xampp의 경우, 위키피디아에 등제될만큼 유명한 프로그램입니다.

그리고 주기적으로도 계속 업데이트 되고 있고, php7 시리즈도 지원되는군요.


XAMPP는 크로스 플랫폼 웹 서버 자유 소프트웨어 꾸러미이다. 

아파치 웹 서버 MySQL, PHP, 펄을 포함하고 있다. 

GNU 일반 공중 사용 허가서로 배포되며 자유롭고 쓰기 쉬운 웹 서버이다. 

마이크로소프트 윈도, 리눅스, 솔라리스, 맥 오에스 텐 등에서 동작하며 주로 웹 개발에 사용된다.

XAMPP는 설치 환경에 따라 zip 또는 tar 형식의 압축 파일이나 EXE 실행 파일, 맥 오에스 텐 패키지 등의 실행으로 바로 작동되며 설정이 거의 필요없다. 

정기적으로 구성물을 최신으로 유지한다. 오픈SSL과 phpMyAdmin 등도 포함한다.

XAMPP를 설치하는 것은 각각의 구성물을 설치하는 것에 비해 훨씬 시간을 적게 소비한다.

한 컴퓨터에 자기 자신을 포함해 여러개의 구현물이 있을 수 있고, 다른 컴퓨터로 바로 복사할 수도 있다.

가볍게 만들어진 작은 버전도 있다.


위 프로그램들을 이용하여 손쉽게 윈도우에서 웹서버 환경을 구축해볼수 있습니다.

Posted by Joseph514