Skip to content

leeyulgok/javascript-bank

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

미션 - 가상 은행 프로그램

🔍 진행 방식

  • 미션은 기능 요구 사항, 프로그래밍 요구 사항 두 가지로 구성되어 있다.
  • 두 개의 요구 사항을 만족하기 위해 노력한다. 특히 기능을 구현하기 전에 기능 목록을 만들고, 기능 단위로 커밋 하는 방식으로 진행한다.
  • 기능 요구 사항에 기재되지 않은 내용은 스스로 판단하여 구현한다.
  • 틀을 중심으로 자유롭게 구현해보세요!

테스트 실행 가이드

  • 테스트 패키지 설치를 위해 Node.js 버전 18.17.1 이상이 필요하다.
  • 다음 명령어를 입력해 패키지를 설치한다.
npm install
  • 설치가 완료되었다면, 다음 명령어를 입력해 테스트를 실행한다.
npm test

🚀 기능 요구 사항

프로젝트 목표

  • 사용자가 쉽게 은행 거래를 경험할 수 있도록 하는 것
  • 가상 은행 시스템을 통해 계좌 관리 및 거래 처리의 기본 이해 증진
  • 객체 지향 프로그래밍과 Node.js를 활용한 실용적인 애플리케이션 개발 경험 제공
  • fs 라이브러리를 사용하여 파일을 읽고, 쓰고, 수정하는 능력을 키움

1. 계좌 관리

1.1 계좌 생성

  • 기능 설명: 사용자가 새로운 계좌를 생성할 수 있습니다.
  • 입력 요구사항: 사용자 이름, 계좌번호, 비밀번호
  • 처리 과정: 입력받은 정보로 새 계좌를 생성하고, 계좌 정보를 시스템에 저장합니다.
  • 출력 요구사항: 계좌 생성 성공 메시지 및 선택적 계속 거래 여부 질문

1.2 계좌 조회

  • 기능 설명: 사용자가 자신의 계좌번호를 입력하여 계좌 정보를 조회할 수 있습니다.
  • 입력 요구사항: 계좌번호
  • 처리 과정: 입력받은 계좌번호로 계좌 정보를 찾아 출력합니다.
  • 출력 요구사항: 계좌 정보 (잔고 등)

2. 거래 처리

2.1 입금

  • 기능 설명: 사용자가 특정 계좌에 돈을 입금할 수 있습니다.
  • 입력 요구사항: 계좌번호, 입금액
  • 처리 과정: 입력받은 계좌번호에 입금액을 추가합니다.
  • 출력 요구사항: 입금 후 잔액과 선택적 계속 거래 여부 질문

2.2 출금

  • 기능 설명: 사용자가 자신의 계좌에서 돈을 출금할 수 있습니다.
  • 입력 요구사항: 계좌번호, 출금액, 비밀번호
  • 처리 과정: 비밀번호 확인 후, 출금액만큼 잔액을 감소시킵니다.
  • 출력 요구사항: 출금 후 잔액과 선택적 계속 거래 여부 질문

2.3 송금

  • 기능 설명: 사용자가 다른 계좌로 돈을 송금할 수 있습니다.
  • 입력 요구사항: 송금자 계좌번호, 수신자 계좌번호, 송금액, 비밀번호
  • 처리 과정: 송금자 계좌에서 송금액을 차감하고, 수신자 계좌에 해당 금액을 추가합니다.
  • 출력 요구사항: 송금 완료 메시지와 선택적 계속 거래 여부 질문

3. 거래 내역 조회

3.1 거래 내역 조회

  • 기능 설명: 사용자가 자신의 계좌에 대한 최근 거래 내역을 조회할 수 있습니다.
  • 입력 요구사항: 계좌번호
  • 처리 과정: 입력받은 계좌번호에 대한 거래 내역을 조회합니다.
  • 출력 요구사항: 최근 거래 내역 리스트와 선택적 계속 거래 여부 질문

4. 잔액 조회

4.1 잔액 조회

  • 기능 설명: 사용자가 자신의 계좌 잔액을 조회할 수 있습니다.
  • 입력 요구사항: 계좌번호, 비밀번호
  • 처리 과정: 비밀번호 확인 후, 계좌 잔액을 표시합니다.
  • 출력 요구사항: 계좌 잔액과 선택적 계속 거래 여부 질문

5. 사용자 인터페이스

5.1 메인 메뉴

  • 기능 설명: 사용자가 계좌 존재 여부를 선택하고, 해당하는 기능을 선택할 수 있는 메인 메뉴를 제공합니다.
  • 입력 요구사항: 계좌 존재 여부 선택, 기능 선택
  • 처리 과정: 사용자의 선택에 따라 해당 기능으로 넘어갑니다.
  • 출력 요구사항: 각 기능에 대한 안내 메시지 및 에러 메시지 형식 규칙

5.2 에러 메시지

  • 기능 설명: 유효하지 않은 입력이나 오류 상황에서 사용자에게 알맞은 에러 메시지를 표시합니다.
  • 처리 과정: 에러 상황에 따라 적절한 메시지를 표시합니다.
  • 출력 요구사항: 모든 에러 메시지는 "[ERROR]"로 시작하고, 상황에 맞는 설명을 포함합니다.

개발 요청 사항

  • 시스템은 Node.js와 fs 모듈을 사용하여 개발됩니다.
  • 사용자 인터페이스는 명료하고 직관적이어야 합니다.
  • 시스템은 간단한 보안 메커니즘을 포함해야 합니다.
  • 모든 데이터는 파일 기반으로 저장되며, 서버 재시작 시에도 유지되어야 합니다.

계좌 생성

안녕하세요! 가상 은행입니다.
계좌가 존재하신가요(2 누를 경우, 자동으로 계좌 개설로 넘어갑니다.)?
-1,아니요-2
2

<계좌개설>
이름을 입력해주세요.
이대한

생성하고 싶은 계좌번호를 입력해주세요(eg. 123-4567).
123-4567

비밀번호 4자리를 입력해주세요.
1234

계좌개설에 성공했습니다.
계속 거래를 진행하시겠습니까?
-1,아니요-2
1

계좌가 존재하신가요(2 누를 경우, 자동으로 계좌 개설로 넘어갑니다.)?
-1,아니요-2
1

계좌번호를 입력해주세요(eg. 123-4567).
123-4567

진행하려는 사항을 입력해주세요.
입금-1,출금-2,송금-3,거래조회-4,잔고-5,종료-9
1

...

거래를 종료합니다.

입금 예시

안녕하세요! 가상 은행입니다.
계좌가 존재하신가요(2 누를 경우, 자동으로 계좌 개설로 넘어갑니다.)?
-1,아니요-2
1

계좌번호를 입력해주세요(eg. 123-4567).
123-4567

진행하려는 사항을 입력해주세요.
입금-1,출금-2,송금-3,거래조회-4,잔고-5,종료-9
1

<입금>
입금할 금액을 입력해주세요.
10000

<잔고>
이대한의 잔고는
10000 입니다.

계속 거래를 하시겠습니까?
계속-1,종료-2
1

진행하려는 사항을 입력해주세요.
입금-1,출금-2,송금-3,거래조회-4,잔고-5,종료-9
9

거래를 종료합니다.

출금 예시

안녕하세요! 가상 은행입니다.
계좌가 존재하신가요(2 누를 경우, 자동으로 계좌 개설로 넘어갑니다.)?
-1,아니요-2
1

계좌번호를 입력해주세요(eg. 123-4567).
123-4567

진행하려는 사항을 입력해주세요.
입금-1,출금-2,송금-3,거래조회-4,잔고-5,종료-9
2

<비밀번호>
비밀번호를 입력해주세요.
1234

<출금>
출금할 금액을 입력해주세요.
10000

<잔고>
이대한의 잔고는
0 입니다.

계속 거래를 하시겠습니까?
계속-1,종료-2
1

진행하려는 사항을 입력해주세요.
입금-1,출금-2,송금-3,거래조회-4,종료-9
9

거래를 종료합니다.

송금 예시

안녕하세요! 가상 은행입니다.
계좌가 존재하신가요(2 누를 경우, 자동으로 계좌 개설로 넘어갑니다.)?
-1,아니요-2
1

계좌번호를 입력해주세요(eg. 123-4567).
123-4567

진행하려는 사항을 입력해주세요.
입금-1,출금-2,송금-3,거래조회-4,잔고-5,종료-9
3

<송금>
송금할 계좌을 입력해주세요(eg. 123-4567).
123-4567

<비밀번호>
비밀번호를 입력해주세요.
1234

<금액>
송금할 금액을 입력해주세요.
10000

송금을 완료했습니다.
계속 거래를 하시겠습니까?
계속-1,종료-2
2

거래를 종료합니다.

거래조회 예시 - 송신자

안녕하세요! 가상 은행입니다.
계좌가 존재하신가요(2 누를 경우, 자동으로 계좌 개설로 넘어갑니다.)?
-1,아니요-2
1

계좌번호를 입력해주세요(eg. 123-4567).
123-4567

진행하려는 사항을 입력해주세요.
입금-1,출금-2,송금-3,거래조회-4,잔고-5,종료-9
4

<거래조회>
최근 10건의 거래내역을 조회합니다.
1. 입금: 10000
잔고: 10000

2. 출금: 10000
잔고: 0

3. 송금: 10000
계좌: 987-6543

...

계속 거래를 하시겠습니까?
계속-1,종료-2
2

거래를 종료합니다.

거래조회 예시 - 수신자

안녕하세요! 가상 은행입니다.
계좌가 존재하신가요(2 누를 경우, 자동으로 계좌 개설로 넘어갑니다.)?
-1,아니요-2
1

계좌번호를 입력해주세요(eg. 123-4567).
123-4567

진행하려는 사항을 입력해주세요.
입금-1,출금-2,송금-3,거래조회-4,잔고-5,종료-9
4

<거래조회>
최근 10건의 거래내역을 조회합니다.
1. 입금: 10000
잔고: 10000

2. 출금: 10000
잔고: 0

3. 입금: 10000
계좌: 123-4567

...

계속 거래를 하시겠습니까?
계속-1,종료-2
2

거래를 종료합니다.

잔고 예시

안녕하세요! 가상 은행입니다.
계좌가 존재하신가요(2 누를 경우, 자동으로 계좌 개설로 넘어갑니다.)?
-1,아니요-2
1

계좌번호를 입력해주세요(eg. 123-4567).
123-4567

진행하려는 사항을 입력해주세요.
입금-1,출금-2,송금-3,거래조회-4,잔고-5,종료-9
5

<비밀번호>
비밀번호를 입력해주세요.
1234

<잔고>
이대한님의 잔고는
10000 입니다.

계속 거래를 하시겠습니까?
계속-1,종료-2
2

거래를 종료합니다.

🎯 프로그래밍 요구 사항

  • Node.js 18.17.1 버전에서 실행 가능해야 한다. Node.js 18.17.1에서 정상적으로 동작하지 않을 경우 0점 처리한다.
  • 프로그램 실행의 시작점은 App.js의 run 메서드이다. 아래와 같이 프로그램을 실행시킬 수 있어야 한다.

예시

const app = new App();
app.run();
  • package.json을 변경할 수 없고 외부 라이브러리(jQuery, Lodash 등)를 사용하지 않는다. 순수 Vanilla JS로만 구현한다.
  • JavaScript 코드 컨벤션을 지키면서 프로그래밍 한다
  • 프로그램 종료 시 process.exit()를 호출하지 않는다.
  • 프로그램 구현이 완료되면 ApplicationTest의 모든 테스트가 성공해야 한다. 테스트가 실패할 경우 0점 처리한다.
  • 프로그래밍 요구 사항에서 달리 명시하지 않는 한 파일, 패키지 이름을 수정하거나 이동하지 않는다.
  • indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다.
    • 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.
    • 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메서드)를 분리하면 된다.
  • Jest를 이용하여 본인이 정리한 기능 목록이 정상 동작함을 테스트 코드로 확인한다.
  • 함수(또는 메서드)의 길이가 15라인을 넘어가지 않도록 구현한다.
    • 함수(또는 메서드)가 한 가지 일만 하도록 최대한 작게 만들어라.
  • else를 지양한다.
    • 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다.
    • 때로는 if/else, switch문을 사용하는 것이 더 깔끔해 보일 수 있다. 어느 경우에 쓰는 것이 적절할지 스스로 고민해 본다.
  • 도메인 로직에 단위 테스트를 구현해야 한다. 단, UI(Console.readLineAsync, Console.print) 로직에 대한 단위 테스트는 제외한다.
    • 핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 구분한다.
  • 사용자가 잘못된 값을 입력할 경우 throw문을 사용해 예외를 발생시킨다. 그런 다음, "[ERROR]"로 시작하는 에러 메시지를 출력하고 해당 부분부터 입력을 다시 받는다.

About

우테코 스타일의 가상 은행 프로그램

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors