본문 바로가기
Apache Avro

Rest-API 구현 관련 과제

by 자는게젤루좋아 2024. 10. 9.

 

- 목표

다음 스펙들로 DB를 구현하고 SchemaBuilder를 통해 API를 구현합니다.

(JPA를 통해 다음 DB들을 ORM 방식으로 구현하는 것을 추천합니다.)

 

1. DB

1-1) test_table

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

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"
    ]
  }
}

 

댓글