[220916 - TIL] 기술면접 스터디, 원티드 프리온보딩 프로젝트

Dongwoo Kim·2022년 9월 16일
0

TIL / WIL

목록 보기
56/113

1. 기술면접 스터디

질문


  1. Transaction의 의미와 ACID 규칙에 대해서 설명해주세요.
  2. Primary Key와 Foreign Key에 대해 각각 설명해주세요.

준비 답변


  1. Transaction이란 데이터베이스의 상태를 변환시키는 하나 또는 한꺼번에 모두 수행되어야 할 일련의 연산 작업 단위를 의미합니다.
    ACID는 트랜잭션의 4가지 성질을 뜻하며 하나씩 말씀드리면
    원자성 Atomicity - 모두 반영되든지 아니면 전혀 반영되지 않아야 하고
    일관성 Consistency - 트랜잭션이 시작과 끝에 있는 동안 데이터베이스는 항상 일관된 상태입니다.
    독립성 Isolation - 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 영향을 줄 수 없고
    지속성 Durablility 완료된 트랜잭션의 결과는 되돌릴 수 없고 영구적으로 반영되어야 합니다.
  2. PK, FK 모두 RDB 제약조건으로 PK는 데이터의 고유한 식별값으로 데이터 생성시 고유 인덱스가 생성되고 다른 데이터들과 중복되거나 null이 불가능합니다.
    FK 외부 식별 키로 테이블간의 관계를 나타낼때 사용하며 원투매니 관계를 나타낼 수있습니다.

2. 원티드 프리온보딩 - 프로젝트 기획

Investment_service - [2] 주요 기능 & API 설계

참여기업

디셈버앤컴퍼니 - 핀트

기업과제

주어진 고객 투자 데이터를 응답하는 REST API 개발

1. API 설계

상세보기


2. 고려항목

1. 고객관리 - 로그인

요구사항에는 포함되어있지 않지만 투자 조회(또는 투자금 입금) 시 고객이 본인의 투자를 조회(또는 투자금 입금)한다고 가정하고 JWT를 통한 로그인 기능을 구현하고 고객인증을 통해 본인의 투자(계좌)만을 조회(또는 투자금 입금)할 수 있도록 계획

  • 고객 데이터 생성시 비밀번호는 기본 고정값으로 설정, 비밀번호 기본 고정값은 .env파일에서 관리

2. 고객 - 투자(계좌) 관계

제공된 데이터셋에는 1명의 고객에 1개의 투자(계좌)로만 구성되었지만 구조적으로 1개 이상의 투자(계좌)를 가질 수 있다고 가정하고 FK로 계획, 따라서 투자 조회시 본인이 가진 투자(계좌)를 리스트로 조회할 수 있다.

  • 투자 조회 정리
    (고객 로그인)
    -> 고객 본인의 투자(계좌) 리스트 조회
    -> 그중에 하나 선택 시 해당 투자(계좌)에 대한 상세 조회
    -> 보유 종목 선택시 해당 투자(계좌)의 종목 리스트 조회

3. '투자 조회', '보유 종목 조회' -> 응답 데이터에 id 포함

'투자 상세 조회'를 제외한 '투자 조회'와 '보유 종목 조회' 기능은 여러개가 리스트로 조회될 수 있으므로 Front에서 각각의 개체를 식별할 수 있는 고유 id값을 응답 데이터에 포함시킬 계획

기타 추가사항

1. Batch

제공되는 데이터셋을 매일 최신 데이터로 갱신할 수 있어야함 오류 데이터 구분해야 함

2. 적절한 오류/예외 처리

3. 원본 데이터와 응답 값에 일관성(Consistency) 이 유지

투자금 입금 기능에서 고객의 총 자산을 업데이트할 때 일관성이 유지되도록 구현해야함


3. 주요 기능

고객 관리

  • 로그인 : 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
}

📄 기획문서

노션 - 디셈버앤컴퍼니 기업과제

profile
kimphysicsman

0개의 댓글