[TIL - 1029] Jackson을 사용하면서, 쿼리플랜의 중요성, Spring AOP로 트랜잭션 처리할 때 조심해야할 것

feature 개발 진행하면서 알게된 것들

  • 책, 영상, 자료를 먼저 보고 파악한 내용이 아닌 실제 필요한 기능 개발을 하면서 알게된 것들 : 정말 소중한 경험을 하면서 얻게된 것들을 당분간 남길 것 같음
  • Jackson json 파싱 기준(예제)
    • 자바빈 규약을 지켜야함 : NoArgsConstructor, setter/getter
    • [] 일 경우 array로 할지, List로 할지는 마음대로 하면 됨
{
  "id": 123,
  "name": "Pankaj",
  "permanent": true,
  "address": {
    "street": "Albany Dr",
    "city": "San Jose",
    "zipcode": 95129
  },
  "phoneNumbers": [
    123456,
    987654
  ],
  "role": "Manager",
  "cities": [
    "Los Angeles",
    "New York"
  ],
  "properties": {
    "age": "29 years",
    "salary": "1000 USD"
  }
}

@Data

public class Employee {

    private Long id;
    private String name;
    private boolean permanent;
    private Address address;
    private long[] phoneNumbers;
    private String role;
    private List<String> cities;
    private Map<String, String> properties;
}
  • Jackson 데이터가 없을 경우
    • null이 아니라 size가 0
{
  "DoTest": [    
  
  ]
}

public class DoTest {

    private List<SubTest> subTests;
}
  • @Transactional 롤백 : RuntimeException에 대해서만 자동 rollback을 해주고, Unchecked Exception에 대해서는 설정해줘야함
  • 쿼리 플랜 : 쿼리를 기능되게끔 짰다고 해서 그만인 것이 아니라 쿼리는 어떻게 해라라고 짜주지 않기 때문에 대신 짜주는 옵티마이져가 어떤 계획을 가지는지 확인해야함
    • 풀스캔을 하고 있지 않은지, 잘못된 인덱스를 선택해서 검색하는 것은 아닌지 확인해야함
    • 참고자료 남겨뒀다가 시간날 때 봐야지
> EXPLAIN SELECT * FROM group WHERE xxx_id = 1;