지난 포스팅에서는 pymysql 로 mysql을 제어하는법을 알아 보았다.
그런데 포스팅한대로 쿼리를 보내다 보니,
갑자기 DELETE와 INSERT명령어로 요청한 쿼리가 실제 DB에 반영이 안되는 현상이 나타났다.

아래 세 가지가 동시에 나타난다면 이 글이 매우 도움이 될 것 이다.

[현상]

1. python에서 mySQL로 쿼리를 전송하는 명령어를 실행할 때 빌드 오류가 없다.
2. 쿼리 실행 시, python 터미널 창에서는 쿼리에 대한 RESPONSE가 정상적이다.
3. 그러나 mySQL에서 확인한 최종 DB는 변함이 없다.

 

[문제의 CODE]

conn = pymysql.connect(user='user', password='pasword', host = 'host', database = 'database')
cur = conn.cursor()
cur.execute("DELETE FROM `database`,`table`")
cur.close()
conn.close()

 

[수정된 CODE]

conn = pymysql.connect(user='user', password='pasword', host = 'host', database = 'database')
cur = conn.cursor()
cur.execute("DELETE FROM `database`,`table`")
cur.close()
conn.commit()

conn.close()

[해설]

conn.commit() 한줄만 추가하면 된다.
보통 수많은 예제들이 commit 없이,
cursor와 connection만 close를 하는데, 그렇게 되면 mySQL에 반영이 되지 않는다.

혹은 connection 을 만들 때, autocommit=TRUE 옵션을 추가하는것도 또하나의 방법이다.

둘중에는 보안상 더 안전한 commit()함수를 추천한다.

CTRL+ ENTER

명령어 예시 의미
SHOW DATABASES SHOW DATABASES 현재 서버에 어떤 DB가 있는지 보기
USE USE database_name database_name의 DB를 사용하겠다.
SHOW TABLES   DB에 있는 테이블 리스트를 보여줘
SHOW TABLE STATUS   DB에 있는 테이블 상세리스트를 보여줘를 상세히 보여줘
DESCRIBE(DESC) DESCRIBE table_name table_name 테이블의 정보를 보여줘
SELECT   데이터를 가져와
SELECT FROM SELECT * FROM table_name table_name 테이블에 있는 전체 정보를 보여줘
  SELECT colum_name FROM table_name table_name 테이블에 colum_name의 colum만 보여줘
  SELECT colum_name_1, colum_name_2 FROM table_name table_name 테이블에 colum_name_1과 colum_name_2의 colum만 보여줘
SELECT FROM WHERE SELECT * FROM table_name
WHERE 조건_1
※ 예) colum_name_1>10
※ OR, AND, NOT, =, <, >, <=, >=, <>, != 등 사용가능
table_name 테이블에 조건1에 맞는 행들만 보여줘
예) colum_name_1이 10보다 큰 행들만 보여줘
  SLEECT * FROM table_name
WHERE 조건_1 AND 조건2
table_name 테이블에 조건1과 조건2를 동시에 만족하는 행등만 보여줘
SELECT FROM WHERE
BETWEEN
SELECT * FROM table_name
WHERE colum_name BETWEEN 10 AND 100
colum_name이 10 이상 100이하인 데이터
SELECT FROM WHERE
IN
SELECT * FROM table_name
WHERE colum_name
IN('value_1', 'value_2', 'value_3')
colum_name이 value_1이거나 value_2이거나 value_3인 데이터
SELECT FROM WHERE
LIKE
SELECT * FROM table_name
WHERE colum_name
LIKE 'ABC_'
※_는 1글자 대체
ABC로 시작하는 네글자가 단어가있는 모든 데이터
  SELECT * FROM table_name
WHERE colum_name
LIKE 'ABC%'
※%는 2글자 이상 대체
ABC로 시작하는 단어가있는 모든 데이터
(SUB QUERY) SELECT * FROM table_name
WHERE colum_name = ( 
SELECT coum_name FROM table_name WHERE 조건)
쿼리문 안에 또다른 쿼리문이 있는 것
※ 서브 쿼리의 결과가 둘 이상이 되면 에러 발생
ANY (SUB QUERY) WHERE colum_name > ANY (SUB QUERY) 서브쿼리의 여러개의 결과 중 한가지만 만족해도 가능
※ =ANY 는 IN 과 동일한 의미
ANY는 SOME과 동일한 의미
ALL (SUB QUERY) WHERE colum_name > ALL (SUB QUERY) 서브쿼리의 모든 결과를 모두 만족해야 함
SELECT FROM ORDER BY SELECT * FROM table_name ORDER BY colum_name (ASC) colum_name을 기준으로 오름차순 정렬
  SELECT * FROM table_name ORDER BY colum_name DESC colum_name을 기준으로 내림차순 정렬
  SELECT * FROM table_name ORDER BY colum_name_1 ASC, colum_name_2 DESC Colum_name_1을 기준으로 오름차순 정렬
Colum_name_2을 기준으로 내림차순 정렬 
SELECT FROM WHERE ORDER BY    
 DISTINCT SELECT DISTINCT colum_name
FROM table_name
colum_name의 중복된 것은 1개씩만 보여주면서 출력 
 LIMIT SELECT * FROM table_name
ORDER BY colum_name
LIMIT 10
상위의 N개만 출력
※서버의 처리량을 줄이도록함
GROUP BY
(집계함수를 같이 사용
 ex. AVG, MIN, MAX, COUNT, COUNT(DISTINCT), STDEV, VARIANCE
SELECT colum_name_1
MAX(colum_name_2)
FROM table_name
GROUP BY colum_name_1
colum_name_1 기준으로 그룹화하는데 그중에서 colum_name_2가 가장 큰 데이터만 출력한다. 
GROUP BY AS SELECT colum_name_1
AVG(colum_name_2)
AS 'Average'
FROM table_name
GROUP BY colum_name_1
colum_name_1 기준으로 그룹화하는데 그중에서 colum_name_2의 평균값을 출력한다.
평균값 데이터의 colum_name은 Average로 표기한다.

  SELECT COUNT(*)
FROM table_name
 
  SELECT AVG(colum_name)
FROM table_name
 
Having   WHERE과 비슷한 개념으로 조건 제한
집계 함수에 대해서 조건 제한하는 편리한 개념
HAVING 절은 반드시 GROUP BY 절 다음에 나와야함
  SELECT colum_name_1,
MAX(colum_name_2)
FROM table_name
GROUP BY colum_name_1
HAVING MAX (colum_name_2) > 10
 
 ROLLUP   총합 또는 중간합계가 필요할 경우 사용
GROUP BY 절과 함께 WITH ROLUP 문으로 사용 
  SELECT colum_name_1,
Name,
SUM(colum_name_2)
FROM table_name
GROUP BY colum_name_1,
Name WITH ROLLUP
묶인 그룹의 총합을 각 그룹의 마지막 행에 출력한다.
JOIN SELECT *
FROM table_name_1
JOIN table_name_2
ON table_name1.colum = table_name2.colum
여러테이블에서 가져온 레크드롤 조합하여 하나의 테이블이나 결과 집합으로 표현
ON 뒤에는 합칠 조건
  SELECT *
FROM table_name_1
JOIN table_name_2
ON table_name1.colum = table_name2.colum
JOIN table_name_3
ON table_name_1.colum = table_name_3.colum
세개의 테이블 합칠경우
명령어 의미
LENGTH() SELECT LENGTH('ABC') 문자열 길이
CONCAT() SELECT CONCAT('A', 'B', 'C') 문자열 세개를 합쳐서 저장
※ 문자열 중 하나라도 NULL이 있으면 NULL 을 반환한다.
LOCATE() SELECT LOCATE('ABC', 'ABABBCABCABC') ->7 반환 문자열처음 나타나는 위치 찾기 (1부터)
찾는 문자열이 문자열 내에 존재하지 않으면 0을 반환
LEFT() SELECT LEFT('ABCD',3) -> ABC반환 문자열의 왼쪽부터 지정한 개수만큼 문자 반환
RIGHT() SELECT RIGHT('ABCD',3) ->BCD반환  
LOWER() SELECT LOWER('ABC') -> abc  
UPPER() SELECT UPPER('abc') ->ABC  
REPLACE() SELECT REPLACE('ABCDE', 'ABC', 'AAA') -> AAADE  
TRIM() SELECT TRIM(' 문자열 양쪽모두에 있는 특정문자를 제거
BOTH : 기본설정
제거할 문자를 명시하지 않으면 자동으로 "공백"을 제거 
TRIM(LEADING) SLECT TRIM(LEADING '@' FROM '@gmail.com@')
전달받은 문자열 앞에 존재하는 특정 문자를 제거
TRIM(TRAILING) SLECT TRIM(TRAILING '@' FROM '@gmail.com@') 전달받은 문자열 뒤에 존재하는 특정 문자를 제거
FORMAT SELECT FORMAT(숫자, 소숫점자리수) 숫자타입의 데이터를 세자리마다 쉼표 형식으로 변환
#,###,###.##
※ 반환되는 데이터 형식은 문자열 타입
※ 두번째 인수는 반올림할 소수 부분의 자릿수
FLOOR   내림
CEIL   올림
ROUND   반올림
SQRT   양의 제곱근
POW POW(밑수,지수) 거듭제곱
EXP EXP(지수) e의 거듭제곱
LOG   자연로그값
SIN, COS, TAN SIN(PI()/2)  
ABS   절대값
RAND ROUND(RAND()*100,0) 0.0보다 크거나 같고 1.0보다 작은 하나의 실수를 무작위로 생성
NOW   YYYY-MM-DD HH:MM:SS또는 
YYYYMMDDHHMMSS 형태로 반환
CURDATE   YYYY-MM-DD 또는 YYYYMMDD 반환
CURTIME   HH:MM:SS 또는 HHMMSS형태로 반환
DATE, MONTH, DAY, HOUR, MINUTE, SECOND    
MONTHNAME, DAYNAME    
DAYOFWEEK, DAYOFMONTH,
DAYOFYEAR
  WEEK : 일 = 1, 토 = 7
MONTH : 0~31
YEAR : 1~366
DATE_FORMAT DATE_FORMAT(NOW(), '%D %y %a %d %m %n %j') 형식에 맞춰 날짜와 시간을 반환
명령어 예제 의미
CREATE TABLE AS SELECT CREATE TABLE new_table_name
AS SELECT * FROM table_name
table_name 과 똑같은 new_table_name을 만든다
CREATE DATABASE CREATE DATABASE database_name database_name의 새로운 DB를 만든다.
CREATE TABLE CREATE TABLE table_name(
id INT NOT NULL PRIMARY KEY,
col1 INT NULL
col2 INT NULL
col3 INT NULL
)
colum 개수/속성을 정하면서 테이블 만듬
ALTER TABLE    
ALTER TABLE ADD ALTER TABLE table_name
ADD col4 INT NULL;
colum 추가
ALTER TABLE MODIFY ALTER TABLE table_name
MODIFY col4 VARCHAR(20) NULL;
colum 수정
ALTER TABLE DROP ALTER TABLE table_name
DROP col4;
colum 삭제
INDEX    
SHOW INDEX    
CREATE INDEX    
CREATE UNIQUE INDEX    
FULLTEXT INDEX    
ALTER TABLE INDEX    
DROP INDEX    
VIEW    
CREAT VIEW CREATE VEIW view_name AS
SELECT col1, col2
FROM table;
 
ALTER VIEW ALTER VEIW view_name AS
SELECT col1, col2, col3
FROM table;
 
DROP VIEW DROP VIEW view_name  
INSERT INSERT INTO table_name
VALUE(val_1, val_2, val_3);
table_name에 행을 추가함
INSERT INTO SELECT INSERT INTO table_name_1
SELECT * FROM table_name_2
table_name_2에 있는 행들을 table_name_1에 삽입
UPDATE UPDATE table_name
SET col1=1, col2=1, col3=1
기존에 있는 값 변경
※WHERE 안쓰면 설정한 값으로 모든 행 변경한다.
UPDATE WHERE UPDATE table_name
SET col1=1, col2=1, col3=1
WHERE colum_name = 1
colum_name이 1인 행의 값을 
1, 1, 1로 바꾼다.
DELETE DELETE FROM table_name 모든 행 다 없앰
※데이터는 지워지지만 테이블 용량은 줄어들지 않음
※삭제 후 잘못 삭제한 것은 되돌릴 수 있음
DELETE WHERE DELETE FROM table_name
WHERE colum_name = 1
colum_name이 1인 행을 없앰
TRUNCATE TRUNCATE TABLE table_name 모든 행 다 없앰
※ 용량 줄어들고, 인덱스 모두삭제
※ 테이블 삭제 않고 데이터만 삭제
※ 한꺼번에 다 지워야함
※ 삭제 후 되돌릴 수 없음
DROP TABLE DROP TABLE table_name table 완전삭제
DROP DATABASE DROP DATABASE database_name database 완전삭제

 

1. MYSQL 설치

    $ pip install PyMySQL

 

2. 파이썬에서 필수 명령어들

import pymysql #mysql 라이브러리 불러오기

conn = pymysql.connect(host ="localhost", user="root", passwd="****", db="mysql")
※ conn : 연결 객체,
   host : 연결주소( local 일 경우 localhost)
   user/paswd : 가입시 입력한 아이디 비밀번호
   db : ?????

cur = conn.cursor()  # 연결 객체로부터 커서를 만듬. (한 연결에 커서는 여러개일 수 있다.)

cur.execute("...") # cur.execute로 명령어 실행 (" ") 안에 명령어 입력
cur.execute("...")
cur.execute("...")
...
cur.execute("...")

print(cur.fetchone()) # 출력해보기 cur.fetchone() : 한 줄 씩 읽음
print(cur.fetchall()) # 출력해보기 cur.fetchall() : 전체 다 읽음

cur.close() # 커서객체 닫기
conn.close() # 연결객체 닫기

 

쓰는 방법은 매우간단하다.

1. 호스트에 연결
2. 커서불러오기
3. 명령어 실행(생성/삭제/편집 ...  등)
4. 커서 닫기
5. 연결 닫기


1,2,4,5번은 모두 고정적으로 해야하는 것이고 3번이 관건이다.
결국엔 어떤 명령어를 사용해서 db를 편집해야하는가가 문제이다.
다음 포스팅에서는 3번에서 사용가능한 명령어들을 알아보겠다.

워드프레스에서 자식테마를 만들었을경우,
자식테마에 있는 CSS파일과 PHP 파일은
부모테마에 있는 파일들보다 우선순위로 홈페이지에 표현된다.

하지만, JS파일의 경우 자식테마 폴더에 JS파일이 존재하더라도 있더라도,
부모테마 폴더에 있는 JS파일을 참조하며, 자식테마 폴더에 있는 JS파일은 무시한다.

이와같은 문제가 발생하는 이유는 JS파일 참조 위치를 수정해주지 않아서다.
JS파일을 바꾸기 위해서는 JS파일을 자식테마에 새로 만드는것 뿐만아니라,
JS파일 참조 경로를 변경해야 한다.

아래와 같은 순서로 간단히 자식테마의 js파일을 홈페이지에 적용할 수 있다.

 

0. 자식폴더에서 사용할 JS파일을 자식폴더에 복사하기

우선! 자식테마 폴더에 수정된 js파일이 위치해야한다.
편의를 위해 js파일 위치는 부모테마폴더의 위치와 동일한 방식으로 만드는 것이 좋다.
-부모테마 폴더에서의 js파일 위치 : ../theme/js/
-자식테마 폴더에서의 js파일 위치 : ../theme_child/js/

1. JS파일 위치를 정의하는 PHP파일 찾기

js파일은 그냥 동일한 폴더에 있는다고 참조가 되는것이 아니다.
경로를 지정해주는 php파일이 분명히 존재할 것이다.
grep 명령어로 쉽게 검색해보자. (※ 윈도우 창에서 검색할경우 검색이 잘 되지 않더라..)

예) 만일 theme라는 부모테마폴더에서 tie-scripts.js 라는 파일을 참조하는  php파일을 찾을 경우
     ../theme# grep -rn "tie-scripts.js"

2. 자식테마에 PHP파일 복사해서 수정하기

grep 명령어로 찾은 php파일 안에 들어가면, tie-scripts.js라는 파일을 참조하는 부분이 있을 것이다.
그 부분을 자식테마의 위치로 변경하자

예) common-scripts.php 파일 안에 /js/tie-scripts.js 라고 정의되어 있다
     → common-scripts.php 파일을 theme-child에 복사한 후
        /js/tie-scripts/js 부분을 ../theme-child/js/tie-scripts.js 로 수정한다. 

 

위와같은 방법대로 진행한다면, 부모테마에 영향 없이 자식테마에서 간단히 js파일을 새로 적용할 수 있다.
※주의 : js파일을 수정하더라도 홈페이지에 반영되는 시간은 다소 걸릴 수 있다.(2~3분)

아마존 라이트세일을 통해 워드프레스로 홈페이지를 제작하게되면
우측하단에 "Bitnami" 배너(아이콘)이 자동으로 생성된다.
Bintnami 배너는 Sticky(Floating) 아이콘처럼 페이지를 스크롤 하는동안에도 항상 우측하단에 남아있어서
여간 신경쓰이는게 아니다. 

Bitnami 배너

처음에는 이 배너를 수정해서 홈페이지의 floating 버튼으로 활용할까 했지만,
floating 버튼을 지원하는 다양한 플러그인이 있기 때문에
Bitnami 배너는 일단 지우기로 했다.

지우는 방법은 홈페이지 서버의 콘솔창에서 명령어 하나만 입력하면 된다.

1. 서버 콘솔 창 진입

아마존 라이트세일(AWS) 홈화면

AWS에서 로그인을 한 첫 화면에서 진입하고자하는 서버의 콘솔 아이콘을 선택한다.
진입하면 검은 콘솔창이 뜬다.
(※콘솔창이 떴으나, 입력이 안되는경우가 있다.
   그럴경우에는 AWS에서 로그아웃 한 후 다시 로그인해서 콘솔창을 열면 된다.)

2. 명령어 입력

sudo /opt/bitnami/apps/wordpress/bnconfig --disable_banner1
sudo /opt/bitnami/ctlscript.sh restart apache

(※ 주의할점 : disable 옵션이 가능한 bnconfig 파일은 bitnami 폴더 안이 아닌 wordpress 폴더에 있다.)

두개만 입력하면 말끔히 제거된다.

 

워드프레스로 홈페이지를 만들기 위해 가장 먼저 해야하는 일은, 테마를 구입하는 것이다.
(일부 사용자의 경우 테마를 직접 제작하기도 하지만 이는 논외로 한다.)

테마를 구입한 후 그 테마를 그대로 사용하기에는 많은 아쉬움이 따른다.
주로 범용목적으로 만들어진 테마가 많을 뿐더러, 자신에게 딱 맞는 테마를 찾는다고해도 막상 사용해보면 아쉬운부분이 많다.
따라서, 테마를 수정할 줄 알아야 한다!

워드프레스 메뉴 중 '테마디자인>테마 편집기'에 들어가면, 테마를 바로바로 편집가능하지만, 
이 방법은 많은 전문가가 지양해야한다고 말한다.
왜냐하면 '테마디자인>테마 편집기'에서 바로 수정을하는것은 부모테마를 수정하는것이기 때문이다.
부모테마를 수정하게되면 이후 테마 업데이트가 발생할경우 수정했던 내용이 날라갈 수 있고, 더 나아가서 수정된 코드와 업데이트 내용이 충돌될 경우 일부 페이지가 완전히 깨져버릴수 있기 때문이다.글쓴이도 처음에는 알수없는 자신감으로 부모테마를 바로 편집했지만, 그 사실을 알게된 이후로는 자식테마를 만들어서 수정을 하고 있다.

이 포스트에서는 여러가지 자식테마 만드는 방법을 소개하고, 그 중 가장 좋은 방법을 추천한다.

1. Child Theme 플러그인 사용

가장 쉬운방법이다. Child Theme를 만드는 여러가지 플러그인이 있는데 그 중에 하나를 다운받아서
"Create a Child Theme" 를 실행하면 간단하게 테마가 생성된다. '테마디자인'-테마'에 자식테마가 생성 된 것을 확인할 수 있다.
가장 많이 사용되는 플러그인은 One-Click Child Theme, Child Theme Configurator, Child Theme Generator 등이 있다.
One-Click Child Theme는 한 책에서 메인으로 소개될 정도로 자식테마를 만드는데 많이 쓰였지만 지금은 더이상 업데이트되지않아 사용되지 않는것으로 보인다. 참고로 플러그인은 순환이 좀 빨라서, 대표적으로 쓰인 플러그인이라 하더라도 좀 지나고보면 더이상 업데이트 되지 않는 경우도 많다. 따라서, 그때그때 적절한 플러그인을 사용해야 한다.

2. FTP로 직접 수정

다운로드한 테마가 위치한 폴더안에 들어가서 직접 자식테마 파일을 만드는 방법이다.
테마가 설치된 위치는 조금씩 다를수 있으나, 보편적인 위치는 아래와 같다
위치 : /opt/사용자아이디/apps/wordpress/htdocs/wp-content/themes/
위 폴더에 들어가면 설치된 테마이름의 폴더가 있을것이다.

/opt/사용자아이디/apps/wordpress/htdocs/wp-content/themes/테마이름-child 폴더를 만든다.
   예) /opt/사용자아이디/apps/wordpress/htdocs/wp-content/themes/sahifa-child
② 만든 폴더 안에 style.css 파일을 만든다.
   예) .../sahifa-child/style.css
자식 테마에게 부모 테마 스타일을 로드하도록 지시하는 functions.php 파일을 만든다.
   예) .../sahifa-child/functions.php

../sahifa-child 폴더 내부모습

 

3. 테마에서 제공하는 방법으로 수정

거의 모든 테마에서는 자식테마를 만드는 방법을 별도로 제시하고 있다. 테마 제공사의 홈페이지에서 support 란에 'child theme' 라고 검색을 하면 상세한 내용을 받을 수 있다. 거의 대부분 2번의 FTP로 수정하는 방법을 제시한다.

 

※ 가장추천하는 방법은 3번이다. ㅎㅎ
   제대로 만들어진 테마라면 자식테마를 만드는방법에대해서 친절한 설명을 제공하고 있으므로, 꼭 테마에서 제공하는 방법대로 자식테마를 만들자!

 

[만든결과]

위 3가지 아무방법이나 하면 아래와같이 자식테마가 생성된다. 이제 생성된 자식테마를 활성화시키면 자식테마가 선택이 되고, 거기서 수정하면된다.

[테마디자인]-[테마]에 자식테마가 만들어진 모습

 

 

크롤러를 만들기 위해 필요한 BeautifulSoup 라이브러리를 설치하는 방법이다. (Window)

1. 파이썬을 설치한다.
   3.4 이상 버전을 설치해야 기본 설치 시 pip도 함께 설치된다.

2. Beautiful Soup 라이브러리 최신버전을 다운로드한다.

www.crummy.com/software/BeautifulSoup/bs4/download/

 

Index of /software/BeautifulSoup/bs4/download

 

www.crummy.com

위 링크로 들어가서 최신 버전을 다운로드한다. (필자는 4.9.3버전을 다운로드했다.)

3. 라이브러리가 설치된 위치에서 터미널을 열고 다음명령어를 실행한다.

>python setup.py install

(혹시 window 10이라서 "여기서 명령창 열기"메뉴가 없다면 blog.naver.com/sbspace/221548154180 링크로 들어가서 해결하자)
위의 명령어가 먹히지 않을 시, 

>pip install beautifulsoup4 명령어로 쉽게 설치 가능하다.

온라인 커뮤니티를 운영하기 위해서는 서버유지 비용보다

커뮤니티에서 나오는 광고수입이 더 많아야 한다. 

광고수입이 더 많으려면, 접속자 수가 많아야하는데 이는 서버유지 비용을 다시 올린다.

이러한 딜레마는 모든 서버 운영자의 공통된 고민이다.

 

이 해결책은 딱 하나! "사이트를 얼마나 효율적으로 만드느냐!!!"

서버 유지비용을 낮추면서 커뮤니티사이트의 수익을 효율적으로 올리는것은 쉬운일이 아니다.

서버 비용에 대한 근본적인 원리를 알아야 할 수 있다.

하지만, 적절한 CMS를 선택하는 것도 이것을 크게 개선 시킬 수 있다.

 

커뮤니티 사이트를 만들기 위해서는 어떤 CMS를 선택해야 할까?

 

적절한 CMS를 선정하기 위해, 국내 탑 커뮤니티 사이트들은 트래픽이 어느정도인지,

트래픽이 아주 많은 국내 커뮤니티 사이트들은 어떤 CMS를 사용하고 있는지 알아보자.

 

위해 우선 실시간 커뮤니티 순위를 보자.

 

오늘의 베스트

국내 온라인 커뮤니티의 실시간 순위는?!

todaybeststory.com

오늘의 베스트라는 사이트에서는 매달 글 수, 조회수, 반응 수, 댓글 수를 기반으로 커뮤니티 순위를 매기고 있다.

 

아래 표는 2020-09-29~2020-10-05 기간동안 투비스 지표로 본 커뮤니티 사이트 순위이다.

출처 : http://todaybeststory.com/ranking_current.html

그렇다면 이 커뮤니티 사이트들은 어떤 CMS 기반으로 제작되었을까?

 

1위. XE (제로보드)

- 사용처 : 에펨코리아, 뽐뿌, 더쿠, 해연갤, 에스엘알클럽, 오늘의 유머, 82쿡, 디시인사이드

              그 외 일베, 펨코, 개드립, 딴지, 다수 대학교 커뮤니티 등에서도 사용되고 있음.

TOP 18중 8곳이 XE(제로보드)를 기반으로 제작되었다. XE는 더이상 업데이트되지 않고 있고 서비스를 거의 종료했다시피 했지만, 대부분의 사이트가 아주 오래전에 제작되었고, 그당시에는 XE의 점유율이 60%를 넘었던것을 생각하면 전혀 이상한 수치는 아니다.

8곳 모두 현재는 자체 솔루션으로 홈페이지를 새로 개편하거나, 제로보드를 많이 변형한 형태로 사용중이기 때문에 현재 제로보드를 그대로 사용하고 있는 곳은 거의 없다고 할 수 있다.

2위. 그누보드

- 사용처 : 클리앙, 이토랜드 등

가장 많이 사용되고 있다고 기대한것과는 달리 많은 곳에서 사용중이진 않았다. 아마도 커뮤니티 사이트들이 만들어진 시기에는 XE를 가장 많이 사용하고 있었고, 사이트 제작/수정/커스터마이징이 XE보다 어렵다는 점이 처음 제작할 때 큰 장벽으로 다가왔을 것 같다. 커뮤니티를 제작한 사람들이 웹개발자이기 보다는 그 분야에 관심이 많은사람인 경우가 많기 때문에 첫 시작을 그누보드로 하기에는 부담이 큰 것 같다.

그 외. 킴스큐 등

- 인스티즈 사이트는 TOP 18 중 유일하게 킴스큐로 제작되었다고 한다.

- 기타 언급되지 않은 커뮤니티 사이트는 검색으로는 알 수 없었다. (아시는분은 댓글 부탁드립니다.)

 

하지만!!! 

- TOP 18의  대부분은 현재 자체솔루션으로 제작/수정 되었다는 사실!!!

기존에 XE나 그누보드를 사용했더라도 현재는 코드를 다 뜯어고쳐서 새롭게 개편된 경우가 대다수이다. 디자인적인 요소를 개선하기 위해 바뀐경우도 많겠지만 사용자가 많아지면서 서버에 오는 과부화를 조금이라도 줄이기 위해서 코드를 효율적으로 수정한 것으로 보인다.

 

※ 위 조사는 인터넷 및 웹 개발자 커뮤니티의 개발자 의견을 근거로 함. 실제 웹사이트의 HTML을 분석한 내용이 아니므로 사실과는 차이가 있을 수 있음.

+ Recent posts