카카오테크 부트캠프 클라우드 제주 2기 현장 교육 일기 및 회고

Ziggy Stardust·2024년 12월 7일
0

KTB Jeju

목록 보기
1/1

현재 팀의 상황

  1. 첫 번째 화두

팀 상황에 맞는 과제 전략

저희 팀은 현재 한 분을 제외하곤 과제 진행 상황이 비슷한 편입니다.
그래서 서로 과제 진도를 맞추기도 좋아보였습니다.

굳이 과제 진도를 맞출 필요가 있나 생각할 수 있지만
같은 파트에서 자신의 현재 고민을 생생하게 공유하고 같이 고민할 수 있다는 점과 처지가 비슷하니 서로 유대와 친밀감에도 좋은 영향을 줄 수 있다 생각했습니다.

이러한 목표를 가진 저희 팀은 팀원분의 좋은 의견을 통해 주 단위의 과제 진행 보고 를 진행하고 있습니다.

개인적인 체감으론 팀원들 간 소통할 기회를 많이 늘릴 수 있고 잡담뿐만 아니라 기술 관련한 얘기로 이야기할 시간이 늘어 좋게 느껴졌습니다.

그리고 스크럼 문서로는 담기지 않는 디테일한 과제 진행 상황까지 알 수 있어 과제 진도를 맞추기에도 효과가 있기를 기대하고 있습니다.

  1. 두 번째 화두

정량적 시간관리를 통한 효과적이고 빠른 학습 피드백

저희 팀은 공동 목표로 꾸준히 공부를 하는 것을 뒀습니다.
좀 더 구체화할 필요가 있어보여 다시 정리를 했는데 아래와 같습니다.

정량적으로 공부 시간을 관리하고 주 단위로 비교해 빠르게 학습 피드백을 받을 수 있는 환경 구축을 목표로 했습니다.

저희 각자 기호에 맞춰 라이즈, 토글 트랙, 열품타 등 어플리케이션을 통해 자신의 공부 시간을 측정하고 이를 노션에 기록합니다.

그리고 월요일 아침엔 이를 정산해 이전 주와 비교를 합니다.

이러한 시각적 자료들은 스크럼에서도 좋은 대화 주제가 될 것으로 생각합니다.

현재는 이러한 과정을 편리하게 하기 위한 도구를 찾고 있는데 좋은 도구를 알려주신다면 정말 감사할 것 같습니다.
뭣하면 스스로 만들죠!

정량적 시간관리라는 부분이 혼자서도 잘 할 수 있지만 팀 시스템적으로 운영하는 것은 또 다르다 생각합니다.
무엇보다 팀에게 보여집니다. 어떤 사람은 팀원에게 자극을 받을 수 있으며 또 어떤 사람은 부끄러움을 느낄 수 있습니다. (이런 과정을 통해 더 잘 성장할 수 있다 생각합니다.)
그리고 팀을 위해 힘을 써주는 사람이 있다는걸 눈으로 볼 수 있습니다.
제가 생각하는 요즘 사람들은 도움에 대한 보상을 참 중요시 하는 것 같습니다. (물질적 보상이 아니라 정신적으로나 태도적인 관점에서 타인의 비호감을 사지 않도록 노력하는 등)
그래서 타인의 도움을 직접적으로 느끼게 된다면 좀 더 진지하게 팀 활동에 참여할 것이라 생각합니다. 제 경험 상 이런 팀은 뭐가 되어도 됩니다.


  1. 세 번째 화두

빠른 운영 피드백

팀 리빌딩 후 겨우 일주일이 지났지만 저희 팀은 빠르게 이러한 시스템을 도입했습니다. 저희 팀은 이러한 시스템의 의도에 맞게 성실함과 적극성을 보여주고 있습니다.

이러한 팀 분위기 덕분에 저희는 조금 더 활발히 그리고 솔직하게 자신의 의견을 표현하고 있습니다.

그리고 저 또한 이러한 의견들이 참 가치있고 마음에 들어 많은 부분에서 빠르게 반영하고 제 의견을 전달하려 노력하고 있습니다.

겨우 일주일 해놓고 대단한 업적이라도 이룬 듯 적어뒀습니다만 사람 생각은 말하지 않는 이상 알 방법이 없으니 제가 어떤 생각을 하고 있는지 알려드리는 편이 좋다 싶어 적습니다.

그리고 팀 자랑 한 번 더 하겠습니다.

네트워킹 파티를 통해서도 느꼈지만 저희 팀원분들은 참 표현도 좋고 진로나 학습에 대한 진정성도 잘 느껴져서 저에게 여러모로 많은 영감을 주고 있습니다.

이번 팀 활동 간 효과적으로 과제를 수행해 커리큐럼을 140퍼센트 이상 활용할 수 있도록 같이 화이팅합시다.


현장 교육

생각한 것보다 컨디션이 좋지 못했던것 같습니다. 다른 분들에게도 적지 않게 피해를 준 것 같네요. 봐주세요 😀


이전 팀분들과도 만날 수 있어 참 좋았습니다. 역시 좋은 분들이세요.

현장 교육 얘기를 하자면 화면으로만 보던 사람들을 실제로보니 뭔 연예인 보는 느낌이네요.

그래서 강사님들을 처음 봤을 땐 연예인들의 연예인이라는게 이런 말이였구나 싶었네요.

가장 기억에 남는건 에디의 강연이였습니다. 강연 내용과 개인적으로 가지고 있던 고민 사이에 비슷한 맥락이 있어 어느 정도 해결할 수 있어 좋았네요.

요약하자면 자신이 신경써서 할 수 있는 것과 신경쓰지 않아야하는 것의 경계를 잘 정해라 라고 할 수 있겠습니다.

다른 강연도 많은 도움이 되었습니다.

마지막으로 현장 코딩 테스트는 항상 마음을 긴장하게 만드는 무언가가 있습니다. 흡 🥶


프로그래밍 기본

앞서 말씀드린 과제 진행 보고 를 통해 몇 가지 버그를 리포팅 받았습니다. 이를 해결하기 위해 노력을 들였는데 참 사소한 문제였습니다.

그런데 잘 생각해보면 사소한 문제가 아니였습니다. 같은 실수를 하게된 원인을 명확하게 분석해서 대안을 내놓지 않으면 같은 상황이 주어졌을 때 반복할 것이라는 생각이 바로 들었기 때문입니다.

단순히 내가 피곤했어, 잠시 집중력이 떨어진거야, 시간이 너무 없어서 실수했어 라고 변명하기엔 이 부분은 컨벤션을 둠으로써 개선이 가능했습니다.

문제 상황 자체는 이렇습니다.

회원탈퇴를 시도하는데 게시글이 제대로 제거되지 않아 데이터들의 정합성이 깨지는 상황이였습니다.

  1. 잘못된 함수 호출
// authController.js
async withdraw(res, sessionId, userId) {
    const posts = postDao.findAllByUserId(userId);
    posts.forEach(post => {
        postController.deletePost(post.id); // 실수로 dao 의 delete 가 아닌 비즈니스 로직이 담긴 controller 의 delete 메소드를 사용했습니다.
    });
    // 생략

순수하게 데이터 자체를 다루는 dao 가 아닌 controller 의 메소드를 사용했습니다.

두 함수 간의 차이는 아래와 같습니다.

// postDao.js
deletePost(post) { // 두 번째 문제의 스포일러이지만 패러미터의 기대 타입이 post 인 반면 실제 호출부에선 post.id 를 넣고 있습니다. 이는 아래에서 다시 다루겠습니다.
    const postIdx = this.posts.indexOf(post);
    this.posts.splice(postIdx, 1);
    flush(postJsonFilename, this.posts);
}
// postController.js
deletePost(postId, userId) { // userId 를 받아야하는데 호출부에선 dao로 착각해 userId 를 넘기지 않습니다.
    const post = this.postDao.findById(postId);

    if (post.authorId !== userId) { // 따라서 권한이 없습니다. 라는 예외가 발생합니다.
        throw new ErrorResponse(200, 4003, '권한이 없습니다', null);
    }
}

개선법

  • 이건 좀 정신이 없었던게 맞긴합니다.
  • 레이어별로 다르게 사용할 수 있는 단어가 있다면 다르게 두어 방지할 수 있습니다.
    (예시 dao 는 sql 스럽게 postDao.deletePost() , controller 는 delete 를 피해 유사하게 postController.removePost())
  1. 잘못된 인수 전달

현재 호출부에선 post의 Id 를 전달하지만 실제 함수에선 post 자체를 받고 있습니다.

// authController.js
async withdraw(res, sessionId, userId) {
    const posts = postDao.findAllByUserId(userId);
    posts.forEach(post => {
        postDao.deletePost(post.id); // 1 번 문제 피드백 반영
    });
    // 생략
// postDao.js
deletePost(post) { // 패러미터의 기대 타입이 post 인 반면 실제 호출부에선 post.id 를 넣고 있습니다.
    const postIdx = this.posts.indexOf(post);
    this.posts.splice(postIdx, 1);
    flush(postJsonFilename, this.posts);
}

개선법

  • 함수명에서 기대타입, 기대값을 정확히 명시하는 컨벤션을 가져 방지할 수 있습니다.
    ( 예시 userId 로 제거한다면 deleteByUserId, user 자체로 제거한다면 deleteByUser)

모든 의견, 피드백 감사히 잘 받겠습니다.

profile
spider from mars

0개의 댓글