0812 개발일지

Yesol Lee·2022년 8월 12일
0

개발일지 - 2022

목록 보기
115/187

사이드 프로젝트

JUnit5 관련 에러

Error "TestEngine with ID 'junit-vintage' failed to discover tests" with Spring Boot 2.2

junit5 에러 해결

  • 링크 글을 보면 spring-boot-starter-test 에 의존하면서 JUnit4를 사용하지 않을 때 발생하는 에러라고 한다.
  • spring-boot-starter-testjunit-vintage-engine에 의존하는게 JUnit5에는 그게 아마 없는 듯 하다.
  • 해결 : build.gradlejunit-vintage-engine 관련 의존성을 추가
  • 버전을 잘 보고 맞춘게 아니라서 찝찝하긴 한데 어쨌든 콘솔 에러 없이 잘 돌아간다.. 흐린 눈..
// spring-boot-starter-test 코드 아래 삽입
testImplementation('org.springframework.boot:spring-boot-starter-test:2.2.2.RELEASE') {
    exclude group: 'junit'
    exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}

testImplementation('org.junit.jupiter:junit-jupiter-api:5.5.2')
testImplementation('org.junit.jupiter:junit-jupiter-engine:5.5.2')
testImplementation('org.junit.jupiter:junit-jupiter-params:5.5.2')

게시판 목록 조회 홈 화면

  • 목표 : 메인화면에 모든 유저게시판 목록이 뜬다. (유저:게시판 1대1) 게시판 이름 클릭 시 개별 게시판 페이지로 이동
  • 유저 = 게시판이므로 먼저 회원가입 및 더미 데이터 넣을 필요가 있었음
  • 회원가입 등 강의와 동일한 기능은 제외함

더미 데이터 삽입

메인화면부터 유저 목록을 보여주기 위해 더미 데이터를 미리 넣어놓을 필요성을 느꼈다. 추후 더미데이터를 없앨 때 한 줄 주석으로 처리할 수 있도록 별도 메소드로 분리했다.

1. 더미데이터 준비

private String[] names = {"224", "사장", "팝도"};
private String[] contents = {"게시물1", "게시물2", "게시물3"};

2. 유저 더미데이터 삽입 메소드

  • 기존 유저가 없으면 더미데이터를 삽입하게 처리함
// User 더미데이터 삽입
private void setUsers(UserService userService, String[] names) {
	
	List<User> result = userService.findUsers();
	
	if(result.size()==0) {
		for (String name : names) {
			User user = new User();
			user.setName(name);
			userService.join(user);
		}
	}
}

3. 게시물 데이터 삽입 메소드

  • 유저 더미 만드는 김에 게시물 더미도 만들었다.
  • 유저 번호도 자동으로 넣을수도 있었겠지만 양이 적으니 그냥 직접 작성
// Post 더미데이터 삽입
private void setPosts(PostService postService, String[] contents, Long userId) {
	List<Post> result = postService.findPosts(userId);
	
	if(result.size()==0) {
		for (String content : contents) {
			Post post = new Post();
			
			post.setHomeId(userId);
			post.setContent("게시물1");
			post.setAuthorId(userId);
			
			postService.createPost(post);
		}
	}
}

4. 메인화면으로 이동할 때 메소드 호출

@GetMapping("/")
public String homeList(Model model) {
	
	// 더미 데이터 삽입
	setUsers(userService, names);
	setPosts(postService, contents, 1L);
	setPosts(postService, contents, 2L);
	setPosts(postService, contents, 3L);
	
	List<User> result = userService.findUsers();
	model.addAttribute("resultList", result);
	
	return "homes/homeList";
}

thymeleaf 문법

변수와 텍스트 동시 작성

org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression:

변수와 텍스트 동시작성

  • th:text안에서 "${변수}텍스트" 이렇게 변수와 텍스트를 함께 적어서 생긴 에러
  • 양 끝에 | 기호 추가해야 함 : "|${변수}텍스트|"

<a href="" /> 내부 작성

  • "@{}" 이렇게 @ 기호를 붙이고 시작한다.

반복문

  • th:each="item : ${items}" 형식 사용
<li th:each="user : ${resultList}">
    <a th:href="@{/homes/selectHome?homeId={id}(id=${user.id})}" th:text="|${user.name}의 집|">user1의 집</a>
</li>

if 조건문

thymeleaf 조건문

<!-- 수정일자 없으면 생성일, 있으면 수정일 표시 -->
<td th:if="${post.updatedAt==null}" th:text="${post.createdAt}"></td>
<td th:unless="${post.updatedAt==null}" th:text="${post.updatedAt}"></td>

오늘 결과

  • User 전체보기 메인화면, User 회원가입
  • Post 생성, 수정, 전체조회, 삭제 완료




뉴스레터

  • 8월 새소식 업데이트
profile
문서화를 좋아하는 개발자

0개의 댓글