Skip to content

πŸ–₯️ BE 기술 μŠ€νƒ

jinwoo22 edited this page Jul 11, 2024 · 5 revisions

개발 ν™˜κ²½

JAVA : 17

  • Web 개발 μ‹œ Spring ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•  μ˜ˆμ •μ΄λ‹€. Spring Boot 3.3.1은 Java 17 버전 이상뢀터 μ§€μ›ν•œλ‹€.
  • Java 17이 LTS(Long Term Support)둜 μž₯기지원이 μ œκ³΅λ˜μ–΄ μ„ νƒν–ˆλ‹€.
  • Java 21의 경우 μƒˆλ‘œ μ§€μ›ν•˜λŠ” μ—¬λŸ¬ κΈ°μˆ λ“€μ„(ex) Virtual Thread, Sequenced Collection λ“±) μΆ”κ°€λ‘œ ν•™μŠ΅ν•  ν•„μš”μ„±μ„ λŠλΌμ§€ λͺ»ν•΄ μ„ νƒν•˜μ§€ μ•Šμ•˜λ‹€.

Gradle

  • λΉŒλ“œ λ„κ΅¬λ‘œ gradleκ³Ό maven 쀑 κ³ λ―Όν•˜μ˜€λ‹€.
  • maven의 경우 XML을 μ‚¬μš©ν•˜μ—¬ λΉŒλ“œ 슀크립트λ₯Ό μ •μ˜ν•œλ‹€. XML 기반의 μ„€μ • νŒŒμΌμ€ ꡬ쑰가 λͺ…ν™•ν•˜μ§€λ§Œ, 동적인 μ„€μ •μ΄λ‚˜ μŠ€ν¬λ¦½νŒ…μ΄ ν•„μš”ν•œ 경우 λ‹€μ†Œ λΆˆνŽΈν•  수 μžˆλ‹€.
  • 반면 gradle은 DSL(도메인 νŠΉν™” μ–Έμ–΄)을 μ‚¬μš©ν•˜μ—¬ λΉŒλ“œ 슀크립트λ₯Ό μ •μ˜ν•œλ‹€. DSL을 μ‚¬μš©ν•˜μ—¬ μ½”λ“œμ™€ μœ μ‚¬ν•œ λ°©μ‹μœΌλ‘œ λΉŒλ“œ 슀크립트λ₯Ό μž‘μ„±ν•  수 있으며, 보닀 μœ μ—°ν•˜κ³  가독성이 λ†’λ‹€.
  • gradle이 maven에 λΉ„ν•΄ λΉŒλ“œ 속도가 λΉ λ₯΄λ‹€.

image

Spring Boot : 3.3.1

  • Spring Boot 2.x.x 버전은 더 이상 곡식 지원이 λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 3.x.x 버전 μ€‘μ—μ„œ μ„ νƒν–ˆλ‹€.
  • Snapshot 버전을 μ œμ™Έν•˜κ³ , ν˜„μž¬ κ°€μž₯ μ΅œμ‹ μ˜ μ•ˆμ • 버전은 3.3.1이기 λ•Œλ¬Έμ— μž₯기적인 ν”„λ‘œμ νŠΈ μ•ˆμ •μ„±μ„ μœ„ν•΄ ν•΄λ‹Ή μ΅œμ‹  버전을 μ„ νƒν–ˆλ‹€.

ORM : Spring Data Jpa

  • μ€‘λ³΅λ˜λŠ” μ½”λ“œ μž‘μ„±μ„ 쀄일 수 μžˆλ‹€. 기본적인 CRUD μž‘μ—…κ³Ό 같은 반볡적인 μ½”λ“œλ₯Ό μžλ™μœΌλ‘œ 생성해주기 λ•Œλ¬Έμ— κ°œλ°œμžλŠ” λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ κ΅¬μ„±ν•˜λŠ”λ° 더 집쀑할 수 μžˆλ‹€.
  • 객체 지ν–₯κ³Ό κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ κ°„μ˜ νŒ¨λŸ¬λ‹€μž„ 뢈일치λ₯Ό ν•΄μ†Œν•  수 μžˆλ‹€.

인프라

MySQL

  • 였랜 κΈ°κ°„ λ™μ•ˆ λ§Žμ€ κ°œλ°œμžλ“€μ— μ˜ν•΄ μ‚¬μš©λ˜κ³  κ²€μ¦λœ μ•ˆμ •μ μΈ λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ΄λ‹€.
  • λ‹€μ–‘ν•œ κΈ°λŠ₯κ³Ό μ„±λŠ₯ μ΅œμ ν™” μ˜΅μ…˜μ„ μ œκ³΅ν•˜μ—¬ λŒ€λΆ€λΆ„μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μš”κ΅¬μ‚¬ν•­μ„ μΆ©μ‘±μ‹œν‚¬ 수 μžˆλ‹€.
  • λ‹€λ₯Έ λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ΄ μ œκ³΅ν•˜λŠ” μž₯점이 MySQL의 κΈ°μ‘΄ μž₯점과 λΉ„κ΅ν–ˆμ„ λ•Œ 크게 μš°μ›”ν•˜λ‹€κ³  νŒλ‹¨ν•˜μ§€ μ•Šμ•„ νŒ€μ›λ“€μ˜ κ²½ν—˜μ΄ 더 λ§Žμ€ MySQL을 μ„ νƒν–ˆλ‹€.

H2

  • ν…ŒμŠ€νŠΈ ν™˜κ²½μ—μ„œ μ‚¬μš©ν•œλ‹€.
  • 인메λͺ¨λ¦¬(in-memory) λͺ¨λ“œλ₯Ό μ§€μ›ν•˜μ—¬, ν…ŒμŠ€νŠΈ 데이터λ₯Ό λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜κ³  λΉ λ₯΄κ²Œ μ ‘κ·Όν•  수 있게 ν•œλ‹€.
  • μ›Ή λΈŒλΌμš°μ € 기반의 DB μ½˜μ†”μ„ μ œκ³΅ν•œλ‹€. κ°œλ°œμžλ“€μ΄ μ†μ‰½κ²Œ λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘μ†ν•˜κ³  쿼리λ₯Ό μ‹€ν–‰ν•  수 있게 ν•œλ‹€. ν…ŒμŠ€νŠΈ 쀑 λ°œμƒν•˜λŠ” 문제λ₯Ό λΉ λ₯΄κ²Œ ν•΄κ²°ν•  수 μžˆλ‹€.

AWS CloudWatch

  • λͺ¨λ‹ˆν„°λ§μ„ ν•˜κΈ° μœ„ν•΄ μ„ νƒν•˜μ˜€λ‹€.
  • AWS λ¦¬μ†ŒμŠ€μ˜ μ„±λŠ₯ 데이터λ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ μˆ˜μ§‘ν•˜κ³  μ‹œκ°ν™”ν•  수 μžˆμ–΄, μ‹œμŠ€ν…œ μƒνƒœλ₯Ό ν•œλˆˆμ— νŒŒμ•…ν•˜κ³  문제 λ°œμƒ μ‹œ μ‹ μ†ν•˜κ²Œ λŒ€μ‘ν•  수 μžˆλ‹€.

Github Action

  • github action은 ν΄λΌμš°λ“œ ν™˜κ²½μ—μ„œ μ‹€ν–‰λ˜λ―€λ‘œ 좔가적인 μ„œλ²„ μ„€μ • 없이 νŒŒμ΄ν”„λΌμΈμ„ ꡬ성할 수 μžˆλ‹€.
  • μ›Œν¬ν”Œλ‘œμš°λ₯Ό YAML 파일둜 κ°„νŽΈν•˜κ²Œ μž‘μ„±ν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€.

λ¬Έμ„œν™”

Swagger UI

  • μ‚¬μš©μž μΉœν™”μ μΈ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜κ³  μ‹€μ œ API μš”μ²­μ„ 보낼 수 μžˆλ‹€λŠ” μž₯점이 μžˆμ–΄ ν”„λ‘ νŠΈμ—”λ“œ μΈ‘μ—μ„œ μ°Έκ³ ν•˜κΈ° μš©μ΄ν•˜λ‹€.
  • λ¬Έμ„œν™”λ₯Ό μœ„ν•œ λΆˆν•„μš”ν•œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•  ν•„μš”κ°€ μ—†λ‹€.
  • λ‹€λ₯Έ λ¬Έμ„œν™” 기술 λŒ€λΉ„ 쉽고 λΉ λ₯΄κ²Œ μž‘μ„±μ΄ κ°€λŠ₯ν•˜λ‹€.

둜그

Logback

  • Java λ‘œκΉ… logger, log4j, logback μ€‘μ—μ„œ logback을 μ„ νƒν•˜μ˜€λ‹€.
  • logger의 경우, 속도가 λŠλ¦¬λ‹€λŠ” 단점이 μžˆμ–΄ μ„ νƒν•˜μ§€ μ•Šμ•˜λ‹€.
  • μΈν„°νŽ˜μ΄μŠ€μΈ slf4jλ₯Ό κ΅¬ν˜„ν•œ log4jλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ μ˜μ‘΄μ„±μ„ μΆ”κ°€ν•΄μ•Ό ν•œλ‹€. λ˜ν•œ log4jλŠ” ν˜„μž¬ 개발이 μ€‘λ‹¨λ˜μ–΄ μ‚¬μš©ν•˜μ§€ μ•Šμ•˜λ‹€.

ν…ŒμŠ€νŠΈ

JUnit 5

  • κ°€μž₯ 기본적인 ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬μΈ JUnit을 μ„ νƒν•˜μ˜€λ‹€.
  • JUnit 4의 경우, ν™•μž₯성이 떨어지고 μ‚¬μš© κ°€λŠ₯ν•œ 문법이 ν•œμ •μ μ΄κΈ° λ•Œλ¬Έμ— JUnit 5λ₯Ό μ„ νƒν•˜μ˜€λ‹€.

RestAssured

  • E2E ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ μ‚¬μš©ν•œλ‹€.
  • ControllerTest, MockMvc λ“±μ˜ 방법이 μžˆμ§€λ§Œ 직접 μ„œλ²„μ— ν˜ΈμΆœμ„ 보내고 응닡을 λ°›λŠ” 일련의 과정을 ν…ŒμŠ€νŠΈν•˜κ³  μ‹Άμ–΄μ„œ μ„ νƒν–ˆλ‹€.
Clone this wiki locally