Deer Hunter
362
2020-11-18 14:02:43
18
3455

개발 관련 공부에 대한 개인적인 생각


안녕하세요. 어느덧 올해도 2달이 채 남지 않았네요.
모두들 올초에 계획하신 바를 이루셨는지요?

개발 관련 일을 한지도 벌써 20여년이 되었네요. 지나간 시간들을 뒤돌아 보면 많은 선,후배님들의 도움으로 지금까지 개발자로 일할 수 있지 않았나 생각됩니다.
이에 제가 받은 도움을 돌려드리고 또한 먼저 시행착오를 겪은 사람으로서, 조금이나마 후배님들께 도움이 될까하여 글을 씁니다.
참고로 이것은 절대적인 것이 아닌, 개인적인 생각이므로 가볍게 읽어 주시기 바랍니다.
또한 글이 길고, 지루하고, 소위 꼰대의 잔소리가 될 가능성이 높으니 이를 싫어하시는 분은 가차없이 뒤로 가기를 눌러주시기 바랍니다. ;)

1. 기술의 본질에 대한 이해
여러분이 친구와 catch ball을 한다고 가정합시다. 친구가 하늘 높이 공을 던졌는데 햇빛에 눈이 부셔 공의 궤적을 놓쳐버렸습니다.
이제 공을 찾아야 하는데, 친구가 하늘을 계속 쳐다보면서, 하늘에서 공을 찾으려 한다면 어떨까요?
여러분은 공을 찾기 위한 정상적인 접근 방법이라고 생각하지 않을 것입니다.
왜냐하면 제한된 운동 에너지로 공이 무한히 하늘 위로 올라갈 수 없으며, 공중에 떠 있을 수도 없고, 중력에 의해 떨어지기 때문이죠.
이에 따라 현재 상황(조건)에 따라 공이 떨어질 만한 가능성이 있는 곳을 찾을 것입니다.
(1)근처에 공이 걸리거나, 떨어질 만한 나무 또는 집이 있는 경우
(2)위 경우가 아닌 평지인 경우
(3)평지 끝에 내리막 길이 있는 경우
(4)기타
자신과 친구가 위치한 주변의 가까운 반경부터 확인해서 못 찾으면 그 범위를 넓혀가며, 그 범위 안에 나무 또는 집이 있다면 해당 개체를 확인해보고, 못 찾으면 범위를 또 넓혀가며 이런식으로 찾을 것입니다.
어떻게 우리는 공을 찾기 위해 하늘을 계속 바라보지 않고, 이러한 접근을 할 수 있는 것 일까요?
어떠한 이론적인 것들을 떠나 우리는 무의식적으로 중력의 작용에 따라 공이 낙하함을 알고, 이를 체화하여 이해하고 있기 때문일 겁니다.
이를 기반으로 가능성이 없는 경우를 제거하고, 가능성이 있는 경우를 하나씩 확인해 가며 문제를 해결하는 것입니다.

이는 개발과정에서도 비슷한 면을 볼 수 있습니다.
Client에서 Server로 data를 전송하는 과정중에 문제가 생겼다고 가정합시다.
Networking에 대한 이해가 있다면, 해당 Error message가 의미하는 바를 이해하고 문제의 원인이 될 수 있는 몇가지 경우들을 가정하여, 하나씩 확인하며(범위를 좁혀가며) 문제를 해결할 수 있을 것 입니다.
(예를 들어 Application layer에서 발생한 것인지, 아니면 하위의 Network layer에서 발생한 것인지 등등)
그러나 그렇지않다면 위의 "하늘에서 공을 찾으려는 것"과 같은 잘못된 시도를 할 수도 있습니다.
이는 기반 기술에 대한 이해가 없으니, 어떤 것이 확실하게 맞다 혹은 아니다 라는 기준이 없으므로 전혀 동떨어진 가정 또는 분석하에 엉뚱한 곳에서 그 원인을 찾기 때문입니다.
이럴 경우 당연히 문제를 해결 할 수 없게 되겠지요.

그러므로, 특정 framework, library 등의 사용법에 대한 학습보다는, 먼저 기반 기술의 본질에 대해서 학습하시길 권유드립니다.(특히 개발자가 되려고 준비하시는 분들)
네, 물론 저도 압니다. 재미도 없고 당장 실무에서는 사용할 일이 없는 것 같고, 새로운 것들은 쏟아지는데 안 쫓아가면 나만 뒤떨어지는 것 같고...
그러나 개별 기술들에 대한 이해의 폭이 넓어질수록, 필요에 따라 새로운 framework, 응용기술에 적응, 이용하는데에는 그리 오랜 시간이 걸리지 않을 것 입니다.
왜냐하면, 그 framework 또는 library의 목적 자체가 기존에 이미 존재하는 해야할 일을 추상화시켜, 개발자가 직접 관여 또는 구현하지 않고, 쉽게 사용하여 원하는 일을 수행하도록 만든 것이기 때문입니다.

2000년대 초반만 해도 기업용 enterprise 환경은 WebLogic, WebSphere 제품등을 필두로 한 EJB 환경이었습니다.
현재는 잘 아시다시피 개별 기업의 용도 및 필요에 따라 Spring, node.js, python 등으로 대체되었습니다.
Mobile 환경의 경우 iOS(iPhone), Android가 나오기 전 2000년대 후반까지는 SK-VM, GVM, Brew, WIPI platform 등이 국내시장을 장악하고 있었습니다.
그러나 현재는 어떻게 되었는지요? 상기 platform들은 모두 사라졌으며, iOS, Android로 대체되었습니다.
이는 특정한 제품, framework 또는 platform들은 언제든 다른 것들로 대체될 수 있다는 의미입니다.
그러나 여전히 OS, Network, DB, Security, Data structure, Algorithm, Design pattern 등으로부터 기반한 기술들은 모든 개발 분야에서 사용되고 있습니다.

그러므로 기반이 되는 기술에 대한 학습 및 이해를 추구하는 것이 앞으로 여러분의 긴 개발자의 여정에 도움이 될 것이라 생각합니다.
또한 어떠한 기술을 습득하려할 때 그 기술의 목적이 무엇인지, 어떤 문제를 해결하려고 나왔는지, 동작 원리는 무엇인지를 파악하고, 이와 관련하여 간단하게라도 code를 작성해 본다면 피상적인 이해에 그치지 않고, 깊게 이해하는데 크게 도움이 될 것 입니다.

다시 한번 말씀드리지만, 저의 개인적인 생각을 바탕으로 쓴 글이므로 가볍게 참고해 주시기 바랍니다.

31
13
  • 댓글 18

  • beryy
    125
    2020-11-18 14:40:21

    좋은 글 감사합니다! 저도 한때 공부 방향을 못잡아 방황한 적이 있어서 캐치볼 비유가 와닿네요. 

  • 보후리
    175
    2020-11-18 14:54:17
    오우.. 맞는 말씀 이신것 같아요 ! 
  • 베르무트
    51
    2020-11-18 14:57:16

    좋은 말씀이십니다 :)

  • jw_891
    234
    2020-11-18 15:12:23
    좋은 말씀 감사합니다. 저는 이제 시작이긴 하지만 디자인패턴이나 네트워크 같은 기본을 공부하면 생각하는 시야 같은 게 넓어지는 거 같아요. 
  • 인사동
    1k
    2020-11-18 15:42:48

    추천 꾹 누르고 갑니다

    > 1. 기술의 본질에 대한 이해

    다음 시리즈도 있는거죠? 기대하고 있겠습니다.

  • worktree
    21
    2020-11-18 18:04:10

    캐치볼의 비유가 뇌에 박힙니다 좋은 글 감사합니다

  • 발업리버
    29
    2020-11-19 09:48:00

    마음에 드는 글이라 스크랩하고 갑니다. ! 다음글도 기대합니다.

  • 센충이
    4
    2020-11-19 17:51:27

    비단 개발 직무만의 얘기는 아니겠지만, 몸담고 있는 직업과 기술에 대한 철학과 소신을 갖고 있다는 게 참 멋있네요.

  • 딩규
    127
    2020-11-20 00:30:38

    좋은 글 감사합니다

  • 코딩딩중
    67
    2020-11-20 10:14:57

    정말 좋은 글입니다. 신입개발자로써 현재 기본부터 다시 공부하고 있는데 남들보다 뒤쳐질까봐 두려웠었거든요. 글 보고 다시 마음 잡고 공부하겠습니다. 감사합니다.

  • 새싹도우미
    23
    2020-11-21 03:23:28

    공감합니다.

  • 물곰
    115
    2020-11-22 20:35:50
    너무 잘 읽고 갑니다. 감사합니다.
  • 먹고살려고한다
    16
    2020-11-23 09:13:56

    감사합니다.. 동기부여가 되는 글이었습니다.


    혹시 OS, Network, DB, Security, Data structure, Algorithm, Design pattern


    관련하여 꼭 봐야하는 바이블이라고 칭할 수 있는 서적이나 인강을 추천해주실 수 있을까요



  • smileAgain
    59
    2020-11-23 10:09:59

    좋은글 감사합니다~^^ 아직 초급이지만.. 본의아니게 풀스택으로 일하고 다양한 언어로 프로젝트를 진행해보면서 느낀부분은 항상 공통점이 있다는 것이었는데! 정리를 너무 잘해주셨네요!

  • 보보8
    1k
    2020-11-23 21:37:28

    말씀하신것처럼 목적은 중요한데, 방법은 중요하다고 생각안합니다.

    전체적인 것을 바라볼줄 아는 눈이 필요한건 맞는데, 그걸 어떻게 가질거냐는 또 다른 문제인거 같아요.

    기술의 본질의 학습이 따분한 이유는 두꺼운 책가지고 네트워크를 이해한다고 글자 하나씩 보다보니 그런거 아닐까 싶네요.

    기술에 대한 이해가 필요할때마다 본인 상황을 해당 기술에 대입해서 그 기술을 조금씩 이해해나가는 형태로 나아가면 어쩌면 더 재밌고 좀 더 수월하게 전체를 바라볼 수 있는 시각이 생길지도 모른다 생각합니다.

    모든일이 마찬가지라 생각해요.

    꼭 정답이 있는 길이 하나만 존재하는게 아니라, 개개인마다 적합한 길이 다르다 생각합니다.

    누구에겐 빠른 길이 누구에겐 느릴지도모르죠.

  • 하이열
    162
    2020-11-24 06:01:22
    현재의 스프링 프레임워크  이전에도 수많은  프레임워크가  있어왔듯이
    변형되고  나아지는  기술의  연속입니다.   자바 책을  완독했다 해도  버젼마다 추가되는
    기술과 대체가  늘  존재하듯  완전한  이해가  아닌  늘  조금은  아쉬운  이해로  남겠지만
    시간이  지남에  따라  신버젼이  베이스가  되는  날도  늘  있어왔습니다
    그것을  먼저 익힌자와  사용법을  먼저  익힌 자들이  기슐적  우위에  있는건  맞습니다만...

    제가 주위 초급 개발자에게 기본기를  강조하는 부분은  코딩이  아니라  
    살아있는  코드를  만드는  것입니다
    자신만  아는  코드보다  읽기쉽고  변화가  가능하며,  코드 자체를  변수처럼  다이나믹하게
    변경될수  있어야  한다고  알려줍니다.  그 바탕엔 리팩토링과  코드 컴플릿  같은 책을  읽고,
    늘  코드를  읽기쉬운  상태로  두어야하며  주석을  잘  달아야  한다는  기본적인  내용이죠
    굉장히  쉬운건데  안지켜지는  요소이기도   합니다.  습관을  들여야   합니다.

    숲을  보기 전에   자신의  나무가   뿌리를  내리고  자라야  숲의  한 요소인 나무가  됩니다
    퇴비와  물을  주면서  잘 키우면서,  올곧지 않게  자랄땐  지지대를  두어  한방향으로 자라나도록
    하기 위한  가징  좋은  방법은  기본을  항상  지키는  거라  생각합니다

    운전습관에서 깜빡이를  키는  습관을  잘  못지키는  것처럼  알고있지만  잘  지켜지지  않는것을
    항상  상기하고   습관과  기본은 항상 충실하게  지켜야만 프로그래머로  오래  살아남을수
    있을거라고  생각합니디.
  • 열심히개발자
    130
    2020-11-25 10:53:31

    요즘에 느끼는 내용과 일치합니다~

    좋은 내용 감사드립니다.

  • Deer Hunter
    362
    2020-12-01 12:16:12

    @먹고살려고한다 님

    바이블이라기보다는 읽어보시면 도움이 될 만한 책들을 아래와 같이 추천합니다.
    참고로 개정판이 나온 책들이 있을 수 있으니 참고하시기 바랍니다.


    The C programming language
    Refactoring
    GoF design pattern
    Code complete
    Effective java
    Operating system concepts
    성공과 실패를 결정하는 1%의 네트워크 원리
    알고리즘 문제해결 전략 1,2

  • 로그인을 하시면 댓글 을 등록할 수 있습니다.