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 만들기 글을 참고해주세요.