이번 포스트에서는 저의 첫 협업프로젝트였던 AGString의 배포를 기념해서, 어떻게 이를 시작했고 어떤 과정을 통해서 배포를 했는지를 기록해보고자 합니다.

  • 동기
    저는 그동안은 C++로 문제를 풀었는데, 지난 면접에서 iOS 직군을 지원했는데 왜 Swift로 코딩테스트를 보지 않았냐는 이야기를 들어습니다. 그 이야기를 듣고 나서, Swift로 알고리즘을 풀어보면 좀 더 어필할 수 있지 않을까라는 생각이 들었습니다. 그 때 마침 Swift로 알고리즘 테스트를 준비하자는 목표로 시작된 Swift Algorithm Club 오픈채팅방이 생겼고 매일 한두개씩 문제를 풀어나가기 시작했습니다. 그동안 Swift에 익숙해진 탓인지 적응은 어렵지 않았고, 일부의 경우 오히려 Swift가 더 간결한 코드를 작성할 수 있었습니다. 하지만 C++로 풀 때는 없었던 몇가지 단점들이 있었습니다.

    1. 언어 차원에서의 자료구조와 알고리즘을 거의 제공하지 않습니다.

    2. 문자열을 인덱스 기반으로 다룰 수가 없습니다. string을 Array로 변경하면 Character 배열 형태로 사용할 수는 있긴 하지만, 마지막에 또 String으로 변경을 해줘야 한다는 점에서 번거롭습니다.

    이 중에서 2번 문제를 해결해보자는 생각이 모여서, 문자열에 Int기반 인덱스 기능과 여러 편의기능 등을 제공하려는 AGString(AlGorithm String) 오픈소스 프로젝트를 시작하게 되었습니다.

  • 프로젝트 진행
    간단한 프로젝트라고 생각했었기에, 기획과 준비는 순식간에 진행되었습니다.
    AGStringDialogue1 AGStringDialogue2 AGStringDialogue3 AGStringDialogue4 AGStringDialogue5

    요구사항 정의도 약 2시간 안에 큰 얼개가 모두 잡힐 정도로 신속했습니다.

    AGStringProposal AGStringProposal

    프로젝트의 기본 틀과 여러 도구들의 기본 세팅은 팀장인 아신님이 주로 해주셨고, 저는 Proposal에 있는 기능들을 체크하고 구현하는 역할을 주로 담당하였습니다.

    AGStringPR1 AGStringPR2

    열심히 기능 구현과 리뷰에 매진하여, 정확이 일주일이 지난 뒤, CocoaPod등에 배포를 할 수 있었습니다.

    DeployComplete

  • 프로젝트 진행 간 느낀 점
    우선 간단하게나마 TDD를 체험해 볼 수 있었습니다. 아신님께서 테스트 코드 짜는 법과 테스트 코드의 유용성을 알려주셨고, 그것을 따라서 테스트 코드를 추가하거나 수정했습니다. 이 과정에서 제가 느낀 테스트 코드의 유용성은 구현이 수정되거나 할 때 그 타당성을 어느정도 입증할 수 있다는 점이였습니다. 두번째로는 실제 코드 리뷰를 경험해 볼 수 있었다는 점 입니다. 부스트코스를 통해서 코드리뷰를 받기는 했지만, 단방향으로써 과제 검사를 받는 느낌이 강했습니다. 하지만 여러번의 코드리뷰와 댓글을 통한 토론, 코드를 머지시키는 과정은 프로젝트에 대한 책임감과 성취감을 느끼게 해주었습니다. 이 프로젝트를 진행하는동안 여러 조언과 도움을 주신 Swift Algorithm Club 채팅방 분들, 그 중 특별히 프로젝트를 주도하여 주신 아신님, 프로젝트에 함께 기여해주신 Presto님, 코몽이님께 감사를 드립니다.

    AGString 라이브러리는 여러분의 많은 사용과 피드백으로 더 좋은 라이브러리가 될 수 있습니다. 많은 피드백을 부탁드립니다.!