일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- querydsl
- ManyToOne
- Event Messaging
- 다대다
- N:M
- OneToMany
- Event Drvien Architecture
- onetoone
- event streaming
- JPA
- spring boot
- 테이블 매핑
- Today
- Total
목록전체 글 (6)
차곡차곡 쌓아가는 개발일기
먼저 Java에서의 I/O는 외부의 정보를 필요로 할 때 사용된다. 외부라 함은 파일 그리고 네트워크를 의미한다.Java I/O API는 여러 프로토콜로 데이터를 주고받거나 파일을 읽고 쓸 수 있다. 이 API는 데이터베이스에 접근할 수 있게도 해주며, 수많은 API들의 꼭대기에 구축되어 있는 게 바로 Java I/O API이다.I/O나 NIO 둘 다 사용되는 목적은 같다. 이제 왜 이걸 사용하는지 알았으니 둘의 차이점에 대해 알아보자I/O 와 NIO의 차이점I/O는 Stream이라는 데이터가 한 방향으로만 흐르는 통로를 사용해 외부에서 데이터를 가져오고 내보낸다. NIO는 Channel이라는 양방향으로 데이터가 흐를 수 있는 통로를 사용해 외부에서 데이터를 가져오고 내보낸다.I/O 는 Stream을 통..
Event Drvien Architecture(이벤트 기반 아키텍쳐) 줄여서 EDA는 쉽게 설명해서 특정 서비스에서 다른 서비스가 관심을 가질 수 있는 작업을 수행할 때, 상태의 변경을 나타내는 이벤트를 발행하면, 다른 서비스들이 이벤트를 수신하여 작업을 수행하는 설계 패턴이다.EDA의 구성 요소EDA에서 애플리케이션은 이벤트를 Publish(발행)하거나 Comsume(소비)하는 역할을 한다. 한 어플리케이션이 두 역할을 동시에 수행하는 것도 가능하다.Publisher메시지 형식으로 이벤트를 브로커나, 다른 형식의 이벤트 라우터로 전송한다. 발행된 이벤트들은 다른 이벤트와 함께 시간순으로 순서가 유지된다.Consumer실시간 또는 원하는 시간에 발행된 메시지를 수집하여 작업을 수행한다.이벤트 전송 방식이..

CQRS패턴은 Command and Query Responsibility Segregation(명령과 조회의 책임 분리)를 의미한다. 용어 그대로 말해서 시스템에서 명령과 조회를 분리하는 것을 의미하는데, 여기서 명령은 시스템의 상태를 변경하는 것을 의미하며, 조회는 시스템의 상태를 반환하는 것을 의미한다. 기존 패턴에서는 데이터는 데이터베이스에서 레코드로써 다루어지고, 데이터들이 RDB에 레코드로 저장되기 위해서는 하나의 특정한 모델로 다루어지는데, 요구사항에서는 DB에서 저장하고 있는 레코드와는 다르게 데이터를 나타내거나 여러 레코드들을 결합하여 정보를 나타내는 등 저장된 데이터와 표현되는 데이터가 다를 수 있다. 그리고 모델이 변경되면 기존에 표현되던 데이터는 변질된 모델을 다시 가공해야하는 문제가..
N:M관계형 DB는 정규화된 테이블 2개로 N:M 관계를 표현할 수 없다. 따라서 중간에 연결 테이블을 추가해 N:M 관계를 1:N, N:1 관계로 풀어낼 수 있다하지만 객체는 테이블과 다르게 객체 2개로 N:M 관계를 풀어낼 수 있다N:M 단방향@ManyToMany와 @JoinTable을 통해 연결테이블을 관리하지 않고도 다대다 관계를 풀어낼 수 있다코틀린으로 N:M 양방향 구현 예시 코드@Entityclass Library( @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "library_id") var id: Long = 0, val name: String, @ManyToMany @JoinTable(name = "L..
연관관계 매핑테이블을 설계하다 보면 두 테이블 간에 관계를 생성해야 하는 경우가 생긴다. 스프링에서는 JPA라는 ORM을 통해 보통 자바 객체와 테이블을 매핑하는데 객체들끼리도 매핑을 해야 테이블에도 반영된다테이블의 간에 관계를 생성하는 것은 두 테이블 중에 종속테이블의 PK를 주인테이블에 FK로 저장하여 관계를 생성하게 되고, 테이블은 외래키를 통해 JOIN 연산을 할 수 있기 떄문에 양방향이다객체에서 관계를 나타내는것은 참조를 통해 나타내고 한쪽에서 다른쪽을 참조하기 때문에 단방향일 수 밖에 없다, 하지만 객체를 단방향으로 매핑하여도 매핑한 시점에서 테이블 간의 연관관계는 양방향으로 만들어져있따객체 그래프 탐색: 한 객체를 통해 연관된 다른 객체를 조회하는 것을 의미한다연관관계 매핑의 특징방향: 단방..
어느날 Kotlin 스프링 부트 서버를 유지보수하던 중이었다그러다 새로운 API 개발을 담당하게 되었는데 내용을 들어 보니 DB에 있는 데이터들의 일괄 삭제 API가 필요한 상황이 생긴 것이었다내용은 다음과 같았는데 OAuth 서비스에서 로그인된 상태로 로그인 한 사람이 등록해놓은 서비스들을 삭제하는 API였다처음 코드는 DeleteByIdsAndCreatedBy(User)가 내가 사용하는 스프링 버전에서 지원하지 않아 다음과 같이 작성했었다@Service@Transactional(rollbackfor = [Exception::class])class deleteClientsService( private val clientRepository: ClientRepository) { fun execu..