[TIL_Carrotww] 117 - 23/06/02

์œ ํ˜•์„ยท2023๋…„ 6์›” 5์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
132/138
post-thumbnail

๐Ÿ“Carrotww์˜ ์ฝ”๋”ฉ ๊ธฐ๋ก์žฅ

๐Ÿงฒ spring boot hibernate

๐Ÿ” hibernate ๋ž€

django์—์„œ๋Š” ORM์ด django ์ž์ฒด์— ๋‚ด์žฅ๋˜์–ด ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ spring boot์—์„œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋”ฐ๋กœ ์‚ฌ์šฉํ•ด์•ผ ORM์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š”๊ฒƒ์ด hibernate์ด๋‹ค. ์–˜๊ฐ€ ๋ญ˜ ํ•˜๋Š”์ง€ ๋‹ค ์ฐพ์•„๋ดค๋‹ค.

  • ์š”์•ฝ
    Hibernate๋Š” java์šฉ ORM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. Java ํด๋ž˜์Šค์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์„ ๋งคํ•‘ํ•˜๊ณ , Java data type์—์„œ SQL data type์œผ๋กœ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋…€์„์ด๋‹ค.

django์—์„œ ORM์„ ์‚ฌ์šฉํ•˜๋ฉฐ orm์€ ๊ธฐ๋ณธ์ ์ด๊ณ  ๋‹น์—ฐํžˆ ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ–ˆ์ง€๋งŒ spring์€ ๊ฐ์ข… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋”ํ•ด์ ธ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์–ด ์ด๋Ÿฐ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ญ˜ ํ•˜๊ณ  ์–ด๋–ค ๋ฒ„์ „์ด ์žˆ๋Š”์ง€ ์ž˜ ์•„์•„์•ผ๋  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

๐Ÿ” hibernate์˜ ์—ญํ• 

  1. ORM(Object-Relational Mapping
    Hibernate๋Š” java ํด๋ž˜์Šค๋ฅผ DB Table์— ๋งคํ•‘ํ•˜๊ณ  java ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ SQL ๋ฐ์ดํ„ฐ์— ๋งคํ•‘ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๊ฐœ๋ฐœ์ž๋Š” SQL ๋ฌธ์„ ๊ตณ์ด ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜์—ฌ DB์— ์ ‘๊ทผํ•˜๊ณ  ์ƒํ˜ธ์ž‘์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
  2. ์ž๋™ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
    Hibernate๋Š” ์ •์˜ํ•œ ์ฝ”๋“œ๋กœ ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ž๋™์œผ๋กœ ํ…Œ์ด๋ธ”์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‚ด๊ฐ€ Point ์†์„ฑ๋•Œ๋ฌธ์— ๊ณ ์ƒํ•œ๊ฑด ๋‹ค์Œ์— ๋‹ค๋ฃฐ ์˜ˆ์ •
  3. ์บ์‹ฑ
    Hibernate์—๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์บ์‹ฑ ์‹œ์Šคํ…œ์ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์บ์‹ฑ ์‹œ์Šคํ…œ์œผ๋กœ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ ์ฒซ ๋ฒˆ์งธ๋Š” ์„ธ์…˜ ๊ฐœ์ฒด์™€ ์—ฐ๊ฒฐ ๋‘ ๋ฒˆ์งธ๋Š” ์„ธ์…˜ ํŒฉํ† ๋ฆฌ ๊ฐœ์ฒด์™€ ์—ฐ๊ฒฐ๋˜๋Š” ์บ์‹œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€๋Š” ๋‚˜์ค‘์— ์ž˜ ์ฐพ์•„๋ณด๊ณ  ํฌ์ŠคํŒ… ํ•˜๊ฒ ๋‹ค.
  4. ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ
    Hibernate๋Š” JTA ๋ฐ JDBC๋ฅผ ํฌํ•จํ•˜์—ฌ ๊ด‘๋ฒ”์œ„ํ•œ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ API๋ฅผ ์ง€์›ํ•œ๋‹ค.

๐Ÿงฒ PostGIS spring boot์™€ ์—ฐ๊ฒฐ

๐Ÿ” ์ƒํ™ฉ

  1. 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์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€