Page 인터페이스 Paging을 위해서 Spring boot에서는 Page 인터페이스를 제공합니다. 이 인터페이스의 기본 스펙을 살펴보면 다음과 같습니다. { "content": [ ... (data) ], "pageable": { "sort": { "unsorted": false, "sorted": true, "empty": false }, "pageNumber": 0, "pageSize": 7, "offset": 0, "paged": true, "unpaged": false }, "last": true, "totalElements": 7, "totalPages": 1, "first": true, "numberOfElements": 7, "size": 7, "sort": { "unsorted": fa..
JPA란? 이 관계를 알아보기 위해 JPA를 쓰는 이유에 대해서 알아봐야합니다. JPA는 ORM 기술 중 하나로 hibernate를 기반으로 자바의 객체와 DB 테이블 간의 패러다임 불일치 문제를 해결해주는 기술입니다. RDB와 Object는 엄연히 다른 존재이지만 이 불일치를 해결하기 위해 여태 많은 개발자들은 RDB 중심의 애플리케이션 개발을 주로 했습니다. 하지만 JPA가 나오면서 부터 이 불일치 문제를 해결하는 장점을 바탕으로 객체 중심의 개발이 이루어지기 시작했는데 이것이 바로 JPA의 장점이라 할 수 있습니다. public class Member { private Long id; private String email; private String password; private String na..
프로젝트를 진행 중에 최근 데이터를 정렬하라는 요구사항에 대해 빠르게 성능을 올리고 싶어 여러가지를 찾아보던 중 커버링 인덱스라는 개념을 발견했다. 인덱스 ? 인덱스는 데이터를 효율적으로 탐색하는 방법이다. 하나의 색인같은 것으로 MySQL 미리 정렬된 상태의 하나의 클러스링된 테이블이 존재하면 이 테이블에 접근하여 빠르게 해당 아이디 값을 찾아가는 방식으로 동작한다. 이 때 성능이 매우 빠르기 때문에 DB 성능향상을 위해 꼭 필요한 기술이다. 커버링 인덱스? 커버링 인덱스 는 쿼리를 충족하는데 필요한 모든 데이터를 갖는 인덱스를 뜻한다.(SELECT/WHERE/GROUP BY/ ORDER BY) 아까 인덱스에서 잠시 언급한 미리 정렬된 상태의 클러스터링된 테이블에 접근하여 데이터를 인덱스 테이블에서 조..
가상 머신과 도커 컨테이너 기존의 가상 머신은 여러 개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식이었다. 이러한 방식은 커널 라이브러리 운영체제를 운영하기 위한 여러가지 리소스가 필요했고 그로인해 이미지의 크기가 매우 커진다. 그리고 하이퍼바이저를 반드시 반드시 거쳐야 하기에 일반 호스트에 비해 성능이 떨어진다. 즉 이렇게 무겁고 비효율적인 성능에 가상 머신을 이용할 이유가 없었다. 그래서 나온 것이 바로 docker다. 도커 컨테이너는 리눅스의 자체 기능인 chroot, 네임스페이스, cgroup을 사용함으로써 프로세스 단위의 격리 환경을 만들기 때문에 성능 손실이 거의 없다. 또한 컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용하여 OS가 빠지기 때문에 훨씬 적은 용량의 이미지 파일 구..
https://golf-dev.tistory.com/33 프로젝트 JPA 성능 개선기 (1) - 로그인 시 성능을 올려보자~! OneToOne은 기본적으로 Lazy 로딩을 지원하지 않는다. 그렇기 때문에 조회 시 Lazy로 설정 시 다음과 같은 문제가 발생한다. 일단 사전에 코드를 보여주면 다음과 같다. Member.java public class Member extends. golf-dev.tistory.com 전 글을 꼭 읽고 오시기 바란다. 이제부터 불필요한 Join문을 없애 보도록 하겠다. 추가 된 기술 스택 : QueryDSL QueryDSL은 Projections를 통해 DTO나 다른 객체에 접근하여 그에 필요한 데이터만을 조회하여 반환할 수 있다. 이 방법을 통해 우린 영속화된 Entity에..
OneToOne은 기본적으로 Lazy 로딩을 지원하지 않는다. 그렇기 때문에 조회 시 Lazy로 설정 시 다음과 같은 문제가 발생한다. 일단 사전에 코드를 보여주면 다음과 같다. Member.java public class Member extends BaseTimeEntity { // 속성 ... // @OneToOne(mappedBy = "member", cascade = {CascadeType.PERSIST, CascadeType.REMOVE}, orphanRemoval = true) private MemberCount memberCount; // == 연관관계 로직 == // public void addMemberCount(final MemberCount memberCount) { this.memb..
Redis를 사용하던 와중 특정 오류가 잡혀 골치 아픈 적이 있었다. public class CacheConfig { private final RedisConnectionFactory redisConnectionFactory; @Bean public CacheManager cacheManager() { RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) .serializeValuesWith(Redi..
본 필자는 회사에서 일하면서 고객의 정보를 변경하면 수정 이력을 나타내는 기능과 수정 했던 사람을 추적해야 하는 기능을 구현해야 했다. 기존에는 직접 업데이트가 될 때 마다 전 후 비교를 통해 시간을 업데이트 시키는 방식으로 복잡하게 비즈니스 로직이 수행되었는데 필자는 이걸 좀 더 수월하게 이용하기 위해서 JPA Auditing 기술을 이용하고자 했다. JPA Auditing 이란? 데이터베이스에서 누가 수정하고 언제 수정되었냐는 기록은 매우 중요할 수 있는 데이터이다. JPA에서는 이러한 기능을 추적할 수 있는 기능을 제공하고 있는데 그것이 바로 JPA Auditing 기술이다. 이 기술을 사용하면 자동으로 JPA에서 자동으로 생성이나 수정 발생 시 시간을 매핑하여 데이터베이스에 넣어준다. 사용해보자!..
@Test @DisplayName("데이터베이스에 존재하는 게시판을 10개 조회해온다.") void findAll() { for (int i = 0; i < 10; i++) { Board board = Board.builder() .title(Title.from("테스트 용입니다. " + i)) .content(Content.from("테스트용 Content 입니다. 재미있다아앙")) .build(); boardService.create(board, 1L); } Pageable pageable = PageRequest.of(0, 10, Sort.Direction.DESC, "id"); List boards = boardService.findAll(pageable); assertThat(boards.siz..
CQRS 패턴이란? CQRS는 Command Query Responsibility Segregation의 약자로 "명령 조회 책임 분리" 라는 뜻을 갖고 있다. 이는 애플리케이션을 구성하는 아키텍처 패턴 중 하나로 명령과 조회에 대한 책임을 분리하여 아키텍처를 구성하는 것이다. 그럼 왜 그렇게 해야하는지 알아보자 Why? 일반적인 애플리케이션은 데이터를 연결된 데이터베이스에 레코드로써 생성하거나 조회하거나 갱신 삭제를 한다. 그리고 이렇게 애플리케이션이 데이터를 레코드로 저장하는 과정에서 데이터는 특정한 모델로 다뤄진다. 예를 들어 주문 내역이라는 데이터는 애플리케이션 내에서 id, 주문 상품, 일시 등으로 속성을 지니는 하나의 클래스 모델로써 다뤄지고 DB에는 레코드로써 저장되어 조회 갱신 삭제될 수 ..
- Total
- Today
- Yesterday
- 면접 준비
- 개발자
- MySQL
- Spring
- IT
- 동시성
- 인터뷰
- 면접
- 코딩
- 백엔드
- java
- CS
- Redis
- 자바
- 프로그래밍
- JPA
- 게시판
- 취준
- swarm
- 개발
- Kotlin
- thread
- DB
- 취업
- 코드
- 취업준비
- docker
- DevOps
- 프로젝트
- 면접준비
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |