메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

MySQL + JDBC에서 트랜잭션(Transaction)이?

한빛미디어

|

2001-06-29

|

by HANBIT

11,511

by 한빛리포터 1기 이아스님 프롤로그 무더운 여름의 시작, 메일 박스에 무심히 쌓인 모르는 이의 편지. "음... 내가 그런 소식을 알렸었지.." 오래전 일인 것 같은데, MySQL이 트랜잭션을 지원한다는 소식을 모 게시판에 올렸었다. 상당히 많은 MySQL사용자들이 관심을 가졌던 것으로 기억하는데, 때맞추어 MM.MySQL JDBC드라이버도 나와서 함께 소개했었을 것이다. 그런데 실은 나도 그 소식만(?) 옮겼지, 실제로 써 보지는 않았다. 제작자들이 된다고 했으니 어련히 알아서 되겠지 하였는데, 그게 그렇게 녹록하지 않았나 보다. "안된다...라." 일단은 뭐가 안될 때에는 방법이 뻔하다. 윈도우 같으면 껐다 켜면 되고, 무료인 경우에는 최신판으로 구해보고. 어찌나 답답했으면 생면부지의 나한테 다 문의를 했겠는가? 그래서 답장을 썼다. "우선 최신 버전을 받아 보세요..." 오랜만에 나도 오랜만에 MySQL 사이트에 가보았는데, MySQL은 버전이 유난히 복잡하고도 종류도 많아서 헛갈리기는 하지만 아무튼 2001년 6월 27일 확인해 본 결과 3.23.39가 최신이었다. 나는 테스트용으로 3.23.38을 쓰고 있어서 별 무리 없겠다 싶었고, 더 오랜만에 MM.MySQL사이트에 가보니 내가 즐겨 쓰던 2.0.4보다 무려 0.0.2나 상승한 2.0.6이 나와버렸다. 이 JDBC 드라이버 제작자 마크 매튜스(Mark Matthews)는 퍼듀대학(Purdue University) 사람(아마 석사나 박사쯤 아니었을까? 지금은 잘 모르겠다. 학생이지 않을까 하는 것조차 내 추측이다. 전에 이메일 주소가 퍼듀대로 되어 있어서다. 혹시 교수인가? 아니면 수위?)으로 사실상 MySQL의 대표적인 JDBC 드라이버의 제공자로 군림하고 있다. 사실 MySQL JDBC 초기에는 몇 개가 더 있었는데, 당시에는 오히려 MM(제작자 이름의 이니셜)이 마이너한 입장이었고, 기억은 잘 안나지만 다른 것이 권장되던 시절이 있었다. 그러던 것이 어떻게 하다 보니 이제는 대부분이 멸종되고 MM만 남았다. MySQL 사이트에 가보아도 이 사실을 명백히 알 수 있는데, 최신 버전은 MM만이 링크가 붙어있으니 말이다. 하지만 Resin으로 유명한 Caucho에서도 시험적으로 MySQL 드라이버를 만들고 있으니 관심 있으면 가보아도 좋다. 필자도 솔직히 말하면 MM의 팬이다. 원체 마이너한 것에 천착하다 보니 그렇게 된 면도 있지만, 매튜스의 꾸준한 업그레이드와 자상한 답변은 많은 사용자들에게 신뢰감과 감동을 주기에 충분했다. 이런 것이 무료라니, 정말 후원금이라도 보내야 겠다. 아니면 제작을 돕던가. 은근과 끈기는 사실 우리 민족의 미덕이었는데, 요새 좀 시들하지 않나 싶다. 뭐든 화려하고 각광 받는 것에만 몰리다 보니, 뒷치닥거리 같은 일은 모두 나 몰라라 한다. JDBC 드라이버, 그것도 MySQL이라는 무료 공개 DB라면 정말 누구라도 "애정"이 없다면 곤란할 것이다. 아름다운 공개 소스 사회를 만드는데 퇴근 시간이 늦어진다면 그보다 보람 있는 일은 없지 않겠는가? 괜히 저녁 먹고 동료들과 스타 크래프트를 하는 것보다는 나을 것이다. 그건 그렇고, 이렇게 MySQL 3.23.39 + MM 2.0.6이면 만사 형통일 줄 알았는데, 다시 메일이 왔다. "아직도 안된다라..." 일단 메일을 보낸 이는 MySQL은 최신을 쓰고 있었지만 MM은 아니었다. 2.0.pre5이던가... 아무튼 총알같은 인터넷 세상에서는 옛 것임이 분명하다. 그건 다시 받아보라고 답장을 하고 나서, 나도 한 번 테스트 해보기로 했다. 짐작했던 대로 MM의 최신 버전에는 트랜잭션 기능을 테스트하는 소스가 포함되어 있었다. 트랜잭션이 무엇인가를 잘 모르거나 궁금한 사람은 인터넷에 널려있는 각종 용어 사전과 소개글을 검색해보기를 바란다. 아마 웹 개발쪽에 종사하시는 분들은 지겹게도 들었을 거라 재론하는 것은 정신위생상도 좋지 않으리라. 이것도 작년이었던 것 같은데, 미 항공 우주국(NASA)가 오라클을 버리고 MySQL을 채택했다는 소식이 떴었다. 한마디로 놀라웠다. 오라클과 MySQL이라... 전혀 다르다고 밖에는 할 수 없지만, 필자가 제일 궁금했던 것은 상용 대형 DB가 모두 지원하는 트랜잭션을 도대체 어떻게 MySQL에서 구현했을까 였다. 아니나 다를까 MySQL은 트랜잭션 지원을 밝혔다. 이번 기회에 자세히 안 것이지만, 그냥 테이블은 안되고 버클리 데이터베이스(Berkeley DB) 타입이나 기타 확장된 테이블 타입에서 가능한 것이다. 이를 지원하기 위한 MySQL자체도 종류가 틀려서, MySQL-Max라고 부른다. 그니까 트랜잭션을 쓰려면 MySQL-Max를 돌려야 한다. 이제는 본격적이다 일단 나는 3.23.38을 쓰고 있었지만 충분히 최신이라고 생각했고, WinMySQLadmin이라는 GUI프로그램으로 mysqld-nt-max로 설정을 바꾸었다. (필자가 쓰고 있는 운영체계는 Windows2000프로페셔널)그리고서 예제를 돌려보기로 했다.

예제는 MM에 들어있는데, 압축 파일을 열어보면 testsuite라는 디렉토리가 보인다. 이 디렉토리에 들어있는 Transaction.java가 오늘의 요리 재료이다. 물론 부재료도 필요한데, 바로 JDBC 드라이버인 mm.mysql-2.0.6.jar이다. 이름이 좀 기니까 mysql.jar로 바꿔버리자. 참으로 친절하게 Transaction.class도 있으니까 바로 실행해 볼 수 있다. java -cp .;mysql.jar testsuite.Transaction 이렇게 하면 되는데, 조심해야 할 것은 이 자바 실행 명령을 내리는 디렉토리가 어디인가 하니, MM을 풀어둔 루트 디렉토리이다. testsuite디렉토리로 들어가서 하면 아마 자바를 해 본 사람들이 가장 짜증내는 에러를 보게 될 것이다. 자, 어떤가? DB도 앞에서처럼 잘 준비해서 별 무리 없이 결과가 주르륵 나오는가? 아마 열이면 아홉 그렇지 않을 것이다. 왜일까? 혹시 "저는 잘 되는데요?" 하시는 분들은 다행히도 Windows98계열이나 혹은 UNIX쪽을 쓰고 있을 것이다. NT나 2000의 경우에는 아주 엽기적인데, MySQL을 설치할 때 알아서 서비스로 등록하기 때문이다. 이 서비스는 한번 등록된 이상 지우지 않고는 설정을 바꾸기가 어렵다. MySQL의 경우에도 마찬가지인데, 위의 그림에서 아무리 스위치를 바꿔도 소용이 없다. 대신 위의 트랜잭션 예제를 실행하면 "트랙잭션을 쓸 수 없는 짓을 해서 안된다"는 문구만 나온다. 하긴 맞는 말이다. 서비스는 변하지 않았기 때문이다. 따라서 우선 현재 등록된 서비스를 지우고, 로그아웃을 하던가 재부팅을 하던가 해서 말끔히 서비스 체계를 정리하고 나서, mysqld-max-nt로 새로 서비스를 띄워야 한다. 자세한 순서는 다음과 같다. (c:₩mysql은 MySQL 설치 루트)
  • c:₩mysql₩bin₩mysqld-nt --remove 로 서비스 삭제(제어판에서 해도 된다)
  • 위의 화면에서 mysqld-max-nt를 선택한 후 Save Modification으로 확인
  • 로그아웃-인 혹은 재부팅
이렇게 하면 BDB가 지원되면서 위의 예제도 말끔히 돌아간다. 다 끝난 것처럼 보이는가? 하지만 이제 시작일 뿐이다. 에필로그 사실 트랜잭션은 MySQL에게도 많은 것을 요구하는 꽤나 부하 걸리는 작업이다. 따라서 MySQL측에서도 이러한 점을 문서를 통해 충분히 알리면서 성능 조율에 만전을 기할 것을 부탁하고 있다. 마치 MySQL은 트랜잭션이 형편없다는 평을 피하고자 하는 느낌도 들지만, 무료로 쓰면서 불평하는 것에 비하면 참으로 예의 바르다. 아무튼 실전에 MySQL의 트랜잭션을, 그것도 JDBC와 함께 쓰려면 많은 시행착오와 테스트를 거쳐야 한다. 비록 한 개인이 나에게 던진 질문이었지만, 나 또한 그 덕분에 꽤나 많은 것을 새로 익혔다. 이제 이런 나의 앎이 또 다른 "타인"에게 얼마나 많은 것을 선사할 지가 나의 보람과 나란히 하지 않을까? 언제였을까? 제대로 기억은 나지 않지만 이런 얘기를 본 적이 있다. 인도의 한 소년이 기차역에서 무일푼으로 표까지 잃어버려 절망에 사로잡혀 있을 때, 그를 본 어떤 중년 신사가 대신 표를 내어주었다. 너무도 고마운 나머지 나중에 꼭 이 은혜를 갚겠다고 하는 소년에게 신사는 이렇게 말했다. "나중에, 너도 누군가 어려움에 처해 있거든 그를 도와라. 그게 나한테 보답하는 길이다." 그 소년이 누구로 화(化)했을지는... 그래서 인도의 개발력은 무시무시한 것일까?
TAG :
댓글 입력
자료실

최근 본 상품0