+) 22. 08. 10. μΆκ°!
μΉμ 6. λ‘κ·ΈμΈ μ²λ¦¬1 - μΏ ν€, μΈμ μκ° μλ£!!
ν¨ν€μ§ ꡬ쑰
domain: νλ©΄, UI, κΈ°μ μΈνλΌ λ±μ μμμ μ μΈν, μμ€ν
μ΄ κ΅¬νν΄μΌ νλ ν΅μ¬ λΉμ¦λμ€ μ
무 μμμ΄λ€.
ν₯ν webμ λ€λ₯Έ κΈ°μ λ‘ λ°κΎΈμ΄λ λλ©μΈμ κ·Έλλ‘ μ μ§ν μ μμ΄μΌ νλ€. μ¦, webμ domainμ μμ‘΄νμ§λ§ domainμ webμ μμ‘΄νμ§ μμμΌ νλ€.
public Member login(String loginId, String password) {
return memberRepository.findByLoginId(loginId)
.filter(m -> m.getPassword().equals(password))
.orElse(null);
}
β¬οΈ λ‘κ·ΈμΈμ ν΅μ¬ λΉμ¦λμ€ λ‘μ§μ νμμ μ‘°νν λ€μ, νλΌλ―Έν°λ‘ λμ΄μ¨ passwordμ λΉκ΅ν΄μ κ°μΌλ©΄ νμμ λ°ννκ³ , λ€λ₯΄λ©΄ nullμ λ°ννλ€.
λ‘κ·ΈμΈμ μ±κ³΅νλ©΄ μλ²μμ HTTP μλ΅μ μΏ ν€λ₯Ό λ΄μ λΈλΌμ°μ μ μ λ¬νλ€. κ·ΈλΌ λΈλΌμ°μ λ ν΄λΉ μΏ ν€λ₯Ό μ§μν΄μ 보λ΄μ€λ€.
μΏ ν€μλ μμ μΏ ν€μ μΈμ μΏ ν€κ° μλ€.
cookie.setMaxAge(0);
μΉ λΈλΌμ°μ μ’
λ£ μ μλ²μμ ν΄λΉ μΏ ν€μ μ’
λ£ λ μ§λ₯Ό 0μΌλ‘ μ§μ νλ€. ν΄λΉ μΏ ν€λ μ¦μ μ’
λ£λλ€.
μΏ ν€ κ°μ μμλ‘ λ³κ²½ν μ μμΌλ©°, μΏ ν€μ 보κ΄λ μ 보 λν νμ³κ° μ μλ€.
λ°λΌμ μΏ ν€μ μ€μν κ°μ λ
ΈμΆνμ§ μκ³ μ¬μ©μλ³λ‘ μμΈ‘ λΆκ°λ₯ν μμμ ν ν°(λλ€ κ°)μ λ
ΈμΆνκ³ , μλ²μμ ν ν°κ³Ό μ¬μ©μ IDλ₯Ό 맀νν΄μ μΈμν΄μΌ νλ€. κ·Έλ¦¬κ³ μλ²μμ ν ν°μ κ΄λ¦¬ν΄μΌ νλ€.
μ΄λ κ² μλ²μ μ€μν μ 보λ₯Ό 보κ΄νκ³ μ°κ²°μ μ μ§νλ λ°©λ²μ μΈμ μ΄λΌ νλ€.
μ¬μ©μκ° loginId, password μ 보λ₯Ό μ λ¬νλ©΄ μλ²μμ ν΄λΉ μ¬μ©μκ° λ§λμ§ νμΈνλ€.
μΆμ λΆκ°λ₯ν μΈμ
IDλ₯Ό μμ±νλ€. UUIDλ μΆμ μ΄ λΆκ°λ₯νλ€.
μμ±λ μΈμ
IDμ μΈμ
μ 보κ΄ν κ°(memberA)μ μλ²μ μΈμ
μ μ₯μμ 보κ΄νλ€.
ν΄λΌμ΄μΈνΈμ μλ²λ κ²°κ΅ μΏ ν€λ‘ μ°κ²°λμ΄μΌ νλ€.
μλ²λ ν΄λΌμ΄μΈνΈμ mySessionIdλΌλ μ΄λ¦μΌλ‘ μΈμ
IDλ§ μΏ ν€μ λ΄μμ μ λ¬νλ€.
ν΄λΌμ΄μΈνΈλ μΏ ν€ μ μ₯μμ mySessionId μΏ ν€λ₯Ό 보κ΄νλ€.
νμκ³Ό κ΄λ ¨λ μ 보λ ν΄λΌμ΄μΈνΈμκ² μ λ¬νμ§ μκ³ , μ€μ§ μΆμ λΆκ°λ₯ν μΈμ IDλ§ μΏ ν€λ₯Ό ν΅ν΄ μ λ¬νλ€.
μλΈλ¦Ώμ ν΅ν΄ HttpSession
μ μμ±νλ©΄ λ€μκ³Ό κ°μ μΏ ν€λ₯Ό μμ±νλ€.
μΏ ν€ μ΄λ¦μ JSESSIONID
μ΄κ³ , κ°μ μΆμ λΆκ°λ₯ν λλ€ κ°μ΄λ€.
Cookie: JSESSIONID=5B78E23B513F50164D6FDD8C97B0AD05
request.getSession(true)
μΈμ
μ΄ μμΌλ©΄ κΈ°μ‘΄ μΈμ
μ λ°ννλ€.
μΈμ
μ΄ μμΌλ©΄ μλ‘μ΄ μΈμ
μ μμ±ν΄μ λ°ννλ€.
request.getSession(false)
μΈμ
μ΄ μμΌλ©΄ κΈ°μ‘΄ μΈμ
μ λ°ννλ€.
μΈμ
μ΄ μμΌλ©΄ μλ‘μ΄ μΈμ
μ μμ±νμ§ μκ³ nullμ λ°ννλ€.
session.invalidate()
μΈμ
μ μ κ±°νλ€.
μ΄λ―Έ λ‘κ·ΈμΈλ μ¬μ©μλ₯Ό μ°Ύμ λλ λ€μκ³Ό κ°μ΄ μ¬μ©νλ©΄ λλ€. (μΈμ
μ μμ±νμ§ μλλ€.)
@SessionAttribute(name = "loginMember", required = false) Member loginMember
μ¬μ©μκ° μλ²μ μ΅κ·Ό μμ²ν μκ°μ κΈ°μ€μΌλ‘ 30λΆ μ λλ₯Ό μ μ§ν΄μ£Όλ©΄, μΈμ
μ μμ‘΄ μκ°μ΄ 30λΆμΌλ‘ κ³μ λμ΄λκ² λλ€. HttpSessionμ μ΄ λ°©μμ μ¬μ©νλ€.
μΈμ
μ μκ°μ λ무 κΈΈκ² μ€μ νλ©΄ λ©λͺ¨λ¦¬ μ¬μ©μ΄ κ³μ λμ λ μ μμΌλ―λ‘ μ λΉν μκ°μ μ ννλ κ²μ΄ μ€μνλ€. HttpSessionμ΄ μ 곡νλ νμμμμ, κΈ°λ³Έμ΄ 30λΆμ΄λΌλ κ²μ κΈ°μ€μΌλ‘ κ³ λ―Όνλ©΄ λλ€.
+) 22. 08. 04. 04:04 μΆκ° (444 μ κΈ°νλ€...)
κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ, λ°μ΄ν°λ₯Ό λ¨μν ν(table) ννλ‘ ννν λ°μ΄ν°λ² μ΄μ€λ€.
μ¬μ©μλ νμ λΆν , κ²°ν©μ μμ λ‘κ² ν μ μμΌλ©° μΆκ°, λ³κ²½λ λ€λ₯Έ μν₯μ λ°μ§ μκ² νν μ μλ€.
RDBλ λ°μ΄ν° λ
립μ±μ΄ λμΌλ©° κ²°ν©(join), μ μ½(restriction), ν¬μ(projection) λ± κ΄κ³ μ‘°μμ μν΄ νν λ₯λ ₯μ λΉμ½μ μΌλ‘ λμΌ μ μλ€.
- μ»΄ν¨ν°μΈν°λ·ITμ©μ΄λμ¬μ
κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ μΌλ°μ μΈ μλΉμ€μμ κ°μ₯ λ§μ΄ μ¬μ©λλ DB νμ
μ΄λ€.
νλ²μ΄λ μ΄λ¦, μ νλ²νΈ λ± μ ν΄μ§ μ 보 νμ
μ λ°λΌ μ λ³΄κ° μ
λ ₯λκ±°λ, κΈ°λ‘μ΄ μΆκ°λλ λ°©μμ΄κΈ° λλ¬Έμ 볡μ‘ν κ³μ° μμ΄ κ°κ°μ λ°μ΄ν°κ° μ΄λλ‘ λ€μ΄κ°μΌ ν μ§ λ―Έλ¦¬ μ ν΄μ Έ μλ κ²½μ°κ° λλΆλΆμ΄λ€.
λ°λΌμ μ
λ ₯λλ μ λ³΄κ° μ«μμΈμ§ ν
μ€νΈμΈμ§ 미리 μ ν΄ λ μ μμΌλ©°, μ΄λ‘ μΈν΄ ν¨μ¨μ μΈ DB μ€κ³κ° κ°λ₯ν κ²μ΄λ€.
RDBλ μλ§μ λ°μ΄ν° μ€μμ μνλ λ΄μ©μ μ°Ύκ³ μ λ ¬νκΈ°μ μ’λ€. 미리 μμλλ λ°μ΄ν°μ νλ¦μ λ§κ² μ€κ³ν΄λκΈ° λλ¬Έμ μμ μ±λ λλ€.
RDB μλΉμ€ μ’ λ₯(SQL)
RDB νΉμ§
λͺ νν λ°μ΄ν° ꡬ쑰λ₯Ό 보μ₯νλ€. β μ ν΄μ§ ꡬ쑰μ λ§λ λ°μ΄ν°λ§ μΆκ° κ°λ₯νλ€.
νλμ ν μ΄λΈμμ μ€λ³΅ μμ΄ νλμ λ°μ΄ν°λ§ κ΄λ¦¬νλ€.
ν μ΄λΈ κ° κ΄κ³λ₯Ό λνλ΄κΈ° μν΄ μΈλν€(foreign key)λ₯Ό μ¬μ©νλ©°, μΈλν€λ₯Ό μ΄μ©ν ν μ΄λΈ κ° joinμ΄ κ°λ₯νλ€.
νλ²(Primary Key) | μ΄λ¦ | μ νλ²νΈ |
---|---|---|
202212345 | μ₯λ―Έ | 010-XXXX-XXXX |
202212346 | μ°¨μμ° | 010-YYYY-YYYY |
λ±λ‘κΈ λ©λΆ λ²νΈ(Primary Key) | νλ²(Foreign Key) | λ±λ‘κΈ |
---|---|---|
2022080412345 | 202212345 | 5,000,000 |
2022080412346 | 202212346 | 3,000,000 |
ν μ΄λΈ κ° κ΄κ³λ₯Ό λ§Ίκ³ μμ΄ μμ€ν μ΄ μ»€μ§ κ²½μ° λ³΅μ‘ν 쿼리(λ§μ joinλ¬Έ)κ° λ§λ€μ΄μ§ μ μλ€.
μ±λ₯ ν₯μμ μν΄ Scale-upμ νλ€. β λΉμ©μ΄ λ§μ΄ λ λ€.
μ€ν€λ§ λ³κ²½μ΄ μ μ°νμ§ μλ€.
NoSQLμ΄λ, λΉ
λ°μ΄ν° μ²λ¦¬λ₯Ό μν λΉκ΄κ³ν λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ μμ€ν
μ΄λ€.
RDBMSμλ λ€λ₯΄κ² λΉκ΄κ³ν(non-relational) DBMSλ‘, λκ·λͺ¨μ λ°μ΄ν°λ₯Ό μ μ°νκ² μ²λ¦¬ν μ μλ κ²μ΄ κ°μ μ΄λ€.
ν
μ΄λΈ-컬λΌκ³Ό κ°μ μ€ν€λ§ μμ΄ λΆμ° νκ²½μμ λ¨μ κ²μ λ° μΆκ° μμ
μ μν ν€ κ°μ μ΅μ ννκ³ , μ§μ°(latency)κ³Ό μ²λ¦¬μ¨(throughput)μ΄ μ°μνλ€.
κΈ°μ μ΄ λ°λ¬ν μλ‘ λ°μ΄ν°λ μ μ μ»€μ Έκ°κ³ , λΉμ ν λ°μ΄ν°μ μκ° νλ°μ μΌλ‘μ¦κ°νλ€. RDBλ‘λ μ΄λ¬ν λ°μ΄ν°λ€μ μ μ₯ λ° κ΄λ¦¬νκΈ°κ° νλ€μκΈ° λλ¬Έμ NoSQLμ΄ λ±μ₯νλ€.
NoSQLμ λΉκ΄κ³ν λ°μ΄ν° μ€ν λ¦¬μ§ μμ€ν , λΉμ ν λ°μ΄ν°λ² μ΄μ€λ€μ ν΅μΉνλ€. κ³ μ λ ν μ΄λΈ μ€ν€λ§μ join κ°λ μ μ¬μ©νμ§ μλλ‘ λͺ¨λΈλ§ νκΈ° λλ¬Έμ ACID μμ±μ΄ μ μ°νκ² μ μ©λλ€.
NoSQL μ’ λ₯
Key-Value
λ°μ΄ν°κ° Key-Value μμΌλ‘ μ μ₯λλ€. ν€λ κ°μ μ κ·ΌνκΈ° μν μ©λλ‘ μ¬μ©λλ©°, κ°μ μ΄λ ν ννμ λ°μ΄ν°λΌλ λ΄μ μ μλ€.
κ°λ¨ν APIλ₯Ό μ 곡νλ λ§νΌ μ§μμ μλκ° λ§€μ° λΉ λ₯Έ νΈμ΄λ€.
Document
Keyμ Document ννλ‘ μ μ₯λλ€. Valueκ° κ³μΈ΅μ μΈ ννμ Documentλ‘ μ μ₯λκΈ° λλ¬Έμ νλμ κ°μ²΄λ₯Ό μ¬λ¬ κ°μ ν
μ΄λΈμ λλ μ μ₯ν νμκ° μλ€.
κ°μ²΄λ₯Ό Document ννλ‘ μ μ₯ κ°λ₯νκΈ° λλ¬Έμ κ°μ²΄-κ΄κ³ 맀νμ΄ νμ μλ€.
κ²μμ μ΅μ νλμ΄ μμΌλ©° μ§μμ κ²°κ³Όκ° μ£Όλ‘ JSON, XML ννλ‘ μΆλ ₯λλ€.
Wide Column
Column-family Model κΈ°λ°μ λ°μ΄ν°λ² μ΄μ€μ΄λ©°, Keyμμ νλλ₯Ό κ²°μ νλ€. ν€λ Row(ν€ κ°)μ Column-family, Column-nameμ κ°μ§λ€.
μ°κ΄λ λ°μ΄ν°λ€μ κ°μ Column-family μμ μν΄ μμΌλ©° κ°μμ Column-nameμ κ°μ§λ€.
μ΄λ κ² μ μ₯λ λ°μ΄ν°λ νλμ 컀λ€λ ν
μ΄λΈλ‘ ννμ΄ κ°λ₯νλ€.
Graph
Node, Edge, Propertyμ ν¨κ» κ·Έλν ꡬ쑰λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό νννκ³ μ μ₯νλ€. λ°μ΄ν° κ°μ κ΄κ³κ° νμμ ν€μΌ κ²½μ°μ μ ν©νλ€. (νμ΄μ€λΆμ΄λ μΈμ€νκ·Έλ¨ κ°μ Applicationμ μ ν©νλ€.)
NoSQL νΉμ§
μ€ν€λ§κ° μκΈ° λλ¬Έμ μ μ°νλ©°, μμ λ‘μ΄ λ°μ΄ν° ꡬ쑰λ₯Ό κ°λλ€.
λ°μ΄ν° λΆμ°μ΄ μ©μ΄νλ©° Scale-outμ΄ κ°λ₯νλ€.
Cloud Computingμ μ ν©νλ€.
λ°μ΄ν° μ€λ³΅μ΄ λ°μν μ μμΌλ©°, μ€λ³΅λ λ°μ΄ν°κ° λ³κ²½λ κ²½μ° λͺ¨λ 컬λ μ μμ μμ μ ν΄μΌ νλ€.
μ€ν€λ§κ° μκΈ° λλ¬Έμ λ°μ΄ν° ꡬ쑰 κ²°μ μ΄ μ΄λ €μΈ μ μλ€.
κ΅¬λΆ | RDB | NoSQL |
---|---|---|
μ₯λ¨μ | λ°μ΄ν° 무결μ±, μ ν©μ±μ 보μ₯νμ§ μμ | λ°μ΄ν° λ¬΄κ²°μ± λ³΄μ₯ |
λΉμ ν, λ°μ ν λ°μ΄ν° μ²λ¦¬ | μ ννλ λ°μ΄ν° μ²λ¦¬ | |
νμ₯μ± λ¬Έμ κ° μμΌλ©° λΆμ° νκ²½μ λΆμ ν©ν¨ | ||
νΉμ§ | μ½ν Consistency | JOIN |
Schemeκ° μμ΄ λ³κ²½μ΄ μ©μ΄ν¨ | ACID | |
Use Case | λλ λ°μ΄ν° μ²λ¦¬ μ | μ€μν νΈλμμ μ²λ¦¬(κΈμ΅)κ° μꡬλλ κ²½μ° |
λΉ λ₯Έ μ±λ₯ μꡬ μ(μ€μκ° μ€νΈλ¦¬λ° λ±) |
μ°Έκ³ μλ£
βκ΄κ³ν λ°μ΄ν°λ² μ΄μ€(RDB)λ 무μμΈκ°μ?β. μμ¦IT. 2021λ 05μ 10μΌ μμ , 2022λ 08μ 04μΌ μ μ, https://yozm.wishket.com/magazine/detail/675/
β[Database] RDBMSμ NoSQLμ μ°¨μ΄μ β. νμ§μ°μ μλ²μ¬μ΄λ κΈ°μ λΈλ‘κ·Έ. 2021λ 02μ 07μΌ μμ , 2022λ 08μ 04μΌ μ μ, https://khj93.tistory.com/entry/Database-RDBMS%EC%99%80-NOSQL-%EC%B0%A8%EC%9D%B4%EC%A0%90
βSQLκ³Ό NOSQLμ μ°¨μ΄β. Tech Interview. 2022λ 06μ 09μΌ μμ . 2022λ 08μ 04μΌ μ μ, https://gyoogle.dev/blog/computer-science/data-base/SQL%20&%20NOSQL.html
βNoSQLκ°μ) NoSQL κ°μ λ° κΈ°λ³Έμ΄λ‘ β. λ°λΈμμ. 2019λ 07μ 22μΌ μμ . 2022λ 08μ 04μΌ μ μ, https://blog.voidmainvoid.net/230
ν¨κ» 보면 μ’μ μλ£