πŸ“–
Kyu9's Repo
  • Library of mameil
  • 이슈 κ²½ν—˜
    • 20230220_νŠΈλžœμž­μ…˜
    • 20230306_μΊμ‹±μ΄μŠˆ
    • 20230722_ν…ŒμŠ€νŠΈμ½”λ“œμ—μ„œ @Transactional
    • 20230807_deadlock
  • 인턴 μŠ€ν„°λ””
    • Gradle
    • Stream, Optional, λžŒλ‹€μ‹
    • JVM의 λ©”λͺ¨λ¦¬ ꡬ쑰, Garbage Collector
    • RESTful API
    • Microservice Architecture
    • HTTP
    • μ›Ήμ„œλ²„λž€ 무엇인가
    • Git Branch
    • TDD
    • Redis을 μ΄μš©ν•œ μΊμ‹œ
    • Thymeleaf
    • 정리가 ν•„μš”ν•œ μžλ£Œλ“€
    • SpringBoot Management
    • ν…ŒμŠ€ν¬ μ½”λ“œ λΆ„ν• 
  • 동아리 μŠ€ν„°λ””
    • κΈ°λ³Έ SQL 곡뢀
      • SQL의 κΈ°λ³Έ κ°œλ…
      • SELECT λ¬Έμž₯을 μ΄μš©ν•˜μ—¬ μ›ν•˜λŠ” 데이터 좜λ ₯ν•˜κΈ°
        • μ§‘ν•© μ—°μ‚°μž μ‚¬μš©ν•˜κΈ°
        • whereμ ˆμ— 비ꡐ μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄λ³΄κΈ°
        • SELECT_EX
        • μ‚°μˆ  μ—°μ‚°μž μ‚¬μš©ν•΄λ³΄κΈ°
      • 단일 ν–‰ ν•¨μˆ˜ μ‚¬μš©
        • lower/upper ν•¨μˆ˜ μ‚¬μš©ν•˜κΈ°
        • lengthν•¨μˆ˜ μ‚¬μš©ν•˜κΈ°
        • concatν•¨μˆ˜ μ‚¬μš©
        • substr/mid/substring ν•¨μˆ˜ μ‚¬μš©
        • instrν•¨μˆ˜ μ‚¬μš©ν•˜κΈ°
        • lpad/rpad ν•¨μˆ˜ μ‚¬μš©ν•˜κΈ°
        • trim/ltrim/rtrim ν•¨μˆ˜ μ‚¬μš©ν•˜κΈ°
        • replace ν•¨μˆ˜ μ‚¬μš©ν•˜κΈ°
        • round ν•¨μˆ˜ μ‚¬μš©ν•˜κΈ°
        • truncate ν•¨μˆ˜ μ‚¬μš©ν•˜κΈ°
        • modν•¨μˆ˜ μ‚¬μš©ν•˜κΈ°
        • ceilν•¨μˆ˜ μ‚¬μš©ν•˜κΈ°
        • floorν•¨μˆ˜ μ‚¬μš©ν•˜κΈ°
        • power ν•¨μˆ˜ μ‚¬μš©ν•˜κΈ°
        • Date fn(λ‚ μ§œ ν•¨μˆ˜)
        • ν˜• λ³€ν™˜ ν•¨μˆ˜
        • μΌλ°˜ν•¨μˆ˜λž€
    • a-ha μ‹€μŠ΅
    • ν˜Όμžμ„œ λ§Œλ“€μ–΄λ³Έ κ²Œμ‹œνŒ
    • AWS κ°•μ˜
  • 학ꡐ λ‚˜λ¨Έμ§€ 곡뢀 자료
    • μ›Ήν”„λ ˆμž„μ›Œν¬(Spring)
      • Springμ΄λž€?
      • Webframework1-1
      • Webframework1-2
      • SpringBoot의 νŠΉμ§•
      • SpringBoot 생성 방법
      • Spring Data JPA
      • SpringBoot Security
      • SpringBoot HATEOAS
  • 곡뢀 μžλ£Œλ“€
  • WS 온라인 μžλ°” μŠ€ν„°λ””
    • Week1(JVM은 무엇이며 μžλ°” μ½”λ“œλŠ” μ–΄λ–»κ²Œ μ‹€ν–‰ν•˜λŠ” 것인가.)
    • Week2(μžλ°” 데이터 νƒ€μž…, λ³€μˆ˜ 그리고 λ°°μ—΄)
    • Week3(μ—°μ‚°μž)
    • Week4(μ œμ–΄λ¬Έ)
    • Week5(클래슀)
    • Week6(상속)
    • Week7(νŒ¨ν‚€μ§€)
    • Week8(μΈν„°νŽ˜μ΄μŠ€)
    • Week9(μ˜ˆμ™Έμ²˜λ¦¬)
    • Week10(λ©€ν‹°μ“°λ ˆλ“œ ν”„λ‘œκ·Έλž˜λ°)
    • Week11(Enum)
    • Week12(Annotation)
    • Week13(I/O)
    • Week14(Generic)
    • Week15(λžŒλ‹€μ‹)
  • λ°±μ€€λ¬Έμ œ
    • μž…μΆœλ ₯κ³Ό 사칙연산
      • We love kriii(10718)
      • 고양이(10171)
      • 개(10172)
      • A+B(1000)
      • A-B(1001)
      • AxB(10998)
      • A/B(1008)
      • 사칙연산(10869)
      • λ‚˜λ¨Έμ§€(10430)
      • κ³±μ…ˆ(2588)
    • forλ¬Έ
      • ꡬꡬ단(2739)
      • A+B - 3(10950)
      • ν•©(8393)
      • λΉ λ₯Έ A+B(15552)
      • N 찍기(2741)
      • 기찍 N(2742)
      • A+B - 7(11021)
      • A+B - 8(11022)
      • 별 찍기 - 1(2438)
      • 별 찍기 - 2(2439)
      • X보닀 μž‘μ€ 수(10871)
    • ifλ¬Έ
      • 두 수 λΉ„κ΅ν•˜κΈ°(1330)
      • μ‹œν—˜ 성적(9498)
      • μœ€λ…„(2753)
      • 사뢄면 κ³ λ₯΄κΈ°(14681)
      • μ•ŒλžŒ μ‹œκ³„(2884)
      • 였븐 μ‹œκ³„(2525)
      • μ£Όμ‚¬μœ„ μ„Έκ°œ(2480)
      • 영수증(25304)
    • Whileλ¬Έ
      • A+B - 5(10952)
      • A+B - 4(10951)
      • λ”ν•˜κΈ° 사이클(1110)
    • 1차원 λ°°μ—΄
      • μ΅œμ†Œ, μ΅œλŒ€(10818)
      • μ΅œλŒ“κ°’(2562)
      • 숫자의 개수(2577)
      • λ‚˜λ¨Έμ§€(3052)
      • 평균(1546)
      • OXν€΄μ¦ˆ(8958)
      • 평균은 λ„˜κ² μ§€(4344)
    • ν•¨μˆ˜
      • μ •μˆ˜N개의 ν•©(15596)
      • μ…€ν”„ λ„˜λ²„(4673)
      • ν•œμˆ˜(1065)
    • λ¬Έμžμ—΄
      • μ•„μŠ€ν‚€μ½”λ“œ(11654)
      • 숫자의 ν•©(11720)
      • μ•ŒνŒŒλ²³ μ°ΎκΈ°(10809)
      • λ¬Έμžμ—΄ 반볡(2675)
      • 단어 곡뢀(1157)
      • λ‹¨μ–΄μ˜ 개수(1152)
      • μƒμˆ˜(2908)
      • 닀이얼(5622)
      • ν¬λ‘œμ•„ν‹°μ•„ μ•ŒνŒŒλ²³(2941)
      • κ·Έλ£Ή 단어 체컀(1316)
    • κΈ°λ³Έμˆ˜ν•™-1
      • 손읡뢄기점(1712)
      • λ²Œμ§‘(2292)
      • λΆ„μˆ˜μ°ΎκΈ°(1193)
      • λ‹¬νŒ½μ΄λŠ” μ˜¬λΌκ°€κ³  μ‹Άλ‹€(2869)
      • ACM ν˜Έν…”(10250)
      • λΆ€λ…€νšŒμž₯이 λ ν…Œμ•Ό(2775)
      • 섀탕 배달(2839)
      • 큰 수 A+B(10757)
      • Fly me to the Alpha Centauri(1011)
    • κΈ°λ³Έμˆ˜ν•™-2
      • μ†Œμˆ˜ μ°ΎκΈ°(1978)
      • μ†Œμˆ˜(2581)
      • μ†ŒμΈμˆ˜λΆ„ν•΄(11653)
      • μ†Œμˆ˜ κ΅¬ν•˜κΈ°(1929)
      • λ² λ₯΄νŠΈμ™€ 곡쑴(4948)
    • μž¬κ·€
      • ν•˜λ…Έμ΄ 탑 이동 μˆœμ„œ(11729)
      • ν”Όλ³΄λ‚˜μΉ˜ 수 5(10870)
      • 별 찍기(2447)
    • 브루트 포슀
      • λΈ”λž™μž­(2798)
      • λΆ„ν•΄ν•©(2231)
      • 덩치(7568)
      • 체슀판 λ‹€μ‹œ μΉ ν•˜κΈ°(1018)
      • μ˜ν™”κ°λ… 슘(1436)
    • μ§‘ν•©κ³Ό λ§΅
      • 숫자 μΉ΄λ“œ(10815)
      • λ¬Έμžμ—΄ μ§‘ν•©(14425)
      • 숫자 μΉ΄λ“œ2(10816)
      • λ“£λ³΄μž‘(1764)
      • λŒ€μΉ­ μ°¨μ§‘ν•©(1269)
      • μ„œλ‘œ λ‹€λ₯Έ λΆ€λΆ„ λ¬Έμžμ—΄ 갯수(11478)
    • μ •λ ¬
      • 수 μ •λ ¬ν•˜κΈ°(2750)
      • 수 μ •λ ¬ν•˜κΈ° 2(2751)
      • 수 μ •λ ¬ν•˜κΈ° 3(10989)
      • 톡계학(2108)
      • μ†ŒνŠΈμΈμ‚¬μ΄λ“œ(1427)
      • μ’Œν‘œ μ •λ ¬ν•˜κΈ°(11650)
      • μ’Œν‘œ μ •λ ¬ν•˜κΈ°2(11651)
      • 단어 μ •λ ¬(1181)
      • λ‚˜μ΄μˆœ μ •λ ¬(10814)
      • 컀트라인(25305)
      • μ’Œν‘œμ••μΆ•(18870)
    • λ°±νŠΈλž˜ν‚Ή
      • Nκ³Ό M - 1(15649)
      • Nκ³Ό M - 2(15650)
      • Nκ³Ό M - 3(15651)
      • Nκ³Ό M - 4(15652)
      • N-Queen(9663)
      • μŠ€λ„μΏ (2580)
      • μ—°μ‚°μž λΌμ›Œλ„£κΈ°(14888)
      • μŠ€νƒ€νŠΈμ™€ 링크(14889)
    • 이뢄 탐색
      • 수 μ°ΎκΈ°(1920)
    • λ™μ κ³„νšλ²•
      • ν”Όλ³΄λ‚˜μΉ˜ ν•¨μˆ˜(1003)
      • μ‹ λ‚˜λŠ” ν•¨μˆ˜ μ‹€ν–‰(9184)
      • 01타일(1904)
      • νŒŒλ„λ°˜ μˆ˜μ—΄(9461)
      • RGB거리(1149)
      • μ •μˆ˜ μ‚Όκ°ν˜•(1932)
      • 계단 였λ₯΄κΈ°(2579)
      • 1둜 λ§Œλ“€κΈ°(1463)
      • μ‰¬μš΄ 계단 수(10844)
      • 포도주 μ‹œμ‹(2156)
      • κ°€μž₯ κΈ΄ μ¦κ°€ν•˜λŠ” λΆ€λΆ„ μˆ˜μ—΄(11053)
      • κ°€μž₯ κΈ΄ 바이토닉 λΆ€λΆ„ μˆ˜μ—΄(11504)
      • 전깃쀄(2565)
      • LCS(9251)
      • 연속합(1912)
      • ν‰λ²”ν•œ λ°°λ‚­(12865)
      • λ”ν•˜κΈ°(9095)
    • DFS와 BFS
      • λ―Έλ‘œνƒμƒ‰(2178)
      • λ°”μ΄λŸ¬μŠ€(2606)
      • DFS와 BFS(1260)
      • λ‹¨μ§€λ²ˆν˜ΈλΆ™μ΄κΈ°(2667)
      • μ „μŸ - μ „νˆ¬(1303)
      • μˆ¨λ°”κΌ­μ§ˆ(1697)
      • 데슀 λ‚˜μ΄νŠΈ(16948)
      • λ‚˜μ΄νŠΈμ˜ 이동(7562)
      • 녹색 옷 μž…μ€ μ• κ°€ μ €λ‹€μ§€?(4485)
      • μŒμ‹λ¬Ό ν”Όν•˜κΈ°(1743)
      • A->B (16953)
      • μˆ¨λ°”κΌ­μ§ˆ 3(13549)
      • μˆ¨λ°”κΌ­μ§ˆ 2(12851)
    • κ΅¬ν˜„
      • 치즈(2636)
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 문제
    • SQL
      • Animal Table - Oracle
      • Animal Table - MySQL
      • Animal Table2 - Oracle
      • Animal Table 3,4 - Oracle
    • Lv1
      • 두 개 λ½‘μ•„μ„œ λ”ν•˜κΈ°
      • 제일 μž‘μ€ 수 μ œκ±°ν•˜κΈ°
      • λ¬Έμžμ—΄ λ‚΄ p와 y의 개수
      • μ˜ˆμ‚°
      • 자릿수 λ”ν•˜κΈ°
      • 두 μ •μˆ˜ μ‚¬μ΄μ˜ ν•©
      • 같은 μˆ«μžλŠ” μ‹«μ–΄
      • κ°€μš΄λ° κΈ€μž κ°€μ Έμ˜€κΈ°
      • μˆ˜λ°•μˆ˜λ°•μˆ˜λ°•μˆ˜λ°•μˆ˜λ°•μˆ˜?
      • λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λŠ” 숫자 λ°°μ—΄
      • 2016λ…„
      • 폰캣λͺ¬
      • μ„œμšΈμ—μ„œ κΉ€μ„œλ°© μ°ΎκΈ°
      • λ¬Έμžμ—΄μ„ μ •μˆ˜λ‘œ λ°”κΎΈκΈ°
      • μ†Œμˆ˜ λ§Œλ“€κΈ°
      • λ¬Έμžμ—΄ 닀루기 κΈ°λ³Έ
      • μ†Œμˆ˜ μ°ΎκΈ°(μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체)
      • 숫자 λ¬Έμžμ—΄κ³Ό μ˜λ‹¨μ–΄
      • μ΄μƒν•œ 문자 λ§Œλ“€κΈ°
      • μ—†λŠ” 숫자 λ”ν•˜κΈ°
      • λ¬Έμžμ—΄ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ λ°°μΉ˜ν•˜κΈ°
      • λ¬Έμžμ—΄ λ‚΄ λ§ˆμŒλŒ€λ‘œ μ •λ ¬ν•˜κΈ°
      • μ•½μˆ˜μ˜ κ°œμˆ˜μ™€ λ§μ…ˆ
      • 콜라츠 μΆ”μΈ‘
      • μžμ—°μˆ˜ λ’€μ§‘μ–΄ λ°°μ—΄λ‘œ λ§Œλ“€κΈ°
      • μ‹ κ·œ 아이디 μΆ”μ²œ
      • 비밀지도
      • 크레인 μΈν˜•λ½‘κΈ° κ²Œμž„
      • μ‹€νŒ¨μœ¨
      • 둜또의 졜고 μˆœμœ„μ™€ μ΅œμ € μˆœμœ„
      • ν‚€νŒ¨λ“œ λˆ„λ₯΄κΈ°
      • μ •μˆ˜ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ λ°°μΉ˜ν•˜κΈ°
    • Lv2
      • ν–‰λ ¬μ˜ κ³±μ…ˆ
      • μ˜μ–΄ λλ§μž‡κΈ°
      • μ˜μ–΄ λλ§μž‡κΈ°
      • N개의 μ΅œμ†Œ 곡배수
      • ν”Όλ³΄λ‚˜μΉ˜ 수
      • 124 λ‚˜λΌμ˜ 숫자
      • 짝지어 μ œκ±°ν•˜κΈ°
      • ν”„λ¦°ν„°
      • λ‹€μŒ 큰 숫자
      • μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’
      • μ΅œμ†Œκ°’ λ§Œλ“€κΈ°
      • 숫자의 ν‘œν˜„
      • JadenCase λ¬Έμžμ—΄ λ§Œλ“€κΈ°
      • μ˜€ν”ˆμ±„νŒ…λ°©
      • μ˜μ–΄ λλ§μž‡κΈ°
      • λ©€μ©‘ν•œ μ‚¬κ°ν˜•
      • μ˜¬λ°”λ₯Έ κ΄„ν˜Έ
      • μœ„μž₯
      • κΈ°λŠ₯개발
      • 더 맡게
      • μŠ€ν‚¬νŠΈλ¦¬
    • 완전탐색
      • λͺ¨μ˜κ³ μ‚¬(Lv1)
      • 카펫(Lv2)
      • μ†Œμˆ˜ μ°ΎκΈ°(Lv2)
    • μ •λ ¬(Sorting)
      • K번째 수(Lv1)
      • κ°€μž₯ 큰 수(Lv2)
      • H-Index(Lv2)
    • ν•΄μ‹œ(Hash)
      • μ™„μ£Όν•˜μ§€ λͺ»ν•œ μ„ μˆ˜(Lv1)
      • μ „ν™”λ²ˆν˜Έ λͺ©λ‘(Lv2)
    • νƒμš•λ²•(Greedy)
      • 체윑볡(Lv1)
      • 큰 수 λ§Œλ“€κΈ°(Lv2)
      • ꡬλͺ…λ³΄νŠΈ(Lv2)
    • λ™μ κ³„νšλ²•(DP)
      • μ •μˆ˜ μ‚Όκ°ν˜•(Lv3)
    • 깊이/λ„ˆλΉ„ μš°μ„  탐색(DFS/BFS)
      • νƒ€κ²Ÿ λ„˜λ²„(Lv2)
      • λ„€νŠΈμ›Œν¬(Lv3)
      • 단어 λ³€ν™˜(Lv3)
  • μŠ€ν”„λ§λΆ€νŠΈ μ±…
    • Day 1
    • Day 2
    • Day 3
    • Day 4
    • Day 5
    • Day 6
    • Day 7
    • Day 8
    • Day 9
    • Day 10
    • Day 11
    • Day 12
    • Day 13
    • Day 14
    • Day 15
    • Day 16
    • Day 17
  • JPA μ±…
    • ν”„λ‘œμ νŠΈ μ„ΈνŒ… 및 κΈ°λ³Έμ„€μ •
    • μ˜μ†μ„± 관리 κ°œλ…
    • μ—”ν‹°ν‹° λ§€ν•‘
      • μ‹€μŠ΅ 예제
    • 연관관계 λ§€ν•‘ 기초
      • μ‹€μŠ΅ 예제
    • λ‹€μ–‘ν•œ 연관관계 λ§€ν•‘
      • λ‹€λŒ€μΌ, μΌλŒ€λ‹€ 관계
      • μΌλŒ€μΌ, λ‹€λŒ€λ‹€ 관계
      • μ‹€μŠ΅ 예제
    • κ³ κΈ‰ λ§€ν•‘
      • 상속 관계 λ§€ν•‘
      • @MappedSuperclass
      • 볡합 킀와 식별 관계 λ§€ν•‘
      • 쑰인 ν…Œμ΄λΈ”
    • ν”„λ‘μ‹œμ™€ 연관관계 관리
      • ν”„λ‘μ‹œ
      • μ¦‰μ‹œ λ‘œλ”©κ³Ό μ§€μ—° λ‘œλ”©
      • μ˜μ†μ„± 전이, κ³ μ•„ 객체
    • κ°’ νƒ€μž…
      • μž„λ² λ””λ“œ νƒ€μž…
      • κ°’ νƒ€μž…κ³Ό λΆˆλ³€ 객체
      • κ°’ νƒ€μž…μ˜ 비ꡐ, μ»¬λ ‰μ…˜
    • 객체지ν–₯ 쿼리 μ–Έμ–΄
      • JPQL part1
      • JPQL part2
      • JPQL part3
      • QueryDSL
      • NativeSQL
      • 객체지ν–₯ 쿼리 심화
    • μ‘μš© μ• ν”Œλ¦¬μΌ€μ΄μ…˜
      • μ—”ν‹°ν‹° μ„€μ •
    • μŠ€ν”„λ§ 데이터 JPA
      • 곡톡 μΈν„°νŽ˜μ΄μŠ€
  • Kotlin In Action
    • μ½”ν‹€λ¦°μ˜ νŠΉμ§•
    • μ½”ν‹€λ¦°μ˜ 기초
    • ν•¨μˆ˜ μ •μ˜μ™€ 호좜
    • 클래슀, 객체, μΈν„°νŽ˜μ΄μŠ€
    • λžŒλ‹€ 방식
    • μ½”ν‹€λ¦° νƒ€μž… μ‹œμŠ€ν…œ
    • μ—°μ‚°μž μ˜€λ²„λ‘œλ”©κ³Ό 기타 κ΄€λ‘€
    • κ³ μ°¨ν•¨μˆ˜
    • μ œλ„€λ¦­μŠ€
    • μ• λ…Έν…Œμ΄μ…˜κ³Ό λ¦¬ν”Œλ ‰μ…˜
    • 코루틴
  • Oracle
    • Oracle κΈ°λ³Έ
    • Oracle 심화
  • SQL_μ—°μŠ΅
    • Revising the Select Query
    • Basic Select
    • Advanced Select
    • Basic Select 2
  • SQL 첫걸음(μ±…)
    • Day 1
    • Day 2
    • Day 3
    • Day 4
    • Day 5
    • Day 6
    • Day 7
    • Day 8
    • Day 9
    • Day 10
    • Day 11
    • Day 12
    • Day 13
    • Day 14
    • Day 15
    • Day 16
    • Day 17
    • Day 18
    • Day 19
    • Day 20
    • Day 21
    • Day 22
    • Day 23
    • Day 24
    • Day 25
    • Day 26
    • Day 27
    • Day 28
    • Day 29
    • Day 30
  • 더 μžλ°” μ½”λ“œλ₯Ό μ‘°μž‘ν•˜λŠ” λ‹€μ–‘ν•œ 방법
    • JVM μ΄ν•΄ν•˜κΈ°
    • λ°”μ΄νŠΈμ½”λ“œ μ‘°μž‘
    • λ¦¬ν”Œλ ‰μ…˜
    • λ‹€μ΄λ‚˜λ―Ή ν”„λ‘μ‹œ
    • μ• λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ„œ
  • 더 μžλ°”, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ν…ŒμŠ€νŠΈν•˜λŠ” λ‹€μ–‘ν•œ 방법
    • JUnit5
    • Mockito
    • 도컀와 ν…ŒμŠ€νŠΈ
    • μ„±λŠ₯, 운영이슈, μ•„ν‚€ν…μ²˜ ν…ŒμŠ€νŠΈ
  • μ΄νŽ™ν‹°λΈŒ μžλ°”
    • item1 - μƒμ„±μž λŒ€μ‹  정적 νŒ©ν† λ¦¬ λ©”μ†Œλ“œλ₯Ό κ³ λ €ν•˜λΌ
    • item2 - μƒμ„±μžμ— λ§€κ°œλ³€μˆ˜κ°€ λ§Žλ‹€λ©΄ λΉŒλ”λ₯Ό κ³ λ €ν•˜λΌ
    • item3 - μƒμ„±μžλ‚˜ μ—΄κ±°νƒ€μž…μœΌλ‘œ μ‹±κΈ€ν„΄μž„μ„ λ³΄μ¦ν•˜λΌ
    • item4 - μΈμŠ€ν„΄μŠ€ν™”λ₯Ό 막기 μœ„ν•΄μ„  private μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜λΌ
    • item5 - μžμ›μ„ 직접 λͺ…μ‹œν•˜μ§€ 말고 의쑴 객체 μ£Όμž…μ„ μ‚¬μš©ν•˜λΌ
    • item6 - λΆˆν•„μš”ν•œ 객체 생성을 ν”Όν•˜λΌ
    • item7 - λ‹€ μ“΄ 객체 μ°Έμ‘°λ₯Ό ν•΄μ œν•˜λΌ
    • item8 - finalizer와 cleaner μ‚¬μš©μ„ ν”Όν•˜λΌ
    • item9 - try-finally 보닀 try-with-resources을 μ‚¬μš©ν•˜λΌ
    • item10 - equalsλŠ” 일반 κ·œμ•½μ„ μ§€μΌœ μž¬μ •μ˜ν•˜λΌ
    • item11 - equals을 μž¬μ •μ˜ν•˜λ €λ©΄ hashCode도 μž¬μ •μ˜ν•˜λΌ
    • item12 - toString을 항상 μž¬μ •μ˜ν•˜λΌ
    • item13 - clone μž¬μ •μ˜λŠ” μ£Όμ˜ν•΄μ„œ μ§„ν–‰ν•˜λΌ
    • item14 - Comparable을 κ΅¬ν˜„ν• μ§€ κ³ λ―Όν•˜λΌ
  • Elastic Search
    • κ°•μ˜ Summary
    • Elastic Summary κ°œλ… 정리
    • Elastic Summary 적용 정리
  • ν† λΉ„μ˜ μŠ€ν”„λ§ κ°•μ˜
    • μŠ€ν”„λ§λΆ€νŠΈ μ‚΄νŽ΄λ³΄κΈ°
    • 독립 μ‹€ν–‰ν˜• μ„œλΈ”λ¦Ώ μ• ν”Œλ¦¬μΌ€μ΄μ…˜
  • k8s
    • minikube μ„€μΉ˜
    • jenkins μΆ”κ°€
  • Article
    • Choosing the Right MessageBroker
Powered by GitBook
On this page

Was this helpful?

  1. 이슈 κ²½ν—˜

20230807_deadlock

ꡐ착 μƒνƒœλž€? λ‚˜λ¬΄μœ„ν‚€μ—μ„œ μ•Œλ €μ£ΌκΈΈ, "두 개 μ΄μƒμ˜ μž‘μ—…μ΄ μ„œλ‘œ μƒλŒ€λ°©μ˜ μž‘μ—…μ΄ λλ‚˜κΈ° λ§Œμ„ 기닀리고 있기 λ•Œλ¬Έμ— μ–΄λ–»κ²Œλ“  결둠이 λ‚˜μ§€ μ•ŠλŠ” μƒνƒœ"λ₯Ό μ˜λ―Έν•œλ‹€ ν•΄λ‹Ή 상황이 λ°œμƒν•  수 μžˆλŠ” 상황은 μ•„λž˜μ™€ κ°™λ‹€

  • 비선점 > 지원을 μ„ μ ν•˜μ§€ μ•ŠμŒ

  • ν™˜ν˜•λŒ€κΈ° > μ›ν˜•μœΌλ‘œ μžμ›μ„ λŒ€κΈ° 쀑

  • μƒν˜Έλ°°μ œ > μžμ›μ€ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λ§Œ 점유 κ°€λŠ₯

  • μ μœ λŒ€κΈ° > μžμ›μ— 고유번호 ν• λ‹Ή ν›„ μˆœμ„œλŒ€λ‘œ μžμ›

μ΄λ ‡κ²Œ λ””λΉ„μ—μ„œ νŠΈλžœμž­μ…˜(μž‘μ—… λ‹¨μœ„)κ°€ κ΅μ°©μƒνƒœλ‘œ λ˜μ–΄μžˆλŠ” μƒν™©μ—μ„œ μ˜€λΌν΄μ€ κ΅μ°©μƒνƒœμΈ 상황을 ν™•μΈν•˜κ³ , 였라클이 μœ„μ˜ ORA-00060 을 λ±‰μœΌλ©΄μ„œ κ΅μ°©μƒνƒœλ₯Ό ν’€μ–΄μ£Όκ²Œ λœλ‹€ λ°±μ—”λ“œ μ„œλ²„μ—μ„œ λ°œμƒν•˜λŠ” κ΅μ°©μƒνƒœλ©΄ μ—­μ‹œ 디비에 κ±Έλ €μžˆλŠ” 락과 κ΄€λ ¨μžˆμ„ 것이라고 μ˜ˆμƒμ„ ν–ˆκ³  λ””λΉ„μ—μ„œ 락은 κ±°λŠ” μΌ€μ΄μŠ€λŠ” 크게 2κ°€μ§€κ°€ μžˆλŠ” κ²ƒμœΌλ‘œ μ•Œκ³  μžˆλ‹€ @Lock 을 ν†΅ν•΄μ„œ 쑰회 μ‹œ, for update 문을 λ‚ λ¦¬λŠ” μΌ€μ΄μŠ€ / νŠΉμ • λ‘œμš°μ— λŒ€ν•œ update 문이 λ‚ λΌκ°€λŠ” μΌ€μ΄μŠ€

μš°μ„  μ΄λ²ˆμ— ν•΄λ‹Ή μ΄μŠˆκ°€ λ°œμƒν•œ ν”„λ‘œμ νŠΈμ—μ„œλŠ” @Lock 을 ν†΅ν•΄μ„œ 락을 κ±Έκ³  μ²˜λ¦¬ν•˜λŠ” 방식은 λ³„λ‘œ λ§Žμ§€ μ•Šμ•˜κΈ°μ— κ·Έλ ‡κ²Œ μ—„μ²­ μ˜μ‹¬κ°€λŠ”κ²Œ μžˆμ§€λŠ” μ•Šμ•˜λ‹€ κ·Έλ ‡κ²Œ ν™•μΈν•΄λ³΄λ‹ˆ @Lock 을 ν†΅ν•΄μ„œ λ‚˜κ°€λŠ” 사항 μžμ²΄λŠ” λ”°λ‘œ μ—†μ—ˆλ‹€ λ‹€μŒμœΌλ‘œλŠ” 그럼 ν•΄λ‹Ή μ—λŸ¬κ°€ λ°œμƒν•œ μ‹œμ μ— λŒμ•„κ°€κ³  μžˆλŠ” νŠΈλžœμž­μ…˜λ“€μ„ μ­‰ ν™•μΈν–ˆλ‹€ μ •ν™•ν•˜κ²ŒλŠ” μ—λŸ¬κ°€ λ°œμƒν•œ λ‘œμ§μ—μ„œ 디비에 insert/update μΉ˜λŠ” 것듀이 μžˆλŠ”μ§€ 확인, νŠΈλžœμž­μ…˜ μ•ˆμ—μ„œ μ–Έμ œ ν•΄λ‹Ή 쿼리가 디비에 λ‚ μ•„κ°€λŠ”μ§€ ν™•μΈν–ˆλ‹€ 그리고 디비에 update, insert 문이 λ‚ μ•„κ°€λŠ” μΌ€μ΄μŠ€μ—μ„œ μ–΄λ–»κ²Œ κ΅μ°©μƒνƒœκ°€ μƒμ„±λ˜μ—ˆλŠ”μ§€ κ³ λ―Όν•΄λ΄€λ‹€ <br

μ˜ˆμƒμ΄ κ°€λŠ” 두 κ°€μ§€ μΌ€μ΄μŠ€λŠ” 이와 κ°™λ‹€ 두 νŠΈλžœμž­μ…˜μ΄ μ„œλ‘œ ν•˜λ‚˜μ˜ 둜우λ₯Ό μ—…λ°μ΄νŠΈν•˜κΈ° μœ„ν•΄μ„œ 각각이 락을 μž‘μ€ μƒν•­μ—μ„œ μΆ”κ°€μ μœΌλ‘œ ν•΄λ‹Ή λ‘œμš°μ— 락을 μž‘μœΌλ €λŠ” 쿼리가 λ“€μ–΄μ˜€λŠ” μΌ€μ΄μŠ€ 두 νŠΈλžœμž­μ…˜μ΄ 둜우 A, B λ₯Ό μˆœν™˜μ μœΌλ‘œ 락을 작고 μžˆλŠ” 상황 - T1μ—μ„œ Aλ₯Ό λ¨Όμ € κ±Έκ³ , T2μ—μ„œ Bλ₯Ό λ¨Όμ € κ±Έκ³ , T1μ—μ„œ Bλ₯Ό κ±Έλ €κ³ ν•˜κ³ , T2μ—μ„œ Aλ₯Ό κ±Έλ €λŠ” μΌ€μ΄μŠ€ >κ΅μ°©μƒνƒœλ₯Ό μ„œλ²„ λ‘œκ·Έλ‹¨μ—μ„œ ν™•μΈν•˜κΈ° μœ„ν•΄μ„œλŠ” deadlock 이 λ°œμƒν•˜κ²Œλœ νŠΉμ • 둜우λ₯Ό μ°Ύκ³  > ν•΄λ‹Ή 둜우λ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” 쿼리듀과 κ·Έ νŠΈλžœμž­μ…˜μ˜ λ²”μœ„λ₯Ό ꡬ체화 μ°Ύκ³  > μ‹€μ œ 둜그λ₯Ό 봀을 λ•Œ μ–΄λŠ μ‹œμ μ— 쿼리가 μ„œλ²„λ‘œλΆ€ν„° λ””λΉ„λ‘œ λ‚ μ•„κ°”λŠ”μ§€ 확인 μ„œλ²„μ˜ 둜그λ₯Ό 기반으둜 ν•΄λ‹Ή νŠΈλžœμž­μ…˜μ˜ μˆœμ„œλ₯Ό κ·Έλ €κ°€λ³΄λ©΄μ„œ μ–΄λ–€ κ΅μ°©μƒνƒœμΈμ§€μ— λŒ€ν•΄μ„œ νŒŒμ•…μ΄ ν•„μš”ν–ˆλ‹€

상황은 μ΄λŸ¬ν–ˆλ‹€ μ‚¬μš©μžλ³„λ‘œ νŠΉμ • λ¦¬μ›Œλ“œμ˜ μ§€κΈ‰ 갯수λ₯Ό ν†΅κ³„λ‘œμ¨ μ €μž₯ν•˜λŠ” 경우인데, νŠΉμ • μ΄λ²€νŠΈμ— μ—°κ²°λ˜μ–΄ μžˆλŠ” λ¦¬μ›Œλ“œλ₯Ό κ°€μ Έμ˜€λŠ” κ³Όμ •μ—μ„œ 같은 λ¦¬μ›Œλ“œλ“€μ„ κ°€μ Έμ˜€λŠ”λ°, μ΄λ²€νŠΈκ°€ λ™μ‹œμ— λ“€μ–΄μ˜¨ μƒν™©μ—μ„œ 두 μ΄λ²€νŠΈκ°€ λ¦¬μ›Œλ“€λ₯΄ κ°€μ Έμ˜¬ λ–„ λ™μΌν•œ μˆœμ„œλ₯Ό 보μž₯ν•΄μ„œ λ“€μ–΄μ˜€λŠ” μΌ€μ΄μŠ€κ°€ μ•„λ‹ˆλΌ λ‘˜ λ‹€ μˆœμ„œλ₯Ό 자기 λ©‹λŒ€λ‘œ μ„€μ •ν•΄μ„œ λ¦¬μ›Œλ“œλ³„λ‘œ 둜직이 λŒμ•„κ°€κΈ° 떄문에 κ΅μ°©μƒνƒœμ˜ 두 번째 상황이 λ°œμƒν•œ 것이닀

μ΄κ²ƒμ˜ ν•΄κ²°λ°©μ•ˆμœΌλ‘œλŠ” μš°μ„  μˆœμ„œλ₯Ό 보μž₯ν•˜λŠ”κ²Œ κ°€μž₯ 쒋을 것이라고 생각이 λ“€μ—ˆλ‹€, 그런데 μˆœμ„œλ₯Ό 보μž₯ν•˜λŠ” 방법에 λŒ€ν•΄μ„œ κ³ λ―Όν•΄λ³΄μžλ‹ˆ, MQλ₯Ό μ‚¬μš©ν•΄μ„œ μˆœμ„œλ₯Ό 보μž₯μ‹œν‚€λŠ” 방법이 μžˆλ‹€κ³  μƒκ°ν–ˆλ‹€ 그런데 κ·Έλ ‡κ²Œ ν•˜κΈ°μ—λŠ” λ„ˆλ¬΄ λ§Žμ€ μ½”λ“œλ₯Ό λ“€μ–΄ μ—Žμ–΄μ•Ό ν•˜λŠ” μ΄μŠˆκ°€ μžˆκΈ°μ— κ·Έλƒ₯ 방법 쀑 ν•˜λ‚˜λΌκ³ λ§Œ μΈμ§€ν•˜κ³  λ„˜μ–΄κ°€λ €κ³  ν•œλ‹€

μ΄λ²ˆμ— μ μš©ν•œ 방법은 κ·Έλž˜μ„œ 락의 λ²”μœ„λ₯Ό λŠ˜λ €μ£ΌλŠ” λ°©μ‹μœΌλ‘œ μ²˜λ¦¬ν–ˆλ‹€ κ΅μ°©μƒνƒœκ°€ λ°œμƒν•œ 원인은 2개의 νŠΈλžœμž­μ…˜μ—μ„œ μˆœν™˜μ μœΌλ‘œ 2개의 둜우λ₯Ό μ—…λ°μ΄νŠΈν•˜λ €κ³  ν•˜κΈ°μ— λ°œμƒν•œ 상황이라고 ν–ˆλŠ”λ° ν•΄λ‹Ή 상황은 두 νŠΈλžœμž­μ…˜μ΄ 거의 λ™μ‹œμ—(0.094μ΄ˆμΈκ°€..)에 같이 μ»€λ°‹λ˜μ—ˆκ³  μ—…λ°μ΄νŠΈ μΉ˜λŠ” μˆœκ°„μ— 락이 μž‘ν˜€μ„œ λ¬Έμ œμ˜€μœΌλ‹ˆ, select for update 문을 ν†΅ν•΄μ„œ 락의 μ‹œκ°„μ„ 길게 늘렀주고, νŠΈλžœμž­μ…˜μ„ λΆ„λ¦¬ν•¨μœΌλ‘œμ¨ μ²˜λ¦¬ν•˜λ €κ³  ν–ˆλ‹€

μ΄λ ‡κ²Œ κΉŒμ§€ν•΄μ£Όλ©΄ μš°λ €ν•˜κ³  μžˆμ—ˆλ˜ κ΅μ°©μƒνƒœμ— λŒ€ν•œ μ²˜λ¦¬λŠ” ν•΄μ†Œλ˜λŠ” 것을 ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό ν†΅ν•΄μ„œ ν™•μΈν–ˆλŠ”λ° 좔가적인 λ¬Έμ œκ°€ μžˆμ—ˆλ‹€ >> μ΄μŠˆλŠ” νŠΈλžœμž­μ…˜μ„ λΆ„λ¦¬ν•˜λ©΄μ„œ λ°œμƒν•œ 이슈인데, 기쑴에 ν…ŒμŠ€νŠΈ μ½”λ“œ μ€‘μ—μ„œ 톡계 둜직이 μˆ˜ν–‰λ˜κ³  λ‚˜μ„œ ν•΄λ‹Ή 톡계 데이터λ₯Ό μ‚¬μš©ν•˜λŠ” 뢀뢄을 κ²€μ¦ν•˜λŠ” μ½”λ“œκ°€ μžˆμ—ˆλ‹€ μˆ˜μ •λœ μ‚¬ν•­μœΌλ‘œλŠ” νŠΈλžœμž­μ…˜μ„ REQUIRES_NEW 을 ν†΅ν•΄μ„œ μ²˜λ¦¬ν•΄λ‘” 상황이고, 루프λ₯Ό λ„λŠ” μƒν™©μ—μ„œ 전에 μ‘°νšŒν•΄λ‘μ—ˆλ˜(μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜μ—μ„œ μ—…λ°μ΄νŠΈμΉœ 둜우)λ₯Ό λ””λΉ„λ‘œλΆ€ν„° μ‘°νšŒν•΄μ™€μ„œ μ‚¬μš©ν•˜λŠ” 것이 μ•„λ‹ˆλΌ jpa μ—μ„œ μ œκ³΅ν•΄μ£ΌλŠ” 캐싱을 ν†΅ν•΄μ„œ μ²˜λ¦¬ν•œλ‹€λŠ” 점이닀 μ‹€μ œλ‘œ jpa μ—μ„œ μš°λ¦¬κ°€ ν”νžˆ μ•Œκ³  μžˆλŠ” μ˜μ†μ„± μ»¨ν…μŠ€νŠΈλŠ” 각 νŠΈλžœμž­μ…˜ λ³„λ‘œ μƒμ„±λ˜κ³  κ΄€λ¦¬λœλ‹€ > νŠΉμ • 둜우λ₯Ό νŠΈλžœμž­μ…˜ Aμ—μ„œ λ¨Όμ € μ‘°νšŒν•΄λ‘” λ‹€μŒ, ν•΄λ‹Ή 둜우λ₯Ό Bμ—μ„œ μˆ˜μ •ν•œλ‹€κ³  ν•΄μ„œ νŠΈλžœμž­μ…˜ AλŠ” νŠΈλžœμž­μ…˜ Bμ—μ„œμ˜ μˆ˜μ •μ‚¬ν•­μ„ λ°”λ‘œ μ—…λ°μ΄νŠΈλ˜μ–΄ κ°€μ§€κ³  μžˆμ§€ μ•ŠλŠ”λ‹€λŠ” κ²ƒμ΄μ˜€λ‹€ λ§Œμ•½μ— ν•΄λ‹Ή μΌ€μ΄μŠ€ 같은 κ²½μš°μ—λŠ” 뭐 방법은 λͺ‡ κ°€μ§€κ°€ μ‘΄μž¬ν•  것이닀 νŠΈλžœμž­μ…˜μ΄ λΆ„λ¦¬λ˜μ–΄μ„œ 둜직이 λŒμ•„κ°€λŠ” μΌ€μ΄μŠ€μ—λŠ” ν•΄λ‹Ή 둜우λ₯Ό μ‘°νšŒν•  λ•Œ λ„€μ΄ν‹°λΈŒ 쿼리λ₯Ό ν†΅ν•΄μ„œ μ²˜λ¦¬ν•œλ‹€λ˜κ°€, μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜μ—μ„œ μ²˜λ¦¬ν•œ 값을 λ¦¬ν„΄ν•˜μ—¬ λΆ€λͺ¨ νŠΈλžœμž­μ…˜μ—μ„œλ„ λ³€κ²½λœ 값을 λΆ€λͺ¨μ—μ„œλ„ μ €μž₯ν•΄μ„œ μ˜μ†μ„±μ— λ„£μ–΄μ£ΌλŠ” 방법 이제 μ–΄λ–€ 방식을 κ°€μ§€κ³  μ§„ν–‰ν• κΉŒ κ³ λ―Όν•˜λŠ” 도쀑에 ν™•μΈν•΄λ³΄λ‹ˆ 사싀 λ‘œμ§μ—μ„œλŠ” κ·Έλ ‡κ²Œ ν†΅κ³„μΉ˜λ₯Ό μŒ“μ€ λΆ€λΆ„μ˜ 데이터λ₯Ό λΆ€λͺ¨ νŠΈλžœμž­μ…˜μ—μ„œ μ‚¬μš©ν•˜λŠ” μΌ€μ΄μŠ€κ°€ 있던 것은 μ•„λ‹ˆμ˜€λ‹€..! μ‹€μ œ λ‘œμ§μ„ 계속 듀여닀봐도 λ­”κ°€ μ΄μƒν•΄μ„œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό λ΄λ³΄λ‹ˆ.. μ˜›λ‚ μ— ν…ŒμŠ€νŠΈμ½”λ“œ μœ„μ—λ‹€κ°€ @Transactional 을 λΆ™ν˜€λ†”μ„œ ν…ŒμŠ€νŠΈ μ½”λ“œ μžμ²΄κ°€ λ¬Άμ—¬μ„œ λ™μž‘ν•˜κ³  μžˆμ—ˆλ˜ 것이닀 κ·Έλž˜μ„œ 자꾸 μ—…λ°μ΄νŠΈλ˜μ§€ μ•Šμ€ 값을 κ°€μ§€κ³  검증을 μ§„ν–‰ν•˜λ‹ˆ μ—λŸ¬κ°€ λ‚ μˆ˜λ°–μ—.. κ²°λ‘ μœΌλ‘œλŠ” κ·Έλž˜μ„œ ν•˜λ‚˜ λ°°μ› λ‹€ μƒκ°ν•˜κ³  @Transactional 으둜 λ¬Άμ—¬μžˆλŠ” ν…ŒμŠ€νŠΈμ½”λ“œλ₯Ό λΆ„λ¦¬ν•˜λŠ” μž‘μ—…μ„ μ§„ν–‰ν–ˆμ—ˆλ‹€

λŠλ‚€μ .. λ°±μ—”λ“œ 개발자둜써 이제 λ¬Έμ œμ‚¬ν•­λ“€μ„ ν•˜λ‚˜ν•˜λ‚˜ νŒŒμ•…ν•˜κ³  μ²˜λ¦¬ν•΄κ°€λŠ” 과정을 κ²ͺλŠ”λ° μ—¬μ „νžˆ 곡뢀가 많이 ν•„μš”ν•˜κ³ , λ‚΄κ°€ μ•Œκ³  μžˆμ—ˆλ‹€κ³  μƒκ°ν•œ 것듀이 100%κ°€ μ•„λ‹Œ μΌ€μ΄μŠ€λ„ μžˆλ”λΌ.. λ§Žμ€ 선인듀과 λ‹€λ₯Έ κ°œλ°œμžλ“€κ³Όλ„ μ΄μŠˆμ— λŒ€ν•΄μ„œ κ³΅μœ ν•˜κ³  μ„œλ‘œμ˜ 지식을 κ³΅μœ ν•˜λ©° 더 λ‚˜μ€ λ°©ν–₯을 μœ„ν•΄μ„œ κ³ λ―Όν•˜λŠ” 것도 ꡉμž₯이 μ€‘μš”ν•˜λ‹€κ³  생각이 λ“ λ‹€

Previous20230722_ν…ŒμŠ€νŠΈμ½”λ“œμ—μ„œ @TransactionalNext인턴 μŠ€ν„°λ””

Last updated 1 year ago

Was this helpful?