발견(犬)-mbti 기능

Viva의 놀이터·2021년 5월 5일
0

my project

목록 보기
8/10
post-thumbnail

MBTI 검사하기

당신의 성향과 맞는 강아지를 찾아드립니다. 현재 보호소에 당신을 기다리는 강아지가 있습니다

취지

강아지가 이뻐서 쉽게 분양을 받고 성향이 맞지않아 쉽게 파양을 하는 사람들이 많이 있습니다
처음부터 분양을 받기위한 까다로운 조건을 만들면 좋겠지면 개인의 힘으로는 강제하기가 쉽지 않습니다
조금이라도 파양되는 강아지의 수를 줄이고 한번 파양되서 새로운 주인을 기다리는 귀여운 강아지를
좋은 사람에게 소개시켜주는 사이트를 만들고자 하였습니다.

mbti??

mbti는 사람의 성격을 16가지로 분류하는 알고리즘을 의미한다.

정리

특징

  1. E: 외향적인 성향을 지닌 사람 vs I: 내향적인 사람
  2. S: 예민하고 오감에 집중하는 사람 vs N: 직감, 촉 같은 육감에 집중하는 사람
  3. T: 원칙과 규범을 중시하는 사람 vs F: 느낌과 감정을 중시하는 사람
  4. J: 체계적이고 목표를 중시하고 목적을정하는 것을 좋아하는 사람 vs P: 유연한 사고를 가지고 변화에 민감한 사람

알고리즘 설계

  1. 총 4가지 타입을 설정하기 위해서 검사를 한다.
  2. 각각의 타입은 3가지 질물을 한다.
  3. 질문의 대답을 통해서 둘중에 높은 점수를 획득한 성향으로 결정한다.
  4. 최종적으로 결정된 성향들을 출력해주고 설명을 적어준다.

DB 설계

  1. 16개의 성향을 정의하고 특징을 적은 테이블을 가진다.

  2. 각각의 질문을 담은 테이블을 만든다.

  3. 각각의 질물의 답을 담은 테이블

MBTI DB설계

직접 질문을 작성하고 각각의 MBTI유형에 관한 설명을 DB에 입력해줬습니다

  public void createDB(){

            String [] type_list = {
                    "ISTJ",
                    "ISFJ",
                    "ISTP",
                    "ISFP",
                    "INFJ",
                    "INFP",
                    "INTJ",
                    "INTP",
                    "ESFJ",
                    "ESTJ",
                    "ESFP",
                    "ESTP",
                    "ENFJ",
                    "ENTP",
                    "ENTJ",
                    "ENFP"};
            String [] content_list = {
                    "조용하고 헌신적인 든든한 내 편 '말 없이 발을 툭'",
                    "섬세하고 예민한 편 질투쟁이 '다른 놈 처다도 보지마 나랑 만 놀아!'",
                    "독립적인 의심쟁이, '내 맘대로 살거야 말리지마!'",
                    "순둥순둥 모든 좋아 '(힘들지만)너가 하고 싶으면 하자'",
                    "나한테만 애교부리는 차도견 '새로운건 싫어 우리끼리 놀자'",
                    "상대방 말에 굉장히 민감하고 다정다감한 여린맘의 소유자",
                    "신중하고 혼자 있는거 좋아하는 고양이같은 성경의 독립적인 기요미",

이렇게 만들어진 문제를 프론트에게 전달해줍니다. 프론트는 전달 받은 문제의 답을 배열로 반환해줍니다.

채점 알고리즘

 public Mbti_type result(ResultDto resultDto){
        System.out.println(resultDto.getResult_list());
        int [] result = resultDto.getResult_list();
        String M = (result[0]/100 > result[0]%100) ? "E":"I";
        String B = (result[1]/100 > result[1]%100) ? "S":"N";
        String T = (result[2]/100 > result[2]%100) ? "T":"F";
        String I = (result[3]/100 > result[3]%100) ? "J":"P";
        String want = M+B+T+I;
        System.out.println(want);
        return mbti_typeRepository.findByType(want);
    }

QA의 답을 Q1로 할 경우 100을 더하고 Q2를 할 경우 1을 더해줍니다. 각각의 유형은 3문제씩 있고 총 12문제가 있으니 4개의 배열을 받습니다.

result_list = [102,201,300,201]

이렇게 받아온 값을 삼항 연산자를 이용하여 q1과 q2중 최빈값을 갖는 유형을 입력해줍니다.

위와 같은 방법으로 작성된 M,B,T,I를 더하여 나온 최종 형태를 찾아서 반환해줍니다.

설계한 api

/api/mbti/make_type : mbti 타입 설계 db에 삽입
/api/mbti/make_test : mbti 질문 db에 삽입

위의 api들은 최소 서버 구현시 한번만 실행시켜주면 됩니다. h2 db를 기준으로 작성하였기 때문에 편의상 직접 입력하도록 하였습니다.

/api/mbti/start : 서버에서 클라이언트로 질문 리스트를 보내줍니다.
/api/mbti/result : 클라이언트에서 전달 받은 result_list를 계산해서 어떤 MBTI 유형에 해당하는지 찾아서 클라이언트로 전달해줍니다.

https://github.com/DongHyunKIM-Hi/mbti

profile
역사를 잊은 기술에겐 미래가 없다

0개의 댓글