2014/08/11 - [DB/MSSQL] - MS-SQL 시퀀스 identity 생성 및 초기화하기
2014/08/11 - [DB/Oracle] - 오라클(Oracle) sequence 생성, 등록, 최종 시퀀스값 조회하기
1. MySQL 시퀀스 생성하기
CREATE TABLE test_board( seq INT NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(20) NOT NULL ); INSERT INTO test_board(title) VALUES('hello'); INSERT INTO test_board(title) VALUES('hello2'); INSERT INTO test_board(title) VALUES('hello3');
위와같이 실행후 SELECT문 실행
확인결과 title 컬럼에만 데이터를 insert 하였는데 seq 컬럼은 자동적으로 값이 증가 하여
insert 되는것을 확인 할 수 있었다.
위와같이 자동으로 컬럼의 숫자값을 일정하게 증가하고 싶다면 auto_increment 를 시퀀스로 사용할 컬럼에 지정을 해주면 된다.
그럼 이제 모든 데이터를 지우고 다시 같은 insert 쿼리를 동작 후 똑같이 조회를 해보도록 하자
delete from test_board; INSERT INTO test_board(title) VALUES('hello'); INSERT INTO test_board(title) VALUES('hello2'); INSERT INTO test_board(title) VALUES('hello3');
데이터를 지우고 다시 같은 내용의 insert 구문을 넣어주었다
다시한번 데이터 조회를 해보도록 하자
위와 같이 seq가 지워진 시퀀스 값에 이어서 자동 증가하는 현상이 발생하였다.
물론 중복이 되지 않으므로 상관은 없으나 모든 데이터를 삭제 후 시퀀스값을 초기화 하길 원할때가
있으므로 시퀀스를 초기화 해주기로 해보자
2. MySQL 시퀀스 초기화
시퀀스 초기화 하고자 할 경우는 하단의 명령어를 주면 간단하게 시퀀스값이 초기화가 된다.
alter table test_board auto_increment=1;
위와같이 alter table 후 test_board(시퀀스컬럼을 초기화 하고자 하는 테이블명) 을 지정 후 auto_increment=1(자동증가값 update를 해준다)
그럼 초기화가 정상적으로 되는지 임의의 시나리오를 작성하도록 하자
1) test_board의 데이터 모두 delete
2) 시퀀스 초기화 작업(alter table xxx auto_increment=x)
3) 다시한번 insert 쿼리
4) select 구문을 통화 데이터 확인
위와같이 시나리오를 실행한 결과 다음과 같이 시퀀스 컬럼이 초기화 된 후,
자동증가하여 컬럼에 추가되는것을 확인 할 수 있었다.
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
MySQL LIMIT를 사용하여 페이징쿼리를 동작시켜보자 (0) | 2014.08.15 |
---|---|
MySQL SELECT 쿼리로 한꺼번에 다른 테이블에 INSERT 하기 (INSERT ... SELECT ... FROM ...) (0) | 2014.08.12 |
MySQL 인코딩 UTF-8 설정하기 [한글깨짐문제 해결] (7) | 2014.08.12 |
MySQL 대소문자 구분 안하기 - lower_case_table_names 변경 (7) | 2014.07.10 |
MySQL GROUP CONCAT 이용하여 쿼리목록을 컬럼 하나로 보여주기 (세로를 가로로) (0) | 2014.07.09 |
본인은 CentOS 7 기준으로 설명 해보도록 하겠다
파일다운로드
> http://www.mongodb.org/downloads
위 URL 접속후 본인의 서버 환경에 맞추어 다운로드를 받도록 한다.
본인의 가상서버의 환경은 CetnOS7 (64bit) 이므로 Linux 64-bit를 받음
위와같이 페이지 전환이 되면서 다운로드 시작이 될 것이다.
(오늘기준 다운로드 버전 : mongodb-linux-x86_64-2.6.3.tgz)
다운로드 완료하였다면 실서버에 ftp 툴을 이용하여 UPLOAD
(본인은 /usr/local/ 디렉토리에 업로드함)
업로드 하였다면 shell에서 다음과 같이 작업 해보도록 하자
압축해제
[root@localhost ~]# cd /usr/local/ [root@localhost local]# tar -zxvf mongodb-linux-x86_64-2.6.3.tgz
디렉토리명 변경
[root@localhost local]# mv mongodb-linux-x86_64-2.6.3 mongo
서브디렉토리 생성
[root@localhost local]# cd mongo/ [root@localhost mongo]# mkdir data [root@localhost mongo]# mkdir config [root@localhost mongo]# mkdir log
config 파일 생성
[root@localhost mongo]# vi config/mongodb.conf
mongodb.conf 내용작성
dbpath=/usr/local/mongo logpath=/usr/local/mongo/mongo.log logappend=true port=7070 verbose=true fork=true rest=true
몽고DB 데몬실행
[root@localhost mongo]# /usr/local/mongo/bin/mongod --config config/mongodb.conf 2014-08-07T09:39:22.849+0900 ** WARNING: --rest is specified without --httpinterface, 2014-08-07T09:39:22.849+0900 ** enabling http interface about to fork child process, waiting until server is ready for connections. forked process: 3152 child process started successfully, parent exiting [root@localhost mongo]#
테스트 접속
[root@localhost mongo]# /usr/local/mongo/bin/mongod --config config/mongodb.conf 2014-08-07T09:39:22.849+0900 ** WARNING: --rest is specified without --httpinter face, 2014-08-07T09:39:22.849+0900 ** enabling http interface about to fork child process, waiting until server is ready for connections. forked process: 3152 child process started successfully, parent exiting [root@localhost mongo]# /usr/local/mongo/bin/mongo localhost:7070 MongoDB shell version: 2.6.3 connecting to: localhost:7070/test Welcome to the MongoDB shell. For interactive help, type "help". For more comprehensive documentation, see http://docs.mongodb.org/ Questions? Try the support group http://groups.google.com/group/mongodb-user Server has startup warnings: 2014-08-07T09:39:22.849+0900 ** WARNING: --rest is specified without --httpinter face, 2014-08-07T09:39:22.849+0900 ** enabling http interface 2014-08-07T09:39:22.856+0900 [initandlisten] 2014-08-07T09:39:22.856+0900 [initandlisten] ** WARNING: Readahead for /usr/loca l/mongo is set to 4096KB 2014-08-07T09:39:22.856+0900 [initandlisten] ** We suggest setting it t o 256KB (512 sectors) or less 2014-08-07T09:39:22.856+0900 [initandlisten] ** http://dochub.mongodb.o rg/core/readahead >
위와같이 접근이 정상적으로 된다면 설치 및 접속 성공!!
※ 위 과정은 테스트 형식으로 몽고DB 설치 + 접속을 위해서 간단하게 설치해본것이다.
아마 제대로 사용하고자 한다면 config 파일에 대한 정보를 추가적으로 알아봐야 할것이다.
스마트 에디터에 이어 다음에디터 연동을 하도록 하겠음
다음에디터 역시 웹접근성을 위해서 꾸준히 버전업 중인거 같다...
1. 연동할 에디터를 다운받도록 하자
다음에디터는 github에서 별도로 repository를 생성하여 운영하는중이다.
다음에디터 다운로드 URL : https://github.com/daumcorp/DaumEditor
하단 순서대로 작업을 하도록 하자
※ 링크 URL 자체로 받으면 MASTER ZIP 파일이 받아지는데 위와 같은 방식으로 하면
모든 버전을 다운받을 수 있더라...
DaumEditor-gh-pages.zip 파일이 다운로드 받았다.
다운 ZIP 파일을 압축해제 하면 DaumEditor-gh-pages\download\내에 버전별 압축파일이 존재한다.
현재 날짜 기준으로 가장최신은 daumeditor-7.4.22.zip 이므로 해당 버전으로 진행 하도록 하겠음.
위 압축파일을 한번 더 해제하여 압축해제 된 폴더 및 파일들을 모두 신규 프로젝트에 include 해주도록 하자
구조는 다음과 같다.
editor.html을 호출을 하더라도 샘플 화면을 확인이 가능하다.
스마트에디터와 동일하게 게시판 글쓰기 화면에 에디터를 적용한다 가정하고 jsp 페이지를 만들어 보도록 하겠음.
본인은 write.jsp로 파일생성!
변경된 전체 폴더 구조
1차적으로 write.jsp에 기본 태그를 적용해보도록 하자
<form name="tx_editor_form" id="tx_editor_form" action="/insert.jsp" method="post" accept-charset="utf-8"> <table width="100%"> <tr> <td>제목</td> <td><input type="text" id="title" name="title" /></td> </tr> <tr> <td>내용</td> <td id="editorTd"></td> </tr> <tr> <td colspan="2"> <input type="button" id="save" value="저장"/> <input type="button" value="취소"/> </td> </tr> </table> </form>
뭐전문적으로 화면을 구성할것이 아니라 대충 table 태그로 구조 뚝딱뚝딱
구성은 90% 이상 스마트 에디터랑 비슷하지만 내부 구조가 틀리므로 -_- 그냥 textarea태그를
없앴음
그리고는 별도의 템플릿 html 페이지를 daumeditor 디렉토리내에 생성(editor_template.html)
하였다.
코드는 다음과 같다. /daumeditor/ << 로 검색하여 본인의 경로에 맞추어서 변경하시길..
- editor_template.html
<div class="body"> <!-- 에디터 시작 --> <!-- @decsription 등록하기 위한 Form으로 상황에 맞게 수정하여 사용한다. Form 이름은 에디터를 생성할 때 설정값으로 설정한다. --> <!-- 에디터 컨테이너 시작 --> <div id="tx_trex_container" class="tx-editor-container"> <!-- 사이드바 --> <div id="tx_sidebar" class="tx-sidebar"> <div class="tx-sidebar-boundary"> <!-- 사이드바 / 첨부 --> <ul class="tx-bar tx-bar-left tx-nav-attach"> <!-- 이미지 첨부 버튼 시작 --> <!-- @decsription <li></li> 단위로 위치를 이동할 수 있다. --> <li class="tx-list"> <div unselectable="on" id="tx_image" class="tx-image tx-btn-trans"> <a href="javascript:;" title="사진" class="tx-text">사진</a> </div> </li> <!-- 이미지 첨부 버튼 끝 --> <li class="tx-list"> <div unselectable="on" id="tx_file" class="tx-file tx-btn-trans"> <a href="javascript:;" title="파일" class="tx-text">파일</a> </div> </li> <li class="tx-list"> <div unselectable="on" id="tx_media" class="tx-media tx-btn-trans"> <a href="javascript:;" title="외부컨텐츠" class="tx-text">외부컨텐츠</a> </div> </li> <li class="tx-list tx-list-extra"> <div unselectable="on" class="tx-btn-nlrbg tx-extra"> <a href="javascript:;" class="tx-icon" title="버튼 더보기">버튼 더보기</a> </div> <ul class="tx-extra-menu tx-menu" style="left:-48px;" unselectable="on"> <!-- @decsription 일부 버튼들을 빼서 레이어로 숨기는 기능을 원할 경우 이 곳으로 이동시킬 수 있다. --> </ul> </li> </ul> <!-- 사이드바 / 우측영역 --> <ul class="tx-bar tx-bar-right"> <li class="tx-list"> <div unselectable="on" class="tx-btn-lrbg tx-fullscreen" id="tx_fullscreen"> <a href="javascript:;" class="tx-icon" title="넓게쓰기 (Ctrl+M)">넓게쓰기</a> </div> </li> </ul> <ul class="tx-bar tx-bar-right tx-nav-opt"> <li class="tx-list"> <div unselectable="on" class="tx-switchtoggle" id="tx_switchertoggle"> <a href="javascript:;" title="에디터 타입">에디터</a> </div> </li> </ul> </div> </div> <!-- 툴바 - 기본 시작 --> <!-- @decsription 툴바 버튼의 그룹핑의 변경이 필요할 때는 위치(왼쪽, 가운데, 오른쪽) 에 따라 <li> 아래의 <div>의 클래스명을 변경하면 된다. tx-btn-lbg: 왼쪽, tx-btn-bg: 가운데, tx-btn-rbg: 오른쪽, tx-btn-lrbg: 독립적인 그룹 드롭다운 버튼의 크기를 변경하고자 할 경우에는 넓이에 따라 <li> 아래의 <div>의 클래스명을 변경하면 된다. tx-slt-70bg, tx-slt-59bg, tx-slt-42bg, tx-btn-43lrbg, tx-btn-52lrbg, tx-btn-57lrbg, tx-btn-71lrbg tx-btn-48lbg, tx-btn-48rbg, tx-btn-30lrbg, tx-btn-46lrbg, tx-btn-67lrbg, tx-btn-49lbg, tx-btn-58bg, tx-btn-46bg, tx-btn-49rbg --> <div id="tx_toolbar_basic" class="tx-toolbar tx-toolbar-basic"><div class="tx-toolbar-boundary"> <ul class="tx-bar tx-bar-left"> <li class="tx-list"> <div id="tx_fontfamily" unselectable="on" class="tx-slt-70bg tx-fontfamily"> <a href="javascript:;" title="글꼴">굴림</a> </div> <div id="tx_fontfamily_menu" class="tx-fontfamily-menu tx-menu" unselectable="on"></div> </li> </ul> <ul class="tx-bar tx-bar-left"> <li class="tx-list"> <div unselectable="on" class="tx-slt-42bg tx-fontsize" id="tx_fontsize"> <a href="javascript:;" title="글자크기">9pt</a> </div> <div id="tx_fontsize_menu" class="tx-fontsize-menu tx-menu" unselectable="on"></div> </li> </ul> <ul class="tx-bar tx-bar-left tx-group-font"> <li class="tx-list"> <div unselectable="on" class=" tx-btn-lbg tx-bold" id="tx_bold"> <a href="javascript:;" class="tx-icon" title="굵게 (Ctrl+B)">굵게</a> </div> </li> <li class="tx-list"> <div unselectable="on" class=" tx-btn-bg tx-underline" id="tx_underline"> <a href="javascript:;" class="tx-icon" title="밑줄 (Ctrl+U)">밑줄</a> </div> </li> <li class="tx-list"> <div unselectable="on" class=" tx-btn-bg tx-italic" id="tx_italic"> <a href="javascript:;" class="tx-icon" title="기울임 (Ctrl+I)">기울임</a> </div> </li> <li class="tx-list"> <div unselectable="on" class=" tx-btn-bg tx-strike" id="tx_strike"> <a href="javascript:;" class="tx-icon" title="취소선 (Ctrl+D)">취소선</a> </div> </li> <li class="tx-list"> <div unselectable="on" class=" tx-slt-tbg tx-forecolor" id="tx_forecolor"> <a href="javascript:;" class="tx-icon" title="글자색">글자색</a> <a href="javascript:;" class="tx-arrow" title="글자색 선택">글자색 선택</a> </div> <div id="tx_forecolor_menu" class="tx-menu tx-forecolor-menu tx-colorpallete" unselectable="on"></div> </li> <li class="tx-list"> <div unselectable="on" class=" tx-slt-brbg tx-backcolor" id="tx_backcolor"> <a href="javascript:;" class="tx-icon" title="글자 배경색">글자 배경색</a> <a href="javascript:;" class="tx-arrow" title="글자 배경색 선택">글자 배경색 선택</a> </div> <div id="tx_backcolor_menu" class="tx-menu tx-backcolor-menu tx-colorpallete" unselectable="on"></div> </li> </ul> <ul class="tx-bar tx-bar-left tx-group-align"> <li class="tx-list"> <div unselectable="on" class=" tx-btn-lbg tx-alignleft" id="tx_alignleft"> <a href="javascript:;" class="tx-icon" title="왼쪽정렬 (Ctrl+,)">왼쪽정렬</a> </div> </li> <li class="tx-list"> <div unselectable="on" class=" tx-btn-bg tx-aligncenter" id="tx_aligncenter"> <a href="javascript:;" class="tx-icon" title="가운데정렬 (Ctrl+.)">가운데정렬</a> </div> </li> <li class="tx-list"> <div unselectable="on" class=" tx-btn-bg tx-alignright" id="tx_alignright"> <a href="javascript:;" class="tx-icon" title="오른쪽정렬 (Ctrl+/)">오른쪽정렬</a> </div> </li> <li class="tx-list"> <div unselectable="on" class=" tx-btn-rbg tx-alignfull" id="tx_alignfull"> <a href="javascript:;" class="tx-icon" title="양쪽정렬">양쪽정렬</a> </div> </li> </ul> <ul class="tx-bar tx-bar-left tx-group-tab"> <li class="tx-list"> <div unselectable="on" class=" tx-btn-lbg tx-indent" id="tx_indent"> <a href="javascript:;" title="들여쓰기 (Tab)" class="tx-icon">들여쓰기</a> </div> </li> <li class="tx-list"> <div unselectable="on" class=" tx-btn-rbg tx-outdent" id="tx_outdent"> <a href="javascript:;" title="내어쓰기 (Shift+Tab)" class="tx-icon">내어쓰기</a> </div> </li> </ul> <ul class="tx-bar tx-bar-left tx-group-list"> <li class="tx-list"> <div unselectable="on" class="tx-slt-31lbg tx-lineheight" id="tx_lineheight"> <a href="javascript:;" class="tx-icon" title="줄간격">줄간격</a> <a href="javascript:;" class="tx-arrow" title="줄간격">줄간격 선택</a> </div> <div id="tx_lineheight_menu" class="tx-lineheight-menu tx-menu" unselectable="on"></div> </li> <li class="tx-list"> <div unselectable="on" class="tx-slt-31rbg tx-styledlist" id="tx_styledlist"> <a href="javascript:;" class="tx-icon" title="리스트">리스트</a> <a href="javascript:;" class="tx-arrow" title="리스트">리스트 선택</a> </div> <div id="tx_styledlist_menu" class="tx-styledlist-menu tx-menu" unselectable="on"></div> </li> </ul> <ul class="tx-bar tx-bar-left tx-group-etc"> <li class="tx-list"> <div unselectable="on" class=" tx-btn-lbg tx-emoticon" id="tx_emoticon"> <a href="javascript:;" class="tx-icon" title="이모티콘">이모티콘</a> </div> <div id="tx_emoticon_menu" class="tx-emoticon-menu tx-menu" unselectable="on"></div> </li> <li class="tx-list"> <div unselectable="on" class=" tx-btn-bg tx-link" id="tx_link"> <a href="javascript:;" class="tx-icon" title="링크 (Ctrl+K)">링크</a> </div> <div id="tx_link_menu" class="tx-link-menu tx-menu"></div> </li> <li class="tx-list"> <div unselectable="on" class=" tx-btn-bg tx-specialchar" id="tx_specialchar"> <a href="javascript:;" class="tx-icon" title="특수문자">특수문자</a> </div> <div id="tx_specialchar_menu" class="tx-specialchar-menu tx-menu"></div> </li> <li class="tx-list"> <div unselectable="on" class=" tx-btn-bg tx-table" id="tx_table"> <a href="javascript:;" class="tx-icon" title="표만들기">표만들기</a> </div> <div id="tx_table_menu" class="tx-table-menu tx-menu" unselectable="on"> <div class="tx-menu-inner"> <div class="tx-menu-preview"></div> <div class="tx-menu-rowcol"></div> <div class="tx-menu-deco"></div> <div class="tx-menu-enter"></div> </div> </div> </li> <li class="tx-list"> <div unselectable="on" class=" tx-btn-rbg tx-horizontalrule" id="tx_horizontalrule"> <a href="javascript:;" class="tx-icon" title="구분선">구분선</a> </div> <div id="tx_horizontalrule_menu" class="tx-horizontalrule-menu tx-menu" unselectable="on"></div> </li> </ul> <ul class="tx-bar tx-bar-left"> <li class="tx-list"> <div unselectable="on" class=" tx-btn-lbg tx-richtextbox" id="tx_richtextbox"> <a href="javascript:;" class="tx-icon" title="글상자">글상자</a> </div> <div id="tx_richtextbox_menu" class="tx-richtextbox-menu tx-menu"> <div class="tx-menu-header"> <div class="tx-menu-preview-area"> <div class="tx-menu-preview"></div> </div> <div class="tx-menu-switch"> <div class="tx-menu-simple tx-selected"><a><span>간단 선택</span></a></div> <div class="tx-menu-advanced"><a><span>직접 선택</span></a></div> </div> </div> <div class="tx-menu-inner"> </div> <div class="tx-menu-footer"> <img class="tx-menu-confirm" src="/daumeditor/images/icon/editor/btn_confirm.gif?rv=1.0.1" alt=""/> <img class="tx-menu-cancel" hspace="3" src="/daumeditor/images/icon/editor/btn_cancel.gif?rv=1.0.1" alt=""/> </div> </div> </li> <li class="tx-list"> <div unselectable="on" class=" tx-btn-bg tx-quote" id="tx_quote"> <a href="javascript:;" class="tx-icon" title="인용구 (Ctrl+Q)">인용구</a> </div> <div id="tx_quote_menu" class="tx-quote-menu tx-menu" unselectable="on"></div> </li> <li class="tx-list"> <div unselectable="on" class=" tx-btn-bg tx-background" id="tx_background"> <a href="javascript:;" class="tx-icon" title="배경색">배경색</a> </div> <div id="tx_background_menu" class="tx-menu tx-background-menu tx-colorpallete" unselectable="on"></div> </li> <li class="tx-list"> <div unselectable="on" class=" tx-btn-rbg tx-dictionary" id="tx_dictionary"> <a href="javascript:;" class="tx-icon" title="사전">사전</a> </div> </li> </ul> <ul class="tx-bar tx-bar-left tx-group-undo"> <li class="tx-list"> <div unselectable="on" class=" tx-btn-lbg tx-undo" id="tx_undo"> <a href="javascript:;" class="tx-icon" title="실행취소 (Ctrl+Z)">실행취소</a> </div> </li> <li class="tx-list"> <div unselectable="on" class=" tx-btn-rbg tx-redo" id="tx_redo"> <a href="javascript:;" class="tx-icon" title="다시실행 (Ctrl+Y)">다시실행</a> </div> </li> </ul> <ul class="tx-bar tx-bar-right"> <li class="tx-list"> <div unselectable="on" class="tx-btn-nlrbg tx-advanced" id="tx_advanced"> <a href="javascript:;" class="tx-icon" title="툴바 더보기">툴바 더보기</a> </div> </li> </ul> </div></div> <!-- 툴바 - 기본 끝 --> <!-- 툴바 - 더보기 시작 --> <div id="tx_toolbar_advanced" class="tx-toolbar tx-toolbar-advanced"><div class="tx-toolbar-boundary"> <ul class="tx-bar tx-bar-left"> <li class="tx-list"> <div class="tx-tableedit-title"></div> </li> </ul> <ul class="tx-bar tx-bar-left tx-group-align"> <li class="tx-list"> <div unselectable="on" class="tx-btn-lbg tx-mergecells" id="tx_mergecells"> <a href="javascript:;" class="tx-icon2" title="병합">병합</a> </div> <div id="tx_mergecells_menu" class="tx-mergecells-menu tx-menu" unselectable="on"></div> </li> <li class="tx-list"> <div unselectable="on" class="tx-btn-bg tx-insertcells" id="tx_insertcells"> <a href="javascript:;" class="tx-icon2" title="삽입">삽입</a> </div> <div id="tx_insertcells_menu" class="tx-insertcells-menu tx-menu" unselectable="on"></div> </li> <li class="tx-list"> <div unselectable="on" class="tx-btn-rbg tx-deletecells" id="tx_deletecells"> <a href="javascript:;" class="tx-icon2" title="삭제">삭제</a> </div> <div id="tx_deletecells_menu" class="tx-deletecells-menu tx-menu" unselectable="on"></div> </li> </ul> <ul class="tx-bar tx-bar-left tx-group-align"> <li class="tx-list"> <div id="tx_cellslinepreview" unselectable="on" class="tx-slt-70lbg tx-cellslinepreview"> <a href="javascript:;" title="선 미리보기"></a> </div> <div id="tx_cellslinepreview_menu" class="tx-cellslinepreview-menu tx-menu" unselectable="on"></div> </li> <li class="tx-list"> <div id="tx_cellslinecolor" unselectable="on" class="tx-slt-tbg tx-cellslinecolor"> <a href="javascript:;" class="tx-icon2" title="선색">선색</a> <div class="tx-colorpallete" unselectable="on"></div> </div> <div id="tx_cellslinecolor_menu" class="tx-cellslinecolor-menu tx-menu tx-colorpallete" unselectable="on"></div> </li> <li class="tx-list"> <div id="tx_cellslineheight" unselectable="on" class="tx-btn-bg tx-cellslineheight"> <a href="javascript:;" class="tx-icon2" title="두께">두께</a> </div> <div id="tx_cellslineheight_menu" class="tx-cellslineheight-menu tx-menu" unselectable="on"></div> </li> <li class="tx-list"> <div id="tx_cellslinestyle" unselectable="on" class="tx-btn-bg tx-cellslinestyle"> <a href="javascript:;" class="tx-icon2" title="스타일">스타일</a> </div> <div id="tx_cellslinestyle_menu" class="tx-cellslinestyle-menu tx-menu" unselectable="on"></div> </li> <li class="tx-list"> <div id="tx_cellsoutline" unselectable="on" class="tx-btn-rbg tx-cellsoutline"> <a href="javascript:;" class="tx-icon2" title="테두리">테두리</a> </div> <div id="tx_cellsoutline_menu" class="tx-cellsoutline-menu tx-menu" unselectable="on"></div> </li> </ul> <ul class="tx-bar tx-bar-left"> <li class="tx-list"> <div id="tx_tablebackcolor" unselectable="on" class="tx-btn-lrbg tx-tablebackcolor" style="background-color:#9aa5ea;"> <a href="javascript:;" class="tx-icon2" title="테이블 배경색">테이블 배경색</a> </div> <div id="tx_tablebackcolor_menu" class="tx-tablebackcolor-menu tx-menu tx-colorpallete" unselectable="on"></div> </li> </ul> <ul class="tx-bar tx-bar-left"> <li class="tx-list"> <div id="tx_tabletemplate" unselectable="on" class="tx-btn-lrbg tx-tabletemplate"> <a href="javascript:;" class="tx-icon2" title="테이블 서식">테이블 서식</a> </div> <div id="tx_tabletemplate_menu" class="tx-tabletemplate-menu tx-menu tx-colorpallete" unselectable="on"></div> </li> </ul> </div></div> <!-- 툴바 - 더보기 끝 --> <!-- 편집영역 시작 --> <!-- 에디터 Start --> <div id="tx_canvas" class="tx-canvas"> <div id="tx_loading" class="tx-loading"><div><img src="/daumeditor/images/icon/editor/loading2.png" width="113" height="21" align="absmiddle"/></div></div> <div id="tx_canvas_wysiwyg_holder" class="tx-holder" style="display:block;"> <iframe id="tx_canvas_wysiwyg" name="tx_canvas_wysiwyg" allowtransparency="true" frameborder="0"></iframe> </div> <div class="tx-source-deco"> <div id="tx_canvas_source_holder" class="tx-holder"> <textarea id="tx_canvas_source" rows="30" cols="30"></textarea> </div> </div> <div id="tx_canvas_text_holder" class="tx-holder"> <textarea id="tx_canvas_text" rows="30" cols="30"></textarea> </div> </div> <!-- 높이조절 Start --> <div id="tx_resizer" class="tx-resize-bar"> <div class="tx-resize-bar-bg"></div> <img id="tx_resize_holder" src="/daumeditor/images/icon/editor/skin/01/btn_drag01.gif" width="58" height="12" unselectable="on" alt="" /> </div> <div class="tx-side-bi" id="tx_side_bi"> <div style="text-align: right;"> <img hspace="4" height="14" width="78" align="absmiddle" src="/daumeditor/images/icon/editor/editor_bi.png" /> </div> </div> <!-- 편집영역 끝 --> <!-- 첨부박스 시작 --> <!-- 파일첨부박스 Start --> <div id="tx_attach_div" class="tx-attach-div"> <div id="tx_attach_txt" class="tx-attach-txt">파일 첨부</div> <div id="tx_attach_box" class="tx-attach-box"> <div class="tx-attach-box-inner"> <div id="tx_attach_preview" class="tx-attach-preview"><p></p><img src="/daumeditor/images/icon/editor/pn_preview.gif" width="147" height="108" unselectable="on"/></div> <div class="tx-attach-main"> <div id="tx_upload_progress" class="tx-upload-progress"><div>0%</div><p>파일을 업로드하는 중입니다.</p></div> <ul class="tx-attach-top"> <li id="tx_attach_delete" class="tx-attach-delete"><a>전체삭제</a></li> <li id="tx_attach_size" class="tx-attach-size"> 파일: <span id="tx_attach_up_size" class="tx-attach-size-up"></span>/<span id="tx_attach_max_size"></span> </li> <li id="tx_attach_tools" class="tx-attach-tools"> </li> </ul> <ul id="tx_attach_list" class="tx-attach-list"></ul> </div> </div> </div> </div> <!-- 첨부박스 끝 --> </div> <!-- 에디터 컨테이너 끝 --> </div>
이어서 css파일과 js파일들을 include 해주도록 하자
<link rel="stylesheet" href="/daumeditor/css/editor.css" type="text/css" charset="utf-8"/> <script src="/daumeditor/js/editor_loader.js?environment=development" type="text/javascript" charset="utf-8"></script> <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.9.0/jquery.js"></script>
이어서 에디터 환경설정을 위한 setConfig 함수를 정의
function setConfig(){ var config = { txHost: '', /* 런타임 시 리소스들을 로딩할 때 필요한 부분으로, 경로가 변경되면 이 부분 수정이 필요. ex) http://xxx.xxx.com */ txPath: '', /* 런타임 시 리소스들을 로딩할 때 필요한 부분으로, 경로가 변경되면 이 부분 수정이 필요. ex) /xxx/xxx/ */ txService: 'sample', /* 수정필요없음. */ txProject: 'sample', /* 수정필요없음. 프로젝트가 여러개일 경우만 수정한다. */ initializedId: "", /* 대부분의 경우에 빈문자열 */ wrapper: "tx_trex_container", /* 에디터를 둘러싸고 있는 레이어 이름(에디터 컨테이너) */ form: 'tx_editor_form'+"", /* 등록하기 위한 Form 이름 */ txIconPath: "/daumeditor/images/icon/editor/", /*에디터에 사용되는 이미지 디렉터리, 필요에 따라 수정한다. */ txDecoPath: "/daumeditor/images/deco/contents/", /*본문에 사용되는 이미지 디렉터리, 서비스에서 사용할 때는 완성된 컨텐츠로 배포되기 위해 절대경로로 수정한다. */ canvas: { styles: { color: "#123456", /* 기본 글자색 */ fontFamily: "굴림", /* 기본 글자체 */ fontSize: "10pt", /* 기본 글자크기 */ backgroundColor: "#fff", /*기본 배경색 */ lineHeight: "1.5", /*기본 줄간격 */ padding: "8px" /* 위지윅 영역의 여백 */ }, showGuideArea: false }, events: { preventUnload: false }, sidebar: { attachbox: { show: true, confirmForDeleteAll: true } }, size: { contentWidth: 700 /* 지정된 본문영역의 넓이가 있을 경우에 설정 */ } }; EditorJSLoader.ready(function(Editor) { editor = new Editor(config); }); }
마지막으로 jquery ajax를 이용하여 template html 파일을 load 후 setConfig 함수를 호출하도록
하자!!
$(function(){ $.ajax({ type:"POST", url: "/daumeditor/editor_template.html", success: function(data){ $("#editorTd").html(data); setConfig(); }, error : function(request, status, error) { alert("에러"); } }); })
기초 공사는 마무리가 되었으니 실행!!
입력도 잘되고 편집도 잘된다.
이제는 저장 버튼 클릭시 서버 전송을 해야 한다.
화면상으로는 에디터에 편집이 되서 일반 submit을 해도 될거 같지만
별도로 daumeditor 방식으로 editor 부분은 처리를 해주어야 한다.
마지막으로 2가지 function을 추가해주도록 하자
// submit 전 다음에디터 validation체크 function validForm(editor) { var validator = new Trex.Validator(); var content = editor.getContent(); if (!validator.exists(content)) { alert('내용을 입력하세요'); return false; } return true; } //validForm 함수가 true로 return된 후에 동작하는 함수 function setForm(editor) { var form = editor.getForm(); var content = editor.getContent(); var textarea = document.createElement('textarea'); //textarea를 생성하여 해당태그에 에디터 입력값들을 신규생성 textarea에 담는다 textarea.name = 'content'; textarea.value = content; form.createField(textarea); return true; }
위 함수를 추가하였다면 저장버튼 클릭시 submit 해주는 이벤트를 구현해주도록 하자
$(function(){}) << 될수있으면 내부에 선언해주도록 하자
$("#save").click(function(){ Editor.save(); })
이걸로 폼관련 설정을 마무리가 되었다.
값이 제대로 출력이 되나 확인해야 하므로
insert.jsp 페이지를 생성 후 title / content 에 대한 값을 콘솔에 찍어보도록 확인 하겠다.
- insert.jsp
//제대로 utf-8환경이 아니라 한글 깨짐 그래서 임의로 추가 request.setCharacterEncoding("utf-8"); System.out.println("제목:"+request.getParameter("title")); System.out.println("내용:"+request.getParameter("content"));
폼화면에서 제목/내용 입력후 서버 전송한 결과값을 서버 콘솔에서 확인한 결과값이다
잘 나온것이 확인 되었다.
다음포스팅에는 스마트에디터와동일하게 파일첨부 관련하여 포스팅해보도록 하겠음
※ 에디터내에 DEVELOPMENT MODE 라는 텍스트가 들어가있을수있는데 이럴경우
development_environments.js -> 맨하단에 EditorJSLoader.ready(addEditorEnvIndicator);
를 제거하도록 하자
지난 포스팅때 CentOS7에 마리아db를 설치 해보았었다
yum으로 설치한 마리아DB에서 인코딩 설정은 심플하더라... ㅎㅎ
추가로 할 내용은 없다 그냥 설명 시작!!
MariaDB [(none)]> show variables like 'c%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | | collation_connection | utf8_general_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | | completion_type | NO_CHAIN | | concurrent_insert | AUTO | | connect_timeout | 10 | +--------------------------+----------------------------+ 14 rows in set (0.00 sec)
몇가지가 utf8이아닌 latin1 이다
대략 보니 서버쪽 부분만 latin 인코딩인대 이것을 utf8로 변경해보도록 하자
[root@localhost etc]# vi /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock character_set_server = utf8 <- 추가를 해주도록 하자: # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid # # include all files from the config directory # !includedir /etc/my.cnf.d
character_set_server = utf8 추가해준 후 service 재시작을 해보도록 하자
[root@localhost etc]# systemctl stop mariadb.service [root@localhost etc]# systemctl start mariadb.service
별 오류없이 위의 명령어가 동작되었으면 다시한 번 mysql 접속후 show variables like 'c%'; 명령어를 주어 확인해보도록 하자
MariaDB [(none)]> show variables like 'c%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | | completion_type | NO_CHAIN | | concurrent_insert | AUTO | | connect_timeout | 10 | +--------------------------+----------------------------+ 14 rows in set (0.00 sec)
위와같이 정상적으로 UTF8설정이 변경되었다면 성공
마리아DB(MariaDB)를 로컬서버(리눅스)에 설치해보기 (0) | 2014.08.05 |
---|
한번 리눅스서버에 마리아db를 설치해보고자 한다
마리아DB는 그냥 MySQL이다...
이름만 틀릴뿐..
CentOS7 기준이라 기존의 MySQL설치는 조금 난해해서 그냥 마리아DB로 설치하고자 한다.
[root@localhost lib]# yum -y install mariadb-server mariadb Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: centos.tt.co.kr * extras: centos.tt.co.kr * updates: centos.tt.co.kr Resolving Dependencies --> Running transaction check ---> Package mariadb.x86_64 1:5.5.37-1.el7_0 will be installed ---> Package mariadb-server.x86_64 1:5.5.37-1.el7_0 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================================================= Package Arch Version Repository Size ================================================================================================================= Installing: mariadb x86_64 1:5.5.37-1.el7_0 updates 8.9 M mariadb-server x86_64 1:5.5.37-1.el7_0 updates 11 M Transaction Summary ================================================================================================================= Install 2 Packages Total download size: 20 M Installed size: 104 M Downloading packages: (1/2): mariadb-5.5.37-1.el7_0.x86_64.rpm | 8.9 MB 00:00:02 (2/2): mariadb-server-5.5.37-1.el7_0.x86_64.rpm | 11 MB 00:00:03 ----------------------------------------------------------------------------------------------------------------- Total 5.8 MB/s | 20 MB 00:00:03 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : 1:mariadb-5.5.37-1.el7_0.x86_64 1/2 Installing : 1:mariadb-server-5.5.37-1.el7_0.x86_64 2/2 Verifying : 1:mariadb-server-5.5.37-1.el7_0.x86_64 1/2 Verifying : 1:mariadb-5.5.37-1.el7_0.x86_64 2/2 Installed: mariadb.x86_64 1:5.5.37-1.el7_0 mariadb-server.x86_64 1:5.5.37-1.el7_0 Complete! [root@localhost lib]#
설치 완료하였으면 마리아DB 서비스를 시작해주도록 하자
[root@localhost lib]# systemctl start mariadb.service
에러가 발생하지 않는다면 일반 mysql 접속과 동일하게 접속해보도록하자
[root@localhost ~]# mysql -uroot -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 5.5.37-MariaDB MariaDB Server Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
초기 비밀번호 설정을 하지 않았다면 패스워드입력없이 엔터만 치면 다음과 같이 접속이 가능하다
root 설정을 해보도록 하자
[root@localhost~]# mysql_secure_installation /usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! . . . Enter current password for root (enter for none): 엔터 OK, successfully used password, moving on... . . . Set root password? [Y/n] 엔터 New password: 신규생성패스워드입력 Re-enter new password: 신규생성패스워드입력 Password updated successfully! Reloading privilege tables.. ... Success! . . . Remove anonymous users? [Y/n] 엔터 ... Success! . . . Disallow root login remotely? [Y/n] 엔터 ... Success! . . . Remove test database and access to it? [Y/n] 엔터 - Dropping test database... ... Success! - Removing privileges on test database... ... Success! . . . Reload privilege tables now? [Y/n] 엔터 ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB! [root@localhost~]#
패스워드 설정까지 마무리된 상태이다.
그럼 다시한번 MariaDB접속을 해보도록 하자
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
패스워드 없이 접속시 위와같이 에러발생하고 패스워드 입력후 접속화면이 뜬다면 성공적으로 설치 완료!!!
방화벽(3306포트) 개방을 해준 후
외부에서 DB툴로 접속을 해보게 되면
Error No.1130
Host 'xxx.xx.x.xx' is not allowed to connect to this MariaDB server
라는 에러를 뿜을듯...
이럴경우 maria db를 콘솔에 접속 한 후 다음과 같이 설정을 해주도록 하자
MariaDB [(none)]> use mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [mysql]> select host,user,password from user; +-----------+------+-------------------------------------------+ | host | user | password | +-----------+------+-------------------------------------------+ | localhost | root | *A4B6157319038724E3560894F7F932C8886EBFCF | | 127.0.0.1 | root | *A4B6157319038724E3560894F7F932C8886EBFCF | | ::1 | root | *A4B6157319038724E3560894F7F932C8886EBFCF | +-----------+------+-------------------------------------------+ 3 rows in set (0.00 sec)
위와같이 나오면 host에 외부 아이피가 등록되지 않아서이다.
본인은 전체 접근으로 권한을 설정할 것이므로 grant 설정에 관한 글은 현재 본인 블로그에는 없으므로 구글링을 통하여 적절히 사용하시길....
MariaDB [mysql]> grant all privileges on *.* to 'ROOT계정'@'%' identified by 'ROOT의비밀번호'; Query OK, 0 rows affected (0.00 sec)
위와같이 주었으면 다시한면 외부에서 접속을 해보면 잘 접속이 될것이다.
마리아DB(MariaDB) 인코딩 설정하기(UTF-8) (0) | 2014.08.05 |
---|