๐Ÿ“• Language/Java 15

[Java] Lombok ์–ด๋…ธํ…Œ์ด์…˜ ์ •๋ฆฌ

@Getter : ์ ‘๊ทผ์ž ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜ @Setter : ์„ค์ •์ž ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ๐Ÿ“’ ๊ทธ ๋ฐ–์˜ ์ƒ์„ฑ์ž ์ƒ์„ฑ ๊ด€๋ จ ์–ด๋…ธํ…Œ์ด์…˜ @AllArgsConstructor : ๋ชจ๋“  ํ•„๋“œ ๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ฆ @NoArgsConstructor : ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ์ƒ์„ฑ @RequiredArgsConstructor : final์ด๋‚˜ @NonNull์ธ ํ•„๋“œ ๊ฐ’๋งŒ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž ๋งŒ๋“ฆ ์˜ˆ์‹œ ์ฝ”๋“œ @NoArgsConstructor @RequiredArgsConstructor @AllArgsConstructor public class UserInfoVO { @NonNull private String id; @NonNull private String password; ..

[Error] org.gradle.tooling.BuildException: Could not fetch model of type 'GradleBuild' using connection to Gradle distribution

๊ธฐ์กด ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ฅผ ๋ฐ€๊ณ , ์ดํด๋ฆฝ์Šค๋ฅผ ์ƒˆ๋กœ ์„ค์น˜ํ–ˆ๋Š”๋ฐ ๋ฌธ์ œ ์—†๋˜ Git ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ import๋˜์ง€ ์•Š์•˜๋‹ค. ์—๋Ÿฌ ๋‚ด์šฉ์€ org.gradle.tooling.BuildException: Could not fetch model of type 'GradleBuild' using Gradle distribution 'https://services.gradle.org/distributions/gradle-6.7.1-bin.zip'. ํ•ด๊ฒฐ๋ฐฉ๋ฒ• Window > Preferences > Gradle > ๋น„์–ด์žˆ๋Š” Java home ํ•„๋“œ์— jdk ์—ฐ๊ฒฐ ์ฐธ๊ณ  ์‹œ๋„ํ•ด๋ดค๋‹ค๊ฐ€ ์‹คํŒจํ•œ ๋ฐฉ๋ฒ• importํ•  ๋•Œ, Local installation directory์— gradle ํŒŒ์ผ์„ ์ง์ ‘ ์—ฐ๊ฒฐ์‹œ์ผœ๋ณด์•˜์œผ๋‚˜ ์‹คํŒจ (์›๋ž˜๋Š” G..

[Java] Thread ๊ตฌํ˜„ ์˜ˆ์ œ

Thread : ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ์˜ ํ•˜๋‚˜์˜ ํ๋ฆ„ ์ž๋ฐ”๋Š” Multi Thread ์ง€์› (๋Œ€๊ธฐ ์ค‘, ๋‹ค๋ฅธ ์ผ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ฒ˜๋ฆฌ ์†๋„ ํ–ฅ์ƒ) Thread ๊ตฌํ˜„ํ•˜๋Š” ๋ฒ•์€ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์ฒซ์งธ, Thread class๋ฅผ ์ƒ์†๋ฐ›์•„์„œ ์‚ฌ์šฉ ๋‘˜์งธ, Runnable class๋ฅผ ์ƒ์†๋ฐ›์•„์„œ ์‚ฌ์šฉ ์ž๋ฐ”๋Š” ๋‹ค์ค‘ ์ƒ์†์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ํƒ€ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„์•ผํ•˜๋Š” ๊ฒฝ์šฐ๋•Œ๋ฌธ์— 2๋ฒˆ์„ ์ฃผ๋กœ ์‚ฌ์šฉ Runnable์„ ์‚ฌ์šฉํ•˜์—ฌ Thread๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์ž! ๊ธฐ๋ณธ ๊ตฌํ˜„ package study; //Runnable interface ์ƒ์†๋ฐ›๋Š” ๋ฐฉ์‹์œผ๋กœ Thread ๊ตฌํ˜„ (run() method ๊ตฌํ˜„ ํ•„์ˆ˜) public class ThreadSample implements Runnable { private String TEMPLATE = "์ถœ๋ ฅ..

[Java] this, this()

this ์ฐธ์กฐ ๋ณ€์ˆ˜ (์ธ์Šคํ„ด์Šค ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚ด) ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์™€, ์ƒ์„ฑ์ž ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ๊ฐ™์„ ๋•Œ, ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•จ ์ธ์Šคํ„ด์Šค์˜ ์ฃผ์†Ÿ๊ฐ’ ์ง€์ • ๋ชจ๋“  ์ƒ์„ฑ์ž์™€ ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ์— ์ง€์—ฐ๋ณ€์ˆ˜๋กœ ์ˆจ๊ฒจ์ ธ ์žˆ๋‹ค package study.thisInstance; public class Info { String name; int age; //์ƒ์„ฑ์ž Info(String name, int age) { this.name = name; this.age = age; } public static void main(String[] args) { String name = "euna"; int age = 29; Info info = new Info(name, age); System.out.println(info.name); ..

[Java] ์—…์บ์ŠคํŒ…์„ ํ•˜๋Š” ์ด์œ 

ArrayList๊ฐ™์€ ๊ตฌํ˜„์ฒด ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ List ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์„ ์–ธํ•˜๋Š” ์ด์œ  ๋‹คํ˜•์„ฑ ์ง€์›์„ ์œ„ํ•˜์—ฌ ์ฆ‰, ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ณ€๊ฒฝ์— ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋กœ ๋ฏธ๋ฆฌ ์„ค๊ณ„ List list = new ArrayList(); //์ฃผ๋กœ ํ•ด๋‹น ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•จ ArrayList list = new ArrayList(); ArrayList๋กœ ์„ ์–ธํ•˜๋ฉด, ๋‚˜์ค‘์— ๋ฐ์ดํ„ฐ ์šฉ๋„๊ฐ€ ๋ฐ”๋€Œ์–ด LinkedList ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ์•ผ ํ•  ๋•Œ, ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

[Eclipse] Run as์—์„œ Junit Test์„ ์„ ํƒํ•  ์ˆ˜ ์—†์„ ๋•Œ? Missing Run as JUnit Test

๊ฐœ์ธ ํ”„๋กœ์ ํŠธ ์ค‘ Test Code๋ฅผ ๋งŒ๋“ค์–ด Junit์œผ๋กœ ์‹คํ–‰์„ ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ Run as์—์„œ Junit์„ ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. ๋ˆŒ๋Ÿฌ์„œ ๋ฐ˜์‘์ด ์—†๋Š”๊ฒŒ ์•„๋‹ˆ๊ณ , ์•„์˜ˆ ํ•„๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•˜๋‹ค. JDK๋ฒ„์ „์€ 11์ด๊ณ , Junit์€ 4 version ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณด๋‹ˆ, ์ดํด๋ฆฝ์Šค๋ฅผ ๊ป๋‹ค ํ‚ค๋ผ๋Š” ์†Œ๋ฆฌ๊ฐ€ ์žˆ์–ด ๊ป๋‹ค ์ผฐ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ทธ๋Œ€๋กœ์˜€๋‹ค. 1. JDK๋ฒ„์ „๊ณผ Junit๋ฒ„์ „์ด ๋งž์ง€ ์•Š์•„์„œ ๊ทธ๋Ÿฐ๊ฐ€? ํ•˜๋Š” ์ƒ๊ฐ์— Junit์„ 5 ๋ฒ„์ „์œผ๋กœ ์˜ฌ๋ ธ๋‹ค. 2. ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์ ํŠธ์˜ build path์—์„œ๋„ Junit์„ 5๋กœ ์˜ฌ๋ ธ๋‹ค. junit junit 4.12 test org.junit.jupiter junit-jupiter-engine 5.5.2 test 3. ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ Junit 4 -> Properties์—..

[Error ํšŒ๊ณ ] Source์™€ Database์˜ ์ œ์•ฝ์กฐ๊ฑด์ด ์–ด๊ธ‹๋‚˜๋Š” ๊ฒฝ์šฐ

์ „ ํŽธ์— ์ด์–ด์„œ ... https://itbox.tistory.com/39 [Error ํšŒ๊ณ ] Lock๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ Transaction ๋ถ„๋ฆฌ ์šด์˜·๊ด€๋ฆฌํ•˜๋Š” ์‚ฌ์ดํŠธ ์ค‘, ์š”๊ทผ๋ž˜ ์œ ๋… ์†๋„๊ฐ€ ์ €ํ•˜๋œ ์‚ฌ์ดํŠธ๊ฐ€ ์žˆ๋‹ค. ์†๋„๋ณด๋‹ค๋„ ํฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ํŠน์ • ํ…Œ์ด๋ธ”์—์„œ DB Lock์ด ์ง€์†์ ์œผ๋กœ ๊ฑธ๋ฆฐ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ์ด๊ฒƒ์€ ์†๋„์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹Œ ์‚ฌ itbox.tistory.com ์ด์ œ Lock์€ ๋ฐฉ์ง€ํ–ˆ๊ณ , ์–ด๋””์„œ Error๊ฐ€ ๋–จ์–ด์กŒ๊ธธ๋ž˜ ๊ทธ๊ฐ„ ์‹œ๋„์™€ ์‹คํŒจ๋ฅผ ๋ฐ˜๋ณตํ–ˆ์„๊นŒ? ๊ถ๊ธˆํ•ด์กŒ๋‹ค. ๊ทธ๋ž˜์„œ ์ดํด๋ฆฝ์Šค์—์„œ ํ•ด๋‹น ์‚ฌ์ดํŠธ๋ฅผ ๋กœ์ปฌ๋กœ ๋Œ๋ ค, ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ๋™์„ ํ•ด๋ณด์•˜๋‹ค. ๋ชป๋ฐ›์•„์˜จ ๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งŽ์•„์„œ ๋‹ค๋ฅธ ๋…ธํŠธ๋ถ์—์„œ ๊ตฌ๋™ ํ›„, ์‹œ๊ฐ„์ด ๋‚ ๋•Œ๋งˆ๋‹ค ๊ฐ€์„œ ์ฝ˜์†”์„ ํ™•์ธํ•ด๋ณด์•˜๋Š”๋ฐ ์•„๋‹ˆ๋‚˜ ๋‹ค๋ฅผ๊นŒ ๋นจ๊ฐ›๊ฒŒ SqlIgnoreException ์˜ค๋ฅ˜๊ฐ€..

[Error ํšŒ๊ณ ] Lock๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ Transaction ๋ถ„๋ฆฌ

์šด์˜·๊ด€๋ฆฌํ•˜๋Š” ์‚ฌ์ดํŠธ ์ค‘, ์š”๊ทผ๋ž˜ ์œ ๋… ์†๋„๊ฐ€ ์ €ํ•˜๋œ ์‚ฌ์ดํŠธ๊ฐ€ ์žˆ๋‹ค. ์†๋„๋ณด๋‹ค๋„ ํฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ํŠน์ • ํ…Œ์ด๋ธ”์—์„œ DB Lock์ด ์ง€์†์ ์œผ๋กœ ๊ฑธ๋ฆฐ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ์ด๊ฒƒ์€ ์†๋„์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์˜ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ปค๋‹ค๋ž€ ์ด์Šˆ์˜€๋‹ค. '๋ฐ์ดํ„ฐ ์ˆ˜์ •์ด ์•ˆ๋œ๋‹ค, ์ˆ˜์ • ์‹œ ์ž๊พธ ํ™”๋ฉด์ด ๋ฉˆ์ถฐ๋ฒ„๋ฆฐ๋‹ค.' ๋ผ๋Š” ๊ธด๊ธ‰ ์š”์ฒญ์— ๊ธ‰ํ•œ๋Œ€๋กœ ์šฐ์„  Lock์„ killํ•˜๊ธฐ๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ. ์•ˆ๋˜๊ฒ ๋‹ค์‹ถ์–ด, ์ข€ ๋” ์ž์„ธํžˆ ๋“ค์—ฌ๋‹ค๋ดค๋‹ค. Database๊ฐ€ Oracle์ธ ์‚ฌ์ดํŠธ์˜€๊ณ , ์ด์— Oacle lock์ด ๊ฑธ๋ ค์žˆ๋Š” ํ…Œ์ด๋ธ”๊ณผ SQL query๋ฅผ ์กฐํšŒํ•ด๋ณด์•˜๋‹ค. ์—ญ์‹œ ํŠน์ • ํ…Œ์ด๋ธ”์—์„œ Lock์ด ๊ฑธ๋ ค์žˆ์—ˆ๋Š”๋ฐ, ๋ˆˆ์— ๋„๋Š” ๊ฒƒ์€ ํ•ด๋‹น ํ…Œ์ด๋ธ”๊ณผ ์—…๋ฌด์ ์œผ๋กœ ์—ฎ์—ฌ์žˆ๋Š” ํŠน์ •ํ•œ ํ…Œ์ด๋ธ”๋“ค์ด ํ•จ๊ป˜ ๊ฑธ๋ ค์žˆ๋‹ค๋Š” ์ ์ด์—ˆ๋‹ค. '์•„, ์ € ํ…Œ์ด๋ธ”๋“ค์ด ๊ณต๋™์œผ๋กœ ๋ฌด์–ธ๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰..

[Java] ๋™๊ธฐ/๋น„๋™๊ธฐ, ๊ทธ๋ฆฌ๊ณ  ๋ธ”๋กœํ‚น/๋…ผ๋ธ”๋กœํ‚น

์‹ค๋ฌด๋ฅผ ์ ‘ํ•˜๋ฉด์„œ ์›น๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„ ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํ•  ์ผ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๋™๊ธฐ, ๋น„๋™๊ธฐ์— ๋Œ€ํ•˜์—ฌ์„œ๋Š” ์‰ฝ๊ฒŒ ์ ‘ํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋‚˜, ๋ธ”๋กœํ‚น์ด๋ผ๋Š” ๊ฐœ๋…์€ ์ƒ์†Œํ–ˆ๋‹ค. ์–ธ๋œป๋ณด๋ฉด ๋™๊ธฐ์™€ ๋ธ”๋กœํ‚น์€ ๋™์ผ ๊ฐœ๋…๊ฐ™๊ธฐ๋„ ํ•˜์ง€๋งŒ, ํฐ ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ์—†๋Š” ๋ณ„๊ฐœ์˜ ๊ฐœ๋…์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ฐจ์ด๋Š” ๋ญ˜๊นŒ? ๋งŽ์€ ๊ธ€์„ ์ฝ์—ˆ์ง€๋งŒ, ๊ทธ๋ฆผ์œผ๋กœ ์ •์˜ํ•˜๋Š” ๊ธ€์ด ๊ฐ€์žฅ ์ดํ•ด๊ฐ€ ์‰ฌ์› ๋‹ค. ๋‚˜๋„ ๋” ์ •ํ™•ํ•œ ์ดํ•ด๋ฅผ ์œ„ํ•˜์—ฌ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ณด์•˜๋‹ค. ๋ชฉ์ฐจ 1. ๋™๊ธฐ(Synchronous) 2. ๋น„๋™๊ธฐ(Asynchronous) 3. ๋ธ”๋กœํ‚น(Blocking) 4. ๋…ผ๋ธ”๋กœํ‚น(non-Blocking) ๋™๊ธฐ(Synchronous) ์ž‘์—…์˜ ์ˆ˜ํ–‰ ์ฃผ์ฒด๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ. ๊ทธ ์ž‘์—…๋“ค์ด '์‹œ๊ฐ„'์„ ์„œ๋กœ ๋งž์ถ˜๋‹ค๋ฉด ๋™๊ธฐ์ด๋‹ค. ์‹œ๊ฐ„์„ ๋งž์ถ˜๋‹ค๋Š” ๊ฒƒ์€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”๊ฑธ๊นŒ? ๋งŒ์•ฝ ์ž‘์—…์ด 2๊ฐœ๋ผ๊ณ  ๊ฐ€์ •ํ•  ..

[Java] Restful api ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์ œ

ํƒ€ ์‹œ์Šคํ…œ์˜ API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์‹ ํ–ˆ๋˜ ์‚ฌ์šฉ ์˜ˆ์ œ์ด๋‹ค. POST๋ฐฉ์‹์ด๋ฉฐ, ๋ฐ์ดํ„ฐ๋Š” JsonObject๋ฅผ ๋งŒ๋“œ๋Š” ๋ถ€๋ถ„์€ ์‹ค์ œ ์šด์˜ ์†Œ์Šค์—ฌ์„œ ์˜คํ”ˆํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒbody์ชฝ์— String์™ธ์—, Json Obect๊ฐ€ ์ค‘์ฒฉํ•˜์—ฌ ๋“ค์–ด๊ฐ€์žˆ์–ด์„œ ์• ๋ฅผ ๋จน์—ˆ๋˜ ๊ธฐ์–ต์ด ์žˆ๋‹ค. private void restApiCallPost(String sendUrl, String token, String param, JSONObject jsonObject) { String[] returnData = new String[2]; HttpURLConnection con = null; try { URL url = new URL(sendUrl); //API URL ์ž…๋ ฅ con = (HttpURLConnection) url.openConn..

๋ฐ˜์‘ํ˜•