์๊ฐ
๋ง์นจ ํ์ฌ ์ง์ฅ์์ ์ด ๊ธฐ์ ์ ์ ํ๊ฒ ๋์์ต๋๋ค. ์ฝ๊ฐ์ ๋ฐฐ๊ฒฝ ์ง์๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค. ๋ค์ ํ์์์ ์ฐ๋ฆฌ ํ์ ๋ค์๊ณผ ๊ฐ์ ํตํฉ์ ๊ตฌ์ถํด์ผ ํ๋ค๋ ๋ง์ ๋ค์์ต๋๋ค. ์๋ ค์ง ์์คํ
. ํตํฉ์ด๋ ์ด ์ ์๋ ค์ง ์์คํ
์ด HTTP๋ฅผ ํตํด ํน์ ์๋ํฌ์ธํธ๋ก ์์ฒญ์ ๋ณด๋ด๊ณ , ์ด์ํ๊ฒ๋ ์ฐ๋ฆฌ๊ฐ SOAP ๋ฉ์์ง ํ์์ผ๋ก ์๋ต์ ๋ค์ ๋ณด๋ด๋ ๊ฒ์ ์๋ฏธํ์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ๋จ์ํ๊ณ ์ฌ์ํด ๋ณด์
๋๋ค. ์ด๊ฒ์ผ๋ก๋ถํฐ ๋น์ ์ด ํ์๋กํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค ...
ํ์คํฌ
3๊ฐ์ ์๋น์ค๋ฅผ ๋ง๋ญ๋๋ค. ๊ทธ ์ค ์ฒซ ๋ฒ์งธ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๋ฐ์ดํธ ์๋น์ค์ ๋๋ค. ์ด ์๋น์ค๋ ํ์ฌ ์์คํ ์์ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ CSV ํ์์ ํ์ผ์ ์์ฑํ์ฌ ๋ค์ ์์คํ ์ผ๋ก ์ ์กํฉ๋๋ค. ๋ ๋ฒ์งธ ์๋น์ค์ ๋์ ์ ์ ์ก๋ ํ์ผ์ ์์ ํ์ฌ ์ ํจ์ฑ์ ๊ฒ์ฌํ๊ณ FTP๋ฅผ ํตํด ํ์ผ ์ ์ฅ์์ ์ ์ฅํ๋ FTP ์ ์ก ์๋น์ค๋ผ๊ณ ํฉ๋๋ค. ์ธ ๋ฒ์งธ ์๋น์ค์ธ ์๋น์ ๋ฐ์ดํฐ ์ ์ก ์๋น์ค๋ ์ฒ์ ๋ ์๋น์ค์ ๋น๋๊ธฐ์์ผ๋ก ์๋ํฉ๋๋ค. ์์์ ์ค๋ช ํ ํ์ผ์ ์์ ํ๋ผ๋ ์์ฒญ์ ์ 1000์ ์ธ๋ถ ์์คํ ์ผ๋ก๋ถํฐ ์์ ํ๊ณ , ์ค๋น๋ ์๋ต ํ์ผ์ ๊ฐ์ ธ์ ์์ ํ ๋ค์(id, ์ค๋ช , linkToFile ํ๋ ์ ๋ฐ์ดํธ) SOAP ๋ฉ์์ง ํ์์ผ๋ก ์๋ต์ ๋ณด๋ ๋๋ค. ์ฆ, ์ ์ฒด์ ์ธ ๊ทธ๋ฆผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ฒ์ ๋ ์๋น์ค๋ ์ ๋ฐ์ดํธํ ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ ๊ฒฝ์ฐ์๋ง ์์ ์ ์์ํฉ๋๋ค. ์ธ ๋ฒ์งธ ์๋น์ค๋ ์ ๋ณด ์๋น์๊ฐ ๋ง์ ๋ถ๋น ์ฝ XNUMX๊ฑด์ ๋ฐ์ดํฐ ์์ฒญ์ด ์๊ธฐ ๋๋ฌธ์ ์ง์์ ์ผ๋ก ์๋ํฉ๋๋ค. ์๋น์ค๋ ์ง์์ ์ผ๋ก ์ ๊ณต๋๋ฉฐ ํด๋น ์ธ์คํด์ค๋ ํ ์คํธ, ๋ฐ๋ชจ, ์ฌ์ ํ๋ก๋์ , ํ๋ก๋์ ๋ฑ ๋ค์ํ ํ๊ฒฝ์ ์์นํฉ๋๋ค. ๋ค์์ ์ด๋ฌํ ์๋น์ค์ ์๋ ๋ฐฉ์์ ๋ณด์ฌ์ฃผ๋ ๋ค์ด์ด๊ทธ๋จ์ ๋๋ค. ๋ถํ์ํ ๋ณต์ก์ฑ์ ํผํ๊ธฐ ์ํด ์ผ๋ถ ์ธ๋ถ ์ฌํญ์ด ๋จ์ํ๋์์์ ์ฆ์ ๋ช ํํ ํ๊ฒ ์ต๋๋ค.
๊ธฐ์ ์ฌํ
๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ๊ณํํ ๋ ์ฐ๋ฆฌ๋ ๋จผ์ Spring ํ๋ ์์ํฌ, Nginx ๋ฐธ๋ฐ์, Postgres ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ๊ธฐํ ๊ธฐ์ ์ ์ธ ๊ฒ๋ค์ ์ฌ์ฉํ์ฌ Java๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๊ธฐ์ ์๋ฃจ์ ์ ๊ฐ๋ฐํ๋ฉด์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ๊ณ ๋ คํ ์ ์๊ฒ ๋์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ์ ์์ ์ ํน์ ๋ถ์ผ์์ ์ ํํ๋ Apache NIFI ๊ธฐ์ ์ ์ ๋ ธ์ต๋๋ค. ์ด ๊ธฐ์ ์ ํตํด ์ฐ๋ฆฌ๋ ์ด 3๊ฐ์ง ์๋น์ค๋ฅผ ์์์ฐจ๋ฆด ์ ์์๋ค๊ณ ๋ฐ๋ก ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ด ๊ธ์์๋ ์๋น์๋ฅผ ์ํ ํ์ผ ์ ์ก ์๋น์ค์ ๋ฐ์ดํฐ ์ ์ก ์๋น์ค ๊ฐ๋ฐ์ ๋ํด ์ค๋ช ํ๊ฒ ์ง๋ง, ๊ธ์ด ๋์์ด ๋๋ค๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ๋ ์๋น์ค์ ๋ํด์๋ ๊ธ์ ์ฐ๊ฒ ์ต๋๋ค.
์ด๊ฒ ๋ญ์์
NIFI๋ ๋ฐ์ดํฐ์ ๋น ๋ฅธ ๋ณ๋ ฌ ๋ก๋ฉ ๋ฐ ์ฒ๋ฆฌ, ์์ค ๋ฐ ๋ณํ์ ์ํ ๋ค์์ ํ๋ฌ๊ทธ์ธ, ๊ตฌ์ฑ ๋ฒ์ ๊ด๋ฆฌ ๋ฑ์ ์ํ ๋ถ์ฐ ์ํคํ
์ฒ์
๋๋ค. ์ข์ ๋ณด๋์ค๋ ์ฌ์ฉํ๊ธฐ๊ฐ ๋งค์ฐ ์ฝ๋ค๋ ๊ฒ์
๋๋ค. getFile, sendHttpRequest ๋ฑ๊ณผ ๊ฐ์ ๊ฐ๋จํ ํ๋ก์ธ์ค๋ ์ฌ๊ฐํ์ผ๋ก ํ์๋ ์ ์์ต๋๋ค. ๊ฐ ์ฌ๊ฐํ์ ํ๋ก์ธ์ค๋ฅผ ๋ํ๋ด๋ฉฐ, ๊ทธ ์ํธ ์์ฉ์ ์๋ ๊ทธ๋ฆผ์์ ๋ณผ ์ ์์ต๋๋ค. ํ๋ก์ธ์ค ์ค์ ์ํธ ์์ฉ์ ๋ํ ๋ณด๋ค ์์ธํ ๋ฌธ์๊ฐ ์์ฑ๋์์ต๋๋ค.
๊ธฐ์ฌ๋ฅผ ์์ฑํ๊ฒ ๋ค๋ ์์ด๋์ด๋ ์ค๋ ๊ฒ์๊ณผ ์์ ๋ ์ ๋ณด๋ฅผ ์์์ ์ธ ๊ฒ์ผ๋ก ๊ตฌ์กฐํํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ๋ฏธ๋ ๊ฐ๋ฐ์์ ์ถ์ ์กฐ๊ธ ๋ ์ฝ๊ฒ ๋ง๋ค๊ณ ์ ํ๋ ์ด๋ง ๋์ ํ์ํ์ต๋๋ค.
์
์ฌ๊ฐํ์ด ์๋ก ์ด๋ป๊ฒ ์ํธ ์์ฉํ๋์ง์ ๋ํ ์๊ฐ ๊ณ ๋ ค๋ฉ๋๋ค. ์ผ๋ฐ์ ์ธ ๋ฐฉ์์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. HTTP ์์ฒญ์ ๋ฐ์ต๋๋ค(์ด๋ก ์ ์ผ๋ก๋ ์์ฒญ ๋ณธ๋ฌธ์ ํ์ผ์ด ํฌํจ๋ฉ๋๋ค. NIFI์ ๊ธฐ๋ฅ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ด ์์์๋ ์์ฒญ์ด ๋ก์ปฌ ํ์ผ ์ ์ฅ์์์ ํ์ผ์ ์์ ํ๋ ํ๋ก์ธ์ค๋ฅผ ์์ํฉ๋๋ค). ) ๊ทธ๋ฐ ๋ค์ FH์์ ํ์ผ์ ์์ ํ๋ ํ๋ก์ธ์ค์ FTP๋ฅผ ํตํด FH๋ก ์ด๋ํ๋ ํ๋ก์ธ์ค๋ฅผ ๋ณํํ์ฌ ์์ฒญ์ด ์์ ๋์๋ค๋ ์๋ต์ ๋ค์ ๋ณด๋ ๋๋ค. ํ๋ก์ธ์ค๊ฐ ์์ flowFile์ ํตํด ์๋ก ์ํธ ์์ฉํ๋ค๋ ์ ์ ๋ช ํํ ํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ด๋ ์์ฑ๊ณผ ์ฝํ ์ธ ๋ฅผ ์ ์ฅํ๋ NIFI์ ๊ธฐ๋ณธ ์ํฐํฐ์ ๋๋ค. ์ฝํ ์ธ ๋ ์คํธ๋ฆผ ํ์ผ๋ก ํ์๋๋ ๋ฐ์ดํฐ์ ๋๋ค. ์ฆ, ๋๋ต์ ์ผ๋ก ๋งํ๋ฉด ํ ์คํ์ด์์ ํ์ผ์ ๋ฐ์ ๋ค๋ฅธ ์คํ์ด๋ก ์ ์กํ๋ฉด ํด๋น ์ฝํ ์ธ ๊ฐ ๊ทํ์ ํ์ผ์ด ๋ฉ๋๋ค.
๋ณด์๋ค์ํผ, ์ด ๊ทธ๋ฆผ์ ์ผ๋ฐ์ ์ธ ํ๋ก์ธ์ค๋ฅผ ๋ณด์ฌ์ค๋๋ค. HandleHttpRequest - ์์ฒญ์ ์๋ฝํ๊ณ , InstallText - ์๋ต ๋ณธ๋ฌธ์ ์์ฑํ๊ณ , HandleHttpResponse - ์๋ต์ ๋ณด๋ ๋๋ค. FetchFile - ํ์ผ ์ ์ฅ์์์ ํ์ผ์ ๋ฐ์ ์ ์ฌ๊ฐํ PutSftp๋ก ์ ์กํฉ๋๋ค. - ์ด ํ์ผ์ FTP์ ์ง์ ๋ ์ฃผ์์ ๋ฃ์ต๋๋ค. ์ด์ ์ด ๊ณผ์ ์ ๋ํด ์์ธํ ์์๋ณด์ธ์.
์ด ๊ฒฝ์ฐ ์์ฒญ์ ๋ชจ๋ ๊ฒ์ ์์์ ๋๋ค. ๊ตฌ์ฑ ๋งค๊ฐ๋ณ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
StandardHttpContextMap์ ์ ์ธํ๊ณ ์ฌ๊ธฐ์ ์๋ ๋ชจ๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ์ด๋ ์์ฒญ์ ๋ณด๋ด๊ณ ๋ฐ์ ์ ์๋ ์ผ์ข
์ ์๋น์ค์
๋๋ค. ๋ ์์ธํ ๊ทธ๋ฆฌ๊ณ ์์ ๋ฅผ ํตํด์๋ ๋ค์์ ๋ณผ ์ ์์ต๋๋ค.
๋ค์์ผ๋ก ์ฌ๊ฐํ์ RefreshText ๊ตฌ์ฑ ๋งค๊ฐ๋ณ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. replacementValue์ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ด๋ ์๋ต ํ์์ผ๋ก ์ฌ์ฉ์์๊ฒ ๋ฐํ๋ฉ๋๋ค. ์ค์ ์์ ๋ก๊น ์์ค์ ์กฐ์ ํ ์ ์๊ณ , {nifi์ ์์ถ์ ํผ ์์น}/nifi-1.9.2/logs ๋ก๊ทธ๋ฅผ ๋ณผ ์ ์์ผ๋ฉฐ, ์คํจ/์ฑ๊ณต ๋งค๊ฐ๋ณ์๋ ์์ต๋๋ค. ์ด๋ฌํ ๋งค๊ฐ๋ณ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ก์ธ์ค๋ฅผ ์ ์ฒด์ ์ผ๋ก ์กฐ์ ํ ์ ์์ต๋๋ค. . ์ฆ, ํ ์คํธ ์ฒ๋ฆฌ๊ฐ ์ฑ๊ณตํ ๊ฒฝ์ฐ์๋ ์ฌ์ฉ์์๊ฒ ์๋ต์ ๋ณด๋ด๋ ํ๋ก์ธ์ค๊ฐ ํธ์ถ๋๊ณ , ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ์คํจํ ํ๋ก์ธ์ค๋ฅผ ๊ฐ๋จํ ๊ธฐ๋กํ๊ฒ ๋ฉ๋๋ค.
์๋ต์ด ์ฑ๊ณต์ ์ผ๋ก ์์ฑ๋์์ ๋์ ์ํ๋ฅผ ์ ์ธํ๊ณ HandleHttpResponse ์์ฑ์๋ ํน๋ณํ ํฅ๋ฏธ๋ก์ด ๋ด์ฉ์ด ์์ต๋๋ค.
์์ฒญ๊ณผ ์๋ต์ ์ ๋ฆฌํ์ต๋๋ค. ์ด์ ํ์ผ ์์ ๋ฐ FTP ์๋ฒ์ ๋ฐฐ์นํ๋ ๋จ๊ณ๋ก ๋์ด๊ฐ๋๋ค. FetchFile - ์ค์ ์ ์ง์ ๋ ๊ฒฝ๋ก์์ ํ์ผ์ ๋ฐ์ ๋ค์ ํ๋ก์ธ์ค๋ก ์ ๋ฌํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ PutSftp ์ฌ๊ฐํ์ ํ์ผ์ ํ์ผ ์ ์ฅ์์ ๋ฐฐ์นํฉ๋๋ค. ์๋์์ ๊ตฌ์ฑ ๋งค๊ฐ๋ณ์๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
๊ฐ ์ฌ๊ฐํ์ด ์คํ๋์ด์ผ ํ๋ ๋ณ๋์ ํ๋ก์ธ์ค๋ผ๋ ์ฌ์ค์ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๋ณต์กํ ์ฌ์ฉ์ ์ ์๊ฐ ํ์ํ์ง ์์ ๊ฐ์ฅ ๊ฐ๋จํ ์๋ฅผ ์ดํด๋ณด์์ต๋๋ค. ๋ค์์ผ๋ก, ๊ทธ๋ฃจ๋ธ์ ์ฝ๊ฐ์ ๊ธ์ ์ฐ๋ ์ข ๋ ๋ณต์กํ ๊ณผ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ ๋ณต์กํ ์
SOAP ๋ฉ์์ง๋ฅผ ์์ ํ๋ ๊ณผ์ ์ผ๋ก ์ธํด ์๋น์์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ์๋น์ค๊ฐ ์กฐ๊ธ ๋ ๋ณต์กํด์ก์ต๋๋ค. ์ผ๋ฐ์ ์ธ ํ๋ก์ธ์ค๋ ์๋ ๊ทธ๋ฆผ์ ๋์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ์์ด๋์ด๋ ํน๋ณํ ๋ณต์กํ์ง ์์ต๋๋ค. ์๋น์๋ก๋ถํฐ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ค๋ ์์ฒญ์ ๋ฐ๊ณ ๋ฉ์์ง๋ฅผ ๋ฐ์๋ค๋ ์๋ต์ ๋ณด๋ด๊ณ ์๋ต ํ์ผ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ํ ๋ค์ ํน์ ๋ ผ๋ฆฌ๋ก ํธ์งํ ๋ค์ SOAP ๋ฉ์์ง ํ์์ผ๋ก ํ์ผ์ ์๋น์์๊ฒ ์๋ฒ๋ก ์ ์กํ์ต๋๋ค.
์์์ ๋ณธ ์ฌ๊ฐํ์ ๋ค์ ์ค๋ช ํ ํ์๋ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฐ๋ก ์๋ก์ด ์ฌ๊ฐํ์ผ๋ก ๋์ด๊ฐ๊ฒ ์ต๋๋ค. ํ์ผ์ ํธ์งํด์ผ ํ๋๋ฐ ์ผ๋ฐ RectText ์ ํ ์ฌ๊ฐํ์ด ์ ํฉํ์ง ์์ ๊ฒฝ์ฐ ์คํฌ๋ฆฝํธ๋ฅผ ์ง์ ์์ฑํด์ผ ํฉ๋๋ค. ์ด๋ ExecuteGroogyScript ์ฌ๊ฐํ์ ์ฌ์ฉํ์ฌ ์ํํ ์ ์์ต๋๋ค. ํด๋น ์ค์ ์ ์๋์ ๋์ ์์ต๋๋ค.
์ด ์ฌ๊ฐํ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๋ ๋ฐ๋ ๋ ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋ ํ์ผ์ ๋ค์ด๋ก๋ํ๋ ๊ฒ์ ๋๋ค. ๋ ๋ฒ์งธ๋ scriptBody์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ๋ ๊ฒ์ ๋๋ค. ๋ด๊ฐ ์๋ ํ, ExecuteScript ์คํ์ด๋ ์ฌ๋ฌ ์ธ์ด๋ฅผ ์ง์ํฉ๋๋ค. ๊ทธ ์ค ํ๋๋ ๊ทธ๋ฃจ๋น์ ๋๋ค. ๋๋ Java ๊ฐ๋ฐ์๋ฅผ ์ค๋ง์ํฌ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌํ ์ฌ๊ฐํ์์๋ Java๋ก ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ ๋ง๋ก ์ํ๋ ์ฌ๋๋ค์ ์์ ๋ง์ ๋ง์ถคํ ์ฌ๊ฐํ์ ๋ง๋ค์ด NIFI ์์คํ ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์ด ์ ์ฒด ์์ ์๋ ํฌ๋ฒ๋ฆฐ๊ณผ ํจ๊ป ๊ฝค ๊ธด ์ถค์ด ์๋ฐ๋๋๋ฐ, ์ด ๊ธฐ์ฌ์์๋ ๋ค๋ฃจ์ง ์๊ฒ ์ต๋๋ค. ์ ๋ ๊ทธ๋ฃจ๋น ์ธ์ด๋ฅผ ์ ํํ์ต๋๋ค. ๋ค์์ SOAP ๋ฉ์์ง์ ID๋ฅผ ์ ์ง์ ์ผ๋ก ์ ๋ฐ์ดํธํ๋ ํ ์คํธ ์คํฌ๋ฆฝํธ์ ๋๋ค. ์ฃผ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. flowFile์์ ํ์ผ์ ๊ฐ์ ธ์ ์ ๋ฐ์ดํธํฉ๋๋ค. ํ์ผ์ ๋ค์ ๊ฑฐ๊ธฐ์ ๋ฃ์ด ์ ๋ฐ์ดํธํด์ผ ํ๋ค๋ ์ ์ ์์ง ๋ง์ธ์. ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํฌํจ๋์ง๋ ์๋๋ค๋ ์ ๋ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค. libs ์ค ํ๋๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ ๋ค๋ฅธ ๋จ์ ์ ์ด ์ฌ๊ฐํ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋๋ฒ๊น ํ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต๋ค๋ ๊ฒ์ ๋๋ค. NIFI JVM์ ์ฐ๊ฒฐํ๊ณ ๋๋ฒ๊น ํ๋ก์ธ์ค๋ฅผ ์์ํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ์ ๋ ๋ก์ปฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํ๊ณ ์ธ์ ์์ ํ์ผ ์์ ์ ์๋ฎฌ๋ ์ด์ ํ์ต๋๋ค. ๋ก์ปฌ์์๋ ๋๋ฒ๊น ์ ํ์ต๋๋ค. ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ ๋ ๋ํ๋๋ ์ค๋ฅ๋ Google์์ ๋งค์ฐ ์ฝ๊ฒ ํ์ธํ ์ ์์ผ๋ฉฐ NIFI ์์ฒด์์ ๋ก๊ทธ์ ๊ธฐ๋ก๋ฉ๋๋ค.
import org.apache.commons.io.IOUtils
import groovy.xml.XmlUtil
import java.nio.charset.*
import groovy.xml.StreamingMarkupBuilder
def flowFile = session.get()
if (!flowFile) return
try {
flowFile = session.write(flowFile, { inputStream, outputStream ->
String result = IOUtils.toString(inputStream, "UTF-8");
def recordIn = new XmlSlurper().parseText(result)
def element = recordIn.depthFirst().find {
it.name() == 'id'
}
def newId = Integer.parseInt(element.toString()) + 1
def recordOut = new XmlSlurper().parseText(result)
recordOut.Body.ClientMessage.RequestMessage.RequestContent.content.MessagePrimaryContent.ResponseBody.id = newId
def res = new StreamingMarkupBuilder().bind { mkp.yield recordOut }.toString()
outputStream.write(res.getBytes(StandardCharsets.UTF_8))
} as StreamCallback)
session.transfer(flowFile, REL_SUCCESS)
}
catch(Exception e) {
log.error("Error during processing of validate.groovy", e)
session.transfer(flowFile, REL_FAILURE)
}
์ฌ์ค ๊ด์ฅ์ ์ปค์คํฐ๋ง์ด์ง์ ์ฌ๊ธฐ์ ๋์ด ๋ฉ๋๋ค. ๋ค์์ผ๋ก, ์ ๋ฐ์ดํธ๋ ํ์ผ์ ์๋ฒ๋ก ํ์ผ ์ ์ก์ ๋ด๋นํ๋ ์คํ์ด๋ก ์ ์ก๋ฉ๋๋ค. ๋ค์์ ์ด ์ฌ๊ฐํ์ ๋ํ ์ค์ ์ ๋๋ค.
SOAP ๋ฉ์์ง๊ฐ ์ ์ก๋๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋์ ์๋๋ค. ๋ค์์ผ๋ก ์ด๊ฒ์ด SOAP์์ ํ์ํด์ผ ํฉ๋๋ค.
ํธ์คํธ ๋ฐ ์์
(soapAction)๊ณผ ๊ฐ์ ์ฌ๋ฌ ์์ฑ์ ์ถ๊ฐํฉ๋๋ค. ์ ์ฅํ๊ณ ํ์ธํฉ๋๋ค. SOAP ์์ฒญ์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ณผ ์ ์์ต๋๋ค.
NIFI ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ์ต์ ์ ์ดํด๋ณด์์ต๋๋ค. ๊ทธ๋ค์ ์ด๋ป๊ฒ ์ํธ ์์ฉํ๋ฉฐ ์ค์ ์ด์ ์ ๋ฌด์์ ๋๊น? ๊ณ ๋ ค๋ ์ฌ๋ก๋ ํ ์คํธ ์ฌ๋ก์ด๋ฉฐ ์ค์ ๋ก ์ ํฌ์์ ๋ฐ์ํ๋ ์ํฉ๊ณผ ์ฝ๊ฐ ๋ค๋ฆ ๋๋ค. ์ด ๊ธ์ด ๊ฐ๋ฐ์๋ค์๊ฒ ์กฐ๊ธ์ด๋๋ง ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ด์ฌ์ ๊ฐ์ ธ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ง๋ฌธ์ด ์์ผ๋ฉด ๊ธ์ ์ฐ์ธ์. ๋๋ ๋๋ตํ๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ด๋ค.
์ถ์ฒ : habr.com