본문 바로가기
일상 로그/CodeReview

SI에서 '코드리뷰'하기 - 1차 회고

by Dev_Mook 2024. 10. 7.

1차 코드리뷰 진행 방법

그동안 코드리뷰를 어떻게 진행했는지 이야기해볼게요!

먼저 저희 팀은 코드리뷰 경험이 전혀 없는 팀이에요.

그리고 저는... 팀장이 아니구요.

그러디보니 코드리뷰를 어떻게 진행하면 좋을지 고민도 되고 조심스러워지더라고요.


하지만 에잇! 일단 기본적인 것부터 시작하자!라는 마음으로 코드리뷰를 진행했습니다.


가장 먼저 한 일은 팀원들에게 코드리뷰를 어떻게 진행할 것인지 알려주기!

저희 팀은 GitLab을 이용해 소스코드를 관리하고 있어요.

당연히 Push한 소스코드는 모든 팀원들이 볼 수 있죠!

그래서 각자 시간을 조금씩 내서 다른 사람이 소스코드를 어떻게 작성했는지 보라고 제안했어요.

물론 궁금한 점이나 소스코드를 더 효율적으로 만드는 방법이 있으면 댓글도 달아보라고 했죠!


그리고 두 번째!

엄청 간단하게 규칙을 만들어 소스코드에 적용하기!

처음부터 제약을 많이 주면 부담스러울테니 아주 기본적인 규칙만 만들었어요.

  • 프론트엔드

    • 값을 변경하지 않는다면 let이 아닌 const를 사용하기

            func() {
              // let myName = 'John';
              const myName = 'John';
              return myName;
            }
      
            func2() {
              // let names = ['John', 'Tom'];
              const names = ['John', 'Tom'];
              return names;
            }
    • 구체적인 데이터타입을 명시해주고, 가급적 any를 사용하지 않기

            func() {
              const myName: string = 'John';
              return myName;
            }
      
            func2() {
              const names: string[] = ['John', 'Tom'];
              return names;
            }
      
    • if문 안에서 실행되는 문장이 짧을 경우 중괄호를 굳이 사용하지 말기

            func(age: number) {
              // if(age < 19) {
              //   return '미성년자입니다.';
              // } else {
              //   return '성인입니다.';
              // }
      
              if(age < 19) return '미성년자입니다.';
              else return '성인입니다.';
            }
  • 백엔드

    • if문 안에서 실행되는 문장이 짧을 경우 중괄호를 굳이 사용하지 말기

    • 소스코드, 쿼리 작성 시 들여쓰기는 탭(Tab)을 사용하기

            // 변경 전
            public void getName() {
                // 스페이스바를 사용하여 들여쓰기를 하거나 어딘가에서 복사+붙여넣기를 하면
                // 들여쓰기가 제멋대로 작성되기 때문에 가독성이 떨어집니다.
                String name = "John";
            int age = 10;
                            String gender = "M";
                return name;
            }
      
            // 변경 후
            public void getName() {
                String name = "John";
                int age = 10;
                String gender = "M";
                return name;
            }
            -- 변경 전
            SELECT * FROM MY_TABLE
            WHERE 1=1 AND LAST_NAME = '김'
            and CREATE_DATE = '20241007';
      
            -- 변경 후
            SELECT
                *
            FROM
                MY_TABLE
            WHERE
                1=1
                AND LAST_NAME = '김'
                and CREATE_DATE = '20241007';
    • 쿼리의 WHERE 절에서 불필요하게 1=1 사용하지 않기

    • 쿼리에서 키워드는 대문자로 사용하기

            SELECT
                *
               FROM
                MY_TABLE
            WHERE
                LAST_NAME = '김'
                AND CREATE_DATE = '20241007';
  • 공통

    • 주석은 자세히 작성하기
    • 더 좋은 알고리즘이 있으면 리뷰 작성하기

이 정도의 규칙은 모두가 지킬 수 있다고 생각해요.

당연히 저희 팀원들도 규칙을 생각해서 코드를 작성하고 있답니다!


코드리뷰를 하며 느낀 문제점

다행히 팀원들이 코드리뷰를 긍정적으로 받아들이고 있어요!

하지만 매주 코드리뷰를 할 때마다 몇 가지 문제점을 느끼고 있죠...


첫 번째는 리뷰어가 저 뿐이라는 거에요.

그 말은 제 주관적인 견해에 따라 코드리뷰가 진행되고 있다는 의미죠!

아직도 이 문제를 해결하기 위해 노력 중이지만 일단 두 가지 사항을 개선했어요.

  • 개선 1 : 내 상사인 팀장을 코드리뷰에 합류시키기!
  • 개선 2 : 바로 아래 직급의 직원도 리뷰어 활동을 하도록 만들기!
  • 개선 3 : 쿼리 작성 시 들여쓰기에 대해서는 제약 사항을 줄이기

당연히 저희 팀장님이 경험도 많으니 더 좋은 개선 방안을 제시해주겠죠~?

그리고 바로 아래 직급의 직원도 Push된 소스코드를 자주 들여다보기떄문에 개선사항 등을 작성해달라고 요청했어요!

마지막 개선사항은 SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY에 대해서는 무조건 같은 레벨로 들여쓰기를 작성하되

WHERE 절은 각자 가장 편한 방식법으로 작성하도록 제약을 풀었어요.

```sql
    -- WHERE 절의 AND는 각자 스타일대로 들여쓰기를 하는 대신 무조건 개행해서 작성하도록 했어요.
    SELECT
        NAME,
        AGE,
        BIRTH,
        GENDER
    FROM
        USER
    WHERE
        GENDER = 'M'
    AND AGE > 20
```


그럼에도 불구하고 발생하는 두 번째 문제!

직급 차이로 인해 리뷰를 작성하기 주저한다는 점이에요.

아래 직급의 직원을 리뷰어로 만들었지만... 제 소스코드에 리뷰를 작성하는 것도 조심스러워 하더라고요.

그 직원도 저도 직급에 상관없이 더 좋은 알고리즘을 제안해주면 받아들일 준비가 되어있기 때문에

편하게 리뷰를 작성해달라고 공표했답니다!

물론 지금도 말하고 있고요.

그 덕분에 제 소스코드에도 아주 가~끔 리뷰가 달려요^^


마지막... 가장 큰 문제인데요.

리뷰이들은 자신이 Push한 소스코드에 리뷰가 달리면 그 때만 소스코드를 본다는 거에요.

다른 개발자들이 기능 개선을 위해 어떻게 작성했는지 봤으면 좋겠지만...

적어도 자신이 작성한 소스코드를 종종 되돌아봤으면 좋겠지만...

아직은 코드리뷰에 대해 어색하고 제대로 인지하면서 활동하는 단계까지는 안된 것 같아요.

지금도 이 부분을 어떻게 해결하면 좋을지 고민중이랍니다!


마무리

아직까지는 코드리뷰 활동에 수동적으로 참여하는 단계라고 생각해요.

그래도 아예 참여하지 않는 것보단 발전 가능성은 있으니 지금 작성한 문제점들을 어떻게 해결할 수 있는지

많이 고민해봐야겠어요.

물론 진행을 하면서 다른 문제점도 생기겠죠!

하지만!

하나 하나 해결해 나아가다보면 언젠가는 서로의 코드를 검토해주며 능동적으로 코드리뷰 활동을 하는

문화가 생기지 않을까요!?

그 때까지 SI에서 '코드리뷰'하기 일지를 계속 작성해보도록 할게요!

'일상 로그 > CodeReview' 카테고리의 다른 글

SI에서 '코드리뷰'하기 - 개요  (2) 2024.09.13