210514_TIL
1. Facts(사실, 객관)
- @Blank, @Empty, @Null 차이점 블로그 글 작성
- 반려동물 중고마켓 와이어프레임 작성
- 로그 개념 강의
- 예외 처리하기 강의
- JPA에서 지원하는 쿼리메서드 강의
- JPQL의 @Query 방식 강의
- 5초 법칙 완독
- 4행일기 독서
2. Feelings(느낌, 주관)
- 오늘은 주로 강의를 듣고 기존에 아는 개념과 비교 학습하도록 했습니다.
- 이전에 프로젝트에서도 한번 다뤘는데 @Blank, @Empty, @Null의 차이를 정리했습니다. 영어사전을 통해서 미리 개념을 구분하도록 하니까 잘 알 수 있었습니다.
- SpringBoot의 기본 강의들은 보통 CRUD를 만듭니다. 그런데 lombok을 이용한 전략은 강사마다 스타일이 다릅니다. 따라서, 내가 배우고 알고 있던 기존의 것에서 좋다고 생각되는 것은 더 발전시켜나갈 계획입니다.
- 예외 처리하는 방법은 이전에는 단순히 메세지만 리턴했지만, 상태코드도 같이 리턴하는 강의를 접했습니다. 저도 메세지만 작성하면서도 상태코드를 리턴하며 좋겠다고 생각했습니다. 또한 @Valid를 통해서 예외에 걸리는 경우도 기존에 정의되어있는 methodnotallowedhttpexception를 이용하는 강의는 내가 발전시킨 기존의 방식과 맞아떨어졌습니다. 따라서 이 방법들을 다시한번 확인하고 프로젝트에 적용할 생각입니다. 꼭 강의를 듣고 안다고 생각하지 말고 직접 적용하고 만들어보는 것을 습관화해야합니다!
- JPA에서 사용하는 "쿼리메서드"전략도 꼭 실습이 필요합니다~!
- 5초법칙을 완독했습니다. 우리의 마음이 외치는 소리를 외면하지 않고 망설이는 순간 5초 안에 결단을 내리고 움직여야 함을 잘 이해했습니다. 이를 통해서 아침에 기상이 어렵지 않게 되었습니다. 고민하는 시간과 실제로 행동하는 것은 반비례한다는 것에 동의하므로 적당한 고민은 좋지만 너무 깊은 고민으로 빠질바에 부딪혀보자는 다짐을 합니다. 이것은 코딩에서도 내가 잘 몰라서 너무 완벽하게 개념을 알고 들어가려 하는 완벽주의에서 벗어나, 비록 막힐지라도 직접 부딪혀보고 그에따라서 새로운 인사이트를 얻는 유연한 방법을 지향하도록 바꿨습니다.
- 지금 매일 TIL을 쓰고 있는 전신은 4행일기입니다. 해당 책이 절판되었는데 중고로 주문하였습니다. 다음에는 이 책을 읽고 이 4행일기의 위력과 꾸준함을 더욱 잘 알고 열심히 써내려갈 것입니다.
3. Findings (배운 점)
@Blank => null, "" , " "
@Empty => null, ""
@Null => null
3개의 차이점을 단어사전을 기반으로 이해하고 코드로 기억한다.
* JPQL에서 @Query의 방식
* @Query 안에 쓰는 문법은 Entity를 기반으로 합니다. 따라서 *를 사용하지 않습니다.
@Query("select person from Person person where person.age < 30")
만약에 db문법을 쓰고 싶다면 뒤에 nativeQuery 속성을 true로 써줍니다.
@Query("select * from person where age < 30", nativeQuery = true)
메서드의 매개변수에서 값을 대입하고 싶을 때 2가지 방법이 있습니다.
1. ?1, ?2 순서로 넣기
@Query("select person from Person person where person.name = ?1 and person.age = ?2")
public Person findPerson(Stirng name, int age);
2. @Param 문자열 이름으로 넣기
@Query("select person from Person person where person.name = :=name and person.age = :age ")
public Person findPerson(@Param("name") Stirng name, @Param("age") int age);
당연히 2번이 더욱 안전하게 코드를 짤 수 있습니다. 처음에는 1번의 방식을 사용했는데, 이제 2번의 방식을 사용하도록 했습니다. 계속 안전하게 코드를 유지할 수 있는 방법이 있다면 해당 방법으로 과감히 바꾸도록 주의를 기울입니다.
* 우리가 일반적으로 사용하는 findById, findByName 등등이 "쿼리메서드"임을 알았습니다. 쿼리메서드는 조회를 위해 디부분의 조건문을 가지고 있습니다. 한번 쭉 문법을 사용하면서 익히면 좋을 것 같습니다. 하지만 무엇보다 먼저 sql로 잘 짜는 것이 우선입니다.!!! 가장 좋았던 것은 containing의 발견입니다.
@Query("select person from Person person where person.name like "%:name%")
public Person findPerson(@Param("name") String name);
저는 like "%:name%"에 대한 쿼리메서드가 없다고 생각했습니다. 아니, 그것보다는 찾아보기가 귀찮았습니다. 그래서 저렇게 JPQL을 사용해서 쿼리문을 짰습니다. 하지만 다음과 같은 방법을 사용할 수 있습니다.
Person findByNameContaining(String name);
Containing을 사용하면 앞뒤로 "%"를 걸어주는 효과가 납니다. 여기서 Containing 대신에 Like를 썼다면 ":name"으로 정확히 해당 name에 맞는지만 검색이 됩니다.
4. Affirmation (자기 선언)
- 매일 TIL 작성은 형식과 모양이 중요한게 아니라 "매일 기록함으로써 내용을 인출하고 성장하는 것이다"
4. Future Action ("구체적" 행동 계획)
- JPA 쿼리메서드를 다양하게 실습한다
- 로깅에 대해 실전 사용방법을 알아본다
- 예외처리에서 ErrorResponse에 code를 추가해보고, 생성자 대신 of로 반환하도록 한다
- 4행 일기를 읽는다