Skip to content

Latest commit

 

History

History
265 lines (162 loc) · 13.5 KB

developer.md

File metadata and controls

265 lines (162 loc) · 13.5 KB

무엇을 공부해야 하는가

okky의 웹개발자 공부한 것들

  1. 네트워크
  2. 주력 언어 한가지 집중하여 제대로 이해하기
  3. OS(컴퓨터 사이언스 포함, 주로 Linux 중심)
  4. 보안
  5. 알고리즘

1. 네트워크

  • 클라와 서버 사이에서 일어나는 흐름들
  • http 프로토콜에 따라 데이터가 헤더와 바디에 담겨서 넘나드는 흐름 이해하는가
  • 웹서버 하나 정해놓고 공부 하는게 도움된다. - 아파치 또는 nginx - 영어가 되면 해당 사이트의 document, cookbook을 참고하여 튜토리얼부터 시작

여기서 핵심은 자신이 직접 그 개념을 활용해 봐야 한다. 최소한 어떤 느낌인지 직접 써봐야 의미가 있다.

예를 들어 단순히 IP의 정의, 도메인의 정의가 아닌 웹서버 Apache로 name based virtual host와 ip based virtual host를 돌려보며 그 차이를 이해해야 비로소 이해한 것이 된다. 코드를 봐서 이해해도 막상 해보면 많은 이유로 인해 되지 않는다. 그래서 몸소 겪으면서 이해해야 한다.

1~2 OS

컴사와 OS, 이 부분을 얼마나 이해하느냐에 따라 비전공자와 전공자 나뉜다. 스레드나 프로세스, 동기, 비동기 등을 따지고 생각할 줄 아는 사람과 그렇지 못한 사람의 코드의 질은 다르다.

대표적으로 js는 싱글스레드인 걸 이해한 사람과 이해하지 못한 사람은 큰 차이가 있을거 같다. 컴싸 책 한권 (공룡책), 이것이 리눅스다 라는 centos 리눅스 한 권으로 집에서 틈날 때마다 공부해라. vmware를 이용하여 집에서도 리눅스 환경 구축 가능하다.

2. 주력언어 한가지 집중하기

자바든, 파이썬이든, 주력언어의 패러다임사용법을 제대로 이해하는 것이 중요하다. 예를 들어 자바를 멀티 쓰레드 식으로 짤 수 있는 사람과 자바스크립트를 싱글 스레드 식으로 짤 수 있는 사람은 단순히 자바의 문법만 쓸 줄 알고 자바스크립트의 문법만 쓸 줄 아는 사람과는 질적으로 다르다.

객체지향 언어를 배우고 절차지향 식으로 코드를 쓰면 의미가 없다. 한 언어를 제대로 이해한다는 건 언어의 철학까지 이해한다는 것이다.

3. 알고리즘 및 자료구조

프레임워크가 다 만들어주는 mvc 구조에 따라 코딩하는 것은 쉽다. 하지만 효율적이고 논리적인 코드 짜려는 사고력을 기르기 위해 알고리즘과 자료구조 지식은 필요하다. 신입 기준에서 다익스트라까지는 몰라도 된다. 다음에 나오는 것들만 이해하면 좋다.

1. 스택
2. 큐
3. 트리
4. 이진검색트리
5. 해쉬검색(체인법, 오픈어드레스 법)
6. 퀵 정렬
7. 머지 정렬
8. 기수 정렬
9. 링크드 리스트 (쌍방향까지)

언어는 C, C++정도면 괜찮다.

4. 보안

웹에서의 해킹은 일정한 패턴이 있다.

1. XSS
2. CSRF
3. SQL injection
4. Open redirect
5. command injection
6. directory traversal

sw 엔지니어가 배워야 할 것 from 구글

from google, computer Science Student seeking an internship or university grad role at Goodgle

1. 객체 지향 배우기 위한 언어

  1. 파이썬
  2. 자바

other programming languages

  1. JS
  2. CSS & HTML

2. Test your code

3. 알고리즘과 데이터 구조

4. OS

5. machine learning

6. Web developer


웹 개발자가 배워야 할 것 from slipp

왕초보 웹 개발자들에게

1. 처음에 배워야 할 것들

개인적으로는 파이썬을 선호하는데, 웹 개발자라면 자바스크립트, 모바일 개발자라면 파이썬을 배우는게 좋겠다. 나중에 실력이 붙으면 C와 포인터에 대해 배우자. 내공이 쌓이면 함수형 프밍 언어(scala) 배우는 것도 좋다.

- 권장 언어 : python, js, java, bash, C, Scala

웹 개발자는 백엔드, 프론트엔드로 나뉜다. 사물의 내면이나 돌아가는 원리 생각하는 걸 좋아한다면 백엔드, 디자인 감각이 있고 꾸미는 걸 좋아하고 반복작업도 질리지 않는다면 프론트가 맞다.

프론트는 jqeury, v8의 등장과 더불어 최근에 고도화 되었다.

처음에는 프론트와 백엔드 모두 배우자. 백엔드는 자바, 프론트는 js+html+css가 핵심역량이 된다. 처음에는 두 분야의 기초 정도는 함께 공부하자.

2. 일단 시작해보자.

여기에 나와 있는 실습들은 상당부분 내용이 중복됩니다. 하지만 코딩이라는 우리에게 필요한 작업은 머리와 손이 함께 배우는 부분이 많습니다. 반복이 매우 중요하기 때문에 아는 거 또 나왔네? 라고 넘어가지 말고 반복해서 학습을 하길 권합니다.

(1) 제일 먼저 해볼만한 것: 1시간 정도 투자해서 code.org 의 hour of code로 놀아 봅시다. 안나 + 엘사가 재밌는 것 같아요. 컴퓨터에서 중요한 기초 개념인 순차 + 반복 + 조건문의 개념을 배우시기 바랍니다. “프로그래머는 바보같은 일을 하는 천재적인 사람이다. 컴퓨터는 위대한 일을 하는 바보같은 기계이다. 이 둘은 그래서 찰떡궁합!” - 출처는 기억이 안 나네요. http://code.org/learn

(2) 칸 아카데미의 컴퓨터 교육: 자바스크립트의 감을 잡게 해 줍니다. https://www.khanacademy.org/computing/computer-programming

(3) 생활코딩의 작심 40시간 라이브: 개인적으로 존경하는 이고잉님이 만든 강의입니다. 주변에서 유용했다는 평이 많았습니다. https://opentutorials.org/course/1029

(4) codecademy를 활용해 봅시다. 어떤 특별한 언어를 처음 시작하고 싶을 때는 codecademy를 사용하면 감을 잡는데 도움이 됩니다. 쉬운 편은 아니고 혼자 공부하면 막히는 경우가 많기 때문에 꼭 주변에 멘토가 필요합니다. http://www.codecademy.com/learn

3. 조금 더 깊게

위 과정을 통해 웹서버와 프론트엔드에 대해 감을 잡으면 좋겠다.

  1. 유닉스 콘솔 명령어 배우기(bash)

  2. static 웹 페이지 만들기, 다른 프로젝트 검색

  3. 백엔드

    • 자바 기초
    • 객체 지향 프밍
    • 파일 IO
    • 멀티 스레드 개념
    • 단위 테스트
    • 로그 라이브러리 사용법 알기
    • 자료 구조 중 list, map 용도와 사용법, 하위클래스 사용법 필수
    • 가능하다면 TDD
    1. 자바 프로그래밍

      • 객체 지향 기본(다형성, 캡슐화) 다형성, 캡슐화 개념은 알고있다. 하지만 객체 지향적인 생각을 구현에 담아내는게 정말 힘든거 같다.

      • 스레드, 싱크로나이즈, 객체 직렬화 개념 이해 개념은 이해하고 있다. 싱크로나이즈와 객체 직렬화가 어떤 경우에 사용되어야 하는지... 스레드는 솔직히 막상 구현하라고 하면 당황스러울꺼 같다.

      • swing이나 네트웍 프로그래밍은 못해도 웹하고 크게 상관없음 swing 의 사촌격인 SWT를 계산기프로그램 만들어 보겠답시고 진짜 맛만봤다. 근데 어짜피 다 뷰단일뿐이자나? 중요한건 비즈니스로직!?

  4. 프론트엔드

    • 저자도 초보자라 잘 모르신다..
  5. DB

    • RDBS
    • nosql
    • 웹서버와 디비 연동
  6. virtualBox와 aws를 이용하여 내 서버 마련하기

  7. 네트워크 기초

    • TCP/IP
    • 소켓의 원리
    • http 구조
    • 웹 서버와 웹 브라우저의 동작 원리
  8. REST API

    • 웹 페이지와 웹 서비스의 차이점
    • REST API 개념

4. 초보 탈출, 그리고 디자인 패턴

초보 탈출 후 디자인 패턴(head first design pattern)이 도움이 된다.

  • effective java 읽어보기

  • 다른 소스 많이 보고 많이 짜보기(이희승 님의 netty 개인적으로 추천)

  • reflection, generic에 대해 공부하기

  • virtual machine의 동작 원리

  • 가비지 콜렉션의 원리

  • bytecode의 이해 성능 프로파일링


NOTE 위 글은 2015년 글이고 업데이트된 글이 있다.

1. 우리나라 IT 개발자 직군

대다수가 자바 기반 웹 서버 개발자였지만 현재는 다양한 직군 늘어나고 있다.

  • 웹 서버 (백엔드) : 자바, C#, 루비, 파이썬 등의 언어로 서버 쪽의 로직 개발하는 역할을 한다. 디비도 잘 알아야 한다. 최근 NoSQL, 클라우드, 컨테이너, DevOps 같은 분야도 조금 알아야 할 필요성도 생겼다.

  • 프론트엔드 개발자 : HTML/CSS, js를 주로 사용하며 디자이너와 협업하는 개발자다. 센스와 끈기가 필요하다. 최근에는 jQuery, react, 라이브러리를 잘 개발해야 하고, node.js를 통한 백엔드 개발, 아이오닉이나 react native 같은 도구 이용하여 모바일 웹앱도 제작할 수 있어 풀스택 개발자로 성장하기도 한다.

2. 개발자에게 유용한 사이트

mooc 사이트

3. 처음에 배워야 할 것

다양한 프밍 언어 : 쉽고 재밌는거 배우자. 개인적.. 위와 동일

웹 개발자 권장언어 : HTML + CSS + js (필수), python, java bash

처음에는 프론트와 백엔드 모두를 배워야 한다: 백엔드 개발자는 자바, 프론트 엔드 개발자는 HTML/ CSS/ Javascript가 핵심 역량이 됩니다. 그러나 처음에는 둘 모두 알아야 합니다. 가장 널리 사용되는 백엔드 언어는 자바와 스프링 프레임워크이지만 초반에는 장고를 권하고 싶습니다. 꼭 두 분야의 기초 정도는 함께 공부하기를 권합니다. 그리고 Java와 Javascript는 전혀 다른 언어입니다. 공부의 순서는 (1) HTML (2) CSS (3) Javascript (4) 파이썬 (5)장고 순으로 공부하시고 이후에 자유롭게 본인이 좋아하는 언어를 선택하시면 되겠습니다.

4. 시작해보자

  1. HTML/ CSS/ js 익숙해지기
  2. 파이썬 공부하기
  3. 장고 공부하기

5. 조금 더 깊게

  • 유닉스 콘솔 명령어 배우기(bash) - linuxjourney.com - 추천서적: http://www.yes24.com/24/goods/30705473?scode=032&OzSrank=2

  • 백엔드: 장고 배우기

    	- 편리한 장고의 기능을 이용해서 빠르게 웹을 개발하는 방법을 체험해 보면 좋을 것 같습니다.
    	- 앞 절의 tryhelloworld와 장고걸스 튜토리얼 등이 좋네요.
    
  • 백엔드: 자바 기초 배우기

    	- 객체 지향 프로그래밍, 파일 IO, 멀티 스레드의 개념을 꼭 배우시길 바랍니다.
    	- 유닛 테스트를 꼭 잘 배우시구요. 로그 라이브러리 사용법도 알아야 합니다.
    	- 자료 구조 중 list, map의 용도와 사용법, 그리고 하위 클래스들의 사용법은 필수입니다.
    	- 가능하다면 TDD를 해 보시고, 좋은지 나쁜지는 스스로 판단하시기 바랍니다.
    	- 이클립스(혹은 inteliJ)와 같은 IDE 사용법, 그리고 maven과 gradle의 기초에 대해서도 배워야 합니다.
    
    • 프론트엔드 분야: Javascript, HTML, CSS, JQuery, Angular.JS, React.JS 등의 지식을 습득합니다.

    • box model의 이해, 프론트 엔드 개발 도구들, 기타 등

    • 데이터베이스 기초: 관계형 데이터베이스, NoSQL(mongdb), 웹 서버와 데이터베이스의 연동에 대해 공부합니다.

    • VirtualBox또는 AWS, Heroku 등을 이용한 내 서버 마련하기, 그리고 추가적으로 클라우스 서비스에 대해서도 가볍게 공부하시길 권합니다.

    • 네트워크의 기초: tcp/ip, 소켓의원리, http의 구조, 웹 서버와 웹 브라우저의 동작 원리 등에 대해서도 아시는 게 좋습니다.

    • REST API: 웹 페이지와 웹 서비스와의 차이점, REST API란 무엇인가?

5. 백엔드 개발자 초보 탈출!

초보를 탈출하고 나서 여러분들에게 도움이 될 만한 것들을 나열해 보았습니다.

- 백엔드 심도있게 공부해보기 (아무래도 스프링이 좋은 것 같아요. 다른 것도 괜찮습니다.)
- 디자인 패턴 (head first desgin pattern이 좋다고 합니다.)
- effective Java 읽어 보기
- 다른 소스 많이 읽고 많이 짜 보기 (개인적으로 이희승님의 netty를 공부하는 걸 추천합니다.)
- reflection, generic에 대해 조금 더 깊게 배워야 할 것 같습니다.
- virtual machine의 동작 원리, 가비지 콜렉션의 원리, bytecode의 이해
- 성능 프로파일링 도구
- 로그 수집 툴

프론트엔드 개발자 초보 탈출!

<<니가요의 도움으로 채우자>>

5. 마치며

좋은 개발자는 Why? 를 달고 사는 사람이 아닐까 생각을 합니다. 여러분이 무엇을 보든지 일상 생활에서 무엇을 하던지 why? 에 대해 한 번씩 스스로 생각해 봅시다. 예를 들어 지금 이 순간이라면 **“google docs는 어떤 원리로 실시간 동기화 기술을 제공해 주는 걸까?** **프론트 엔드 - 백엔드 - 네트워크 - 그리고 동기화 기술엔 어떤 것들이 있는 걸까?** 내가 이걸 만들 수 있을까?” 이런 생각을 할 수 있을 것 같아요. 최근 저는 오일러 상수 e 가 왜 2.718일까? 를 생각하고 있어요. 아직 답이 나오진 않았는데 조금 실마리를 찾았습니다. 책을 보고 답을 찾는 것보다 즐거움을 위해서 ‘바퀴의 재발명’을 해 보시기 바랍니다.