[WEB] JWT 토큰 인증의 κ°œλ…κ³Ό μž₯단점

[WEB] JWT 토큰 인증의 κ°œλ…κ³Ό μž₯단점

1. JWT의 κ°œλ… JWTλŠ” μ›Ήμ—μ„œ μ‚¬μš©μž 인증/인가에 μ‚¬μš©ν•˜λŠ” ν† ν°μœΌλ‘œ Json Web Token의 μ€„μž„λ§μ΄λ‹€. μ›Ήμ—μ„œ μ‚¬μš©λ˜λŠ” JSON ν˜•νƒœμ˜ 토큰 ν‘œμ€€ 규격이며 쿠킀와 μœ μ‚¬ν•˜μ§€λ§Œ, μ„œλͺ…λœ ν† ν°μ΄λΌλŠ” 차이점이 μžˆλ‹€. κ³΅κ°œν‚€, κ°œμΈν‚€μ˜ 쌍으둜 μ‚¬μš©ν•  경우 μ„œλͺ…λœ 토큰은 κ°œμΈν‚€λ₯Ό λ³΄μœ ν•œ μ„œλ²„μ—μ„œλ§Œ λ³΅ν˜Έν™”κ°€ κ°€λŠ₯ν•˜λ‹€. 보톡 Authorization HTTP 헀더λ₯Ό Bearer <토큰> ν˜•νƒœλ‘œ μ„€μ •ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„λ‘œ μ „μ†‘ν•œλ‹€. μ„œλ²„μ—μ„œλŠ” 토큰에 ν¬ν•¨λ˜μ–΄ μžˆλŠ” μ„œλͺ…μ •λ³΄λ‘œ μœ„λ³€μ‘°λ₯Ό κ²€μ¦ν•˜λ©° 토큰은 Base64 인코딩 λ˜μ–΄μžˆλ‹€. 2. JWT ꡬ쑰 header, payload, signatureκ°€ 각각 . 으둜 κ΅¬λΆ„λ˜μ–΄ μžˆλ‹€ ...

[PostgreSQL] μœˆλ„μš° ν•¨μˆ˜(Window Functions)의 κ°œλ…, μ„±λŠ₯ 및 μ‚¬μš©λ²• (over, sum/rank/ntitle/cume_dist λ“±...)

[PostgreSQL] μœˆλ„μš° ν•¨μˆ˜(Window Functions)의 κ°œλ…, μ„±λŠ₯ 및 μ‚¬μš©λ²• (over, sum/rank/ntitle/cume_dist λ“±...)

1. μœˆλ„μš° ν•¨μˆ˜ (Window Functions)λž€? μœˆλ„μš° ν•¨μˆ˜λŠ” ν–‰κ³Ό ν–‰ κ°„μ˜ 관계λ₯Ό μ‰½κ²Œ μ •μ˜ν•˜κΈ° μœ„ν•΄ λ§Œλ“  ν•¨μˆ˜μ΄λ‹€. 이 κΈ°λŠ₯μ€Β μΌλ°˜ μ§‘κ³„ν•¨μˆ˜μ˜ μ—°μ‚°κ³Ό μœ μ‚¬ν•˜μ§€λ§Œ, 일반 μ§‘κ³„ν•¨μˆ˜κ°€ ν–‰ 각각을 단일 κ·Έλ£Ήν™”ν•΄μ„œ 좜λ ₯ν•˜λŠ” λ°˜λ©΄μ—, μœˆλ„μš° ν•¨μˆ˜λŠ” 각각의 행듀이 κ·Έλ£Ήν™”λ˜μ§€ μ•ŠμœΌλ©° λ³„λ„μ˜ IDλ₯Ό κ°€μ§„λ‹€. 그렇기에 μœˆλ„μš° ν•¨μˆ˜λŠ” ν˜„μž¬ row의 정보보닀 더 λ§Žμ€ 정보에 접근이 κ°€λŠ₯ν•˜λ‹€. 예λ₯Ό λ“€λ©΄ λ‹€μŒκ³Ό κ°™λ‹€. μΌλ°˜μ§‘κ³„ν•¨μˆ˜ : COUNT() + GROUP BY-> 그룹별 1개의 ν–‰ 좜λ ₯ (κ·Έλ£Ή 개수만큼 좜λ ₯, 자λ₯΄κΈ° + μ§‘μ•½) μœˆλ„μš°μ§‘κ³„ν•¨μˆ˜ : COUNT() OVER (PARTITION BY) -> ID개수만큼 ν–‰ 좜λ ₯ (ν–‰μ˜ κ°œμˆ˜κ°€ 쀄어듀지 μ•ŠλŠ”λ‹€, 자λ₯΄κΈ°) ...

[PostgreSQL] λ°μ΄ν„°λ² μ΄μŠ€ 상속(Inheritance)의 κ°œλ…κ³Ό μ‚¬μš©λ²• 및 μ„±λŠ₯비ꡐ (Inherits, Only)

[PostgreSQL] λ°μ΄ν„°λ² μ΄μŠ€ 상속(Inheritance)의 κ°œλ…κ³Ό μ‚¬μš©λ²• 및 μ„±λŠ₯비ꡐ (Inherits, Only)

1. λ°μ΄ν„°λ² μ΄μŠ€ 상속(Inheritance)μ΄λž€? 상속은 객체지ν–₯ λ°μ΄ν„°λ² μ΄μŠ€μ˜ κ°œλ… 쀑 ν•˜λ‚˜μ΄λ‹€. PostgreSQL은 ν…Œμ΄λΈ” 생성 μ‹œ ν•˜λ‚˜ μ΄μƒμ˜ λ‹€λ₯Έ ν…Œμ΄λΈ”λ‘œλΆ€ν„°μ˜ 상속 κΈ°λŠ₯을 μ œκ³΅ν•˜λ©°, 이λ₯Ό 잘 ν™œμš©ν•˜λ©΄ λ°μ΄ν„°λ² μ΄μŠ€ 섀계에 μƒˆλ‘œμš΄ κ°€λŠ₯성듀을 μ—΄μ–΄μ€€λ‹€. λ°μ΄ν„°λΏλ§Œ μ•„λ‹ˆλΌ λΆ€λͺ¨ ν…Œμ΄λΈ”μ˜ 컬럼 속성 및 인덱슀 λ“±μ˜ νŠΉμ§•λ“€λ„ μžμ‹ ν…Œμ΄λΈ”λ‘œ μƒμ†λ˜κΈ°μ— 상황에 따라 효율적인 섀계가 κ°€λŠ₯ν•˜λ‹€. 2.λ°μ΄ν„°λ² μ΄μŠ€ 상속(Inherits) 방법 λ‹€μŒ μ˜ˆμ œλŠ” PostgreSQL 곡식 λ¬Έμ„œμ˜ μ˜ˆμ œμ΄λ‹€. Capitals - 이름, 인ꡬ, 고도, μš”μ•½μ–΄λ₯Ό ν¬ν•¨ν•œ μˆ˜λ„μ˜ 정보가 ν¬ν•¨λœ ν…Œμ΄λΈ” Cities - 이름, 인ꡬ, 고도λ₯Ό ν¬ν•¨ν•œ λ„μ‹œ 정보가 ν¬ν•¨λœ ν…Œμ΄λΈ” ...

[PostgreSQL] λ‚ μ§œ ν˜•νƒœ κ²€μ¦ν•˜κΈ° (ERROR: date/time field value out of range)

[PostgreSQL] λ‚ μ§œ ν˜•νƒœ κ²€μ¦ν•˜κΈ° (ERROR: date/time field value out of range)

1. λ‚ μ§œ ν˜•νƒœλ‘œ ν˜• λ³€ν™˜ 데이터 λ² μ΄μŠ€μ—μ„œ λ‚ μ§œν˜•νƒœλ‘œ ν˜• λ³€ν™˜μ„ ν•˜λŠ” 것은 λ‹€μŒκ³Ό 같은 λ°©λ²•μœΌλ‘œ μ‰½κ²Œ κ°€λŠ₯ν•˜λ‹€. -- Unixνƒ€μž„(int)ν˜• λ³€ν™˜ SELECT to_timestamp(1658792421) -- varchar νƒ€μž… λ³€ν™˜ SELECT to_timestamp('20231026','yyyymmdd') -- λ‚ μ§œν˜•μ„ char둜 λ³€ν™˜ SELECT to_char(to_timestamp(1658792421), 'DD-MM-YYYY') 2. μœ νš¨ν•œ λ‚ μ§œν˜•νƒœ 검증 데이터 μ •μ œκ°€ μ™„λ£Œλ˜μ§€ μ•Šμ•„ μ‘°νšŒν•˜λ €λŠ” 데이터에 λ‚ μ§œμœ ν˜•μ—μ„œ λ²—μ–΄λ‚œ 데이터 ('20231301',202301', '20231232' λ“±)κ°€ ν•˜λ‚˜λΌλ„ μžˆμ„ 경우 쑰회 μžμ²΄κ°€ μ•ˆλœλ‹€. 그럴 경우 λ‚ μ§œ κ·œκ²©μ— λ§žμ§€ μ•ŠλŠ” 데이터λ₯Ό 보정 ν›„ μ—°μ‚°ν•΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ μžˆλŠ”λ°Β λ‹¨μˆœ 월별 μΌ€μ΄μŠ€λ¬ΈμœΌλ‘œ λΆ„λ¦¬ν•˜μ—¬ λ‚ μ§œ μœ ν˜•μ— μ–΄κΈ‹λ‚˜λŠ” 경우λ₯Ό 찾을 μˆ˜λ„ μžˆμ§€λ§Œ rowλ§ˆλ‹€ λ‚ μ§œ μœ ν˜•μ΄ λ‹€λ₯΄κ±°λ‚˜ μœ€λ‹¬μ„ 체크할 수 μ—†λ‹€. ...

[Java] 가상 μŠ€λ ˆλ“œ (Virtual Threads)λž€? μžλ°” 21의 κ°€μƒμŠ€λ ˆλ“œ (Virtual Thread) λ„μž…

[Java] 가상 μŠ€λ ˆλ“œ (Virtual Threads)λž€? μžλ°” 21의 κ°€μƒμŠ€λ ˆλ“œ (Virtual Thread) λ„μž…

1. 가상 μŠ€λ ˆλ“œ (Virtual Threads)λž€? 2023.09.20 릴리즈 된 μžλ°” 21에 μΆ”κ°€λœ 가상 μŠ€λ ˆλ“œ(Virtual Threads)λΌλŠ” κΈ°λŠ₯을 μ‚΄νŽ΄λ³΄μž. 가상 μŠ€λ ˆλ“œλŠ” κ²½λŸ‰ μŠ€λ ˆλ“œλ‘œ, 높은 μ²˜λ¦¬λŸ‰μ˜ λ™μ‹œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μž‘μ„±, μœ μ§€ 및 κ΄€μ°°ν•˜λŠ” μž‘μ—… 곡수λ₯Ό 크게 쀄인닀.Β OSμŠ€λ ˆλ“œλ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜μ§€ μ•Šκ³  JVM 자체적으둜 μŠ€μΌ€μ₯΄λ§μ„ 톡해 μ‚¬μš©ν•  수 μžˆλŠ” κ²½λŸ‰ μŠ€λ ˆλ“œμ΄λ©°, ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ μˆ˜μ‹­ - 수백만 μŠ€λ ˆλ“œλ₯Ό λ™μ‹œμ— μ‹€ν–‰ν• μˆ˜ μžˆλ„λ‘ μ„€κ³„λ˜μ—ˆλ‹€. 2. μžλ°”μ˜ 전톡적인 μŠ€λ ˆλ“œ μžλ°” κ°œλ°œμžλ“€μ€ κ·Ό 30λ…„λ™μ•ˆ λ™μ‹œμ„± μ„œλ²„ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 처리λ₯Ό μœ„ν•΄ μŠ€λ ˆλ“œμ— μ˜μ‘΄ν•΄μ™”λ‹€. λͺ¨λ“  λ©”μ„œλ“œμ˜ ꡬ문듀은 μŠ€λ ˆλ“œ λ‚΄λΆ€μ—μ„œ μ‹€ν–‰λ˜λ©°, 1개의 μš”μ²­μ„ 1개의 μŠ€λ ˆλ“œκ°€ μ²˜λ¦¬ν•œλ‹€. λŒ€ν‘œμ μœΌλ‘œ μŠ€ν”„λ§μ€ λ©€ν‹°μŠ€λ ˆλ“œ ꡬ쑰이기에, μ—¬λŸ¬ μŠ€λ ˆλ“œμ˜ 싀행이 λ™μ‹œμ— λ°œμƒν•˜λ©° λ™μ‹œ μš”μ²­μ΄ λ§Žμ•„μ§ˆμˆ˜λ‘ μŠ€λ ˆλ“œμ˜ 수 μ—­μ‹œ μ¦κ°€ν•œλ‹€. 각각의 μŠ€λ ˆλ“œλŠ” μ§€μ—­ λ³€μˆ˜λ₯Ό μ €μž₯ν•˜κ³  λ©”μ†Œλ“œ ν˜ΈμΆœμ„ν•˜λŠ” μŠ€νƒμ„ μ œκ³΅ν•˜λ©°, λ¬Έμ œκ°€ 생겼을 λ•Œμ˜ Context도 μ œκ³΅ν•˜λŠ”λ°, 예λ₯Όλ“€μ–΄ Exception은 동일 μŠ€λ ˆλ“œ λ‚΄μ—μ„œμ˜ λ©”μ†Œλ“œμ— μ˜ν•΄ throw/catch λœλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— κ°œλ°œμžλŠ” μŠ€λ ˆλ“œμ˜ Stack trace둜 문제λ₯Ό 좔적할 수 μžˆλŠ” 것이고, κ·Έ μ™Έ Debugger (μŠ€λ ˆλ“œμ˜ λ©”μ†Œλ“œ λ‚΄μ—μ„œ ꡬ문을 μ°¨λ‘€λ‘œ ν›‘μ–΄λ³Έλ‹€), Profiler(JFR) (μ—¬λŸ¬ μŠ€λ ˆλ“œμ˜ 행동을 μ‹œκ°ν™”ν•˜μ—¬ μŠ€λ ˆλ“œμ˜ μ„±λŠ₯을 이해할 수 μžˆλ„λ‘ 도와쀀닀.)도 λͺ¨λ‘ μŠ€λ ˆλ“œ 기반으둜 λ˜μ–΄μžˆλ‹€. ...