프론트엔드/React

[React/JS MBTI 만들기] #05. MBTI 이미지 삽입 및 UI, 컨텐츠 수정 (scss, li 태그 커스텀, ::before, ::after, git 배포)

JI NY 2024. 4. 11. 12:23

[React/JS MBTI 만들기] #05.  MBTI 이미지 삽입 및 UI, 컨텐츠 수정

 (scss, li 태그 커스텀, ::before, ::after)

 

 

 

 

 

1. 기간

  • 24.04.01 ~ 24.04.07 : 개발
  • 24.03.29 ~ 20.04.01 : TypeScript 문법 공부

 

2. 목차

  1. MBTI 컨텐츠 수정 
  2. 잘 맞는 & 잘 맞지 않는 MBTI 이름으로 보이게 수정 및 li태그 커스텀
  3. MBTI에 맞는 그림 삽입
  4. 폰트 수정 및 적용
  5. 깃허브에 배포하기
  6. 향후 계획

 

3. 결과물

- 깃허브 배포 사이트 : React App (ji-ny.github.io)

 

- 결과물 동영상


 

 

01. MBTI 컨텐츠 수정 

1) 원래 MBTI contents 객체 

{mbti:"ISTP", name: [''], contents:['벼락치기 진짜 잘해요.','논리적이고 뛰어난 적응력을 가지고 있어요.','처음엔 낯을 가리지만 친해지면 장난도 잘 쳐요.'],   goods:['A','B'], bads:['B']},    // 백과사전형

- 원래는, mbti, name, contents, goods, bads 각 키에 goods, bads, name 값부족했다

- 그래서 여러가지 MBTI 자료들을 찾아가면서 gdoos, bads, name의 값을 추가로 넣어줬다.

- 각 요소 : mbti : MBTI, goods : 잘 맞는 MBTI, bads : 잘 안맞는 MBTI, name : 그 MBTI의 이름

- 참고자료 

2) 수정된 MBTI Contents

하나하나 넣느라 너무 힘들었다. 🥹🥹 

    //각 mbti의 특성
    let mc = [
      {   mbti:"ISTP", 
          name: ['자유로운 영혼의 새내기'], 
          contents:['벼락치기 진짜 잘해요.','논리적이고 뛰어난 적응력을 가지고 있어요.','처음엔 낯을 가리지만 친해지면 장난도 잘 쳐요.'],   
          goods:['ESFJ', 'ENTJ'], //ENFP, ENTJ
          bads:['INFP, ENFP, INFJ, ENFJ']},    // 백과사전형

      {   mbti:"ISFP", 
          name: ['감성적인 새내기'], 
          contents:['타인 배려를 잘하지만 눈치를 많이 봐요.','순하고 정이 많아요.','상대방의 이야기를 잘 들어줘요.'],   
          goods:['ENFJ','ESFJ','ESTJ'], //INFJ, INTJ
          bads:['INFP', 'ENFP', 'INFJ']}, //default    // 성인군자형

      {   mbti:"ISTJ", 
          name: ['목표를 향해 노력하는 새내기'], 
          contents:['책임감이 높고, 신중해요.','한번 시작한 일을 끝까지 해내요.','약속 어기는건 싫어요.'],     
          goods:['ESFP', 'ESTP'], 
          bads:['INFP', 'ENFP', 'INFJ', 'ENFJ']},    // 과학자형

      {   mbti:"ISFJ", 
          name: ['친절하고 섬세한 새내기'], 
          contents:['나서는건 싫어하지만 관심받는건 좋아요.','성실하고 온화해요.','눈치가 빠르고 센스있어요.'],       
          goods:['ESFP','ESTP'], 
          bads:['INFP', 'ENFP', 'INFJ', 'ENFJ']},    // 권력형

      {   mbti:"INFJ", 
          name: ['따뜻하고 통찰력있는 새내기'], 
          contents:['혼자 쉬는 시간이 필요해요.','인간관계에 통찰력이 뛰어나서, 눈치가 빨라요.','계획적인걸 좋아해요.'],     
          goods:['ENFP','ENTP'], 
          bads:['ISFP', 'ESFP', 'ISTP', 'ESTP', 'ISFJ', 'ESFJ', 'ISTJ', 'ESTJ']},    // 예언자형

      {   mbti:"INTJ", 
          name: ['미래를 준비하는 새내기'], 
          contents:['자립심이 강해요.','효율적이에요.','도움이 필요한 사람에게는 차별없이 잘 도와줘요.'],     
          goods:['ENFP','ENTP'], 
          bads:['INFP', 'INFJ', 'ENFJ', 'INTJ', 'ENTJ', 'INTP']},    // 과학자형

      {   mbti:"INFP", 
          name: ['창의적인 새내기'],
          contents:['공감을 잘해줘요','자주 우울하지만, 티를 안내요.','따뜻한 마음씨를 가져, 사람들과 잘 어울려요.'],   
          goods:['ENFJ','ENTJ'],  // * ENFJ, ENTJ
          bads:['ISFP', 'ESFP', 'ISTP', 'ESTP', 'ISFJ', 'ESFJ', 'ISTJ', 'ESTJ']}, // * ISFP, ESFP, ISTP, ESTP, ISFJ, ESFJ, ISTJ, ESTJ
          // 잔다르크형

      {   mbti:"INTP", 
          name: ['지적인 호기심을 가진 새내기'], 
          contents:['신중하고, 논리적이에요.','감정기복이 적어요.','친해진 사람에게는 정말 잘해줘요.'],   
          goods:['ENTJ','ESTJ'], 
          bads:['없어용']},    // 아이디어형

      {   mbti:"ESFP", 
          name: ['즐거움을 전하는 새내기'], 
          contents:['자존감이 높아요.','정이 많아서 거절을 잘 못해요.','평화로운게 좋아요.'],       
          goods:['ISFJ','ISTJ'], 
          bads:['INFP', 'ENFP', 'INFJ', 'ENFJ']},    // 사교형

      {   mbti:"ESTP", 
          name: ['모험을 즐기는 새내기'], 
          contents:['친화력 최강!','직설적인 말투로 오해받을때가 있지만, 절대 나쁜 의도가 아니에요.','재미있는 이야기로 모임을 주도해요.'],    
          goods:['ISFJ','ISTJ'], 
          bads:['INFP', 'ENFP', 'INFJ', 'ENFJ']},    // 활동가형

      {   mbti:"ESFJ", 
          name: ['쾌활한 인간 관계를 갖춘 새내기'], 
          contents:['약속은 무조건 지켜요.','주변 사람을 잘 챙겨줘요.','분위기 파악을 잘 해요.'],   
          goods:['ISFP','ISTP'], 
          bads:['INFP','ENFP','INFJ','ENFJ']},    // 친선도모형

      {   mbti:"ESTJ", 
          name: ['리더십 갖춘 새내기'], 
          contents:['리더십이 있고 체계적이에요.','호불호가 확실해요.','공정하고 논리적이에요.'],     
          goods:['ISFP','ISTP'], 
          bads:['INFP', 'ENFP', 'INFJ', 'ENFJ']},    // 사업가형

      {   mbti:"ENTP", 
          name: ['아이디어 넘치는 새내기'], 
          contents:['토론이나 논쟁은 이겨야해요.','아이디어가 많아요.','자기주장이 강해요.'],     
          goods:['INFJ','INTJ'], 
          bads:['없어용']},    // 발명가형

      {   mbti:"ENFP", 
          name: ['열정최고 새내기'], 
          contents:['사교적이고 에너지가 넘쳐요.','쉽게 질려해요.','호기심이 많아요.'],     
          goods:['INFJ','INTJ'],
          bads:['ISFP', 'ESFP', 'ISTP', 'ESTP', 'ISFJ', 'ESFJ','ISTJ', 'ESTJ']}, //['ISFP', 'ESFP', 'ISTP', 'ESTP', 'ISFJ', 'ESFJ','ISTJ', 'ESTJ']  
            // 스파크형

      {   mbti:"ENFJ", 
          name: ['사람을 이끄는 새내기'], 
          contents:['타인을 사로잡는 카리스마와 매력이 있어요.','사람들과 커뮤니케이션을 잘해요.','공과 사를 확실히 구분해요.'],  
          goods:['INFP','ISFP'], 
          bads:['ESFP', 'ISTP', 'ESTP', 'ISFJ', 'ESFJ', 'ISTJ', 'ESTJ']},    // 언변능숙형

      {   mbti:"ENTJ", 
          name: ['목표를 향해 달려가는 새내기'], 
          contents:['리더 역할을 잘해요.','어딜 가든 누구와 친해질 수 있지만, 굳이 친해지진 않아요.','솔직하면서 단호해요.'],    
          goods:['INFP','INTP'], 
          bads:['없어용']},    // 지도자형

    ]

 

 


 

02. 잘 맞는 & 잘 맞지 않는 MBTI 이름(name)으로 보이게 수정 및 li태그 커스텀

0) 결과물 ( 전 -> 후 - > UI 수정)

전 -> 후 -> UI 수정

1) 기획

-  잘 맞는, 함께 맞춰가는 부분을 MBTI 이름으로 바꿀 것이다.

- 그렇게 하기 위해서는 아래의 코드와 같이 good, bads의 MBTI 리스트를 활용해서 그 mbti의 name을 뽑아낼 것이다.

 mbti:"ENFJ", 
          name: ['사람을 이끄는 새내기'], 
          contents:['타인을 사로잡는 카리스마와 매력이 있어요.','사람들과 커뮤니케이션을 잘해요.','공과 사를 확실히 구분해요.'],  
          goods:['INFP','ISFP'],  // <-이부분을 name으로 뽑아낼거임 
          bads:['ESFP', 'ISTP', 'ESTP', 'ISFJ', 'ESFJ', 'ISTJ', 'ESTJ']},    // <- 이 부분을 name으로 뽑아낼거임

 

 

2) JavaScript의 find를 사용하여 MBTI 얻어내기 

1. 결과 코드

              <div className="mbti_item">
                <div>힝구리에요🤔</div>
                {/* 별로인 mbti 모음 */}
                {mbtiContents.bads.map((val,idx)=>
                  <div className="mbtis" key={idx}>
                      <li>
                      {mbtis.find(item => item.mbti === val).name || "CUTE"}{/* MBTI 내용 없다면 띄우기 */}
                      </li>
                  </div>
                )}
              </div>

 

- find로 item에서 현재 item의 mbti가 bads의 mbti 이름과 같다면, 그 요소의 name을 꺼내는 것으로 코드를 작성했다.

- 만약에, find가 없다면, .?를 사용해서 undefined를 반환하고,  || 를 사용해서 "CUTE" 를 띄워주는 것으로 만들었다.

 

 

2. 중간 오류

2.1. 첫번째 코드

{mbtis.find(item => item.mbti === val) }

- 이렇게 코드를 작성했었는데, 이렇게하면 find했을때 name을 꺼내올 수 없으니 오류가 떴었다. 그래서  .name을 넣어줘서 어떤 요소를 선택할건지 지정해줘서 해결했다.

- 참고자료:  https://noodabee.tistory.com/entry/Objects-are-not-valid-as-a-React-child-해결-방법

 

2.2. 첫번째 코드의 결과 및 문제.

{mbtis.find(item => item.mbti === val).name }

- 이렇게 작성했더니 잘 나오긴 한다. 

  

 

- 근데, 이와 같은 오류가 나왔다. 

 

Cannot read properties of undefined (reading 'name')

TypeError: Cannot read properties of undefined (reading 'name') at http://localhost:3000/mbti_test/static/js/bundle.js:915:62 at Array.map (<anonymous>) at App

 

 

 

 

-  그 이유는 find가 되지 않아, 결국 name도 없다는 것인데 그 이유는 중간중간에 잘 맞지 않는MBTI, 즉 bads 부분이 전혀 없는 MBTI가 있을때도 있기 때문이다.  (마치 ENTJ와 같다)

 

 

2.3. 세번째 코드 (최종)

- 참고자료 : JavaScript | 옵셔널 체이닝 Optional chaining (?.) (velog.io)

{mbtis.find(item => item.mbti === val)?.name || "CUTE"}{/* MBTI 내용 없다면 띄우기 */}

- ?. 를 붙여서, find되어서 요소가 있는 경우에만 name을 찾는걸로 만들었다.

 -- ?.  : ?은 Optional Chaining : ?.앞의 평가 대상이 undefined null이면 에러를 발생시키지 않고 , undefined를 반환한다.

 

- 만약 find가 되지 않아 요소가 없는 경우는 "CUTE"를 출력하게 만들었다.

  -> js에서는 ||를 사용하면 요소가 없는 경우 대신 출력할것을 지정할 수 있기 때문 

 

 

 

 

 

3) li 부분 UI를 점 말고 별( ⭐) 로 수정.

1. 기획 : 이 부분의 <li> 태그의 ● UI가 너무 안 예쁜 것 같다. 그래서 이거를, ⭐(별)로 바꿔줄 것이다.

 - 참고자료

 

 

2. ::before, ::after를 사용하여 scss 수정.

  • ::before : 해당 태그의 내용이 화면에 나타나기 전에, 첫 부분에  content를 출력한다.
  • ::after : 태그의 내용이 화면에 나타난 후에 ,마지막 뒷 부분에 contnet를 출력한다.
    • befoer, after은 'ccontent' 라는 요소가 있는데, 그 안에 contnet를 넣어주면 해당 내용이 들어가게 된다. 

 

 

2.1. 일단, li태그의 Jsx를 확인해보자.

                  <div className="mbtis" key={idx}>  
                      <li className='mbtis-li'>
                      {mbtis.find(item => item.mbti === val)?.name || "CUTE"}
                      </li>ㅈ
                  </div>

-> div가 부모로 mbtis라는 클래스 이름을 가지고, 그안에 li가 matis-li로 클래스 이름을 가지도록 수정했다.

 

 

 

2.2. scss코드를 수정해준다.

        .mbtis{
          box-sizing: border-box;
          padding-left: 10px;
          list-style: none; // 스타일을 없애준다. (점을 없앰)
          margin-top: 2px;
          margin-bottom: 2px;
          font-weight: 545;
          font-size: 10px;
          
          .mbtis-li::before { // li 전에, 별을 넣어주자.
            content: "⭐ ";
          }
        }

 

- mbti에 list-style : none으로, 스타일을 없애서 점이 생기는걸 사라지게 만들었다.

- mbtis-li :: before를 사용해서, 리스트 아이템이 생기기 전에, 그 앞에 content로 ⭐을 넣어줬다.

 

 

3. 별이 추가된 결과


03. MBTI에 맞는 그림(이미지 ) 삽입

0) 그림(이미지 준비)

- 이번에는 MBTI에 들어갈 그림들을 직접 그려줬다.

- 그리고 images폴더를 하나 만들어서, 그 경로로 이미지들을 넣어줬다.

 

 

1) 이미지 코드 추가.

1. 이미지 import 해주기

import mainImage from './images/main.png';
import istpImage from "./images/istp.jpg";
import isfpImage from "./images/isfp.jpg";
import istjImage from "./images/istj.jpg";
import isfjImage from "./images/isfj.jpg";
import infjImage from "./images/infj.jpg";
import intjImage from "./images/intj.jpg";
import infpImage from "./images/infp.jpg";
import intpImage from "./images/intp.jpg";
import esfpImage from "./images/esfp.jpg";
import estpImage from "./images/estp.jpg";
import esfjImage from "./images/esfj.jpg";
import estjImage from "./images/estj.jpg";
import entpImage from "./images/entp.jpg";
import enfpImage from "./images/enfp.jpg";
import enfjImage from "./images/enfj.jpg";
import entjImage from "./images/entj.jpg";

- 이렇게 하나하나 import 해줬는데, 이걸 하면서 이미지를 한번에 import 할 수 있는 방법은 없을까.. 라는 생각을 많이 했다. 그래서 구글에 검색도 많이 해봤는데 딱히 방법을 찾지 못했다.. 아시는 분은 댓글로 공유 부탁드립니다 🥹

 

 

 

2. mbti 컨텐츠에 image key 추가. 

 

      {   mbti:"ENFP", 
          name: ['열정최고 새내기'], 
          contents:['사교적이고 에너지가 넘쳐요.','쉽게 질려해요.','호기심이 많아요.'],     
          goods:['INFJ','INTJ'],
          bads:['ISFP', 'ESFP', 'ISTP', 'ESTP', 'ISFJ', 'ESFJ','ISTJ', 'ESTJ'],
          image:enfpImage,
        }, //['ISFP', 'ESFP', 'ISTP', 'ESTP', 'ISFJ', 'ESFJ','ISTJ', 'ESTJ']

-  mbti 컨텐츠에 image를 넣을 key를 추가해준다. 그래서 이 이미지를 나중에 결과 페이지에 출력할 것이다.

- 전체 MBTI Contensts 코드 보기 (더보기 클릭!)

더보기

- 전체 MBTI Contenst 코드 보기 : 

    let mc = [
      {   mbti:"ISTP", 
          name: ['자유로운 영혼의 새내기'], 
          contents:['벼락치기 진짜 잘해요.','논리적이고 뛰어난 적응력을 가지고 있어요.','처음엔 낯을 가리지만 친해지면 장난도 잘 쳐요.'],   
          goods:['ESFJ', 'ENTJ'], //ENFP, ENTJ
          bads:['INFP, ENFP, INFJ, ENFJ'],
          image:istpImage,
        },    // 백과사전형

      {   mbti:"ISFP", 
          name: ['감성적인 새내기'], 
          contents:['타인 배려를 잘하지만 눈치를 많이 봐요.','순하고 정이 많아요.','상대방의 이야기를 잘 들어줘요.'],   
          goods:['ENFJ','ESFJ','ESTJ'], //INFJ, INTJ
          bads:['INFP', 'ENFP', 'INFJ'],
          image:isfpImage,
        }, //default    // 성인군자형

      {   mbti:"ISTJ", 
          name: ['목표를 향해 노력하는 새내기'], 
          contents:['책임감이 높고, 신중해요.','한번 시작한 일을 끝까지 해내요.','약속 어기는건 싫어요.'],     
          goods:['ESFP', 'ESTP'], 
          bads:['INFP', 'ENFP', 'INFJ', 'ENFJ'],
          image:istjImage,
        },    // 과학자형

      {   mbti:"ISFJ", 
          name: ['친절하고 섬세한 새내기'], 
          contents:['나서는건 싫어하지만 관심받는건 좋아요.','성실하고 온화해요.','눈치가 빠르고 센스있어요.'],       
          goods:['ESFP','ESTP'], 
          bads:['INFP', 'ENFP', 'INFJ', 'ENFJ'],
          image:isfjImage,
        },    // 권력형

      {   mbti:"INFJ", 
          name: ['따뜻하고 통찰력있는 새내기'], 
          contents:['혼자 쉬는 시간이 필요해요.','인간관계에 통찰력이 뛰어나서, 눈치가 빨라요.','계획적인걸 좋아해요.'],     
          goods:['ENFP','ENTP'], 
          bads:['ISFP', 'ESFP', 'ISTP', 'ESTP', 'ISFJ', 'ESFJ', 'ISTJ', 'ESTJ'],
          image:infjImage,
        },    // 예언자형

      {   mbti:"INTJ", 
          name: ['미래를 준비하는 새내기'], 
          contents:['자립심이 강해요.','효율적이에요.','도움이 필요한 사람에게는 차별없이 잘 도와줘요.'],     
          goods:['ENFP','ENTP'], 
          bads:['INFP', 'INFJ', 'ENFJ', 'INTJ', 'ENTJ', 'INTP'],
          image:intjImage,
        },    // 과학자형

      {   mbti:"INFP", 
          name: ['창의적인 새내기'],
          contents:['공감을 잘해줘요','자주 우울하지만, 티를 안내요.','따뜻한 마음씨를 가져, 사람들과 잘 어울려요.'],   
          goods:['ENFJ','ENTJ'],  // * ENFJ, ENTJ
          bads:['ISFP', 'ESFP', 'ISTP', 'ESTP', 'ISFJ', 'ESFJ', 'ISTJ', 'ESTJ'],
          image:infpImage,
        }, // * ISFP, ESFP, ISTP, ESTP, ISFJ, ESFJ, ISTJ, ESTJ
          // 잔다르크형

      {   mbti:"INTP", 
          name: ['지적인 호기심을 가진 새내기'], 
          contents:['신중하고, 논리적이에요.','감정기복이 적어요.','친해진 사람에게는 정말 잘해줘요.'],   
          goods:['ENTJ','ESTJ'], 
          bads:[''],
          image:intpImage,
        },    // 아이디어형

      {   mbti:"ESFP", 
          name: ['즐거움을 전하는 새내기'], 
          contents:['자존감이 높아요.','정이 많아서 거절을 잘 못해요.','평화로운게 좋아요.'],       
          goods:['ISFJ','ISTJ'], 
          bads:['INFP', 'ENFP', 'INFJ', 'ENFJ'],
          image:esfpImage,
        },    // 사교형

      {   mbti:"ESTP", 
          name: ['모험을 즐기는 새내기'], 
          contents:['친화력 최강!','직설적인 말투로 오해받을때가 있지만, 절대 나쁜 의도가 아니에요.','재미있는 이야기로 모임을 주도해요.'],    
          goods:['ISFJ','ISTJ'], 
          bads:['INFP', 'ENFP', 'INFJ', 'ENFJ'],
          image:estpImage,
        },    // 활동가형

      {   mbti:"ESFJ", 
          name: ['쾌활한 인간 관계 새내기'], 
          contents:['약속은 무조건 지켜요.','주변 사람을 잘 챙겨줘요.','분위기 파악을 잘 해요.'],   
          goods:['ISFP','ISTP'], 
          bads:['INFP','ENFP','INFJ','ENFJ'],
          image:esfjImage,
        },    // 친선도모형

      {   mbti:"ESTJ", 
          name: ['리더십 갖춘 새내기'], 
          contents:['리더십이 있고 체계적이에요.','호불호가 확실해요.','공정하고 논리적이에요.'],     
          goods:['ISFP','ISTP'], 
          bads:['INFP', 'ENFP', 'INFJ', 'ENFJ'],
          image:estjImage,
        },    // 사업가형

      {   mbti:"ENTP", 
          name: ['아이디어 넘치는 새내기'], 
          contents:['토론이나 논쟁은 이겨야해요.','아이디어가 많아요.','자기주장이 강해요.'],     
          goods:['INFJ','INTJ'], 
          bads:[''],
          image:entpImage,
        },    // 발명가형

      {   mbti:"ENFP", 
          name: ['열정최고 새내기'], 
          contents:['사교적이고 에너지가 넘쳐요.','쉽게 질려해요.','호기심이 많아요.'],     
          goods:['INFJ','INTJ'],
          bads:['ISFP', 'ESFP', 'ISTP', 'ESTP', 'ISFJ', 'ESFJ','ISTJ', 'ESTJ'],
          image:enfpImage,
        }, //['ISFP', 'ESFP', 'ISTP', 'ESTP', 'ISFJ', 'ESFJ','ISTJ', 'ESTJ']  
            // 스파크형

      {   mbti:"ENFJ", 
          name: ['사람을 이끄는 새내기'], 
          contents:['타인을 사로잡는 카리스마와 매력이 있어요.','사람들과 커뮤니케이션을 잘해요.','공과 사를 확실히 구분해요.'],  
          goods:['INFP','ISFP'], 
          bads:['ESFP', 'ISTP', 'ESTP', 'ISFJ', 'ESFJ', 'ISTJ', 'ESTJ'],
          image:enfjImage,
        },    // 언변능숙형

      {   mbti:"ENTJ", 
          name: ['목표를 향해 달려가는 새내기'], 
          contents:['리더 역할을 잘해요.','어딜 가든 누구와 친해질 수 있지만, 굳이 친해지진 않아요.','솔직하면서 단호해요.'],    
          goods:['INFP','INTP'], 
          bads:[''],
          image:entjImage,
        },    // 지도자형

    ]

 

3) 이미지를 출력하는 코드 추가.

            <div className='result_title_Layout'>
              <div>나의 새내기 유형은?</div>
              <div>{mbtiContents.name}</div> 
              <div>{mbtiContents.mbti}</div>
              <img src={mbtiContents.image} alt="사진"/> // 수정된 부분!
            </div>

- 결과 페이지에서, <img src={mainImage} alt="사진"/> 이 부분에서 src를 {mbtiCntents.image} 로 바꿔줬다. 

- 이렇게하면 jsx로 해당 mitiContnents.의 imgae를 뽑아낼 수 있다.

 

4) 이미지 삽입 결과

 

 


04. 폰트 수정 및 적용

☘️ 참고 자료

1) GoogleFonts에서 폰트 찾아보기 

1. 구글 Fonts에 들어간다.

  - 구글 Fonts 사이트: Browse Fonts - Google Fonts

 

2. 원하는 언어와 글꼴을 선택한다. 나는 Poor Stroy를 선택했다.

 

 

3. 코드를 보는 부분을 클릭해서, Web 부분의 @Import를 클릭한다. ( Selection Embed Code - Google Fonts

- 그러면 Web에서 쓸 수 있는 Style과 CSS 코드를 확인할 수 있다.

- 이제 이 코드를 사용해서 폰트를 적용할 것이다.

@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@700&family=Poor+Story&display=swap')

.poor-story-regular {
  font-family: "Poor Story", system-ui;
  font-weight: 400;
  font-style: normal;
}

 

 

 

 

2) App.scss에 폰트 적용하기

1. App.scss의 제일 위에 @import 코드를 삽입한다.

@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@700&family=Poor+Story&display=swap');

 

 

 

2. 그리고, 메인 컨테이너 (부모)에 해당 코드를 삽입해줬다. 나의 경우는 .mbtiLayout 이다.

.mbtiLayout{
	// .. 생략
  font-family: "Poor Story", system-ui;
  font-weight: 400;
  font-style: normal;

- font를 pooryStrot로 하고, 굵기는 400, 스타일은 기본으로 하겠다는 것이다!

- 이렇게 하면 모든 부분에 글씨체가 적용될 것!

 

 

 

3) 폰트 적용 결과

- 귀여운 폰트가 적용됐다! 

 

 

 

 

05. 깃허브 (Git/ GitHub) 배포 

-깃허브 io로 배포한다.

- 배포된 사이트 :   React App (ji-ny.github.io)

 

1. 터미널

1. 내가 만든거 add 해놓기.
$ git add .

2. 커밋하기
$ git commit -m "feat : 결과페이지 완성"


3. 원격 저장소 main에 push하기.
$ git push -u origin dev

 

 

2. 깃허브

5. dev -> main으로 pullrequest

6. dev -> main 병합 (merge)

 

 

3. 터미널

7. 배포 진행
$ npm run deploy

 

 

 

 


06. 향후 계획 

1. 링크를 공유했을때 미리보기를 제목과 썸네일을 수정할 것이다.

- 왜냐하면 깃허브 링크를 공유했을때,그냥 'React APP'으로만 나오기 때문이다.

 

 

2. N명이 참여했습니다! 부분의 참여수를 어떻게 저장을 할것인지 찾을 것이다.

 

 


- 깃허브 사이트

Ji-ny/mbti_test: React 기반 mbti_test입니다. (github.com)

 

GitHub - Ji-ny/mbti_test: React 기반 mbti_test입니다.

React 기반 mbti_test입니다. Contribute to Ji-ny/mbti_test development by creating an account on GitHub.

github.com

 

- 깃허브 배포 사이트

Ji-ny/mbti_test: React 기반 mbti_test입니다. (github.com)