Search

프롤로그2: 포스팅 글 관련

Created
2020/06/09
/*
이전 글에서는 Tistory로 넘어온 경위와 왜 블로그를 시작했는지 작성했었다. 이번 글에서는 현재는 공부하고 있는 것들과 어떤 주제로 포스팅할 것인지, 블로그 주인은 뭐하는 사람인지 간단하게 소개하고 프롤로그를 마쳐보려 한다. 여전히 글이 길다.
*/

공부 현황

이전 글에서도 적은 바 있지만, 나는 올해(2020년) 휴학을 하고 휴학 기간동안 개발에 대한 공부를 하고 있었다. 처음에 계획 했던 것은 웹과 앱에 대해서 할 줄아는 기술을 하나씩 두는 것이었기 때문에 최대한 적은 노력으로 최대한의 Coverage를 보장받는 것이었다. 공부하려는 기술에 대한 선택은 아래와 같은 조건 하에 골랐다.
'조건에 따라서 고른 여러 기술들이 결국에 공부를 해보니 조건과 잘 부합하는가'라는 질문이 생길 수도 있을 것 같다. 고른 기술들은 대체적으로 조건들에 잘 부합했던 것 같다. 이 기술들을 고른 것에 대해선 공부해보니 후회는 없었다.
1. 빠르게 배울 수 있는가?
2. 사용자가 많은 기술인가? 그렇지 않다면 발전 가능성이 충분한 기술인가?
3. 적은 시간 투자 대비 생산성이 높은 기술인가?
4. 궁금한 부분에 대해서 질문을 던질 수 있는 사람이나 커뮤니티가 있는가?
5. 정보 수집이 용이한가?
6. 취업에 도움이 되는 기술인가?
7. 배우는 것과 실제로 이용하는 데에도 재밌게 할 수 있는가?
이에 따라 고른 기술은 Flutter, Node.js, React.js였고 웹에 대한 이해가 필요했기 때문에 HTML / CSS / JavaScript에 대한 공부가 요구 되었다. 또한 Flutter의 Http 연동을 위해서 주로 사용하는 것이 Firebase이며, 실제로 FCM(Firebase Cloud Messaging)이나 FCF(Firebase Cloud Function)은 주로 쓰이기 때문에 Firebase에 대해서도 이용할 줄 알아야 한다고 생각했다. 또한 RDB, NoSQL도 ORM과 ODM을 이용하여 백엔드를 다뤄보고 싶었기 때문에 Node.js와 주로 사용하는 MySQL, MongoDB를 추가적으로 선택했다.
공부 과정은 Flutter -> Firebase -> Node.js -> HTML / CSS / JavaScript -> React.js 순으로 계획했고, 현재는 HTML / CSS / JavaScript 과정을 진행 중이었다.
여기서 잠깐 1, 2, 3번에 대해서 어떤 것을 중점적으로 공부를 했는지 짚고 가겠다.

1. Flutter

Stateless Widget, Stateful Widget의 Life Cycle
Widget Tree, Element Tree, Render Tree 란 무엇이고, 서로 영향 관계
MediaQuery를 이용한 Responsive UI
setState, Provider, BloC 패턴을 통한 다양한 State Management
Native 기능을 이용하는 방법
Animation 작동 시키는 방법
RxDart, StreamBuilder, BloC Pattern

2. Firebase

FireStorage 저장소 이용 방법 및 규칙 설정
Cloud Firestore 데이터베이스 이용 방법 및 규칙 설정
Cloud Firestore 데이터베이스의 Collection과 Document를 이용한 Query
Firebase를 기반으로한 Authentication, Google 소셜 로그인
Firebase Cloud Function으로 특정 Event에 따른 Node.js 함수 이용
Android & iOS의 Firebase Cloud Messaging을 이용한 Push Notification 이용

3. Node.js

Node.js란 무엇인가
Event Loop, Call Stack, Task Queue에 대한 기본적인 이해
Single Thread와 Non-Blocking이란?
ES6 문법의 이해
Promise와 Async Await
MySQL, MongoDB를 연동하여 이용하기
ORM(Sequelize), ODM(Mongoose) 기초 이해
One to One, One to Many, Many to Many 관계
API Server의 Client Key와 Server Key, CORS Error 이해
 Cookie, Session, Token의 이해
ws, socket.io를 통한 WebSocket 이용과 Namespace
RESTful Server, GraphQL의 Schema와 Resolver
MVC 패턴의 이해
Payment, Email, Map API 등의 이용
Node.js에서의 Testing Code
이용하려는 기술들에 대한 전반적인 기초를 쌓아보는 과정을 절반 진행한 와중에 HTML / CSS / JavaScript 및 React.js에 대해서 이어서 공부를 할지 고민이 정말 많이 되었다. 결과적으로 공부 방향을 틀었고 공부 계획에 대해서 적어보겠다.

공부 계획

위에서 언급한 것처럼 웹 프론트엔드를 공부할지 많은 고민이 된 이유는 현재까지 공부한 것들이 껍데기와 같은 느낌을 많이 받았기 때문이다. 기술에 대한 공부가 나쁘다고 말한 것이 아니다. 분명 지난 6개월간의 공부는 의미 있었고, 아무 것도 할 줄 몰랐던 상태에서 그래도 웹 구현과 어플 구현에 대해서 조금은 배웠을 뿐 아니라 웹과 앱이 재밌다는 것을 알았다. 나는 졸업 후에 개발자가 되더라도 웹, 앱 개발자에 대해 부정적으로 생각하지 않는다.
그럼에도 지금 진행 중이던 웹 프론트엔드 공부를 중단할 정도로 현재 공부한 것들이 껍데기와 같다는 느낌을 받았다는 것은 정말 말 그대로 기술에 대한 이해만 는 것 같았기에 알맹이가 쏙 빠진 것과 같은 느낌을 받았다는 것이다. 새로운 기술에 대해서 배우고, 그 기술을 이용하기 위해서 Official Document를 찾아보는 것이나 예시를 사용하는 시간이 아깝다고 느낀 것은 아니었다. 이런 과정들은 오히려 '새로운 것들이 있구나' 하는 호기심과 흥미를 만들어 주었다. 특히 배운 것을 적용하는 과정에서 문제를 겪더라도 해결해가면서 성공적으로 이용할 수 있게 되었을 때, 그것 만큼 큰 성취감을 가져다 주는 것은 없었다. 내가 말한 알맹이 쏙 빠진 껍데기라는 것은 (충분한 설명이 될지 모르겠지만...) 로직을 이용한 구현에 있다.
즉, 알고리즘 풀이에 대해 부족함이 참 크다고 느꼈던 것 같다. 코딩하다가 구현이 막히는 경우 스스로 생각하면서 푸는 것이 바람직하다고 생각하고, 이렇게 했음에도 해결이 안 되는 것은 검색을 통해서 어떤 식으로 풀어 나가야 하는지 알아보는 것이 맞다고 생각한다. 하지만 나는 그러지 못했고, 지난 시간 내가 해왔던 행동들을 보니 막히는 부분에 대해서는 다른 사람의 코드에 대해서 이해만 하고 그냥 썼던 것 같다. 그리고 지난 사례와 내 코딩 스타일을 냉정히 봄으로써 나를 판단해보기로 했다. 스스로 구현할 수 있는 능력이 생각보다 많이 떨어졌던 것 같다. 실제로 3학년을 마치고 스타트업 면접을 꽤 보러 다녔었는데, 기술에 대한 얘기는 잘 했던 반면 라이브 코딩이나 손 코딩 혹은 알고리즘에 대한 얘기는 상당히 어려움을 겪었던 기억이 난다. (이외에도 과제, 텀 프로젝트, 주변 사람들에 대한 기억을 통해서도 모자람을 많이 느낄 수 있었다.) 이런 느낌들은 내가 전공 공부를 할 때 받았던 느낌과 사뭇 비슷한 냄새와 느낌을 풍겼다. 따라서 생각해낸 방안이 알고리즘 문제풀이와 C, C++(전공과 밀접한 관련이 있는 언어)에 대해서 다시 공부를 해보는 것이었다.
과연 '문제풀이와 C, C++의 공부가 내가 겪고 있는 어려움에 대해서 해결을 해줄 수 있을 것인가' 라는 고민을 진지하게 해보았다.

1. 어차피 웹이나 앱 공부하면서 코딩하다보면 어려운 것이든 쉬운 것이든 구현하면서 실력이 늘지 않는가?

부정하지 않는다. 맞는 말이다. 어쨌든 코딩 하는 것이니 실력이 늘지 않겠는가? 다만 내가 신경 썼던 것은 실력이 느는 방향과 속도였다. 어쨌든 나는 스타트업이든 대기업이든 길을 못 정하긴 했지만 졸업 전까지 마음 맞는 사람들과 스타트업을 하지 못한다면 대기업으로 빠질 확률이 상당히 있다고 생각했다. 따라서 코딩 테스트도 고려해야 한다.
웹 구현을 공부하는 것이 알고리즘 문제풀이 실력에 지대한 영향을 끼치는가?
알고리즘 문제풀이 실력이 웹 구현에 있어서 많은 도움을 주는가?
에 대한 질문을 던져보면 후자 쪽이 나에게는 더 와닿았다. 무엇보다도 나는 지금 당장 특정 Application을 만들어 낼 필요는 없는 상황이다.

2. 언어를 꼭 C, C++로 해야하는 이유가 있는가? 더군다나 새로 다시 공부해야 한다고 하지 않았는가?

물론 꼭 C, C++로 할 이유는 없지 않는가? 지금 사용하는 JavaScript를 이용해서 코딩 테스트를 볼 수 있는 곳도 조금씩 늘어나고 있고 JavaScript를 이용하여 취업 가능한 곳도 많다. 여기서 또 고려했던 것은 Super Set이었다. 거기서 내린 결론이 C, C++이었다. 어느 기업에서 코딩 테스트를 보더라도 C, C++은 예외 없이 이용할 수 있었다. 또한 전공 공부로도 마찬가지다. 컴퓨터 쪽은 아무래도 Low Level과 근접하여 배우는 경향이 크기 때문에 메모리를 직접적으로 컨트롤 할 수 있는 Unmanaged Language가 조금 더 전공과 근접하다. 따라서 JavaScript를 계속하는 것도 좋지만 전공을 연계하여 취업하기 위해선 어쨌든 C, C++은 할 줄 아는 것이 여러모로 유리하다고 생각했다.
'현재 사용하는 JavaScript를 잘한다'라는 것이 'Unmanaged Language를 잘 할 수 있다'와 직결될 수 있는가?
'Unmanaged Language를 잘 한다'는 것이 '현재 사용하는 JavaScript의 실력을 향상 시킬 수 있다'와 직결되는가?
에 대한 질문을 던졌을 때 역시나 후자 쪽이 나에게는 더 와닿았다. 어쨌든 더 넓은 선택 폭을 가질 수 있을 뿐 아니라, 앱과 웹을 해보니 이 둘은 언제 공부해도 충분히 뛰어들어서 해볼 수 있겠다는 생각이 들어서 C, C++에 대한 공부를 해야겠다고 판단했다. (C, C++을 많이 쓰지는 않지만 개인적으로 C, C++ 잘하는 사람에 대해서 굉장히 멋지다고 생각하는 것도 한 몫했다.)
그래서 결론은 앞으로의 공부 방향은 당분간 알고리즘 문제풀이와 C, C++에 대한 공부(STL과 Modern C++ 포함), 그리고 이와 연계한 전공 공부가 될 것이다. 이렇게 공부한다고 해서 Flutter, Node.js 등을 아예 안하는 것은 아니기 때문에 겪는 이슈에 대해서는 블로그에 올릴 계획이다. 그저 공부 시간에 주로 차지하는 주제가 바뀌었을 뿐이다. 어려운 길이 될 것 같지만 깊이 있는 공부를 하고 싶고, 여유롭게 공부할 수 있는 시간이 있을 때 할 수 있는 공부를 하고 싶다.
마지막으로 조금만 더 첨가하자면, 지금까지 구매한 것 이후로의 더 이상의 인강은 듣지 않을 계획이다. (차후에 새로 배우고자 하는 프레임 워크 등의 입문을 위한 것이 아니라면 말이다.) 인강보다는 서적이 좋겠다는 생각이 요즘에 많이 든다. 인강으로 보내는 시간보다는 책을 읽으며 내 언어로 재구성하고 스스로 이해하는 시간을 가져보려 한다.

포스팅 계획

기존에 Medium에서 작성 했던 글들은 대부분 코드만 던져놓고 아무런 말도 안 적은 글들이 99%이다. 이런 글들에 대해서 조금씩 내 생각을 풀어서 카테고리에 맞게 포스팅할 계획이다. 일상적인 활동 뿐만 아니라 공부하면서 느낀 점들과 고찰은 Daily Log에 남기려고 한다. 또한 Notion에 기록했던 강사의 강의 내용에 대해서도 스스로 이해하는 시간을 먼저 갖고 블로그에 풀 수 있도록 하여 조금씩 글을 옮겨볼 생각이다.
매체를 가리지 않고 새로이 알게된 것들도 포스팅 계획에 있다. 포스팅 주기는 최소 2일에 1개 정도로 가급적 짧게 가질 계획이다. (이제 커밋 횟수도 점점 줄 텐데 포스팅 횟수라도 안 늘면 나는 공부를 안 하는 것이겠지?? ㅎㅎ..) 이전 프롤로그1에서 다뤘던 것과 같이 규칙적인 패턴을 통해서 하루를 최대한 컴팩트하게 보낼 것이기 때문에 오전에는 취짐 전에는 블로그를 기술하는 시간을 가져서 공부한 것들에 대해서 이해한 것들 위주로 글을 작성할 것이다. 최대한 깊이 있는 공부를 위해 이해한 것에 대해서도 의문을 가지는 습관을 가져보려 한다.
포스팅은 이해를 바탕으로 할 계획이지만, 최대한 예제 기반으로 해볼 생각이다. 그리고 Reference에 대해서 기재하는 습관이 매우 약하기 때문에 내가 참고한 사이트들은 모두 Reference에 추가할 것이다. (방문자들이 내 글을 읽고 이해하기 어렵다면, 기재한 사이트에서 정보를 얻을 수 있도록 하기 위해서이기도 하다.)
댓글에 대한 정책은 로그인 유저에 한하여 받을 계획이다. 또한 로그인 유저로 부터 받는 리플이 선플이든 악플이든 혹은 피드백이 좋든 나쁘든 블록하지 않고 모두 수용할 계획이다. (생긴거랑 다르게 마음은 또 여려서 상처는 잘 받지만 어쨌든 로그인 하는 과정 자체에 감사하기 때문에...) 따라서 부족한 점이 보여서 답답하거나 그럴 일은 없지만 어쩌면 내 글이 도움이 되어 감사함을 표시하고 싶을 때는 가감 없이 코멘트를 남겨도 좋고 남기지 않아도 좋다.

블로그 주인 Info (글 작성 시간 기준으로)

1. 인서울 대학 컴퓨터를 전공하는 휴학생
2. 개발 1년차 완전 초보 개발자
3. 백준 solved.ac 기준 실버2 (95 sol)
4. Flutter, React.js, Node.js, MySQL, MongoDB, Firebase 선호
5. C++, JavaScript에 대한 열망
6. 알고리즘 문제풀이와 수학을 잘하고 싶은 마음 만땅
7. 관심 분야 찾아서 학부 연구생도 해보고 싶은 마음 만땅
8. 스타트업에도 관심이 많으면서 그만큼 대기업도 엄청 가고 싶어하는 컴과생
9. 위에서 본 것처럼 할 줄 아는 거에 비해서 욕심은 엄청 많은 욕심쟁이