멋사 Backend Plus 6일차 🦁

μ‹ μž¬μ›Β·2023λ…„ 10μ›” 30일

데이터 베이슀

Mybatis λž€ ?

  • κ°„λ‹¨ν•˜κ²Œ λ§ν•˜μ—¬ μžλ°” κ°œλ°œμžλ“€μ΄ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‰½κ²Œ λ‹€λ₯Ό 수 있게 λ„μ™€μ£ΌλŠ” ORM λ°©μ‹μ˜ ν”„λ ˆμž„ μ›Œν¬ μž…λ‹ˆλ‹€.
  • μ—¬κΈ°μ„œ ORM λ°©μ‹μ΄λž€ (Object) (Relational) (Mapping)
    ➑ 객체와 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ λ§€ν•‘μ˜ μ€„μž„λ§μ΄λ©°, ORM을 μ΄μš©ν•˜λ©΄
    SQL의 Query(쿼리) κ°€ μ•„λ‹Œ μ½”λ“œ (λ©”μ†Œλ“œ)둜 데이터λ₯Ό μ‰½κ²Œ μ‘°μž‘ν• μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

EX : Mysql은 λŒ€ν‘œμ μΈ κ΄€κ³„ν˜•λ°μ΄ν„°λ² μ΄μŠ€(RDB) 이며
μ•„λž˜μ˜ 쿼리와 같이 μž‘μ„±ν•˜κ²Œ 되면 Board ν…Œμ΄λΈ”λ₯Ό μ‘°νšŒν• μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

SELECT * FROM Board;

ORM 을 μ‚¬μš©ν•˜κ²Œ 되면 Board ν…Œμ΄λΈ”κ³Ό λ§€ν•‘λœ 객체λ₯Ό board 라고 ν• λ•Œ, board.findAll(), board.findById() 와 같은 λ©”μ†Œλ“œλ‘œ ν˜ΈμΆœν•˜μ—¬ 쑰회 ν• μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

ORM λ°©μ‹μ˜ κ°„λ‹¨ν•œ μž₯단점

μž₯점: λ©”μ†Œλ“œλ₯Ό 톡해 데이터λ₯Ό μ‰½κ²Œ μ‘°μž‘ν• μˆ˜ μžˆμ–΄, κ°œλ°œμžκ°€ κ°œλ°œμ—λ§Œ μ§‘μ€‘ν• μˆ˜ μžˆλ‹€.

단점 : ν”„λ‘œμ νŠΈμ˜ λ³΅μž‘μ„±μ΄ 컀질경우 쿼리λ₯Ό μž‘μ„±ν• μ€„ μ•Œμ•„μ•Όν•œλ‹€. μ—¬κΈ°μ„œ λ³΅μž‘μ„± 이라함은, Join이 λ§Žμ€ ν…Œμ΄λΈ”μ˜ κ°―μˆ˜μ™€ ν…Œμ΄λΈ” κ°―μˆ˜κ°€ λ§Žμ„ 경우λ₯Ό λ§ν•©λ‹ˆλ‹€.

Mybatis μ‚¬μš©

Mybatisλ₯Ό μ‚¬μš©ν•˜κΈ° μ•žμ„œ λ°μ΄ν„°λ² μ΄μŠ€ 섀정을 ν•΄μ•Όν•©λ‹ˆλ‹€.
μ•„λž˜μ™€ 같이 μž‘μ„± ν• μˆ˜ 있으며, properties ν˜•μ‹μ€ 트리ꡬ쑰둜 μž‘μ„±ν•˜λ©΄ μ•ˆλ©λ‹ˆλ‹€.

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: ${DATASOURCE_URL}
    username: ${DATASOURCE_USERNAME}
    password: ${DATASOURCE_PASSWORD}

MybatisλŠ” .xml μ΄λΌλŠ” 파일과 컀λ„₯μ…˜μ„ 맺게 λ©λ‹ˆλ‹€.
➑ .xml νŒŒμΌμ„ 처음 κ²½ν—˜ν•΄λ΄μ„œ κ°•μ˜κ°€ λλ‚œλ’€μ— μ„œμΉ­μ„ 톡해 μ°Ύμ•„λ³΄μ•˜μ§€λ§Œ, λ°μ΄ν„°λ² μ΄μŠ€μ™€ 맀핑을 ν•˜κΈ°μœ„ν•œ μΌμ •ν•œ ν˜•μ‹μΈκ²ƒ κ°™λ‹€.
➑ μ΅œκ·Όμ—λŠ” μ–΄λ…Έν…Œμ΄μ…˜μ„ 톡해 맀핑을 ν•˜μ§€λ§Œ, .xml 파일 ν˜•μ‹μ΄ λ ˆκ±°μ‹œμ΄κΈ΄ ν•˜μ§€λ§Œ, ν˜„μž¬λ„ μ‚¬μš©ν•˜λŠ” νšŒμ‚¬κ°€ μžˆλ‹€.

DB 컀λ„₯μ…˜ ν’€ μ΄λž€?

DB 컀λ„₯μ…˜ 풀을 이해 ν•˜κΈ° μœ„ν•΄μ„œλŠ” "컀λ„₯μ…˜ λΉ„μš©" μ΄λΌλŠ” μš©μ–΄λ₯Ό μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€.

κ·Έλ ‡λ‹€λ©΄ 컀λ„₯μ…˜ λΉ„μš©μ΄λž€ 뭘까?
➑ WAS 와 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ—°κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ§Žμ€ λΉ„μš©μ΄ λ“ λ‹€κ³  ν•©λ‹ˆλ‹€.
INSERT 문을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ•„λž˜μ˜ κ΄„ν˜Έ μ•ˆμ— μžˆλŠ” λΉ„μœ¨μ˜ λΉ„μš©μ΄ λ“ λ‹€κ³  ν•©λ‹ˆλ‹€.

1.Connection (3)
2.Sending query to server(2)
3.Parsing query(2)
~~ λ“±

이와 같이 Connection λΉ„μš©μ΄ κ°€μž₯ 큰 것을 μ•Œμˆ˜ μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό λ³΄μ™„ν•˜λŠ” 방법이 "컀λ„₯μ…˜ ν’€" μ΄λΌλŠ” κ²ƒμž…λ‹ˆλ‹€.

컀λ„₯μ…˜ ν’€μ΄λž€ ? (pool = 수영μž₯) 이라고 μƒκ°ν•˜λ©΄ 쒋을것 κ°™μŠ΅λ‹ˆλ‹€.

λΆ€ν•˜λ₯Ό 쀄여주기 μœ„ν•΄ DB에 듀어가기전에 λŒ€κΈ°ν•˜λŠ” μž₯μ†Œ 이며, ν•„μš”ν• λ•Œ λ§ˆλ‹€ ν’€μ˜ 컀λ„₯μ…˜μ„ 톡해 λ°˜ν™˜ν•˜λŠ” 기법 μž…λ‹ˆλ‹€.
(미리 λ§Œλ“€μ–΄ 놓은 컀λ„₯μ…˜μ„ μ‚¬μš©)


μŠ€ν”„λ§ λΆ€νŠΈμ—μ„œλŠ” 컀λ„₯μ…˜ 풀을 κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ HikariCp λΌλŠ” ν”„λ ˆμž„ μ›Œν¬λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

➑ HikariCp λŠ” ν”νžˆ @Configuration μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•΄ μ„€μ • ν•œλ‹€κ³  ν•©λ‹ˆλ‹€.
➑ ν”„λ‘œμ νŠΈ λ“€μ–΄κ°€λ©΄ 적용 해봐야겠닀.

λ²ˆμ™Έ

ν”„λ‘œμ νŠΈλ₯Ό μ΄λ²ˆμ£Όλ‚΄μ— λ“€μ–΄κ°„λ‹€κ³  ν•˜μ‹ λ‹€. κ³„νšμœΌλ‘œλŠ” μˆ˜λ£Œλ•Œ κΉŒμ§€ 3개의 ν”„λ‘œμ νŠΈλ₯Ό ν•œλ‹€κ³  ν•˜μ‹¬, ν”„λ‘œμ νŠΈλ₯Ό λ§Žμ΄ν•΄μ„œ 포트폴리였λ₯Ό μŒ“λŠ”κ²ƒμ€ 쒋은것 κ°™λ‹€.

0개의 λŒ“κΈ€