Community

๐Ÿ•Š๏ธ 2024 ๋ฒ„ํด๋ฆฌ์ฆˆ Java SpringBoot ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ (1)

HashMap์€ ๋‚ด๋ถ€์—์„œ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๊ฐ€? * Java HashMap์€ null ํ‚ค์™€ null ๊ฐ’์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. * HashMap์€ ์ˆœ์„œ๊ฐ€ ์ง€์ •๋œ ์ปฌ๋ ‰์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค. ํ‚ค ์ง‘ํ•ฉ์„ ํ†ตํ•ด HashMap์„ ๋ฐ˜๋ณตํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, HashMap์— ์ถ”๊ฐ€๋˜๋Š” ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. * HashMap์€ ๋น„๋™๊ธฐํ™”๋˜๊ณ  null ๊ฐ’์„ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๋ฉด Hashtable๊ณผ ๊ฑฐ์˜ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. * HashMap์€ ๋งต ์—”ํŠธ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€ ํด๋ž˜์Šค์ธ Node๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. * HashMap์€ ๋ฒ„ํ‚ท ๋˜๋Š” ๋นˆ(bin)์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‹ฑ๊ธ€ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์— ํ•ญ๋ชฉ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋นˆ ์ˆ˜๋Š” 16๊ฐœ์ด๊ณ  ํ•ญ์ƒ 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์ž…๋‹ˆ๋‹ค. * HashMap์€ get ๋ฐ put ์—ฐ์‚ฐ์„ ์œ„ํ•ด hashCode() ๋ฐ equals() ๋ฉ”์„œ๋“œ๋ฅผ ํ‚ค์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ HashMap ํ‚ค ๊ฐ์ฒด๋Š” ์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ž˜ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด String๊ณผ Integer๊ณผ ๊ฐ™์€ ๋ถˆ๋ณ€ ํด๋ž˜์Šค๊ฐ€ ํ‚ค์— ๋” ์ ํ•ฉํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค. * Java HashMap์€ thread safeํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ ConcurrentHashMap ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ Collections.synchronizedMap() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ย  HTTP ์š”์ฒญ ๋ฉ”์„œ๋“œ ์ฐจ์ด - Get vs Put vs Post? Java ์ธํ„ฐ๋ทฐ์—์„œ๋Š” ํ•ญ์ƒ put vs post์™€ ๊ฐ™์€ HTTP ๋ฉ”์„œ๋“œ ์งˆ๋ฌธ์„ ํ•ฉ๋‹ˆ๋‹ค.ย  ย  ๋ฏธ๋ฆฌ ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฌธ์ž์—ด ๋ฐฐ์—ด์„ reverse ํ•ด๋ณด์„ธ์š”ย  ๋ฉด์ ‘๊ด€๋“ค์€ Java API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ˆ˜๋™์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์–ดํ•ฉ๋‹ˆ๋‹ค.ย  public class ReverseArrayWithoutPredefinedMethod { public static void main(String[] args) { // Sample array of strings String[] array = {"apple", "banana", "orange", "grape"}; // Printing original array System.out.println("Original array:"); printArray(array); // Reversing the array reverseArray(array); // Printing reversed array System.out.println("\nReversed array:"); printArray(array); } // Method to reverse the array of strings public static void reverseArray(String[] arr) { int start = 0; int end = arr.length - 1; // Swap elements from start to end until mid is reached while (start < end) { // Swapping elements String temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; // Moving pointers towards the center start++; end--; } } // Method to print the array of strings public static void printArray(String[] arr) { for (String s : arr) { System.out.print(s + " "); } System.out.println(); } } ย  comparable๊ณผ comparator์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”? Java์—์„œ Comparable๊ณผ Comparator์˜ ๊ฐ€์žฅ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด์ ์€ ์ง€์›ํ•˜๋Š” ์ •๋ ฌ ์‹œํ€€์Šค์˜ ์ˆ˜์ด๋‹ค: * Comparable: ๋‹จ์ผ ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.ย  * Comparator: ์‚ฌ์šฉ์ž ์ง€์ •์— ๋‹ค๋ผ ์—ฌ๋Ÿฌ ์ •๋ ฌ ์‹œํ€€์Šค๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.ย  [Comparable] * ํด๋ž˜์Šค์˜ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ž์—ฐ์Šค๋Ÿฌ์šด ์ˆœ์„œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. * ํด๋ž˜์Šค ์ž์ฒด์—์„œ compareTo(Object o) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. * ์ด ๋ฉ”์„œ๋“œ๋Š” ํ˜„์žฌ ๊ฐ์ฒด๊ฐ€ ์ธ์ˆ˜(o)๋ณด๋‹ค ์ž‘์œผ๋ฉด ์Œ์ˆ˜, ๊ฐ™์œผ๋ฉด 0, ํ˜„์žฌ ๊ฐ์ฒด๊ฐ€ ๋” ํฌ๋ฉด ์–‘์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. * ํด๋ž˜์Šค์˜ ๋‹จ์ผ ์ธก๋ฉด์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ ์ •๋ ฌ๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. [Comparator] * ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ •๋ ฌ ๋กœ์ง์„ ์ •์˜ํ•˜๋Š” ๋ณ„๋„์˜ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. * ๋ณ„๋„์˜ ํด๋ž˜์Šค ๋˜๋Š” ์ต๋ช…์˜ ๋‚ด๋ถ€ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. * compare(Object o1, Object o2) ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋‘ ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•˜๊ณ  ์ฒซ ๋ฒˆ์งธ ๊ฐ์ฒด๊ฐ€ ๋‘ ๋ฒˆ์งธ ๊ฐ์ฒด๋ณด๋‹ค ์ž‘์œผ๋ฉด ์Œ์ˆ˜, ๊ฐ™์œผ๋ฉด 0, ํฌ๋ฉด ์–‘์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. * ๋‹ค์–‘ํ•œ ๊ฐ์ฒด ํŠน์„ฑ์— ๋”ฐ๋ผ ์ปค์Šคํ…€ํ•œ ์ •๋ ฌ ๊ธฐ์ค€์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ย  jdbctemplate, statement, preparedstatement, callable statement๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”? JDBC(Java Database Connectivity)๋Š” Java์˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.ย  [JdbcTemplate] * JdbcTemplate์€ JDBC API์˜ ์ž‘์—…์„ ๋‹จ์ˆœํ™” ํ•˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. * ์ปค๋„ฅ์…˜, statement ์ƒ์„ฑ ๋ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ถ”์ƒํ™”ํ•ฉ๋‹ˆ๋‹ค. * prepared statements ์™€ ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋ฐ”์ธ๋”ฉ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ SQL ์ฟผ๋ฆฌ ๋ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [Statement] * Satement ์ธํ„ฐํŽ˜์ด์Šค๋Š” SQL ๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. * Connection ๊ฐ์ฒด์—์„œ Statement ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * SELECT, INSERT, UPDATE, DELETE ๋“ฑ์˜ ๋‹ค์–‘ํ•œ SQL ๋ฌธ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ๊ทธ๋Ÿฌ๋‚˜, Statement ๋Š” ์ œํ•œ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. * SQL ๋ฌธ์ž์—ด์—์„œ ์ง์ ‘ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, SQL ์ฃผ์ž… ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•ฉ๋‹ˆ๋‹ค. * ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋กœ ๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ˜๋ณต ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. [PreparedStatement] * PreparedStatement๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ํ•œ๊ณ„๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” Statement์˜ ํ™•์žฅ์ž…๋‹ˆ๋‹ค. * ๋งค๊ฐœ ๋ณ€์ˆ˜('?')์— ๋Œ€ํ•œ ์ž๋ฆฌ ํ‘œ์‹œ์ž๊ฐ€ ์žˆ๋Š” ์‚ฌ์ „ ์ปดํŒŒ์ผ๋œ SQL ํ…œํ”Œ๋ฆฟ์„ ์ œ๊ณตํ•˜์—ฌ PreparedStatement ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. * ๊ทธ๋Ÿฐ ๋‹ค์Œ setter ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋งค๊ฐœ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. * ์ด๋ ‡๊ฒŒ ์ฟผ๋ฆฌ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ๋ณด์•ˆ์ด ํ–ฅ์ƒ๋˜๊ณ (SQL ์ฃผ์ž… ๋ฐฉ์ง€) ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. (๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€) [CallableStatement] * CallableStatement๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ํ”„๋กœ์‹œ์ €๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋œ Statement์˜ ํ™•์žฅ์ž…๋‹ˆ๋‹ค. * ์ €์žฅ๋œ ํ”„๋กœ์‹œ์ €๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฏธ๋ฆฌ ์ž‘์„ฑ๋œ SQL ์ฝ”๋“œ ๋ธ”๋ก์œผ๋กœ, ์ด ๋ธ”๋ก์€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž ์žฌ์ ์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * CallableStatement๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ €์žฅ๋œ ํ”„๋กœ์‹œ์ €์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ •์˜ํ•˜๊ณ  ํ˜ธ์ถœ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ย  @Component์™€ @Autowired ์–ด๋…ธํ…Œ์ด์…˜์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”? ์–ด๋…ธํ…Œ์ด์…˜์€ ์˜์กด์„ฑ ์ฃผ์ž… ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ย  [@Component] * Spring bean์˜ ์Šคํ…Œ๋ ˆ์˜คํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค. * Spring์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์ž‘ํ•˜๋Š” ๋™์•ˆ @Component ์–ด๋…ธํ…Œ์ด์…˜์ด ๋‹ฌ๋ฆฐ ํด๋ž˜์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. * ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค๋Š” Spring container์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋ฉฐ, ์ด๋Š” ๋‹ค์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค: * ๊ทธ๋“ค์„ ์ธ์Šคํ„ด์Šคํ™” ํ•ฉ๋‹ˆ๋‹ค. * ํ•„์š”ํ•œ ์ข…์†์„ฑ์„ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. * ๋‹ค๋ฅธ bean์— ์ž๋™ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. [@Autowired] * Spring์ด ๊ด€๋ฆฌํ•˜๋Š” ๋นˆ์— ์ข…์†์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. * @Autowired๋กœ ํ•„๋“œ, ์„ธํ„ฐ ๋ฉ”์„œ๋“œ ๋˜๋Š” ์ƒ์„ฑ์ž ์ธ์ˆ˜์— ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * Spring์€ ์ž๋™์œผ๋กœ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ์—์„œ ํ˜ธํ™˜๋˜๋Š” ๋นˆ์„ ์ฐพ์•„ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. * ์ด๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ ์ฃผ์ž…์„ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค. [@Compoent์™€ @Autowired์˜ ๊ด€๊ณ„] * @Component๋Š” ํด๋ž˜์Šค์— ๋นˆ์„ ๋งˆํฌํ•ฉ๋‹ˆ๋‹ค. * @Autowired๋Š” ์ด ๋นˆ์— ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. [์ฆ‰,] * @Component: "์ด ํด๋ž˜์Šค๋Š” Spring์ด ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๋นˆ์ด์•ผ." * @Autowired: "Spring, ์—ฌ๊ธฐ์— ํ˜ธํ™˜๋˜๋Š” ๋นˆ์„ ์ฃผ์ž…ํ•ด์ค˜." [์ถ”๊ฐ€ ํฌ์ธํŠธ] * ๊ธฐ๋ณธ์ ์œผ๋กœ, Spring์€ main ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํด๋ž˜์Šค๊ฐ€ ์œ„์น˜ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์Šค์บ”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์„ @ComponentScan ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ๋™์ผํ•œ ์œ ํ˜•์˜ ๋นˆ์ด ์—ฌ๋Ÿฌ๊ฐœ ์žˆ๋Š” ๊ฒฝ์šฐ, Qualifier๋ฅผ ์ด์šฉํ•˜์—ฌ ์ ์ ˆํ•œ ๋นˆ์„ ์ฃผ์ž…์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ย  SQL Injection์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”? SQL ์ฃผ์ž…์€ ์›น ๋ณด์•ˆ ์ทจ์•ฝ์„ฑ์ž…๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ›”์น˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์‹ฌ์ง€์–ด๋Š” ์‚ญ์ œ๊นŒ์ง€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ย  SQL ์ฃผ์ž…์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ณด์•ˆ ์กฐ์น˜๋ฅผ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. * ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฐ’์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. * prepared statements๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์‹ค์ œ SQL ์ฟผ๋ฆฌ์™€ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. * ๋ณต์žกํ•œ ์ฟผ๋ฆฌ์—๋Š” stored procedures ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค. * ์ตœ์‹  ๋ณด์•ˆ ํŒจ์น˜๋กœ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ย  Hibernate์˜ sessionfactory์™€ session์€ ๋ฌด์—‡์ธ๊ฐ€์š”? Java์šฉ ORM(object-relational mapper) ํ”„๋ ˆ์ž„์›Œํฌ์ธ Hibernate์—์„œ Session ๋ฐ SessionFactory๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ย  [SessionFactory] * Session ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ํŒฉํ† ๋ฆฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๋‹น ํ•˜๋‚˜์˜ SessionFactory๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. * ์ž๋ฐ” ํด๋ž˜์Šค์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ •๋ณด ๋ฐ ๋งคํ•‘๊ณผ ๊ฐ™์€ hibernate ๊ตฌ์„ฑ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์บก์Аํ™”ํ•ฉ๋‹ˆ๋‹ค. * SessionFactory๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์ž‘ํ•˜๋Š” ๋™์•ˆ ์ƒ์„ฑ๋˜๋ฉฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๋™์•ˆ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ์„ ์œ„ํ•ด connection pooling์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. * ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ๋ฐ ๋งคํ•‘์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์บ์‹œํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. [Session] * ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. Session์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด์— ๋Œ€ํ•œ CRUD ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * Session์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ  ํŠน์ • ์ž‘์—…์— ์‚ฌ์šฉ๋œ ๋‹ค์Œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๋‹ซํž™๋‹ˆ๋‹ค. thread-safeํ•˜์ง€ ์•Š์œผ๋ฉฐ ์Šค๋ ˆ๋“œ ๊ฐ„์— ๊ณต์œ ๋˜์–ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. * persistent ๊ฐ์ฒด๋ฅผ ์ €์žฅ, ์—…๋ฐ์ดํŠธ ๋ฐ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. * ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. * ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. * Session ๋‚ด์—์„œ ์ตœ๊ทผ์— ์ ‘๊ทผํ•œ ๊ฐ์ฒด์˜ ์ž„์‹œ ์บ์‹œ๋ฅผ ์œ ์ง€ํ•˜์—ฌ ๋ฐ˜๋ณต ์ž‘์—…์„ ์œ„ํ•œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•ฉ๋‹ˆ๋‹ค. ย  HQL์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”? HQL์€ Hibernate Query Language์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด, Java์—์„œ ์ธ๊ธฐ ์žˆ๋Š” ORM ํ”„๋ ˆ์ž„์›Œํฌ์ธ Hibernate๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋œ ํŠน๋ณ„ํ•œ ์ฟผ๋ฆฌ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. * ๊ฐ์ฒด์— ์ง‘์ค‘: HQL์„ ์‚ฌ์šฉํ•˜๋ฉด ์›์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”๊ณผ ์—ด ๋Œ€์‹  Java ํด๋ž˜์Šค์˜ ์ด๋ฆ„๊ณผ ์†์„ฑ์„ ์ด์šฉํ•ด ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ˆœ์ˆ˜ SQL์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์— ๋น„ํ•ด ์ฝ๊ธฐ ์‰ฝ๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. * HQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด Hibernate๊ฐ€ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํ•ด๋‹นํ•˜๋Š” SQL ๋ฌธ์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ž์˜ ์–ธ์–ด์— ๋Œ€ํ•œ ๊ฑฑ์ •์—์„œ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒˆ์—ญ: [https://ducktopia.tistory.com/117] ์›๋ฌธ:

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค