저희 학교 소프트웨어학부 학과 학생들의 졸업 방법은 크게 두 가지가 있는데요.

 

하나는 졸업 프로젝트, 또 하나는 TOPCIT 시험입니다.

 

사실 저 같은 경우는 TOPCIT을 접수할 때 이미 졸업 프로젝트가 마무리 되어가고 있었기 때문에 졸업 요건에 대한 큰 걱정은 없었습니다.

 

하지만 학교에서 TOPCIT을 왜 이렇게 적극적으로 격려하는 지, 응시료 지원 뿐만 아니라 추가 장학금도 주더라고요.

 

TOPCIT만 응시하면 응시료 지원 + 추가 장학금 + 200점 넘을 시 또 추가 장학금을 준다고 하길래 냉큼 신청했습니다ㅎㅎ;

 

물론 큰 금액은 아니지만 시험 한 번 보는 것 치고는 가성비 있는 벌이이기도 하고, 학점이 안 좋은 저에게 공부한 능력을 다시 점검하는 기회이기도 하고, 정말 혹시 모를 보험을 위한 졸업 요건이기도 하기 때문에 즐거운 마음으로 응시했습니다.

 

 


 

 

사실 전공생이라면 아는 지식으로 봐도 졸업요건(150점)은 넘는다는 얘기를 많이 들었기 때문에 공부에 대한 큰 부담은 없었습니다. 

 

학교에서 공부를 격려하는 마음으로 TOPCIT 공식 홈페이지에서 제공하는 학습 자료를 제본해줬지만 양이 너무 방대해서 ... 쉽게 열어 볼 엄두가 나지 않았어요.

 

 

TOPCIT 에센스

 

학습가이드 > 학습자료 | TOPCIT

 

www.topcit.or.kr

 

 

하지만 문제를 풀면서 과목들이 비슷해 어느 정도 커버가 되겠다는 생각을 했기 때문에 교재가 너무 두꺼워서 공부하기 어렵겠다는 생각이 드시는 분들은 두 개를 한꺼번에 해결하기 위해 정처기를 공부하셔도 되겠네요👍

 

 


 

 

탑싯은 단순 성적 뿐만 아니라 종합 성취도, 산업계 부합도, 정체영역 진단 결과, 점수 분포 등 총체적인 결과를 분석해서 함께 제공해줍니다.

 

미천한 저의 점수를 공개해볼게요.

 

 

 

공부를 좀 했다면 학교 1위를 해서 백만원을 받을 수 있지 않을까? 라는 생각을 점수 나오는 날 아침 2분 정도 했습니다만 상위 10%의 벽부터가 꽤 높아요;;;

 

저는 총 65문제 중에 38문제를 받아 435점을 받았습니다. 가엾게도 반타작도 못했네요...

 

 

 

이 정도면 개발자할만하다는 거 맞겠죠ㅎㅎ;?? 별 의미가 있나 싶지만 산업계 부합도보다는 가산점 최소 기준인 3수준을 채웠다는 게 정말 기뻐서 후다닥 TOPCIT 가산점을 인정해주는 기업이 남아있나 찾아봤는데 

 

 

없는 것 같은데

 

 

 

 

빨간색이 저고 파란색이 평균입니다

 

이렇게보면 평균보다는 앵간 높은 결과가 보이죠ㅎㅎ? 이 정도 나온 것만으로도 엄청 만족입니다

 

개인적으로 데이터랑 보안쪽이 너무 어렵다고 생각했는데 역시나 ^_^

 

제가 윤리적인 사람인거에 감사하며 살아가야겠어요(사실 이 과목은 그냥 문해력 싸움이었던 것 같기도 하다)

 


 

이렇게 저의 TOPCIT 회고 (라기 보다는 걍 점수공개) 를 마칩니다

 

아직 학생이라면 반드시 열심히 공부해서 학교 1위를 노리는 게 짱인 것 같네요

 

TOPCIT이 다시 살아나서 어디든 하나라도 가산점을 줬으면 좋겠네요!!

 

'회고' 카테고리의 다른 글

약 5개월 간의 졸업 작품 프로젝트 개발 회고  (0) 2024.11.07
인생 첫 협업 프로젝트 회고  (0) 2024.03.04

 

안녕하세요, 오늘은 막학년 여름 방학을 쏟은 저의 졸업작품에 대해 회고해보겠습니다.

 

프로젝트명은 '체크메이트'로, 교내 행사 및 이벤트 통합 관리를 위한 자동화 서비스라는 부제를 갖고 있습니다.

 

교내 비교과의 출석 관리 및 서류화를 담당해 주시는 교직원 분들의 불편함을 해소하고자하는

아이디어에서 시작된 프로젝트입니다.

 

백엔드 한 명, 프론트 엔드 두 명. 총 세 명이 기획하며 프로젝트를 꾸려나갔으며 대략적인 디자인은 디자이너를 구해 따로 디자인을 맡았습니다.

 

저는 프론트엔드를 맡았으며 PWA 전환 작업, 구글 로그인 연결, 온보딩 페이지, 행사 등록 기능 구현, 전체 통계 기능 구현 등의 작업을 담당했습니다.

 

개념만 알고 시도해보지 못한 작업들을 시도해보고 스스로의 부족한 부분을 파악할 수 있는 의미있는 프로젝트였습니다.

 

 


 

1. PWA

https://asmallroom.tistory.com/15

 

이미 한 번 포스팅한 적이 있다. 기존에 웹앱을 만들기 위해 웹페이지를 계획하고 서비스를 만들었다. 

서비스 사용 과정에 몇 가지 에러 사항이 존재했는데,

 

1. 앱이 아니기에 체크메이트에 바로 들어가기가 애매했다는 점

 

2. 웹사이트이기 때문에 아이패드 사용 시 도구 막대 때문에 화면이 움직이는 불편함

 

3. 연결이 불안정할 때 API 연결이 에러 처리가 떠서 원인 파악이 불분명했다는 점

 

초반에는 사용자 테스트 때마다 직접 가서 사용 상황을 보고 있었기에 대처나 설명이 가능했지만 우리의 목표는 사용자들끼리 오롯이 전체 과정을 진행하는 것이였기 때문에 이 불편함을 해소해야 했습니다.

 

PWA에 대해서는 자세히 알고 있지 못안녕하세요, 오늘은 막학년 여름 방학을 쏟은 저의 졸업작품에 대해 회고해보겠습니다.

 

프로젝트명은 '체크메이트'로, 교내 행사 및 이벤트 통합 관리를 위한 자동화 서비스라는 부제를 갖고 있습니다.

 

교내 비교과의 출석 관리 및 서류화를 담당해 주시는 교직원 분들의 불편함을 해소하고자하는

 

아이디어에서 시작된 프로젝트입니다.

 

백엔드 한 명, 프론트 엔드 두 명. 총 세 명이 기획하며 프로젝트를 꾸려나갔으며 대략적인 디자인은 디자이너를 구해 따로 디자인을 맡았습니다.

 

저는 프론트엔드를 맡았으며 PWA 전환 작업, 구글 로그인 연결, 온보딩 페이지, 행사 등록 기능 구현, 전체 통계 기능 구현 등의 작업을 담당했습니다.

 

개념만 알고 시도해보지 못한 작업들을 시도해보고 스스로의 부족한 부분을 파악할 수 있는 의미있는 프로젝트였습니다.

 

1. PWA

 

https://asmallroom.tistory.com/15 

 

이미 한 번 포스팅한 적이 있다. 기존에 웹앱을 만들기 위해 웹페이지를 계획하고 서비스를 만들었다. 

 

서비스 사용 과정에 몇 가지 에러 사항이 존재했는데,

 

1. 앱이 아니기에 체크메이트에 바로 들어가기가 애매했다는 점

 

2. 웹사이트이기 때문에 아이패드 사용 시 도구 막대 때문에 화면이 움직이는 불편함

 

3. 연결이 불안정할 때 API 연결이 에러 처리가 떠서 원인 파악이 불분명했다는 점

 

초반에는 사용자 테스트 때마다 직접 가서 사용 상황을 보고 있었기에 대처나 설명이 가능했지만 우리의 목표는 사용자들끼리 오롯이 전체 과정을 진행하는 것이였기 때문에 이 불편함을 해소해야 했습니다.

 

PWA에 대해서는 자세히 알지 못했지만 컴퓨터를 통해 엑셀 파일과 행사의 이미지를 넣는 등록 과정을 거치고, 행사장에 아이패드를 설치해 출석하게 할 수 있는 방법을 충족할 수 있는 저희에게 필요한 솔루션이었습니다.

 

 

2. 구글 로그인 

3. Recoil 

4. Chart.js

5. Media-Query

 


 

저의 졸업 프로젝트였던 '체크메이트'는 아래의 주소에서 더 자세히 확인하실 수 있습니다.

 

https://github.com/CheckMate-sookmyung/CheckMate-client

 

다음 프로젝트는 함께 일하는 팀원들을 위한 코드를 작성하고, 사용자의 편의성에 더욱 신경을 쓰며, 디테일에 신경을 쓸 수 있도록 개선된 프로젝트를 만들겠습니다.

 

 

 

 

 

'회고' 카테고리의 다른 글

소프트웨어 역량검정 시험 [TOPCIT] 응시 후기  (0) 2024.11.11
인생 첫 협업 프로젝트 회고  (0) 2024.03.04

SurveyMate 프로젝트 회고 내용

2024로 넘어가는 겨울방학 동안 인생 첫 프로젝트를 진행했다. 한 학기 동안 배운 프론트 지식을 확실히 함도 있었고, PM과 디자이너까지 포함하는 프로젝트의 기회는 정말 귀하다고 생각되어 즐겁게 참여할 수 있었다.

 

UMC 5기 웹으로 참여하면서 기본적인 웹사이트를 만드는 데 필요한 언어들을 배웠기에 지식을 잘 써보자는 마음가짐으로 참여했다. 실제로 두 번의 지원 중 두 번째로 참여했던 프로젝트에 바로 참여할 수 있었다. 프로젝트에 참여하면서 중요하게 여긴 포인트는 세 가지이다. 웹앱 구현. 반응형. API. 결론적으로는 잘 배웠고 해낸 것 같다. 정말 감사하게도 프론트는 모두 첫 프로젝트였던 것에 반해 백 분들이 다들 경험이 있어 잘 이끌어주셨다. Swagger도 제대로 사용 못 해 당황한 프론트들을 많이 이끌어주셨다. 첫 프로젝트여서 그런가 많이 배웠다. 협업하는 법도, 연결하는 법도, 코드 짜는 법도. Git 쓰는 법도 제대로 배운 것 같다.

 

이 프로젝트는 PM 1명, 디자이너 1명, 프론트 4명과 백 3명으로 진행되었다.

 


 

 

1 .이메일 템플릿 제작

 

이번 프로젝트를 하면서 가장 노력한 점은 일단 시도해 보자는 마음가짐이었다. 혹여나 할 일이 하나 떨어지면 일단 해 보자는 마음으로 제가 할게요를 외쳤다. 이메일 템플릿이 그 첫 번째 도전이었다.

 

이 프로젝트의 회원가입은 학생 사용자와 일반 사용자를 구분하기 위해 학교용 계정을 구분하는 기능이 필요했다. 그러기 위해 단순 정규식 구분이 아닌 보안까지 신경 쓰기 위한 이메일을 통행 인증번호를 받는 형식으로 사용했다. 이메일로 딸랑 인증번호 6자를 보낼 수는 없으니 최소한의 형식을 갖춘 이메일 템플릿을 만들기로 했다. 평소에도 뉴스레터에 관심이 많은 터라 도움이 될 것 같아 내가 만든다고 해 봤다.

 

근데 놀랍게도 생각보다 정보가 없었다... 결론적으로는 html만을 사용해서 템플릿을 제작하고 백앤드에 넘겨야 했다. 

 

 

html 만을 사용해서 코드를 작성하는 것은 꽤 어려웠기 때문에 mjml 코드를 사용했다. mjml은 mjml 코드를 작성해 템플릿을 완성하면 자동으로 html 코드로 치환해 준다. 코드를 작성하기 위한 코드를 배워야 하는 것이므로 상당히 어이없고 귀찮아 보이지만... mjml은 다행히 사용법을 30분 이내로 마스터할 정도로 굉장히 쉬웠다. 아래의 라이브 코드에서 mjml로 원하는 템플릿을 만들고 html 코드로 변환해 그대로 가져다가 사용하면 된다. 

 

 

 

 

 

 

2. 처음으로 만든 반응형 페이지

 

반응형을 의식하고 페이지를 만든다는 것이 생각보다 힘든 일이었다. 그래도 애매하개 알고 있던 미디어 쿼리, 뷰포트 사용법에 대해 알아갈 수 있었다.

 

1) 상단바 기본 컴포넌트를 만들면서 애매했던 부분이 있었다. 공통 마진을 적용하기 위해 전역 스타일을 지정해 놨는데 상단바만큼은 기본 마진에서 제외되야 했기 때문이다. 이 부분을 해결하면서 보기만 했었던 calc 개념을 적극적으로 사용할 수 있었다. 

margin-left: calc(-50vw + 50%);

 

2) input type = file 의 어려움. 프로필 사진의 오른쪽 아래에 있는 보라색 버튼을 클릭하면 갤러리에서 사진을 선택할 수 있다. 문제는 input 태그의 타입을 지정하는 것만으로도 갤러리에 접근하는 것은 가능하지만 기본 라벨을 꾸미기 위해서는 input의 기본 css를 없앨 수 없기 때문에 아예 display: none으로 바꾼 후 label 태그를 추가해 input의 label을 따로 지정해야 한다. 

html에서는 for을 쓰면 된다고 한 것 같은데 리액트에서는 htmlFor을 써야한다고 해서... 뭔가 복잡했다.

+ accept 속성으로 파일 형식 지정이 UX에 더 좋다고 한다.

 

3) 처음에 개념을 빠르게 건너뛰면서 공부를해서 flexbox나 position에 대한 개념이 추상적이었는데 이번에 제대로 공부했다. 기본 프로필 사진과 변경버튼의 위치를 고정한 상태로 반응형이 되게 위치하는 게 헷갈렸는데 wrapper 안에 두 컴포넌트를 position으로 고정한 이후에 위치를 조정함으로 해결했다.

 

 

3. 회원가입 

지금 보면 웃긴데 API 연결을 스스로 처음 해 봐서 신나서 캡처했다.. 여기서 공부한 건 1) Axios 문법 2) Axios에 담거나 받는 파일의 형식들 분류와 방법 3) 두 페이지에 걸친 API 연결 시 인자를 넘기는 방법 등 ; <navigate / >, <link /> 태그에 보내고 싶은 state을 담아서 보낼 수 있다는 게 신기했다.

 

 

4. 바텀시트 만들기

 

 

나름대로 어려웠던 하나만 클릭되는 버튼 만들기... 여기서 중요한 하나를 클릭할 시 이미 클릭돼있던 컴포넌트는 클릭이 해제되야 한다는 것. 

한참을 해매다가 selected 옵션을 통해 클릭한 것을 바로바로 selected로 지정하는 코드를 썼다. daybutton을 하나로 묶기 위해 아래처럼 코드를 묶어서 작성하고 변수에 의해 버튼이 생겨나게 했다! 

 {[1, 2, 3, 4, 5, 6, 7].map((day) => (
          <DayButton
            key={day}
            onClick={() => handleDayButtonClick(day)}
            selected={day === selectedDay}
          >
            <DayButtonText>{day}일</DayButtonText>
          </DayButton>
        ))}

 

 

 

 

바텀시트는 뒷면의 흑백처리되는 부분, 아래의 바텀시트, 그 안의 인자 모두 따로 컴포넌트로 만들었다. 

//설문등록 확인 바텀시트
function PointBottom({ point }) {
  return (
    <>
      <BackgroundBottomSheet>
        <BottomSheetWrapper>
          <BottomSheetInfo>
            <InputLabel>설문등록 확인</InputLabel>
            <ProcessExplain>
              {point}포인트를 사용하여 <br />
              설문을 등록하시겠습니까?
            </ProcessExplain>
            <img
              src={Warning}
              alt='warning'
            />
          </BottomSheetInfo>
          <BottomButtonWrapper>
            <CancelButton>
              <C.ButtonText>취소</C.ButtonText>
            </CancelButton>
            <ConfirmButton>
              <C.ButtonText>등록</C.ButtonText>
            </ConfirmButton>
          </BottomButtonWrapper>
        </BottomSheetWrapper>
      </BackgroundBottomSheet>
    </>
  );
}

//바텀시트 스타일 컴포넌트

const BackgroundBottomSheet = styled.div`
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  background-color: rgba(0, 0, 0, 0.3);
  display: flex;
  align-items: flex-end;
  z-index: 1;
`;

const BottomSheetWrapper = styled.div`
  background-color: #ffffff;
  width: 100vw;
  margin-left: calc(-50vw + 50%);
  border: none;
  border-radius: 20px 20px 0px 0px;
  align-items: center;
`;

const BottomSheetInfo = styled.div`
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  padding: 5%;
  text-align: center;
`;

const BottomButtonWrapper = styled.div`
  display: flex;
  flex-wrap: wrap;
  justify-content: space-evenly;
  padding-bottom: 3vh;
`;

const CancelButton = styled.button`
  border-radius: 10px;
  border: 2px solid #cfc8ff;
  background: var(--white, #fff);
  box-shadow: 0px 2px 11px 0px rgba(0, 0, 0, 0.2);
  color: rgba(207, 200, 255, 1);
  width: 45vw;
  height: 5vh;
  justify-content: center;
  align-items: center;
  position: flex;
  cursor: pointer;
`;

const ConfirmButton = styled.button`
  border-radius: 10px;
  background: #6046ff;
  color: var(--white, #fff);
  width: 45vw;
  height: 5vh;
  justify-content: center;
  align-items: center;
  border: none;
  box-shadow: 0px 2px 11px 0px rgba(0, 0, 0, 0.2);
  cursor: pointer;
`;

 

 

자잘한 기능들을 해 보면서 상태 관리에 집중하면서 리액트를 더 배우고 싶다고 느꼈다. 작업사항은 더 있지만 첫 프로젝트에서 느낀 감상들을 늘어놓고 싶어서 회고를 적게 되었다. 인생 첫 프로젝트라 정말 느리게 조금씩 나아갔지만 많은 도움을 받고 많은 배움을 얻은 것 같다. 프로젝트와 함께 한 학기 내내 스터디를 진행한 UMC도 끝이 났다. 앞으로 첫 프로젝트를 양분 삼아 더 나아갈 수 있으면 좋겠다 

 

회고 끝 !

+ Recent posts