URL 매핑이 잘못되어 있을 때, 못 찾을 때 예외 처리 방법올바른 URL: http://localhost:8080/v1/books/stats/ranking올바르지 않은 URL : http://localhost:8080/v1/books/stats/rankings이런 케이스에서 발생@Getterpublic enum ErrorType { EXTERNAL_API_ERROR("외부 API 호출 에러 입니다."), UNKNOWN("알 수 없는 에러입니다."), INVALID_PARAMETER("잘못된 요청값입니다."), NO_RESOURCE("존재하지 않는 리소스입니다."); ErrorType(String description) { this.description = desc..
Spring관련 기술
https://docs.gradle.org/current/userguide/java_library_plugin.html The Java Library PluginThe Java Library plugin expands the capabilities of the Java Plugin (java) by providing specific knowledge about Java libraries. In particular, a Java library exposes an API to consumers (i.e., other projects using the Java or the Java Library plugin). Alldocs.gradle.orghttps://docs.gradle.org/current/userg..

Ngrinder 부하테스트를 위한 플랫폼(Naver) 웹 애플리케이션 Controller와 자바 애플리케이션 Agent로 구성 되어 있다. https://github.com/naver/ngrinder GitHub - naver/ngrinder: enterprise level performance testing solution enterprise level performance testing solution. Contribute to naver/ngrinder development by creating an account on GitHub. github.com 설치방법 Releases 버튼을 누르거나 빨간색으로 되어 있는 부분(가장 최신 버전)을 눌러 확인합니다. ngrinder-controller-x.x..

처음에 엔티티 이름을 Board로 지었는데 게시판은 Board지만, 게시글 하나 하나는 Post가 더 적합하다는 생각이 들었다. 그래서 Board -> Post로 바꾸기로 마음먹었는데, 보통 Test코드가 없을 때는 엄청 수작업이고, 나 혼자 할 수 없을 것이다. 50개 정도 테스트가 터지고, 문제점 확인 후 빠르게 고칠 수 있었다. 갑자기 뿌듯해서..
Join 현업에서 제일 자주보는 친구! @Test public void join() throws Exception { QMember member = QMember.member; QTeam team = QTeam.team; List result = queryFactory .selectFrom(member) .join(member.team, team) .where(team.name.eq("teamA")) .fetch(); assertThat(result) .extracting("username") .containsExactly("member1", "member2"); } 회원(Member)와 팀(Team)은 관계가 맺어져있고 N:1의 관계 하나의 회원은 한 팀에 소속될 수 있고 한 팀에는 여러 회원이 속할 ..
Querydsl - 정렬 em.persist(new Member(null, 100)); em.persist(new Member("member5", 100)); em.persist(new Member("member6", 100)); List result = queryFactory .selectFrom(member) .where(member.age.eq(100)) .orderBy(member.age.desc(), member.username.asc().nullsLast()) .fetch(); 다른 것은 일반 쿼리와 비슷하다. nullsFirst() null 데이터 있으면 맨 앞으로 nullsLast() null 데이터 있으면 맨 뒤로 이정도는 유용하게 알아두면 좋을 것 같다.~