[ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] CORS ๋ฌธ์ œ ํ•ด๊ฒฐ ํ•˜๊ธฐ : ์‹ค์ œ ์›์ธ์€ CORS๊ฐ€ ์•„๋‹Œ ๋ฌดํ•œ ์žฌ๊ท€ ํ˜ธ์ถœ
ยท
โ˜•Java
ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ ๊ฐ„์˜ API ํ†ต์‹ ์—์„œ ๋ฐœ์ƒํ•˜๋Š” CORS ๋ฌธ์ œ๋Š” ํ”ํ•œ ์ด์Šˆ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ CORS ๋ฌธ์ œ๋กœ ๋ณด์ด๋Š” ํ˜„์ƒ์ด ์‹ค์ œ๋กœ๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ์—์„œ ๊ธฐ์ธํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ์‚ฌ๋ก€์—์„œ๋Š” CORS ์—๋Ÿฌ๋กœ ์˜คํ•ด๋œ ๋ฌธ์ œ์˜ ์‹ค์ œ ์›์ธ์„ ์„ค๋ช…ํ•˜๊ณ  ํ•ด๊ฒฐ ๊ณผ์ •์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.๐Ÿ™‚ โœ”๏ธ CORS๋ž€?CORS(Cross-Origin Resource Sharing)๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ ๊ฐ„์— ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ๋•Œ ๋ณด์•ˆ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ •์ฑ…์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ถœ์ฒ˜(๋„๋ฉ”์ธ, ํฌํŠธ, ํ”„๋กœํ† ์ฝœ)์˜ ์š”์ฒญ์„ ์ฐจ๋‹จํ•˜๋ฉฐ, ์ด๋ฅผ ํ—ˆ์šฉํ•˜๋ ค๋ฉด ์„œ๋ฒ„์—์„œ CORS ์„ค์ •์„ ํ†ตํ•ด ํŠน์ • ์ถœ์ฒ˜๋ฅผ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. โœ”๏ธ ๋ฌธ์ œ ์ƒํ™ฉํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์„œ๋ฒ„์— API๋ฅผ ์š”์ฒญํ•  ๋•Œ, CORS ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” CORS๊ฐ€ ์›์ธ์ด ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค...
[Spring Boot] ํ”„๋กœ์ ํŠธ ํ•„์ˆ˜ ์˜์กด์„ฑ(Spring Web, Lombok, DevTools, Thymeleaf)
ยท
โ˜•Java
Spring Boot ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ์˜์กด์„ฑ๋“ค ์ค‘ DevTools, Spring Web, Thymeleaf, Lombok ์€ ๊ฐ๊ฐ ํŠน์ • ๊ธฐ๋Šฅ๊ณผ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒŒ์‹œ๋ฌผ์—์„œ๋Š” ๊ฐ ์˜์กด์„ฑ์ด ์ œ๊ณตํ•˜๋Š” ์ฃผ์š” ๊ธฐ๋Šฅ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.๐Ÿ™‚ 1๏ธโƒฃ Spring Webdependencies { // Spring Boot์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜ ์˜์กด์„ฑ์ž…๋‹ˆ๋‹ค. implementation 'org.springframework.boot:spring-boot-starter-web'}โœ”๏ธ Spring Web์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ RESTful API ๊ฐœ๋ฐœ์— ํ•„์ˆ˜์ ์ธ ์˜์กด์„ฑ์ž…๋‹ˆ๋‹ค.Spring MVC (Model-View-Controller) : ..
[Java] ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ(List, Queue, Set, Map)
ยท
โ˜•Java
Java์˜ ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋‹ค์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ํ™”๋œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค๋“ค์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒŒ์‹œ๋ฌผ์—์„œ๋Š” ์ฃผ์š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ทธ์— ์†ํ•œ ํด๋ž˜์Šค์˜ ํŠน์„ฑ ๋ฐ ์ฃผ์š” ๋ฉ”์„œ๋“œ๋ฅผ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.๐Ÿ™‚ 1๏ธโƒฃ List ์ธํ„ฐํŽ˜์ด์Šค : ์ˆœ์„œ ์œ ์ง€, ์ค‘๋ณต ํ—ˆ์šฉ๐Ÿ’ก ์ฃผ์š” ๋ฉ”์„œ๋“œ : add, get, set, indexOf`add(E e)`, `add(int index, E element)`, `get(int index)`, `remove(int index)`, `remove(Object o)``set(int index, E element)`, `size()`, `isEmpty()`, `contains(Object o)`, `iterator()``indexOf(Object o)`, `lastInd..
[Java] Map ์‚ฌ์šฉ ๋ฐฉ๋ฒ•(keySet(), entrySet(), Map.entry())
ยท
โ˜•Java
Java์˜ Map์€ ํ‚ค-๊ฐ’ ์Œ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒŒ์‹œ๋ฌผ์—์„œ๋Š” Map์„ ๋‹ค๋ฃจ๋Š” ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ๋ฉ”์„œ๋“œ์ธ keySet(), entrySet(), ๊ทธ๋ฆฌ๊ณ  Map.entry()์˜ ์‚ฌ์šฉ๋ฒ•์„ ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.๐Ÿ™‚ 1๏ธโƒฃ Map.keyset() : ๋ชจ๋“  ํ‚ค ๋ฐ˜ํ™˜keySet() ๋ฉ”์„œ๋“œ๋Š” Map์˜ ๋ชจ๋“  ํ‚ค๋ฅผ Set ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•˜์—ฌ, ๊ฐ ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. Map์˜ ํ‚ค๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ฐ€์ ธ์™€ ๊ฐ ํ‚ค์— ๋Œ€ํ•ด ๊ฐ’์„ ์กฐํšŒํ•˜๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ธ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.Map map = new HashMap();map.put("์‚ฌ๊ณผ", 10); map.put("๋”ธ๊ธฐ", 20); // ํ‚ค-๊ฐ’ ์Œ ์ถ”๊ฐ€// Map์˜ ๋ชจ๋“  ํ‚ค๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ๊ฐ’์„ ์ถœ๋ ฅโœจfor (String key : map.key..
[Java] JPA, JPQL, QueryDSL ๊ฐœ๋… ์ •๋ฆฌ
ยท
โ˜•Java
1๏ธโƒฃ JPA (Java Persistence API)๊ฐœ์š”JPA๋Š” ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ORM (Object-Relational Mapping)์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ API๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ์ฒด ๊ฐ„์˜ ๋งคํ•‘์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์™€ ํ•จ๊ป˜ `Hibernate`๋Š” JPA์˜ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌํ˜„์ฒด๋กœ, JPA์˜ ๊ธฐ๋Šฅ์„ ๋”์šฑ ๊ฐ•ํ™”ํ•˜๊ณ  ๋‹ค์–‘ํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.์ฃผ์š” ๊ธฐ๋Šฅ ๋ฐ ๊ฐœ๋…โœ”๏ธ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘(Entity Mapping)JPA๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์„ ์ž๋ฐ” ํด๋ž˜์Šค(์—”ํ‹ฐํ‹ฐ)์™€ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, `@Entity` ์• ๋„ˆํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜..
[Spring Boot] Log4j2 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ SQL ์ฟผ๋ฆฌ ๋กœ๊น… ์„ค์ •ํ•˜๊ธฐ
ยท
โ˜•Java
https://logging.apache.org/log4j/2.12.x/ Log4j – Apache Log4j 2 - Apache Log4j 2Apache Log4j 2 Apache Log4j 2 is an upgrade to Log4j that provides significant improvements over its predecessor, Log4j 1.x, and provides many of the improvements available in Logback while fixing some inherent problems in Logback’s architecture. ## Impologging.apache.orgLog4jdbc๋Š” JDBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ฐ์‹ธ์„œ SQL ์ฟผ๋ฆฌ์™€ ์‹คํ–‰ ์‹œ๊ฐ„์„ ๋กœ๊ทธ๋กœ ๊ธฐ๋ก..
[Java] Arrays.sort๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด ๋ฐฐ์—ด์„ ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•(Comparator, ์ต๋ช… ํด๋ž˜์Šค, ๋žŒ๋‹ค์‹)
ยท
โ˜•Java
docs.oracle.com Arrays (Java SE 11 & JDK 11 )Compares two int arrays lexicographically over the specified ranges. If the two arrays, over the specified ranges, share a common prefix then the lexicographic comparison is the result of comparing two elements, as if by Integer.compare(int, int), at a reldocs.oracle.com๐Ÿ“šJavaDocs(๋ฒˆ์—ญ)public static  void sortโ€‹(T[] a, Comparator c)(๋ฐ˜ํ™˜ ํƒ€์ž… ์•ž์— ์žˆ๋Š” ``๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ..
[๋ชฉ์ฐจ] Do it! ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์ž๋ฐ” ํŽธ
ยท
โ˜•Java
https://www.yes24.com/Product/Goods/108571508 Do it! ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์ž๋ฐ” ํŽธ - ์˜ˆ์Šค24IT ๊ธฐ์—… ์ทจ์—…๊ณผ ์ด์ง์˜ ํ•„์ˆ˜ ๋‹จ๊ณ„์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ!์ถœ์ œ ๊ฒฝํ–ฅ์„ ์™„๋ฒฝํ•˜๊ฒŒ ๋ฐ˜์˜ํ•œ ํ•ต์‹ฌ 100์ œ๋กœ ํ•œ ๋ฒˆ์— ํ•ฉ๊ฒฉํ•œ๋‹ค!“์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋Š” ์–ด๋–ป๊ฒŒ ์ค€๋น„ํ•ด์•ผ ํ• ๊นŒ?” ๊ณง ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์•ž๋‘๊ณ  ์žˆ๊ฑฐwww.yes24.com 1๏ธโƒฃ ์ฒซ์งธ๋งˆ๋‹น ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์ค€๋น„ํ•˜๊ธฐ01 ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€์–ด์•ผ ํ• ๊นŒ?_01-1 ์‹œ๊ฐ„ ๋ณต์žก๋„ ํ‘œ๊ธฐ๋ฒ• ์•Œ์•„๋ณด๊ธฐโœจ_01-2 ์‹œ๊ฐ„ ๋ณต์žก๋„ ํ™œ์šฉํ•˜๊ธฐ__[000] ์ˆ˜ ์ •๋ ฌํ•˜๊ธฐ02 ์ฝ”๋“œ์˜ ๋…ผ๋ฆฌ ์˜ค๋ฅ˜๋ฅผ ์–ด๋–ป๊ฒŒ ์žก์„๊นŒ?_02-1 ๋””๋ฒ„๊น…์€ ์™œ ์ค‘์š”ํ• ๊นŒ?_02-2 ๋””๋ฒ„๊น… ํ™œ์šฉ ์‚ฌ๋ก€ ์‚ดํŽด๋ณด๊ธฐ  2๏ธโƒฃ ๋‘˜์งธ๋งˆ๋‹น Do it! ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ โ€• ๊ธฐ์ดˆ ํŽธ03 ์ž๋ฃŒ๊ตฌ์กฐ_03-1 ๋ฐฐ์—ด๊ณผ ..
yewon31
'โ˜•Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก