๐ hibernate ๋
django์์๋ ORM์ด django ์์ฒด์ ๋ด์ฅ๋์ด ์์๋ค. ํ์ง๋ง spring boot์์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ฐ๋ก ์ฌ์ฉํด์ผ ORM์ ์ฌ์ฉํ ์ ์๋๋ฐ ์ด ๊ธฐ๋ฅ์ ํฌํจํ๊ณ ์๋๊ฒ์ด hibernate์ด๋ค. ์๊ฐ ๋ญ ํ๋์ง ๋ค ์ฐพ์๋ดค๋ค.
- ์์ฝ
Hibernate๋ java์ฉ ORM ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๊ณ ๋ณผ ์ ์๋ค. ์ฆ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ ์์ฉํ๋ ํ๋ ์์ํฌ๋ผ๊ณ ๋ณผ ์ ์๋ ๊ฒ์ด๋ค. Java ํด๋์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋งคํํ๊ณ , Java data type์์ SQL data type์ผ๋ก ๋งคํํ ์ ์๊ฒ ๋์์ฃผ๋ ๋ ์์ด๋ค.django์์ ORM์ ์ฌ์ฉํ๋ฉฐ orm์ ๊ธฐ๋ณธ์ ์ด๊ณ ๋น์ฐํ ๋ด์ฅ๋์ด ์๋ ๊ฒ์ผ๋ก ์๊ฐํ์ง๋ง spring์ ๊ฐ์ข ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด์ ธ ์ฌ์ฉ๋๊ณ ์์ด ์ด๋ฐ ์์ฃผ ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ญ ํ๊ณ ์ด๋ค ๋ฒ์ ์ด ์๋์ง ์ ์์์ผ๋ ํ์๊ฐ ์๋ค.
๐ hibernate์ ์ญํ
- ORM(Object-Relational Mapping
Hibernate๋ java ํด๋์ค๋ฅผ DB Table์ ๋งคํํ๊ณ java ๋ฐ์ดํฐ ์ ํ์ SQL ๋ฐ์ดํฐ์ ๋งคํํ๋ค. ๊ทธ๋ฌ๋๊น ๊ฐ๋ฐ์๋ SQL ๋ฌธ์ ๊ตณ์ด ์์ฑํ์ง ์๊ณ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ์ ์ฌ์ฉํ์ฌ DB์ ์ ๊ทผํ๊ณ ์ํธ์์ฉ ํ ์ ์๋ ๊ฒ์ด๋ค.- ์๋ ํ ์ด๋ธ ์์ฑ
Hibernate๋ ์ ์ํ ์ฝ๋๋ก ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋์ผ๋ก ํ ์ด๋ธ์ ์์ฑํ ์ ์๋ค. ๋ด๊ฐ Point ์์ฑ๋๋ฌธ์ ๊ณ ์ํ๊ฑด ๋ค์์ ๋ค๋ฃฐ ์์ - ์บ์ฑ
Hibernate์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ ์บ์ฑ ์์คํ ์ด ์๋ค๊ณ ํ๋ค. ์บ์ฑ ์์คํ ์ผ๋ก ๋ ๊ฐ์ง๊ฐ ์๋ค๊ณ ํ๋๋ฐ ์ฒซ ๋ฒ์งธ๋ ์ธ์ ๊ฐ์ฒด์ ์ฐ๊ฒฐ ๋ ๋ฒ์งธ๋ ์ธ์ ํฉํ ๋ฆฌ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋๋ ์บ์๊ฐ ์๋ค๊ณ ํ๋ค. ์ด ๋ ๊ฐ์ง๋ ๋์ค์ ์ ์ฐพ์๋ณด๊ณ ํฌ์คํ ํ๊ฒ ๋ค.- ํธ๋์ญ์ ๊ด๋ฆฌ
Hibernate๋ JTA ๋ฐ JDBC๋ฅผ ํฌํจํ์ฌ ๊ด๋ฒ์ํ ํธ๋์ญ์ ๊ด๋ฆฌ API๋ฅผ ์ง์ํ๋ค.
๐ ์ํฉ
- spring boot์ model ๋ถ๋ถ์ ์๋์ ๊ฐ์ด ์์ฑ
import jakarta.persistence.*; import org.locationtech.jts.geom.Point; @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private String username; @Column(nullable = false, unique = true) private String nickname; @Column(nullable = false, unique = true) private String phoneNumber; @Column(nullable = false) private String birth; @Column(columnDefinition = "geometry(Point, 4326)", nullable = true) private Point user_location; }
์์น ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด ๋ณด๊ณ ์ถ์ด Point ์์ฑ์ ๊ฐ์ ธ์ user_location์ด๋ผ๋ ์ปฌ๋ผ์ ๋ง๋ค์๋ค.
ํด๋น ์์ฑ์ ์ฌ์ฉํ๊ธฐ์ํดimplementation 'org.locationtech.jts:jts-core:1.16.1'
์ dependency๋ฅผ ์ฌ์ฉํ๋ค.
๊ทธ๋ฆฌ๊ณ spring boot๋ฅผ ์คํํ๋๋ฐ ์์๊ฐ์ด PostgreSQL์ด geometry tpye์ ๋ชจ๋ฅด๊ฒ ๋ค๊ณ ์๋ฌ๊ฐ ๋์ค๋ฉด์ DB์ ์ฐ๊ฒฐ์ ๋์์ง๋ง ํ ์ด๋ธ์ด ๋ง๋ค์ด ์ง์ง ์๋ ํ์์ด ๋ฐ์.๋น์ฐํ๋ค ๋ด๊ฐ ์์ฑํ ์์ฑ์ด ์ฐ๊ฒฐ๋ DB์ ์์ผ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์ด๋ค.
ํด๋น ๋ฌธ์ ๋ฅผ ์ฐพ์๋ณด๋ postgresql์ postgis extension์ ์ถ๊ฐ๋ฅผ ์ํด์ค์ ์๊ธฐ๋ ๋ฌธ์ ๋ผ๊ณ ํ๋ค.
ํด๊ฒฐ ๋งํฌ
https://stackoverflow.com/questions/6850500/postgis-installation-type-geometry-does-not-exist์ฐ๊ฒฐ๋ DB์
CREATE EXTENSION postgis;
์ ๋ช ๋ น์ด๋ฅผ ์ณ์ extension์ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ ๊ฒ์ด๋ค.