[공모전] 2024 공개 SW 개발자대회 후기 [이번역] 회고_04

정은아·2025년 1월 19일
2
post-thumbnail

2024 제 18회 공개 SW 개발자 대회 공모전 회고_04

이번역(부제: 한발자국도걸을수없다)


📌 00. 메인 페이지 및 편의 시설 조회

😄 수정 후 이번역 Page

  • 2차 기간동안 메인 페이지의 아이콘을 키워 가시성을 높였고,
    역 정차 시 조회 기능과 함께 사용자 위치의 실시간 날씨도 함께 띄웠다.

📌 01. 공지 게시판

  • 지하철 지연, 지연 발급서 등의 내용을 담기 위해 만들어진 추가 기능이다.
  • 공지 게시글 조회 및 검색은 비회원도 가능하다.
  • 공지 게시글 작성의 경우만 관리자로 설정한 ID만 가능하게 구현했다.
  • 다중 이미지 등록 가능하며, 파일 크기는 최대 20MB로 제한했다.
    FE팀원과 논의 후 toast UI editor로 결정했다.
  • 메인 화면에서는 최신 공지글 1개를 추출하여 게시하였다.

📌 02. 즐겨 찾기(장소)

  • 즐겨 찾기의 경우, 장소지하철 역 즐겨 찾기로 나누어 진행하였다.
  • 장소의 경우, 출발지와 도착지 입력 후 해당 장소를 원하는 이름으로 등록 가능하다.
  • 지도 Page와 내 정보 Page에서 조회 가능하며, 회원 고유 기능으로 구현했다.
  • 지도 Page 접속 시 장소 검색창 하단에 노출되며 최대 5개까지 등록 가능하다.

📌 03. 즐겨찾기(지하철역)

  • 자주 이용하는 지하철 역의 상세 페이지 상단에서 등록, 삭제가 가능하게 구현했다.
  • 내 정보 Page에서 조회 및 삭제가 가능하며, 클릭 시 해당 역으로 이동한다.

📌 04. 침수 피해 및 초단기 예보 안내

💎 침수 피해 안내

  • 사회 문제 멘토링을 받으며 전국 지하철 역의 침수 피해를 조사했다.
  • 여러 자료가 있었지만, 우리는 행정안전부_침수흔적도(2020년)를 바탕으로 기본 DB에
    침수 피해 컬럼을 추가한 뒤, 자료 값을 채웠다. 1083개 역만 조사하면 됐다.
  • 침수 피해의 기준은 출구 반경 1~200m내에 한 블럭 이상의 침수가 있었는지로 잡았다.

😄 [침수 피해 DB작업] 길동역, 연신내역, 대방역의 침수 피해 여부

  • 그럼에도 주관적으로 판단하다보니 부분적으로는 사용자의 경험과 차이가 있을 수 있다.
  • 해당 예시의 역은 모두 침수 피해 없음으로 구분했다.
    침수 피해가 컸던 대방역의 경우 출구와 멀리 떨어져있음을 이유로 들었다.
  • 그 후, 침수 피해가 있던 역을 검색하거나 검색 장소 인근에 지하철 역이 있을 경우에는 침수 피해 사실을 지도 page와 날씨 상세 page에서 노출시켰다.
  • 경로 검색 시에도 함께 날씨가 노출되게끔 했는데, 이 때에는 출발지, 목적지 둘 중 한 곳에 침수 피해가 있을 경우 침수 피해 주의 문구 표시하여 사용자의 편의성을 높였다.
    ex. 현재 위치 - 침수 피해가 있어 문구 표시O
    ex. 강릉 & 군자역 - 침수 피해가 없어 문구 표시X

💎 초단기 예보

  • 실시간 날씨 안내의 경우 기상청 초단기예보 API를 사용했다. 최근 날씨가 시간 단위로 계속 바뀌기 때문에 현재 시간을 포함해 최대 2시간 후의 날씨를 안내했다.

  • 날씨와 더불어 추가로 제공하는 정보로는 시간당 강수량, 하늘 상태, 강수 형태, 낙뢰, 풍속을 함께 제공했다.

  • 날씨의 경우 대한민국 기준으로 시간을 설정해야 했는데 Local에서는 문제 없이 test가 진행되었으나, 서버에서는 코드가 UTC기준으로 실행되는 오류가 발생했다.
    원인파악 결과, Timezone error로 발생코드가 실행되지 않는 오류였고 직접 9시간을 더해 전송했다.

  • 또한, 간헐적으로 timeout error가 나기도 했다. 자전거 대여 API와 동일한 error였고, 정상적으로 호출될 경우 평균적으로 1초 내외로 호출되는것을 확인했다.

  • OkHttpClient 시간을 1초로 줄인 뒤 for문을 10번 돌려 정상적으로 호출될 경우 바로 종료되게끔 로직을 수정해 오류의 빈도수를 최소화했다.

  • 이 경우를 대비하기 위해 BE와 FE 모두 데이터 캐싱 작업을 진행했다.
    주고 받는 데이터를 간소화하여 회원간 호출하는 데이터가 최대한 비슷하게끔 보완했다.

  • 다른 문제점으로는 기상청에서 요구하는 x, y좌표가 일반 위도, 경도와는 다르다는 것이었다. 기획 당시 FE에서 사용자의 위치를 좌표화해서 BE로 보내주게끔 하였으나
    캐싱 작업을 진행하며 FE에서는 사용자의 위도와 경도를 전달해주면 BE에서 계산하여 보내주게끔 수정했다.


📌 05. 이격 거리 및 추가 정보 조회

😄 이번역에서 제공하는 편의 시설 목록

  • 기존 10가지 정보 제공에서 우리는 이격 거리, 지하철 내부의 엘리베이터, 에스컬레이터 , 계단 위치, 기후 동행 카드 지원 여부 등 총 15가지의 정보 제공으로 확대했다.

  • 이격 거리의 경우, 여성과 어린이 등 보폭과 체구가 작은 사람을 위한 서비스였는데,
    여전히 이격거리가 넓어 사고가 나기 때문이다.

  • 호선마다 지하철 량이 달랐고, 한 플랫폼(1량에 보통 4칸이다)당 이격거리가 다 달라 DB에 어떻게 기입할 것인지 고민했다.

  • 모든 칸의 이격 거리를 제공한다면 좋았겠지만, 가시성이 떨어질 것이라 판단했다.
    한 량에서 가장 취약한 이격거리를 기준으로 제공을 했으며, 추가적으로 탑승 안전칸에 대한 정보도 함께 제공했다.

    • 탑승 안전칸이란, 이격 거리가 10 이하이면서 해당 역에서 가장 좁은 칸을 뜻한다.
  • 이번역은 결론적으로 416개의 공공데이터를 참고하여 약 40,000건의 데이터 전처리 작업을 완료했다.


📌 06. 혼잡도

  • 혼잡도의 경우, 서울 일부 지역에 한해서 30분 간격으로 제공했다.

  • 안내 기준은 여유-보통-주의-혼잡-정보 없음의 5단계로 안내했다.

  • 다만 국토교통부의 기준과 상이하여 자체 협의 끝에 기준을 세웠는데, 데이터 상에서는 혼잡상태인 역이 2~3개밖에 되지 않는 것에 의아했기 때문이다.
    데이터 상으로는 출, 퇴근 시간대의 2호선 사당역, 1호선 서울역도 모두 여유 혹은 보통인 상태인데 실제로 가보면 줄이 길어 2~3대의 지하철을 보내고 겨우 타기 때문이다.

  • 편의성을 위해 메인 화면과 지도 페이지에서 최상단에 배치하였으며,
    혼잡도 상세 페이지는 이격 거리와 함께 띄워 사용자의 편의성을 극대화했다.

  • 데이터는 현재 시간을 포함해서 앞으로의 1시간의 데이터를 같이 볼 수 있다.


📌 07. 라이선싱 및 기능 검증 테스트

  • 가장 생소했던 부분은 라이선싱 부분이 아니었을까? 싶다.
  • Apache 2.0, GPL, MPL.. 낯설고 이해도 잘 가지 않았다. 물론 나와 같이 생소한 참여자를 위해 공개 SW개발자대회에서는 온라인 강의와 특강을 모두 제공했다.
  • 특강이 끝난 뒤, 미리 테스트할 수 있는 계정을 발급해주셨다. 대회의 라이선싱을 담당해주시는 관리자분과 연락하며 감점이 없도록 최선을 다했다.
  • 우리가 사용하는 라이브러리 하나하나 모두 라이선스가 있었으며, 충돌이 나지 않는 선에서 우리팀의 라이선스를 종합한 결과, BE와 FE 모두 Apache 2.0 License로 등록 완료하였다.
  • 그 후, 기능 명세서를 작성하여 제출한다. 며칠이 지나면 Zoom을 통해 우리가 구현한 프로젝트를 실제로 시현하며 작성한 기능에 대해 작동 여부를 판단한다.
  • 모든 기능 완료되었으나 기능 명세서 작성 당시 썼던 기능을 뺐던게 기억났다.
    메인 페이지 하단에 날씨 기능을 넣으려다 뺀 것이었는데, 유능한 우리 FE가 바로 넣어줬다. 당신은 천재예요❤️ 덕분에 감점 없이 잘 마무리할 수 있었다.

📌 08. 최종 발표

  • 기능검증과 라이선싱 제출까지 끝이 났고 구현한 코드도 모두 제출했다.
  • 1차는 코드 제출이 끝이었다면, 2차는 직접 가서 우리 프로젝트에 대해 발표해야한다.
  • 7월부터 진행한 프로젝트는 멘토링 때 발표도 했어서 내용은 다 아는데.. 너무 떨렸다 진짜.. 살면서 이렇게 발표를 못해본 적이 없는데 진짜 너무 떨렸다.
  • 팀원들과 만나 발표장소로 가서 대기한 뒤, 심사위원들 앞에서 발표를 시작한다.
    주어진 시간은 10분이다. 마이크는 따로 없다.
  • 마이크가 없으므로 더 크게 말해야한다. 티나게 떨었지만, 시간 내에 발표를 완료했다.
  • 타 서비스들은 경로 안내와 도착 안내에 중점을 맞춰 지하철 노선도 위주라면, 이번역은 지하철 편의시설 제공이 메인이고, 가시성을 위해 지도 기반으로 서비스하는 점을 차별점으로 발표했다.
  • 주어진 모든 것에 최선을 다했고, 기쁘게도 장려상을 수상했다!

😄 2024년 제 18회 공개 SW개발자대회 수상 발표


📌 09. 시상식

  • 시상식은 12월 06일에 서울 코엑스에서 진행됐다.
  • 시상식 뿐만 아니라 오픈소스에 대한 여러 연설과 강의가 있었다.
    오픈소스의 생태계와 의학, 과학, 자동차 등 여러 산업에서 적극적으로 활용되는 것을 알게 되는 귀한 시간이었다.
  • 여담이지만 시간이 좀 더 지난 뒤에 다시 이 대회에 참여하고싶다는 생각이 들었다. 그 때까지 꾸준히 정진해야겠다.


📌 10. 마치며

  • 대회를 진행하며 가장 큰 변화는 여전히 지식에 대한 갈망에 있다.
    조금 민망한 말이지만 성장함과 부족함을 여전히 동시에 느낀다. 더 잘하고싶고,
    더 알고싶다. 좋은 방향이라 생각한다.
  • 가장 큰 성장은 직접 데이터 전처리 과정을 경험한 것과 여러 API를 사용해봤다는 것이다.
  • 아직은 서툴지만, 2024년은 기획과 구현으로 가득한 1년이었다. 이전까지는 사용자의 입장에서 생각했다면, 개발자로서 사고하는 법을 조금 배운 것 같다.

📌 꿀팁?

💎 1차 예선 보고서 제출 시에는 최대한 풍부하게 작성하자!

  • 대회 OT에서는 참여자의 경험과 기록을 중요하게 본다는 이야기를 했다.
    가능한 보고서를 풍부하게 작성하자!
    나는 13장밖에 작성하지 못했지만, 충분히 어필될 것이라고 생각한다.

💎 기능 명세서 작성은 철저하게

  • 우리 팀도 작성했다가 뺐는데 급하게 당일에 추가한 기능이 있다.
    사실 이미 구현된 API였고, 화면에 넣지 않았기 때문에 급하게 추가할 수 있었지만
    만약 기능 자체를 뺐다면 분명 감점되었을 것이다.
  • 수상이 목표라면 1점의 아쉬운 감점도 있으면 안된다.
    기능 명세서 작성 시에만 현실적으로 추가한, 구현한 기능만 넣자!

💎 제출은 기간 내에

  • 기본중에 기본이지만 늘 코드 구현하다보면 시간에 쫓기기 때문에 완성도를 높이고
    시간을 조금 어길까? 하는 생각이 들기도 한다.
  • 그러지 말고 제 때에 내자!

profile
꾸준함의 가치를 믿는 개발자

2개의 댓글

comment-user-thumbnail
2025년 3월 10일

회고록 인상적이었습니다, 데이터 전처리부터 모바일까지 구현하셨다니 대단하시네요 😀늦었지만 장려상 축하드려요~

1개의 답글