첫 업무: 업로드 배치 프로그램 작성

jinwook han·2020년 2월 16일
0

첫 업무

회사에 들어와서 첫 업무로 배치 프로그램을 작성했다. 페어와 함께 작성했다.

새로 만든 배치 프로그램 목적

db에 쌓여있는 데이터를 s3로 업로드하는 것이다

배치를 만든 과정

페어와 함께 작업했다. spring batch framework를 사용했다.
처음에 작업을 두 단계로 나눴다.
1. 데이터를 csv file로 바꾸는 과정
2. 만든 csv file을 s3로 업로드하는 과정

csv file을 s3로 업로드하는 코드를 짜는 건 어렵지 않았다.
과정이 간단했고, s3 관련 코드가 이미 있었기 때문이다.

하지만 데이터를 csv 파일로 바꾸는 과정이 길었다.

데이터베이스를 csv 파일로 옮기려면

csv file은 comma로 데이터가 분리된 파일이다.
table의 column이 id, name, age 이렇게 이루어져 있다면,
table 1 row의 데이터는 다음과 같이 csv로 변환될 수 있다.
1, 한진욱, 30
꼭 위처럼 변환되지 않고, 아래처럼 변환될 수도 있다.
1, "한진욱", 30
wikipedia에 따르면 csv는 comma로 분리된다는 큰 틀의 형식만 공유할 뿐, 구체적 표준이 있는 건 아니다.
https://en.wikipedia.org/wiki/Comma-separated_values

database -> csv 변환이 잘 됐는지 어떻게 알 수 있는가?

구체적인 표준이 없었기에, 나와 사수(페어)는 intellij에서 csv -> database로 변환이 가능한지를 살폈다.

intellij에서 csv -> database로 변환할 수 있도록 csv file을 만드는 것을 목표로 잡았다. 목표를 이뤘는지 확인하려면 intellij를 키고 csv -> database로 변환해야 한다. 이 과정은 길었다.

우리는 csv로 변환하는 로직(ex 데이터를 ',' 구분자로 붙여서 변환)을 스스로 짰다. intellij에서 csv를 읽어들일 수 있도록 로직에 수정을 가하면서 일을 진행했다.

목표를 이루고 베타 환경에서 수동 테스트

몇 번이고 수동 테스트를 한 후, database -> csv 파일로 변환하는 배치를 만드는데 성공했다. intellij에서도 만들어진 csv 파일을 database로 성공적으로 변환했다.

그 후 작업한 feature branch를 beta branch로 merge했다. beta branch를 원격 저장소로 push한 후, 우리가 만든 배치 프로그램을 베타 환경에서 수동 테스트했다. 이 과정도 길었다.

구현 및 테스트 마무리. 하지만...

베타 환경에서 table이 csv로 성공적으로 변환되었다. 또한 만들어진 csv 파일이 s3로 성공적으로 업로드되는 것을 확인했다. 그 후 다른 팀원으로부터 코드리뷰를 받았다.

csv로 변환하는 로직을 직접 구현하지 않고 csvwriter라는 library를 사용하는게 어떻겠냐는 피드백을 받았다.(기존에는 csv로 변환하는 로직을 직접 구현)

피드백을 반영하여, csvwriter library를 사용했다. 직접 만든 변환 로직이 없어져, 코드 수가 많이 줄었다. 다시 수동 테스트를 반복했다.

수동 테스트 과정

  • csv파일이 잘 만들어졌는지 눈으로 확인
  • csv파일이 데이터베이스로 intellij에서 변환되는지 확인
  • 베타 환경에서 csv 파일이 s3로 잘 업로드 되는지 확인

다음에 더 잘하려면

  1. 다른 팀원과 소통하며 요구사항을 명확히 한다.

처음 요구사항은 간단했다. 데이터베이스의 데이터를 s3로 업로드하는 것이었다.

  • 그 과정에서 우리는 csv로 변환해서 s3로 올린다는 요구사항을 스스로 추가했다.
    그리고 파일을 여러 개 분할해서 올린다는 요구사항을 또 추가했다.
    마지막으로 만들어진 csv 파일은 intellij에서 성공적으로 db로 변환되어야 한다는 제약사항을 만들었다.

  • 요구사항, 제약사항을 추가할 때마다 수동 테스트해야 하는 부분이 늘어난다. 즉 일하는 데 걸리는 시간이 늘어난다.

  • 요구사항, 제약사항을 부과할 때마다 다른 팀원과 협의하며 정해도 좋을 것 같다. 불필요한 요구사항 및 제약조건을 없앨 수 있다.

  1. 수동 테스트하는 부분을 테스트 코드로 옮긴다.
  • 어떻게 하는지는 더 찾아본다.

0개의 댓글