2023-04-04 화
오늘은 간단한 테스트와 기능 추가 생각을 해보았다.
기능 추가는 아직 디자인 구상이 완전히 끝난 것이 아니기 때문에 회의 때 팀원들과 차차 얘기해 보기로 생각하고, 이번 프로젝트(거의 대부분의 프로젝트가 비슷하지만)의 가장 중요한 게시글 CRUD를 위한 클래스들의 간단한 테스트를 진행했다.
아직 요구사항 정의서가 픽스가 난 것이 아니기 때문에 흐지부지한 느낌이 난다. 얼른 요구사항 정의서를 완성해 추가할 기능을 정하고, 프로젝트를 실행하고 싶다.
어제 간단한 환경 설정을 하고 필요한 클래스들을 만들어 놓고, 테스트를 진행해 보려고 했는데 오류가 계속 났다.
제일 처음 시작한 테스트는 PostRepository가 생성이 되었는지에 대한 테스트였다.
@Test
void 레파지토리isNotNull(){
Assertions.assertThat(postRepository).isNotNull();
}
여기서 사용된 Assertions는 AssertJ란 자바 라이브러리에서 제공하는 메소드이다.
JUnit5에서도 Assertions를 제공하는데, JUnit5의 Assertions보다 가독성이 좋다.
그래서 postRepository가 Null이 아님을 알려주는 테스트이다.
postRepository가 Null이 아니려면, PostEntity와 PostRepository의 빈 설정이 필요하다.
PostEntity와 PostRepository의 설정을 마치고 테스트를 실행해 보았는데, 여기서 오류가 나왔다.
가장 처음 직면한 오류는 IllegalStateException 이었다.
IllegalStateException 오류는 클래스 접근을 하지 못해서 나는 오류였다.
어제 프로젝트에 필요한 클래스들을 미리 다 만들어 놓는 환경설정을 마치고 테스트를 진행 해보려 했지만, PostEntity와 PostRepository를 제외한 다른 Entity들이 접근을 제대로 하지 못한 것이다.
그래서 일단 나머지 클래스들은 개발을 할 때 다시 만들기로 하고, 삭제 시킨후 다시 테스트를 진행해 보았다.
나머지 클래스를 삭제하고 테스트를 진행하니 IllegalStateException 오류는 해결되었다.
하지만 또다른 오류가 나왔다..
요번 오류는 invaliddataaccessresourceusageexception 오류였다.
구글링과 디버깅 오류를 찾아본 결과 테이블이 제대로 설정되어있지 않아서 생긴 오류였다.
나는 요번 프로젝트에 JPA를 사용하게 되며 MySQL 스키마만 생성해두었지, 아직 테이블을 생성하지 않았다.
자동으로 테이블이 생성되는줄 알고, 실행했었는데 그게 아니었다.
구글링을 통해 찾아보니 ddl을 자동 생성하게 해주는 설정을 해주어야 테이블이 자동으로 생성되는 것을 알 수 있었다.
spring.jpa.hibernate.ddl-auto=create
찾아보니 spring.jpa.hibernate.ddl-auto 속성에는 여러가지가 있었다.
가장 기본적이지만 아직 JPA를 잘 몰라 생긴 문제였다.
이를 통해 나중에 JPA에 대해 조금 더 공부를 해야겠다는 생각이 들었다.
또 나는 오늘 새로운 기능 추가에 대해 생각해 보았다.
내가 생각해낸 기능은 게시글을 올릴 때 자기가 공부하는 언어를 설정 해두고, 사용자들이 자신이 같이 공부하고 싶은 언어를 찾을 수 있게 언어별로 필터 기능을 사용할수 있도록 하는 것이다.
그래서 이를 어떤 방식으로 데이터를 저장시킬지 생각을 하다 생각난 것이 enum형식으로 언어를 저장시키는 것이다.
하지만 이 글을 쓰면서 생각이 난 것이 여러가지 언어를 선택할 수 있게 하려면 데이터를 어떻게 저장해야할지 모르겠는 것이다. 이거는 좀 더 생각해봐야겠다.
오늘처럼 계속계속 생각하고 이 생각들을 실행으로 옮길 수 있도록 공부를 열심히 해야겠다는 생각이 들었고, 얼른 요구사항 정의서를 다 만들고 프로젝트를 진행하고 싶다.
아직은 무언가 하고 있는 느낌이 들지 않는다.