티스토리 뷰

이번에는 목록 조회랑 상세 조회 두 개를 한 번에 만들었다. Category 때 이미 조회 패턴은 해봤으니 수월했다

 

목록/상세, SQL에서부터 다르게 짰다
목록 조회는 password를 아예 SELECT하지 않았다.

// BoardMapper.xml
<select id="selectBoardList" resultType="com.study.board.BoardEntity">
    SELECT id, category_id, title, writer, content, view_count, created_at, updated_at
    FROM Board
    ORDER BY id DESC
</select>

 

근데 상세 조회는 예외적으로 password를 포함시켰다.

// BoardMapper.xml
<select id="selectBoardDetail" resultType="com.study.board.BoardEntity">
    SELECT id, category_id, title, writer, content, password, view_count, created_at, updated_at
    FROM Board
    WHERE id = #{id}
</select>

 

나중에 수정/삭제 API에서 비밀번호를 검증하려면 그 값을 서버가 알고 있어야 하기 때문. 응답으로 나갈 땐 Converter가 걸러주니 클라이언트한테 노출될 일은 없다.

조회수는 UPDATE로 처리
상세 조회할 때마다 view_count를 1씩 올려야 하는데, 이건 SELECT가 아니라 UPDATE로 처리했다.

// BoardMapper.xml
<update id="increaseViewCount">
    UPDATE Board
    SET view_count = view_count + 1
    WHERE id = #{id}
</update>

 

서비스에서는 조회수를 먼저 올리고, 그 다음에 조회하는 순서로 짰다.

public BoardResponse getBoardDetail(Long id) {
    boardMapper.increaseViewCount(id);
    BoardEntity board = boardMapper.selectBoardDetail(id);
    return boardConverter.toResponse(board);
}

 

여기까지는 예상대로 순조롭게 끝났다. 근데 실제로 API를 돌려보니 문제가 하나 있었다.

 

트러블슈팅 (컬럼들이 전부 null)

목록 조회 API를 포스트맨으로 돌려보니 이런 응답이 나왔다.

 

id, title, writer, content는 멀쩡한데 categoryId, viewCount, createdAt, updatedAt만 전부 null.

규칙이 보였는데 밑줄(_) 없는 컬럼만 정상, 밑줄 있는 컬럼만 null이 출력되는것을 확인했다

 

이유: DB 컬럼은 category_id, view_count처럼 스네이크케이스인데, 자바 필드는 categoryId, viewCount처럼 카멜케이스다. MyBatis는 기본적으로 이 둘을 자동으로 연결해주지 않는다. category_id라는 컬럼명 그대로 categoryId라는 필드를 찾으려다 실패하면, 그냥 조용히 null을 넣어버린다. 등록 API에서는 이 문제가 안 보였는데, 그건 그때 응답이 DB에서 다시 읽어온 게 아니라 우리가 직접 만든 자바 객체를 그대로 썼기 때문이었다.

해결방법 :

// application.yaml
mybatis:
  configuration:
    map-underscore-to-camel-case: true

이 설정을 켜주면 MyBatis가 category_id → categoryId로 자동 변환해준다.

결과


설정 추가하고 다시 조회해보니, 목록/상세 전부 정상적으로 값이 채워졌고, 같은 게시글을 상세 조회로 여러 번 호출하니 viewCount가 1씩 올라가는 것도 확인했다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/08   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함