9 Skill for Developers
박종천 상무님
Hard Skills
- Basic Knowledge(C++, OS)
- 제품에 대한 이해(제품 분석)
- 개발 사이클(요구사항/분석, 디자인 모델링, Implementation, Test/Release, Feedback/Update) 계속 잘 해야함
Soft Skills
- Project Management : 비용(Resources), 시간(Schedule), Scope(Quallity)
- Team Management : Forming, Storming, Norming, Performing 모든 조직은 해당 네가지를 거치게 된다.
- Process(Agile, Zero-Bug) : 어떤일을 잘하기 위한것이 아니라 실패하지 않기 위한것. PMMM(Project Management Maturit Model)
Business Skills
- HR System : 잘하는 사람보다 못하는 사람을 안뽑는것
- Business Management
- Vision/Goals/Culture
세상은 배우는 사람, 배우지 않는 사람으로 나뉜다.
벤자민
자기관리는 시간관리이다.
필요한데 써라
낭비 - 최소한으로
invest - 극한으로 올려라
많은사람을 만나기 위해 이메일을 많이 돌리셨다고 함.
AI:막막해하는 당신에게
임태규 Motion2AI
AI에서 갖가야할 7가지
프로그래밍 언어
남의 코드를 얼마나 이해할 수 있는지. 최소한 80%는 이해할 수 있어야 해당 언어를 안다고 할 수 있다.
스킬업을 위해 코드리뷰를 자주해라
하나를 깊게 파봐라
Pytorch , 텐서플로우 한번씩 봐두면 좋다
데이터 구조
데이터를 어떻게 뽑아쓰고 저장하는지 알아둬야함.
메모리가 적다는 상황이라 가정하고 효율적으로 하는것을 익혀라
전략1
알고리즘
알고리즘은 외우기 보다는 어떻게 동작하는지 이해를 해라
또한 이를 잘 사용할 줄 알아야 한다.
자신만의 라이브러리를 만들어서 활용하는것도 좋다
전략2
수학을 공부해라.
Linear Algebra, Probability, Geometry는 알아야 한다.
Insight를 가져라
특정 프로젝트를 했다면 장점,단점,가치를 말할 수 있어야한다.
특정 프로젝트를 했는데 펑션 X에서 문제가 있어서 개선하고 해결했다
프로젝트를 했으면 얻은게 무엇이고 보완할것이 무엇인지
시간, 일
아침에 출근하면 30분 단위로 할일을 정한다고 함
일을 할 때 3가지로 분리함
해야할 것, 할 수 있는것, 하지말아야 할 것
통찰력을 기르기 위해 책을 많이 읽어라
사소한것에 목숨걸지 말것.
자신감은 없어도 자존감은 가득
내 자신에게 한 약속은 반드시 지킬 것
개발 분야와 상관없이 알아야 하는 기술 10가지
수아랩 이기곤 리드 엔지니어
문자열 인코딩
컴퓨터가 문자를 이해할 수 있게 만든 규칙
인코딩마다 지원하는 문자의 종류와 문자를 구분하는 체계가 다르다.
아스키 코드 1byte
EUC-KR : 한글 숫자 영어 지원
UTF-8 : 표준이 된 문자열 인코딩 1~4byte
UTF-16 : 자바 윈도우 API에서 UTF-8보다 많이 사용되지 않지만 멀티바이트라고도 부름 고정2byte
UTF-32 : 고정된 4byte
Base64
바이너리 데이터를 아스키코드 기반 문자열로 인코딩하는 방법. (이미지, 텍스트, 동영상 등)
이메일, HTTPbody 등에서 많이 사용된다.
OTP가 랜덤하게 생성되는게 바이너리로 나오는데 이를 HTTP로 전달하기 위해서는 Base64로 인코딩 해야한다.
인코딩을 할경우 바이너리에 비해 33% 늘어난다.
Base64는 암호화 기법이 아니므로 암호화를 위해 해싱을 해야함
JSON
여러 형태의 데이터를 구조화 할 때 사용하는 텍스트 기반 데이터 규격
여러 정보를 하나의 구조체처럼 묶어서 사용하고 싶을 때 사용
json의 장점 : map, list자료구조와 비슷해 다루기 쉽고 텍스트 기반이어서 디버깅하기 쉽다.
json의 단점 : 바이너리 기반 규격보다 용량이 더 필요하고, 처리 비용도 크다.
게임, 금융 분야처럼 초당 메시지 처리가 중요한곳에서는 크리티컬할 수 있다.
데이터 규격이 바뀌어도 프로그램에 직접적으로 반영되지 않는다. - 직렬화를 통해 개선 가능
모든 데이터를 직접 가공해야 한다.
알아두면 좋은 내용
GraphQL, 직렬화, XML, YAML, Pbu(프로토콜 버퍼)
다국어 처리
프로그램을 수정하지 않고 여러 언어를 동시에 지원하는 기술
다국어 처리는 1. 리소스파일 2. 언어설정, 3.프로그램 으로 구성된다.
파이썬의 gettext 함수
안드로이드에서 프레임웍상에서 제공한다.
다국어처리는 프레임워크마다 다르나 i18n이라는 표준이 있다.
언어마다 글자수가 달라 레이아웃이 언어에 따라 꺠질 수 있다.
알아두면 좋은내용
i18n, gettext, resx (C#에서 사용됨)
날짜와 시간
국가별로 사용하는 표준 시가 다르다. 그래서 사용됨. 이로인해 발생할 수 있는 문제 예방
시간은 단조시간 실제시간으로 구분된다.
타임존- 타임존은 나라마다 다르며 한국가에서 여러 타임 존을 사용하기도 한다.
한 시스템을 구성하는 여러 서버간 타임존이 달라지면 문제가 생길 수 있다.
단조시간- 운영체제나 CPU에서 직접 계산하는 시간이다. 실제 시간과는 단위는 같지만 다른 값을 사용한다. 점진적으로 증가한다. 운영체제가 시작하고 종료될때 까지 절대 바뀌지 않는다.
실제시간- 벽시계 시간으로도 부른다. 단조시간과는 다르게 동기로 인해 언제든지 바뀔 수 있다.
컴퓨터의 1초와 실제시간의 1차는 약간의 오차가 있다.
한달이상 걸리는 작업은 실제시간을 사용해야 한다.
왜? 한달이라는 기준은 모호하다.(ex 윤년계산 등)
단조시간은
짧은시간의 주기로 수행해야 할 때, 특정 작업의 실행 시간을 계산할 때 사용
실제 시간을 사용하는곳
어떤 작업을 특정 날짜, 또는 한달 이상 걸리는 주기로 실행해야 할 때
단순히 실제 시간을 표시해야 할 떄
날짜를 다룰 때 항상 UTC를 사용하거나 동일한 타임존을 사용해야 한다.
정규표현식
주어진 문자열 속에서 특정 패턴을 가진 문자열을 찾을때 사용한다.
https://regex101.com 에서 도움받을 수 있다.
UUID
소프트웨어는 여러 식별자가 필요하다. (유저, 작업, 세션, 아이템 등)
식별자를 만들 때 사용되는것으로 4개의 하이픈과 32개의 16진수 문자들로 구성되어있다.
v4가 많이 사용되며 v5는 해시 함수와 유사해 대체되었다고 봐도 무관
UUID만으로 정확한 내용을 파악하기 어려우므로 요청ip,주소 메서드 등을 같이출력해야 어떤정보인지 알 수 있다.
확률은 낮지만 같은 UUID가 만들어져 충돌이 발생할 때를 염두해 둬야함
난수
무작위로 생성된 값을 뜻한다. 많이들 완벽한 난수를 생성할수 없다고 하지만 가능하다고 함
UUID와 비슷하게 사용되기도 함.
유사난수:난수표, 난수 알고리즘, 시드를 합쳐 난수를 생성한다
유명한 알고리즘은 mt19937(메르센 트위스터)
유사난수는 암호학적으로 안전하지 않다.
알고리즘, 시드값을 알고 있다면 동일한 난수를 획득할 수 있다.
타임스탬프를 시드로 사용하면 안된다.(예측이 가능하므로)
암호학적으로 안전한 난수
하드웨어 난수 생성기로 난수를 만든다. 3배에서 4배정도 유사난수에 비해 느리다.
이는 열 잡음, 광 전자 등의 노이즈를 이용해 예측이 불가능하다.
인증키 생성, 게임 아이템 및 재화 생성에 사용된다.
해시함수
임의의 입력값을 고정된 길이의 값으로 변환하는 함수
입력값이 동일하면 해시값도 동일
길이는 입력값과 관계없이 동일하다. (알고리즘마다 길이는 다르겠지만 보통 64비트)
서로다른 입력값이 같은 해시 값을 만들 확률이 낮다.
해시함수는 해시맵을 만드는데 사용한다.
해시맵은 데이터 접근 비용이 O(1)이다. 입력값이 동일하면 해시값도 동일하다.
이를 통해 민감한 데이터의 변조를 막을 수 있다.
비밀번호 검증시에 사용할 수 있다. 비밀번호를 해시를 해서 저장한다. 입력값이 동일하면 해시값도 동일하기 떄문에…
비밀번호 저장은 암호학적으로 안전한 해시 함수를 사용해야 한다. 해시충돌이 불가능하고 원복이 불가능하도록
실무에서는 비밀번호에 salt값을 넣어 해시를 생성한다.
해시함수의 종류는 MD5, SHA-1은 더이상 사용되지 않으며
SHA-256이상 사용할것을 권장한다.
알아두면 좋은내용
SHA-1, SHA-2 HashMap, O(1)
HTTP(S)
텍스트 기반 통신에 사용하며 오늘날 웹의 기초가 되는 프로토콜이다.
상태가 없는 프로토콜로서 요청을 보내기 직전까지 서버가 살아있는지 알 수 없다.
요청을 보낼 때 연결을 맺고 응답을 받으면 연결을 끊는다.
대부분 1.1버전을 사용하는데 2.0도 꽤 사용된다.
요청하나당 소켓을 열고 닫기때문에 Websocket,HTTP/2기술을 사용해 이를 개선하여 한번열고 계속 사용할 수 있다,
응답
성공 200
서버이동:300 너는 이서버로 올게 아니라 다른쪽으로 가야해
인자실패 400
서버내부실패 500
HTTPS
HTTP에 TLS암호화 기법을 적용한것.
주고받는것을 타인이 볼 수 없다.
암호화 수준은 TLS에 따라 달라진다.
HTTPS통신을 하려면 서버는 반드시 인증된 제3자가 발급한 인증서가 필요하다.
프론트엔드 개발자라면 Sticky Session(한번 요청으로 계속 보내는것), CORS(도메인이 다를때 브라우저에서 요청 막는것)
SSL 랩스에서 도메인에 대한 암호화 등급을 확인할 수 있다.
letsencrypt, godaddy,codomo등에서 인증서를 받을 수 있다.
성장을 바라는 웹프로트엔드 개발자를 위한 제언
우아한 형제들 김민태님
성장바라보는 두가지 시선
내가 생각하는 성장
내가 상상하는 성장
열심히 하는것만 중요하지 않다, 전략을 잘 짜는것이 중요하다.
성장을 바라보는 두 가지 시선
타인이 바라보는성장
타인이 평가하는 성장
성장을 위한 결심만으로 부족하고 객관화를 위한 측정 지표를 만들자
결심한 목표와 형태가 적절한가
달성 기준은 무엇인가
성장 목적은 무엇인가
왜 특정기술을 선택했고 유사기술은 무엇이있을까요
즉 why에 대한고민을 많이해라
나의 부족함을 알고있어야 한다
성장은 환경에 대한 적응이므로 성장해야만 한다. 그러기 위해 어떻게 성장할지 끊임없이 질문하자.
오픈소스속에서 성장하기
강대명님 유데미
ARCUS 깃헙 github.com/naver/arcus 오픈소스
레디스 github.com/antirez/redis
레디스를 선택한 이유
Arcus처럼 Collection 기능을 제공
C로 개발됨
실제로 코드를 볼 생각이었따.
Centos 5.3버전에서는 레디스가 잘 안돌아갔다.
빌드문제를 고치기 위한 접근 방법
1.먼저 재현하기
- 안되는 방법 찾기
2.해결방법 찾기
- 해당방법이 해결이 되는지, 더 좋은 방법이 없는지
3.수정후 테스트
해당 주제에만 집중.
주제와 상관없는 다른것들은 굳이 고치지 말자
큰프로젝트는 알아야 할것도 많다.
내가 많이쓰는 오픈소스를 고르자.
내가 많이 쓰는 오픈소스의 장점.
1.좀 더 장애를 겪어볼 수 있다.
2.계속 쓰고 있다.
3.오픈소스의 학습이 업무지식에도 도움이 된다.
오픈소스를 고를 떄?
- 언어가 익숙한 언어로 구현되어있는지??
카프카를 한다면 Scala/Java
쿠버네티스 같은것을 한다면 Go로 - 기반지식을 충분히 이해하고 있는가
전체 모든 지식이 아니라 필요한것에 대한 지식이 필요함
PR을 했는데 타이밍 어택에 취약하다 한다.
그러면 타이밍 어택에 대해 공부해야 한다..
- 커뮤니티가 활발한가?
사람이 많으면 공헌하기 어렵고 적으면 공헌해도 배울게 얼마없다.
오픈소스를 통한 세속적인 장점
업무에 필요한 툴에 대한 이해도가 더 높아진다.
내가 이 부분을 이해하고 있다는 근거가 되어준다.
결론
오픈소스를 통해 여러가지 지식습득, 선행학습이 가능하다.
오픈 소스에 참여하면서 생기는 이점도 많다.
내가 미리 알았으면 좋았을 개발 생활 팁
강윤신 - 라인 파이낸셜 플러스
어떻게 물어봐야 할까요
왜 내말을 알아듣지 못할까요
프로그래머 - 해결하려는 문제를 정의하고 코드로 해결하는 사람
질문하기전에 준비해야 할것
내문제를 이해하자
- 내가 정의한 문제가 무엇인지.
- 이 문제를 이 사람에게 물어보는게 맞을까
- 상대방은 내가 정의한 문제를 이해 했나
- 나는 상대방의 대답을 이해 했나
low context인지 high context인지 상호 정하는것이 중요하다.
개발자의 세가지 덕목
나태 / 조바심 / 자만심
홀로 성장하는 시대는 끝났다
한국마이크로소프트 이소영님
커뮤니티 공부 =’~하기’공부
내향적 - 전문서적 번역하기/ 블로그에 올릴 글이나 컬럼 작성하기/ 도서 집필하기/ 지식인 기술 포럼 답변하기/ 트위터 페이스북 등의 소셜 활동하기
외향적 - 페이스북/ 카페 밋업 등의 그룹 활동하기/ 유튜브 방송하기/ 컨퍼런스 발표하기/ 스터디 활동하기/ 앱개발,메이크 활동하기
마이크로스프트의 직원평가
다른사람 성공에 어떻게 기여하는지 평가한다.
계속배우려하고 모험이나 도전이 오면 자신감있고 뒤##
AI/Data 시대를 위한 개발자 생존 가이드
상성리서치 임백준님
- Programming 2.0
- 선사시대
초기엔 책에 주로 의존했다. - 르네상스
이 후 스택오버플로우가 생겨났는데 시스템을 게임화 하여 개발을 재밌게 만들었다
Programming 2.0
풀고자 하는 문제의 목적을 설정
컴퓨터가 탐색할 공간을 지정하는 코드의 얼개 작성
가능한 모든 자원을 동원해서 컴퓨터가 탐색을 수행하는 환경 제공
ML 등
Programming 1.0 개발자
전통적인 코딩을 통해 SW2.0 개발자가 사용할 수 있는 툴,인프라 등을 제공
Software 1.0
컴퓨터에게 파이썬, 자바, C++ 같은 언어를 써서 명시적으로 전달하는것
Software 2.0
뉴럴 네트워크 웨이트 처럼 사람이 읽을 수 없는 숫자로 컴퓨터에게 할일을 전해주는 방식
빠르게 쏟아지는 신기술과 개념을 어떻게 공부할 것인가
모든것을 직접 경험하여 익히는 것은 불가능
DevOps나 Full Stack 개발자는 모든 것을 다 경험한 사람이 아니라, 어떤 일도 잘 할것같은 사람
하나의 경험을 통해 다른 일도 잘 할 수 있는 역량을 키워야함
일ㅈ시적으로 유행하는 프레임워크나 API가 아니라 10년 20년 유지되는 기본적인 것을 공부해라
Fundamental을 공부해라
프레임워크 API는 길어야 3년
객체지향, 함수형, TDD, 리팩토링 등 원리와 패러다임은 10년 이상
학력, 경력, 직책, …등 인간 자체의 문제해결 능력은 평생
Clean Code, Code Complete, Programming Pearl, Design Patterns, The Mythical Manmonth 는 반드시 읽어봐라
Survival Guide
올바른 습관과 올바른 태도
Fake it till you make it
Job vs Career : Job에서 생각하지말고 커리어 측면에서 생각해라.
People skills :
기술은 종교가 아니다 : 자기에 기술에만 국한되지 말고 열린태도를 갖자
Add value to others
Don’t be afraid to look like an idiot :
환경이나 타인을 탓하지 않는 대범함, 실패에 좌절하지 않는 집요함, 흥분하지 않는 침착성, 자신을 사랑할 줄 아는 자존감
전자레인지로 음식을 데우기 위해서는 전자공학을 공부할 필요가 없다.
문제를 해결하기 위한것을 공부하는것이 좋다.
/