DB를 사용한 커뮤니티 시스템 구성입니다. 좀 봐 주세요.

사랑천사의 이미지

안녕하세요?
이여송 사도요한입니다.

MySQL을 이용한 커뮤니티 시스템 구성입니다. 우선 DB 구성 부분만 좀 봐 주세요. 소형에서 부터 대형에 이르기 까지 최적화라기 보다는 범용으로 여기다 마춰도 어느정도 쓸 수 있고 저기다 마쳐도 어느정도 쓸 수 있는 시스템을 만들길 원합니다. 물론, 만들고 나면 어디에 설치 할 지에 따라 그 시스템에 맞게 튜닝을 하겠지만요.(텔넷과 웹에서 모두 접속 가능하고 연동 되어야 하는 시스템 입니다.) 마치 이건 XHOST 5.x/6.x와 같은 계념입니다. 김성대님이 개발 하신 XHOST 말입니다. 그와 비슷하게 PHP와 C를 사용하여 시스템을 구현 하려 합니다. 내용은 아래 청부 하겠습니다.

특히 DB쪽 잘 봐 주시고요. DB 디쟈인에 대해서 조언좀 부탁 드리겠습니다. 수정 가능성이 있는 부분, 필요한 부분을 보시고 어떤 식으로 수정 하면 효율적이겠다 등등... 경험 많으신 분들의 조언 바라겠습니다.

		LANET 개발 계획서 (구체적인 구성)

1. 회원 정보 체제
	1) 기본 신상정보
		(1) 성명(name varchar(20))
		(2) ID/비밀번호(id varchar(20)/password varchar(30))
		(3) 연락처(전화, 이동전화, 주소, 우편번호)
			(phone/mphone varchar(16), addr tinytext, zip char(8))
		(4) E-Mail/홈페이지 주소(email tinytext, hp tinytext)
		(5) 주민번호(특별한 경우 사용)(pin char(14))
		(6) 생년월일(birthday date)
		(7) 직업(직업/직장이나 소속정보 포함)
			(job int(2), infrom varchar(60))
		(9) 자기 소개(intro text)
	2) 시스템 사용 정보
		(1) 접속 여부(is_con int(1))
		(2) 최종 접속 종료(last_logout int(5))
		(3) 최종 접속(last_login int(5))
		(4) 현재 위치(접속시)(place int(5))
		(5) 초대 가능 여부(접속시)(invite int(1))
		(6) 터미널 쓰기 가능 여부(접속시)(write int(1))
		(7) 접속 횟수(c_login int(10))
		(8) 레벨(level int(2))
		(9) 점수(point int(5))
		(10) 사용자 환경(env tinytext)

2. 게시판 정보 체제
	1) 게시물 번호 처리 관련
		(1) 절대 번호(a_num int(7))
		(2) 상대 번호(r_num int(7))
		(3) 답변글 여부(is_re int(1))
		(4) 답변글 깊히(답변 글일 경우)(depth int(1))
		(5) 원본글 절대번호(답변글일 경우)(sa_num int(7))
	2) 글 기록 정보 관련
		(1) 제목(subject tinytext)
		(2) 내용(content longtext)
		(3) 등록자(id int(10))
		(4) 등록 시간(uptime int(11))
		(5) 등록 IP(upip varchar(32))
	3) 기타
		(1) 조회수(hit int(10))
		(2) 비밀글 여부(secret int(1))
		(3) 공지글 여부(secret int(1))

3. 게시물의 댓글 관련
	1) 댓글 번호 처리
		(1) 절대 번호(a_num int(5))
		(2) 원글 번호(r_num int(5))
	2) 댓글 기본 양식
		(1) 제목(subject tinytext)
		(2) 내용(content text)
		(3) 등록자(id int(10))
		(4) 등록 시간(uptime int(11))
		(5) 등록 IP(upip varchar(32))

4. 자료실 정보 체제
	1) 자료 레코드 처리 관련
		(1) 절대 번호(a_num int(7))
		(2) 상대 번호(r_num int(7))
	2) 자료 관련
		(1) 제목(subject tinytext)
		(2) 내용(content longtext)
		(3) 등록자(id int(10))
		(4) 등록 시간(uptime int(11))
		(5) 등록 IP(upip varchar(32))
		(6) 파일명/위치(file tinytext)
		(7) 파일 크기(filesize int(9))
	3) 기타
		(1) 조회수(hit int(5))
		(2) 다운로드 횟수(download int(5))

5. 기능
	1) 기본 기능
		(1) 게시판
		(2) 자료실
	2) 보조 기능
		(1) 대화방
		(2) 텔넷
		(3) 온라인 개임
	3) 커뮤니티 기능
		(1) 내부 전자우편
		(2) 외부 이메일
		(3) 쪽지
		(4) 동호회
		(5) 미니홈피
		(6) 메신저
	3) 기타 기능
		(1) 미디어 스트리밍
		(2) 검색엔진
		(3) 투표 기능

첨부 파일로도 넣겠습니다. 그리고 위의 회원 정보 테이블에 문제가 약간 있습니다.(회원 번호가 원래는 있어야 하는데 빼먹었습니다... 죄송...)

그럼 부탁돚 드리겠습니다. 시간 많으면 KLDP에 올려서 프로젝트로 진행 해 볼 생각도 있는데 아직은 제가 시간이 안 나네요 흐흠. 처음에는 개인 프로젝트로 시작해서 중간에 참여 하실 수 있는 분들이 있다고 해도 나쁘진 않을 것 같네요.(지금 저 상태로 보면 좀 계획이 추상적이네요 음.)

그럼... 행복하세요.
이여송 사도요한 드림.

-- 추가 --

위에 내용에서 게시판 테이블에서 공지글 여부에 대한 부분 잘못 되엇네요 윽.. 파일도 잘못 되어 있을 겁니다. secret아니고 notice 입니다 음.

그리고 날짜 처리 부분에 일분 잘못 된 것이 또 있네요. int(5)로 된 부분(날짜와 시간 컬럼에서... 어딘지는 정확히 모르겠음.) 이건 int(11)입니다.

간단히 설명 드리자면 천리안이나 그런 시스템을 구성 하려 합니다. 하이텔, 유니텔(이전의)과도 비슷하겠죠. 텔넷(또는 전화접속)을 두는 이유는 고전적이고 보안에 문제가 많긴 하지만, 그래도 필요하다는 판단에서입니다. VT를 그리워 하시는 분들도 계시고(저와 비슷한 동지들은 VT가 웹보다 편합니다.) 음...

그럼..

File attachments: 
첨부파일 크기
Plain text icon plan.txt2.28 KB
익명 사용자의 이미지

이건 확실히 삽질 입니다

ole2000의 이미지

비번은.. varchar(41)로 하세요.. mysql 5버전부터는

password사용하면 길이가 41이 늘어났습니다.

Be cool...

nike984의 이미지

Anonymous wrote:
이건 확실히 삽질 입니다

익명으로 들어와서 이딴 리플 올리거면 kldp에 그냥
들어오지 마시죠? 글올신 분은 딴에 열심히 해서 글
올린건데 이딴식으로 성의없이 리플 올리남?

익명 사용자의 이미지

예전부터 생각만 하고 구현하지 않았던 것인데요,
sql schema가 복잡하지 않고 field를 최소화 하는 구상방식을 생각해 보면
어떨까 싶습니다.

예를 들어, 전화번호 같은 경우는 "02-8xx-xxxx,032-xxxx-xxxx"로 여러개의 전화번호를 ","로 분리하고,

주소도 우편번호 주소 따로 구분하지 않고 "," 구분자로 여러 줄을 나열할 수 있도록 하지만 ("우편번호,시,군,구,면,동," 비어있으면 ",,"와 같은 식으로 둠)
field는 하나로만 해서 저장하고 등등.

그리고, 모든 정보를 통합하는 하나의 text를 E-mail 헤더식의 데이타로 관리하고, 예를 들어..

Name: hello
Address: xxx
Tel-1: xx-xxx-xxxx
Tel-2: xx-xxx-xxxx
Job: JJJJ

body text

텍스트의 변경 이력을 위키식으로 남기고.., 서치나 정렬에 필요한 field에 대해서만 따로 저장하고...

정리하면, 각 항목에 대한 고유번호 field(key) 한개, main body (value) 한개, 서치 혹은 정렬에 필요한 최소한의 field(5개 미만?), 따로 저장하고, 대부분의 다른 field는 RFC 822식 혹은 더 간략한 방식으로 main body field에 저장하는 것입니다. 서치나 정렬에 필요한 모든 필드값은 main body에 저장되어있고요, 필요에 따라서 서치/정렬에 필요한 필드를 추가하거나 삭제하기 쉬운 구조가 됩니다.

사랑천사의 이미지

그런 식으로 한 필드에 묶고 검색등이 필요한 필드에 한해서만 매인에다 넣는 방식을 쓰면 확장성이 늘어나겠군요. 그렇긴 한대... ID, 이름, 회원번호 등은 인덱싱이나 검색에서 가장 중요한 부분을 차지 하는 것이라 생각 됩니다.(제 생각 대로라면 말이죠.) 아무튼 좀 더 지켜 보면서 많은 부분 여러분들의 의견을 보고 이것 저것 생각해서 훌륭한 시스템을 한번 만들어 보고 싶습니다. 제 생각도 있지만 어떻게들 생각 하시는지를 알고 싶기도 하고요...

아 그리고, 저도 이게 '삽질'이라는 것 쯤은 알고 있습니다. 하다 보면 상당한 삽질이 될것이라 충분히 예상 하고 있습니다. 특히, 텔넷과 웹을 연동 시키는 대 까진 어찌 어찌 하지만 여기에 메신저 시스템이나 스트리밍 시스템을 일부 가미 시킨다면 이것 또한 상당한 문제성이 잇을 것이라 예상 됩니다. 상당한 삽질이 될 것 같습니다. 가면 갈 수록. 그리고 텔넷에서의 입출력 부분도 따져 봐야 하고요. 지금 현재는 DB 디쟈인에 주력 해야 할 듯 합니다.

가능하다면 이 글줄기를 통해서 계속 여러분과 의견 교환이 되면 좋겠습니다. 개인적으로 여기 본받을 만한 생각을 가지신 분들이 많아 보이기도 하고... 어느정도 체제가 잡히고 제가 시간이 나면 KLDP에 프로젝트를 마련하던, 혹은 현재 제 서버에 공간을 마련하던 해서 참여 하실 분들을 찾아 함께 하고 싶습니다 음...

그럼 모두 행복하세요. DB 디쟈인에 대해 조언 해 주신 분들께 감사 드리고요. 좀 더 생각 해서 2차 DB 계획서를 한번 올려 보도록 하겠습니다.

이여송 사도요한 드림.

사람천사

7339989b62a014c4ce6e31b3540bc7b5f06455024f22753f6235c935e8e5의 이미지

ole2000 wrote:
비번은.. varchar(41)로 하세요.. mysql 5버전부터는

password사용하면 길이가 41이 늘어났습니다.


SHA1 (40bytes)나 MD5 (32bytes)를 쓰는게 나을 것 같네요.
ydhoney의 이미지

Anonymous wrote:
이건 확실히 삽질 입니다

너는 손으로 땅 파세요.
정태영의 이미지

ysnglee2000 wrote:
그리고 날짜 처리 부분에 일분 잘못 된 것이 또 있네요. int(5)로 된 부분(날짜와 시간 컬럼에서... 어딘지는 정확히 모르겠음.) 이건 int(11)입니다.

예전 z모 보드 사이트에서... 잘못된 얘기를 해서 많은 분들이 오해하시는 것 중 하나라고 생각하는데... int(5) 와 int(11) 은 zerofill 을 하지 않는 이상은 사용상에 차이가 없습니다...

자료형에서 다룰 수 있는 최대값 관련해서는 tinyint, smallint, bigint 등 자료형마다 다른 것이고 int(5) 와 int(9) 은 (zerofill 을 했을 경우) 00001 과 000000002 처럼 표시되는 길이가 다를 뿐입니다

int(5) 보다는 smallint 정도로 쓰는 습관을 :D

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

사랑천사의 이미지

phpMyAdmin 같은데서 쿼리를 짜면 왜 int(5) 이런 식으로 지가 멋대로 삽입을 해 주나요? 그건 좀 의문이네요.

그리고 손으로 땅 파 봤는데(15년 넘은 기억.) 꾀 걸리던데요? 곤가락 미어 집니다. (푸하하하하!!!)

저도 Zerofill에 대한 글을 보긴 했는데(그게 KLDP에서 본 건지 아닌진 기억이 잘 안 납니다만) 그것 때문에 논란이 많았던 것 같습니다... 어떤 분이 Zerofill 이야기를 꺼내니 어떤 분은 당연히 그런거 삼척동자도 안다시는 분이 계신 반면 그런게 아니라고 말씀 하시는 분들도 다수 인 것 같았습니다. 그거 보면서 어떻게 생각 하는것이 옳고 어떻게 아는 것이 옳은지 머리 싸매고 고민좀 해 보던지 메뉴얼 다시 보던지 해야 겠다는 생각 했습니다. 글세요. 지금 여기서도 갈라지지나 않을 지...

그리고 비밀번호는 MD5나 자체적인 암호화 함수를 쓸 생각입니다.(물론... 좀 문제가 잇어 보입니다만.. 아직 자체적인 암호화 함수는...) MySQL의 passwd나 old_passwd 같은... 함수는 안 쓸 계획입니다. DB 쿼리나 처리량을 늘리느니 차라리 암호화 처리를 단순히 내부 함수로 하는게 옳은 방법이라는 생각이 들어서 입니다. 쿼리의 양이 늘어 나면 서버에 무리밖에 더 되겠냐는 생각에서 암호화 함수의 개발을 생각 해 봤었고 그게 어렵다면 MD5를 쓰는게 현명한 것 같습니다. 역시 많은 분들 조언 감사 드립니다.

그리고 위의 주소 같은 경우...
tinytext 정도로 해서...

우편번호(-없음):도시:구군면동:상세 주소
이런 식으로 구성 하는게 좋을 것 같기도 합니다.(위에 올려 주신 글을 바탕으로 생각 해 봤습니다.)
아니면... ID필드에 특수문자를 사용 불가능 하게 하고(영문/한글/숫자만 사용 가능) 아래와 같이 할 수도 잇겠다는 생각을 했습니다.

ID:회원번호:이름:사회보장번호(주민등록번호):사용자환경정보

이 정도로 하고 별도의 필드에

형식을 text 정도로 해서

Address1: 서울시
Address2: xxx구
Address3: xxx동
Address4: xxx번지
ZipCode: xxxxxx
Home-Phone: 000-0000-0000
Move-Phone: 000-0000-0000
E-Mail: xxx@xxx.net
HP-Addr: xxx.yyy.com

<자기소개글>

이런 식으로 함이 어떨까 싶습니다. 생각 해 보니 이것도 꾀 좋은 방법 같더군요. 검색에 필요한 기초 정보만 제외하고 기타 정보 필드를 저런 식으로 처리 한다는 것은 불필요한 쿼리 처리 등을 주리고 속도 향상에 도움이 꾀 될 듯 싶군요. 근대... 만약 위 정보들을 파싱 하는 경우 파서를 잘못 만들면 좀 골때리고 역효과가 날 지도 모르겠다는 생각도 듭니다.

아무튼...

그럼 도 뵙겠습니다. 저 부분도 좀 봐 주시고요.. 어떨지.. 음.

그럼...
이여송 사도요한 드림.

-- 추가 --
아 참... 저기 회원 정보 필드에 대한 부분은 /etc/passwd 파일의 형식을 좀 빌려 봤습니다. 쓸만해 보이네요 음... 저렇게 표시 하는 방법 음... 아니면 컬럼을 아예 하나만 만들어서 그 않에 저런 식으로 죄다 넣어도 문제는 없으 듯 싶습니다. 그리고 검색이 따로 필요 없는 정보는 파일에 저장 하는 것도 나쁘지 않아 보이네요 음.

사람천사

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.