자세한 내용은 Github를 참고해주시기 바랍니다. 자 이제 엔티티를 개발할 차례다. 사전에 먼저 용어 부터 정리하도록 하자. 도메인 모델패턴 DDD에서 정의한 도메인 모델을 먼저 간략하게 보면 다음과 같습니다. 전 글인 서비스 로직 구현에서 도메인 계층에 도메인 정보와 비즈니스 규칙을 정의한다고 했는데 그렇다 이렇게 정의 된 모델을 도메인 모델이라고 한다. 그리고 이러한 개발 패턴을 도메인 모델 패턴이라고 하는데 이러한 패턴은 객체 지향 언어를 이용해 개념 모델에 가깝게 구현할 수 있고 도메인 개념을 모델을 통해 한눈에 이해할 수 있게 할 수 있다는 장점이 있다. JPA 값 타입 JPA에서는 내장 타입을 이용해 식별관계 테이블을 정의할 수 있습니다. 이것을 이용해서 읽기 전용인 VO객체를 만들어 도메인..
이제 서비스를 구현해볼 차례다. 먼저 서비스는 애플리케이션 레이어에 해당하는데 보통 비즈니스를 구현하는 구현부라고 생각하면 된다. 물론 이미 여러분들은 틀이 완성 되어있을 것이다. 컨트롤러를 먼저 만들었기 때문에 없는 클래스들은 alt + enter(mac. option + enter)를 이용하면 쉽게 틀을 만들 수 있다. 또한 ReadService와 Service가 따로 구현이 되어있는데 Transactional을 공통으로 사용할 수 있어 간결하게 코딩이 가능하며 나중에 Read와 Write 도메인이 분리되더라도 영향도를 줄일 수 있고 분리된 서비스를 기반으로 빠르게 리팩토링이 가능할 수 있습니다. @Service @Slf4j @RequiredArgsConstructor @Transactional pu..
Global Setting관련해서는 GitHub를 확인해주세요. (JWT와 Security는 매우매우 중요해서 추후 블로그 올립니다.) 우린 컨트롤러부터 서비스 엔티티 순으로 내려가며 개발할 예정입니다. 그렇다면 여기서 의문이 생길겁니다. 왜 컨트롤러부터 개발하나요 ? 먼저 제 생각을 말씀드리면 개발 속도와 깔끔한 아키텍처를 위해서 입니다. 저희는 개발하면서 Entity를 먼저 개발해왔지만 그런식의 개발은 Entity에 의존적인 개발을 할 수 없게 만들고 Entity에 의존적인 개발을 한다는 것은 결국 데이터 중심의 애플리케이션 개발이기 때문에 객체 중심의 개발이 이루어지는 요즘과는 맞지 않습니다. 그렇기 때문에 이벤트 기반으로 먼저 개발을 진행한 후 이벤트에 필요한 속성들을 모아 Entity를 개발하는..
블로그 프로젝트 시작이유 현대 백엔드 기술 중 가장 많이 쓰이는 기술들을 골라보라고 하면 대표적으로 Redis, Spring Boot, JPA 그리고 MySQL 등이 있습니다. 블로그 프로젝트는 이 기술들을 적절하게 사용하는 법을 제시할 예정입니다. 또한 FE와 협업하기위한 최적의 솔루션을 제시할 예정입니다. (본인피셜이니 거를 사람들은 걸러도 됩니다.) 혹시나 본인이 간단한 게시판 프로젝트를 통해서 실력을 높이고자 한다면 제 블로그를 보며 하는 것도 추천 드립니다. 그러면 우선 설계 부터 해봅시다. 블로그에서 일어날 수 있는 이벤트 들을 정리해보면 다음과 같습니다. 게시판 스터디 회원님 분들과 같이 작성한 이벤트 들입니다. 도메인 별로 이벤트를 나눴습니다. 그렇다면 이제 여기서 백엔드 영역의 기능들로 ..
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..
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..
본 필자는 회사에서 일하면서 고객의 정보를 변경하면 수정 이력을 나타내는 기능과 수정 했던 사람을 추적해야 하는 기능을 구현해야 했다. 기존에는 직접 업데이트가 될 때 마다 전 후 비교를 통해 시간을 업데이트 시키는 방식으로 복잡하게 비즈니스 로직이 수행되었는데 필자는 이걸 좀 더 수월하게 이용하기 위해서 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..
JPA를 왜 사용하는가? 필자는 블로그 프로젝트와 팀원들과 토이 프로젝트를 진행하며 JPA를 사용해 왔다. 과거에 JPA를 사용하면서 "SQL쿼리를 직접 작성하지 않는다"는 이점만 보고 JPA를 무작정 사용했던 것 같았다. 하지만 JPA는 우리가 생각하는 것 만큼 간단하지 않다. 복잡하지 않은 일반 개인 프로젝트에서는 무난히 사용했을 지 몰라도 복잡한 연관 관계를 갖고 있는 테이블이 있다고 가정해보자 우리는 이를 JPA로 간단하게 처리할 수 있는가? 그렇다면 JPA를 왜 사용하는지 JPA를 사용했을 때의 이점을 정확히 파악하고 우리는 그것을 남들에게 설명할 수 있어야 한다. 그 이유에 대해 먼저 알아보자 SQL을 직접 다룰 때 발생하는 문제점 RDBMS는 가장 대중적이고 신뢰할 만한 안전한 데이터 저장소..
- Total
- Today
- Yesterday
- 코딩
- 면접준비
- 동시성
- 개발
- 취업준비
- 백엔드
- 면접
- IT
- 개발자
- DB
- swarm
- CS
- 자바
- Redis
- Kotlin
- MySQL
- java
- 인터뷰
- 프로젝트
- 프로그래밍
- Spring
- 코드
- 취준
- 게시판
- thread
- 면접 준비
- 취업
- DevOps
- docker
- JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |