Search
Duplicate

2021년 10월 1주차 회고록 - 과욕2

Facts

코드숨 8주차 과정 진행
Docker 기초 학습
Javadocs, asciidocs 학습
알고리즘 스터디 2주차 과정 진행
리스트, 해시 스택, 큐
우아한테크캠프 프로 1주차 프리코스 미션 진행
숫자 야구 게임 만들기

Feelings

코드숨 8주차 과정 진행

이번 8주차는 프로젝트의 문서화와 Docker를 이용해 프로젝트를 빌드하고 Docker Hub에 업로드를 하는 것 까지를 해보았다.
이전 주차의 과정들에서 꾸준히 해오던 public API에 대한 주석작성 학습으로 인해 javadocs작성에는 크게 어려움을 겪진 않았으나 Rest API Docs를 작성함에 있어서는 처음에 약간 방황했던 것 같다.
뭔가 규격이나 프레임이 짜여져 있으면 거기에 내가 맞추는데는 익숙하지만, 그런 프레임이 따로 없기도 했고 그러다 보니 구성을 어떻게 해야 할지 막막했다. 그래서 처음에는 그냥 구글링해서 나오는 asciidocs 예제나 조졸두님의 구성을 보고 따라했는데, 그것도 이해가 쉽지않아서 퇴근하고 9시까지 약 3시간동안 뭔가 한것도 없는것 같은데 지나서 리뷰에 맞춰서 원하는 성과를 만들어내지 못하곤 했다.
지금까지 했던 스프링이나 개발에 들어가는 기술에 대한 학습이 아니라 문서화에 대한 학습은 내가 뭔가 가시적인 성과나 내용을 제공하지 못하는 것 같은데 시간은 더부족함을 느껴서 좀 힘들었던 한 주가 아니였나 싶다.
도커도 따로 학습을 한 적이 없이 인강만 보고 따라하니 해당 내용에 대해서는 어떻게든 진행은 되지만 이해가 수반되지 않은 특정 명령어의 따라치기일뿐인지라, 뭔가 그냥 수동적으로 타이핑을 하는 느낌을 지울 수 없었다.
다시 한 번 느끼지만 여유가 좀 생기면 도커와 쿠버네티스 책 사둔 것을 빠르게 학습할 필요가 있을 것 같다.

알고리즘 스터디 2주차 과정 진행

월요일 저녁에 회고 및 2주차 안내와 세미나 이후 수요일까지 한 문제조차 보지도 못했다.
밀려버린 미션들과 회사업무들로 인해 매일매일 잠도 3시간 이하로 자면서 코딩을 했는데도, 여유가 생기지 않아서 목요일은 되서야 재택근무를 하면서 겨우 미션을 진행할 수 있었다.
문제를 풀 때 한 문제를 최대한 다양한 방법으로 풀어보려고 노력하고 있는데, 둘 셋 정도의 방식으로 문제를 풀어본다.
하지만, 내 코드는 뭔가 복잡하고, 길어지거나 해서 요즘 좀 스트레스가 있다.
대부분 그래도 남의 코드를 안보고 혼자서 해결하려고 하지만, 내가 이미 해결한 문제나 수시간 내에 해결이 불가능한 문제에 대해서는 다른 사람들의 코드를 참조하는데, 너무 깔끔하고 짧게 해결을 하는 코드들을 보면 내가 재능이 없나 고민을 하게 된다.
그래도 재능은 부족할 수 있지만 열정도부족할수는 없다는 생각으로 목요일에 시작한 미션도
토요일까지 모두 코드를 작성하고 정확도 (혹은 효율성) 테스트까지 모두 통과하고 PR을 보내고 리뷰를 동시 진행하고 있는데 한 문제정도만 통과하면 2주차 과정도 모두 클리어하게 된다.

우아한테크캠프 프로 1주차 프리코스 미션 진행

이미 지난 기수 신청때도 만들었던 프로젝트를 또 만드는 것인데도, 시간이 엄청 걸린 것 같다.
물론, 이 역시 회사일이 겹치면서 시간이 부족해져서 밤새가면서 한 것 같다.
아무래도 이전에 할 때 보다 공부도 더 하고 코드숨 과정도 진행하면서 배운 점들을 새로 녹여내려다 보니 고민할 것도 더 많아졌고, 그러면서 같은 주제로 프로젝트를 만들어야 했지만, 고민하고 개발에 필요한 시간은 더 길어지는 것 같다.
그래도 제출 마감 마지막 날 겨우 제출을 했고, 이제 2주차 과정인 자동차 경주 게임을 만들어야 한다. 이것도 끝나면 그래도 좀 숨통이 트일런지 모르겠다.

과욕의 결과

지난 한 주간의 일정은 아래와 같았다.
평일: ~ 17:00 회사, ~21:00 코드숨 미션, ~ 23:00 알고리즘, ~03:00 우테캠
주말: 08:00 ~ 17:00 알고리즘, ~21:00 코드숨 미션, ~02:00 우테캠
주간회고를 작성하기도 힘들다. 체력이 부족하다...
퇴사를 결정하면서 이직에 대한 불안감 + 코드숨 진행을 하면서 학습에 대한 사이클이 돌고 하나만 진행할 때는 여유가 좀 되고 곧 퇴사를 하게되면 시간이 더 나게 될 꺼라는 생각과 함께 무리하게 스터디들을 시작하게 되었는데, 그 결과로 10월 1주차가 지난 지금 체력이 너무 떨어져서 뭔가 집중해서 하기가 힘든 상태이다.
그리고 하나하나에 대한 집중도가 떨어지니 스터디를 진행하면서 그 주에 얻을 수 있는 내용이 100이라고 하면 원래는 아무리 못해도 80~120사이로 그 이상을 얻어내려 했는데, 지금은 미션이 끝나면 미션을 반추하고 해당 키워드에 대해 더 학습하기보다는 바로 다음 다른 스터디 미션이나 세미나에참가해서 일정을 소화하기도 벅차다보니 하나의 과정에 대한 체득 지수가 많이 떨어진 것 같다.
이런 상태에서 억지로 계속 미션들을 진행하다보니 그냥 다 재미가 없어질려하는 현상까지온다.
앞으로는 이런 과욕을 절대 부리지 말아야겠다.

Finding

코드숨 8주차 과정 진행

문서화

Javadoc
: 그동안 미션을 진행하면서 작성했던 주석으로 작성된 코드 문서를 HTML 문서로 만들어주는 도구이다.
주석 작성만 잘 해두면 손쉽게 생성이되는데 가독성도 나쁘지 않아서 보기 좋다.
나같은경우 이런 기능에 대해서는 이번에 처음 알게 되었는데, 확실히 javadocs만 잘 써도 인수인계할 때 많이 편할 것 같다는 생각을 했다.
REST Docs + Asciidoctor
: Asciidoc이라는 마크업 문서를 Asciidoctor는 HTML5 파일로 만들어서 웹 상에서 볼 수 있도록 해주는데 이를 REST Docs와 연결해서 우리가 원하는대로 API문서를 작성할 수 있었다.
직접 작성하는데 마크업 문서 작성에 익숙해지기만 하면, 내가 원하는대로 문서를 만들어서 API를 소개할 수 있으니 회사에서 마지막으로 진행하고있는 프로젝트에서도 써봐야 할 것 같다.
Asciidoctor의 공식 Document주소는 아래 링크를 찾아가면된다.
그런데, 만일 내가 간단하게 사용법만 익혀보고 싶고 영어가 힘들다면 다음 링크도 추천한다.

Docker

Dockerfile을 만들어서 올리는데는 사실 강의 내용만 잘 따라해도 큰 문제는 없었기에 큰 이슈라 할만한건 딱 하나 있었다.
나는 이 실습을 윈도우 환경에서 진행을 했는데, 다음 Dockerfile 문서의 스크립트가 제대로 동작을 하지 않았다.
FROM openjdk:15 AS builder COPY . . RUN ["./gradlew", "assemble"] FROM openjdk:15 COPY --from=builder /app/build/libs/app.jar . CMD ["java", "-jar", "app.jar"]
Java
복사
에러 내용: /usr/bin/env: “bash\r” - No file or director
검색 결과 이는 윈도우 스타일에서는 개행문자가 CR(Carriage Return, \r), LF(Line Feed, \n)인데,
Unix & Mac은 LF이기에 생겼던 문제였다. 나같은경우 시간이 없어 우선 맥북에서 다시 작성하여 해결을 했지만, 그외에 내가 쓰는 IDE가 VS Code나 IntelliJ라면 프로그램 우측하단에서 바꿀 수 있으니 이를 확인하자.

알고리즘 스터디 2주차 과정 진행

2주차 과정도 문제자체는 모두 해결한 상황이다 .
첫 주차에는 이런 고민을 했었다.
알고리즘 문제를 작성하면서 클린코드 규칙들을 지켜야하는가? 어디까지 지켜야하는가?
그러면서 인덴트, 매개변수의 숫자등등 모두 내게는 고민덩어리였다. 아는 지인과의 얘기에서는 코테에서는 코드의 대한 재사용성을 고려하지 않기에 클린코드를 내려놔라. 라는 말을 듣고는 나름 납득해서 크게 개의치 않고 코드를 짜려고 한다.
그리고 여유가되면 리팩토링하는 수준으로..

러시아 페인트공 알고리즘

미션 중 주식가격에 대한 문제를 풀다가 나온 이슈로 내 코드는 매번 새로운 가격이 나올때마다 모든 주식(Stock)에게 알림(notify)를 하는 식이였다. 물론 이 코드로도 모든 테스트는 통과했었다.
하지만, 이런 얘기가 나왔다.
매번 새로운 가격이 나올 때마다 notify를 하는데 이 때 모든 종목을 순회하고 있는데, 지금처럼 적은 규모라면 문제가 안되지만, 규모가 늘어나면 어떻게 될까요? 전형적인 페인트공 알고리즘 입니다.
여기서 페인트공 알고리즘을 찾아보니 다음과 같이 정리할 수 있었다.

페인트공 알고리즘

해당 책에서 나왔던 내용으로 소규모에서는 문제없이 잘 돌아가지만, 규모가 커질수록 발생비용이 커지고 문제가 발생할 수 있는 코드를 의미한다고 합니다. 다음은 페인트공에 빗댄 사례라고 합니다.
1.
페인트공이 첫날은 차선 페인트 작업을 300야드 칠함
2.
둘째날은 150야드 칠함
3.
셋째날은 30야드 칠함, 첫날은 어떻게 10배를 칠했는지 관리자가 묻자"저도 어쩔 수 없었습니다. 매일 페인트 통에서 점점 멀어지니까요."
즉, 소규모에서는 문제가 없지만 규모가 커질수록 문제가 발생할 수 있는 코드를 페인트공 알고리즘 코드라 하는데 내 코드가 이와 같았다.
그래서, 그 다음 리팩토링은 notifable한 종목과 아닌 종목을 구분하는 로직을 추가하는 것이였다.

Affirmation

코드숨 9주차 개인프로젝트 시작
알고리즘 3주차 미션 진행
우테캠 2주차 프리코스 미션 제출
(중요) 체력 관리