medibird-caring-note-api-server-entity-class-conventions-rule.ocm.json json Copy{
"ocm": "1",
"id": "medibird-caring-note-api-server-entity-class-conventions-rule",
"kind": "skill",
"name": "entity-class-conventions",
"description": "description: globs: **/entity/*.java alwaysApply: false --- - ์ํฐํฐ ํด๋์ค์๋ @Entity ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. - ์์ ๊ณ์ธต ๊ตฌ์กฐ์๋ @MappedSuperclass ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํฉ๋๋ค. - Lombok์ @Data, @EqualsAndHashCode, @SuperBuilder, @NoArgsConstructor ์ด๋
ธํ
์ด์
์ ํ์ฉํฉ๋๋ค. - ID ํ๋๋ ULID๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋ฌธ์์ด ํ์
(String)์ผ๋ก ์ ์ธํฉ๋๋ค (IDENTITY ์ ๋ต ๋์ ). - @Id ์ด๋
ธํ
์ด์
์ ํ์์ด์ง๋ง @GeneratedValue๋ ์ฌ์ฉํ์ง ์์ต๋๋ค. - ์ฐ๊ด๊ด๊ณ์ fetch ์ ๋ต: - @ManyToOne, @OneToOne: ๊ธฐ๋ณธ๊ฐ์ด EAGER์ด๋ฏ๋ก ๋ช
์์ ์ผ๋ก FetchType.LAZY ์ค์ ํ์ - @OneToMany, @ManyToMany: ๊ธฐ๋ณธ๊ฐ์ด ์ด๋ฏธ LAZY์ด๋ฏ๋ก ๋ณ๋ ์ค์ ๋ถํ์ - @OneToOne ์๋ฐฉํฅ ๊ด๊ณ์ ๊ฒฝ์ฐ, ์ฐ๊ด๊ด๊ณ ์ฃผ์ธ์ด ์๋ ์ชฝ(mappedBy ์๋ ์ชฝ)์์๋ LAZY ๋ก๋ฉ์ด ์ ๋๋ก ๋์ํ์ง ์์ ์ ์์ผ๋ฏ๋ก ์ค๊ณ ์ ๊ณ ๋ ค ํ์ - ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ํน๋ณํ ์ด์ ๊ฐ ์๋ ํ ๋ชจ๋ ์ฐ๊ด๊ด๊ณ๋ ์ง์ฐ ๋ก๋ฉ(LAZY) ์ฌ์ฉ ๊ถ์ฅ - ์์ฑ ๋ฐ ์์ ์๊ฐ๊ณผ ์ฌ์ฉ์๋ฅผ ์ถ์ ํ๊ธฐ ์ํด BaseEntity๋ฅผ ์์๋ฐ์์ผ ํฉ๋๋ค. - ์ํฐํฐ ์์ฑ์ ์ ์ ํ ์ด๋
ธํ
์ด์
(์: @Size, @NotEmpty, @Email ๋ฑ)์ผ๋ก ์ฃผ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.",
"publisher": "MediBird",
"version": "1.0.0",
"capabilities": {
"domains": [
"coding"
],
"tags": [
"skill-md",
"github-cursor-rules"
],
"languages": [
"en"
]
},
"quality_prior": 0.6,
"examples": [
"description: globs: **/entity/*.java alwaysApply: false --- - ์ํฐํฐ ํด๋์ค์๋ @Entity ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. - ์์ ๊ณ์ธต ๊ตฌ์กฐ์๋ @MappedSuperclass ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํฉ๋๋ค. - Lombok์ @Data, @EqualsAndHashCode, @SuperBuilder, @NoArgsConstructor ์ด๋
ธํ
์ด์
์ ํ์ฉํฉ๋๋ค. - ID ํ๋๋ ULID๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋ฌธ์์ด ํ์
(String)์ผ๋ก ์ ์ธํฉ๋๋ค (IDENTITY ์ ๋ต ๋์ ). - @Id ์ด๋
ธํ
์ด์
์ ํ์์ด์ง๋ง @GeneratedValue๋ ์ฌ์ฉํ์ง ์์ต๋๋ค. - ์ฐ๊ด๊ด๊ณ์ fetch ์ ๋ต: - @ManyToOne, @OneToOne: ๊ธฐ๋ณธ๊ฐ์ด EAGER์ด๋ฏ๋ก ๋ช
์์ ์ผ๋ก FetchType.LAZY ์ค์ ํ์ - @OneToMany, @ManyToMany: ๊ธฐ๋ณธ๊ฐ์ด ์ด๋ฏธ LAZY์ด๋ฏ๋ก ๋ณ๋ ์ค์ ๋ถํ์ - @OneToOne ์๋ฐฉํฅ ๊ด๊ณ์ ๊ฒฝ์ฐ, ์ฐ๊ด๊ด๊ณ ์ฃผ์ธ์ด ์๋ ์ชฝ(mappedBy ์๋ ์ชฝ)์์๋ LAZY ๋ก๋ฉ์ด ์ ๋๋ก ๋์ํ์ง ์์ ์ ์์ผ๋ฏ๋ก ์ค๊ณ ์ ๊ณ ๋ ค ํ์ - ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ํน๋ณํ ์ด์ ๊ฐ ์๋ ํ ๋ชจ๋ ์ฐ๊ด๊ด๊ณ๋ ์ง์ฐ ๋ก๋ฉ(LAZY) ์ฌ์ฉ ๊ถ์ฅ - ์์ฑ ๋ฐ ์์ ์๊ฐ๊ณผ ์ฌ์ฉ์๋ฅผ ์ถ์ ํ๊ธฐ ์ํด BaseEntity๋ฅผ ์์๋ฐ์์ผ ํฉ๋๋ค. - ์ํฐํฐ ์์ฑ์ ์ ์ ํ ์ด๋
ธํ
์ด์
(์: @Size, @NotEmpty, @Email ๋ฑ)์ผ๋ก ์ฃผ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค."
],
"primary": false,
"metadata": {
"source": {
"provider": "github-cursor-rules",
"repository": "https://github.com/MediBird/caring-note-api-server",
"path": ".cursor/rules/entity-class-conventions.mdc",
"ref": "56e293e839e3a76ca38e5836a22c5401f44d36b1",
"url": "https://github.com/MediBird/caring-note-api-server/blob/56e293e839e3a76ca38e5836a22c5401f44d36b1/.cursor/rules/entity-class-conventions.mdc",
"key": "MediBird/caring-note-api-server/.cursor/rules/entity-class-conventions.mdc"
}
},
"instructions": "---\ndescription: \nglobs: **/entity/*.java\nalwaysApply: false\n---\n- ์ํฐํฐ ํด๋์ค์๋ @Entity ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.\n- ์์ ๊ณ์ธต ๊ตฌ์กฐ์๋ @MappedSuperclass ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํฉ๋๋ค.\n- Lombok์ @Data, @EqualsAndHashCode, @SuperBuilder, @NoArgsConstructor ์ด๋
ธํ
์ด์
์ ํ์ฉํฉ๋๋ค.\n- ID ํ๋๋ ULID๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋ฌธ์์ด ํ์
(String)์ผ๋ก ์ ์ธํฉ๋๋ค (IDENTITY ์ ๋ต ๋์ ).\n- @Id ์ด๋
ธํ
์ด์
์ ํ์์ด์ง๋ง @GeneratedValue๋ ์ฌ์ฉํ์ง ์์ต๋๋ค.\n- ์ฐ๊ด๊ด๊ณ์ fetch ์ ๋ต:\n - @ManyToOne, @OneToOne: ๊ธฐ๋ณธ๊ฐ์ด EAGER์ด๋ฏ๋ก ๋ช
์์ ์ผ๋ก FetchType.LAZY ์ค์ ํ์\n - @OneToMany, @ManyToMany: ๊ธฐ๋ณธ๊ฐ์ด ์ด๋ฏธ LAZY์ด๋ฏ๋ก ๋ณ๋ ์ค์ ๋ถํ์\n - @OneToOne ์๋ฐฉํฅ ๊ด๊ณ์ ๊ฒฝ์ฐ, ์ฐ๊ด๊ด๊ณ ์ฃผ์ธ์ด ์๋ ์ชฝ(mappedBy ์๋ ์ชฝ)์์๋ LAZY ๋ก๋ฉ์ด ์ ๋๋ก ๋์ํ์ง ์์ ์ ์์ผ๋ฏ๋ก ์ค๊ณ ์ ๊ณ ๋ ค ํ์\n - ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ํน๋ณํ ์ด์ ๊ฐ",
"cost": {
"context_tokens": 187
}
}