Coder Social home page Coder Social logo

web-study's Introduction

πŸ‘‹Β  Hi there!

I enjoy running, cooking and bowling. πŸ‘©πŸ»β€πŸ³ 🎳
I hope to develop every beautiful things. ✨

πŸ’ͺ Skills

Platforms & Languages

Tools

Β  Β 

web-study's People

Contributors

jeongminwel avatar seobkim avatar suebeen avatar

Watchers

 avatar

web-study's Issues

06 ν”„λ‘œλ•μ…˜ 배포

μ„œλΈŒλ„·(subnet) μ΄λž€?

클래슀 λ‹¨μœ„λ‘œ λΆ„λ₯˜λ₯Ό ν•˜κ²Œ 되면 μ μ ˆν•œ λ„€νŠΈμ›Œν¬μ˜ 크기둜 ꡬ뢄할 수 μ—†λ‹€. λ”°λΌμ„œ μ„œλΈŒλ„·μœΌλ‘œ λΆ„ν• ν•˜μ—¬ μ‚¬μš©ν•œλ‹€. μ„œλΈŒλ„·(Subnet)μ΄λΌλŠ” 것은 ν•˜λ‚˜μ˜ λ„€νŠΈμ›Œν¬κ°€ λΆ„ν• λ˜μ–΄ λ‚˜λˆ μ§„ μž‘μ€ λ„€νŠΈμ›Œν¬μ΄λ‹€. λ„€νŠΈμ›Œν¬λ₯Ό λΆ„ν• ν•˜λŠ” 것을 μ„œλΈŒλ„€νŒ…(Subnettin)이라고 ν•œλ‹€. 그리고 이 μ„œλΈŒλ„€νŒ…μ€ μ„œλΈŒλ„· 마슀크(Subnet Mask)λ₯Ό ν†΅ν•˜μ—¬ μˆ˜ν–‰λ  수 μžˆλ‹€.

image

μ„œλΈŒλ„·μ΄ ν•„μš”ν•œ 이유

μ΄λŸ¬ν•œ κΈ°μˆ λ“€μ€ κ²°κ΅­ 각 클래슀둜 λ‚˜λˆ μ§„ λ„€νŠΈμ›Œν¬λ₯Ό μš΄μ˜μ€‘μΈ μ„œλΉ„μŠ€μ˜ 규λͺ¨μ— 맞게 λΆ„ν• ν•˜μ—¬ μ‚¬μš©ν•˜κΈ° μœ„ν•œ κΈ°μˆ μ΄λ‹€.
λ”°λΌμ„œ 이런 κΈ°μˆ μ„ ν†΅ν•΄μ„œ 맀우 큰 λ„€νŠΈμ›Œν¬λ₯Ό μž‘κ²Œ λ‚˜λˆ μ„œ μ‚¬μš©ν•˜λ©΄μ„œ, λ‚­λΉ„λ˜λŠ” IPμ£Όμ†Œ μžμ›μ„ μ΅œμ†Œν™”ν•˜λ €λŠ” 것이 주된 λͺ©μ μ΄λ‹€.

λ‹€λ₯Έ μ΄μœ λ‘œλŠ” λΈŒλ‘œλ“œ μΊμŠ€νŒ…μ„ μ‚¬μš©ν•  λ•Œμ΄λ‹€.
이 κΈ°μˆ μ€ νŠΉμ • λ„€νŠΈμ›Œν¬μ— μ—°κ²°λœ λͺ¨λ“  기기에 ν•˜λ‚˜μ˜ λ©”μ‹œμ§€λ‘œ λ™μ‹œμ— 데이터λ₯Ό λ³΄λ‚΄λŠ” 것이닀.
이λ₯Ό μ‚¬μš©ν•  λ•Œ μ—°κ²°λœ 호슀트 λ””λ°”μ΄μŠ€κ°€ λ§Žλ‹€λ©΄, λ‹Ήμ—°νžˆ μ„±λŠ₯의 μ €ν•˜κ°€ 올 수 μžˆλ‹€.
λ”°λΌμ„œ λ„€νŠΈμ›Œν¬μ˜ 규λͺ¨λ₯Ό μ€„μ—¬μ„œ λΈŒλ‘œλ“œ μΊμŠ€νŒ…μœΌλ‘œ μΈν•œ λΆ€ν•˜λ₯Ό 쀄일 수 μžˆλŠ” 것이닀.

λΈŒλ‘œλ“œμΊμŠ€νŒ…(broadcasting)은 솑신 ν˜ΈμŠ€νŠΈκ°€ μ „μ†‘ν•œ 데이터가 λ„€νŠΈμ›Œν¬μ— μ—°κ²°λœ λͺ¨λ“  ν˜ΈμŠ€νŠΈμ— μ „μ†‘λ˜λŠ” 방식을 μ˜λ―Έν•œλ‹€.
image

chap04.λ°±μ—”λ“œ 인증 톡합

1.JWT μž₯점 및 단점

1-1) JWTλŠ” 맀우 λ³΅μž‘ν•œ ν‘œμ€€μ΄μ–΄μ„œ μ‚¬μš©μžκ°€(개발자) 잘λͺ» 이해할 κ°€λŠ₯성이 μžˆλ‹€. 섀정이 잘λͺ»λ˜λŠ” 경우 μ΅œμ•…μ— λͺ¨λ“  μ‚¬μš©μžκ°€ μœ νš¨ν•œ JWTλ₯Ό μƒμ„±ν•΄μ„œ λ‹€λ₯Έ μ‚¬μš©μžμΈμ²™ ν•  수 μžˆλ‹€. μ΄λŠ” μ΄ˆλ³΄κ°œλ°œμžλ“€ μ‚¬μ΄μ—μ„œ λ‚˜μ˜€λŠ” μ‹€μˆ˜κ°€ μ•„λ‹ˆκ³ , μ‹€μ œλ‘œ Auth0μ—μ„œ μ΄λŸ¬ν•œ 버그λ₯Ό λ§Œλ“€μ–΄λ‚Έ 적이 μžˆλ‹€. μ΄λŠ” λ§Žμ€ λ³΄μ•ˆ 전문가듀이 JWTλ₯Ό μ‹«μ–΄ν•˜κ²Œ λ˜λŠ” 이유 쀑 ν•˜λ‚˜κ°€ λ˜μ—ˆλ‹€. JWTλŠ” μˆ˜λ§Žμ€ κΈ°λŠ₯을 μ œκ³΅ν•˜κ³  있기 λ•Œλ¬Έμ—, κ°œλ°œμžλ“€μ΄ 잠재적으둜 μ‹€μˆ˜ ν•  수 μžˆλŠ” λ²”μœ„κ°€ λ„“λ‹€.

1-2) λ‘œκ·Έμ•„μ›ƒμ— λ¬Έμ œκ°€ μžˆλ‹€. 전톡적인 μ„Έμ…˜μ„ ν™œμš©ν•˜λŠ” λ°©λ²•μ˜ 경우, λ‹¨μˆœνžˆ μ„Έμ…˜ μŠ€ν† λ¦¬μ§€μ—μ„œ ν•΄λ‹Ή μ„Έμ…˜ 값을 날리면 λ˜μ—ˆκ³  μ΄κ²ƒμœΌλ‘œ μΆ©λΆ„ν–ˆλ‹€. κ·ΈλŸ¬λ‚˜ JWT와 λ‹€λ₯Έ λ¬΄μƒνƒœ (stateless) ν† ν°μœΌλ‘œλŠ” 이것이 λΆˆκ°€λŠ₯ν•˜λ‹€. μš°λ¦¬λŠ” 이 토큰을 μ§€μšΈ 수 μ—†λ‹€. μ™œλƒν•˜λ©΄ μ΄λŠ” 슀슀둜 정보λ₯Ό λ‹΄κ³  μžˆλŠ” 토큰이며, ν† ν°μ˜ μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜λŠ” 쀑앙 인증 관리 μ‹œμŠ€ν…œμ΄ μ—†κΈ° λ•Œλ¬Έμ΄λ‹€. μ΄λŠ” μ•„λž˜ 세가지 λ°©λ²•μœΌλ‘œ ν•΄κ²°ν•  수 μžˆλ‹€.

  • ν† ν°μ˜ 생λͺ… μ£ΌκΈ°λ₯Ό ꡉμž₯히 짧게 ν•˜λŠ” 방법 (5λΆ„ 이내). ν•΄λ‹Ή μ‹œκ°„μ΄ μ§€λ‚˜λ©΄, μƒˆλ‘­κ²Œ 토큰을 λ§Œλ“ λ‹€.
  • μ‹œμŠ€ν…œμ—μ„œ μ΅œκ·Όμ— 만료된 토큰을 μ €μž₯ν•΄ λ‘λŠ” 것
  • μ„œλ²„ λ‘œκ·Έμ•„μ›ƒ κΈ°λŠ₯ 자체λ₯Ό μ—†μ• κ³ , ν΄λΌμ΄μ–ΈνŠΈμ— 토큰 μ‚­μ œλ₯Ό λ§‘κΈ°λŠ” 방법 쒋은 μ‹œμŠ€ν…œμ˜ κ²½μš°μ—” μ•žμ— 두가지 방법을 μ„ νƒν•œλ‹€. κ·ΈλŸ¬λ‚˜ 두 문제의 ν•΄κ²°μ±…μ—μ„œ λ³Ό 수 μžˆλŠ” κ²ƒμ²˜λŸΌ, 두 방법은 λͺ¨λ‘ μ€‘μ•™μ—μ„œ 인증을 관리해야 ν•˜λŠ” μ‹œμŠ€ν…œμ΄ ν•„μš”ν•˜λ©° μ΄λŠ” 더 이상 JWT의 μž₯점을 μœ νš¨ν•˜μ§€ μ•Šκ²Œ λ§Œλ“ λ‹€.

1-3) JWT의 ν¬ν‚€λŠ” μƒλŒ€μ μœΌλ‘œ 크기 λ•Œλ¬Έμ—, 쿠킀에 JWTλ₯Ό 담을 경우 μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•œλ‹€λŠ” 것이닀.

Spring Security / JWT / OAuth 2.0
λŒ€ν˜• μ„œλΉ„μŠ€μ˜ 경우 MSA λ°©μ‹μ˜ μ•„ν‚€ν…μ²˜μ΄λ©°, OAuth 2.0 λ°©μ‹μ˜ 인증방식을 주둜 μ‚¬μš©ν•œλ‹€.

  • OAuth 2.0λž€
    기본적으둜 OAuth (OpenID Authentication) λž€, νƒ€μ‚¬μ˜ μ‚¬μ΄νŠΈμ— λŒ€ν•œ μ ‘κ·Ό κΆŒν•œμ„ μ–»κ³  κ·Έ κΆŒν•œμ„ μ΄μš©ν•˜μ—¬ κ°œλ°œν•  수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” ν”„λ ˆμž„μ›Œν¬λ‹€. ꡬ글, 카카였, 넀이버 λ“±κ³Ό 같은 μ‚¬μ΄νŠΈμ—μ„œ λ‘œκ·ΈμΈμ„ ν•˜λ©΄ 직접 κ΅¬ν˜„ν•œ μ‚¬μ΄νŠΈμ—μ„œλ„ 둜그인 인증을 받을 수 μžˆλ„λ‘ λ˜λŠ” ꡬ쑰닀.

06 : ν”„λ‘œλ•μ…˜ 배포

  1. ASG μ—μ„œ μ„œλ²„ 증섀, μ„œλ²„ μΆ•μ†Œλ₯Ό μžλ™μœΌλ‘œ ν•΄μ£ΌλŠ”λ° μ„œλ²„ μ¦μ„€μ‹œμ—λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€κ³  μ„œλ²„λ₯Ό μžλ™μœΌλ‘œ λ„£μ–΄μ£ΌλŠ”μ§€?
    μΈμŠ€ν„΄μŠ€λ§Œ λŠ˜λ €μ€€λ‹€λ©΄, μ•ˆμ— μ„œλ²„λŠ” 없을텐데..

  2. VPCλž€?

  3. μ„œλΈŒλ„·μ΄λž€?

chap04 : 인증 λ°±μ—”λ“œ 톡합

❗토큰 기반 인증은 μœ νš¨κΈ°κ°„ 생성, 일괄 둜그인 등을 ν•  수 μžˆλŠ”λ°, μ™œΒ λ‘œκ·Έμ•„μ›ƒ Basic μΈμ¦μ—μ„œλŠ” λ‘œκ·Έμ•„μ›ƒ μ‚¬μš©μ΄ λΆˆκ°€ν• κΉŒ?

❗JWT μ—μ„œ μ™œ μ „μžμ„œλͺ…을 μ‚¬μš©ν•˜λŠ”μ§€? (λ‹€λ₯Έ 인증 방식이 λ§Žμ„ν…λ°..)

β—μ „μžμ„œλͺ…에 λŒ€ν•œ ν”Œλ‘œμš°, 방식 ν”„λ‘œμ„ΈμŠ€ / μ–΄λ–€μ‹μœΌλ‘œ 인증을 ν•˜κ³  확인을 ν•˜λŠ”μ§€

❗"μ„œλ²„μ—μ„œ μ „μž μ„œλͺ…λœ 토큰을 μ΄μš©ν•˜λ©΄ μŠ€μΌ€μΌ 이슈λ₯Ό ν•΄κ²°ν•  수 μžˆλ‹€." 라고 μ ν˜€μžˆλŠ”λ° λ˜‘κ°™μ΄ ν†΅μ‹ λ§ˆλ‹€ JWT 데이터λ₯Ό λ³΄λ‚΄λŠ”λ° μ–΄λ–»κ²Œ μŠ€μΌ€μΌ 이슈λ₯Ό ν•΄κ²°ν•œκ±΄μ§€

Chapter3

223P μ‹€μŠ΅μ½”λ“œ 3-42

1

if(request){ options.body = JSON.stringfy(request); }
μœ„ μ½”λ“œμ˜ 쑰건문 μ•ˆμ˜ requestλΌλŠ” νŒŒλΌλ―Έν„°κ°€ NULL μΌλ•ŒλŠ” μ–΄λ–»κ²Œ 처리될거 κ°™λ‚˜μš”?

2

JSX 문법 처음 κ²½ν—˜ν–ˆμ„ λ•Œ JS μ½”λ“œμ™€ HTMLμ½”λ“œκ°€ ν•¨κ»˜ μ“°λ‹€λ³΄λ‹ˆ 가독성이 많이 λ–¨μ–΄μ Έ λ³΄μ˜€λŠ”λ°, μˆ™λ ¨λ„ μ΄μŠˆμΈμ§€?

3

`
componentWillMount() {
console.log('componentWillMount');
}

componentDidMount() {
console.log('componentDidMount');
}

componentWillReceiveProps(nextProps) {
console.log('componentWillReceiveProps');
}

shouldComponentUpdate(nextProps, nextState) {
console.log('shouldComponentUpdate');
return true / false;
}

componentWillUpdate(nextProps, nextState) {
console.log('componentWillUpdate');
}

componentDidUpdate(prevProps, prevState) {
console.log('componentDidUpdate');
}

componentWillUnmount() {
console.log('componentWillUnmount');
}
`

λ¦¬μ•‘νŠΈμ˜ 가상돔을 μ‚¬μš©ν•˜λ‹€λ³΄λ‹ˆ 생λͺ…주기에 κ΄€ν•œ Rendering에 μœ„μ™€ 같이 λ§Žλ‹€
ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ Rendering μ‹œμ  문제λ₯Ό κ²½ν—˜ν•΄λ³Έμ μ΄ μžˆλŠ”μ§€

λ°±μ—”λ“œ 인증 톡합

  • JWT μž₯단점 β€” Stateful vs. Stateless
    • μž₯점
      • μ‚¬μš©μž 인증에 ν•„μš”ν•œ λͺ¨λ“  μ •λ³΄λŠ” 토큰 μžμ²΄μ— ν¬ν•¨ν•˜κΈ° λ•Œλ¬Έμ— λ”°λ‘œ μŠ€ν† λ¦¬μ§€κ°€ ν•„μš” μ—†μŒ
        • μˆ˜ν‰ν™•μž₯이 맀우 쉬움 β€” Session Cluster ν•„μš” μ—†μŒ
      • λ”°λΌμ„œ, Active Userκ°€ λ§Žμ€ μ„œλΉ„μŠ€μ—μ„œ JWTμ‚¬μš©μ΄ μœ λ¦¬ν•¨
        • Session을 μ‚¬μš©ν•  경우 Active User 수 만큼 Session을 μ €μž₯ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— μŠ€ν† λ¦¬μ§€ 관리가 μ–΄λ €μ›Œμ§
    • 단점
      • 토큰 크기λ₯Ό κ°€λŠ₯ν•œ μž‘κ²Œ μœ μ§€ν•΄μ•Ό 함
        • 토큰 μžμ²΄κ°€ 항상 HTTP μš”μ²­μ— ν¬ν•¨λ˜μ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 토큰이 컀질수둝 λΆˆλ¦¬ν•¨
      • μœ νš¨κΈ°κ°„μ΄ 남아 μžˆλŠ” 정상적인 토큰에 λŒ€ν•΄ κ°•μ œμ μœΌλ‘œ 만료 μ²˜λ¦¬κ°€ 어렀움
        • Session을 μ‚¬μš©ν•  경우 λ™μ‹œ Session μ œμ–΄, Session 만료 처리 λ“± λ³΄μ•ˆμƒ 이점이 있음
  • μ„œλΈ”λ¦Ώ ν•„ν„° λ™μž‘κ³Όμ •
    • μ΄ˆκΈ°ν™”
      • μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλŠ” ν•„ν„°λ₯Ό μΈμŠ€ν„΄μŠ€ν™” ν•œ ν›„ μ •ν™•νžˆ ν•œ 번 init λ©”μ†Œλ“œλ₯Ό 호좜
      • μ„±κ³΅μ μœΌλ‘œ μ΄ˆκΈ°ν™”κ°€ μ™„λ£ŒλΌμ•Ό 필터링을 μˆ˜ν–‰κ°€λŠ₯
      • FilterConfigλ₯Ό ν†΅ν•œ μ»€μŠ€ν…€ν•œ filter 섀정이 κ°€λŠ₯
    • 필터링
      • request, response에 λŒ€ν•œ 필터링 λ‘œμ§μ„ μž‘μ„±ν•˜λŠ” κ³³
      • resquest, responseκ°€ 체인을 톡과할 λ•Œ λ§ˆλ‹€ μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆμ—μ„œ 호좜
      • νŒŒλΌλ―Έν„°λ‘œ λ“€μ–΄μ˜¬ μ‹œ 이전 ν•„ν„°μ˜ 정보λ₯Ό λ°›μ•„μ˜€λ©°, λ©”μ†Œλ“œ μ•ˆμ—μ„œ μ‚¬μš©μ‹œ λ‹€μŒμ˜ ν•„ν„° λ˜λŠ” λ¦¬μ†ŒμŠ€λ₯Ό ν˜ΈμΆœν•˜λŠ” μ—­ν• 
      • μ‚¬μš©ν•˜μ§€ μ•Šμ„ μ‹œ, μš”μ²­μ„ servlet으둜 보내지 μ•Šκ³  λ°”λ‘œ 응닡
    • μ†Œλ©Έ
      • doFilter λ©”μ„œλ“œ λ‚΄μ˜ λͺ¨λ“  μŠ€λ ˆλ“œκ°€ μ’…λ£Œλ˜κ±°λ‚˜ μ„€μ •ν•œ μ œν•œ μ‹œκ°„μ΄ μ§€λ‚œ 후에 μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆμ— μ˜ν•΄ ν•œλ²ˆ 호좜
      • μ›Ή μ»¨ν…Œμ΄λ„ˆκ°€ destroyλ₯Ό 호좜 ν•œ ν›„μ—λŠ” μΈμŠ€ν„΄μŠ€μ—μ„œ doFilterλ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•˜μ§€ μ•ŠμŒ
      • μΈμŠ€ν„΄μŠ€λ₯Ό μ†Œλ©Έν•˜κΈ° μ „ ν˜ΈμΆœν•˜λŠ” λ©”μ†Œλ“œ

[μ‹€μŠ΅ 2μž₯] λ°±μ—”λ“œ 개발

1. JAVA의 Generic

List<Generic>

μ œλ„€λ¦­(Generic)은 μ§μ—­ν•˜μžλ©΄ '일반적인'μ΄λΌλŠ” λœ»μ΄λ‹€. '데이터 ν˜•μ‹μ— μ˜μ‘΄ν•˜μ§€ μ•Šκ³ , ν•˜λ‚˜μ˜ 값이 μ—¬λŸ¬ λ‹€λ₯Έ 데이터 νƒ€μž…λ“€μ„ κ°€μ§ˆ 수 μžˆλ„λ‘ ν•˜λŠ” 방법'이닀.

  • Java의 Jeneric에 μ™€μΌλ“œ μΉ΄λ“œλ‘œ μ•„λž˜μ™€ 같이 μ‚¬μš©κ°€λŠ₯ν•œλ°, 각 μ™€μΌλ“œμΉ΄λ“œμ˜ λ‚΄μš©μ— 따라 ν˜•μ‹μ— 맞좰 객체λ₯Ό μƒμ„±ν•˜λ©΄λœλ‹€.

<T> Type => String / Integer λ“±
<E> Element => Array/ ArrayList/ Map λ“±μ˜ Object ν˜•μ‹
<K> Key => Key κ°’μ˜ νƒ€μž…
<V> Value => Value κ°’μ˜ νƒ€μž…
<N> Number => 숫자 ν˜•μ‹

Generic의 μž₯점

  1. μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜λ©΄ 잘λͺ»λœ νƒ€μž…μ΄ λ“€μ–΄μ˜¬ 수 μžˆλŠ” 것을 컴파일 λ‹¨κ³„μ—μ„œ 방지할 수 μžˆλ‹€.
  2. 클래슀 μ™ΈλΆ€μ—μ„œ νƒ€μž…μ„ 지정해주기 λ•Œλ¬Έμ— λ”°λ‘œ νƒ€μž…μ„ μ²΄ν¬ν•˜κ³  λ³€ν™˜ν•΄μ€„ ν•„μš”κ°€ μ—†λ‹€. 즉, κ΄€λ¦¬ν•˜κΈ°κ°€ νŽΈν•˜λ‹€.
  3. λΉ„μŠ·ν•œ κΈ°λŠ₯을 μ§€μ›ν•˜λŠ” 경우 μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ΄ 높아진닀.

μœ„μ˜ μ™€μΌλ“œμΉ΄λ“œ ν˜•μ‹μ€ λ°˜λ“œμ‹œ ν•œ κΈ€μžμΌ ν•„μš”λŠ” μ—†λ‹€. λ˜ν•œ μ„€λͺ…κ³Ό λ°˜λ“œμ‹œ μΌμΉ˜ν•΄μ•Ό ν•  ν•„μš”λ„ μ—†λ‹€.
μ˜ˆλ‘œλ“€μ–΄ 라고 해도 μ „ν˜€ λ¬΄λ°©ν•˜λ‹€. λ‹€λ§Œ λŒ€μ€‘μ μœΌλ‘œ ν†΅ν•˜λŠ” 톡상적인 선언이 κ°€μž₯ νŽΈν•˜κΈ° λ•Œλ¬Έμ— μœ„μ™€κ°™μ€ 암묡적(?)인 κ·œμΉ™μ΄ μžˆμ„ 뿐이닀.

2. JPQL κ³Ό Native SQL

  • JPQL(Java Persistence Query Language): JPQL은 SQLκ³Ό λΉ„μŠ·ν•œ 문법을 가진 객체 지ν–₯ μΏΌλ¦¬μž…λ‹ˆλ‹€.
  • Native SQL : Native SQL을 μ‚¬μš©ν•˜μ—¬ 쿼리λ₯Ό μ •μ˜ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. Native SQL을 μ‚¬μš©ν•˜λ €λ©΄ nativeQuery μ†μ„±μ˜ 값을 true 둜 μ„€μ •ν•©λ‹ˆλ‹€.

https://hgko1207.github.io/2021/06/19/spring-jpa-1/

3. Java Stream

μžλ°” 8μ—μ„œ μΆ”κ°€ν•œ 슀트림(Streams)은 λžŒλ‹€λ₯Ό ν™œμš©ν•  수 μžˆλŠ” 기술 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. μžλ°” 8 μ΄μ „μ—λŠ” λ°°μ—΄ λ˜λŠ” μ»¬λ ‰μ…˜ μΈμŠ€ν„΄μŠ€λ₯Ό λ‹€λ£¨λŠ” 방법은 for λ˜λŠ” foreach 문을 λŒλ©΄μ„œ μš”μ†Œ ν•˜λ‚˜μ”©μ„ κΊΌλ‚΄μ„œ λ‹€λ£¨λŠ” λ°©λ²•μ΄μ—ˆμŠ΅λ‹ˆλ‹€. κ°„λ‹¨ν•œ 경우라면 μƒκ΄€μ—†μ§€λ§Œ 둜직이 λ³΅μž‘ν•΄μ§ˆμˆ˜λ‘ μ½”λ“œμ˜ 양이 λ§Žμ•„μ Έ μ—¬λŸ¬ 둜직이 μ„žμ΄κ²Œ 되고, λ©”μ†Œλ“œλ₯Ό λ‚˜λˆŒ 경우 루프λ₯Ό μ—¬λŸ¬ 번 λ„λŠ” κ²½μš°κ°€ λ°œμƒν•©λ‹ˆλ‹€.

μŠ€νŠΈλ¦Όμ€ 'λ°μ΄ν„°μ˜ νλ¦„β€™μž…λ‹ˆλ‹€. λ°°μ—΄ λ˜λŠ” μ»¬λ ‰μ…˜ μΈμŠ€ν„΄μŠ€μ— ν•¨μˆ˜ μ—¬λŸ¬ 개λ₯Ό μ‘°ν•©ν•΄μ„œ μ›ν•˜λŠ” κ²°κ³Όλ₯Ό ν•„ν„°λ§ν•˜κ³  κ°€κ³΅λœ κ²°κ³Όλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ λžŒλ‹€λ₯Ό μ΄μš©ν•΄μ„œ μ½”λ“œμ˜ 양을 쀄이고 κ°„κ²°ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 즉, λ°°μ—΄κ³Ό μ»¬λ ‰μ…˜μ„ ν•¨μˆ˜ν˜•μœΌλ‘œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

또 ν•˜λ‚˜μ˜ μž₯점은 κ°„λ‹¨ν•˜κ²Œ λ³‘λ ¬μ²˜λ¦¬(multi-threading)κ°€ κ°€λŠ₯ν•˜λ‹€λŠ” μ μž…λ‹ˆλ‹€. ν•˜λ‚˜μ˜ μž‘μ—…μ„ λ‘˜ μ΄μƒμ˜ μž‘μ—…μœΌλ‘œ 잘게 λ‚˜λˆ μ„œ λ™μ‹œμ— μ§„ν–‰ν•˜λŠ” 것을 병렬 처리(parallel processing)라고 ν•©λ‹ˆλ‹€. 즉 μ“°λ ˆλ“œλ₯Ό μ΄μš©ν•΄ λ§Žμ€ μš”μ†Œλ“€μ„ λΉ λ₯΄κ²Œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μŠ€νŠΈλ¦Όμ— λŒ€ν•œ λ‚΄μš©μ€ 크게 μ„Έ κ°€μ§€λ‘œ λ‚˜λˆŒ 수 μžˆμŠ΅λ‹ˆλ‹€.

  • μƒμ„±ν•˜κΈ° : 슀트림 μΈμŠ€ν„΄μŠ€ 생성.
  • κ°€κ³΅ν•˜κΈ° : 필터링(filtering) 및 맡핑(mapping) λ“± μ›ν•˜λŠ” κ²°κ³Όλ₯Ό λ§Œλ“€μ–΄κ°€λŠ” 쀑간 μž‘μ—…(intermediate operations).
  • κ²°κ³Ό λ§Œλ“€κΈ° : μ΅œμ’…μ μœΌλ‘œ κ²°κ³Όλ₯Ό λ§Œλ“€μ–΄λ‚΄λŠ” μž‘μ—…(terminal operations).

4. Optional 객체

Optionalμ΄λž€?
OptionalλŠ” β€œμ‘΄μž¬ν•  μˆ˜λ„ μžˆμ§€λ§Œ μ•ˆ ν•  μˆ˜λ„ μžˆλŠ” 객체”, 즉, β€œnull이 될 μˆ˜λ„ μžˆλŠ” 객체”을 감싸고 μžˆλŠ” μΌμ’…μ˜ 래퍼 ν΄λž˜μŠ€μž…λ‹ˆλ‹€. μ›μ†Œκ°€ μ—†κ±°λ‚˜ μ΅œλŒ€ ν•˜λ‚˜ 밖에 μ—†λŠ” Collectionμ΄λ‚˜ Stream으둜 μƒκ°ν•˜μ…”λ„ μ’‹μŠ΅λ‹ˆλ‹€. 직접 닀루기에 μœ„ν—˜ν•˜κ³  κΉŒλ‹€λ‘œμš΄ null을 담을 수 μžˆλŠ” νŠΉμˆ˜ν•œ κ·Έλ¦‡μœΌλ‘œ μƒκ°ν•˜μ‹œλ©΄ 이해가 μ‰¬μš°μ‹€ 것 κ°™μŠ΅λ‹ˆλ‹€.

Optional의 효과

  • μ˜ˆμ™Έλ₯Ό μœ λ°œν•  수 μžˆλŠ” null을 직접 닀루지 μ•Šμ•„λ„λ¨.
  • null 체크λ₯Ό 직접 ν•˜μ§€ μ•Šμ•„λ„ 됨.
  • λͺ…μ‹œμ μœΌλ‘œ ν•΄λ‹Ή λ³€μˆ˜κ°€ null일 μˆ˜λ„ μžˆλ‹€λŠ” κ°€λŠ₯성을 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (λ”°λΌμ„œ λΆˆν•„μš”ν•œ λ°©μ–΄ λ‘œμ§μ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.)

issue

@table @entity name 맀핑 μ‹œ 쿼리 λ™μž‘ 의문

μ˜μ‘΄μ„± μ£Όμž…

"ν•œ μ˜€λΈŒμ νŠΈκ°€ μ˜μ‘΄ν•˜λŠ” 였브젝트λ₯Ό μƒμ„±ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ™ΈλΆ€μ—μ„œ λ„˜κ²¨λ°›λŠ” 것을 μ˜μ‘΄μ„± μ£Όμž…μ΄λΌκ³  ν•œλ‹€."
μ˜€λΈŒμ νŠΈμ—μ„œ μƒμ„±ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ™ΈλΆ€μ—μ„œ λ„˜κ²¨ λ°›μ•„μ„œ μ‚¬μš©ν•˜λŠ” 것이면, 싱글톀 λ°©μ‹κ³ΌλŠ” μ–΄λ–€ 차이가 μžˆμ„κΉŒμš”

https://esoongan.tistory.com/90?category=915638
https://dpdpwl.tistory.com/140

[μ‹€μŠ΅ 2μž₯] λ°±μ—”λ“œ 개발

1. Entity와 DTO 차이점

ꡳ이 entityλ₯Ό λ§Œλ“€κ³  κ·Έ 객체듀을 DTOμ—μ„œ λ‹€μ‹œ κ°€μ Έλ‹€ μ“°λŠ”μ§€?

public TodoDTO(final TodoEntity entity) { this.id = entity.getId(); this.title = entity.getTitle(); this.done = entity.isDone(); }

2. ResponseDTO response = ResponseDTO.builder().data(list).build()

μ™œ μ΄λŸ°μ‹μœΌλ‘œ μ“°λŠ”μ§€..?
https://jeongmin-it.tistory.com/51

3. μ±…μ—μ„œ μ—¬λŸ¬κ°€μ§€ 역할을 ν•˜λŠ” νŒŒμΌλ“€μ΄ μžˆλŠ”λ° 폴더 ꡬ성은 μ–΄λ–»κ²Œ ν•˜λŠ”μ§€?

4. throw new RuntimeException("Entity cannot be null"); λŠ” μ–΄λ–€ κ²°κ³Όκ°€ λ‚˜μ˜¬μ§€

5. entities.stream().map(TodoDTO::new).collect(Collectors.toList());

6. H2데이터 λ² μ΄μŠ€λŠ” ν…Œμ΄λΈ” ꡬ성을 어디에 ν• κΉŒοΏ½

Entity μ—μ„œ @table(name = "Todo") 둜 ν…Œμ΄λΈ” 맀핑은 ν•˜λŠ”κ±° 같은데 ꡬ성을 μ•ˆν•œκ±° 같은데,,?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.