2021-04-15-TIL
2021-04-15-TIL
API Document
- https://developer.box.com/reference/put-comments-id/#request
- https://idratherbewriting.com/learnapidoc/docapis_doc_parameters.html
Box API 레퍼런스는 엔드포인트 하나를 경로·쿼리 파라미터, 요청 본문, 응답 스키마, 여러 언어의 코드 예제로 나누어 보여 준다. 두 번째 글은 파라미터마다 데이터 타입, 필수 여부, 기본값, 허용 값과 최솟값·최댓값을 적으라고 권한다. 필수 파라미터를 빼거나 범위를 벗어난 값을 보냈을 때 어떤 오류가 오는지도 직접 호출해 보고 문서에 남기라고 한다. 이 틀을 따르면 API를 쓰는 쪽이 서버 코드를 열어 보지 않고도 요청을 만들 수 있다.
Spring Data JDBC - Aggregates
- https://spring.io/blog/2018/09/24/spring-data-jdbc-references-and-aggregates
애그리거트는 항상 일관된 상태여야 하는 객체 묶음이고, 바깥에서는 애그리거트 루트만 참조할 수 있다. Spring Data JDBC는 이 개념을 그대로 저장 규칙으로 쓴다.
- 애그리거트 안의 객체는 루트와 함께 저장되고, 루트를 지우면 함께 지워진다.
- 리포지토리는 애그리거트 루트마다 하나만 둔다.
- 다른 애그리거트는 객체가 아니라 id로 참조한다. 글에서 든 예처럼 책을 지운다고 저자가 지워지면 안 되므로
Book은Author객체 대신 저자 id를 가진다.
Spring and JDBC
- https://spring.io/guides/gs/relational-data-access/
이 가이드는 JdbcTemplate만으로 테이블을 만들고, batchUpdate로 여러 행을 넣고, 람다로 쓴 RowMapper로 결과 행을 객체로 바꾼다. SQL에 값을 문자열로 이어 붙이지 않고 ? 자리표시자에 바인딩해서 SQL 인젝션을 막는다는 점도 강조한다.
Spring Data JDBC - one to many
- https://prog.world/introduction-to-spring-data-jdbc-baeldung/
- https://javabydeveloper.com/spring-data-jdbc-one-to-many-example/
- https://spring.io/blog/2018/09/24/spring-data-jdbc-references-and-aggregates
- https://www.baeldung.com/spring-data-annotations
애그리거트 루트가 컬렉션을 가지면 일대다 관계가 된다. 매핑 문서에 따르면 자식 테이블에는 부모를 가리키는 외래 키 컬럼이 필요하다. List나 Map이면 순서나 키를 담을 컬럼이 하나 더 필요하고, 기본 이름은 _KEY 접미사가 붙는다. 컬럼 이름이 다르면 @MappedCollection(idColumn = ..., keyColumn = ...)으로 맞춘다.
1
2
3
4
5
6
7
class Category {
@Id
Long id;
@MappedCollection(idColumn = "CATEGORY_ID")
Set<Item> items;
}
저장 방식은 JPA와 많이 다르다. 엔티티 저장 문서에 따르면 새 루트가 아닐 때는 참조하는 엔티티를 모두 지우고, 루트를 갱신한 뒤, 참조 엔티티를 다시 넣는다. 이전 상태를 추적하지 않기 때문이다. 자식 하나만 바꿔도 전체가 다시 쓰이므로, 자식이 많은 컬렉션을 애그리거트 안에 둘지는 따로 판단해야 한다.
안녕하세요? temm08의 발표를 맡게된 august입니다. 우선 간단한 설명 후 데모를 하도록 하겠습니다.
댓글
아직 댓글이 없습니다