이번에 국비지원 강의를 듣고 파이널 프로젝트를 진행하면서 프로그램을 어떻게 구성해야 하는지에 대해서 많은 의문이 들었다. 우선 프로젝트 구현 내용에서 말하는 용어들이 낯선 것이 첫 번째 이유요, 국비지원 강의를 들으면서 기본 문법에 대해서 배웠지만, 정작 그것을 어떻게 활용해야하는지에 대해서 알 수 없는게 두번 째 이유였다.
이해하기 쉽게 영어로써 비유를 한번 해 보자면 기본적으로 영어 문법에는 주어, 동사, 명사, 형용사, 부사, 전치사 등등 단어의 종류를 의미하는 것이 있다. 이후 이 단어들을 형식으로 연결해서 만든 것이 문장의 5형식으로 볼 수 있겠다. 그렇다면 이 단어들과 형식을을 조합해서 문장을 만드는데, 만들어진 문장을 어떤 식으로 사용해야하는지, 어떤 상황에 사용해야하는지에 대한 가이드라인이 없다는 생각이 들었다. 여기에 대해서는 흥미로운 주제가 될 것 같아서 다음에 잡설로 한번 쭉 써 봐야겠다.
현재까지 들은 JAVA-SpringBoot, Swift강의 파이널 프로젝트에서 프로젝트에 요구하는 사항이 문서로써 작성이 되어 있었다. 그렇다면 문서가 요구하는대로 결과물을 만들어서 제출해야 하는데, swift의 경우 간단한 ui구현이기 때문에 문서를 읽는데 어려움이 없었지만 Java-Spring의 경우 생소한 용어들이 너무 많이 나왔다. 비즈니스 컴포넌트, 영속성 관리, 엔티티, 시퀸스와 같은 용어들. 그리고 Lombok과 JPA, API와 같은 용어들이 기초적인 지식이 없는 상황에서 이해하기란 너무 난해했다. 마치 주어만 알고 동사와 명사를 구분도 못하는 사람에게 동사와 명사를 구분해서 사용해야지 하는 느낌. 그래서 해당 용어들이 무엇을 의미하는지, 이와 같은 용어들과 MVC 패턴을 구성하는 방법, 그리고 REST와 Repository, Bean과 같은 것들이 어떤 역할을 하고 왜 이렇게 사용하는지에 대해서 계속 구글링 하고 또 구글링하고, 정리하고 구글링하고 구현해보고...
심지어 MVC를 검색하면 MVVM도 나오고, 디자인 패턴이라고 하면서 디자인 패턴에 대해서 검색하면 GoF가 나오고, 거기서는 MVC는 안나온다! 비즈니스 로직도 모르겠고 모르는 용어가 산더미같이 산재해 있으니 정말 간단하고 포트폴리오에 도움도 안되는 프로젝트라고 하지만 그냥 모든게 낯선 상황에서 내가 그것을 어떻게 이해해야 하는가. 그래서 멘땅에 헤딩하듯 검색하고, 스터디하고, 일단 찾은대로 닥치는대로 구현해보다 보니 점점 그 역할들이 명료해지는게 사실이고, 그걸 이제는 구현을 해 냈으니 거기에 대해서 설명하고 정리할 필요성을 느끼고 있다. 그러기 위해서는 우선 프로그래밍 언어 문법에 대해서 정리를 할 것이 아니라, 우리가 해당 언어를 왜 쓰는가? 소프트웨어는 어떻게 구성되어있는가? 개발자는 어떤 과정을 통해 프로그램을 만드는가?
이 점에 있어서 실용주의 프로그래머를 읽은 것은 정말로 많은 도움이 되었다. 무작정 코드를 짜는 것이 아닌, 소프트웨어 설계를 어떻게 하고, 어떤 언어를 선택할지, 어떤 기술을 선택할지에 대한 안목을 길러주게 해 주었다는 생각이 들어서. 심지어 이게 실무를 보는 개발자를 위한 서적임에도 불구하고 개발을 배우기 시작하는 내가 나중에 이런 내용이 있었지 하고 찾아보고 보다 시행착오를 줄이는 이유가 될 줄은 몰랐다. 그래서 만들고 난 후에 패턴을 익히고 공부하는 것 보단, 이미 만들어져있는 소프트웨어들을 역공학으로 혹은 분해를 하면서 구조와 패턴에 대해서 이해하고, 소프트웨어 설계를 어떻게 해야할지에 대해서 이해하는 것이 낫겠다는 생각이 들었다. 심지어 프로젝트를 진행하면서 느낀건, 언제나 처음 생각한 대로 프로그램이 구성이 되지 않는다는거다! 하다보면 에러가 나올 수도 있고, 처음에 생각했던 기능에 대해 추가적으로 이런 기능을 넣으면 좋겠다는 생각이 들면 해당 기능을 구현하다보면 코드가 점점 섞이고 내가 어떤 의도로 이 코드를 작성했는지, 어떤 기능을 구현하려고 했는지, 코드들이 어떻게 유기적으로 연결되어 있는지 점점 헷갈리게 된다! 그래서 지금 국비지원 강의를 파이널 프로젝트까지 마친 지금 디자인 패턴에 대해서 공부해보고자 한다.
https://m.hanbit.co.kr/store/books/book_view.html?p_code=B6113501223
헤드 퍼스트 디자인 패턴(개정판)
유지관리가 편리한 객체지향 소프트웨어 만들기! “『헤드 퍼스트 디자인 패턴(개정판)』 한 권이면 충분합니다!”
m.hanbit.co.kr
공부 할 책은 헤드 퍼스트 디자인 패턴. 어제 서점에 가서 읽어보니 그나마 디자인 패턴에 대해서 정말 쉽게 그림과 함께 적혀있고, 모르는 사람이 배우기 쉽도록 공부하는 방법에 대해서도 상세하게 설명이 되어 있던 책인 것 같다. 그래서 이 책을 읽는 방법은 이전에 실용주의 프로그래머를 진행하면서 했던 방법들과 일정을 따라서 해 보려고 한다. 그때 실용주의 프로그래머가 9장까지 있었으니, 이건 대략 14장까지 있으니 한달을 잡고 진행해봐야겠다. TIL 작성과, TIL 작성 이후에 한 챕터에 하나의 디자인 패턴이 나오니 그 디자인 패턴에 대해서 정리하는 하루, 이런 식으로 진행해봐야겠다.