한 주간 배우면서 새로 알게된 개념이나 잘 못 알았던 개념을 서로 나누어 보아요.
- DB
- UUID 없이 이메일과 같은 값으로 pk를 줄 수 있다
- 찾을게 많아지면 db의 인덱싱 기능을 활용할 수 있다.
- ex) custeomr type 같은 것은 보통 안걸려 있으니 주의해서 사용하자
- 로깅
- 로깅할때 민감한 정보는 빼는게 좋다
- 삭제는 중요한 정보기 때문에 로깅을 남기는게 좋다
- 사실 삭제하진 않고 보통 상태값을 하나 만들어서 체크해놓는다
- 아키텍처
- 서비스간에 서로 협력한다
- 서비스에서 서비스를 호출하는 형식으로 많이 만들어진다
- 다른 도메인의 레포 주입받아서 쓰지말고 서비스를 주입받자
- 레포지토리에서
- 조회용 Transaction에는
Transactional(readOnly = true)
해주는 것이 좋다 - master-slave 구조에서 slave에서 조회를 처리하고, 쓰기작업은 master가 담당한다
- 테스트
- 모킹을 사용하면 편하다는걸 느낄 수 있다.
유닛테스트
는 보통 Mocking해서 많이 쓰고통합테스트
는 무에서부터 API 호출로만 전체적으로 테스트 해준다@SpringBootTest
- Application Context도 같이 올라가기 때문에 무거워짐
- 통합테스트할때는 사용하는데, UnitTest할때 그걸 띄워버리면 빌드시간이 느려진다
- 기타
- Date와 DateType은 다르다. 따라서 헷갈릴 수 있으므로 이름을 맞춰주자
- 스트림 쓸때 굳이 두번씩 돌릴 필요없이 줄일 수 있으면 줄이자
- Repository에서 값을 저장할 때(insert) 메소드 리턴 값으로 객체를 반환하는것 보다는 ID만 전달해주는 편이 낫다. 예를 들어 고객의 경우 민감한 정보들이 포함되어 있기 때문이다.
public UUID findById() //권장
public Customer findById() //권장하지 않음
@TestConfiguration
static class Config{
//테스트에 이너클래스로 Config를 작성하면 static으로 해야 동작한다..!!!