Back
Dec 8, 2020
이더리움 대신 아르고로 DApp 쉽게 만들기3
owen
스마트 컨트랙트는 블록체인에서 작동되는 일종의 프로그램으로 프로그래밍된 계약 조건에 따라 특정 이벤트가 발생할 때 자동으로 계약이 수행됩니다. 스마트 컨트랙트라는 개념은 블록체인과는 별개로 1994년 Nick Szabo라는 사람에 의해 처음 제안되었고, 2013년 이더리움이 스마트 컨트랙트를 블록체인에 도입해 구현함으로써 ‘스마트 컨트랙트’하면 자연스레 ‘ERC-20’, ‘코인 만들기’를 생각하게 되었습니다.
하지만 코인은 스마트 컨트랙트의 하위 개념일 뿐, 스마트 컨트랙트를 기반으로 금융, 헬스, 게임, 엔터테인먼트 등 다양한 분야에서 DApp이 개발되고 있습니다.
이번 글에서는 이더리움보다 속도가 더 빠르고, 스마트 컨트랙트 관련해 다양한 리소스를 제공하는 아르고로 게시판 프로젝트를 진행해보았습니다.
아래 1편과 2편을 통해 DApp의 기본 환경 세팅과 스마트 컨트랙트 작성부터 실습해볼 수 있습니다.
1. 파일 업로드
/blockoBoard/src/main/resources/lua/sql_smartcontract.lua
contract에 새로운 BoardFile 이란 테이블을 만들어줍니다.
우리가 받은 Project의 BoardFileEntity.java 파일과 동일한 형식입니다.
기존의 createBoard에 위와 같이 BoardFile 부분을 추가해줍니다.
/blockoBoard/src/main/java/board/common/FileUtils.java
각자의 프로젝트 위치에 맞춰 변경합니다.
/blockoBoard/src/main/java/board/board/controller/FileController.java
각자의 프로젝트 위치에 맞춰 변경합니다.
/blockoBoard/src/main/java/board/board/controller/BoardController.java
기존의 writeBoard의 함수에 위 부분들을 추가해줍니다.
http://localhost:8080/blocko/board/write
BoardWrite.html에 file 부분을 변경해줍니다.
http://localhost:8080/blocko/board
게시글 등록에 파일 선택을 눌러 원하는 파일을 선택합니다.
파일 선택 시 해당 파일의 파일명이 등록된 것을 볼 수 있습니다.
정상적으로 redirect 되었다면 위와 같이 write화면에서 list화면으로 이동되어 게시판 리스트에 추가된 것을 확인할 수 있습니다.
eclipse 결과값
저장을 눌렀을 시 eclipse console 화면에선 위와 같은 결과를 볼 수 있습니다.
aergoscan.io
aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.
2. 파일 화면 상세 보기
/blockoBoard/src/main/resources/lua/sql_smartcontract.lua
contract에 게시글 생성 함수를 위와 같이 만들어줍니다.
boardIdx를 기준으로 읽어올 수 있도록 합니다.
/blockoBoard/src/main/java/board/board/controller/BoardController.java
controller의 openBoardDetail에 해당 내용을 추가해줍니다.
첫번째 게시물처럼 파일이 등록되지 않은 게시물도 정상 출력 가능하도록 예외처리를 넣어줍니다.
boardService의 view_Image를 통해 contract의 결과를 받아 modelAndView에 “viewFile” 이란 이름으로 담아줍니다.
/blockoBoard/src/main/java/board/board/service/BoardServiceImpl.java
게시판 상세 보기와 동일한 형식이며, contractQuery에 파일상세보기 함수인 “selectBoardFileDetail”을 넣어줍니다.
/blockoBoard/src/main/resources/templates/board/BoardDetail.html
mv에서 보내준 viewFile의 형식으로 사진을 받아올 수 있도록 입력합니다.
eclipse 결과값
저장을 눌렀을 시 eclipse console 화면에선 위와 같은 결과를 볼 수 있습니다.
http://localhost:8080/blocko/board/4
업로드한 사진에 대한 이름, 용량, 이미지를 위와 같이 볼 수 있습니다.
업로드한 사진의 이름을 누르면 다운로드 할 수 있습니다.
3. 파일 수정
/blockoBoard/src/main/resources/lua/sql_smartcontract.lua
contract에 게시글 수정 부분에서 파일 관련된 부분들을 추가해줍니다.
/blockoBoard/src/main/java/board/board/controller/BoardController.java
기존 게시글 변경 함수에서 위 내역들을 추가해줍니다.
http://localhost:8080/blocko/board
바뀐 게시판 리스트를 볼 수 있습니다.
바뀐 작성자, 제목, 내용, 사진을 볼 수 있습니다.
aergoscan.io
aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.
4. 파일 삭제
/blockoBoard/src/main/resources/lua/sql_smartcontract.lua
contract에 수정할 데이터와 boardIdx를 받도록 합니다.
외래 키 조건 때문에 먼저 BoardFile부터 지워야 합니다.
controller와 service는 수정할 필요가 없음으로 생략합니다.
http://localhost:8080/blocko/board/4
삭제하기 버튼을 눌러줍니다.
성공적으로 삭제되었다는 메세지를 볼 수 있습니다.
eclipse 결과값
eclipse console 화면에서 contract가 execute된 것을 확인할 수 있습니다.
http://localhost:8080/blocko/board
삭제 성공 시 해당 게시글이 리스트에서 제거된 것을 확인할 수 있습니다.
aergoscan.io
aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.
여기까지 3편의 글을 통해 이더리움 대신 아르고로 DApp 기본 환경을 세팅하고 스마트 컨트랙트를 작성해 게시판을 만들어보았습니다.
더 간편하게 개발해보고 싶으신 분은 Java 표준에 맞춰 개발한 툴인 AERGO JDBC를 활용한 게시판 DApp 만들기 글을 참고해주세요.