# 설계의 중요성에 대한 더 깊은 깨달음
5월에도 역시나 기술과제나 면접 같은 경험들이 지속되고있었다.
그중에서 기술과제 내용이 주어진 기능구현을 8시간안에 하여 만들어서 제출하라는 내용이였는데 나름 보너스 스택에 있던 것들까지 전부 포함하여 제출했으나 떨어졌다.
그러나 여기서 깨달은 점이있는데, 과제 중 구현해야 하는 내용이 대부분 이미 이전에 구현해 봤던 것이라서 굉장히 구현이 스무스했는데 이미 설계가 어느정도 잘 되어있는 상태에서 구현은 별로 어렵지않다는 것을 다시 한번 느꼈다.
설계의중요성은 작년에 스스로 프로젝트해놓고 다시 고쳐볼려다가 문서와 설계없이 무지성으로 만들어서 고쳐놓은 상태가 이런 참사를 불러일으키는구나를 통해 필요성을 느꼈다면
이번에는 설계가 되어있을때 만드는 게 참 편안하구나 를 느낀셈이다.
어찌되었건 8시간만에 구현한것도 재미있었고 여러가지로 좋은 경험이였다.
아무것도 모르는데 하라고 해서 늘 멘붕이였던 과제들이 이제 슬슬 재미있게 느껴지고있다.
# 비동기 핸들링
다만 이전에는 파이어베이스와 이미지 업로드 api를 따로써서 이미지를 업로드하면 알아서 자기데이터베이스에 등록된 url 을 뱉어줬는데 이번엔 최대한 api를 파이어베이스 하나로 퉁치기위해서 파이어베이스에 업로드를 하는 과정에서 예상치못하게 시간을 많이 잡아먹는바람에
원래대로라면 8시간안에 널럴히 구현했을터인데 거기서 발목이 좀 잡혔다.
일단 이미지 업로드 폴더 경로 부터 {id}/{upload} 등의 depth를 나눠서 겹치지 않게 만들어 둬야됬고 그 업로드된 이미지 url 을 가져오는 함수를 또 가져와서 결과적으로 등록할때 마지막에 data 베이스에 해당 url 을 넣어줘야되는 나름의 대작업이 진행됬는데
forEach로 비동기 핸들을 했는데 아무리 찍어봐도 어느땐 되고 어느땐 안되는것을 보니 비동기 핸들링이 안되고있었다.
솔직히 이해가안됬다 난 계속해서 내가 어딘가 await이나 async 키워드를 빼먹었나 하는 생각밖에 안하고있었고 이 기본흐름에 대한 의문을 가지는 데까지의 시간이 오래걸렸다.
그리하여 찾아보니 for Each loop 에서는 비동기가 동작하지않는다고한다.
https://stackoverflow.com/questions/37576685/using-async-await-with-a-foreach-loop?rq=1
Using async/await with a forEach loop
Are there any issues with using async/await in a forEach loop? I'm trying to loop through an array of files and await on the contents of each file. import fs from 'fs-promise' async function print...
stackoverflow.com
Promise ALL쓰던지, for of 쓰던지 하라길래 map 으로 Promise All 하는 쪽을 선택했다.
es2018을 쓰면 이렇게도 할 수 있다고한다.
async function printFiles () {
const files = await getFilePaths()
for await (const contents of files.map(file => fs.readFile(file, 'utf8'))) {
console.log(contents)
}
}
for await (const results of array) {
await longRunningTask()
}
console.log('I will wait')
# Udemy 10주 부트캠프 시작
이미 관련된글은 몇개 적었지만 Udemy 10주 부트캠프가 시작 되었다. 언제넣었는지 가물가물했는데 서류가 통과되었데서 코딩테스트를 보게되었다. 잘 기억은안나는데 서류를 잘썼던가 싶어봤는데 굉장히 무성의하게 적었다; 고칠려고했는데 기간이 지났었는지 아니면 수정이안되는지 잘 기억안나는데 수정을 못했던 기억이난다.
약간의 우여곡절이있었으나 어찌되었건 통과를 하고 본과정에 합류하게 되었다.
#알고리즘
그밖에도 5월에는 알고리즘 공부가 계속되었다. 문제를 푸는것보다 자료구조랑 각 알고리즘의 동작원리에 대해서 작년엔 개요 , 이번엔 내가 구현하고 이해할때까지 학습하고있다.
강사가 의사코드말해주고 알아서 구현해보고싶으면 해보라고 하고 사라지는데 작년엔 다 넘겨버렸으면 올해는 이걸 구현하면서 재미를느끼고있다.
작년에 싱글 LinkedList 첨 봤을때 이해가 되면서도 묘하게 어렵다고 느꼈던 포인터설정이 굉장히 스무스한걸 보고 내가 꾸준히 공부하긴 했구나를 느꼈다. Double도 착착 진행되고있다고 느낌
분할 정복법으로 인한 Merge 나 Quick Sort도 재귀 돌아가는것을 어느정도 계속 연습했더니 생각보다 이해가 어느정도 되어서 신기했다.
자릿수를 비교하는 Radix Sort도 구현방식이 재미있었다. (시간 지나면 기억이안난다는게 문제지만)
대부분의 디버깅은 console.log 로 하다가 처음으로 break point 잡아서 보고있는데 생각이상으로 크롬 디버깅 툴이 아주 훌룡했다. 내기억에 마지막으로쓴 디버깅 은 i 값이 추적은 되지만 묘하게 시각적으로 따라가기 힘든 느낌이였는데.
크롬에서 디버깅하니까 아주 보기 쉽게 잘 돌아갔다 문제는 주로 이해가 안되거나 로직에 문제가 있는건 아직까지 for문이랑 while 같은 것들인데 무한 루프를 돌게되면 코드실행전에 maximum over stack 경고가 뜨는게 아니라 그대로 돌아가버린다. 처음엔 뭐야 왜안되? 하다가 뭔가 크롬 전체가 느려지는것을 보고 감을 잡았다. 이거 정직하게 무한루프 도는구나 그래서 크롬을 껏다켜야됨
그런 단점이있다.
#파이썬
5월에는 파이썬 공부를 시작했다. 지평을 넓히고 싶어서도있고 미루지말고 천천히 조금씩 정복해갈 어떤 중장기 목표로 정말 조금씩이지만 뭔갈 하나 하고있으면 좋겠다 싶어 시작한것인데
애초에 처음 코딩 배울때 나도코딩이라는 유튜버를 통해 자바스크립트보다 먼저 접했던게 파이썬이였고 재미있었다.
다시할려니 기억이 하나도 안났지만
자바스크립트하다가 파이썬 하니까 이거 굉장히 좋은 편리한 언어라 느꼈다. 배열 셔플 기능에 알아서 뽑아주기까지; 아무튼 프로그래밍의 기초를 다른언어로 한번 더 다지는 그런느낌이라서 좋았다.
#CS50
이건 모두를 위한 컴퓨터 과학이라는 네이버 부스트 캠프에서 무료로 제공하는 강의인데
C언어를 기반으로 하버드 대학 교수가 진행하는 강의를 볼 수 있다. 재미있다.
유용하다고 생각되는 부분은 이를테면 디버깅 과정 이나 실제로 왜 string 이 배열 접근처럼해서 브라켓으로 각문자열에 접근할 수 있는지 같은 원리등등이 궁금 했는데 그런 것들의 이유들도 알 수 있었다.
여기서 뭐더라? 러버덕 디버깅 이였나 정확한 어원이 기억안나는데
디버깅하다가 막히면 사람들과 이야기를 하거나 쉬거나 정 이야기 할 사람이나 친구가 없으면 오리인형 붙잡고 한탄하다보면 해결되는 업계에 유명한 말이라고했던것같다.
굉장히 유용하다. 원래알고있던 정리되지않은 개념들이 좀 더 정리되는 느낌
C언어라고 하면 초등학교때 처음 보고 질겁했던 기억이 마지막이여서 좀 겁났는데 본의아니게 파이썬도 조금 배우고 자바스크립트도 이미 알고있어서 그런가 확실히 뭔가 C언어를 원류로 다 조금씩 짬뽕됬구나 하는것을 느꼈다.
MBTI F의 영향(?) 으로 내가 저수업을 직접 들었으면 참 좋았겠구나하는 망상으로 아주 잠시빠지기도했다.
https://www.boostcourse.org/opencourse
다 함께 배우고 성장하는 부스트코스
부스트코스(boostcourse)는 모두 함께 배우고 성장하는 비영리 SW 온라인 플랫폼입니다.
www.boostcourse.org
'주니어 무 지성 고군분투 일기' 카테고리의 다른 글
~ 9/9 까지 의 회고 (0) | 2023.09.23 |
---|---|
~ 8/5 일 까지의 회고 (웅진 프로젝트 후기 등) (0) | 2023.08.05 |
~ 7 /8 까지 의 회고 (0) | 2023.07.08 |
테오의 스프린트 15기 참여 회고 (2) | 2023.06.27 |
8~9월의 기록 (1) | 2022.10.12 |