Back

Nov 23, 2020

이더리움 대신 아르고로 DApp 쉽게 만들기2

owen

이전 글 ‘이더리움 대신 아르고로 DApp 쉽게 만들기 1편‘에 이어서 게시글 생성 및 조회수 올리기, 게시글 수정과 삭제를 해보겠습니다.

 

1. 게시글 생성

/blockoBoard/src/main/resources/lua/sql_smartcontract.lua


  • contract에 게시글 생성 함수를 위와 같이 만들어줍니다.


  • contract 배포 전에 만든 함수를 abi에 잊지않고 추가해줍니다.


  • 생성한 contract를 그대로 재사용하기 위해 Athena IDE 중단에 Contract를 클릭합니다.


  • 우리가 생성한 contract 주소를 확인하고 선택합니다.


  • 우리가 만든 contract 주소가 import된 것을 확인할 수 있습니다.

  • Compile과 Deploy를 순차적으로 눌러줍니다.


  • Athena IDE Console 창에서 ReDeploy된 것을 확인할 수 있습니다.


  • 만약 Contract를 선택하지 않은 채 Deploy를 누르게 되면 아래 Console 화면과 같이
    ReDeploy가 아닌 Deploy가 되어 새로운 Contract가 생성됩니다.

 

/blockoBoard/src/main/java/board/board/controller/BoardController.java


  • controller의 wrtieBoard 함수를 위와 같이 변경해줍니다.

  • paramMap을 통해 key, value 형식으로 contract에 담을 수 있도록 넣어줍니다.

  • createDateTime 같은 경우 contract에서 처리한 시간을 기입하기위해 넣지 않습니다.

  • boardService의 기존의 save대신 write라는 이름으로 새로 생성한 service로 변경합니다.

 

/blockoBoard/src/main/java/board/board/service/BoardServiceImpl.java


  • 게시판 list와 다르게 ContractExecute를 사용해서 데이터를 전송할 수 있도록 controller에서 받은 데이터를 list 형식으로 변환시켜 줍니다.

 

http://localhost:8080/blocko/board/write


  • BoardWrite.html을 통해 화면에서 게시글을 등록해봅니다.


eclipse 결과값

  • 저장을 눌렀을 시 eclipse console 화면에선 위와 같은 결과를 볼 수 있습니다.

 

http://localhost:8080/blocko/board



정상적으로 redirect 되었다면 위와 같이 write화면에서 list화면으로 이동되어 게시판 리스트에 추가된 것을 확인할 수 있습니다.

 

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를 기존에 JPA를 연동한 내역들을 위와 같이 변경해줍니다.

  • findById 대신 boardService.view()함수를 통해 contract로부터 데이터를 읽어오도록 가공 후 modelAndView에 담아줍니다.

 

/blockoBoard/src/main/java/board/board/service/BoardServiceImpl.java

  • 게시판 list와 마찬가지의 형식이며 contractQuery에 lua에서 만든 함수 이름 “selectBoardDetail”로 기입합니다.

 

http://localhost:8080/blocko/board

  • 이대로 게시글을 눌러보면 작성한 내용들을 볼 수 있는 것을 확인할 수 있습니다. 다만 조회수가 0인 문제가 있습니다.

  • 조회수가 올라가도록 만들어보겠습니다.

 

3. 조회수 올리기

/blockoBoard/src/main/resources/lua/sql_smartcontract.lua

  • contract에 해당 게시글을 boardIdx를 통해 조회하고, hitCnt를 1 올리도록 만들어 줍니다.

 

/blockoBoard/src/main/java/board/board/controller/BoardController.java

  • openBoardDetail 함수에 위와 같이 boardService.increaseHitCnt 라는 함수를 생성해줍니다.

 

/blockoBoard/src/main/java/board/board/service/BoardServiceImpl.java

  • 게시글 상세보기와 마찬가지로 boardIdx 값을 받아옵니다.

  • 게시글 작성처럼 contractExecute를 통해 contract가 실행될 수 있도록 boardIdx를 넣어줍니다.

 

eclipse 결과값

  • eclipse 실행시 contract를 2번 실행한 것을 확인할 수 있습니다.

 

aergoscan.io

  • aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.


  • aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.

  • 이때의 “2”는 boardldx 값 입니다.

 

http://localhost:8080/blocko/board/2

  • 위와 같이 조회수가 정상적으로 증가한 것을 확인할 수 있습니다.

 

4. 게시글 수정

/blokoBoard/src/main/resources/lua/sql_smartcontract.lua


  • contract에 수정할 데이터와 boardIdx를 받도록 합니다.

  • Board 컬럼에서 updatedDateTime을 만들지 않았기에 createdDateTime에 업데이트합니다.

 

/blockoBoard/src/main/java/board/board/controller/BoardController.java

  • 게시글 생성과 비슷한 형식으로 수정할 데이터들을 Map에 담아 service로 넘겨주도록 합니다.

 

/blockoBoard/src/main/java/board/board/service/BoardServiceImpl.java

  • service 역시 게시글 생성처럼 contractExecute를 사용하여 controller에서 받아온 데이터를 가공 후 ”editBoard”라는 contract 함수로 전달합니다.

 

http://localhost:8080/blocko/board/2

  • 수정하기 버튼을 눌러 줍니다.

  • 순서대로 변경하고자 하는 내용들을 입력 후 수정반영하기를 누릅니다.

 

eclipse 결과값

  • eclipse console 화면에서 contract가 execute된 것을 확인할 수 있습니다.

 

http://localhost:8080/blocko/board

  • 게시글을 수정하면 게시판 리스트 화면으로 이동되며, 바뀐 제목, 작성자, 시간을 확인할 수 있습니다.

 

http://localhost:8080/blocko/board/2

  • 상세화면으로 이동 시 내용 역시 변경된 것을 확인할 수 있습니다.

 

aergoscan.io

  • aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.

 

5. 게시글 삭제

/blokoBoard/src/main/resources/lua/sql_smartcontract.lua


  • contract에 삭제할 boardIdx를 받도록 합니다.

 

/blockoBoard/src/main/java/board/board/controller/BoardController.java

  • 기존의 게시글 삭제 함수인 deleteBoard에서 호출하는 service를 변경해줍니다.

 

/blockoBoard/src/main/java/board/board/service/BoardServiceImpl.java

  • contractExecute를 사용하여 controller에서 받아온 boardIdx를 통해 ”deleteBoard”라는 contract 함수에게 전달해줍니다.

 

http://localhost:8080/blocko/board/2

  • 삭제하기를 누릅니다.


  • 성공 시 위와 같은 알림창이 뜹니다.

 

eclipse 결과값

  • eclipse console 화면에서 contract가 execute된 것을 확인할 수 있습니다.

 

http://localhost:8080/blocko/board

  • 삭제 성공 시 게시판 리스트에서 사라진 것을 확인할 수 있습니다.

 

aergoscan.io

  • aergo scan을 통해서도 해당 트랜잭션과 contract로부터의 결과값을 확인할 수 있습니다.

 

 

이어서 이더리움 대신 아르고로 DApp 쉽게 만들기 3편에서는 게시판에 파일을 업로드하는 것과 파일 수정과 삭제를 해보겠습니다.