심심할때마다 프게를 눈팅하는 눈팅러입니다.
프게를 눈팅하다 보면, 뭔가를 만들어 보고 싶은데 뭘 어떻게 해야할지 모르겠어요. 더군요.
그래서 점심먹고 심심해서 생각난 김에 제가 풀어 나가는 흐름을 끄적거려 보려구요.
참고로, 전 주로 Realtime-OS에서 돌아가는 프로그램을 주로 하고 있구요.
운영체제는 리눅스와 vXXXXX(이건 너무 바닥이 좁아서 XX처리) 주로 쓰고 있네요.
(가끔 시간의 여유가 있으면 장비와 연동하는 Windows GUI까지 직접 해버리는게 함정. 이게 효율이 더 빠를때도 있더군요.)
그냥 저런일을 하는 녀석은 저렇게 일하고 있구나.. 정도로 생각해주시면 되겠습니다.
여기서는, PC와 휴대폰간 연동이 되는 To Do List 프로그램을 만들어보고 싶어요. 라는 예를 가지고 끄적거려 보겠습니다.
To Do List는 일종의 할일 관리 리스트라고 생각하시면 됩니다.
1. 문제 인식
사실 가장 중요한 단계입니다. 학부 과제 정도라면 문제가 사실 명확하지만, 고객의 요청사항이라면, 정말 가장 중요한 단계입니다.
(학부과제는 전공자가 내지만, 고객은 전공자가 아닐 확률이 더 높지요. ㅎ)
게시판에 글을 쓰시는 대부분의 질문러들께서는 보통 이 1번 단계를 안거치고, 바로 by-pass해서 글을 쓰시는 경우가 많습니다.
(그런 글을 보면, 의욕이 확 떨어집니다. ㅎ 내 문제를 남이 풀어달라는 거니까요.)
여기서는 우리의 주제를 가지고 풀어 나가 보죠.
우리가 만들고 싶은걸 자세하게 쪼개 보면
할일 목록을 관리하고 싶다.
PC에서도 사용하고 스마트폰에서도 사용하고 싶다.
두가지 어느곳에서 사용해도 항상 같은 정보를 유지했으면 좋겠다. 입니다.
같은 말인데도 쪼개어 풀어놓으니 좀 다른 느낌이죠? 여기서 출발입니다.
2. 문제 분석
큰 기능으로 큼직하게 잘라내었으면, 그 큰기능을 하기 위해서 다시 무엇을 해야하는지 살펴봅시다.
- 할일 목록을 관리하고 싶다
할일 목록을 관리 하려면 할일을 저장하고, 저장된 할일을 수정하고, 저장된 할일을 삭제하는 기능이 기본적으로 필요하겠지요?
- PC와 스마트폰에서도 항상 같은 정보를 유지했으면 좋겠다.
내가 관리한(저장하고 수정하고 삭제했던) 할일 목록이 양쪽에 동일하게 적용되었으면 좋겠다.가 되겠군요.
여기서 저는 고민합니다. "PC와 스마트폰이 각각 할일 목록을 가지고 있고, 뭔가 바뀔때마다 서로 알려주는 방식을 쓸까?"
아니면 "공동의 저장공간을 두고, 서로 정보를 가져와서 사용할까?"
이 선택은 여러가지 변수(상시 사용가능한 DB가 있는가? 등등)에 따라 결정이 달라지겠지만. 여기서 전 후자를 택하겠습니다.
3. 기본설계
자 기본적인 문제가 정리 되었습니다.
저는 공동의 저장공간을 두고, PC와 스마트폰에서 모두 접근가능한 할일 목록을 관리(저장, 수정 삭제)하는 프로그램을 만들겁니다.
그럼 저 기능을 만들기 위해 기본적으로 무엇이 필요할까를 고민해 봅니다.
먼저 공동의 저장공간이 필요합니다. 저는 관리의 편의성을 위해 DB를 적용하기로 합니다. 거기다 전 돈이 없으므로, 열심히 구글링 해서 무료 DB를
검색하여 선정합니다.
두번째로 공동의 저장공간에 접근하기 위한 방법을 고민해 봅니다.
각 기기(PC, 스마트폰)에서 직접 DB에 접근할 수도 있고, DB가 설치된 서버에서 중간 역할을 하는 프로그램을 하나 두고, 거기로 접속하여 관리하는
방법을 두고 고민합니다.(참고로 이런 모든 선택은 최선의 선택이 아닙니다. 제 판단이니까요. 제가 할수 있겠다 싶은 방법을 택하는 겁니다.)
여기서는 중간에 프로그램을 하나 두는 형태를 선택하겠습니다. 아무래도 직접 DB에 접근하는 경우는 개인적으로 찝찝해합니다. ㅎ
그러면 다시 정리 해 보겠습니다.
저는 DB를 두고, DB를 관리하는 중간 프로그램을 통하여, PC와 스마트폰에서 동시 접근하여 할일 목록을 관리 하는 프로그램을 만들겁니다.
어라? 중간 프로그램과 기타 기기들이 어떻게 서로 접근하고 할일 목록을 관리할지가 정해지지 않았군요?
그것부터 정해야 겠네요. 여기서는 스마트폰에서도 사용가능하고, PC에서도 사용가능한 방식을 정해야 겠네요.
전 Ethernet 기반 UDP 통신을 사용하겠습니다. (여기도 선택한 부가적인 이유들이 있지만, 생략하겠습니다.)
그럼 우리는 DB를 두고 DB를 관리하는 중간프로그램과 주변기기(PC와 스마트폰)간 UDP통신을 통하여
할일 목록을 관리하는 프로그램을 만들면 되겠군요.
4. 상세 설계
기본적인 설계가 끝났으니 이제 우리는 다음에 대한 설계를 시작합니다.
우선 DB를 두기로 했으니, DB에 어떤식으로 저장할지에 대한 설계가 필요하겠지요?
두번째로 UDP로 명령을 받아서 DB를 제어하는 프로그램에 대한 설계가 필요할테구요.
세번째로 PC에서 동작할 UDP를 통하여 중간 프로그램과 연동할 프로그램을 설계해야 하구요.
마지막으로 스마트폰에서 동작할 UDP를 통하여 중간 프로그램과 연동할 프로그램을 설계해야 하네요.
5. 구현
뭐 따로 설명하지 않겠습니다. ㅎ 닥치고 코딩인거지요.
간단하게 써볼려고 했더니 기네요. 개발에 들어가기 전까지의 간단한 흐름 정도라고 보시면 될꺼 같네요.
개인적인 바램으로 프게에 질문하실때에는
뭔가 만들고 싶은데 뭘로 만들어야 할지 모르겠다! 하실때에는
최소한 2단계까지는 거치고 질문하시는게 원하시는 답을 얻는게 빠를겁니다.
뭘 만들고 있는데 잘 모르겠다! 아이디어가 안떠오른다! 하실때에는
최소한 4단계는 완료하셨거나, 5단계 진행중일때, 위를 예로 하면,
그럼 우리는 DB를 두고 DB를 관리하는 중간프로그램과 주변기기(PC와 스마트폰)간 UDP통신을 통하여
할일 목록을 관리하는 프로그램을 만들고 싶은데 DB설계를 어떻게 해야할지 감이 안잡혀요와 같은 형태로
질문하시는게 원하시는 답을 얻어낼 가능성이 높다고 생각합니다.
프로그램이 막연하게 어렵다. 라고 생각하시기보다, 차근차근 접근해 나가시면, 좀 더 도움이 되실거라고 생각합니다.
언어에 대한 이해도, 코딩 스킬등도 물론 매우 중요합니다만. 가장 기본적인 소양은, 한가지 명제에 대해서 분석하고 잘게 쪼개어서
작은 단위 하나하나로 나눈 다음 그걸 구조화 시키는게 가장 기본이라고 생각합니다.
두서없이 끄적거렸더니 무슨 말인지 잘 모르는 부분도 많으실거라 생각됩니다.
댓글로 물어보시면 최대한 답글 달아드리겠습니다.