나빌레라의 프로그래밍하기 #8 (마지막)

나빌레라의 이미지

8. 오브젝트 도출
이번 편을 쓰기 전에 제목을 무엇으로 해야 하나 약 1분간 깊은 고민을 했다. 제목을 정하기 위해 구글 검색을 할 정도였다. 이번 편에 작업하고자 하는 내용은 단순하고 명확하다. 지난 글에서 분석한 명사와 동사를 기준으로 데이터 베이스의 테이블과 코드 로직의 메소드, 코드 로직의 자료 구조등을 도출해 내는 작업이다. 나는 이것들을 통칭할 수 있는 용어로 "오브젝트"라는 용어를 직관적으로 떠올렸다. 하지만 바로 이어서 "엔티티"라는 용어가 치고 올라왔고 내 머릿속은 복잡해 졌다.

분명한것은 데이터를 기술하는 속성과 행동(동작)을 기술하는 속성이 분리되어 도출되어야 한다는 것이다. 학문적으로 접근하면 오브젝트와 엔티티의 차이가 분명하게 있겠지만 데이터베이스에서 말하는 엔티티와 OOP에서 말하는 오브젝트가 뭔가 유사하다는 생각은 지울 수 없었다. 약 1분간의 고민 끝에 "오브젝트 어트리뷰트(Object Attribute)"와 "오브젝트 메소드(Object Method)"로 명확히 분리되는 오브젝트라는 용어를 제목으로 선정했다. 그러나 글을 쓰고 있는 이 시점에서도 이 글에서 수행하는 작업을 오브젝트 도출이라는 용어로 대표화 할 수 있는지 의문이 든다.

뭐가 되었든 그냥 "시나리오에서 설계로 가는 과정"이라고 이해해 주기 바란다.

먼저 쉬운 명사부터 처리해보자. 지난 글에서 정리한 명사를 다시 본다.

사용자,
- 사용자 정보,
-- 아이디,
-- 비밀번호,
-- 이메일,
-- 닉네임,
-- 성별 정보(남자, 여자,)
서비스,
게시판,
- 화면
-- 위: 글 목록의 위에 글쓰기 폼, -- 아래: 댓글 목록의 아래에 댓글 쓰기폼
- 게시판리스트
-- 본문 최근글(맨위),
-- 댓글 최근글(맨아래)
- 남자게시판, 여자게시판
- 타임라인게시판(문자 주고 받는 컨셉)
글,
- 본문, (제목 내용 구분안함, 길이 150자 제한)
- 댓글, (제목, 내용 구분안함, 길이 150자 제한)
- 글쓴사람 (삭제 가능, 5분 안에 수정가능),
활동점수
- 10점(본문 쓸 때)
- 5점(댓글 쓸 때),
- 10000점(이성 게시판에 쓸 때 사용)
데이트
- 괜찮아보이는사람,
- 이성, - 신청받은사람,
- 신청한사람,
- 두 사람,
- 현재(데이트 중)
- 다른사람

계층화까지 다 해 놓은 덕분에 거의 그대로 객체화 시킬 수 있다. 나는 웹 서비스를 만들고 있으므로 DB 테이블을 구성하겠다.

사용자,
- 사용자 정보,
-- 아이디,
-- 비밀번호,
-- 이메일,
-- 닉네임,
-- 성별 정보(남자, 여자)
활동점수
- 10점(본문 쓸 때)
- 5점(댓글 쓸 때),
- 10000점(이성 게시판에 쓸 때 사용)

사용자로 정리된 명사 목록이다. 그대로 User라는 테이블로 도출 가능하다.

User
===
id int auto_increase
username char
password char
email char
nickname char
sex bool
point int
profile_image char
create_date datetime
last_login datetime

이정도로 User 테이블이 도출되었다. 시나리오에서 나온 명사 목록보다 몇 개 더 많다. id는 명사 목록에 있는 아이디가 아니라 DB 테이블의 primary key이다. 명사 목록의 아이디는 username으로 추상화되었다. password, email, nickname, sex는 일대일로 추상화되었고, point는 활동 점수 항목으로 나온 명사 도출 내용을 반영한 것이다. 그 아래 나오는 profile_image는 게시판에서 사용자의 사진 같은것을 보여줄 필요가 있을 때 그 이미지 파일의 경로를 저장하는 필드, create_date는 가입한 날짜, last_login은 마지막 로그인한 날짜를 저장하는 필드이다. 이 추가된 세 개의 필드는 추상화 과정에서 필요하다고 생각되어 설계자가 넣은 것이라고 생각하면 된다. 이런식으로 도출된 명사만 가지고 그대로 추상화하는 것이 아니라 그 내용을 바탕으로 정보를 추가로 넣기도 한다.

다음으로 나오는 명사는 서비스와 화면인데, 이 둘은 DB 테이블로 추상화되기 보다는 CGI로직 단에서 함수나 객체로 추상되어야 할 것 같다. 일단 두고 넘어간다.

글,
- 본문, (제목 내용 구분안함, 길이 150자 제한)
- 댓글, (제목, 내용 구분안함, 길이 150자 제한)
- 글쓴사람 (삭제 가능, 5분 안에 수정가능)

글에대한 명사 목록이다. 제대로 도출되지 않은 대표적인 예라고 할 수 있다. 시나리오 기반 작업 절차의 약점을 드러내는 것이라고 볼 수 있다. 위에 도출된 내용만 보고서는 이것이 게시판을 구성하는 각 글에 대한 설명이라는 것만 알 수 있을 뿐, User 테이블을 구성할 때처럼 구체적이고 실체적인 정보를 얻어낼 수 없다. 그래서 이런 경우에는 설계자의 해석 능력에 의해 추상화의 품질이 좌우된다.

Board
====
id int auto_increase
user foreign_key(User)
contents text
ip char
create_date datetime
hit int
reply_count int

추상화되어 나온 Board 테이블에서 명사 목록에 나온 내용 중 반영되지 않은 것은 길이제한, 5분안에 수정가능, 삭제 가능 등이다. 이들은 DB 테이블로 표현될 수 없고 CGI 로직에서 코딩으로 구현되어야 한다. 그리고 ip, hit 같은 필드는 설계자가 임의로 필요하다고 생각하여 넣은 필드이다. 글쓴이의 IP정보와 조회수를 기록하는 필드이다. 마지막 reply_count 필드는 사실 없어도 표현이 가능하다. 댓글로 달린 DB 인스턴스의 개수를 뽑으면 되기 때문이다. 하지만 매 리스트를 출력할 때마다 이 작업을 하기엔 DB에 부하가 많이 걸리므로 필드로 넣어서 그때 그때 로직에서 처리하도록 했다.

데이트
- 괜찮아보이는사람,
- 이성, - 신청받은사람,
- 신청한사람,
- 두 사람,
- 현재(데이트 중)
- 다른사람

데이트는 영어로 date이다. 이것은 날짜를 의미하는 date와 철자가 같다. 왠지 이런 이름은 키워드일 가능성이 높아서 DB 테이블 이름으로 사용하기 꺼려진다. 그냥 미팅이라고 이름 짓자.

Meeting
=====
id int auto_increase
man foreign_key(User)
woman foreign_key(User)
now_date bool
create_date datetime

도출된 명사 목록에서 이성, 신청받은 사람, 신청한 사람, 두 사람. 이렇게 네 개의 명사는 모두 User 테이블을 참조하는 man, woman이라는 필드로 추상화되었다. 도출된 명사를 추상화 하는 과정에서 앞서와 같이 도출되지 않은 항목을 끄집어 내는 경우도 많지만 방금처럼 도출된 명사 여러개를 몇 개로 줄이는 경우도 많다. 이러한 판단은 설계자가 하게 된다. 물론 이 글에서 하는 프로그래밍은 혼자하는 프로그래밍이기 때문에 모든 작업은 혼자 하게 된다. 이런 과정을 혼자서 많이 연습하다보면 나중에 돈을 버는 프로그래밍을 하게 될 때 자신에게 어떤 역할이 주어지더라도 중간이상은 능력을 보여주게 되는 자신을 발견하게 될 것이다.

다음은 명사 목록에 명확히 도출되지 않은 객체 자체를 끄집어 내는 과정이 필요하다. 지금까지는 객체는 명사 목록을 통해서 도출했고, 그 안의 필드를 설계자가 추가하거나 합쳤는데, 이제는 객체 자체를 도출해 본다. 명사 목록을 보면 스치듯이 이런 항목이 있다.

- 남자게시판, 여자게시판
- 타임라인게시판(문자 주고 받는 컨셉)

남자게시판과 여자게시판은 Board 테이블을 일반화해서 생성한다.

ManBoard, WomanBoard

테이블의 구성은 동일하다. 타임라인 게시판은 조금 다르게 구성해야 한다. 왜냐면 User 테이블을 참조하는 것이 아니라 Meeting 테이블을 참조하도록 해야 하기 때문이다.

TimeLine
======
id int auto_increase
meeting foreign_key(Meeting)
contents text
ip char
create_date datetime
hit int

Board 테이블과 거의 비슷하지만 reply_count가 없고, User 테이블 대신 Meeting 테이블을 참조한다. 그리고 댓글에 대한 테이블을 구성한다. 댓글 테이블을 Board 하나로 구성해서 self reference하도록 할 수도 있지만 왠지 복잡하다. 간단하게 따로 만들자.

ReplyManBoard
===========
id int auto_increase
mother foreign_key(ManBoard)
contents text
ip char
create_date datetime
hit int

ReplyWomanBoard
===========
id int auto_increase
mother foreign_key(WomanBoard)
contents text
ip char
create_date datetime
hit int

쉽다. Board 테이블과 거의 구조가 같지만 참조하는 대상이 각각 ManBoard와 WomanBoard이다.

명사를 통해 웹 서비스의 근간이 되는 DB 테이블을 설계했다. 이전 글에서도 썼지만, 익숙해지면 시나리오에서 바로 DB 테이블을 뽑아낼 수도 있게 된다. 익숙함에 의해 중간 과정은 머릿속으로 그냥 해버리게 되는 것이다. 멋지지 않은가!

다음은 동사와 남겨놨던 명사를 통해 메소드를 설계해 보자. 이전에 정리해 놓은 명사 목록을 다시 본다.

데이터를 만들어내는 메소드
* 데이터를 추가
서비스에 접속하다.
쓰다,
- 본문을 쓰다
- 댓글을 쓰다
- 남자가 여자게시판에 쓰다.
- 여자가 남자게시판에 쓰다.
서비스에 가입하다,
가입자 정보를 받다.
서비스에 로그인하다,
서비스에서 로그아웃하다.
성별 정보를 추가로 받다.
활동 점수를 부여하다,
데이트를 신청하다.
타임라인 게시판을 생성하다.

* 데이터를 변경
본문, 댓글을 수정하다,
활동 점수를 유지하다.
활동 점수를 소비하다,
데이트 신청을 수락하다.

* 데이터를 삭제
본문, 댓글을 삭제하다.

데이터의 값을 읽는 메소드
* 값을 읽음
글을 읽다.
- 본문을 읽다.
- 댓글을 읽다.
화면에 뿌리다.
남자게시판, 여자게시판으로 나누다.
타임라인 게시판을 공유하다.
대화를 주고받다.

* 값의 상태를 확인
(이성 게시판엔) 본문을 쓸 수 없다.
본문과 댓글을 구분하다.
구분하지않는다.
- 본문의 제목, 내용을 구분하지 않는다.
- 댓글의 제목, 내용을 구분하지 않는다.
본문, 댓글의 길이를 제한한다.
글을 쓴 시간이 오래되다,
본문, 댓글을 수정할수없다.
데이트 신청이 가능하다.
현재 데이트를 진행중이다.

이미 메소드라는 용어를 사용했다. 즉, 별일이 없는한 각각의 동사는 하나하나가 개별 함수로 구현될 가능성이 높다는 것이다. 그리고 이 글에서 사용하기로 한 Django 프레임워크는 view 모듈의 메소드 하나당 URL이 하나씩 매핑되는 구조를 가지고 있다. 이 구조를 그대로 적용해서 메소드와 개별 메소드의 구현 시나리오(알고리즘이라고 할 수도 있겠다.)를 설계하겠다. 이 글에서는 함수(function)과 메소드(method)라는 용어를 구분하지 않고 쓰겠다.

+서비스에 접속하다.
URL: /
function: ViewMainPage()
scenario:
1. static page인 main.html을 보내준다.

+본문을 쓰다
URL: /write/[man|woman]/[imrich]/
function: WriteBoard(boardname, imrich)
scenario:
1. 로그인한 사용자인지 확인한다. 로그인 하지 않았다면 에러메시지 출력후 이전 페이지로 간다.
2. 로그인한 사용자의 사용자 정보에서 남자, 여자를 읽어온다.
3. 남자가 여자 게시판에, 여자가 남자 게시판에 글을 쓰려고 시도하면 imrich 플래그를 확인한다.
4. imrich 플래그가 false라면 포인트를 확인하고 10000포인트 이하라면 에러를 출력, 10000 포인트가 넘으면 사용할것이냐고 물어보는 화면으로 이동한다.
5. 사용자가 10000 포인트를 사용한다고 했으면 /write/[man|woman]/imrich/ 라는 URL로 POST정보를 유지하여 재진입한다.
6. imrich 플래그가 True면 해당 사용자에게서 점수를 10000 포인트 뺀다.
7. boardname이 man이면 ManBoard, woman이면 WomanBoard의 인스턴스를 얻는다.
8. POST로 넘어온 필드의 내용을 verify한다. 실패하면 에러 페이지로 간다.
9. verify 통과하면 DB 인스턴스에 데이터를 입력하고 업데이트한다.
10. 사용자 정보에서 포인트 +10한다.
11. 해당 게시판의 첫 페이지로 이동한다. (/board/[man|woman]/page/1/)

+댓글을 쓰다
URL: /write/[man|woman]/번호/reply/
function: WriteBoardReply(boardname, mothernum)
scenario:
1. 로그인한 사용자인지 확인한다. 로그인 하지 않았다면 에러메시지 출력후 이전 페이지로 간다.
2. boardname이 man이면 ReplyManBoard, woman이면 ReplyWomanBoard의 인스턴스를 얻는다.
3. POST로 넘어온 필드의 내용을 verify한다. 실패하면 에러 페이지로 간다.
4. verify 통과하면 mothernum을 인덱스로 엄마글의 인스턴스를 얻어온다.
5. 엄마글의 인스턴스를 foreign_key하여 댓글 DB 인스턴스에 데이터를 입력하고 업데이트한다.
6. 사용자 정보에서 포인트 +5한다.
7. 해당 글을 보여준다. (/board/[man|woman]/num/번호/)

본문을 쓰다의 시나리오를 보면 남자가 여자게시판에 쓰다, 여자가 남자 게시판에 쓰다라는 동사가 시나리오에 녹아서 처리되어 있고, 명사 목록에서 뒤로 미뤘던 +10, +5, 10000포인트에 대한 내용 역시 시나리오에 녹아서 도출되어 있다. 동사에 대한 내용은 전부다 쓰려니 지루하고 너무 길다. 위 두 개 정도 예제만으로도 충분히 어떤식으로 작성되는지 알 수 있을 것이라 생각된다. (귀찮아서 안쓰는 것 아니다!-_- 여러분의 능력과 실력을 믿기 때문이다.)

이번 글에서 뽑아낸 자료 정도가 있으면 이제 프로그래밍이 아닌 실제적인 코딩이 가능한 수준이 된다. 코딩하는 법까지 이 글에서 쓰진 않을 것이다. 이 글을 처음 쓴 목적이 코딩을 할 줄 모르는 사람들을 위해 쓴 것이 아니라 프로젝트를 하고 싶긴 한데 어디부터 어떻게 시작해야 할지 모르는 사람들을 위해 쓴 글이기 때문이다.

나는 처음에 어떻게 생각을 하고 어떤 목적을 정하고, 그것으로부터 시나리오를 도출해서 어떤 과정을 거쳐 설계 비슷한 것까지 나오게 되는지를 썼다. 제대로 절차와 형식을 갖춘다면 꽤나 두터운 책 한권이 나올만한 분량의 이야기이다. 혼자하는 돈을 벌지 않는 프로그래밍에서 그런것까지 다 갖추면 정말 좋겠지만 그래서 재미 있다면 금상첨화! 아니라면 그냥 이렇게 대충하면 된다.

나는 이 글을 쓰면서 실제로 웹 사이트를 만들었다. 그리고 알게 모르게 그냥 저냥 운영중이다. 실제 돌고 있는 사이트는 이 글에서 쓴 내용보다 좀더 기능이 많고 복잡하지만 시작은 이 글에서 쓴 내용 그 자체이다.

사이트 주소는

http://manitto.me

이다. 이 글을 읽는 여러분들도 이렇게 하나씩 만들고 눈으로 보고 사용해보는 즐거움을 느껴보길 바란다. 이렇게 한 번이라도 완성해보는 쾌감을 알면 이 자체가 너무 재미있고 좋아서 또하게 된다. 그리고 당연히 하면 할 수록 본인의 실력과 포트폴리오는 늘게 된다. 일석이조아닌가!

실제로도 나는 이 프로젝트를 통해 내 포트폴리오에서 임베디드 분야 뿐아니라, 웹 프로그래밍 관련 포트폴리오도 추가했다. 웹으로 밥 먹고 살 정도 수준은 못되고 알바정도는 할 수 있을 것 같다.

이것으로 짧은 글 마무리 할까 한다.

다음에 좀더 재미 있는 주제로 또 글 쓸 날이 왔음 좋겠다.

===
이 글은 CC이지만 다른곳에 불펌은 하지 말아 주세요. KLDP와 raonlife에(http://raonlife.com/navilera/blog/view/58/)만 연재합니다. 다른 곳에 연재되어 있는 것은 불펌이오니 저에게 알려주세요.

댓글

나빌레라의 이미지

무플은 싫어요!
차라리 자작 리플이라도 달아야지!!!

데헷!! =3==3

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

shint의 이미지

얇은사 하이얀 고깔을 고이접어 나빌레라. 이걸 패러디한 말을 자주했어요.

그녀석 공부도 잘하고 머리도 좋아서.
제가 곧잘 따라부르고 하면 왜 내꺼 따라하냐고 난리치곤 그랬었죠.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

환상경의 이미지

2편까지 관심있게 보다가 완결되면 봐야지하고 있었는데 ㅎㅎ
퇴근후 집에서 봐야겠네요
좋은글 남겨주셔서 감사합니다.

==================================================================
정체된 일상.... 계기를 만들어야 하는데........
BLOG : http://khmirage.tistory.com/

kgcrom의 이미지

동사, 명사는 정말 좋은 방법이어요 처음부터 다시 정독해야겠습니다
자신의 노하우를 나눈다는게 쉬운게 아닌데 참 감사합니다

흘러가고있는 지금 이 시간에 충실하자.

권순선의 이미지

떡밥을 좀 던지세요. 요즘 떡밥 잘 던지는 분들 많던데 연마가 좀 필요하실듯... :-)

나빌레라의 이미지

낚시에 소질이 없어요.....ㅠㅠ

"6개월만에 개발자되기" 이런 글이나 올려 볼까요~^^

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

quake의 이미지

6개월만에 개발자 되는법 올려주세요. 그러니까 필수과목이 무엇인지... 지금 자바, 리눅스 공부하고 있습니다. C언어는 고교때 좀 배워서 진입이 그나마 쉽군요.

나빌레라의 이미지

댁이 개념을 찾고
다른 사람들이 업으로 삼고 있는 학문과 직업에 대한 존중을 갖게 된다면 써 드리지요.
하지만 왠지 그런날은 올것 같지 않습니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

shint의 이미지

의사존중은 그 사람을 대하려는 자신의 마음에서 비롯됩니다.
사람이니 그게 좋고 싫음이 있어서 그렇게 말씀 하실 수 는 있다고 봅니다.

결론은. 상대가 어떻건
자신이 하고자 하는 마음인거죠.
그냥 하고 싶으면 하는거고. 하기 싫으면 마는거고.

저분이 개념을 찾든 어떻든. 하는식에 조건이나 목적으로 대화하시게 되면.
대화는 어려울겁니다.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

나빌레라의 이미지

제가 힘들게 쓴 글에 전혀 상관 없는 사람으로 인해
하기 싫은 말을 해 가며
볼성 사납게 논쟁하고 싶지 않습니다.

저는 저사람이 개념을 찾으면 어쩌겠다란 조건단게 아니라
저 사람은 제 글을 읽을 자격이 없다라는 말을
그나마 저 사람에게 직설적으로 말하지 않은 것입니다.

KLDP의 부분이긴 해도 여기는 분명 제 개인 블로그이고
제 개인 공간입니다.

제가 애써 쓴 글을 읽을 자격이 없는 사람에게 자격을 갖추고 읽으라고 할 자격 정도는 있다고 생각됩니다만,
그정도 말하면 안되는 건가요?

안타깝게도 전 그렇게 오지랍이 넓지 않군요

님이 쓰신 댓글 제목에 저사람하고 똑같다는 말에 울컥했지만
그에 대해서는 별다른 말 하지 않겠습니다.
하지만 기분이 썩 좋지만은 않군요.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

권순선의 이미지

무슨 얘기를 하시는지 잘 모르겠네요.

익명 사용자의 이미지

무슨 말인지...

뭘 말씀하고 싶은겁니까?
애초에 정중한 대화가 아닌, 플레임성 글에 진중한 대화를 나눠야되는 마음만 있으면 된다는 겁니까?

이미 위에 쓴 사람은 대화에 진중함이란 없습니다. 그저 재미로 글을 쓰고 있다 이말입니다.

대다수 사람이 이런 반응을 왜 내는지 한번쯤 생각해보시죠.
제가 보기엔 님도 다른 사이트에서 하는 활동 보면 제대로된 대화는 어려울 것 같습니다.

익명 사용자의 이미지

넉살이 밉지만은 않다고 생각했는데 ㅎㅎ 하지만 정말 앞으로 개발자 커뮤니티에서 도움을 받고자 하신다면, 이런 도발은 자제하시지요.

inniskun의 이미지

으허허.. 이제 나빌옹 떡박 실력만 키우면... 완전체가 되시는건가요?.ㅋ

눈에 보이는 모든것은 보이지 않는 것들로 이루워져 있다.
Nobody reachs the Truth~*

shint의 이미지

떡밥이라는 표현을 쓰는데요.
중요한건 낚시니 떡밥이니가 아니겠죠.

그 사람들도 분명히 자기 생각이 있어서 적고 대화하기 위해 노력한것일 테니까요.
그냥 이렇게 즐기는척 아무것도 아닌척 장난인척 쓰는 글들을 보다보면
사실은 얼마나 가슴속에 담아두고 있는 자기 자신이 하고 싶은 말이 많은지 생각하게 됩니다.
그렇게 진심으로 사람을 대하는 경우는. 자기 친구나 가족 뿐이겠죠?

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

익명 사용자의 이미지

그런 진심을 찾아볼 여력이 없습니다.

이곳은 개인 블로그입니다.
본인이 아닌 타인의 블로그에 개인의 것 까지 헤아릴 필요는 없다고 생각합니다.

자신이 가지고있는 걸 표현하려면 잘 해야지, 두리뭉실하게 하는건 싸지르는 사람 책임이라고 생각합니다.

마지막으로 묻겠는데, 님 생각에 quake 이 사람이 대화를 하기위해 노력한다고 생각합니까?

제 생각엔 그렇게 생각한다고 하면 님도 문제가 있는겁니다.

초등학교때 슬기로운 생활과 바른생활 그리고 중고등학교때 도덕 그리고 친구와 잘 어울리면 저런식의 화법은 나올 수 없습니다.

나빌레라의 이미지

6개월만 공부하면 떡밥 실력 키워주는 학원 같은거 있음 다녀보고 싶어요~ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

ipes4579의 이미지

나빌레라님 다른 시리즈들은 재미있게 잘 읽었었습니다.
하지만 이 시리즈는 "프로그래밍하기"란 타이틀을 갖고 있는데 반해, "코드"가 없어 살짝 꺼려졌었습니다.
이제 완결이 났으니 한번 찬찬히 읽어봐야겠군요. :)

나빌레라의 이미지

아....

코딩까지 할껄 그랬나요..

그런데, 이 글이 계속 길어져서 코드까지 나오면 결국 django 강좌가 될것 같아서요...

원래 처음 계획할 때부터 딱 요기까지 쓰려고 했었거든요...^^

뭐가 될지 모르겠지만, 다음 글은 꼭 코드가 들어가는 글을 써야 겠네요..^^

감사합니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

김정환2의 이미지

저도 코등은 조금 할 줄 알지만 프로젝트를 하기엔 한참 어렵더라구요. 뭐 부터 시작해야 할지 항상 고민이었는데... 이번에 많이 배우고 갑니다. 한번 시도해 봐야겠네요^^ 고맙습니다.

나빌레라의 이미지

도움이 되셨다니 다행이네요.

이 글을 통해서 "생각"이 "설계"로 전환되는 저만의 방법을 알려드리고 싶었어요.

저보다 더 뛰어나고 능력있고 실력있으신 분들은 어떤식으로 하시는지 저도 많이 궁금하지만,

관련 정보를 찾을 수 없어서

그냥 가볍게 쓴 글이거든요.

읽어주셔서 감사합니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

Darkcircle의 이미지

공학설계입문이라고 공학도로서 가지고 있어야 할 기본 설계 소양을 기르는 과목이 있는데
컴공과 학생들이 이런 자료를 많이 볼 수 있었으면 좋겠네요 ...

코딩도 중요하겠지만 설계부터가 잘못되면 코딩은 도루묵 (...)

감명 깊게 (!) 잘 읽었습니다.

-- 설계 하나 때문에 매번 피보는 닭.

---------------------------------------------------------------
폐인이 되자 (/ㅂ/)

kws4679의 이미지

추가적으로 위와같은 설계법에 대해서 좀더 참고할수있는

서적 추천 부탁드립니다

fanratm99의 이미지

시간 가는줄 모르게 읽었네요. 대신 업무시간 좀 까먹었지만,, 많이 배우고 재밌게 읽고 갑니다.

익명 사용자의 이미지

좀 더 읽어 봐야 겠지만, 이런 업무 프로세스로 만들어 나가는게 상당히 좋아 보입니다..
정신노동의 산물인 프로그램에서 control c,control v가아닌 이런 설계나 프로세스가 인정받아야 돼는데 말이죠..
웹사이트도 상업적으로 그다지 부족해 보이지도 않는듯하구요..

jeongheumjo의 이미지

재밌게 잘 읽었습니다.

http://en.wikipedia.org/wiki/.me
그런데 .me 라는 도메인을 처음봐서 구글링해보니 몬테네그로라는 나라의 도메인인거 같아요.. 특이하네요..

짧은 글에 비해 사이트는 아주 복잡한 것 같아요. 멋집니다.

익명 사용자의 이미지

진작 읽었더라면.. 아쉽네요.
쉽게 잘 풀어 쓰셨네요

익명 사용자의 이미지

글 잘보고 갑니다.
뭔가 열정이 다시 불타 오르네요...ㅎㅎ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.