본문 바로가기
반응형

전체 글57

NestJS + TypeORM + pg-mem으로 가벼운 e2e-test 작성하기 포스팅 작성 동기 실무에서 e2e-test를 작성하는데, 처음엔 testcontainers라는 라이브러리를 이용해서 e2e-test를 작성했더니, 케이스 하나당 500ms나 걸렸다. 원인을 찾아보니 이 라이브러리가 내부적으로 Docker를 이용해서 좀 무거워서 그랬던 것 같다. 그래서 다른 좋은 방법이 없을까 리서칭 중 pg-mem이라는 in-memory emulation of a postgres database 라이브러리를 발견! pg-mem을 사용했더니 빠른 경우 케이스 하나당 15ms으로 시간이 많이 줄었다. 그래서 이번 포스팅에서는 pg-mem을 사용한 (비교적) 가벼운 e2e-test 작성법에 대해 알아보고자 한다. 프로젝트 세팅 프로젝트 세팅 과정을 건너뛰고 싶다면 nestjs-typeorm-.. 2022. 5. 21.
[JPA] 지연 로딩과 조회 성능 최적화 참고: 인프런 강의 by 김영한 실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 대부분의 성능 이슈는 조회에서 일어난다. 주문 + 배송정보 + 회원을 조회하는 API를 최적화해보자. 지연 로딩 때문에 발생하는 성능 문제(N+1)를 단계적으로 해결해보자. Order 엔티티 public class Order { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @OneToMany(mappedBy = "or.. 2021. 5. 28.
Java String(SubString, StringBuilder, Tokenizing, Split 등) String String, StringBuilder의 차이 String은 immutable하고, StringBuilder는 mutable하다. 따라서 String 연산을 할 때 차이가 생기는데, 아래의 예제를 보자. String은 불변 객체이기 때문에 concatenation을 하면 새로운 String 객체를 생성한다. 그러나, StringBuffer는 변할 수 있는 mutable 객체이기 때문에 객체를 직접 조작 가능하다. Substring 만들기 substring() 메서드는 해당 문자열을 직접 변형하는 것이 아니라 새로운 String 인스턴스를 생성하는 것임에 주의... 위에서도 알 수 있듯이 String은 immutable하다. 그리고, index는 zero-based(0부터 시작)임에 주의한다... 2021. 5. 1.
게시판 페이징 처리 (Paging, 페이징 구현) (1편) Paging 1편 1편에서는 Paging 처리를 구현하는 코드를 작성하기 전에 변수들 간의 관계식과 Test Code를 작성해본다. 용어 정의 관계식 정의 아래의 값들은 이미 알고 있거나 정의되었다고 가정한다: totalPosts(모든 글 개수), currentPage(현재 페이지 번호), postsPerPage(한 페이지당 표시할 글 개수), displayPageNum(한 번에 표시할 페이지 개수) 페이징을 구현하기 위해 구해야 할 값: prev, next, startPage, endPage 4가지!! 우선, prev는 currentPage로 구한 startPage가 1인 경우 false고, 나머지 경우는 모두 true. prev = (startPage == 1) ? false : true 그리고, n.. 2021. 4. 23.
반응형