์๊ธฐ ์๊ฐ
์ง์์ ๋น๋ฅ๋๋ค ๊ฐ๋ฐ์ ํฅ๋ฏธ๋ฅผ ๋๊ปด ๊ฐ๋ฐ ๊ณต๋ถ๋ฅผ ์์ํ์๊ณ ํ์ฌ๋ ํ๊ต์์ ํ๋ซํผ ์๋ฒ ๊ฐ๋ฐ์ ๋ด๋นํ์ฌ ์งํํ๊ณ ์์ต๋๋ค.
์ ๊ฐ ๊ณต๋ถ๋ฅผ ํ๋ ๋ฐฉ๋ฒ๊ณผ ์ค๋ฌด์์ ์ ํ์ค ์ ์๋ ์ฌ๋ฌ๊ฐ์ง ๋ฌธ์ ์ ๋ค๊ณผ ํด๊ฒฐ์ฑ ์ ์ฌ๋ฌ๋ถ๋ค์๊ฒ ์ ๊ณตํ๊ณ ์ถ์ด ์ง์๊ณต์ ์ ํ๋์ ์ด์ด๋๊ฐ๊ณ ์์ต๋๋ค.
๊ฐ์๋ ์ค๋ก์ง ์ ๋ง์ ์ง์์ ํตํด ๋ง๋ค์ด์ง์ง ์์ต๋๋ค. ๋ชจ๋ ๊ฐ์๋ ํจ๊ปํ์๋ ๋ถ๋ค์ด ๊ณ์ญ๋๋ค.
์ ๋์ฝ ์คํํธ์ ์์ ๊ฐ๋ฐ๋ ํ๊ณ , DB๋ ๊ด๋ฆฌํ์๋ ๋ฅ๋ ฅ์
์ง์๊ณต์ ์ ๊ฒฝ๋ ฅ
[ๅ] ์๋๋ฐ์ค ๋ธ๋ก์ฒด์ธ ๊ฐ๋ฐ์
[ๅ] ๋ฅ์จ ์ํ์ฌ ๋ฐฑ์๋ ๊ฐ๋ฐ์
[็พ] ํ๊ต์์ ๊ณ ์ฌ๊ฐ๋ ์๋ฒ ๊ฐ๋ฐ์
์ธํฐ๋ทฐ ์ด๋ ฅ
Courses
Reviews
beakgwa
ยท
Building Production-Level Real-Time Chat Server: From Distributed Processing to Performance Optimization (Kotlin & Spring)Building Production-Level Real-Time Chat Server: From Distributed Processing to Performance Optimization (Kotlin & Spring)dhrdbs29802379
ยท
Building Production-Level Real-Time Chat Server: From Distributed Processing to Performance Optimization (Kotlin & Spring)Building Production-Level Real-Time Chat Server: From Distributed Processing to Performance Optimization (Kotlin & Spring)changbinlim9346
ยท
The Easiest and Most In-Depth MongoDB Complete Guide [ By. Non-CS Major & Kakao Developer ]The Easiest and Most In-Depth MongoDB Complete Guide [ By. Non-CS Major & Kakao Developer ]de
ยท
Workflow-Based Large-Scale Traffic Processing Techniques with Kakao Developers [ By. Non-CS Major & Kakao Developer ]Workflow-Based Large-Scale Traffic Processing Techniques with Kakao Developers [ By. Non-CS Major & Kakao Developer ]hoos983485067
ยท
Workflow-Based Large-Scale Traffic Processing Techniques with Kakao Developers [ By. Non-CS Major & Kakao Developer ]Workflow-Based Large-Scale Traffic Processing Techniques with Kakao Developers [ By. Non-CS Major & Kakao Developer ]
Posts
Q&A
jpa entity ์ง๋ฌธ
์๋ ํ์ธ์ HAHA๋ ํต์ฌ์ ์ ์ฐ๋ฅด๋ ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.์ฌ์ค ์ด ์ฃผ์ ๋ ์ ๋ ์๋๋ง ๊ฐ์ด ๊ฐ์๋ฅผ ๋ง๋์๋ ๋ถ๋ค ์ ์ฅ์์๋ ๊ฝค๋ ์ฃผ์ ๊ฐ ๋ง์ด ๊ฐ๋ฆฌ๋ ์ฃผ์ ์์ต๋๋ค.๊ฐ๋ฐ์ ํธ์์ฑ์ด ์ค์ํ๋, ์๋๋ฉด ๊ธฐ๋ณธ์ ์ธ ๊ท์น์ ๋ง์ถ๋๊ฒ์ด ์ค์ํ๋์ ๋ฌธ์ ๋ก ๋ ผ์๊ฑฐ๋ฆฌ๊ฐ ๋ง์๋ ์ฃผ์ ์ด๊ธฐ๋ ํฉ๋๋ค. ํ์ง๋ง ์ํฉ์ ๋ฐ๋ผ์ ์กฐ๊ธ ๋ฌ๋ผ ์ง ์ ์๋ ๋ถ๋ถ์ด ์กด์ฌ ํ ๊บผ ๊ฐ์์. data class ์ ์ธ์ ํ๋ก์ ์ง๋ฌธ๋ง์ต๋๋ค. ์ง์ฐ๋ก๋ฉ์ด๋ผ๋ ๊ฒ์ด ํ๋ก์๋ฅผ ํตํ๊ณ ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ํตํด ๊ตฌ๋์ด ๋๋ค๋ฉด, ์ ์ ๋์ํ์ง ์์ ์ ์์ฃ . ๊ทธ๋์ ์ผ๋ฐ์ ์ธ class๊ฐ ๊ถ์ฅ๋ฉ๋๋ค. ํ์ง๋ง ์ํฉ์ ๋ฐ๋ผ์ kotlin-allopen ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ค๋ฉด, @Entity๊ฐ ๋ถ์ ๊ฐ์ฒด๋ฅผ open ์ํ๋ก ๋ณ๊ฒฝํด์ฃผ๋ ๊ธฐ๋ฅ๋ ๋์ ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ฐ ํ๋ฌ๊ทธ์ธ๋ ๊ณ ๋ คํด ๋ณด์๋ฉด ์ข์ง ์์๊น ์ถ์ด์. ์ด ๋ถ๋ถ์์ ๋ง์ด ๊ฐ๋ฆฌ๋๊ฒ, ํ๋ก์ ํธ๋ฅผ data class๋ก๋ง ๊ตฌ์ฑํ๊ณ ์ถ์ดํ์๋ ๋ถ๋ค์ด ๋ง์ต๋๋ค. ์ ๋ ์ด๋์ ๋ ๊ณต๊ฐํ๋ ๋ถ๋ถ๋ ๋ง์์... class๋ data class๋๋ ๊ฝค๋ ๋ ผ์๊ฑฐ๋ฆฌ๊ฐ ์๋๊ฑฐ ๊ฐ์์. Data class ์ฌ์ฉ ์ equals & hashCode์ด ๋ถ๋ถ๋ ์ง๋ฌธํด ์ฃผ์ ๋ถ๋ถ์ด ๋ง์ฃ . ๊ธฐ๋ณธ์ ์ธ id๋ง์ ๋น๊ต ํ๋๊ฒ์ด ์ฑ๋ฅ๊ณผ ์์ ์ฑ ๋ฉด์์ ์ข์ต๋๋ค.์๋ํ๋ฉด Entity๊ฐ ์์๋์ง ์์ ์ํ(transient)์ผ ๋๋, ์ง์ฐ ๋ก๋ฉ๋ ํ๋๊ฐ ๋ก๋๋์ง ์์์ ๋ ์ ์ฒด ํ๋๋ก ๋น๊ตํ๋ฉด ์ค๋์ํ ์ ์๋ค๋ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.๊ทธ๋์ class๋ฅผ ์ฌ์ฉํ๋๊ฒ์ด ๋ ์ ๋ฆฌํ๊ธฐ๋ ํฉ๋๋ค๋ฉด.. data class๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ๋ํด์๋ ์ค๋ฒ๋ผ์ด๋ฉ ํ๋ ํํ์์ด ํ์ํฉ๋๋ค.์ ๋ ๊ทธ๋ฅ ์ด๋ฐ ๋ถ๋ถ๊น์ง๋ ๊ณ ๋ ค๋ฅผ ์ ์ํ๋ ์คํ์ผ์ด๋ผ์... ๊ทธ๋ฅ ์์ฑ์ ํ๊ธฐ๋ ํ์ต๋๋ค.data class User(@Id val id: Long, var name: String) { override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false other as User return id == other.id } override fun hashCode(): Int = id.hashCode() }๊ฐ๋จํ๊ฒ ์์ฑํด๋ณด์๋๋ฐ, ์ด๋ฐ ํํ์ด์ง ์์๊น ์ถ์ต๋๋ค. data class ๋ชฉ์ ์ฌ์ค ์ ๋ data class๋ผ๋ ํํ์ ์ฌ์ฉํ๋๊ฒ์ ์ข์ํด์ ํด๋น ํํ๋ก ๋ชจ๋ ๊ตฌํํ ๋ถ๋ถ์ด๊ธฐ๋ ํฉ๋๋ค. ๋น์ฐํ๊ฒ๋ ์ ์์ ์ธ ์ฝ์ด ๋ ๋ฒจ๋ก ๊ตฌํ์ ํ๋ค๋ฉด, class๊ฐ ์ข ๋ entity์ ์ด์ธ๋ฆฌ๋๊ฒ์ ์ฌ์ค์ด๊ธฐ๋ ํ๊ณ ์. ํ์ง๋ง kotlin์ ๋ฌธ๋ฒ์ ์ต๋ํ ์๋ ค๋๋ฆฌ๊ณ ์ถ์ด์ data class๋ก ๋ชจ๋ ์ฌ์ฉ์ ํ์๊ณ , ์ผ๋ฐ์ ์ผ๋ก๋ response์๋ง ๋ง์ด ์ฌ์ฉํ๊ฑฐ๋, ์ค๊ฐ DTO ๋ชจ๋ธ ์ ๋์๋ง ๋ง์ด ์ฌ์ฉ๋๋๊ฒ์ด data class์ ์ฌ์ฉ์ฒ์ด์ฃ ํ์ง๋ง ์ผ๋ถ Entity์๋ ์ฌ์ฉ ํ ์ ์์ด์. ๋๊ตฐ๊ฐ์๊ฒ๋ ๊ทธ๋ ๊ฒ ๊ถ์ฅํ์ง ์๋ ํํ๋ผ๊ณ ๋ ํ ์ ์๊ฒ ์ง๋ง, ์ ๋ ๊ทธ๋ ๊ฒ ๊ท๊ฒฉ์ ์ฝ๋ฉ์ด๋ ๊ฒ์ ์ซ์ดํด์... ์๋ฅผ๋ค๋ฉด val๋์ var๋ก ๊ตฌ์ฑ ํจ์ผ๋ก์จ ๋ด๋ถ ๋ณ์๋ฅผ ์์ ๊ฐ๋ฅํ ํํ๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ด์ฃ . equlas ์ง๋ฌธ๋ง์ํด ์ฃผ์ ๋ถ๋ถ์ด ๋ง์ฃ . ์๋ฅผ๋ค์ด ์ด๋ฐ ํํ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณผ๊ฒ์.class Team( val members: List ) class Member( val team: Team )๊ทธ๋ฌ๋ฉด ์๋ ์์ฑ๋ ํจ์๋ค์ ๋ํด์๋ ์๋ฐฉํฅ ์ฐธ์กฐ๊ฐ ๋ฐ์ ๊ฐ๋ฅํฉ๋๋ค.๊ทธ๋์ ์ด๋ฐ ํํ์์๋ ID๋ง์ ํตํด ๊ฒ์ฆ์ ํ๋๊ฐ, ToString.Exclude, @EqualsAndHashCode.Exclude ์ด๋ผ๋ ํํ๋ ์ฌ์ฉํ๊ธฐ๋ ํฉ๋๋ค. ์ด ๋ถ๋ถ๋ ์์๊ฐ์๋ฉด ์ข์๋ฐ, ์ด๋ ๊ฒ ์ฒ๋ฆฌํ๋๊ฒ์ ์ฌ์ค ๋๋นต?? ํ๋ค๋ ๋๋์ ๊ฐ๊น์์ ๊ธฐ๋ณธ์ ์ผ๋ก๋ ๊ตฌํ์ฒด ํจ์๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ๋๊ฒ์ด ํธํ์ค ๊ฒ๋๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก ๋ง์๋๋ฆฌ์๋ฉด, ์ ์ฒด์ ์ผ๋ก class๊ฐ Entity์ ๋ ๋ง์ง ์๋?? ๋ผ๋ ์๊ฐ์ ๋ง์ต๋๋ค. ํ๋ฆฐ ์๊ฐ์ ์๋์์. ๊ฐ์ธ์ ์ผ๋ก data class๊ฐ ๋ ํธํ๋ค๊ณ ์๊ฐํ์ฌ ๊ตฌ์ฑ์ ํ์๊ณ , JPA์ ํธํ์ฑ์ ์ํด์๋ ํ๋ฌ๊ทธ์ธ์ด๋ ์ถ๊ฐ์ ์ธ ์ค๋ฒ๋ผ์ด๋ฉ์ด ํ์ํ์ฃ . ๊ทธ๋์ ๋ง์ฝ ๋ถ๋ณ์ ๊ฐ์กฐํ๊ฑฐ๋ ๊ฐ๋จํ ํ๋ก์ ํธ ์ด ๊ฐ์์ ๊ฐ์ด ๊ฐ๋จํ ํํ๋ผ๋ฉด, data class๊ฐ ๊ตฌํํ๊ธฐ์๋ ๋ ํธํ์ค ๊ฒ๋๋ค. ํ์ง๋ง ๋ญ๊ฐ ๋ณต์กํ ๊ด๊ณ๊ฐ ์ฃผ์ด์ง๋ ํ๋ก์ ํธ๋ผ๋ฉด ์ผ๋ฐ์ ์ธ class๋ฅผ ์ถ์ฒ ๋๋ฆฌ๊ณ ์ถ์ด์. ์ด๋ฐ ๋ด์ฉ๋ ๊ฐ์์ ๋ น์ ๋๋ ธ์ด์ผ ํ๋๋ฐ, ๋๋ฌด ์ ๊ฐ ์ ์คํ์ผ๋ก๋ง ์๋ ค๋๋ฆฌ๊ณ ์์ฑํ๊ฑฐ ๊ฐ์์ ๋๋ฌด ๋ถ๋๋ฌ์์ง๋ ์ฃผ์ ์๋๊ฑฐ ๊ฐ์ต๋๋ค. ์ด๋ ๊ฒ ์ ์ฑ์ค๋ฝ๊ฒ ์ง๋ฌธ ์ฃผ์ ์ ๋๋ฌด ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
- 0
- 1
- 19
Q&A
SSD๊ฐ ๋ฉ๋ชจ๋ฆฌ์ธ๊ฐ์?
์๋ ํ์ธ์ ๋ํผ๋ ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.์๋ฐํ ๋งํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋๋ผ ์ ์ฅ ์ฅ์น์ด์ฃ . ์๋ฌด๋๋ ๋ฉ๋ชจ๋ฆฌ์ฒ๋ผ ๋น ๋ฅด๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ๋ค๋ ํํ์ด ์ข ํผ์ฉ์ด ๋๊ฑฐ ๊ฐ์ต๋๋ค. ๋์ ๋ค๋ฅธ ์ญํ ์ ์ํํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 14
Q&A
Circuit Breaker ์ง๋ฌธ
์๋ ํ์ธ์ HAHA๋ ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.๋ง์ํด์ฃผ์ ๊ฒ์ฒ๋ผ ํด๋น ํจํด์ ๋จ์ผ ์ธ์คํด์ค์์๋ง ์ ํจํ ํจํด์ ๋๋ค. ํ์ง๋ง ์ ์ฒด ์ธ์คํด์ค ์ํฉ์ ๊ฐ์ ํ๋ค๋ฉด ์ค๊ฐ์ ์ด ๊ฐ์ ์ ์ฅํ๊ณ ๊ด๋ฆฌ ํ ์ฃผ์ฒด๋ฅผ ๋๋ฉด ์ข๊ฒ ์ฃ ๋ณดํต์ ๊ทธ๋์ ์ค์ํ๋ ์ ์ฅ์๋ก Redis๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฑ๊ธ ์ค๋ ๋์ด๊ธฐ๋ ํ๊ธฐ ๋๋ฌธ์ ๋ค์ค ์ธ์คํด์ค ์ํฉ์์ ์ค์ ๊ด๋ฆฌ ์ฃผ์ฒด๋ก ์ฌ์ฉํ๊ธฐ์ ์ฉ์ดํ ํํ๊ฐ ๋ ๊ฒ์ด๊ณ , ์๊ตฌ์ ์ผ๋ก ๋ณด๊ดํด์ผ ํ ๋ฐ์ดํฐ๋ ์๋๊ธฐ ๋๋ฌธ์ ์บ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด๋ ๋ฌด๋ฐฉํ๊ฒ ์ฃ . ์ด๋ ๊ฒ ๋ต๋ณ ๋๋ฆฌ๋ฉด ๋ ๊บผ ๊ฐ์์. ๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 15
Q&A
HikariCP maxLifetime ๊ฐ db ๋ถํ์ ์ฃผ๋ ์ํฅ
์๋ ํ์ธ์ ๋ถ๋ฆ๋ถ๋ฆ๋ ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.๊ฐ์ธ์ ์ธ ์๊ฐ์ผ๋ก๋ ์ฐ๊ด์ด ๋์ด ์์๊บผ๊ฐ์์. maxLifeTime์ด ๊ฒฐ๊ตญ ์ปค๋ฅ์ ์ด ํ์์ ์ด์ ์์ ์ ์๋ ์ต๋ ์๊ฐ์ ์๋ฏธํ๊ฒ ๋๋๋ฐ, ์ด ์๊ฐ์ด ์ง๋๊ฒ ๋๋ค๋ฉด, ์๋ก์ด ์ปค๋ฅ์ ์ ๋ง๋ค์ด์ ๊ต์ฒดํ๋ ์์ ์ด ์ผ์ด๋๊ฒ ๋ ๊ฒ๋๋ค. ํ์ฌ ์ํฉ์ ์์๋ก ๋ค์ด๋ณด์๋ฉด 30์ด๋ก ์ค์ ์ด ๋์ด ์๋ค๋, ํ ์์ ๋ชจ๋ ์ปค๋ฅ์ ์ด 30์ด๋ง๋ค ๊ต์ฒด๊ฐ ๋๋ ๊ฒ์ด์ฃ ๋ํ pod๋น 50๊ฐ์ฉ ๊ตฌ์ฑ์ด ๋์ด ์์ผ๋ ์ด ์ปค๋ฅ์ ์ 250๊ฐ๊ฐ ๋๊ฒ ๋ค์. ์ด ์ํฉ์์ 250๊ฐ์ ์ปค๋ฅ์ ์ด 30์ด ์ฃผ๊ธฐ๋ง๋ค ๋๋์ผ๋ก ํ๊ธฐ ๋๊ธฐ ๋๋ฌธ์ ์์ ๋ ์ปค๋ฅ์ ํ์ด๋ผ๊ธฐ๋ณด๋ค๋ ์ผ์ข ์ ํฉํ ๋ฆฌ๊ฐ์ ๊ฐ์ ์ํ๊ฐ ๋๋๊ฒ ์๋๊น ์ถ์ต๋๋ค. ์ปค๋ฅ์ ์ ์ฌ์ฐ๊ฒฐํ๋ ๊ณผ์ ๋ ๊ฒฐ๊ตญ DB์ ๋ํ ์์ฒญ์ด๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ด ์ฃผ๊ธฐ์ ๋ํด์ ์ ์ ์ปค๋ฅ์ ๋ถ์กฑ ์ํ๊ฐ ๊ฐ๋ฅํ ๊บผ ๊ฐ์์ ๊ฒฐ๊ตญ ํ์ ๋ํ ๊ณ ๊ฐ๊ณผ ๊ฐ์ ํ์์ด ๋ฐ์ํ ๊บผ ๊ฐ๋ค๋ ์๊ฐ์ด ๋๋ค์.๋ฌผ๋ก ์ํฉ๋ง๋ค ์ผ๋ถ ๋ค๋ฅธ ๋ถ๋ถ์ ์๊ฒ ์ฃ ๊ทธ๋์ 30์ด๋ผ๋ ์ฃผ๊ธฐ๊ฐ pool ๊ณ ๊ฐ์ ์์ธ์ผ ๋ ๊ฐ๋ฅ์ฑ์ด ์ผ๋ถ ์์ง ์์๊น ์ถ์ต๋๋ค.
- 0
- 2
- 17
Q&A
์น์ 8. CAP ํด์ฆ ์ง๋ฌธ
์๋ ํ์ธ์ ๋ฉ์ ๊ต๋๋ฒ ๋ ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.๋จผ์ ์ง๋ฌธ์ ๋ํ ๋ต์ ๊ธฐ์ค์ CAP ์ด๋ก ์ด ๋ฌด์์ธ์ง ์๊ณ ์๋ค๋ ๊ฒ์ ๊ฐ์ ํด๋ณด๋๋ก ํ ๊ฒ์. ์ง๋ฌธ์ ๋ํ ์ด๋ค ๋ต์ ํ์ จ๋์ง๋ ๊ถ๊ธํ๋ค์ ใ ใ ์ฐ์ MOngoDB๋ ๋ ํ๋ฆฌ์นด๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค. ์ฆ ๋คํธ์ํฌ ๋ถํ ์ด ๋ฐ์ํ๋ค๋ฉด ๊ณผ๋ฐ์ ์ ์ฑ ์ ํตํด์ ์ฃผ์ ๋ ธ๋ ์ฆ Primary Node๋ฅผ ์ ํ๊ฒ ๋๋ ๊ฒ์ด์ฃ . ๊ทธ๋ฆฌ๊ณ ์ ์ ๋์ง ๋ชปํ ๋ ธ๋๋ค์ Write์ ์ฌ์ฉ์ด๋์ง ์๊ณ ํธ๋ํฝ์ ๋ถ์ฐํ๊ณ ์ ํ๋ READ์ฉ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ก ๊ตฌ์ฑ์ด ๋ ๊ฒ๋๋ค. ์๋๋ฉด ๋ณต์ ์ ๊ณ ๊ฐ์ฉ์ฑ์ ์ํ ๋ ธ๋๋ก์จ ์ ์ง๊ฐ ๋๊ฒ ์ฃ ๊ทธ๋ฆฌ๊ณ ์ด๋ ์ฝ๊ธฐ ์์ฒญ์ ์ค์ ์ ๋ฐ๋ผ์ ์ธ์ปจ๋๋ฆฌ๋ฅผ ํตํด์ ์ฝ์ ์๋ ์์๊ฒ๋๋ค. ๊ทธ๋์ ์ด๋ฌํ ๊ด์ ์์ ๋ณด์์ ๋, ์ ๋ ์ผ๊ด์ฑ ๋ณด์ฅ์ ์ํด์ ์ผ๋ถ ๊ฐ์ฉ์ฑ์ ํฌ์ํ๋ ๊ตฌ์กฐ๋ผ๋ ์๊ฐ์ด ๋๋ค์. ์๋ํ๋ฉด ์ฐ์ ์ ์ผ๋ก ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ณผ๋ฐ์์ ํฉ์๊ฐ ์๋ค๋ฉด ์ฐ๊ธฐ ์์ ์ ์งํํ์ง ์๊ธฐ ๋๋ฌธ์ด๊ณ ๋คํธ์ํฌ ๋ถํ ์ํฉ์์๋ ์์คํ ์ด ๋์ํ๋ค๋ ๋ด์ฑ์ ๊ฐ์ง๊ณ ์๋ฐ๊ณ ์๊ฐํด์.๋ํ ์์ ๊ทธ๋ฃน์ ์ํ ๋ ธ๋ ์ฆ Primary Node๊ฐ ์๋ ๋ ธ๋๋ค์ ์ฐ๊ธฐ๊ฐ ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฉ์ฑ์ ์ผ๋ถ ํฌ์ํ์ง ์๋๋ผ๋ ์๊ฐ์ด ๋ญ๋๋ค.๊ทธ๋์ ์ต์ข ์ ์ผ๋ก CP ์ฑํฅ์ ๊ฐ์ง DB๋ผ๊ณ ์๊ฐํฉ๋๋ค.
- 0
- 1
- 27
Q&A
๋ ๋์ค ํ์ฉ์ ๋ํด์ ์ง๋ฌธ๋๋ฆฝ๋๋ค!
์๋ ํ์ธ์ dt10002๋ ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.๊ฒฐ๋ก ์ ์ผ๋ก ๋ง์๋๋ฆฌ์๋ฉด ๊ฑฐ์ ์์ต๋๋ค. ์๋ง ํ๋ฒ๋ ์์น์ค ์๋ ์์ด์. ์๋ํ๋ฉด redis-cli๋ฅผ ๊ตณ์ด ์ฌ์ฉํ์ง ์์๋ ์ ๋ณด๋ฅผ ๋ณผ ์ ์๋ GUIํด๋ค์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.redisInsight ๋ฌผ๋ก redis-cli๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํด์ผํ๋ค๋ฉด, ์ฌ์ฉํ์๊ธฐ๋ ํ๊ฒ ์ง๋ง, ๊ฑฐ์ ๋ค ๋ฐ์ดํฐ๋ฅผ ํ์ธํ๊ฑฐ๋ ์ญ์ ํ๋ ๋ถ๋ถ์ด ๋ง๊ธฐ ๋๋ฌธ์ redis-cli๋ฅผ ์ง์ ์ ์ผ๋ก ํ์ฉํ์๋ ์ผ์ด์ค๋ ๊ฑฐ์ ์๋ค๊ณ ๋ด์ฃผ์๋ฉด ๋ฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค :)
- 0
- 2
- 15
Q&A
์๋ฐ 17๋ก ํ์ จ๋๋ฐ 21๋ก ํด๋ ๋๋์?
๋ฃ๋๋ฐ์๋ ํฐ ๋ฌด๋ฆฌ๊ฐ ์๊ณ ์ฌ์ฉํ์๋๋ฐ์ ์์ด์๋ ํฐ ์ฐจ์ด๊ฐ ์์๊บผ ๊ฐ๊ธฐ๋ ํฉ๋๋ค๋ง. ๋ฒ์ ์ ๋ฐ๋ฅธ ๋ง์ฝ ์ฐจ์ด๊ฐ ์ผ๋ถ ๋ฐ์ํ ์๋ ์์๊บผ ๊ฐ์ต๋๋ค. 17๋ฒ์ ๊ณผ 21๋ฒ์ ์ฌ์ด์ ์ฐจ์ด๋ฅผ ์ด ๊ณผ์ ์์ ๋ชจ๋ ํธ๋ค๋งํ๊ณ ๊ณ ๋ คํ๋ฉฐ ์ถ์ ํ๊ธฐ์๋ ๋ฌด๋ฆฌ๊ฐ ์์๊บผ ๊ฐ์์์.
- 0
- 1
- 23
Q&A
stomp websocket
https://inf.run/wGCREํด๋น ์ง๋ฌธ๊ณผ ๋์ผํ๊ธฐ ๋๋ฌธ์ ํด๋น ์ง๋ฌธ์ ์ฐธ๊ณ ๋ถํ๋๋ฆด๊ฒ์!!
- 0
- 1
- 27
Q&A
์น์์บฃ stomp
์๋ ํ์ธ์ ๊น์ฅ์ค๋ ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!!๋น์ทํ ์ง๋ฌธ์ ๋๊ฐํด์ฃผ์ ๊ฑฐ ๊ฐ์์ ๊ทธ๋ฅ ์ด ๊ธ์ ํ๋ฒ์ ์ค๋ช ๋๋ฆฌ๋๋ก ํ ๊ฒ์.https://inf.run/wHVus ์ ์ผ๋จ ๋๋ค ์ง๋ฌธ์ฃผ์ ๋ถ๋ถ์ ๋ํด์ ์ ๋ต์ ๋ด๋ฆฌ๊ธฐ๋ ๋๋ฌด ์ถ์์ ์ธ ์ง๋ฌธ์ด๋ผ๊ณ ์๊ฐ์ด ๋ญ๋๋ค. ํน์ ๋ค๋ฅด๊ฒ ์ฝ๋ฉ๋ง ํ๋ค๋๊ฒ์ด ๊ธฐ์ค์ด ์ด๋๊น์ง์ธ์ง, ChatWebSocketHandler๋ง ์์ ํ์ ๋ค๋๊ฒ ๋ญ์ง ์ด๊ฑฐ๋ ์ฌ์ค ๋๋ฌด ์ ๊ฐ ์ด๋ค ๊ธฐ์ค์ผ๋ก ํ๋จํ๊ณ ์ค๋ช ์ ๋๋ ค์ผ ํ๋์ง ํ๋จํ๊ธฐ์๋ ์ ๋งคํ๊ฑฐ ๊ฐ์์. ๊ทธ๋์ ๊ทธ๋ฅ ๋ฒ์ฉ์ ์ผ๋ก STOMP๋ฅผ ์ฌ์ฉ ํ์ ๋์ ์ฝ๋๋ฅผ ์ผ๋ถ ๋ณด์ฌ๋๋ฆฌ๋ฉด ์ข์ง ์์๊น๋ผ๋ ์๊ฐ์ ํ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ STOMP๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ์ด๋ฐ ์ฝ๋๋ฅผ ๊ตฌํํ์๋ฉด ๋ฉ๋๋ค.import org.springframework.context.annotation.Configuration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; import org.springframework.web.socket.config.annotation.StompEndpointRegistry; import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; @Configuration @EnableWebSocketMessageBroker public class WssConfig implements WebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry registry ){ registry.enableSimpleBroker("/sub"); registry.setApplicationDestinationPrefixes("/pub"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/ws-stomp").setAllowedOrigins("*"); } }์ํธํฌ์ธํธ์ prefix๋ฅผ ์ ์ฅํด์ค์ผ๋ก์จ Client์ ์ฐ๊ฒฐ ํ ์ ์๋ ํต๋ก๋ฅผ ์ง์ ํด ์ค๋๋ค. import org.springframework.messaging.handler.annotation.DestinationVariable; import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.handler.annotation.SendTo; import org.springframework.stereotype.Controller; import com.example.demo.domain.chat.model.Message; import com.example.demo.domain.chat.service.ChatService; import com.example.demo.domain.repository.ChatRepository; import com.example.demo.domain.repository.types.Chat; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import java.sql.Timestamp; @RequiredArgsConstructor @Controller @Slf4j public class WssControllerV1 { private final ChatService chatService; @MessageMapping("/chat/message/{from}") @SendTo("/sub/chat") public Message sendMessage( @DestinationVariable String from, Message msg ) { return msg; } }๊ทธํ ๊ทธ๋ฅ ์น์์ผ ํต์ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค. ๋ค์ด์ค๋ ์์ฒญ์ ๋ํด์ ์ด์ ์ด๋ค ๊ฒฝ๋ก๋ก ๋ ์ ์ก์ ํด์ค์ง์ ๋ํด์๋ ์ถ๊ฐ๋ก ๋งตํํด์ฃผ๋ฉด ๋๋ค๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค. ์ด ์ฝ๋๋ ์ด๋๊น์ง๋ ์์๋ผ๊ณ ๋ด์ฃผ์๋ฉด ๋ ๊บผ ๊ฐ์์. ๊ทธ๋์ ์ถ๊ฐ์ ์ธ ๋ฏธ๋ค์จ์ด๋ ๋ถ์์ ์ผ๋ก ๊ตฌํํ๊ณ ์ ํ๋ ๊ธฐ๋ฅ์ ์ฌ๊ธฐ์์ ์ด์ ๋ถ์ด๋ ํํ๋ผ๊ณ ๋ด์ฃผ์๋ฉด ๋ ๊บผ๊ฐ์ต๋๋ค. ์ง๋ฌธ์ฃผ์ ๊ฒ์ฒ๋ผ ๋น์ฐํ ๋ค๋ฅด๊ฒ ์์ฑ์ ํด์ฃผ์ ์ผํ๊ณ , ๊ธฐ๋ณธ์ ์ผ๋ก ํํ๊ฐ ์ผ๋ถ ๋ค๋ฆ ๋๋ค. ๊ฐ๋ ๋ ์ข ๋ค๋ฅธ ๋ถ๋ถ์ด ์์ด์ ๊ทธ ๋ถ๋ถ์ ์ฐธ๊ณ ํด์ฃผ์๋ฉด ์ข์๊บผ ๊ฐ์์. ๊ฐ์ฌํฉ๋๋ค :)
- 0
- 2
- 29
Q&A
์ด๋ฒคํธ ๊ธฐ๋ฐ ์ฃผ๋ฌธ ์ง๋ฌธ ์์ต๋๋ค.
์๋ ํ์ธ์ qheogus55๋ ์ง๋ฌธ ๋จ๊ฒจ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.์ด ๋ถ๋ถ์ ์ด๋ค ๊ธฐ๋ฅ์ EDA ์ํคํ ์ฒ๋ฅผ ๋์ ํด์ ์ฌ์ฉํ ์ง๋ฅผ ์ ํด์ผ ํ๋๊ฑฐ ๊ฐ์์. ๋ง์ํด์ฃผ์ ๋ถ๋ถ์ฒ๋ผ ์ฌ์ฉ์ ๊ฒฝํ ๊ด์ ์์๋ ๋น์ฐํ ๋๊ธฐ์์ด ๋ ์ง๊ด์ ์ ๋๋ค. ์คํจ์ธ์ง ์ฑ๊ณต์ธ์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ด์์. ํ์ง๋ง ์ํฉ์ ๋ฐ๋ผ์ ์ผ๋ถ ์ฒ๋ฆฌ๋ฅผ EDA ๊ธฐ๋ฐ์ ์ํคํ ์ฒ๋ก ๋บผ์๋ ์๊ฒ ์ฃ ์๋ฅผ๋ค์ด์ ์ฌ์ฉ์๊ฐ ์ฑ๊ณตํ๋ค๋ ํ์๋ฅผ ์ฟ ํฐ ๋ฐ๊ธ๊น์ง๋ง ์งํํ๊ณ , ์ฟ ํฐ ๋ฐ๊ธ์ ๋ํ ๋ฉ์ผ ์ ์ก๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ด๋ฒคํธํํด์ ์ฒ๋ฆฌํ๊ฑฐ๋ ์ด๋ฐ์์ผ๋ก ์๊ฐ์ด ์ค๋ ์์ ๋ ์ ์๋ ํ์์ ๋ํด์๋ ์ด๋ฒคํธํ ํ๋๊ฒ์ด ์ข์ต๋๋ค. EDA ๊ธฐ๋ฐ์ ์ํคํ ์ฒ์์ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ ๋ถ๋ถ์ด ๋ง์ํด์ฃผ์ ์ฌ๊ณ ์ ๊ด๋ จ๋ ์๋น์ค ์ ๋๋ค.๊ทธ๋์ ๊ฐ๋จํ๊ฒ ํด๊ฒฐ์ ํ์๋ฉด1. ์ฌ๊ณ ํ์ธ 2. ํ์ธ ํ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด, ์ด๋ฒคํธ๋ฅผ ์ ์ก (์ด๋ ํด์ผํ๋ ์์ ์ด ๋ง๊ฒ ์ฃ ) 3. ํน์ ์ด๋ฒคํธ ์์ ํ ์ฌ๊ณ ์ฒ๋ฆฌ 3.1 ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ๋ณต๊ตฌ ํธ๋์ญ์ ๋ฐํ 3.2 ์๋๋ฉด ์ฑ๊ณตํ๋ ์ด๋ฒคํธ๋ค์ ๋ํด์ ์ถ๊ฐ์ ์ผ๋ก ์์งํ์ฌ ์ ์ฒด์ ์ธ ์ด๊ด ์ฒ๋ฆฌ์ด๋ฐ์์ผ๋ก ํด๊ฒฐํ๋๊ฒ์ด ์ผ๋ฐ์ ์ธ ํจํด์ ๋๋ค.๊ทธ๋์ ์ด๋ฐ ๊ตฌํ์ ๋ํด์ Saga ํจํด๋ ๊ณ ๋ฏผํด ๋ณด์๋ฉด ์ข์๊บผ๊ฐ์์. ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ด ๋์์ผ๋ฉด ์ข๊ฒ ๋ค์. ํน์ ์ถ๊ฐ์ ์ธ ์ง๋ฌธ ์๋ค๋ฉด ๋จ๊ฒจ์ฃผ์ธ์!! ๊ฐ์ฌํฉ๋๋ค :)
- 0
- 2
- 35