본문 바로가기
웹개발

파이썬 스터디 : 002. 실무에서는 어떤 데이터를 다루게될까?

by 리플러스 2021. 1. 26.
728x90

 

 

정보의 맥락부터 구분하자

필자는 개발 전공이 아니다. 대신 UI 디자인을 실무로 경험해왔고, 다양한 설계를 해본 경험이 있다. 그런 사람이 개발 공부를 하려면 어떻게 해야할까? 무작정 코딩을 따라하면 공부가 되는걸까? 내 대답은 '아니오' 였다. 

대부분의 코딩 공부에서 문제가 되는 것은. 무엇이 왜 중요한지. 어떤 맥락에서 쓰이는지를 모른 채. '일단 따라가고 보는 지루함'이다. 내가 이걸 왜 해야하는지를 모르는데. 무엇이 왜 중요한지, 어떤 것들은 덜 중요한지를 어떻게 판단하겠는가? 정보의 우선순위를 모른 상태에서는 공부를 해도 효율이 떨어질 수 밖에 없다. 그래서 나는 개발 언어를 파고들기 전에. 먼저 실무에서 어떤 내용을 다루게되는지 관련 정보를 좀 더 찾아보기 시작했다.

내가 맨 처음 확인한 것은 자료구조에 대한 내용이었다. 대학에서 주로 배우게되는 내용들 중에 '정보구조 알고리즘'이 있기에. 관련 내용을 찾아봤는데. 그중에 가장 깔끔하게 설명을 해주는 영상을 기반으로 시청을 했는데. 여기서부터 바로 문제가 생겼다.

 

 

자료구조는 대체 왜 쓰는건데?

간단히 말하면. 자료구조는 실제로 서비스마다 '다른 정보를 다루고있기 때문에' 필요한 내용이다. 서비스 내부의 사용자 입력에 따라 수정되거나, 삭제될 수도 있다. 그래서 그 서비스에 최적화된 구조를 찾고, 내용을 쓰고, 수정하고, 삭제하는 과정도. 가능하면 최적화시켜야한다는 이야기다. 

 

이게 대체 뭐지? 이게 어떤 목적으로 쓰는건데?

 

 

영상을 통해 강의를 들으면서, 개발 공부가 왜 쓸데없이 어려워지는지를 다시한번 알 수 있었다. 내게 필요한건 몇개의 핵심적인 내용들 뿐인데. 그 맥락이나 사용 이유를 알지못한 상태에서 무작정 설명을 하니. 정보의 우선순위나, 중요도를 가늠할 수 없기 때문이었다.  

 

여러가지 자료구조 중에, 내게 필요한 건 결국 몇가지 뿐이다

 

 

여기서 내가 시도한 방식은. 무작정 자료구조의 가짓수나, 구조도를 그대로 따라가는 것보다. 실제 서비스들이 사용하는 정보 구조를 체크해보자는 거였다. 이미 정해진 서비스들의 정보구조가 있을테니. 거기에 최적화된 알고리즘을 찾는것도 가능하지않을까? 그렇게되면 내용을 이해하기도 쉽고, 정보의 우선순위를 확인할 수 있을테니까. 그래서 영상을 멈추고 여러 서비스들을 정보 단위로 분석해보기 시작했다.

 

 

 

서비스마다 사용되는 주요 아이템을 분석해보자

내가 맨 처음 생각을 하게된건 달력이었다. 연, 월, 일로 나눠지는 확실한 정보구조가 있었고. 매달 일자수가 다른데다. 해당 날짜를 다시 방문할 수도 있고, 일별로 메모를 쓰는 일도 가능하니. 자료구조에서 말하는 확실한 트리구조가 그대로 드러나는 방식이었다.

 

 

달력은 굉장히 특이한 구조를 갖고있다. 일반적으로 폴더 구조라는건 '방을 만든다'는 것과 같다. 그러니까, 쓰이지않는 방은 만들 필요가 없다는 거다. 그러나 달력은 미래이건 과거이건 간에. 내가 아무런 기록을 해놓지 않았더라도, 모든 날짜의 방이 만들어져있어야한다. 사용자가 원한다면 2100년 1월 31일 날짜로 메모를 할 수 있어야 한다는 뜻이다. 1523년으로 돌아가 과거 위인의 탄생일. 같은 메모를 할 수도 있다는 뜻이다. 

 

 

 

달력에 메모 기능이 있는 경우

  • 메모가 날짜에 딸려 들어가는 개념
  • 메모는 한 날짜에도 여러개 존재할 수 있음
  • 일기장과 다르게, 사용자는 제목을 따로 지정하지 않는것이 더 편할 수 있음
  • DB상에서는 메모 넘버가 붙더라도, 사용자에게는 따로 보여주지 않아도 됨
  • 다른 날짜에 메모가 없더라도, 과거, 미래 날짜 폴더에 들어갈 수 있어야함

 

 

 

달력의 정보구조를 정리해보면, 1년에 365개의 방이 있고. 월별로 그 방을 구분할 수 있으며. 사용자가 메모를 작성하더라도, 따로 제목이 필요 없을 수도 있다는 거다. 그렇다면 이런 메모들을 '서로 구분하기 위해서'는 어떤 정보들이 필요할까? 예를 들어서 이런 상황을 생각해보자.

 

" 동일한 날짜에, 메모 2개를 작성하는 경우. 그 메모들을 서로 구분하기 위해서는 어떤 값이 필요할까? "

  • 연, 월, 일까지는 모두 동일한 메모라면. 작성 시간을 기준으로 구분할 수도있음.  
  • 해당 날짜 폴더에 생성된 순서를 기반으로, 별도의 번호를 주는 것도 한가지 방법
  • 글 내용은 언제라도 바뀔 수 있기 때문에, 메모를 서로 구분하는 안정적인 방법이 되긴 어려움

 

사용자가 무언가를 작성하고, 수정하고, 검색할 때는. 특정 정보를 찾아내는 과정이 꼭 필요하다. 결국 수많은 메모나, 날짜들 중에. 그 대상을 찾아낼 수 있는 고유한 번호나. 식별을 위한 정보가 필요하다는 걸 알 수 있었다.

 


 

변하지 않는 고유정보와, 변할 수 있는 정보

 

서비스마다 정보구조가 다르다. 그리고 거기에 최적화된 방식도 다를거다. C언어의 포인터가, 정확한 위치를 찾아 그 내용의 변화를 확인하듯이. 여러 서비스에서 사용되는 특정 아이템은. 비슷한 시점, 비슷한 날짜, 비슷한 내용으로 만들어진 다른 내용들과 명확하게 구분되어야한다. 그래야 검색을 하거나, 편집을 해 내용을 바꾸는것도 가능할테니까.

이런 방식으로 서비스를 바라보다보면. 하나의 서비스가 사용자 입장에서 보이는 정보들 외에. 숨어있는 정보들이나, 정보 구분을 위한 식별 태그를 갖고있을 거라는 걸 예상할 수 있다. 마치 태그 기반으로 원하는 글을 찾거나. 검색어를 기반으로 내용을 찾지만. 그 글이 갖고있는 고유 URL이나, 작성자 이름 + 001 같은 식으로 만들어지는 넘버링처럼. 변하지않는 값이 필요하다. 

그렇다면 서비스마다 이런 변하지 않는 고유정보와. 변할 수 있는 정보도 차이가 있지 않을까? 서비스별  차이를 확인해보면, 자료구조에 대한 내용을 좀 더 깊게 이해할 수 있을 것이다. 다음 시간에는 좀 더 다양한 서비스를 비교해보면서. 어떤 정보의 차이가 있는지. 좀 더 파악해보기로 하자. 

728x90

댓글