2023. 5. 3. 22:01ㆍWEB/PHP
로그인 로직을 모두 만들어보았습니다.
이제 웹 사이트에서 흔히 볼 수 있는 게시판 기능을 만들어봅시다.
테이블 설계부터 해봅시다.
게시판에는 무엇이 필요할까요?
저는 게시판이 일기라고 생각합니다.
보통 언제,누가,무엇을 했는지 가 필요하겠죠.
하지만 일기와 게시판의 차이도 있습니다. 나 혼자 쓰는것이 아니라 모든 사람이 많이 사용하고
쓰기만 하는것이 아니라 읽는것이 주 목적이잖아요?
그래서 게시글의 식별용 고유 번호가 있어야합니다.
x번게시글 보여줘 이런식으로 작동하는겁니다.
또 하나 필요한 요소는 수정 시간입니다.
책의 개정 1판 2판의 날짜가 서로 다른것처럼 수정 시간도 기록의 필요성이 있습니다.
이제 이러한 목적을 알았으니, 테이블을 설계해봅시다.
먼저 고유 ID는 가장 편하게 숫자로 합시다.
게시글은 Public , 공개된 자료이니까 까다롭게 하지 않아도 됩니다.
숫자로 설정합니다만 하나의 조건이 있습니다.
컴퓨터는 메모리 효율을 위해 타입을 나눠서 범위의 값만을 나타냅니다.
예시를 들자면
byte라는 타입은 -128에서 127까지의 수를 표현
short라는 타입은 -32,768~32,767까지의 수를 표현할 수 있습니다.
나는 0에서 100번까지만 쓰고싶은데 굳이 만개,억개의 범위를 가질 필요는 없잖아요?
byte를 사용해서 게시글의 id를 표현한다면, 127개 까지의 게시글이 전부일겁니다.
게시글 하나 하나를 식별하는 고유 ID니까 절대 중복되서는 안되니까요. 만약 음수가 ID가 된다고 하더라도 결국 중복은 시간문제입니다.
그러면 강제로 128번 게시물을 만든다고 해봅시다.
어떻게 될까요?
byte가 표현할 수 있는 값의 범위를 넘어가서
Overflow가 생깁니다. 따라서 -128이 됩니다.
Overflow가 뭘까요?
byte는 8개의 비트로 구성되어있습니다.
비트는 각각 0,1을 표현할 수 있죠 그러므로 2의 8제곱 , 256이 되어야 하는데 왜 127일까요?
그것은 부호 비트 때문입니다. 컴퓨터에서 음수를 표현하기위해 부호 비트를 사용합니다.
컴퓨터는 마지막 왼쪽 비트를 부호비트로 사용합니다.
2진수 00000000 10진수 0 (양수의 최소값)
2진수 10000000 10진수 -128 (음수의 최소값)
00000000은 0인데,
부호 비트가 붙으니까 1000000은 -0인거 아니야? 라고 생각할수 있는데...
저는 이렇게 생각했습니다. 0은 양수의 최소값인것은 분명합니다... -0은 해석하면 -양수의 최소값 이라고 말할수 있죠
그러니 음수의 최소값이라고 생각했습니다.
다시,
오버플로우의 과정은
01111111 양수의 최소값 즉 127이고
1을 더해버리면 자리올림이 발생해서 차례대로 올라갑니다.
10000000 -128이 되버렸네요!
이런식으로 값이 초과(Over)되면
다시 최소값으로 돌아와서 무한히 반복되는겁니다.
예전 유튜브 구독자 음수 사건도 이와 같죠.
그래서 게시글같은 데이터가 많은 종류는 bigint를 사용합니다.
bigint의 범위는 –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 라고 합니다.
상상도 할 수 없는 범위죠. 지구의 모든 인구....아니 모든 생명체급정도면 비빌수 있을까요?
엄청나게 범위가 크니까 Overflow의 확률이 적어집니다.
게시판을 만들라니까 비트를 배우고 있네요...죄송합니다;;;
이제 진짜 테이블을 만들어봅시다.
bno를 bigint로 두고 auto_increment라는것을 사용하였죠.
auto_increment는 자동증가라고 생각하시면 됩니다.
게시글이 1번이면 다음 게시글은 2번이죠.
원래라면 select를 해서 마지막 bno를 불러오고 +1을 한 값을 다시 insert하는 수동 작업을 해야겠죠.
이런 단순 작업을 줄일수 있도록 DBMS 측에서 지원해주는 기능입니다.
primary key는 저번 시간에 배웠습니다.
기본키 제약조건으로 UNIQUE 속성과(고유성) Index를 생성해주죠
bno를 bigint
createdate를 date
updatedate를 date
content를 varchar(1000) not null-> 1000개의 글자제한, not null(빈 값 허용하지 않음)
으로 설정을 했습니다.
제대로 insert가 되었는지 확인하시고!
분량이 너무 많아졌으니 다음 시간에 계속합시다!
'WEB > PHP' 카테고리의 다른 글
PHP - 게시판 제작 2 - 조회 페이지 제작 (0) | 2023.05.05 |
---|---|
PHP - 코드 간결화 (0) | 2023.04.22 |
PHP - 회원가입 중복검사 (0) | 2023.04.22 |