2023. 3. 17. 22:27ใ๊ฐ๋ ์ ๋ฆฌ ์์ ์ค/Java
์ ์์ ๋ถ ํ์ค ํ๋ ์์ํฌ์ ์๋ ํต์ฌ ๊ธฐ์ ์ธํธ : ์คํ๋ง + ๋ง์ด๋ฐํฐ์ค
COUPANG
www.coupang.com
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
๐ ๋ชฉ์ฐจ
1. [Spring Boot] Discord Bot(๋์ค์ฝ๋ ๋ด) ๋ง๋ค๊ธฐ
2. [Spring Boot] Discord Bot(๋์ค์ฝ๋ ๋ด) ๋ง๋ค๊ธฐ - Spring Boot(์คํ๋ง ๋ถํธ)๋ฅผ ์ด์ฉํ ๊ฐ๋จํ API ๋ง๋ค๊ธฐ feat.Mybatis(๋ง์ด๋ฐํฐ์ค)
3. [Spring Boot] Discord Bot(๋์ค์ฝ๋ ๋ด) ๋ง๋ค๊ธฐ - JAVA๋ฅผ ์ด์ฉํ API ํธ์ถ
๐ ์์ํ๊ธฐ ์ ์
๐ฝ ๊ฐ์
์๋ ํ์ธ์? ์ฃผ๋์ ๋๋ค.
์ด๋ฒ์๋ ์ง๋ ์๊ฐ์ ๊ฐ๋จํ ๋ชฉ๋ก ์กฐํ๋ฅผ ํ ์ ์๊ฒ ๋ง๋ API๋ฅผ JAVA(์๋ฐ)๋ฅผ ์ด์ฉํด์ ํธ์ถํ ์ ์๋ ์ฝ๋๋ฅผ ๋ง๋ค์ด ๋ณด๋ ค๊ณ ํด์.
์ด๋ ๊ฒ ๋ง๋ค์ด์ผ ๋์ค์ฝ๋ ๋ด์ ํตํด ํด๋น API๋ฅผ ํธ์ถํ ์ ์๊ธฐ ๋๋ฌธ์ด์์.
API๊ฐ ํ์ํ์ ๋ถ๋ค์ ์ด ๊ณณ์ ๊ด์ฌ์ ์ฃผ์ธ์.
All in One Java ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ : Spring Hibernate MyBatis๋ฅผ ํ์ฉํ
COUPANG
www.coupang.com
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
GitHub - junyharang-personal-project/juny-discord-bot-test: JDA๋ฅผ ์ด์ฉํ Spring Boot Discord Bot ์ฐ์ต์ด์์.
JDA๋ฅผ ์ด์ฉํ Spring Boot Discord Bot ์ฐ์ต์ด์์. Contribute to junyharang-personal-project/juny-discord-bot-test development by creating an account on GitHub.
github.com
๐ฝ HTTP Util
์ต์ด JAVA๋ฅผ ์ด์ฉํด์ API๋ฅผ ํธ์ถํ๊ธฐ ์ URL ๋ง๋๋ ์์
์ ํด ์ค๊ฑฐ์์.
URL์ ๊ฒ์ ์กฐ๊ฑด์ด ์๋์ง์ ์ด๋ค ๊ฒ์ ์กฐ๊ฑด์ด ์๋์ง ๊ทธ๋ฆฌ๊ณ , ๊ฒ์ ์กฐ๊ฑด์ด ์์ ๋๋ฅผ ๊ฒํ ํ์ฌ ์ ํํ URL์ ๋ง๋ค๊ณ , API๋ฅผ ํธ์ถํ๋๋ก ๋ง๋ค์ด ์ค์ผ ํด์.
crewByAll()์ ๊ฒ์ ์กฐ๊ฑด ์์ด ๋ชจ๋ ํฌ๋ฃจ๋ฅผ ๊ฒ์ํ๊ณ ์ ํ ๋, ํธ์ถ๋๋ Method(๋ฉ์๋)์์.
URL์ ๋ง๋ค ๋, IOException์ด ํฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ try-catch ๋ฌธ์ผ๋ก ๊ฐ์ธ์ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ , SpringBootAPICaller.callApi()๋ฅผ ํธ์ถํ ๋, HTTP Method ๊ฐ๊ณผ URL ๊ฐ์ ๋ง๋ค์ด ๋์ ธ ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค API ํธ์ถ์ ํตํด Data Base(๋ฐ์ดํฐ ๋ฒ ์ด์ค)์ ์กฐํ๋ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ฐํํ๊ฒ ์ฒ๋ฆฌํด ์ฃผ์์ด์.
์ฐธ๊ณ ๋ก URL ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋, URL ํ์์ด ์๋ชป๋ ๊ฒฝ์ฐ MalformedURLException์ด ๋ฐ์ํ๊ฒ ๋์. ํด๋น Exception์ IOException์ ์์ Exception Class์ด๊ธฐ ๋๋ฌธ์ ์ฃผ๋๋ IOException์ Catch๋ก ์ฒ๋ฆฌํด ์ฃผ์์ด์.
crewBySearchOption()์ ๊ฒ์ ์กฐ๊ฑด์ด ์์ ๋, ํธ์ถ ๋๋ ๋ฉ์๋์์.
ํด๋น ๊ฒ์ ์กฐ๊ฑด์ ๊ฐ์ง๊ณ , URL์ ๋ง๋๋ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ URL์ ๋ง๋ค์ด์ SpringBootAPICaller.callApi()๋ฅผ ํธ์ถํ๋๋ก ์ฒ๋ฆฌํด ์ฃผ์๊ณ , ๋ง์ฐฌ๊ฐ์ง๋ก API ํธ์ถ์ ํตํด ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์กฐํ๋ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ฐํํ๊ฒ ์ฒ๋ฆฌํด ์ฃผ์์ด์.
์ด์ฉ๋ฉด HttpUtil Class์์ makeURL()์ด ๊ฐ์ฅ ๋ณต์กํ๊ณ , ์ค์ํ ์ญํ ์ ํ๊ณ ์์ ์๋ ์๊ฒ ์ด์.
makeURL()์ ๊ฒ์ ์กฐ๊ฑด์ ๋ด์ DTO๋ฅผ ๋งค๊ฐ ๋ณ์๋ก ๋์ํ๊ฒ ๋์.
์ต์ด ๊ฒ์ ์กฐ๊ฑด์ด ์์ด๋ API๋ฅผ ํธ์ถํ ๋, ์ฐ์ด๋ ๊ธฐ๋ณธ URL ๊ฐ์ defaultUrl ๋ฌธ์์ด ๋ณ์์ ๋ฃ์ด ์ฃผ์์ด์.
makeURL()์ ์ง์
ํ๊ฒ ๋๋ฉด DTO ๊ฐ์ฒด์ ์ด๋ค ๊ฐ์ด ์๋๋๋ฅผ ํ์ธํ์ฌ URL์ ๋ง๋ค์ด ์ฃผ๋ ๊ฑธ ํ์ธํ ์ ์์ด์.
์ฐธ๊ณ ๋ก URL Parameter(๋งค๊ฐ ๋ณ์)์ Key (ํค - ์ด์ ) ๊ฐ์ URLEncode.encode()๋ฅผ ํตํด ์ธ์ฝ๋ฉ ํด์ฃผ๋ฉด API ํธ์ถ์ ํ ๋, ํน์๋ฌธ์๊ฐ ์ธ์ฝ๋ฉ์ด ๋๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฑฐ์์.
๊ทธ๋์ ํค ๊ฐ์ ์ธ์ฝ๋ฉํ์ง ์๊ณ , ๋งค๊ฐ ๋ณ์์ Value(๊ฐ)๋ง ์ธ์ฝ๋ฉ ํ๋๋ก ํ์ฌ ๋ฌธ์์ด์ด ํฉ์ณ ์ง๋๋ก ํ์์ด์.
๋จผ์ if๋ฌธ์ ํตํด DTO์ ๋ชจ๋ ๊ฒ์ ์กฐ๊ฑด์ด Null์ด ์๋์ง ํ์ธํ๊ณ , Null์ด ์๋๋ผ๋ฉด URL ํ๋ผ๋ฏธํฐ๋ฅผ ๊ทธ์ ๋ง๊ฒ ์์ฑ์ ํด์ฃผ๋ ๊ฑฐ์์.
๊ทธ๋ ๊ฒ else if()๋ฅผ ํตํด์ DTO์ ์ํ๋ฅผ ํ์ธํ๊ณ , URL์ ๋ง๋ค์ด ์ค ๋ค ๋ง๋ค์ด์ง URL ๋ฌธ์์ด์ ๋ฐํํด ์ฃผ์์ด์.
์ Interface(์ธํฐํ์ด์ค)๋ฅผ ํตํด URL ๊ด๋ จ String(๋ฌธ์์ด) ๊ฐ๋ค์ ์ ์ํ๊ณ , ๊ฐ์ ธ๋ค ์ฐ๋ ๋ฐฉ์์ผ๋ก ๋ง๋ค์ด ์ฃผ์์ด์.
๐ฝ API Caller
ํด๋น ๊ฐ์ฒด๋ JAVA๋ฅผ ์ด์ฉํด์ API๋ฅผ ํธ์ถํ๊ธฐ ์ํด ๋ง๋ ๊ฐ์ฒด์์.
์ค์ API ํธ์ถ์ ๋ด๋นํ๋ callApi()์ ๋ํด ์์๋ณผ๊ฒ์.
ํด๋น Method(๋ฉ์๋)๋ HTTP Method์ URL์ ๋งค๊ฐ ๋ณ์๋ก ๋ฐ๊ฒ ๋ฉ๋๋ค.
HTTP Method๋ GET ํน์ POST ๋ฑ์ ๋ฌธ์์ด๋ก ๋ฐ๊ฒ ๋์.
๊ทธ๋ฆฌ๊ณ , API๋ฅผ ํธ์ถํ ๋, ์
๋ ฅ ํน์ ์ถ๋ ฅ ๊ด๋ จํด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๊ทธ ์ฒ๋ฆฌ๋ฅผ ํธ์ถํ ๊ณณ์ ๋๊ธฐ๊ธฐ ์ํด throws IOException์ ๋ช
์ํด ์ฃผ์์ด์.
31๋ฒ์งธ ์ค์ StringBuilder ๊ฐ์ฒด๋ฅผ ์์ฑํด ์ฃผ์์ด์.
32๋ฒ์งธ ์ค์ API ์ฐ๊ฒฐ์ ์ํด HttpURLConnection ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฃผ๋๋ฐ, URL ๊ฐ์ฒด์ openConnection()์ ํธ์ถํ์ฌ ํด๋น ๊ฒฐ๊ณผ๊ฐ์ HttpURLConnection ๊ฐ์ฒด๋ก ํ ๋ณํํ์ฌ ๋ณ์๋ฅผ ๋ง๋ค์ด ์ฃผ์์ด์.
URL ๊ฐ์ฒด์ openConnection()์ ํตํด URLConnection ๊ฐ์ฒด๋ฅผ ์ป์ ์ ์์ด์. ๋ง์ฝ Protocol(ํ๋กํ ์ฝ)์ด http:// ์ธ ๊ฒฝ์ฐ ๋ฐํ๋ ๊ฐ์ฒด๋ฅผ HttpURLConnection ๊ฐ์ฒด๋ก ํ ๋ณํ ํ ์ ์๋๋ฐ, ๊ทธ๋ฅผ ์ํด 32๋ฒ์งธ ์ค๊ณผ ๊ฐ์ด ํด ์ค ๊ฑฐ์์.
33 ~ 37๋ฒ์งธ๊น์ง ์ค์ ๋ก URLConnection ๊ตฌ์ฑ์ ์ํ ์์
์ ํด ์ฃผ์์ด์.
์ค์ ๋ก ์ฐ๊ฒฐ์ ์ค์ ํ๊ธฐ ์ ์ Time Out(ํ์์์), Cache(์บ์), HTTP Request Method (HTTP ์์ฒญ ๋ฐฉ๋ฒ) ๋ฑ๊ณผ ๊ฐ์ด Client(ํด๋ผ์ด์ธํธ)์ Server(์๋ฒ) ๊ฐ ๋ค์ํ Option(์ต์
)์ ์ค์ ํด ์ค ์ ์์ด์. ๊ทธ๊ฒ์ URLConnection ํด๋์ค ์์ ์ฌ๋ฌ ๋ฉ์๋๋ฅผ ํตํด ํด ์ค ์ ์๊ตฌ์.
โ setRequestMethod(String method) : HTTP Method(๋ฉ์๋) GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE ์ค ํ๋์ธ URL ์์ฒญ์ ๋ํ ๋ฉ์๋ ์ค์ . Default Value is GET (๊ธฐ๋ณธ๊ฐ์ GET)
โ setConnectTimeout(int timeout) : HTTP ์ฐ๊ฒฐ ์ ํ ์๊ฐ ์ค์ (๋จ์๋ ms(๋ฐ๋ฆฌ ์ด))ํ๋ ๊ฒ์ผ๋ก ์ ํ ์๊ฐ์ด ๋ง๋ฃ๋๊ณ , ์ฐ๊ฒฐ์ ์
๋ ฅ Stream(์คํธ๋ฆผ)์์ ์ฝ์ ์ ์๋ DATA(๋ฐ์ดํฐ)๊ฐ ์์ผ๋ฉด SocketTimeoutException์ด ๋ฐ์ํ๊ฒ ๋๋ค. ์๊ฐ ์ด๊ณผ๊ฐ 0์ด๋ฉด, ๋ฌดํ๋ ์ ํ ์๊ฐ ์ค์ .
โ setRequestProperty (String key, String value) : ํค์ ๊ฐ(Key=value) ์์ผ๋ก ์ง์ ๋ ์ผ๋ฐ ์์ฒญ ์์ฑ์ ์ค์ ํ๋ ๋ถ๋ถ์ผ๋ก ํค๊ฐ ์๋ ์์ฑ์ด ์ด๋ฏธ ์๋ ๊ฒฝ์ฐ ์ด์ ๊ฐ์ ์ ๊ฐ์ผ๋ก ์ง์ ํ๊ฒ ๋๋ค. ์ด๋ฌํ ๋ฉ์๋๋ ์ฐ๊ฒฐ์ ์ค์ ํ๊ธฐ ์ ์ ํธ์ถ๋์ด์ผ ํ๋ฉฐ, ์ผ๋ถ ๋ฉ์๋๋ ์ฐ๊ฒฐ์ด ์ด๋ฏธ ์ค์ ๋ ๊ฒฝ์ฐ IllegalStateException์ ๋ฐ์ ์ํค๊ฒ ๋๋ค. ๋ํ, ์์ ํด๋์ค HttpURLConnection์ HTTP ๊ด๋ จ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐ์ ๊ตฌ์ฑํ๊ธฐ ์ํ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
โ setDoOutput(boolean doOutput) : URLConnection์ด Server(์๋ฒ)์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋๋ฐ ์ฌ์ฉํ ์ ์๋์ง ์ฌ๋ถ ์ค์ (๊ธฐ๋ณธ๊ฐ์ false - ๊ฑฐ์ง)
๐ก ์ฐธ๊ณ ์ฌํญ
๋๋ค๋ฅธ URLConnection Class ์์ Method
1. setReadTimeout (int timeout) : ์ฝ๊ธฐ ์ ํ ์๊ฐ ๊ฐ ์ค์ (๋จ์ ๋ฐ๋ฆฌ์ด). ์ ํ ์๊ฐ์ด ๋ง๋ฃ๋๊ณ , ์ฐ๊ฒฐ์ ์ ๋ ฅ ์คํธ๋ฆผ์์ ์ฝ์ ์ ์๋ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ SocketTimeoutException์ด ํฐ์ง๋ค. ํด๋น ์ค์ ๊ฐ์ด 0์ด๋ฉด ๋ฌดํ๋๋ฅผ ์๋ฏธ.
2. setDefulatUseCaches (boolean defulat) : URLConnection์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์บ์๋ฅผ ์ฌ์ฉํ๋์ง ์ฌ๋ถ ์ค์ . (๊ธฐ๋ณธ๊ฐ์ True) ํด๋น ๋ฉ์๋๋ URLConnection ํด๋์ค์ ๋ค์ ์ธ์คํด์ค์ ์ํฅ์ ์ค๋ค.
3. setUseCaches (boolean useCaches) : ์ฐ๊ฒฐ์ด ์บ์๋ฅผ ์ฌ์ฉํ๋์ง ์ฌ๋ถ ์ค์ (๊ธฐ๋ณธ๊ฐ True).
4. setDoInput (boolean doInput) : URLConnection์ ์๋ฒ์์ ์ฝํ ์ธ ๋ฅผ ์ฝ๋๋ฐ, ์ฌ์ฉํ ์ ์๋์ง ์ฌ๋ถ ์ค์ (๊ธฐ๋ณธ๊ฐ True).
5. selfModifiedSince (long itme) : ์ฃผ๋ก HTTP Protocol(ํ๋กํ ์ฝ)์ ๋ํด ํด๋ผ์ด์ธํธ๊ฐ ๊ฒ์ํ ์ฝํ ์ธ ์ ๋ง์ง๋ง ์์ ์๊ฐ์ ์๋ก ์ค์ . ์๋ฅผ ๋ค์ด ์๋ฒ๊ฐ ์ง์ ๋ ์๊ฐ ์ดํ ์ ์ ์ฝํ ์ธ (Image, HTML ๋ฑ)๊ฐ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉด ์ฝํ ์ธ ๋ฅผ ๊ฐ์ ธ์ค์ง ์๊ณ , HTTP Statue Code(HTTP ์ํ ์ฝ๋) 304 - ์์ ๋์ง ์์์ ๋ฐํํ๋ค. ํด๋ผ์ด์ธํธ๋ ์ง์ ๋ ์๊ฐ๋ณด๋ค ์ต๊ทผ์ ์์ ๋ ๊ฒฝ์ฐ ์๋ก์ด ์ฝํ ์ธ ๋ฅผ ๋ฐ๊ฒ ๋๋ค.
6. setAllowUserInteraction (boolean allow) : ์ฌ์ฉ์ ์ํธ ์์ฉ์ ํ์ฑํ ๋๋ ๋นํ์ฑํ ํ๋ค. ์๋ฅผ ๋ค์ด ํ์ํ ๊ฒฝ์ฐ ์ธ์ฆ ๋ํ ์์ ํ์ ๋ฑ.(๊ธฐ๋ณธ๊ฐ false)
7. setDefaultAllowUserInteraction (boolean default) : ์ดํ ๋ชจ๋ URLConnection ๊ฐ์ฒด์ ๋ํ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ๊ธฐ๋ณธ๊ฐ ์ค์ .
8. setFixedLengthStreamingMode (long contentLength) : ์ฝํ ์ธ ๊ธธ์ด๋ฅผ ๋ฏธ๋ฆฌ ์๊ณ ์๋ ๊ฒฝ์ฐ ๋ด๋ถ ๋ฒํผ๋ง ์์ด HTTP ์์ฒญ ๋ณธ๋ฌธ์ ์คํธ๋ฆฌ๋ฐํ ์ ์๋ค.
9. setFollowRedirects (boolean follow) : HTTP Redirection(๋ฆฌ๋ค์ด๋ ์ ) ๋ค์ HttpURLConnection ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์๋์ผ๋ก ๋ฐ๋ผ์์ผ ํ๋์ง ์ฌ๋ถ ์ค์ . (๊ธฐ๋ณธ๊ฐ True)
10. setInstanceFollowRedirects (boolean follow) : HTTP ๋ฆฌ๋ค์ด๋ ์ ๋ค HttpURLConnection ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์๋์ผ๋ก ๋ฐ๋ผ์์ผ ํ๋์ง ์ฌ๋ถ ์ค์ (๊ธฐ๋ณธ๊ฐ True)ํ๋ฉฐ, ํด๋น ๋ฉ์๋๋ Setter(์ธํฐ)์ด๋ฉฐ, URLConnection๊ณผ HttpURLConnection ํด๋์ค๋ ํด๋น Getter(๊ฐํฐ)๋ ์ ๊ณต.
์์ ๊ฐ์ด ํ๋ฉด API๋ฅผ ์ค์ ํ ๊ฐ์ ๋ฐ๋ผ ํธ์ถํ๊ฒ ๋๊ณ , 39๋ฒ์งธ ์ค์ ํธ์ถ ๊ฒฐ๊ณผ๊ฐ ์ค HTTP ์๋ต ๊ฒฐ๊ณผ ์ฝ๋๊ฐ 200 ์ฆ, OK๋ผ๋ฉด 40 ~ 48๋ฒ์งธ ์ค์ด ์๋ํ๋๋ก ํด ์ฃผ์์ด์.
์ต์ด 40๋ฒ์งธ ์ค์ try-with-resource ๋ฌธ์ ํตํด BufferReader๊ฐ ๋ชจ๋ ์ฌ์ฉ์ ๋๋ด๊ณ , ๋ซํ ์ ์๋๋ก ํด ์ฃผ์์ด์.
HttpURLConnection ๊ฐ์ฒด์ getInputStream()์ ํตํด URL ํด๋์ค์ ์
๋ ฅ ์คํธ๋ฆผ์ ์ค์ ์ฆ, URL ํด๋์ค๊ฐ ๋ํ๋ด๋ ์์์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ฌ ์ ์๊ณ , ์ด๋ฅผ BufferdReader ๊ฐ์ฒด๋ก ๊ฑฐ์ณ์ ๋ฐ์ ์ค๋๋ฐ, ๋ง์ฝ ์ด๋ ๊ฒ ํ์ง ์๊ณ ๋ฐ๋ก InputStream ๊ฐ์ฒด๋ก ๋ฐ์์ค๊ฒ ๋๋ฉด ์ด๋ Byte(๋ฐ์ดํธ) ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๊ธฐ ๋๋ฌธ์ ํ๊ธ๊ณผ ๊ฐ์ด ASCII Code(์์คํค) ์ฝ๋ ์ธ์ ๊ธ์๋ค์ด ๊นจ์ง๊ธฐ ๋๋ฌธ์ด์์.
๊ทธ๋ฐ ๋ค JSON ์ฒ๋ฆฌ๋ฅผ ์ํด JSONObject ๊ฐ์ฒด๋ฅผ ์์ฑํด ์ฃผ๊ณ , API์์ ๋ฐ์์จ DATA ๊ฐ์ ๋ฐ์์ค line ๋ฌธ์์ด ๋ณ์๋ฅผ ์ ์ธํด ์ฃผ์์ด์.
44๋ฒ์งธ ์ค์ bufferReader์ readLine()์ด Null์ด ์๋๋ฉด ์ฆ, API๋ฅผ ํตํด ์ด๋ค ๊ฐ์ ๋ฐ์์๋ค๋ฉด ๊ทธ ๊ฐ์ line์ ๋ฃ๊ฒ ํ๊ณ , JSONObject ๊ฐ์ฒด์ ํด๋น ๊ฐ์ ๋ฃ์ด JSON Type์ผ๋ก ๋ณํ๋๋๋ก ํด ์ฃผ์์ด์.
48๋ฒ์งธ ์ค์ JSON์๋

์์ ๊ฐ์ ํํ๋ก ๊ฐ์ ๋ฐ์ ์๊ธฐ ๋๋ฌธ์ JSON ๊ฐ ์ค data๋ผ๋ ํค์ ๊ฐ์ ๊บผ๋ด data ๋ผ๋ JSONArray ๋ณ์์ ๋ฃ์ด ์ฃผ์์ด์.

๊ทธ๋ฐ ๋ค ๋ฐ๋ณต๋ฌธ์ data๋ผ๋ JSONArray ๋ฐฐ์ด ํฌ๊ธฐ ๋งํผ ๋ฐ๋ณต๋ฌธ์ ๋๋ ค ์ฃผ๋ฉด์ ๋ค์ ํด๋น ๋ฐฐ์ด์ index ๋ฒ์งธ ๊ฐ์ ๊บผ๋ด JSONObject ๊ฐ์ฒดํ ๋ณ์ dataJSONObject์ ๋ด์ ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค ์์์ ๋ง๋ค์ด์ฃผ์๋ StringBuilder ๊ฐ์ฒด ๋ณ์ resultMessage์ ์ฃผ๋๊ฐ ๋ฐ๊ณ ์ถ์๋๋ก ์๋ฆฌํ์ฌ API๋ฅผ ํตํด ๋ฐ์ ๊ฐ๋ค์ ์ ๋ฌ ๋ฐ์ ์ ์๊ฒ ๊ฐ๊ณตํ ๋ค StringBuilder ๊ฐ์ฒด toString()์ ํตํด ๋ฌธ์์ด๋ก ๋ฐํ๋๋๋ก ํ์ฌ ์ฃผ์์ด์.
ํ์ง๋ง, API ํต์ ์ด ์คํจํ์ฌ ์๋ต ์ฝ๋๊ฐ 200์ด ์๋๋ผ๋ฉด else ์ ์ ํตํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋จ ๋ด์ฉ์ ํด๋ผ์ด์ธํธ ์ฆ, ๋์ค์ฝ๋ ๋ด์ด ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ ์ ์๋๋ก ๋ฐํ ๋ฉ์์ง๋ฅผ ๊ฐ๊ณตํ์ฌ ๋ณด๋ด์ฃผ๋๋ก ํ์์ด์.
๊ทผ๋ฐ if๋ฌธ์๋ ๋ค์ด์ค์ง ๋ชปํ๊ณ , else ๋ฌธ์๋ ๋ค์ด์ค์ง ๋ชปํ ์ด๋ค ๋ฌธ์ ๋ 75๋ฒ์งธ ๋ฌธ์์ด์ด ๋ฐํ๋๊ฒ ํ์ฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์์์ ์๋ฆฌ๋๋ก ํ์์ต๋๋ค.
์ด๋ฒ์๋ ์ด๋ ๊ฒ JAVA๋ฅผ ์ด์ฉํด์ API์ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํด ๋ณด์์ด์.
๋ค์ ๊ธ์์๋ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋์ค์ฝ๋ ๋ด์ ์ด์ฉํด์ ์ด๋ฒ์ ๋ง๋ API ํธ์ถ์ ์ํ ํด๋์ค๋ค์ ์ด์ฉํด์ API๋ฅผ ํธ์ถํ๊ณ , ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๋ด์ ์ ์ฅ๋ ๊ฐ๋ค์ ์ํ๋ ๊ฒ์ ๊ธฐ๋ฅ์ ํตํด ๊ฐ์ ธ์ค๋ฉด์ ๊ฐ๊ณตํด์ ๋ฐ์ ๋ณด๋ ๊ฒ์ ์ ๋ฆฌํด ๋ณด๋๋ก ํ ๊ฒ์.
GitHub - junyharang-personal-project/juny-discord-bot-test: JDA๋ฅผ ์ด์ฉํ Spring Boot Discord Bot ์ฐ์ต์ด์์.
JDA๋ฅผ ์ด์ฉํ Spring Boot Discord Bot ์ฐ์ต์ด์์. Contribute to junyharang-personal-project/juny-discord-bot-test development by creating an account on GitHub.
github.com
์ฃผ๋๊ฐ ๋ง๋ Source Code(์์ค ์ฝ๋)๊ฐ ๊ถ๊ธํ์ ๋ถ๋ค์ ์์ Git Hub ๋งํฌ์์ ํ์ธ ๊ฐ๋ฅํ๋๋ก ์ค๋นํด ๋์์ด์.
All in One Java ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ : Spring Hibernate MyBatis๋ฅผ ํ์ฉํ
COUPANG
www.coupang.com
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
'๊ฐ๋ ์ ๋ฆฌ ์์ ์ค > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] Annotation (์ด๋ ธํ ์ด์ ) ์ด๋? (0) | 2023.07.15 |
---|---|
[Spring] Spring AOP; ์คํ๋ง AOP ๊ฐ๋ ์ ๋ฆฌ (0) | 2023.07.15 |
[Open Source Project] JitPack์ ๋ด๊ฐ ๋ง๋ Library & Framework ์ฌ๋ฆฌ๊ธฐ (0) | 2022.12.10 |
[JAVA] Object Class (2) | 2022.03.25 |
[JAVA] String Instance / Constant Pool์ด๋? (0) | 2022.03.24 |