1. λλ©μΈ ERD λ€μ΄μ΄κ·Έλ¨ 그리기 2. μλ° ν΄λμ€λ‘ λλ©μΈ νν ERD π€ Entity Relationship Diagram κ°μ²΄-κ΄κ³ λͺ¨λΈ ν
μ΄λΈκ°μ κ΄κ³λ₯Ό μ€λͺ
ν΄μ£Όλ λ€μ΄μ΄κ·Έλ¨μ΄λΌκ³ λ³Ό μ μμΌλ©°, μ΄λ₯Ό ν΅ν΄ νλ‘μ νΈμμ μ¬μ©λλ DBμ ꡬ쑰λ₯Ό ν λμ νμ
κ°λ₯ μ¦, APIλ₯Ό ν¨μ¨μ μΌλ‘ λ½μλ΄κΈ° μν λͺ¨λΈ ꡬ쑰λλΌκ³ μκ°νλ©΄ λ¨
μ€νλ§
API μ€κ³λ κ΅¬κΈ λ¬Έμλ₯Ό μ΄μ©ν΄ μμ± λ·°μ APIμ μ΄λ€ λ°©μμΌλ‘ url μ΄λ¦μ μ§μ ν κ²μΈμ§, method λ°©μμ μ΄λ»κ² ν κ²μΈμ§, ν΄λΉ urlμ μ€λͺ
κ³Ό ν¨κ» μμ± URLμ λ€λ₯Έ νμ
κ°λ°μκ° λ΄€μ λλ μ§κ΄μ μΌλ‘ μ΄λ€ νλͺ©μ κ΄λ ¨λ URLμΈμ§ νμ
ν μ μκ² μμ±νλ κ²μ΄ μ€μ πβοΈ ν©μλ₯Ό ν΅ν΄ μ§μ ν΄μΌν¨ μ¬κΈ°μλ κ²½λ‘μ HTTP λ©μλλ§ μμ±ν κ²μΈλ°, μ¬κΈ°μ APIμ specμ μμ± APIμ μ νν μ΄λ€ λ°μ΄ν°λ€μ μ£Όκ³ λ°λμ§λ₯Ό μκ°ν΄λ³Ό μ μμ
μ μ¦ μΌμ΄μ€ π€ μ μ¦μΌμ΄μ€λ μμ€ν
μ λμμ μ¬μ©μμ μ
μ₯μμ ννν μλ리μ€μ΄λ©°, μμ€ν
μ κ΄λ ¨ν μꡬμ¬νμ μμλ΄λ κ³Όμ μννΈμ¨μ΄ κ°λ° νλ‘μΈμ€ μ€ κ°λ°μ μν μννΈμ¨μ΄μ κΈ°λ₯μ κ°λ΅μ μΌλ‘ μ€λͺ
μ΄ κ°λ₯ν λ°©λ²μ΄κΈ°λ ν¨ μ μ¦μΌμ΄μ€λ μμ€ν
μ λΆμνλ μ¬λκ³Ό μ¬μ©ν μ¬λμ΄ ν¨κ» μμ€ν
μ μ¬μ© λ°©λ²μ κ²°μ νλλ°μ λμμ μ€ μ μ¦μΌμ΄μ€λ₯Ό μμ±ν λ μ£Όμν΄μΌ ν μ μ μμ€ν
μ κ°λ°νλ μ¬λ보λ€λ μ¬μ©μμ μ
μ₯μμ μ΄ν΄νκΈ° μν΄ μ½κ³ κ°λ¨νκ² μμ±λμ΄μΌ ν¨ https://www.diagrams.net μ¬μ©
νμν μΈλΆ κΈ°μ λͺ©λ‘μ λ½λ λ°©λ² π€ 미리 μ¬μ© κΈ°μ μ λͺ¨λ νμ
ν ν μ²μλΆν° νλ‘μ νΈμ λ£λ λ°©λ² κΈ°λ₯ νλλ₯Ό λ§λ€ λλ§λ€ νμν κΈ°μ μ μΆκ°ν΄ λκ°λ λ°©λ² → μ°λ¦¬κ° μ¬μ©ν λ°©λ² μμνλ μΈλΆ κΈ°λ₯λ€ κ²μν, λκΈ λλ©μΈμ μ€κ³ λλ©μΈ λ°μ΄ν°λ₯Ό DBμ μ μ₯ JSON API λ‘ λ°μ΄ν° μ 곡 μ¬μ©μμκ² μΉ νλ©΄μΌλ‘ μλΉμ€ μ 곡 + λμμΈ μμ κ²μν νμ΄μ§ κ²μκΈ νμ΄μ§ λ‘κ·ΈμΈ νμ΄μ§ μ μ ν μ
μΆλ ₯ λ°μ΄ν°μ κ²μ¦ μΈμ¦ κΈ°λ₯ μμ°μ±μ λμμ΄ λλ λκ΅¬λ€ μ ν μΈλΆ κΈ°λ₯μΌλ‘λΆν° μ νμ μμνλ κΈ°μ λ€ Java + Spring Boot κΈ°λ°μμ μ ν μΉ μλΉμ€ μ 곡 → Spring Web λλ©μΈμ μ€κ³μ DB μ μ₯ → Spring Data JPA, H2 Database, MySQL Driver JSON A..
κ°λ° νκ²½ κ°λ° λꡬ : Intellij IDEA Ultimate 2022.2.4 μμ€μ½λ κ΄λ¦¬ : Git Git νΈμ€ν
: GitHub Git GUI : GitKraken Clien Ver.9.0.0 νλ‘μ νΈ λͺ©ν λꡬλ μ΄ν΄νκΈ° μ¬μ΄ μμ¬λ‘ λͺ
νν κΈ°λ₯ μꡬμ¬νμ λ§λ λ€ μꡬμ¬νμ ꡬννλλ° λμμ΄ λλ κ°μ’
λ¬Έμ μμ
μ κ²½ννλ€ μλ° + μ€νλ§ λΆνΈλ‘ νλ‘μ νΈ μꡬμ¬νμ μ€μ λ‘ κ΅¬ννλ κΈ°μ μ μΈ λ°©λ²μ μ΅νλ€ μ΅μ λ²μ μ κΈ°μ μ μ¬μ©ν΄ 보면μ κΈ°μ λν₯μ νμ
νκ³ , μλ‘μ΄ λ¬Έμ μ ν΄κ²° λ°©λ²μ νμΈνλ€ κΈ°νκ³Ό λ¬Έμ μμ±λΆν° κ°λ°, νμκ΄λ¦¬, ν
μ€νΈ, λ°°ν¬κΉμ§ κ°λ° νλ‘μΈμ€ μ λ°μ κ²½ννλ€ λ¬Έμ μμ
- μν ν νμ
μ μ΄μ λ¬Έμλ₯Ό ν΅ν΄ κ°λ°ν νλ‘μ νΈμ λͺ©μ , λ΄μ©, μ§νμν©μ 곡μ μ νλμ§κ° νΉν ..
μν λ±λ‘ ν, insert into item μΏΌλ¦¬λ¬Έμ΄ μ€νλ¨ μ¬κΈ°μ item_idλ 1! μ΄ μν μμ΄λλ‘ μμ νμ΄μ§μ μ§μ
μν μ‘°ν μνμ μμ νλ €λ©΄ ν΄λΉ μνμ λΆλ¬μμΌ ν¨ λ°λΌμ, ItemServiceμ μν μ‘°ν λ©μλ μΆκ° (μ‘°ν κΈ°λ₯μ΄λΌ μ½κΈ° μ μ©) item μν°ν°μ image μ 보 μν°ν°λ₯Ό itemFormDto κ°μ²΄λ‘ λ³ν ν λ°ννλ μ‘°ν κΈ°λ₯ @Transactional(readOnly = true) public ItemFormDto getItemDtl(Long itemId) { List itemImageList = itemImageRepository.findByItemIdOrderByIdAsc(itemId); List itemImageDtos = new ArrayList(); for..
Auditing μν°ν°μ κ³΅ν΅ λ©€λ² λ³μλ€μ μΆμ ν΄λμ€λ‘ λ§λ€κ³ , ν΄λΉ μΆμ ν΄λμ€λ₯Ό μμλ°μ μν°ν°μ 곡ν΅μ μΈ κΈ°λ₯μ μννλλ‘ νλ©° μν°ν°μ μμ±κ³Ό μμ μ κ°μνλ κΈ°λ² AuditorAware μΈν°νμ΄μ€ νμ¬ λ‘κ·ΈμΈν μ¬μ©μμ μ 보λ₯Ό λ±λ‘μμ μμ μλ‘ μ§μ νκΈ° μν΄μ AuditorAware μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€ μμ± public class AuditorAwareImpl implements AuditorAware { @Override public Optional getCurrentAuditor() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); String userId = ""; if..
μ¦μ λ‘λ© → μν°ν°λ₯Ό μ‘°νν λ μ°κ΄λ μν°ν°λ₯Ό ν¨κ» μ‘°ν μ¦μ λ‘λ© ν
μ€νΈ @SpringBootTest @TestPropertySource(locations = "classpath:application-test.properties") @Transactional class OrderTest { /* μ½λ μλ΅ */ @Autowired OrderItemRepository orderItemRepository; @Test void μ¦μ_λ‘λ©_ν
μ€νΈ() { Order order = this.createOrder(); Long orderItemId = order.getOrderItems().get(0).getId(); entityManager.flush(); entityManager.clear(); OrderI..