🏝️ Spring

🧐 곡유 λŒ€μ‹œλ³΄λ“œ 이전 κΈ€μ—μ„œ μ‚΄νŽ΄λ³΄μ•˜λ“―μ΄ λŒ€μ‹œλ³΄λ“œλ₯Ό ν•˜λ‚˜ν•˜λ‚˜ 직접 μƒμ„±ν•˜λŠ” 것은 번거둜운 μž‘μ—…μž…λ‹ˆλ‹€. 이번 κΈ€μ—μ„œλŠ” λ‹€λ₯Έ μ‚¬μš©μžλ“€μ΄ 이미 μƒμ„±ν•˜μ—¬ κ³΅μœ ν•΄λ‘” λŒ€μ‹œλ³΄λ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. μš°μ„  λ‹€μŒ λŒ€μ‹œλ³΄λ“œ 곡유 μ‚¬μ΄νŠΈ(https://grafana.com/grafana/dashboards)에 μ ‘μ†ν•©λ‹ˆλ‹€. μ ‘μ†ν•΄μ„œ spring을 검색해 보면 μœ„μ™€ 같이 이미 λ§Œλ“€μ–΄λ‘” μ—¬λŸ¬ λŒ€μ‹œλ³΄λ“œλ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. (μœ„ λ°•μŠ€μΉœ λ‘κ°œκ°€ 많이 μ‚¬μš©λœλ‹€κ³  ν•©λ‹ˆλ‹€. λΆ€νŠΈ 3.0은 아직 μ—†μ§€λ§Œ, 2.1 λŒ€μ‹œλ³΄λ“œλ„ ν˜Έν™˜μ΄ λœλ‹€κ³  ν•©λ‹ˆλ‹€.) 🧐 곡유 λŒ€μ‹œλ³΄λ“œ μ‚¬μš©ν•˜κΈ° - Spring Boot 2.1 System Monitor μœ„μ˜ Spring Boot 2.1 System Monitorλ₯Ό μ‚¬μš©ν•΄ 보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€...
🧐 κ·ΈλΌνŒŒλ‚˜ (Grafana) 이전 κΈ€μ—μ„œ κ°„λ‹¨νžˆ μ–ΈκΈ‰ν–ˆμ§€λ§Œ λ‹€μ‹œ ν•œ 번 ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. ν”„λ‘œλ©”ν…Œμš°μŠ€κ°€ DB라고 ν•œλ‹€λ©΄, 이 DB에 μžˆλŠ” 데이터λ₯Ό λΆˆλŸ¬μ„œ μ‚¬μš©μžκ°€ 보기 νŽΈν•˜κ²Œ λ³΄μ—¬μ£ΌλŠ” λŒ€μ‹œλ³΄λ“œκ°€ ν•„μš”ν•©λ‹ˆλ‹€. κ·ΈλΌνŒŒλ‚˜λŠ” 데이터λ₯Ό κ·Έλž˜ν”„λ‘œ λ³΄μ—¬μ£ΌλŠ” νˆ΄μž…λ‹ˆλ‹€. 수 λ§Žμ€ κ·Έλž˜ν”„λ₯Ό μ œκ³΅ν•˜κ³ , ν”„λ‘œλ©”ν…Œμš°μŠ€λ₯Ό ν¬ν•¨ν•œ λ‹€μ–‘ν•œ λ°μ΄ν„°μ†ŒμŠ€λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€. 🧐 κ·ΈλΌνŒŒλ‚˜ μ„€μΉ˜ κ·ΈλΌνŒŒλ‚˜ μ„€μΉ˜ μ‚¬μ΄νŠΈ(https://grafana.com/grafana/download)둜 μ΄λ™ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” λ§₯ OS κΈ°μ€€μœΌλ‘œ μ„€μΉ˜λ₯Ό μ§„ν–‰ν•˜κ² μŠ΅λ‹ˆλ‹€. μœ„μ˜ λͺ…λ Ήμ–΄λ₯Ό λ³΅μ‚¬ν•©λ‹ˆλ‹€. 이후 κ·ΈλΌνŒŒλ‚˜λ₯Ό μ„€μΉ˜ν•  (μž„μ˜μ˜)ν΄λ”λ‘œ μ΄λ™ν•œ λ’€, μœ„μ˜ λͺ…λ Ήμ–΄λ₯Ό κ·ΈλŒ€λ‘œ μž…λ ₯ν•©λ‹ˆλ‹€. (μ„€μΉ˜ν•˜λŠ”λ° μ‹œκ°„μ΄ μ’€ 걸릴 수 μžˆμŠ΅λ‹ˆλ‹€) κ·ΈλΌνŒŒλ‚˜λ₯Ό μ„€μΉ˜ν•  ν΄λ”μ˜ bin ν΄λ”λ‘œ 이동..
🧐 인수 ν…ŒμŠ€νŠΈ μ‹œμŠ€ν…œμ˜ 인수λ₯Ό μœ„ν•΄ κΈ°λŠ₯적/λΉ„κΈ°λŠ₯적 μš”κ΅¬μ‚¬ν•­μ„ μ‚¬μš©μžκ°€ 직접 ν…ŒμŠ€νŠΈν•˜μ—¬ 개발이 μ™„λ£Œλ˜μ—ˆμŒμ„ 증λͺ…ν•˜λŠ” ν…ŒμŠ€νŠΈ 인수 ν…ŒμŠ€νŠΈλŠ” μœ„μ™€ 같이 μ‹œμŠ€ν…œμ˜ 인수λ₯Ό μœ„ν•΄ μž‘μ„±ν•˜λŠ” ν…ŒμŠ€νŠΈμž…λ‹ˆλ‹€. 즉 μΈμˆ˜ν…ŒμŠ€μ˜ λͺ©μ μ€ μ‚¬μš©μžλ“€μ΄ μ›ν•˜λŠ” μ‹œλ‚˜λ¦¬μ˜€λŒ€λ‘œ κΈ°λŠ₯이 잘 λ™μž‘ν•˜λŠ”μ§€λ₯Ό κ²€μ¦ν•˜λŠ” 것이라 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이번 κΈ€μ—μ„œλŠ” 인수 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•  λ•Œ, 가독성을 λ†’μ—¬ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λŠ” 방법에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. 🧐 RestAssured μ½”λ“œ 숨기기 μΈμˆ˜ν…ŒμŠ€νŠΈλŠ” κ·Έ λͺ©μ μ— 따라 κ°œλ°œμžκ°€ μ•„λ‹Œ μ‚¬λžŒλ“€μ΄ 보더라도 μ‰½κ²Œ 이해할 수 μžˆλ„λ‘ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ μ €λŠ” 개발과 κ΄€λ ¨λœ μ½”λ“œλ₯Ό μ΅œλŒ€ν•œ 감좔어 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 데 μ΄ˆμ μ„ 두어 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ˜ˆμ‹œ μ½”λ“œμ™€ ν•¨κ»˜ μ‚΄νŽ΄λ³΄..
🧐 ν”„λ‘œλ©”ν…Œμš°μŠ€ (Prometheus) μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ°œμƒν•œ λ©”νŠΈλ¦­(μ§€ν‘œ)λ₯Ό κ·Έ μˆœκ°„λ§Œ ν™•μΈν•˜λŠ” 것이 μ•„λ‹ˆλΌ κ³Όκ±° 이λ ₯κΉŒμ§€ ν•¨κ»˜ ν™•μΈν•˜λ €λ©΄ λ©”νŠΈλ¦­μ„ λ³΄κ΄€ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€κ°€ ν•„μš”ν•©λ‹ˆλ‹€. λ˜ν•œ λ©”νŠΈλ¦­μ„ μ§€μ†μ μœΌλ‘œ μˆ˜μ§‘ν•˜κ³  이λ₯Ό DB에 μ €μž₯ν•˜λŠ” 무언가가 ν•„μš”ν•©λ‹ˆλ‹€. ν”„λ‘œλ©”ν…Œμš°μŠ€κ°€ λ°”λ‘œ 이런 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€. 🧐 κ·ΈλΌνŒŒλ‚˜ (Grafana) ν”„λ‘œλ©”ν…Œμš°μŠ€κ°€ DB라고 ν•œλ‹€λ©΄, 이 DB에 μžˆλŠ” 데이터λ₯Ό λΆˆλŸ¬μ„œ μ‚¬μš©μžκ°€ 보기 νŽΈν•˜κ²Œ λ³΄μ—¬μ£ΌλŠ” λŒ€μ‹œλ³΄λ“œκ°€ ν•„μš”ν•©λ‹ˆλ‹€. κ·ΈλΌνŒŒλ‚˜λŠ” 데이터λ₯Ό κ·Έλž˜ν”„λ‘œ λ³΄μ—¬μ£ΌλŠ” νˆ΄μž…λ‹ˆλ‹€. 수 λ§Žμ€ κ·Έλž˜ν”„λ₯Ό μ œκ³΅ν•˜κ³ , ν”„λ‘œλ©”ν…Œμš°μŠ€λ₯Ό ν¬ν•¨ν•œ λ‹€μ–‘ν•œ λ°μ΄ν„°μ†ŒμŠ€λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€. 🧐 ν”„λ‘œλ©”ν…Œμš°μŠ€μ™€ κ·ΈλΌνŒŒλ‚˜λ₯Ό μ‚¬μš©ν•œ λͺ¨λ‹ˆν„°λ§ 전체 κ΅¬μ‘°λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. μŠ€ν”„λ§ λΆ€νŠΈ 앑좔에이터와 λ§ˆμ΄ν¬λ‘œλ―Έν„°λ₯Ό μ‚¬μš©ν•˜λ©΄ μ—¬..
🧐 λ§ˆμ΄ν¬λ‘œλ―Έν„° μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•  λ•ŒλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ CPU, λ©”λͺ¨λ¦¬, 컀λ„₯μ…˜ μ‚¬μš©, 고객 μš”μ²­μˆ˜μ™€ 같은 λ§Žμ€ μ§€ν‘œ(metric)듀을 ν™•μΈν•˜λŠ” 것이 ν•„μš”ν•©λ‹ˆλ‹€. κ·Έλž˜μ•Ό 어디에 μ–΄λ–€ λ¬Έμ œκ°€ λ°œμƒν–ˆλŠ”μ§€ 사전에 λŒ€μ‘λ„ ν•  수 있고, μ‹€μ œ λ¬Έμ œκ°€ λ°œμƒν•˜λ”λΌλ„ 원인을 λΉ λ₯΄κ²Œ νŒŒμ•…ν•΄μ„œ λŒ€μ²˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ λͺ¨λ‹ˆν„°λ§μ„ 톡해 λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ 가득 μ°Όλ‹€λŠ” 것을 λ°œκ²¬ν–ˆλ‹€λ©΄, λ©”λͺ¨λ¦¬ λ¬Έμ œμ™€ κ΄€λ ¨μžˆλŠ” 곳을 λΉ λ₯΄κ²Œ μ°Ύμ•„μ„œ λŒ€μ‘ν•  수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€. ν˜„μž¬ μˆ˜λ§Žμ€ λͺ¨λ‹ˆν„°λ§ 툴이 μžˆλ―€μ—¬, μ‹œμŠ€ν…œμ˜ λ‹€μ–‘ν•œ 정보λ₯Ό 이 λͺ¨λ‹ˆν„°λ§ νˆ΄μ— μ „λ‹¬ν•΄μ„œ μ‚¬μš©ν•˜κ²Œ λ©λ‹ˆλ‹€. λ‹€μŒμ€ 많이 μ‚¬μš©λ˜λŠ” λͺ¨λ‹ˆν„°λ§ νˆ΄λ“€μ˜ μ˜ˆμ‹œμž…λ‹ˆλ‹€. μœ„μ™€ 같은 λͺ¨λ‹ˆν„°λ§ νˆ΄λ“€μ„ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ”, μ‹œμŠ€ν…œμ˜ λ‹€μ–‘ν•œ μ§€ν‘œλ“€μ„ 각각의 λͺ¨λ‹ˆν„°λ§ νˆ΄μ— λ§žλ„λ‘ λ§Œλ“€μ–΄μ„œ 보내주어야 ..
🧐 ν”„λ‘œλ•μ…˜ μ€€λΉ„ κΈ°λŠ₯ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•  λ•Œμ—λŠ” κΈ°λŠ₯적은 μš”κ΅¬μ‚¬ν•­λ§Œμ„ κ°œλ°œν•˜λŠ” 것이 μ•„λ‹™λ‹ˆλ‹€. μ„œλΉ„μŠ€λ₯Ό μ‹€μ œ λ°°ν¬ν•œ 이후 μ„œλΉ„μŠ€μ— λ¬Έμ œκ°€ μ—†λŠ”μ§€ λͺ¨λ‹ˆν„°λ§ν•˜λŠ” ν™œλ™λ“€μ΄ μΆ”κ°€λ‘œ ν•„μš”ν•©λ‹ˆλ‹€. 운영 ν™˜κ²½μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•  λ•Œ ν•„μš”ν•œ μ΄λŸ¬ν•œ κΈ°λŠ₯듀을 ν”„λ‘œλ•μ…˜ μ€€λΉ„ κΈ°λŠ₯이라 ν•©λ‹ˆλ‹€. 즉 ν”„λ‘œλ•μ…˜μ„ μš΄μ˜μ— 배포할 λ•Œ μ€€λΉ„ν•΄μ•Ό ν•˜λŠ” λΉ„ κΈ°λŠ₯적 μš”μ†Œλ“€μ„ μ˜λ―Έν•©λ‹ˆλ‹€. λ‹€μŒκ³Ό 같은 것듀이 ν”„λ‘œλ•μ…˜ μ€€λΉ„ κΈ°λŠ₯에 μ†ν•©λ‹ˆλ‹€. μ§€ν‘œ (metric) 좔적 (trace) 감사 (auditing) λͺ¨λ‹ˆν„°λ§ 이듀은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ ν˜„μž¬ μ‚΄μ•„μžˆλŠ”μ§€, 둜그 μ •λ³΄λŠ” μ •μƒμ μœΌλ‘œ μ„€μ •λ˜μ—ˆλŠ”μ§€, 컀λ„₯μ…˜ 풀은 μ–Όλ§ˆλ‚˜ μ‚¬μš©λ˜κ³  μžˆλŠ”μ§€ 등을 ν™•μΈν•˜λŠ”λ° μ‚¬μš©λ©λ‹ˆλ‹€. 🧐 μŠ€ν”„λ§ λΆ€νŠΈ 앑좔에이터 μŠ€ν”„λ§ λΆ€νŠΈκ°€ μ œκ³΅ν•˜λŠ” μ•‘μΆ”μ—μ΄ν„°λŠ” ν”„λ‘œλ•μ…˜ μ€€λΉ„ κΈ°λŠ₯..
🧐 μ„œλ‘  Repository와 DAO에 κ΄€ν•΄μ„œ ν—·κ°ˆλ € ν•˜λŠ” 뢄듀이 되게 λ§Žμ€ 것 κ°™λ‹€λŠ” 것을 느끼고 μžˆμŠ΅λ‹ˆλ‹€. 저도 처음 ν•΄λ‹Ή 두 μš©μ–΄λ₯Ό μ ‘ν–ˆμ„ λ•Œμ—λŠ” ꡉμž₯히 ν˜Όλ™μŠ€λŸ¬μ› λ˜ 기얡이 μžˆμŠ΅λ‹ˆλ‹€. 이번 κΈ€μ—μ„œλŠ” μœ„ 두 μš©μ–΄μ— λŒ€ν•΄μ„œ 각각 μ–΄λ–€ 의미λ₯Ό κ°–κ³  μ–΄λ–€ μ‹μœΌλ‘œ μ‚¬μš©λ˜λŠ”μ§€ μ‚΄νŽ΄λ΄„μœΌλ‘œμ¨ 고민을 쑰금 ν•΄κ²°ν•΄ λ³΄λŠ” μ‹œκ°„μ„ 가지렀 ν•©λ‹ˆλ‹€. 결둠만 보고 μ‹ΆμœΌμ‹œλ‹€λ©΄, 맨 μ•„λž˜λ‘œ 내렀가셔도 λ©λ‹ˆλ‹€. 🧐 DAO Data Access Object의 μ€„μž„λ§μΈ DAOλŠ” 해석 κ·ΈλŒ€λ‘œ 데이터에 μ ‘κ·Όν•˜λŠ” 객체λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. 쑰금 더 ν’€μ–΄μ„œ μ„€λͺ…ν•˜μžλ©΄, DAOλŠ” λ°μ΄ν„°λ² μ΄μŠ€ ν˜Ήμ€ λ‹€λ₯Έ μ˜μ†μ„±(Persistence) λ©”μ»€λ‹ˆμ¦˜μ— λŒ€ν•œ 접근을 μΆ”μƒν™”ν•΄μ£ΌλŠ” 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€. 즉 μ–΄λ–€ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•  것인지, ν˜Ήμ€ μ–΄λ–€ μ˜μ†μ„± μ €μž₯ ..
🧐 μ„œλ‘  μŠ€ν”„λ§μ—μ„œλŠ” 인터셉터λ₯Ό 톡해, 컨트둀러(ν•Έλ“€λŸ¬)λ₯Ό ν˜ΈμΆœν•˜κΈ° μ „κ³Ό 후에 좔가적인 μž‘μ—…λ“€μ„ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ ν•΄μ€λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 인증 정보λ₯Ό ν™•μΈν•˜λŠ” λ“±μ˜ μž‘μ—…μ΄ μžˆμ„ 수 μžˆκ² λ„€μš”. 인터셉터에 λŒ€ν•΄μ„œλŠ” λ‹€μŒ 글을 μ°Έκ³ ν•΄μ£Όμ„Έμš”. 이번 κΈ€μ—μ„œλŠ” 인터셉터가 μ‹€μ œλ‘œ μ–΄λ–€ μ‹μœΌλ‘œ λ™μž‘ν•˜λŠ”μ§€ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. μš°μ„  μ„€λͺ…μ˜ 편의λ₯Ό μœ„ν•΄ HandlerExecutionChainλΆ€ν„° μ‚΄νŽ΄λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. 🧐 HandlerExecutionChain HandlerExecutionChain은 μœ„μ™€ 같이 ν•Έλ“€λŸ¬μ™€, ν•΄λ‹Ή ν•Έλ“€λŸ¬μ— 적용될 인터셉터듀을 가지고 μžˆλŠ” ν΄λž˜μŠ€μž…λ‹ˆλ‹€. (@Controller에 @RequestMapping으둜 μ •μ˜ν•œ λ©”μ„œλ“œκ°€ ν•˜λ‚˜μ˜ ν•Έλ“€λŸ¬κ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.) 즉 HandlerExecution..
말 λž‘
'🏝️ Spring' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘ (2 Page)