- 목표
다음 스펙들로 DB를 구현하고 SchemaBuilder를 통해 API를 구현합니다.
(JPA를 통해 다음 DB들을 ORM 방식으로 구현하는 것을 추천합니다.)
1. DB
1-1) test_table
1-2) DDL (test_table)
-- public.test_table definition
-- Drop table -- DROP TABLE public.test_table; CREATE TABLE public.test_table ( id int8 GENERATED BY DEFAULT AS IDENTITY( INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1 NO CYCLE) NOT NULL, name varchar(255) NULL, CONSTRAINT test_table_pkey PRIMARY KEY (id) ); |
1-3) test_table_column
1-4) DDL (test_table_column)
참고로, test_table의 id는 test_table_id의 참조 키 입니다.
-- public.test_table_column definition
-- Drop table -- DROP TABLE public.test_table_column; CREATE TABLE public.test_table_column ( id int8 GENERATED BY DEFAULT AS IDENTITY( INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1 NO CYCLE) NOT NULL, test_table_id int8 NULL, column_data_type varchar(255) NULL, column_name varchar(255) NULL, CONSTRAINT test_table_column_pkey PRIMARY KEY (id), CONSTRAINT fk67nblq9uk1qrmr2miig5pygtc FOREIGN KEY (test_table_id) REFERENCES public.test_table(id) ); |
2. 구현할 결과값
특정 api를 호출하면 다음 값들이 response에 담겨 오도록 구현합니다.
(SchemaBuilder 및 JSON 관련 dependency 사용 필수)
데이터 내용은 동일하지 않아도 됩니다. 다만 데이터 형태는 최대한 맞춰야 하는게 이번 과제의 핵심입니다.
2-1) avro schema
{
"type": "record",
"name": "TestTableAvro",
"namespace": "com.example.my_rest_api.model",
"fields":[
{"name":"table_column_1","type":["null","string"]},
{"name":"table_column_2","type":["null","long"]},
{"name":"table_column_3","type":["null",{"type":"long","logicalType":"timestamp-millis"}]}
]
}
2-2) JSON
{
"tables": {
"id": "1",
"name": "test_table_1",
"column_data_names": [
"table_column_1",
"table_column_2",
"table_column_3"
],
"column_data_types": [
"string",
"long",
"timestamp"
]
}
}
'Apache Avro' 카테고리의 다른 글
Rest-API 구현 관련 과제 - 2 (JSON) (0) | 2024.10.28 |
---|---|
Rest-API 구현 관련 과제 - 1 (Avro) (0) | 2024.10.27 |
Spring Boot REST API 및 DB 연동 실습 - 3 (DBtoAvro) (0) | 2024.09.29 |
Spring Boot REST API 및 DB 연동 실습 - 2 (JPA) (0) | 2024.09.28 |
Spring Boot REST API 및 DB 연동 실습 - 1 (환경설정) (3) | 2024.09.28 |
댓글