신입개발자들에게 필요한 능력향상 조언

2016-05-26
25 Views

필자도 소프트웨어 엔지니어 경력이 15년차가 넘어가면서 다양한 신입개발자들과 많이 일하게 되면서 느낀 부분과 가장 신입개발자들이 물어봤던 내용을 정리할겸 나름대로 10년넘게 국내외 IT업계에서 개발자 및 CTO로 일하면서 몸으로 체험했던  능력향상 가이드를 만들어 보았다. 이 내용은 개인적인 생각으로 만든 것이기 때문에 사람마다 틀릴 수 있다는 점을 감안하고 보기 바란다. 물론 이 가이드는 어떤 회사에서 엔지니어로써 시작을 하려고 결정하거나 고급기술을 가진 엔지니어로 가기 위해 나름대로 조그만 노하우를 정리한 것이다.

응용프로그램 엔지니어

1) 기술적인 스킬을 마스터해라. 기술이 부족하거나 컴퓨터공학과등을 전공하지 않는 비전공자라면 아래 구글 사이트를 참고 해서 일하는 것 이외에 추가로 공부해라. 참고로 필자도 오래전에 대학교 컴퓨터관련학부를 나왔지만, 아래 링크에 나오는 코스 대부분을 듣고 공부를 추가로 했다. 물론 기본 영어로 되어 있다.

관련링크: https://www.google.com/about/careers/students/guide-to-technical-development.html

2) 소스코드가 국수나발처럼 지저분하다고 짜증내지 마라. 소스코드 퀄리티가 지저분해도 동료들보다 2배빠른 속도로 자료를 찾고 코딩할 수 있는 능력을 키워라. 이런 퀄리티를 보장하기 위한 도구들에 익숙해져라. (개발IDE도구, git, ssh, vim, bash등)

3) stack overflow를 되도록 보지 말아라. 제발 가장 주장하고 싶은 부분이다. 이유는 내용을 제대로 이해하지도 못하고 그냥 Copy & Paste를 한다면 나중에 그 소스코드는 당신에게 큰 버그재앙으로 올 것이다. 차라리 사내에 있는 전문가를 찾아 조언을 받아라. 그게 현명한 방법이다.

4) 제발 영어좀 배우자. 보통 신입개발자들 10명중 9명은 원서하나 제대로 읽지도 못하고 stack overflow내용을 제대로 이해하지 못하고 사용하던 경우를 너무 많이 봤다. 영어기반의 문서를 볼 수 있다면 구지 개발서적을 살필요없이 각 언어별 사이트를 보고 기본 제공하는 튜토리얼만 봐도 금방 할 수 있다.

5) Chef, puppet, docker같은 자동화도구 하나 정도는 배우자. 사내 오퍼레이터 엔지니어의 시간을 낭비하지 말자.

6) 마지막으로 항상 4가지 환경을 준비하자. 개발환경, QA환경(차기 버전 테스트용), 통합 테스트 환경(다음 버전 배포용), 제품환경을 준비해야 한다.

인프라스트럭처 엔지니어

1) SLA(Service Level Agreements)가 몇개로 설정되어 있는지 그것이 어떻게 프로세싱되는지 이해해라. 단일 데이터센터를 운용한다면 크게 영향은 없을것이다.

2) Failover 다운타임을 가진 구성은 high availability시스템으로 말하기 어렵다.

3) 항상 TLS를 사용하자. 사내 인트라넷도 사용하는 것이 좋다.

4) 서비스는 nginx를 통해 공개하는 것이 좋다.

5) 개발자와 같이 호흡하며 일을 진행하자. 개발자 마인드에 따라 무엇을 하는지 이해하고 노력하면서 더 좋은 솔루션에 대한 정보를 주지시킨다.

6) 시스템 하드닝을 하자.

데이터페이스 관리자

1) 기술적인 스킬을 마스터하자. DBA자격증을 땄다고 해도 공부는 계속 해야 한다.

2) CAP이론을 이해하고 각 데이터베이스별 솔루션에 어떤 차이가 있는지 알고 있어라.

3) 데이터페이스관리자는 사용자를 만들고 로그를 잘 남길 수 있도록 구성해야 한다.

4) 인증서 기반 인증을 응용프로그램에 사용하자. 연결에는 TLS을 사용하자.

5) 데이터베이스 하드닝을 하자.

6) 테스트 환경을 최대한 제품환경에 맞추자. 실제서비스에서 Exadata를 사용한다면 테스트환경도 동일하게 해야 한다.

보안 엔지니어

1) 보안 솔루션을 구축해라. AppScan as a service같은 사람손을 타지 않는 서비스를 제공할 수 있도록 하자.

2) 암호화의 길은 끝이 없다. 계속 공부하고 연구해야 한다.한가지 HMAC으로 암호화하고 HMAC차이를 모르는 보안 엔지니어는 없다. (물어보면 모르는 엔지니어가 존재했다 ㅡ_ㅡ;)

테크니컬 매니저

1) 멘토를 찾아라. 강한 동기부여를 줄 수 있는 사람을 찾기 바란다. 그런 사람이 없으면 더 중요한 것에 집중하자. 멘토역할을 하는 사람을 설정하려고 하지 말자. 제발.. 피곤해진다.

2) 당신이 중요한 것이라고 믿지만, 사실 회사 프로젝트가 당신의 중요한 안건보다 중요한 것이라고 보기 때문에 힘들어도 다시 기회나 시간이 올때까지 기다려라. 욕심부리지 마라.

3) 회사의 다른 부서 사람들과의 인적 네트워크를 형성해라.

4) 회계에 대해서 이해하고 있어라. 그런 것을 모르고 회사에 대해서 불만을 제기하지 마라.

5) 제품 관리에 대해 알아두자.

6) 속도보다 품질을 우선시하자. 서두른다고 해서 좋은 것이 아니기 때문에 더 좋은 것을 제공하기 위해 충분히 시간을 가지자.

 

이 정도이다. 이 조언들이 강압적이라고 느낀다면 무시해도 좋고 동조해도 좋다. 그냥 개인적인 경험에서 나온 개인적인 생각일뿐이다.

Facebook Comments

You may be interested

페이지 로딩 위치에 따른 사용자 시선 유도
Swift 3.0
shares3 views
Swift 3.0
shares3 views

페이지 로딩 위치에 따른 사용자 시선 유도

MJ Kim - 4월 29, 2017

로딩되는 표시를 표시할 위치를 조금 고민해보면서 사용자경험(UX)를 개선하기 위함을 고려해서 정리해 본다. 로딩을 생각해보면 대부분 한가운데에 표시하면 된다고 생각하지만, Twitter…

iOS와 Android UX의 차이점
Swift 3.0
shares2 views
Swift 3.0
shares2 views

iOS와 Android UX의 차이점

MJ Kim - 4월 29, 2017

최근 필자가 iOS와 Android를 같이 개발하다보니 UX의 차이점을 기억하고자 정리해본다.  이를 정리하는 이유는 운영체제별로 차이점을 이해하고 그 차이점을 극복하기 위함이다.…

모바일 앱 아키텍처
Swift
shares26 views
Swift
shares26 views

모바일 앱 아키텍처

MJ Kim - 4월 22, 2017

이 내용은 나름대로 개발해본 내용을 토대로 정리해본 모바일 앱 아키텍처에 대한 내용이다. 이를 정리한 이유는 오래된 아키텍처부터 최근 아키텍처까지 정리해보고…