이번포스팅은 이미지 파일을 통째로 DB의 BLOB형식의 컬럼에 등록을 해보는 방법과
DB에 저장된 BLOB 형식의 데이터를 이미지태그에 출력해보도록 하겠습니다.
우선 BLOB 컬럼을 가진 테스트 테이블 하나를 생성해보도록 하겠습니다.
※ 본인은 MySQL에 BLOB타입의 컬럼을 가진 테이블을 생성해보도록 하겠습니다.
CREATE TABLE `img_table` ( `img` longblob ) ENGINE=InnoDB DEFAULT CHARSET=utf8
BLOB 형식으로 생성 할수도 있지만
사이즈제한이 있으므로 LONGBLOB 타입의 컬럼을 생성하였습니다.
이제는 Spring MVC와 Mybatis의 로직을 구현해보도록 하겠습니다.
Spring 및 Mybatis연동법은 개인이 사용하고 계신 연동법이 있으시면 상관없지만
없으신 분들은 하단 포스팅을 참고하시면 되겠습니다.
2014/11/06 - [개발에필요한연동법/스프링연동] - STS 이클립스를 이용하여 UTF-8 인코딩 설정 및 Spring3 MVC 연동해보기
2014/11/06 - [개발에필요한연동법/스프링연동] - Spring3 한글깨짐 방지를 위한 UTF-8 인코딩 설정하기
2014/11/07 - [개발에필요한연동법/스프링연동] - Spring3 파일전송을 위한 multipartResolver 설정하기
2014/11/14 - [개발에필요한연동법/스프링연동] - Spring3 Maven을 이용하여 pom.xml에 oracle,mysql,mssql jdbc 라이브러리 등록하기
2014/11/14 - [개발에필요한연동법/스프링연동] - Spring3 + MyBatis 기본설정 + 연동테스트 후 쿼리로그 확인해보기
@Autowired private StudyDao dao; /** * 파일태그를 위한 폼태그 * @return */ @RequestMapping(value="/formFile") public String formFile() { return "formFile"; } /** * 파일처리 컨트롤러 * @param vo * @return */ @RequestMapping(value="/saveImage") public String saveImage(Vo vo) { try { Map<String, Object> hmap = new HashMap<String, Object>(); hmap.put("img", vo.getImgFile().getBytes()); dao.saveImage(hmap); } catch (Exception e) { e.printStackTrace(); } return "redirect:/formFile"; }
@Autowired private SqlSession query; public void saveImage(Map<String, Object> hmap) throws SQLException { query.insert("query.saveImage",hmap); }
<insert id="saveImage" parameterType="java.util.Map"> INSERT INTO img_table VALUES(#{img}) </insert>
public class Vo { private MultipartFile imgFile; public MultipartFile getImgFile() { return imgFile; } public void setImgFile(MultipartFile imgFile) { this.imgFile = imgFile; } }
<form action="/saveImage" enctype="multipart/form-data" method="post"> <input type="file" name="imgFile" /> <input type="submit" value="이미지저장"/> </form>
실행결과는 다음과 같습니다.
저장결과 정상적으로 이미지바이트가 DB에 INSERT 되었습니다.
그렇다면 이제 저장된 바이트이미지를 SELECT문을 통하여 가져온 후
IMG태그로 화면에 출력해보도록 하겠습니다.
/** * 임의의 뷰페이지 * @return */ @RequestMapping(value="/view") public String view() { return "view"; } /** * 이미지태그의 src 컨트롤러 * @return */ @RequestMapping(value="/getByteImage") public ResponseEntity<byte[]> getByteImage() { Map<String, Object> map = dao.getByteImage(); byte[] imageContent = (byte[]) map.get("img"); final HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.IMAGE_PNG); return new ResponseEntity<byte[]>(imageContent, headers, HttpStatus.OK); }
public Map<String, Object> getByteImage() { return query.selectOne("query.getByteImage"); }
<select id="getByteImage" resultType="java.util.Map"> SELECT img FROM img_table </select>
<!-- img태그의 src 경로는 byte이미지 가져오는 컨트롤러 호출(/getByteImage) --> <img alt="" src="/getByteImage" />
위와같이 임의로 body태그내에 작성 후 /view 컨트롤러를 호출해보도록 하겠습니다.
호출결과 정상적으로 byte데이터를 DB로부터 가져와서 화면에 출력이 되었습니다.
필요하신분들이 계실거 같아 포스팅 해보았습니다 ^^
by 개발로짜
Spring3 MVC + HttpClient를 이용하여 GET/POST/Multipart API 웹서버 구축해보기 (2) | 2014.12.07 |
---|---|
Spring3 spring-task를 이용하여 스케줄러 연동 및 동작시켜보기 + DB연동(MySQL기준) (0) | 2014.11.24 |
Spring3 + ibatis(아이바티스) 연동해보고 쿼리결과값 콘솔에 출력해보기 (5) | 2014.11.17 |
Spring3 + Mybatis 여러개 Datasource 연동법(다중 트랜잭션 포함) (0) | 2014.11.16 |
Spring3 + Mybatis연동에 추가로 트랜잭션 설정 하여 실패시 Rollback 처리하기 (2) | 2014.11.14 |
이번에는 프로젝트 형상관리를 위하여
SVN(subversion)을 설치방법부터
이클립스를 통한 접속테스트 까지 진행해보도록 하겠습니다.
가상머신인 virtualbox내에 설치된 CentOS 기준으로
설명을 드리도록 하겠습니다.
※ 가상머신에 설치되지 않고 직접 서버에 설치를 하셨다면
하단 내용 중 포트포워딩 관련 내용을 제외하시고 진행하시면 되겠습니다.
간단하게 yum 명령어를 이용하여 설치해보도록 하겠습니다.
만약 이미 설치되어있다고 되어있을경우 문제가 발생할 수 있으니
삭제명령어를 통하여 기존 subversion을 삭제 후 install을 해주도록 합니다.
[root@localhost ~]# yum -y remove subversion [root@localhost ~]# yum -y install subversion
설치가 완료되었으면 svn 사용공간을 위한
디렉토리를 생성 및 저장소를 생성 하도록 하겠습니다.
[root@localhost ~]# cd /usr/local/ [root@localhost local]# mkdir svnserver [root@localhost local]# svnadmin create --fs-type fsfs /usr/local/svnserver/project [root@localhost local]#
※ 상단의 project는 svn 접속시 사용되는 저장소명칭입니다.
원하시는 저장소명을 정해주시면 되겠습니다.
이어서 접속권한설정을 위하여
생성한 저장소의 conf 디렉토리내에 존재하는
svnserve.conf 파일을 설정해주도록 합니다.
[root@localhost local]# vi /usr/local/svnserver/project/conf/svnserve.conf
[general] 하단을 보시면 주석처리되어있는
# anon-access = read # auth-access = write # password-db = passwd
이 3개의 코드들의 주석을 해제합니다.
주석해제는 앞에 #을 제거해주시면 되겠습니다.
그리고 주석 해제한 코드중 anon-access 의
read 값을 none로 변경해주도록 합니다.
최종적으로 변경된 코드는 다음과 같습니다.
anon-access = none auth-access = write password-db = passwd
그리고 svn으로 생성한 project 저장소에
접속을 위한 계정을 추가해주도록 합니다.
※ 계정추가는 passwd 파일을 설정해줍니다.
[root@localhost local]# vi /usr/local/svnserver/project/conf/passwd
[users] 밑에 본인이 사용하고자 하는
아이디와 패스워드를 설정해주도록 합니다.
아이디 = 패스워드
주석처리된 계정을 사용하셔도 무관하나
본인이 편한 아이디와 패스워드를 사용하시길....
설정은 이걸로 마무리 되었습니다.
이제 svn 서버를 실행해보도록 하겠습니다.
실행전 svn 서버가 현재기준으로 동작이 되고 있는지
확인해보도록 하겠습니다.
[root@localhost local]# ps -ef | grep svnserve root 1181 1098 0 11:25 pts/0 00:00:00 grep svnserve [root@localhost local]#
역시 서버를 실행하지 않았으니 프로세스가 없겠군요 ㅎ
그럼 서버를 실행 후 프로세스가 떠있는지 재확인 해보도록 하겠습니다.
[root@localhost local]# svnserve -d -r /usr/local/svnserver/ [root@localhost local]# ps -ef | grep svnserve root 1183 1 0 11:27 ? 00:00:00 svnserve -d -r /usr/local/svnserver/ root 1185 1098 0 11:27 pts/0 00:00:00 grep svnserve [root@localhost local]#
정상적으로 프로세스다 떠있는거 같군요
이제 외부에서 접속을 위하여
svn 기본포트인 3690을 iptables에서 방화벽 해제를 해주고
가상머신에서 동작되고 있으므로
포트포워딩을 이용하여 3690 포트를 열어준 후
이클립스로 svn 접속을 해보도록 하겠습니다.
우성 방화벽 해제를 해주도록 하겠습니다.
[root@localhost local]# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
iptables가 변경이 되었으므로 서비스 재시작을 해주도록 합니다.
[root@localhost local]# service iptables restart iptables: 체인을 ACCEPT 규칙으로 설정 중: filter [ OK ] iptables: 방화벽 규칙을 지웁니다: [ OK ] iptables: 모듈을 언로드하는 중: [ OK ] iptables: 방화벽 규칙 적용 중: [ OK ] [root@localhost local]#
이어서 포트포워딩을 통하여 3690포트를 열어주도록 하겠습니다.
포트포워딩까지 완료되었다면 이제는 이클립스를 이용하여
project svn 저장소를 접속해보도록 합니다.
※ 이클립스의 SVN 클라이언트가 설치되어있다는 가정하에 진행하겠습니다.
New Repository Location의 URL영역에
svn://가상머신의호스트IP/저장소명
입력 후 Browse... 버튼 클릭
위와같은 순서로 출력이 되었다면
svn 접근이 성공 한 것입니다.
Authentication의 User와 Password 부분은
SVN Server 저장소설정해준 것 중
passwd 파일내에 정의해준 ID/PASSWORD를 입력해주시면 되겠습니다.
by 개발로짜
CentOS 몽고DB 다운로드 및 환경설정 후 접속테스트까지 간단하게 알아보기 (1) | 2014.12.19 |
---|---|
리눅스환경에서 MySQL 대소문자 구분을 하지 않기위한 설정방법 알아보기 (0) | 2014.12.15 |
CentOS 에서 MySQL 설치 및 UTF-8 설정하여 한글깨짐 현상 해결하기 (0) | 2014.12.15 |
CentOS tomcat-connector를 이용한 아파치 + 톰캣 간단 연동법 알아보기 (17) | 2014.12.11 |
CentOS wget을 이용하여 Apache 2.4 다운로드 및 서버 실행 (방화벽해제 포함) (1) | 2014.12.10 |
이번에는 CentOS 환경에서 몽고db 설치를 진행해보도록 하겠습니다.
CentOS외 리눅스 환경이면 공통적으로 적용이 가능할거 같습니다.
몽고DB는 NoSQL의 대표적인 DB이며
Binary Json(BSON) 형태로 쿼리작성(?)이 가능합니다.
json 형태이다보니 속도면에서는 일반 RDBMS보다는 빠르긴 하지만
복잡한 db설계 측면에서는 RDBMS를 사용해야 하는것으로 알고있습니다.
그렇다면 리눅스환경인 centos에 wget명령어를 이용하여
mongoDB를 다운로드 받도록 하겠습니다.
https://fastdl.mongodb.org/linux/mongodb-linux-i686-2.6.6.tgz
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.6.tgz
자신이 사용하는 리눅스 환경에 맞추어 알맞게 다운로드 받도록 합니다
※ 저는 64비트이므로 64비트용 url을 이용하여 다운로드 받도록 하겠습니다.
[root@localhost ~]# cd /usr/local/ [root@localhost local]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.6.tgz -O mongo.tgz . . 생략 . . 2014-12-18 10:19:24 (294 KB/s) - `mongo.tgz' saved [116039527/116039527] [root@localhost local]#
설치가 완료되었다면 한번 압축해제후
실행에 필요한 작업을 진행해주도록 합니다.
제일먼저 다운로드 받은 파일의 압축을 해제해주어야 하겠죠?
해제합니다.
[root@localhost local]# tar -zxvf mongo.tgz
mongodb-linux-x86_64-x.x.x 디렉토리로 압축이 해제되었네요.
디렉토리명을 줄여주기 위해 디렉토리명을 변경해보도록 하겠습니다.
[root@localhost local]# mv mongodb-linux-x86_64-2.6.6 mongodb
"mongodb" 디렉토리로 이동하여
다음 서브디렉토리들을 추가로 생성해보도록 합니다.
[root@localhost local]# cd /usr/local/mongodb/ [root@localhost mongodb]# mkdir data [root@localhost mongodb]# mkdir config [root@localhost mongodb]# mkdir log
환경설정을 위하여 신규생성한 config 디렉토리로 들어가서
"mongodb.conf" 파일을 생성 후
다음처럼 코드를 추가해주도록 합니다.
[root@localhost mongodb]# cd config/ [root@localhost config]# vi mongodb.conf
dbpath=/usr/local/mongodb logpath=/usr/local/mongodb/log/mongodb.log logappend=true port=5050 verbose=true fork=true rest=true
여기까지 따라오셨다면 모든 설정이 완료되었습니다.
그렇다면 이제 몽고DB의 데몬 실행 후
접속테스트를 이어서 진행해보도록 하겠습니다.
[root@localhost config]# /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/config/mongodb.conf 2014-12-18T10:31:49.991+0900 ** WARNING: --rest is specified without --httpinterface, 2014-12-18T10:31:49.991+0900 ** enabling http interface about to fork child process, waiting until server is ready for connections. forked process: 1126 child process started successfully, parent exiting [root@localhost config]#
mongod 실행 후 successfully라는 로그결과가 출력되면
정상적으로 데몬동작이 완료된것입니다.
접속을 해보도록 합니다.
[root@localhost config]# /usr/local/mongodb/bin/mongo localhost:5050 MongoDB shell version: 2.6.6 connecting to: localhost:5050/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-12-18T10:31:49.991+0900 ** WARNING: --rest is specified without --httpinterface, 2014-12-18T10:31:49.991+0900 ** enabling http interface >
쉘이 접속이 되었다면
정상적으로 몽고DB 접속까지 완료되었습니다.
마지막으로 몽고db에서 지원하는 명령어들을 이용하여
정상적으로 출력이 되는지를 확인 후
이번 포스팅을 종료하도록 하겠습니다.
> db test > use db switched to db db
by 개발로짜
가상머신에 설치된 CentOS에 SVN Server 구축 후 이클립스로 접속하기 (0) | 2014.12.20 |
---|---|
리눅스환경에서 MySQL 대소문자 구분을 하지 않기위한 설정방법 알아보기 (0) | 2014.12.15 |
CentOS 에서 MySQL 설치 및 UTF-8 설정하여 한글깨짐 현상 해결하기 (0) | 2014.12.15 |
CentOS tomcat-connector를 이용한 아파치 + 톰캣 간단 연동법 알아보기 (17) | 2014.12.11 |
CentOS wget을 이용하여 Apache 2.4 다운로드 및 서버 실행 (방화벽해제 포함) (1) | 2014.12.10 |