10. Coinstack Permission

๋น„ํŠธ์ฝ”์ธ์€ ๊ณต๊ฐœ๋œ ํ™˜๊ฒฝ์„ ์ง€ํ–ฅํ•˜์—ฌ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ˆ„๊ตฌ๋‚˜ ํŠธ๋žœ์žญ์…˜์„ ์ „์†ก ํ•  ์ˆ˜ ์žˆ๊ณ  ํ’€๋…ธ๋“œ๋ฅผ ์šด์˜ํ•˜๊ฑฐ๋‚˜ ๋งˆ์ด๋‹์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๊ธฐ์—…์˜ ํ”„๋ผ์ด๋น— ๋„คํŠธ์›Œํฌ ๋“ฑ ๋น„๊ณต๊ฐœ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” ์ œํ•œ๋œ ๊ถŒํ•œ์„ ํŠน์ • ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€์—ฌํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์š”๊ตฌ์— ๋”ฐ๋ผ ์ฝ”์ธ์Šคํƒ์—์„œ๋Š” ํŠน์ • ๋น„ํŠธ์ฝ”์ธ ์ฃผ์†Œ์— ์—ญํ• ์„ ๋ถ€์—ฌํ•˜์—ฌ ๊ถŒํ•œ์„ ์ œํ•œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

1. ์‚ฌ์ „ ์š”๊ตฌ ์‚ฌํ•ญ

์•„๋ž˜์™€ ๊ฐ™์€ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ผ์ด๋น— ์ฝ”์ธ์Šคํƒ์˜ ๊ฒฝ์šฐ์—๋งŒ ๊ถŒํ•œ ์„ค์ • ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”์ธ์Šคํƒ ์„œ๋ฒ„์˜ ์ƒ์„ธ ์„ค์ • ์ •๋ณด๋Š” ์ฝ”์ธ์Šคํƒ ์„ค์น˜ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

  • privnet=1: ํ”„๋ผ์ด๋น— ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ผ์ด๋น— ๋„คํŠธ์›Œํฌ์ธ ๊ฒฝ์šฐ์—๋งŒ ์—ญํ•  ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • privnetgenesis={serialized genesis block}: ์ฐธ์—ฌํ•˜๋ ค๋Š” ๋„คํŠธ์›Œํฌ์˜ ์ง๋ ฌํ™”๋œ ์ œ๋„ค์‹œ์Šค ๋ธ”๋ก(๋ธ”๋ก ๋†’์ด๊ฐ€ 0์ธ ์ œ์ผ ์ฒ˜์Œ ๋ธ”๋ก)์„ ๊ธฐ์žฌํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„๋กœ ์ œ๊ณตํ•˜๋Š” gengenesis๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์— ์ตœ์ดˆ์˜ admin์œผ๋กœ ์‚ฌ์šฉํ•  ์ฃผ์†Œ์˜ ๊ฐœ์ธํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œ๋„ค์‹œ์Šค ๋ธ”๋ก์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • privnetnodekey={privatekeyWIF}: ๋…ธ๋“œ์— ๋ถ€์—ฌํ•  ๊ฐœ์ธํ‚ค๋กœ ๋…ธ๋“œ์— ๊ณ ์œ ํ•œ ID๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋…ธ๋“œ๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2. ๊ฐœ์š”

ํ”„๋ผ์ด๋น— ์ฝ”์ธ์Šคํƒ์—์„œ๋Š” ํ•˜๋‚˜์˜ ๋น„ํŠธ์ฝ”์ธ ์ฃผ์†Œ์— ์ด 4๊ฐ€์ง€์˜ ์—ญํ• ์„ ๋ถ€์—ฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์ฒด๊ฐ€ ์‚ฌ์šฉ์ž๋‚˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ผ ๊ฒฝ์šฐ Admin๊ณผ Writer ์—ญํ• ์„ ๋ถ€์—ฌํ•˜์—ฌ ๊ฐ๊ฐ ๊ณ„์ •๊ด€๋ฆฌ์™€ ํŠธ๋žœ์žญ์…˜์˜ ์“ฐ๊ธฐ ๊ถŒํ•œ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ญํ• ๋ณ„ ์ƒ์„ธ ์„ค๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Admin (Authority Manager): ์—ญํ• ์„ ์„ค์ •/๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Admin์„ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ๋ชจ๋“  ์—ญํ• (Writer, Miner, Node)์„ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ์—ญํ• ์˜ ๊ถŒํ•œ๋„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ฆ‰, ํŠธ๋žœ์žญ์…˜์„ ์“ฐ๊ณ  ๋ธ”๋ก์„ ์ƒ์„ฑํ•˜๊ณ  ํ”„๋ผ์ด๋น— ๋„คํŠธ์›Œํฌ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Writer (Transaction Writer): ํŠธ๋žœ์žญ์…˜ ์ƒ์„ฑ ๋ฐ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์—ญํ• ์ด ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ํŠธ๋žœ์žญ์…˜ ์“ฐ๊ธฐ ์—ญํ• ์ด ์—†๋Š” ์ฃผ์†Œ์˜ ๊ฐœ์ธํ‚ค๋กœ ์„œ๋ช…ํ•˜์—ฌ ์ „์†กํ•œ ํŠธ๋žœ์žญ์…˜์€ ์ฝ”์ธ์Šคํƒ ๋…ธ๋“œ์—์„œ ์ˆ˜์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์ฒด๊ฐ€ ๋…ธ๋“œ์ธ ๊ฒฝ์šฐ Miner์™€ Node ์—ญํ• ์„ ๋ถ€์—ฌํ•˜์—ฌ ๋…ธ๋“œ์˜ ๊ถŒํ•œ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์—ฌ๊ธฐ์„œ์˜ ์ฃผ์†Œ๋Š” ๋…ธ๋“œ์˜ ์„ค์ •ํŒŒ์ผ์˜ privnetnodekey์— ๊ธฐ์žฌ๋˜์–ด ์žˆ๋Š” ๊ฐœ์ธํ‚ค์™€ ๋Œ€์‘ํ•˜๋Š” ์ฃผ์†Œ๋ฅผ ์ง€์นญํ•ฉ๋‹ˆ๋‹ค.)

  • Miner (Block Miner): ๋ธ”๋ก์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์—ญํ• ์ด ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์— Miner ์—ญํ• ์ด ์—†๋Š” ๋…ธ๋“œ๊ฐ€ ๋งˆ์ด๋‹ํ•œ ๋ธ”๋ก์€ ๋‹ค๋ฅธ ์ฝ”์ธ์Šคํƒ ๋…ธ๋“œ๋“ค์ด ์ˆ˜์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • Node (Network Participant): ์ด ์—ญํ• ์ด ์žˆ๋Š” ๋…ธ๋“œ๋งŒ ํ”„๋ผ์ด๋น— ๋„คํŠธ์›Œํฌ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์—ญํ• ์ด ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์— Node ์—ญํ• ์ด ์—†๋Š” ๋…ธ๋“œ๋Š” ์ฝ”์ธ์Šคํƒ ๋…ธ๋“œ์— ์ ‘์† ๋ฐ ๋™๊ธฐํ™”๋ฅผ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์—ญํ• ์„ ๋ถ€์—ฌํ•˜๋Š” ๋ณด์•ˆ์ƒ ๊ฐ€์žฅ ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์€ ์—ญํ• ๋ณ„๋กœ ์ฃผ์†Œ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์ƒ์„ฑํ•˜์—ฌ ํ•˜๋‚˜์˜ ์ฃผ์†Œ์— ํ•˜๋‚˜์˜ ์—ญํ• ๋งŒ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ, ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์ฃผ์†Œ ํ•˜๋‚˜์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์—ญํ• ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด Node์™€ Miner ๊ถŒํ•œ์ด ํ™œ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ์ฃผ์†Œ ํ•˜๋‚˜์— Node ์™€ Miner ์—ญํ• ์„ ๋™์‹œ์— ๋ถ€์—ฌํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•ด๋‹น ๋…ธ๋“œ๋Š” ํ”„๋ผ์ด๋น— ๋„คํŠธ์›Œํฌ์— ์ ‘์†ํ•ด์—ฌ ์ž์‹ ์ด ์ƒ์„ฑํ•œ ๋ธ”๋ก์„ ์ „ํŒŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Admin ์—ญํ• ์„ ๊ฐ€์ง€๋Š” ์ฃผ์†Œ๋Š” ํ™˜๊ฒฝ ์„ค์ •์˜ ํŽธ์˜์„ฑ์„ ์œ„ํ•ด ๋ชจ๋“  ๊ถŒํ•œ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์•ž์„œ ์„ค๋ช…ํ•œ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ์—์„œ์˜ grant, revoke๋ฅผ ์‚ฌ์šฉํ•œ ํ•จ์ˆ˜ ์ˆ˜ํ–‰ ๊ถŒํ•œ๊ด€๋ฆฌ๋Š” Admin์ด ์•„๋‹Œ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ๋ฅผ ์ •์˜ํ•œ ์ฃผ์†Œ์˜ ์†Œ์œ ์ž๊ฐ€ ์„ค์ • ๊ฐ€๋Šฅํ•จ์œผ๋กœ ์œ ์˜ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

3. ์—ญํ•  ํ™œ์„ฑํ™” / ๋น„ํ™œ์„ฑํ™”

๊ฐ€์žฅ ์ฒ˜์Œ ์ฝ”์ธ์Šคํƒ์„ ๊ตฌ๋™ํ•˜์—ฌ ์ œ๋„ค์‹œ์Šค ๋ธ”๋ก๋งŒ ์กด์žฌํ•  ๋•Œ๋Š” ์œ„์˜ ์—ญํ• ๋“ค ์ค‘ Admin ์—ญํ• ๋งŒ ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ๊ณ  ํ•˜๋‚˜์˜ Admin ์ฃผ์†Œ๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋‚˜๋จธ์ง€ ์—ญํ• ๋“ค(Writer, Miner, Node)์€ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ดˆ๊ธฐ ํ™˜๊ฒฝ ๊ตฌ์„ฑ ์‹œ์˜ ํŽธ์˜์„ฑ๊ณผ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

3.1. ์—ญํ•  ํ™œ์„ฑํ™” ํŠธ๋žœ์žญ์…˜ ์ƒ์„ฑ

์—ญํ• ์„ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™” ํ•˜๊ธฐ์œ„ํ•ด์„œ๋Š” Admin ๊ถŒํ•œ์„ ๊ฐ€์ง„ ๊ฐœ์ธํ‚ค๋กœ SDK์—์„œ ์ œ๊ณตํ•˜๋Š” ์—ญํ•  ํ™œ์„ฑํ™”์šฉ ํŠธ๋žœ์žญ์…˜ ๋นŒ๋”(EnableRoleBuilder)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์„ ์ƒ์„ฑ, ๋„คํŠธ์›Œํฌ์— ์ „ํŒŒํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์˜ ์˜ˆ์ œ๋Š” java SDK๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ผ์ด๋น— ๋„คํŠธ์›Œํฌ์˜ Miner, Node ์—ญํ• ์„ ํ™œ์„ฑํ™”, Writer๋Š” ๋น„ํ™œ์„ฑํ™” ์‹œํ‚ค๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ Admin ์—ญํ• ์€ ํ•ญ์ƒ ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

JAVA

์ผ๋ฐ˜์ ์ธ ํŠธ๋žœ์žญ์…˜๊ณผ๋Š” ๋‹ฌ๋ฆฐ ์—ญํ•  ๊ด€๋ฆฌ์— ์—ฐ๊ด€๋œ ํŠธ๋žœ์žญ์…˜๋“ค์€ ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜์ด ๋ธ”๋ก์— ํฌํ•จ ๋œ ํ›„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Admin ๊ถŒํ•œ์ด ์—†๋Š” ๊ฐœ์ธํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ๋“ฑ ์—ญํ•  ์„ค์ • ํŠธ๋žœ์žญ์…˜์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ํŠธ๋žœ์žญ์…˜์ด ๋ธ”๋ก์— ํฌํ•จ๋ฌ๋”๋ผ๋„ ์„ค์ •์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ์„œ๋ฒ„์˜ ๋กœ๊ทธ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

3.2. ํ™œ์„ฑ๋œ ์—ญํ•  ์กฐํšŒ

ํ˜„์žฌ ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ๋Š” ์—ญํ• ๋“ค์„ ํ™•์ธํ•ด ๋ณด๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

JAVA

์•ž์„œ ์—ญํ•  ํ™œ์„ฑํ™” ํŠธ๋žœ์žญ์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰๋œ ๊ฒฝ์šฐ, ์ˆ˜ํ–‰๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

REST API

๊ฒฐ๊ณผ ๊ฐ’์€ JSON ํ˜•์‹์œผ๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

REST API๋กœ ์กฐํšŒํ•œ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๋Š” 4๊ฐœ์˜ bit๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. 1(0001)์€ Admin, 2(0010)๋Š” Writer, 4(0100)๋Š” Miner, 8(1000)์€ Node ๊ถŒํ•œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. bit์˜ ์กฐํ•ฉ์œผ๋กœ ์—ฌ๋Ÿฌ๊ถŒํ•œ์„ ์˜๋ฏธํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ ์˜ˆ๋ฅผ๋“ค๋ฉด 12(1100)์€ Miner์™€ Node์˜ ๊ถŒํ•œ์ด ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๋‹จ, Admin์€ ํ•ญ์ƒ ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 0์œผ๋กœ ํ‘œ๊ธฐ๋ฉ๋‹ˆ๋‹ค.

4. ์—ญํ•  ์„ค์ •

SDK๋ฅผ ์ด์šฉํ•˜์—ฌ ํŠน์ • ์ฃผ์†Œ์— ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

4.1. ์—ญํ•  ์„ค์ • ํŠธ๋žœ์žญ์…˜ ์ƒ์„ฑ

ํŠน์ • ์ฃผ์†Œ์— ์—ญํ• ์„ ์„ค์ •ํ•  ๋•Œ๋Š” ์—ญํ• ์„ ์„ค์ •ํ•˜๋Š” ๋งˆ์ปค๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ ํŠธ๋žœ์žญ์…˜์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฝ”์ธ์Šคํƒ SDK์—์„œ๋Š” ์ด๋ฅผ ์‰ฝ๊ฒŒ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์—ญํ•  ์„ค์ • ํŠธ๋žœ์žญ์…˜ ๋นŒ๋”(SetRoleBuilder)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” SDK๋ฅผ ์ด์šฉํ•ด ํŠน์ • ์ฃผ์†Œ์— Miner, Node ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๊ณ  Admin, Writer ์—ญํ• ์„ ์ œ๊ฑฐํ•˜๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค.

JAVA

๋จผ์ € Role ํด๋ž˜์Šค ์ƒ์„ฑ์ž์— ๋ถ€์—ฌํ•  ์—ญํ• ์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๊ฐœ์˜ ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๋ ค๋ฉด OR ์—ฐ์‚ฐ์ž๋กœ ์—ฌ๋Ÿฌ ์—ญํ• ์„ ์กฐํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  SetRoleBuilder์— Role๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๊ณ  ํ•ด๋‹น Role์„ ๋ถ€์—ฌํ•  ๋Œ€์ƒ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ํ›„ Admin ์—ญํ• ์„ ๊ฐ€์ง„ ๊ฐœ์ธํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์„ ์ƒ์„ฑํ•˜์—ฌ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์—ญํ• ์€ ํŠธ๋žœ์žญ์…˜์ด ๋ธ”๋ก์— ํฌํ•จ๋œ ๋’ค ๋ชจ๋“  ๋…ธ๋“œ์— ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.

Admin์€ ๋‹ค๋ฅธ ์ฃผ์†Œ์— Admin ๊ถŒํ•œ์„ ๋ถ€์—ฌ/๋ฐ•ํƒˆ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์‹ฌ์ง€์–ด ์ž๊ธฐ ์ž์‹ ์˜ ๊ถŒํ•œ๋„ ์—†์—˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ถŒํ•œ ๋ถ€์—ฌ๋Š” Set ํ˜•์‹์œผ๋กœ ๊ธฐ์กด์˜ ๊ถŒํ•œ์— ์ถ”๊ฐ€๊ฐ€ ์•„๋‹Œ ๋ฎ์–ด์“ฐ๋Š” ํ˜•ํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์— ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ์กด์˜ Admin์— new Role(Role.WRITER) ๊ฐ™์ด ์—ญํ• ์„ ํ• ๋‹นํ•˜๋ฉด Admin ๊ถŒํ•œ์ด ์‚ฌ๋ผ์ง€๊ณ  Writer ๊ถŒํ•œ๋งŒ ๋‚จ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํŠน์ • ์—ญํ• ์ด ๋น„ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ์–ด๋„ ํŠน์ • ์ฃผ์†Œ์— ํ•ด๋‹น ์—ญํ• ์„ ๋ฏธ๋ฆฌ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด Node ์—ญํ• ์ด ๋น„ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ์–ด๋„ ๋…ธ๋“œ๋“ค์˜ ์ฃผ์†Œ์— ๋ฏธ๋ฆฌ Node ์—ญํ• ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Node ์—ญํ• ์„ ๋ฏธ๋ฆฌ ๋…ธ๋“œ๋“ค์— ๋ถ€์—ฌํ•˜์ง€ ์•Š๊ณ  Node ์—ญํ• ์„ ํ™œ์„ฑํ™” ์‹œํ‚ฌ ๊ฒฝ์šฐ ์„œ๋กœ๊ฐ„์— Node ๊ถŒํ•œ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๋…ธ๋“œ๋“ค์ด ์„œ๋กœ ์—ฐ๊ฒฐ์„ ๋Š์–ด ๋ธ”๋ก์ด ์ „ํŒŒ๊ฐ€ ์•ˆ๋˜๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Miner์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฏธ๋ฆฌ ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๊ณ  ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™” ์‹œ์ผœ์•ผ ๋งˆ์ด๋„ˆ๊ฐ€ ๊ถŒํ•œ ์ƒ์„ฑ ํŠธ๋žœ์žญ์…˜์„ ๋ธ”๋ก์— ํฌํ•จ, ์ „ํŒŒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4.2. ํŠน์ • ์ฃผ์†Œ์˜ ์—ญํ•  ์กฐํšŒ

ํŠน์ • ์ฃผ์†Œ์— ๋ถ€์—ฌ๋œ ์—ญํ• ์„ ์กฐํšŒํ•  ๋•Œ๋Š” CoinStackClient์˜ getRole ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๊ถŒํ•œ ์กฐํฌ ์˜ˆ์ž…๋‹ˆ๋‹ค.

JAVA

์•ž์„œ ์—ญํ•  ์„ค์ • ํŠธ๋žœ์žญ์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰๋œ ๊ฒฝ์šฐ, ์ˆ˜ํ–‰๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

REST API

๊ฒฐ๊ณผ ๊ฐ’์€ JSON ํ˜•์‹์œผ๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

permission ์ด๋ผ๋Š” ํ‚ค์— ์กฐํšŒ๋ฅผ ์š”์ฒญํ•œ ์ฃผ์†Œ์˜ ์—ญํ• ๊ฐ’์ด ํ• ๋‹น๋˜์–ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

4.3. ์—ญํ• ์ด ์„ค์ •๋œ ์ „์ฒด ์ฃผ์†Œ ์กฐํšŒ

ํ˜„์žฌ ์—ญํ• ์ด ์ •์˜๋œ ๋ชจ๋“  ์ฃผ์†Œ์™€ ๊ฐ ์ฃผ์†Œ์˜ ์—ญํ• ์„ ์กฐํšŒํ•ด ๋ณด๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์กฐํšŒํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JAVA

์ˆ˜ํ–‰๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

REST API

๊ฒฐ๊ณผ ๊ฐ’์€ JSON ํ˜•์‹์œผ๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋„คํŠธ์›Œํฌ์— ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” ์ „์ฒด ์—ญํ• ์˜ ๋ชฉ๋ก์ด ์ฃผ์†Œ๋ฅผ ํ‚ค๋กœ, ์—ญํ• ์„ ๊ฐ’์œผ๋กœ ํ•˜์—ฌ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

Last updated