질문
- Transaction의 의미와 ACID 규칙에 대해서 설명해주세요.
- Primary Key와 Foreign Key에 대해 각각 설명해주세요.
준비 답변
- Transaction이란 데이터베이스의 상태를 변환시키는 하나 또는 한꺼번에 모두 수행되어야 할 일련의 연산 작업 단위를 의미합니다.
ACID는 트랜잭션의 4가지 성질을 뜻하며 하나씩 말씀드리면
원자성 Atomicity - 모두 반영되든지 아니면 전혀 반영되지 않아야 하고
일관성 Consistency - 트랜잭션이 시작과 끝에 있는 동안 데이터베이스는 항상 일관된 상태입니다.
독립성 Isolation - 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 영향을 줄 수 없고
지속성 Durablility 완료된 트랜잭션의 결과는 되돌릴 수 없고 영구적으로 반영되어야 합니다.- PK, FK 모두 RDB 제약조건으로 PK는 데이터의 고유한 식별값으로 데이터 생성시 고유 인덱스가 생성되고 다른 데이터들과 중복되거나 null이 불가능합니다.
FK 외부 식별 키로 테이블간의 관계를 나타낼때 사용하며 원투매니 관계를 나타낼 수있습니다.
Investment_service - [2] 주요 기능 & API 설계
참여기업
디셈버앤컴퍼니 - 핀트
기업과제
주어진 고객 투자 데이터를 응답하는 REST API 개발
상세보기
1. 고객관리 - 로그인
요구사항에는 포함되어있지 않지만 투자 조회(또는 투자금 입금) 시 고객이 본인의 투자를 조회(또는 투자금 입금)한다고 가정하고 JWT를 통한 로그인 기능을 구현하고 고객인증을 통해 본인의 투자(계좌)만을 조회(또는 투자금 입금)할 수 있도록 계획
- 고객 데이터 생성시 비밀번호는 기본 고정값으로 설정, 비밀번호 기본 고정값은 .env파일에서 관리
2. 고객 - 투자(계좌) 관계
제공된 데이터셋에는 1명의 고객에 1개의 투자(계좌)로만 구성되었지만 구조적으로 1개 이상의 투자(계좌)를 가질 수 있다고 가정하고 FK로 계획, 따라서 투자 조회시 본인이 가진 투자(계좌)를 리스트로 조회할 수 있다.
- 투자 조회 정리
(고객 로그인)
-> 고객 본인의 투자(계좌) 리스트 조회
-> 그중에 하나 선택 시 해당 투자(계좌)에 대한 상세 조회
-> 보유 종목 선택시 해당 투자(계좌)의 종목 리스트 조회3. '투자 조회', '보유 종목 조회' -> 응답 데이터에 id 포함
'투자 상세 조회'를 제외한 '투자 조회'와 '보유 종목 조회' 기능은 여러개가 리스트로 조회될 수 있으므로 Front에서 각각의 개체를 식별할 수 있는 고유 id값을 응답 데이터에 포함시킬 계획
기타 추가사항
1. Batch
제공되는 데이터셋을 매일 최신 데이터로 갱신할 수 있어야함 오류 데이터 구분해야 함
2. 적절한 오류/예외 처리
3. 원본 데이터와 응답 값에 일관성(Consistency) 이 유지
투자금 입금 기능에서 고객의 총 자산을 업데이트할 때 일관성이 유지되도록 구현해야함
고객 관리
- 로그인 : JWT 토근 인증
투자관리
1) 데이터 조회
- 투자 화면
- 계좌명
- 증권사
- 계좌번호
- 계좌 총 자산
- 투자 상세 화면
- 계좌명
- 증권사
- 계좌번호
- 계좌 총 자산
- 투자 원금
- 총 수익금 (총 자산 - 투자 원금)
- 수익률 (총 수익금 / 투자 원금 * 100)
- 보유 종목 화면
- 보유 종목명
- 보유 종목의 자산군
- 보유 종목의 평가 금액 (종목 보유 수량 * 종목 현재가)
- 보유 종목 ISIN
2) 투자금 입금
- Phase 1
입금 거래 정보들을 서버에 등록합니다.
- 요청 데이터
- 계좌번호
- 고객명
- 거래 금액
- 응답 데이터
- 거래정보 식별자 : 요청 데이터 묶음을 식별할 수 있는 key 값
요청 데이터 { "account_number": "123123", "user_name": "아이작", "transfer_amount": 1000 } 응답 데이터 { "transfer_identifier": 111 }```
Phase 2
phase1 에서 등록한 거래정보 검증 후 실제 고객의 자산을 업데이트합니다.
거래 정보를 hashing 하여 서버에 phase2 요청을 하면 서버에서는 phase1 에서 등록하여 저장된 데이터를 hashing 하여 동일한 데이터에 대한 요청인지 검증을 합니다. 검증에 성공하면 고객의 총 자산을 업데이트하고 성공 응답을 하고, 검증 실패 시 자산 업데이트 없이 실패 응답을 합니다.
- 요청 데이터
- phase1 요청 데이터 계좌번호, 고객명, 거래 금액 순서로 연결한 string 을 hash한 string.
- phase1 에서 응답받은 거래정보 식별자
- 응답 데이터
- 입금 거래 결과
요청 데이터 { "signature": "82b64b05dfe897e1c2bce88a62467c084d79365af1", // "123123아이작1000" 을 sha512 hash 한 값. "transfer_identifier": 111 } 응답 데이터 { "status": true }