te___ho
NO RULES
te___ho
전체 방문자
오늘
어제
  • 분류 전체보기 (92)
    • 주니어의 개발일지 (1)
    • My project (29)
      • High Traffic Lab (5)
      • Nanaland in Jeju (8)
      • Univey (3)
      • inflearn_clone? (13)
    • Spring (19)
    • Network & CS (9)
    • Java (1)
    • Front_End (8)
    • Algorithm (11)
    • ETC (6)
    • Scribble (8)

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
te___ho

NO RULES

프로젝트 진행 시 엑셀에 작성한 데이터, DB에 저장하는 방법
My project/Nanaland in Jeju

프로젝트 진행 시 엑셀에 작성한 데이터, DB에 저장하는 방법

2024. 10. 17. 14:44

이 글은 프로젝트를 진행하면서 고민했던 부분부터 해결 과정까지가 나름 유의미하다고 생각해서 글로 남겨보려 한다.

데이터 가공, 나열 -> 엑셀

우리 프로젝트에서는 필요한 데이터를 크롤링하여 엑셀화를 진행한다. 그 이후 기획자분들께서 데이터를 가공하는 과정, 번역하는 과정(4개 국어를 지원하는 서비스이기 때문,,,)을 거쳐서 최종 엑셀 파일이 완성된다.

지인 찬스로 외국인 분들께서 번역을 직접 검수해 주시지만 가끔 돌발 상황에서 엑셀 번역기능을 사용할 수도 있었고, 데이터를 정리하는데 엑셀이라는 플랫폼을 선택한다는 것은 고민할 필요가 없었다.

엑셀 파일 일부 예시

이걸 어떻게 데이터 베이스에 저장하지?

엑셀에 있는 데이터를 DB에 저장하는 방법을 정하는데 프로젝트 초창기인 3월쯤에 백엔드 팀원분과 많은 토론이 있었다. 여러 가지 방법들을 생각하면서 사용도 해보았다.  우리가 경험한 방법들을 우선 하나씩 살펴보겠다.

Python 사용하기

별도의 모듈로 분류하는 것이 첫 번째 아이디어였다. 파이썬은 데이터를 다루는데 편리한 언어로 알려져 있고 (우리 프로젝트에서 크롤링도 파이썬으로 진행) mariaDB(Mysql)에 연결하는 라이브러리도 제공한다. 엑셀의 첫 번째 열을 읽어와서 어떤 데이터인지 확인하고 그 아래 행들을 데이터라 판단하여 DB에 INSERT, UPDATE 등을 진행하면 된다.

python으로 DB에 데이터 넣기

예외 처리와 로그를 통해 진행 과정, 결과를 출력하면 더욱 깔끔한 작업을 할 수 있다.

장점

  1. 초기에 엑셀 템플릿을 데이터베이스 테이블 설계와 맞게 개발자가 작성해 두면 기획자가 데이터를 입력하고 나서 따로 작업을 진행할 필요 없이 파이썬 코드를 바로 돌릴 수 있다. (너무 큰 장점)
  2. 한번 해두면 다른 데이터를 넣을 때도 재사용이 가능하다.

단점

  1. 이렇게 해도 되는 건가? 맞는 방법인가? 하는 의구심이 생긴다.

 View 생성하기 (Thymeleaf, 관리자 페이지)

두 번째 방법은 나름의 관리자 페이지를 만드는 것이다. thymeleaf로 간단한 화면을 만들어서 직접 데이터를 넣는 방법이다. 타임리프를 사용할 기회가 생겨서 조금 기쁘기도 했다. 당장 필요했기 때문에 디자인은 신경 쓰지 않았고 만들다가 입력창 추가용 '+' 버튼도 만들고, 하다 보니 잘못 추가했을 경우 삭제를 못해 뒤늦게 삭제용 '-' 버튼도 추가하고 우여곡절이 많았다. 이 역시 에러가 발생하면 출력을 하는 방식으로 구현하였다.

관리자 페이지 by thymeleaf

 장점

  1. 직관적이다. 가장 보편적인 방법이 될 수도 있겠다고 생각이 든다. (지극히 개인적인 생각)
  2. 강의 보고 따라 할 때만 사용하다가 프로젝트에서 타임리프를 사용해서 기뻤다.

 단점

  1. 처음부터 데이터를 해당 view에 작성하지 않는다면 엑셀 -> view로 데이터를 옮기는 작업이 필요하다.
  2. 접근 권한을 부여해야하기 때문에 추가적인 로그인 페이지 제작까지 필요하다.
  3. 디자인, 기획하기 너무 힘들다... 이것까지 바쁜 기획, 디자이너분들한테 부탁할 수는 없어서 직접 하다 보니 무슨 버튼이 없고, 다 만들었다 생각했는데 다른 기능도 필요하고 많은 수정이 필요했다.

직접 DB에 Query 날리기

직접 INSERT 쿼리를 작성한다. 정말 지옥이다.. 해시 태그도 있어서 기존에 존재하는 키워드인지? 아닌지? 확인하고 존재하면 기존 id를 갖고 와서 연결해줘야 하고... 등등.... 2시간 걸렸다.. 바로 포기했다.

최종적으로 사용한 방법은?

일단 우리 팀이 가장 편했던 방법은 당연히 파이썬 코드를 돌리는 것이었다. 하지만 우리는 몇 개의 고민거리가 해결되지 않아 파이썬 코드를 통해 데이트를 입력하는 것을 메인으로 하고, 관리자 페이지를 통한 입력을 병행하고 있었다.

  1. 이렇게 해도 되나..? -> 현업에서 하는 방법 중 하나일까?라는 고민을 많이 하고 있는 프로젝트다. 우리가 찾지 못한 취약점이 있지 않을까 하는 고민이 있었다.
  2. spring 서버 안에서 돌아가야 할까? -> 서버와 데이터 베이스에 데이터를 업로드하는 것을 분리하면 서로 영향을 주지 않아 이점이 많은 것 같은데 괜찮을까 하는 고민이 있었다.

이외에도 비슷한 종류의 고민이 많았다. 이렇게 해도 되나라는 막연한 걱정이 있었는데 좋은 기회로 현직자분과 커피챗을 할 기회가 있었는데 그때 해당 고민에 대한 질문을 해보았고 아주 명쾌하게 답변해 주셨다.

 

현업에서도 많이 쓰는 방법입니다. 모듈화가 되어서 효율적이에요!

우리 팀이 이 방법이 서로 영향을 주지 않는다 생각했던 것은 모듈화의 장점이었고 현직자분께서 좋은 접근이라 해주셔서 지금은 더 이상 고민 없이 파이썬으로 쭉쭉 데이터를 넣어주고 있다. (휴먼 에러를 방지하는 좋은 방법이라고도 해주셨다.)

실행 결과를 로그를 통해 나타내면 완성도가 더욱 높아질 것이라는 피드백도 반영하여 디버깅 시에도 용이하게 사용중이다 :]

마무리

이번 프로젝트를 진행하면서 맞는 방법일까? 현업에서도 사용하는 방법일까? 라는 고민을 많이 하게 된다. 뚜렷한 단점이 없음에도 이런 막연한 걱정으로 백엔드 회의 시간이 길어지지만 이런 주제로 팀원들과 회의하는 시간이 많이 유익하다고 느껴진다. 좋은.. 팀원들..👍

시간 여유가 있을 때 함수로 작성해 놓은 코드들을 라이브러리화를 한다면 더욱 편해질 것 같다는 이야기를 팀원과 나누며 이번 문제도 해~결~

728x90
반응형
저작자표시 (새창열림)

'My project > Nanaland in Jeju' 카테고리의 다른 글

Slack으로 서버 로그 모니터링하기 (Feat. Spring AOP, Logback)  (3) 2024.11.12
이미지 조회 속도 개선 (Feat. CDN, AWS CloudFront, S3만 사용하다가 cloudfront 적용하려면?)  (11) 2024.10.19
스프링 검색어 자동완성 비동기 처리 (Feat. 1만번의 부하테스트 결론은 Over Engineering 이었다고 한다..)  (5) 2024.08.29
검색어 자동완성 구현하기 with Redis (Feat. Elasticsearch)  (3) 2024.08.01
Stream API 사용 중 .toList()에서 UnsupportedOperationException 발생한 썰  (1) 2024.07.26

    티스토리툴바