회고/코드스쿼드 - CS 과정

[WIL] 코드스쿼드 2022 백엔드 4주차 회고(2022.01.24~28)

jwKim96 2022. 1. 31. 19:01

이번주엔 무슨일이?

  • 01.24 월 - 구현에 너무 매몰되지 말자
    CS과정 4주차에 돌입했는데, 그 동안 피로도 쌓이고 긴장감도 조금 풀린 느낌이 있었습니다.
    그래서 집중이 잠시 안되었는데, 공부하고 빨리 구현해보자는 생각에 집중할 수 있었습니다.
    이전에는 느끼지 못했는데, 미션들을 진행하면서 저는 코드를 작성하는것을 좋아한다고 느끼게 되었는데요.
    그런데 문제는 코드를 빨리 작성하고 싶어서, 학습을 덜한 상태로 구현을 시작하는일들이 자주 있었습니다.
    그래서 이번 미션부터는 공부화 구현의 밸런스를 맞추면서 진행하자고 다짐했습니다.
    이번 미션은 운영체제의 프로세스와 스레드 관리방식이었는데, 운영체제 강의중 가장 유명한 반효경 교수님의 강의를 듣고
    내용을 정리해본 다음 미션에 돌입했습니다.
  • 01.25 화 - 학습과 구현은 별개
    학습하여 내용정리가 되면, 설계와 구현은 자연스레 될 것이라고 생각했는데 막상 그렇지 않았습니다.
    운영체제의 프로세스와 스레드 관리방식을 객체지향적으로 풀려고 해보니 생각보다 쉽지 않았습니다.
    왜 구현이 안될까 곰곰히 생각해보다가, 아직 학습이 덜 되어서 그렇다고 결론 내렸습니다.
    그래도 이번 미션은 마무리해야했기에, 동료들이 공유해준 자료들과 코드의 도움을 받아 미션을 완수했습니다.
  • 01.26 수 - 처음 접해본 해커랭크
    해커랭크 사이트를 처음 접하게 되었습니다.
    프로그래머스는 입출력이 추상화 되어 메소드 구현만 하도록 되어있고 백준은 입출력을 직접 구현하도록 되어있는데,
    해커랭크는 입출력 코드 템플릿을 미리 제공한다는 것과 결제를 하면 테스트 케이스를 확인할 수 있다는 것이 달랐습니다.
  • 01.27 목 - 어려운 비동기
    이번 미션은 비동기 어플리케이션을 구현하는 미션이었습니다.
    이전에 함수형 프로그래밍에 대해 공부하는 시간이 있었는데, 이번 미션을 위한 빌드업이었던 것 같네요.
    자바에 제공되는 API 중 하나인 CompletableFuture를 사용하여 비동기 로직을 구현했습니다.
    그리고 설계에 들어갔는데, 이때까지 비동기로 동작해야하는 프로그램을 설계해본 적이 없어서 많이 헤맸던 것 같습니다.
    저는 작업이 모두 처리되면, 비동기 요청 메소드를 호출한 곳으로 돌아와야 한다는 고정관념에 사로잡혀있어서
    메인 로직의 입력 단계부터 여러단계를 거치며 실제 로직을 수행하는 곳 까지 계속 비동기로 호출하고,
    메인 로직으로 반환하여 그 다음을 수행해야 한다고 생각했습니다.
    하지만 이렇게 하려니, CompletableFuture를 담은 CompletableFuture를 담은 CompletableFuture를 반환하는
    이상한 구조가 되어 '아, 내가 지금 잘못 접근했구나'라고 깨닫고 구현하던 소스를 모두 뒤엎어버렸습니다.
    하루종일 삽질만 하느라 만들어 놓은 것이 없어서, 내일 동료들과 마스터의 수업을 보며 도움을 얻어야겠다고 생각했습니다..
  • 01.28 금 - 데이터 흐름도 설계하자
    저는 '처음 호출한 곳으로 결과를 반환해서, 그 곳의 클로저를 통해 다음 작업이 수행되어야 한다'는 고정관념에 사로잡혀 있었습니다.
    그래서 부메랑처럼 끝까지 갔다 돌아오는 구조로 구현하려고 하니, 끝없이 중첩되는 클로저들 때문에 골치가 아팠습니다.
    그런데 이번 비동기 어플리케이션에 대한 JK의 수업을 내용을 듣고 많이 깨닫게 되었습니다.
    로직 흐름의 가운데에서 흐름을 제어하는 계층을 두는것이 핵심이었습니다.
    그래서 제가 생각한 부메랑 같은 흐름이
    • 카페 주문 프로그램(내 생각)
      • 주문 : 메인로직 -> CLI 입력 -> 주문객체 생성 -> 메뉴 객체로 변환 -> 메뉴 객체를 바리스타에게 할당
      • 주문 완료 : 바리스타가 완료된 주문을 반환 -> 완료 메뉴들을 주문으로 변환 -> 메인 로직으로 완료된 주문 반환
        메인 로직으로 돌아오는 이런 형식이었다면, JK의 방식은
    • 카페 주문 프로그램(JK 방식)
      • 주문 : 메인로직 -> CLI 입력 -> 주문객체 생성 -> 매니저가 여러개의 메뉴 객체로 변환 -> 메뉴 객체를 바리스타에게 할당
      • 주문 완료 : 바리스타가 완료된 주문을 반환 -> 매니저가 완료 메뉴들을 주문으로 변환 -> 주문 완료 처리 파트로 전달
        데이터 흐름을 제어하는 역할을 하는 매니저라는 계층을 둔 것 입니다.
        사실, 이때까지 설계를 할때 객체간의 관계만 신경을 쓰고 데이터 흐름에 대한 고민은 많이 하지 않았던 것 같은데
        이번 미션을 통해서 데이터 흐름까지 더 고민해서 설계해야겠다는 것을 배우게 되었습니다.
        다음 주는 설 연휴라 약 10일 간 휴식기간이 주어지는데, 이 기간동안 그동안 쌓인 피로를 풀고 여유있게 공부하는 시간을 가지려고합니다.

인상깊었던 것은?

  • 동료들이 발표를 정말 잘해서, 배울점이 많은 것 같음.
  • 공부한 내용을 깔끔하게 잘 정리하는 동료들을 보면서, 나도 배운 내용을 잘 정리하여 공유하고 싶음

아쉬운 것은?

  • 긴장이 조금 풀려서 그런지 기상 시간이 조금씩 늦어지고 있는데, 마음을 다잡고 일찍 일어나야겠다.