2022 인프콘 참여 후기: 2번째 이야기

Sheryl Yun·2022년 8월 29일
0

2022 인프콘 후기

목록 보기
1/2
post-thumbnail

후기를 쓰다보니 '다음엔 사진을 많이 찍어야겠다'는 생각이 든다. 글이 많아서 나중에 나만 볼 듯하다. (하지만 나중의 나를 위해 부지런히 남겨야지)

4번째 강의: 코드 리뷰만이 꼭 리뷰는 아니랍니다

무신사에서 개발 팀장으로 일하고 계신 박미정 연사님의 '코드 리뷰만이 리뷰가 아니다'라는 주제에 대한 강연 내용이다.

0. 개발자의 일과 리뷰?

  • 개발자는 코드만 다루지 않는다. 코딩은 개발자의 업무 중 아주 일부이다.
  • 보통의 서비스/제품 개발 과정은 요구사항 분석 - 설계 - 구현 - 테스트 - 배포 과정으로 이루어진다. 실제 코딩이 이루어지는 단계는 '구현' 단계 뿐이다.
  • 리뷰(Review)의 사전적 의미는 '필요한 경우 변화를 주기 위해 재검토하다'라는 뜻이다. '필요한 경우'란 '올바른 방향으로 가고 있지 않은 경우'를 말한다. (일의 방향성을 중시해야 한다)

1. 요구사항 분석 단계

  • 요구사항 분석의 핵심은 '문제를 명확히 정의하는 것'이다.

  • 다양한 이해관계자의 논의가 필요한 단계이다. (기획자, 디자이너, 프론트엔드 개발자, 백엔드 개발자 등)

  • 이 단계에서 리뷰를 진행하지 않으면 다양한 사람들이 서로 다른 것을 기대하게 되고, 나중에 일정이 모두 끝난 뒤 다른 결과물이 나올 수 있다.

2. 설계 단계

  • 설계란 '문제 해결 과정에 대한 계획'을 말한다.

  • 개발자는 아키텍처 / 로직 / 데이터 구조 / API 등을 설계해야 한다.

  • 따라서 이 단계에서 리뷰를 진행하면 시스템의 복잡도를 낮추고, 팀의 설계 원칙을 더 잘 준수하며, 앞서 요구사항에서 정의된 문제에 집중하고 있는지 확인할 수 있다.
    (아니면 달성해야 하는 목적 자체가 아닌 방법론적 수단에 더 초점을 맞춰버릴 수 있다)

  • 리뷰는 소통 그 자체이다. '이 단계에서 그게 왜 필요하지?'라는 생각이 든다면 반드시 논의를 진행해야 한다. 지금 당장 해결해야 하는 문제에 필요한 범위로 아키텍처를 축소할 수 있다.

3. 구현 단계

  • 구현 단계에서의 리뷰가 보통 말하는 코드 리뷰페어 프로그래밍이다.

  • 코드의 논리적 오류를 발견하거나 코드의 설계를 개선한다.

  • 코드가 요구사항을 온전히 반영하는지, 코드의 설계 방향이 제대로 되었는지(확장성과 응집도 고려), 작성한 코드가 다른 모듈이나 도메인에 대해 부작용(side effect)을 유발하지 않는지 확인한다.

  • 팀 내에 개발 관련한 규칙(컨벤션)을 제안할 수도 있다.

  • 동료의 코드 리뷰를 승인할 때 승인한 이유에 대해 자세히 작성하자.

  • 개발팀 내에서 코드 리뷰에 집중할 수 있는 시간을 따로 확보해두도록 한다.
    (=> 코드 리뷰에 대한 유관 부서의 공감대가 필요한 부분)

  • 코드 리뷰를 요청할 때, 코드 작성자는 코드가 담고 있는 요구사항이나 이슈를 충분히 설명한다.
    (=> 자세한 배경 설명이 있어야 동료가 코드 리뷰에 집중이 가능하기 때문)

  • 구현 이후 단계에서 문제가 발생했을 경우, 구현 단계에서 미리 발견 가능한 문제는 아니었을지 반드시 회고한다. 만약 이때 발견 가능한 문제였으면 해당 부분에 대한 회고를 하고 다른 유관 부서에도 공유한다.
    (=> 코드 리뷰에 대한 필요성을 공감시키기 위해)

4. 테스트 단계

  • 테스트 단계는 테스트를 수행하는 것 자체가 리뷰이다.

  • 이때 테스트 그 자체를 리뷰하는 것도 필요하다.
    (=> 테스트 자체의 결함 발견)

5. 배포 단계

  • 릴리즈 노트(어떤 기능이 배포될 예정인지 기술한 명세서)를 작성한다.
  • CI/CD 파이프라인을 자동화한다. (CI는 Test/Build 자동화, CD는 Deploy 자동화)
  • 배포 이후 배포한 기능이 의도대로 사용되고 있는지, 실제 상황에서 성능 관련된 문제는 없는지 확인한다.

6. 서비스 운영 중 장애 발생 시

  • 후속 조치를 위한 논의를 진행한다. 이때, '누가'는 철저히 제외한다.
  • 문제가 발생한 근본적인 원인을 파악하고, 앞으로의 재발 방지 대책을 수립한다.

추가: 리뷰 진행의 공통적인 장점

  1. 구현해야 하는 범위가 축소된다.
  2. 일정이 예측 가능해진다. => 마감 기한을 잘 지키게 됨으로써 다른 부서가 개발팀에 갖는 신뢰도가 향상된다.
  3. 우선순위에 집중할 수 있다.

5번째 강의: 제주도에서 N잡러로 살기

'1분 코딩'으로 알려져 있는 유준모 개발자님의 강연에도 참석했다. 직장에 속해서 개발을 하시는 게 아니라 여러 가지 활동을 겸하고 있는 스토리였다.

제주도의 여러 카페를 소개한 '제주어디'라는 사이트를 개발하고, 이호준 개발자 님과 함께 '제주코딩베이스캠프'를 추진하고(그 유명한 제코베가 바로..!), 1분 코딩이라는 이름으로 활동하시면서 각종 블로그 운영이나 강연을 하고 계셨다.

개발자로 산다고 해도 개발 외에도 여러 가지 먹고 살 일이 많다는 얘기가 인상 깊었다. 근데 그러려면 1분 코딩 님처럼 '나를 표현할 수 있는' 이력을 여러 가지 방법으로 만들어야 가능하겠다는 생각이 들었다.

6번째 강의: FE 개발자도 Restful API 개발 가능! (with 파베/GCP)

이 강연은 'FE 개발자도 Restful API를 개발할 수 있다!'이라는 문구에 꽂혀 듣게 되었는데, 막상 들어보니 연사님의 라이브 코딩이 이어져서 대부분 멍하니 앞에 슬라이드만 봤다. (코딩을 잘 하시는 고수분들의 특징: 화면이 휙휙 넘어간다, 코딩 속도가 매우 빠르다, 이 정도는 알고 있다고 전제한다 Beep)

결국 강연 초반의 약간의 이론 설명과 연사님의 라이브 코딩에서 최대한 코딩 꿀팁들을 얻어 빠르게 정리하는 수밖에 없었다.

서버리스? 파이어베이스?

우선 강연 초반에 진행되었던 이론 설명에 대해 간단히 얘기하자면, 서버리스(Serverless)라는 것에 대해 얘기하셨다.

서버리스란, 서버가 없다는 말이 아니라 개발자가 직접 서버를 관리할 필요 없이 앱을 빌드/실행할 수 있도록 하는 것을 말한다.

이러한 서버리스를 제공하는 대표적인 사이트 중 하나가 파이어베이스이다.
무료 플랜 범위가 넓으면서도 푸시 알람, 인증, NoSQL 기반 DB, 이미지 업로드 등 여러 기능을 포함하는 훌륭한 서비스이다.

여기서 꿀팁 하나가 있었는데, 바로 파이어베이스에서 요금제를 Spark에서 Blaze로 변경하면 GCP(Google Cloud Platform)와 바로 연결되며, 그렇게 해도 무료 플랜을 왠만하면 넘지 않는다는 것이었다.

그 외 알게 된 코딩 팁

  1. 타입스크립트 프로젝트를 생성할 때: yarn create next-app [프로젝트명] --typescript
    (template이 없어도 잘 만들어진다)

  2. npx gts init 명령어
    ('Google Typescript Style guide'를 자동으로 적용해준다. 주의할 점은 gts 버전이 타입스크립트 버전과 맨 앞 자리 숫자가 같아야 한다)

  3. 타입스크립트 프로젝트 생성 후 해야 할 일

    • 특정 파일에 들어가서 prepare, pretest, posttest, test 부분을 지워준다.
      (=> 테스트 코드를 작성하지 않으면 필요 없는 부분)
    • tsconfig 파일에서 esModuleIntelopresolveJsonModule을 true로 설정한다.
  4. @types가 붙은 패키지는 -D로 설치한다.

  5. ts-node는 node.js에서 타입스크립트를 사용할 때 설치해줘야 하는 라이브러리이다.
    (node는 타입스크립트를 해석하지 못하기 때문)
    하지만 nodemon을 최신 버전으로 설치하면 ts-node도 같이 설치해주기 때문에 따로 설치해줄 필요 없다.

정말 자잘자잘한 코딩 팁들.. 하지만 나같은 주니어 개발자에게는 꿀팁인 내용들이어서 기록해보았다.

6번째 강연: Vanilla JS로 지속가능한 FE 코드를 만드는 방법

인프랩에서 근무하고 계시고 닉네임이 '준프'였던 이문기 개발자 님은 장바구니 기능을 구현한 코드를 직접 화면으로 보여주시면서 강연을 진행하셨다.

🥊 핵심: 뷰와 비즈니스 로직의 분리

이전에는 장바구니의 관련 로직을 모두 Cart라는 하나의 컴포넌트에 위치시켰는데 이를 비즈니스 로직과 뷰 로직으로 분리하셨다고 한다.

  • 비즈니스 로직과 뷰 로직은 변경 속도가 서로 달라서 분리를 통해 각자의 속도에 맞출 수 있다.
    (=> 뷰 로직은 한번 만들면 잘 바꾸지 않으므로 변경 속도가 비교적 느리지만, 비즈니스 로직은 상대적으로 변경될 여지가 많아서 변경 속도가 뷰 로직에 비해 빠르다)

  • 예전에는 두 로직 중에 하나만 바뀌어도 전체 로직을 손대야 했던 반면, 분리 후에는 각자 관리가 가능해졌다.

  • 즉, 비즈니스 로직에 문제가 생기면 비즈니스 로직만 수정하면 되고 뷰 로직에 문제가 생기면 뷰 로직만 수정하면 되었다. (유지보수가 훨씬 수월해짐)

장바구니 예시에서 비즈니스 로직의 컴포넌트는 Buyer, Coupons - Coupon, Order 총 4가지로 구분되어 있었다. 뷰 로직의 컴포넌트는 UI 관련 하나로 통합되었다.

CQS(Command Query Separation): 명령과 조회의 분리

이 부분은 처음 들어본 개념이라 자세히 적지는 못했다. 나중에 검색해보니 조회와 그 외의 로직 개념을 분리하는 것이 react-query의 Mutation과 Query와도 비슷하게 느껴졌다. CQS 개념은 나중에 다른 포스트에 따로 작성해야겠다.


이렇게 인프런의 모든 강의를 다 듣고 이벤트에서 받은 경품과 굿즈를 바리바리 싸들고서(?) 코엑스 그랜드볼룸을 떠났다.

🔫 비하인드 몇 가지

6번째 강연을 듣다가 3줄 정도 앞 자리에 정재남 개발자 님이 앉아 계신 걸 발견했다. (인프런 GraphQL-Rest API 강의 너무너무 좋았어요!! - 소리 없는 아우성) 아마 자바스크립트와 관련된 강연이어서 참석하신 것 같았다.


지하철 삼성역을 통해 들어가는 코엑스는 지하 1층이고 그랜드 볼룸은 지상 1층이다. 삼성역에서 바로 그랜드볼룸을 찾을 수는 없고, 에스컬레이터를 타고 한 층 올라가야 하는데 이걸 몰라서 처음에 찾아갈 때 많이 헤맸다 ㅠㅠ


당첨운이라곤 없는 스타일인데, 이번 인프콘에서 그렇게 홍보되던 '10만 잎 쿠폰'에 당첨되었다. (1잎 = 1원으로 인프런 사이트에서 현금처럼 사용 가능) 당첨 방식이 룰렛을 돌리는 방식이라 정말 복불복이었는데 10퍼 할인도 아니고 '10만 원'이 나와서 정말 놀랐다.
집에 오자마자 강의 사는 데 후루룩 써 버렸다. ㅎㅎ

p.s. 등록할 때 10만 잎 쿠폰은 다른 쿠폰들과 달리 '포인트 쿠폰'이어서 사이트 하단(Footer)의 '포인트 코드 등록' 메뉴에서만 쿠폰 등록이 가능했다. 이걸 모르고 일반 쿠폰 메뉴에서 계속 쿠폰 등록을 하려다가 결국 '못 쓰는 쿠폰인가' 하고 잠깐 생각했었다 ㅠㅠ 더 자세한 설명이 있었으면 좋았을 것 같다.


굿즈도 엄청 많았고 강연 내용도 정말 좋고 알찼다. 다만 한 타임에 진행되는 강연 수가 많다보니 좋은 강연을 더 많이 듣지 못한 것 같다는 생각이 들었다. (하지만 나중에 인프런 사이트에 다 풀렸으니.. ㅎㅎ)


이번은 첫 회라 그런지 참가 비용이 무료로 진행되었는데, 컨퍼런스의 퀄리티를 생각하면 유료 비용을 받아도 되지 않을까 생각했다.



너무너무 알찼던 인프콘 1기.. 내년에도 꼭 당첨되고 싶다 🥰🥰

profile
데이터 분석가 준비 중입니다 (티스토리에 기록: https://cherylog.tistory.com/)

0개의 댓글