λͺ©λ‘π» Java Study/Java μ΄λ‘ μ 리 (27)
Coding Planet
λ¬Έμ μν© μ€λͺ μ΅κ·Ό νλ‘μ νΈμμ AJAXλ₯Ό μ¬μ©νμ¬ μλ²λ‘λΆν° νμΌμ λ€μ΄λ‘λν λ νκΈ νμΌλͺ μ΄ κΉ¨μ§λ νμμ κ²ͺμλ€. λμΌν νμΌ λ€μ΄λ‘λ κΈ°λ₯μ form μ μΆ λ°©μμΌλ‘ ꡬννμ λλ μ΄λ¬ν λ¬Έμ κ° λ°μνμ§ μμλ€.882ECA99EEB84A7ECB18FEDB5B3%84_240715-240726.xlsx -> μ΄λ°μμΌλ‘ νκΈ κΉ¨μ§ μμΈ λΆμAJAXμ form μ μΆ λ°©μμ μ°¨μ΄μ Form μ μΆ λ°©μ: λΈλΌμ°μ κ° κΈ°λ³Έμ μΌλ‘ μ 곡νλ λ€μ΄λ‘λ κΈ°λ₯μ νμ©νλ€. λΈλΌμ°μ λ Content-Disposition ν€λλ₯Ό μλμΌλ‘ μ²λ¦¬νκ³ , νμΌλͺ μΈμ½λ©μ μμμ μ²λ¦¬νλ€. λ°λΌμ Form νμμ νμΌλ€μ΄λ‘λμμλ νμΌλͺ μ΄ μ λλ‘ μΆλ ₯λ¬λ€.AJAX λ°©μ: XMLHttpRequest λλ Fetch APIλ₯Ό μ¬μ©νμ¬ λΉ..
private static String escapeSpecialCharacters(String data) { if (data == null) { return ""; } String escapedData = data.replace("\"", "\"\""); if (data.contains(",") || data.contains("\n") || data.contains("\"")) { escapedData = "\"" + escapedData + "\""; } return escapedData; }}λ°μ΄ν°λ₯Ό csvλ‘ λ§λλ κ³Όμ μμ νΉμλ¬Έμμ λν μ²λ¦¬κ° νμνλ€. data listμμ ..
νμ¬ κ°λ°μ€μΈ μΉνμ΄μ§ λ‘κ·ΈμΈ μ SpringSecurityLoginFilterλ₯Ό νλ©΄μ νμν μ μ°¨λ₯Ό λ°λ₯΄κ³ μλ€. νμ¬ νμ΄μ§λ μ¬μ©μκ° κ°μ μ μ²μ νλ©΄ κ΄λ¦¬μκ° μΉμΈ ν μ¬μ΄νΈλ₯Ό μ΄μ©ν μ μλ€. μ΄ λ μ¬μ© μν(κ°μ μ μ² or κ°μ μΉμ)μ μ‘°νν ν κ°μ λκΈ° μνλΌλ©΄ alertμ°½μ λμ°κ³ λ€μ λ‘κ·ΈμΈ νμ΄μ§λ‘ 보λ΄μΌνλ€. Java μλΈλ¦Ώμμ ν΄λΌμ΄μΈνΈμ JavaScript Alert μ°½μ λμ°λ €λ©΄, HttpServletResponse κ°μ²΄λ₯Ό μ¬μ©ν΄μΌ νλ€. λ€μμ κ°μ μ μ² μνκ° 'μΉμΈ λκΈ°(A)'μΈ κ²½μ°, μ¬μ©μμκ² μνλ₯Ό μλ¦¬κ³ λ‘κ·ΈμΈ νμ΄μ§λ‘ 리λλ μ νλ μμ μ½λμ΄λ€. if ("A".equals(loginVO.getUserSttus())) { httpResponse.setConte..
μλ° μ λ¬Έ λ 벨μμ κ°λ°μ λ¬Έμλ₯Ό 보거λ githubμ λ€λ₯Έ μ½λλ€μ λ³΄λ€ λ³΄λ©΄ Boxμ κ°μ λ―μ ννμ λ¬Έμ₯μ λ§λκ² λλ€. μ΄λ¬ν κ²λ€μ΄ μ§λ€λ¦μ€μΈλ° λ¨κΆμ± μ μμ μλ°μ μ μμ μ°Έκ³ νμ¬ μ λ¬Έμμ€μμ κ°λ¨νκ² μ΄ν΄λ³΄κ³ μ νλ€. μ΄λ ΅λ€λ©΄ κ°μ‘°λ λ΄μ©λ§ λ΄λ λμΆ© κ°μ μ‘μ μ μλ€. | μ§λ€λ¦μ€λ? μ§λ€λ¦μ€λ λ€μν νμ μ κ°μ²΄λ€μ λ€λ£¨λ λ©μλλ 컬λ μ ν΄λμ€μ μ»΄νμΌ μ μ νμ 체ν¬(compile-time type check)λ₯Ό ν΄μ£Όλ κΈ°λ₯μ΄λ€. κ°μ²΄μ νμ μ μ»΄νμΌ μμ 체ν¬νκΈ° λλ¬Έμ κ°μ²΄μ νμ μμ μ±μ λμ΄κ³ νλ³νμ λ²κ±°λ‘μμ΄ μ€μ΄λ λ€. -μλ°μ μ μ 1. μ»΄νμΌ μ μ νμ 체ν¬(compile-time type check) μ§λ€λ¦μ€λ₯Ό μ¬μ©νλ©΄, 컬λ μ μ μ μ₯λλ κ°μ²΄μ νμ μ μ»΄νμΌ μμ ..
λλ€μμ κ΄ν κ°κ΄μ μΈ ν¬μ€νΈλ μλ μ°Έμ‘°! https://sharonprogress.tistory.com/330 λλ€μ(Lamda expression) μ΄μ 리μ νμ©μμ μλ ν¬μ€νΈμ μμ λ° λ΄μ©μ λ¨κΆμ± μ μμ μλ°μ μ μμ λ§μ΄ μ°Έκ³ νλ€. | λλ€μμ΄λ λλ€μμ κ°λν λ§ν΄μ λ©μλλ₯Ό νλμ 'μ(expression)'μΌλ‘ ννν κ²μ΄λ€. μλ° 8λΆν° λ±μ₯ν κ°λ μΌ sharonprogress.tistory.com μ μ ν¬μ€νΈμμ μ€λͺ νλλ‘ λλ€μμ λ©μλλ₯Ό νλμ μμΌλ‘ ννν΄ κ°λ΅νλ©΄μ λͺ ννκ² μμΌλ‘ ννν μ μλλ‘νλ ννμμ΄λ€. μ΄μ λν΄ λλ€μμ΄ νλμ λ©μλλ§ νΈμΆνλ κ²½μ°μλ 'λ©μλ μ°Έμ‘°(method reference)'λΌλ λ°©λ²μΌλ‘ λλ€μμ λμ± κ°λ΅νκ² μΈ μ μλ€. | λ©μ..
μλ ν¬μ€νΈμ μμ λ° λ΄μ©μ λ¨κΆμ± μ μμ μλ°μ μ μμ λ§μ΄ μ°Έκ³ νλ€. | λλ€μμ΄λ λλ€μμ κ°λν λ§ν΄μ λ©μλλ₯Ό νλμ 'μ(expression)'μΌλ‘ ννν κ²μ΄λ€. μλ° 8λΆν° λ±μ₯ν κ°λ μΌλ‘ κ°μ²΄μ§ν₯μΈμ΄μΈ μλ°μ ν¨μν νμ©μ λν΄μ£Όμλ€. λλ€μμ λ©μλμ 맀κ°λ³μλ‘ μ λ¬λμ΄μ§λ κ²μ΄ κ°λ₯νκ³ , λ©μλμ κ²°κ³Όλ‘ λ°νλ μλ μλ€. λλ€μμΌλ‘ μΈν΄ λ©μλλ₯Ό λ³μμ²λΌ λ€λ£¨λ κ²μ΄ κ°λ₯ν΄μ§ κ²μ΄λ€. λ©μλλ₯Ό λλ€μμΌλ‘ νννλ©΄ λ©μλμ μ΄λ¦κ³Ό λ°νκ°μ΄ μμ΄μ§λ―λ‘ λλ€μμ 'μ΅λͺ ν¨μ'λΌκ³ νκΈ°λ νλ€. μλ μμμ (i) -> (int)(Math.random()*5+1) λΆλΆμ΄ λλ€μμ΄λ€. int[] arr = new int[5]; Arrays.setAll(arr, (i) -> (int)(Math..
| μλ°μ μ μ(λ¨κΆ μ± μ μ) λ°μ· μ ν΅μ μΌλ‘ νλ‘κ·Έλλ°μμ ν¨μλΌλ μ΄λ¦μ μνμμ λ°μ¨ κ²μ λλ€. μνμ ν¨μμ κ°λ μ΄ μ μ¬νκΈ° λλ¬Έμ΄μ£ . κ·Έλ¬λ κ°μ²΄μ§ν₯κ°λ μμλ ν¨μ(function)λμ κ°μ²΄μ νμλ λμμ μλ―Ένλ λ©μλ(method)λΌλ μ©μ΄λ₯Ό μ¬μ©ν©λλ€. λ©μλλ ν¨μμ κ°μ μλ―Έμ΄μ§λ§, νΉμ ν΄λμ€μ λ°λμ μν΄μΌ νλ€λ μ μ½μ΄ μκΈ° λλ¬Έμ κΈ°μ‘΄μ ν¨μμ κ°μ μλ―Έμ λ€λ₯Έ μ©μ΄λ₯Ό μ νν΄μ μ¬μ©ν κ²μ λλ€. κ·Έλ¬λ μ΄μ λλ€μμμλ λ©μλκ° νλμ λ 립μ μΈ κΈ°λ₯μ νκΈ°λλ¬Έμ ν¨μλΌλ μ©μ΄λ₯Ό μ¬μ©νκΈ°λ ν©λλ€. | μ»΄ν¨ν° μΈμ΄ λ΄μμ λ©μλμ ν¨μμ μ°¨μ΄ μ»΄ν¨ν° νλ‘κ·Έλλ°μμ "λ©μλ(method)"μ "ν¨μ(function)" μ©μ΄λ μ’ μ’ νΌμ©λμ§λ§, κ·Έλ€ μ¬μ΄μλ λͺ νν μ°¨μ΄μ μ΄ μλ€...
ConCurrentHashMapκ³Ό HashTableμ 곡λΆνλ©΄μ κ²½μ쑰건과 Lockμ΄ μ£Όμ ν€μλλ‘ λ±μ₯νλ€. μ€λ λλ₯Ό 곡λΆνλ©΄μ λΉλ²νκ² λ±μ₯νκΈ° λλ¬Έμ λ κ°λ λͺ¨λ μ΄λ ΄νμ΄ μκ³ μκΈ΄ νμ§λ§ μ΄λ² κΈ°νμ μ 리νκ³ κ°μΌκ² λ€. | κ²½μ 쑰건 (Race Condition)κ³Ό Lock κ²½μ 쑰건μ λ©ν° μ€λ λ νλ‘κ·Έλ¨μμ λ κ° μ΄μμ μ€λ λκ° λ°μ΄ν°λ μμμ λμμ μ κ·Όνλ €κ³ ν λ λ°μνλ λ¬Έμ μ΄λ€. μ΄λ¬ν μν©μμ μ€λ λλ€μ μ€ν μμμ λ°λΌ νλ‘κ·Έλ¨μ κ²°κ³Όκ° λ¬λΌμ§ μ μμΌλ©°, μ΄λ λ°μ΄ν°μ μΌκ΄μ±κ³Ό μ νμ±μ ν΄μΉ μ μλ€. κ²½μ 쑰건μ λ°©μ§νκΈ° μν΄ λκΈ°ν λ©μ»€λμ¦(λνμ μΌλ‘ Lock)μ μ¬μ©νμ¬ μ€λ λλ€μ΄ μμμ μμ νκ² μ κ·Όν μ μλλ‘ ν΄μΌνλ€. Lockμ λμμ μ¬λ¬ μ€λ λκ° κ°μ μμμ ..
HashMap / HashTable / ConCurrentHashMapμ Javaμ Map μΈν°νμ΄μ€ ꡬν체μ΄λ€. | HashMap / HashTable / ConCurrentHashMap λΉκ΅νκΈ° νΉμ§/ꡬν체 HashMap Hashtable ConcurrentHashMap λκΈ°ν (Synchronization) λκΈ°νλμ§ μμ λκΈ°νλ¨ λΆλΆ λκΈ°ν(μΈκ·Έλ¨ΌνΈ λ½) Null νμ© ν€μ κ° λͺ¨λμ null νμ© null νμ©νμ§ μμ null νμ©νμ§ μμ μ±λ₯ λΉ λ¦ λλ¦Ό HashMapλ³΄λ€ λ리μ§λ§, Hashtable보λ€λ λΉ λ¦ Iterator fail-fast fail-safeκ° μλ fail-safe λ©ν° μ€λ λ νκ²½ μ ν©νμ§ μμ(λκΈ°ν μΆκ° νμ) μ ν©νμ§λ§ μ±λ₯ μ ν μ ν©νλ©° μ±λ₯ μ΅μ νλ¨ μ©λ λ¨..
|ThreadLocalμ΄λ ThreadLocalμ Javaμ μ€λ λ λ‘컬 λ³μλ₯Ό κ΄λ¦¬ν μ μλλ‘ νλ κΈ°λ₯μ΄λ€. μ§κΈκΉμ§ λ³μλ€μ ν΄λμ€, λ©μλ λ 벨μμ κ΄λ¦¬λμλλ° μ€λ λλ³λ‘ μ μ₯λκ³ κ΄λ¦¬ν μ μλ κ²μ΄λ€. μ¦, ν μ€λ λμμ μ€μ ν ThreadLocal λ³μμ κ°μ λ€λ₯Έ μ€λ λμ 곡μ λμ§ μμΌλ©°, κ° μ€λ λλ ν΄λΉ λ³μμ μμ λ§μ λ 립μ μΈ κ°μ μ μ§νκ² λλ€. μ΄λ₯Ό ν΅ν΄ μ€λ λ κ° λ°μ΄ν° κ²©λ¦¬κ° μ΄λ£¨μ΄μ Έ μ€λ λ μμ μ±(thread-safety)μ ν보ν μ μλ€. λ κ°λ¨ν μ€λͺ νμλ©΄ threadLocalλ³μλ₯Ό μ μΈνλ©΄ λ©ν° μ€λ λ νκ²½μμ κ° μ€λ λλ§λ€ λ 립μ μΈ λ³μλ₯Ό κ°μ§κ² λκ³ κ° κ°μ get(), set() λ©μλλ₯Ό ν΅ν΄ μ κ·Όν μ μκ² λλ€. **thread-safety λ©ν° μ€λ λ© ..