생각하는개발자
10
2018-12-07 05:05:14
6
769

스프링을 공부하면서


저는 학교에서 자료구조나 알고리즘을 배우면서 재밌었던 부분이 한 문제가 주어지면 그 문제를 해결하기 위해 생각하는 것이 재밌었습니다.(물론 풀지못했던 문제들도 많았지만요)

하지만 스프링 뿐만 아니라 안드로이드 등 하나의 프로젝트를 만들면서 느낀 것이 자료구조나 알고리즘을 배웠던 시절처럼 생각하기보다는 스킬적인 부분을 조금 더  찾아보고 오히려 생각하지 않으면서 인터넷 자료에 매달리면서 이렇게 하는 것이 프로그래밍이 맞는건지 회의감이 느껴지네요. (당연히 프로그래밍이 아니라고 생각합니다) 스프링을 사용하더라도 스프링이 가지고 있는 기본 라이브러리를 모르니, 어떤 기능을 만들려고 하더라도 검색을 하게 되네요( 아직까지 견문이 짧아서ㅠㅠ...) 답답한 마음에 글을 적어봅니당..

이것저것 말하고 싶은것이 많지만 머릿속에 정리가 안되네요 핵심은 이렇습니다 프로그래밍(생각하는힘)보다는 스킬적인 부분만 느는것같아서 회의감이 듭니다.. 

0
0
  • 댓글 6

  • 김을동
    181
    2018-12-07 07:26:44

    알고리즘이 적용될 부분은 많지 않습니다 실무에서는...

    이미 대부분이 구현되어있으니까요

    새 언어나 프레임워크 만드는 팀에 속하지 않고서야

    사실 알고리즘식으로 생각할만한 작업은 거의 없거나 간단한 것뿐..

    알고리즘짜고싶음 그나마 게임쪽 개발자 해야죠 ㅎㅎㅋ

    1
  • freestyle
    2k
    2018-12-07 07:34:00

    스프링에 사용된 디자인 패턴이라든지 알고리즘을  분석하면 원하는 프로그래밍 스터디가 될 것 같네요.

    본문에 예로 든 스프링은 프레임워크입니다. 프레임워크의 목적은 애플리케이션을 개발할 때 고민해야 하는 것들, 그러니까 자료구조니 알고리즘이니 디자인 패턴이니 이런 것들을 고민하지 말고 그것들이 적용된 프레임워크 위에서 애플리케이션-비지니스 로직 구현에 더 집중하라는 것입니다. 

    당연히 프레임워크 그 자체보다는 이 프레임워크가 해 놓은 것들을 어떻게 활용해야 하는지, 어떻게 하면 적은 코딩으로 원하는 로직을 구현할 수 있는지가 관건이 되는 겁니다. 그게 스킬이면 스킬이겠죠.

    어느 것이 더 바람직한 것이냐는 문제가 아닙니다. 그것도 중요하고 이것도 중요합니다. 갑자기 영화 대사가 생각나는데... "시계가 어떻게 움직이는지 묻지 말고 시간이나 잘 지키는" 것으로 충분할 때가 있는 것이죠.



    2
  • EF
    778
    2018-12-07 07:52:31

    지금 배우고 있는 것들이 학문적으로 무가치하다는 뜻이죠?


    저도 학교에서 처음 웹사이트 제작 프로젝트를 할때 비슷한 감정을 느꼈어서 많이 공감되네요. 단순히 다른 사람이 만들어 놓은 프레임워크랑 라이브러리를 일일이 인터넷에서 검색해서 어떻게 사용하는지 배우고 짜집기 하는거.. 이딴게 무슨 프로그래밍이라는 건지.. 고작 앱에 이미지 하나 넣는게 안되서 몇시간씩 인터넷 뒤져가며 찾은 답변이 "이 라이브러리 사용하면 편함" 이런식ㅋㅋㅋ... 이런건 단순 노동에다가 정말 학문적 가치라고는 하나도 없는 행동들이죠. 제가 생각하기에 진정한 컴퓨터 과학의 가치란 복잡한 연산을 최단 시간에 최소 리소스를 가지고 연산하는 알고리즘을 설계하는 것이고 언뜻보기에 O(n^2)인 문제를 O(nlogn)만에 연산해내서 것과 같은 일이라고 생각했었습니다.


    하지만 실제로 사회에 나와보니 생각이 많이 바뀌었네요. 실제 코딩은 학교에서 접하는 알고리즘 문제보다 훨씬 쉽습니다. 복붙도 많죠. 하지만 그 수천개의 각각 코딩 된 파트들을 하나로 접목시켜 서비스로 만드는 로직 설계는 개개 함수의 알고리즘 설계보다 어렵고 복잡합니다. 경력과 전문성을 필요로 할 뿐만 아니라 새로운 패턴이나 기술들이 개발되기 때문에 계속 공부해야 하구요. 생각하는 힘이 늘지 않는다는 느낌은 전혀 들지 않습니다. 오히려 제가 대학생일 때로 돌아가서 이것저것 조언해 주고 싶네요.

    1
  • 김룰룰룰
    383
    2018-12-07 13:10:49 작성 2018-12-07 13:12:08 수정됨

    [Spring 기반 백엔드 개발에 한정된 예시입니다. 제가 그래서요 :( ]

    [Spring 기반 개발에서도 당연히 생각하면서 개발할 수 있고 그래야 합니다]

    저도 겪었던 과정이어서 반갑네요 ㅎㅎ "스킬적인 부분을 조금 더  찾아보고 오히려 생각하지 않으면서 인터넷 자료에 매달리는 것"은 분명히 잘못된 것이므로 빨리 탈출하시는게 좋아요. Spring을 처음부터 이해하려는 자세가 없으면 아마 계속 그렇게 되실 확률이 높고요...

    물론 공부하려고 검색하는 것은 정상입니다: ex) @Transactional 전파는 어떻게 되는것인가?

    만약 Spring을 잘 활용하고 계신다면 API 사용 부분에 대한 공부가 Spring에 대한 공부 시간에 비해 절대적으로 적을 수 밖에 없어요.

    그냥 JPA 적용하는 걸 검색하는 게 정말 처음이 아닌 이상은 오래 걸릴 수가 없고요... JPA가 어떻게 돌아가는지는 꽤 오랜 시간 들여서 공부해야 되고요. 둘의 공부 시간 차이는 매우 크죠.

    Spring을 먼저 공부하는걸 추천드려요. 중심부터 시작해도 되는데 웬만한 사람은 흥미가 없을 확률이 매우 높습니다.

    Spring을 이해하기 위해선 객체지향적인 부분을 터득하는 게 중요해서 일단 Spring에 대한 이해를 우선하지 마시고 밖에서 들어오는 접근 방식으로 해서 boot로 시작하신 후에 JPA를 적용해보시고, 이후 Spring Data JPA를 적용해보세요 :)

    Spring Data 팀 리드분이 DDD 신봉자셔서 DDD 부분을 글쓴님께서 JPA와 Spring Data Jpa를 어느 정도 깊게 공부하신다면 DDD도 자연스럽게 접하게 되실거에요.(가장 간단한 개념인 Entity, Repository 등) DDD는 객체지향과 굉장히 잘맞는다고 생각하므로 선순환이 될 거에요. 

    이후에는 Test에 관심을 가지시면 테스트하기 좋은 설계가 객체지향이 추구하는 바와 매우 유사함을 알게 되실 것 같아요.

    물론 현실적으로 production에서 이런 내용들을 적용하려면 웬만한 팀원들과는 적용하기 힘들겠죠.. 하지만 개발자로서 당연히 있어야 하는 기본기라고 생각해요. 더 나은 개발자가 되고싶으시다면요 :)

    0
  • jslovers
    1k
    2018-12-07 13:46:58

    문제풀이용 알고리즘에서 생각할 것이 많다면 현실 문제에서도 마찬가지입니다. 

    처음 배울 때 개발언어의 기본적인 문법을 익히는 것과 동일하게 

    사용되는 프레임워크, 라이브러리의 API 찾는 건 기본 중의 기본일 뿐이죠... 

    바퀴를 다시 발명하지 마라

    이런 말이 있지만...

    대체제를 직접 만들어 사용해도 됩니다. 그러면 원하시는 것처럼 생각해볼 것들이 아주 많을 겁니다.

    0
  • 생각하는개발자
    10
    2018-12-08 07:39:21 작성 2018-12-08 07:45:06 수정됨
    다들 공감해주셔서 감사합니다. 해주신 조언들 새겨듣겠습니다!
    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.