๐Ÿ“– Java&Spring 18

Java์˜ Hash ์•Œ๊ณ ๋ฆฌ์ฆ˜ MessageDigest

์š”์ฆ˜ ํ•ซํ•œ ๋ณด์•ˆ ๋ฌธ์ œ โ— ์ด๋ฒˆ์— ์‹ ๊ทœ ๊ฐœ๋ฐœํ•˜๋Š” ๊ธฐ๋Šฅ์—๋„ ๋ณด์•ˆ์„ ์œ„ํ•ด ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ๋‚ด์šฉ์€ ์•”ํ˜ธํ™”๋ฅผ ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ต๋‹ˆ๋‹ค. Java์—์„œ Hash ๊ฐ’ ์ƒ์„ฑ์„ ํ•  ๋•Œ ๋งŽ์ด ์“ฐ๋Š” ํด๋ž˜์Šค๋Š” MessageDigest์ธ๋ฐ, ์˜ค๋Š˜์€ ์ด ์นœ๊ตฌ๋ฅผ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ”MessageDigest https://docs.oracle.com/javase/7/docs/api/java/security/MessageDigest.html MessageDigest (Java Platform SE 7 ) This MessageDigest class provides applications the functionality of a message digest algorithm, such as SHA-1 or SHA-256. Message dig..

HTTP Query Parameter์—์„œ Arrary List ์‚ฌ์šฉ

API ์„ค๊ณ„ํ•  ๋•Œ, GET์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„์˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๊ณ  ์‹ถ์€๋ฐ, ๋ฒ”์œ„๊ฐ€ ํ•„์š”ํ•œ ๊ฐ’๋“ค์ด ์žˆ๋‹ค. Query Paramter์— Array๋„ ๊ฐ€๋Šฅํ•˜๊ณ  Json Type๋„ ์“ธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ชจ๋ฅธ๋‹ค๋ฉด POST ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Body ๋ฉ”์ง€์‹œ์— ๋ฒ”์œ„ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ๋กœ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, POST /bell/v2/list HTTP/1.1 ... { "list":[0, 5] } ๋ฌผ๋ก  ์ด ๋ฐฉ์‹๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทผ๋ฐ Resource URI๋ฅผ ๋” ๊ณ ๋ฏผํ•ด์•ผํ•˜๋Š”;; ์ƒํ™ฉ์— ๋†“์ด๊ฒŒ ๋œ๋‹ค GET์—๋„ body ๋ฉ”์‹œ์ง€๋ฅผ ๋ฌผ๋ก  ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๊ทผ๋ฐ GET ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•ด์„œ๋Š” body๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š” ์„œ๋ฒ„๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ†ต์ƒ์ ์ธ? ํ‘œํ˜„์€ ์•„๋‹Œ ๋“ฏ ํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณด๋‚ด๋ฉด ๊ฐ„๋‹จํžˆ ํ•ด๊ฒฐ๋œ๋‹ค. GET /be..

Spring Cron Expression

ํฌ๋ก  ํ‘œํ˜„์‹์€ Spring์—์„œ ํŠน์ • ์‹œ๊ฐ„ ๋งˆ๋‹ค ๋ฐ˜๋ณต๋˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ‘œํ˜„์‹ ์ž…๋‹ˆ๋‹ค ์Šค์ผ€์ค„๋Ÿฌ๋Š” DB ์ž‘์—…์ด๋‚˜ ๋ฐ˜๋ณต๋˜๋Š” ์ž‘์—… ๋“ฑ๋“ฑ์—์„œ ๋งŽ์ด ์“ฐ์ด๋Š”๋ฐ์šฉ, Spring์˜ cron์„ ์ด์šฉํ•ด์„œ ์‹œ๊ฐ„ ์ฃผ๊ธฐ๋ฅผ ์„ค์ •ํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ต๋‹ˆ๋‹ค. ๐ŸŒฑ servlet-context.xml ํŒŒ์ผ์— task namespace ์ถ”๊ฐ€ํ•˜๊ธฐ servlet-context.xml์— task namespace๋ฅผ ์ถ”๊ฐ€ํ•œ ๋ชจ์Šต ์ž…๋‹ˆ๋‹ค task:scheduled-tasks๋กœ ์‹œ์ž‘ํ•ด์ฃผ๊ณ , ref์—๋Š” ์Šค์ผ€์ค„์ด ๋™์ž‘๋  ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ref์—๋Š” bean์„ ๋“ฑ๋กํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋ผ์„œ, @Component, @Controller ๋“ฑ์˜ Annotation์œผ๋กœ ๋“ฑ๋ก๋œ ์ด๋ฆ„์„ ์ถ”๊ฐ€ method์—๋Š” ์‹คํ–‰๋  ๋ฉ”์„œ๋“œ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค ๐ŸŒฑ cron ..

StringUtils

StringUtils ๐Ÿ“•API ๋ฌธ์„œ StringUtils๋Š” ๋ฌธ์ž์—ด์„ ๊ฒ€์‚ฌํ•  ๋•Œ๋‚˜ ๋ณ€ํ™˜ํ•  ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ด๋Š” ํด๋ž˜์Šค ์ž…๋‹ˆ๋‹ค 1) Class java.lang.Object org.apache.commons.lang3.StringUtils2) ํŠน์ง• NullPointException ๋ฐœ์ƒ X ThreadSafe ๐ŸŒฑ String Handling String ์ฒ˜๋ฆฌ ํด๋ž˜์Šค ๋‹ต๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด๋“ค์ด ์žˆ๋Š”๋ฐ์šฉ, ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. null: ๋ง ๊ทธ๋Œ€๋กœ null empty: ๋นˆ ๋ฌธ์ž ("') space: ์ŠคํŽ˜์ด์Šค ('', char ํ˜•) whitespace: ์—ฌ๋ฐฑ, Character.isWhitespace(char๋ฅผ ์ฐธ๊ณ ) trim ๐ŸŒฑ Operations ์ด ๋•Œ ์•„๋‹ˆ๋ฉด ์–ธ์ œ ๋‹ค ์ฝ์–ด๋ณด๊ฒ ์Šต๋‹ˆ๊นŒ? ๐Ÿ˜ฅ ๐Ÿ’ก๊ธฐ๋ณธ์ ์œผ๋กœ null-..

Looking For Annotation~

Annotation Annotation ์ž์ฒด๋Š” ์ฃผ์„์ด๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค. C++/C ๋‹ค๋ฃจ๋‹ค๊ฐ€ Java ์ฝ”๋“œ๋ฅผ ๋ดค์„ ๋•Œ ๊ฐ€์žฅ ์žฌ๋ฐŒ๊ฒŒ ๋ณธ ๋ฌธ๋ฒ•์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ž‘์„ฑ์ž ์ด๋ฆ„์ด๋‚˜ ๋ฐฐํฌ ๋‚ ์งœ๋งŒ ์ ๋Š”์ค„ ์•Œ์•˜๋˜ ์ฃผ์„์ด...! ๋‹ค๋ฅด๊ฒŒ ๋ณด์˜€๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ์š”, ํŠน์ง•์„ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ’ซ Annotation ํŠน์ง• AOP(Aspect Oriented Programming)์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๊ตฌ์„ฑํ•ด์ฃผ๋Š” ์ฃผ์„ ๊ธฐ๋Šฅ ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ์ฝ”๋“œ์˜ ๋ฌธ๋ฒ• ์—๋Ÿฌ๋ฅผ ์ฒดํฌํ•  ๋•Œ ์“ฐ๋Š” ์ •๋ณด๋ฅผ ์ œ๊ณต ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋นŒ๋“œ/๋ฐฐํฌ ์‹œ ์ฝ”๋“œ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜๋„๋ก ์ •๋ณด ์ œ๊ณต ๋Ÿฐํƒ€์ž„์— ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•˜๋„๋ก ์ •๋ณด๋ฅผ ์ œ๊ณต Annotation ์ •๋ฆฌ (๊ณ„์† ์—…๋ฐ์ดํŠธ ์˜ˆ์ •) 1) @Override ๋ฉ”์†Œ๋“œ๋ฅผ Override ํ•  ๊ฒƒ์ด๋‹ˆ ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ์•Œ๋ ค์ค๋‹ˆ๋‹ค ์ƒ์† ๋ฐ›์€ ๋ถ€๋ชจ ํด๋ž˜์“ฐ/์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์—†..

Intellij) Junit Test Code ์ž‘์„ฑ ์‹œ "Execution failed for task" ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

ํ‰ํ™”๋กœ์šด ์˜คํ›„.. ์ด์ œ Java ๋งˆ์Šคํ„ฐ๊ฐ€ ๋˜์–ด์•ผ ํ•˜๋Š” C์Ÿ์ด๋Š” Test Code๋ฅผ ์ž‘์„ฑํ•˜๋ ค ํ–ˆ๋Š”๋ฐ์šฉ ์‹œ์ž‘ํ•˜์ž๋งˆ์ž ๋‚œ๊ด€์— ๋ถ€๋”ชํžˆ๊ณ  ๋ง์•˜๋Š”๋ฐ์š” Execution failed for task ':test'. > No tests found for given includes: ... * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. โฌ†๏ธ ์ด๋Ÿฐ ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚ฌ์Šต๋‹ˆ๋‹ค JUnit Test Code Build๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ Gradle์— ์žˆ๋Š” ์„ค์ •์„ ๋ฐ”๊ฟ”์ค˜์•ผํ–ˆ๋‹ต๋‹ˆ๋‹ค File>Settings>Build..

Web Server vs WAS

Spring ๊ณต๋ถ€ํ•˜๊ธฐ์— ์•ž์„œ, Web ๊ณต๋ถ€๋„ ํ•„์š”ํ•˜๊ธธ๋ž˜ ์ •๋ฆฌํ•œ ๊ธฐ๋ณธ ๊ฐœ๋… (?)์„ ์ž‘์„ฑํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค ์ƒˆ๋กœ ์ ‘ํ•˜๋Š” ๋ถ„์•ผ๋‹ค ๋ณด๋‹ˆ ์šฉ์–ด ์ ์ธ ๊ฒŒ ๋งŽ์ด ํ—ท๊ฐˆ๋ฆฐ๋‹ค ์ค‘์ ์„ ๋‘๊ณ  ๊ณต๋ถ€ํ•œ๊ฑด Web Server์™€ WAS (Web Application Server)๋ผ์„œ ๋‚˜๋จธ์ง€๋Š” ๊ฐ„๋žตํ•˜๊ฒŒ ์ •์˜๋งŒ ์ •๋ฆฌํ–ˆ๋‹ค 1. Web Browser ์‚ฌ์šฉ์ž (ํด๋ผ์ด์–ธํŠธ)๊ฐ€ ์š”์ฒญํ•œ ์›น ์„œ๋ฒ„์˜ ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ HTTP ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ ex) Google Chrome, FireFox ๋“ฑ 2. Web Application ์›น ์•ฑ์ด๋ผ๊ณ  ๋ถ€๋ฆ„ ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด์„œ Web Browser์—์„œ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‘์šฉ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๋™์ ์ธ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์›น ๊ธฐ๊ธฐ์— ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ์–ดํ”Œ์˜ ๊ธฐ๋Šฅ์„ ์›น์ด ๋Œ€์‹ ํ•ด์คŒ ์‚ฌ์šฉ์ž๊ฐ€ ๋Šฅ๋™์ ์œผ๋กœ ์›น ์•ฑ์˜ ..

Spring Framework๋ฅผ ์•Œ์•„๋ณด์ž

์–ด์ฉŒ๋‹ค๋ณด๋‹ˆ Spring ๊ฐœ๋ฐœ๋„ ํ•˜๊ฒŒ ๋œ ๋‚˜ ์˜คํžˆ๋ ค ์ข‹์•„ (?) Notion์— ์ •๋ฆฌํ•ด๋’€๋˜๊ฑฐ๋ฅผ ๊ฐ€์ ธ์™”๋”๋‹ˆ ํ˜•์‹์ด ๋งŽ์ด ๊นจ์ง€๋„ด ์ฐธ๊ณ ๋กœ Spring Framework์˜ ์Šคํ”„๋ง์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ํŽธํ•˜๊ฒŒ ์œ ์šฉํ•˜๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ธธ ๋ฐ”๋ผ๋ฉฐ ๋ด„๋‚ ์ด ์˜ค๊ธธ ๋ฐ”๋ž€๋‹ค๋Š” ๋œป์ด๋ผ๊ณ  ํ•œ๋‹ค ใ…‹ Spring Framework ์ •์˜ ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ ํŠน์ง• ๊ฐ์ฒด ์ง€ํ–ฅ ๊ฐœ๋ฐœ Application ๊ฐœ๋ฐœ์— ์šฉ์ดํ•˜๋„๋ก (๋น ๋ฅด๊ณ  ํšจ์œจ์ ) ๊ธฐ๋ณธ ํ‹€๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ, API ๋“ฑ์„ ์ œ๊ณตํ•จ ๋™์ ์ธ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณต ๐Ÿคฎ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ vs ํ”„๋ ˆ์ž„์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์„ ๋•Œ ์ง์ ‘ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•ด๋‘” ๊ฒƒ. String์€ java.lang.String์— ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ๊ธฐ๋Šฅ..