본문 바로가기
개발 일기

2023년 회고록

by 모선효 2024. 5. 30.

velog에서 작성했었는데 이번에 tistory로 이사를 고민하게 돼서 지금 작성하게 됐습니다!

2023년 회고록 시작하겠습니다.

 

코테이토 6기

기간 : 2023.03.02 ~ 2023.07.01
활동 내역: 스프링 스터디 / 파이썬 알고리즘 스터디

연합 동아리 첫 도전이었습니다. 지원서 > 면접 과정을 거쳐 합격하여 6기로 활동했습니다. 백엔드와 알고리즘 공부를 다른 사람들과 함께 진행하면서 꾸준히 하고 싶어 2개의 스터디에 들어가 공부했습니다.

스프링 스터디는 김영한 강사님의 스프링 입문과 핵심 원리 강의를 수강하고, 매주 모여서 공부한 내용을 발표하고, 모르는 걸 질문하는 방식으로 진행했습니다. 그리고 마지막에는 각자 2주 간 간단한 게시물을 만들었습니다. NestJS를 배우기 전에는 이해가 안 되는 부분이 많았는데, 병행학습을 해보니 spring 이해에 많은 도움이 된 것 같습니다. 하지만 복습이 꼭 필요해보여서 겨울방학 때 복습했습니다.

알고리즘 스터디는 이틀에 최소 한 문제는 풀도록 했습니다. 혼자 할 때보다 확실히 책임감도 더 느껴지고, 더 잘하는 분한테서 조언도 받고, 제가 해보는 시간도 가져봐서 많이 도움됐습니다.


명지대학교(자연) 멋쟁이 사자처럼 11기

기간 : 2023.03.25 ~ 2023.12.23
활동 내역: 서버 세션 / 아이디어톤 / 해커톤 / CS 추가 세션

1) 서버 세션

매주 토요일마다 모여서 멘토분들의 강의를 들으면서 NestJS에 대해 학습했습니다. 서버를 배워보는 게 처음이라 이해하는 게 정말 어려웠는데, 다른 사람들이 작성한 코드들을 하나씩 해석해보면서 공부하고, 공식 문서와 블로그를 보면서 공부해보니 점점 NestJS에 익숙해질 수 있었습니다. 약 3개월의 짧은 시간이었지만, 회원가입/로그인, CRUD, 배포(AWS Lightsail/Git Bash/pm2), DB 등 기본적인 지식들을 익혔습니다.

2) 아이디어톤

서비스 설명

  • 서비스 한 줄 소개 : 전세 사기 예방을 위한 정보 제공 및 상담서비스
  • 기획 의도 : 최근 전세 사기가 급증함에 따라 나라에서 정책 개편을 계획하고 있습니다. 하지만 개편이 돼도 임차인들은 정보를 얻기가 어렵고 전세 계약이 생소한 법률과 결부되어 있기 때문에 전세 사기 범죄에 쉽게 노출 될 위험이 있고, 전세 계약에 대한 불안이 남아있을 것으로 생각하여 해당 서비스를 기획하게 됐습니다.

느낀점

전세 사기에 대해 아는 점이 없어서 쉽지는 않았습니다. 문제점 정의를 정확히 하고, 해당 문제점을 해결할 수 있는 방법이 무엇일지 팀원들과 열심히 고민하여 기획했습니다.

3) 해커톤 : MoEat (아동복지카드 가맹점 위치 제공 서비스)

GITHUB

진행 과정

약 3주간의 시간 동안 진행됐는데, 기획부터 개발까지 진행하려고 하니 정말 바빴던 시간을 보냈던 것 같습니다. 주제는 디지털 격차를 줄일 수 있는 서비스 를 만드는 것이었는데, 쉽게 접근할 수 없어서 기획 단계에서 정말 힘들었던 기억이 있습니다..

저희 조는 아동 복지 카드를 사용하는 사람들을 위해 가맹점 위치 조회 서비스를 만들기로 했습니다. 이미 존재하는 서비스들은 UI/UX가 사람들이 보기에 많이 불편해보였습니다. 그리고 나라에서 제공해주는 데이터는 전화번호, 주소, 운영여부 등의 정보가 잘못된 경우가 많았습니다. 그래서 보기 쉬운 UI/UX와 정확한 정보에 초점을 맞춰서 프로젝트를 진행했습니다.

서버는 데이터 전처리 후 정확한 정보만 뽑아내기를 해야 했으며, 저 포함 2명에서 진행했습니다. 저는 데이터 전처리를 맡았습니다.

  1. DB 구조 짜기 : 직접 짜보는 건 처음이라 정규화를 지키지 않은 채 테이블을 짰습니다. 하지만 멘토의 도움으로 정규화 강의를 본 뒤, 팀원과 상의하면서 완성했습니다..! 정규화에 대해 정리한 글은 추후에 올리겠습니다.
  2. 데이터 전처리 과정 및 문제점&해결: 카카오 API를 연동하여 진행했습니다. 가맹점 이름, 도로명주소를 넣으면 가맹점 정보를 가져오는 API를 작성했는데, 정보가 나오지 않으면 폐점한 것으로 처리하였습니다. 하지만 나라에서 제공하는 데이터 속에서 잘못된 도로명주소 값이 있다는 걸 추후에 발견하게 됐고, 다른 API를 조사해보다 결국 가맹점 명만으로 API를 호출하여 사용했습니다. 타 가맹점의 정보를 가져올 수 있을지도 모른다는 점을 고려하여 처음에는 좌표값으로 제한을 두었다가, 주소가 특정 지역명으로 시작하는 경우에만 정보를 가져오도록 수정했습니다.
  3. API 호출 : 이전까지는 API를 불러오는 걸 어떻게 할지 모르겠어서 API 소리만 들으면 무서웠는데, 이번 기회를 통해 구글링을 통해 API 호출 방법을 배워 사용해봤습니다. API 문서를 잘 써야한다는 점 느꼈고, Axios 함수에 대해 학습할 수 있었습니다. 이때 배운 API 호출 방법은 sw 경진 대회에서 fastAPI와 NestJS를 연동하면서 바로 사용해볼 수 있었습니다! 정말 소중한 기회였어요🥹
    하지만 API 관련해서 겪은 문제점이 한 가지 있습니다. 가맹점 데이터가 총 101077개 였는데, 호출할 때 사용할 수 있는 데이터는 약 200개 정도만 가능했습니다.. 당시에는 직접 노가다로 200개씩 잘라서 사용했는데, 이 부분은 python을 사용하는 프레임워크를 사용하여 데이터를 다룬 뒤, 데이터를 NestJS로 넘겨 해결하는 방법도 가능하지 않았을까 싶습니다.🥲
  4. DB ORM의 비교 (Prisma vs TypeORM) : 이전까지 TypeORM만 사용했었는데, 요즘 트렌드는 Prisma라고 하여 호기심에 프로젝트는 Prisma로 진행했습니다. 공식 문서를 읽어가면서 진행했는데, 처음에는 TypeORM을 Prisma로 옮겨보는 과정부터 시작하여 Prisma 공부를 이어나갔습니다. 제가 느낀 두 가지 ORM의 장단점은 다음과 같습니다. 저는 코드가 간편하다는 점과 공식 문서가 잘 되어있다는 부분을 고려했을 때, Prisma가 더 편했습니다!
  • Prisma: 코드가 간편하고, Constructor에 Repository를 쓰지 않아도 된다. 하지만 테이블 구조가 바뀔 때마다 migrate를 해줘야 한다.
  • TypeORM: 테이블 구조 바뀌면 synchronize=true로 수정하면 됨 하지만 Constructor에 선언을 하고 사용해야 되다 보니, Repository 사용에 제한이 있음. (Repository 당 하나의 service에서만 사용 가능)
  1. 외부 DB 사용 : 지금까지 DBeaver만 사용하다가 멘토의 추천으로 NeonDB를 사용했습니다. 무료면서 제공하는 서비스가 많다고 들었습니다. 하지만 무료라서 그런지 데이터가 잘 저장되지 않거나 데이터를 가져오는 API를 포스트맨으로 실행했을 때 너무 오랜 시간이 걸리는 문제점이 있었습니다. 저는 DB 문제인지도 모르고 한참을 리팩토링 해보고, 여러 블로그 글을 읽어보기도 했는데 아무리 찾아봐도 나오지 않아 멘토님의 도움을 받았습니다. 해당 문제는 로컬 DB와 DataGrip을 사용하는 걸로 바꾸면서 해결했습니다! AWS에서 제공하는 DB를 사용하는 방법도 있다고 들었지만, 로컬 DB만으로도 큰 문제가 없을 것 같아서 로컬로만 진행했습니다.
  2. 깃허브 : 프로젝트를 하면서 제가 몰랐던 깃허브 활용 방법을 배웠습니다.
    • 브랜치 하나 당 하나의 PR만 열 것. 브랜치를 새로 팔 때는 develop 브랜치에서 팔 것.
    • main(배포) / develop (개발) / feature/hotfix (브랜치명) 이렇게 나눠서 작업을 진행할 것.
    • 하나의 PR에 여러 사람이 커밋하지 말 것.
    • 이전에 한 번 PR을 넣었던 기능을 다시 만진다고 해도 같은 이름으로 브랜치 만들지 말 것.
    • 깃허브에서 리뷰하는 방법

처음부터 이런 걸 배우고 갔으면 좋았을 것 같다는 생각이 많이 들었습니다. 그래서 함께 프로젝트를 진행한 후배가 깃허브를 처음 써본다고 했을 때, 제가 알고 있는 부분을 간략하게 요약해서 알려줬습니다. 좀 더 깊은 개념도 추후에 알려주고 싶습니다.

  1. https 배포 및 도메인 구매 : 사실 아직도 자신 없는 부분입니다. AWS LightSail을 통해 http 배포까지는 자신있게 할 수 있지만, https 배포로 넘어가면서 이해가 잘 되지 않아 추가적인 경험과 공부가 필요한 것 같습니다. 올해 상반기 안에 꼭 완벽하게 이해하고 넘어가는 것이 목표입니다. 추가로 AWS EC2를 사용한 배포 방법도 배워보고 싶습니다.

느낀 점

2023년 프로젝트 중에서 매일매일 정말 열심히 했던 프로젝트입니다. 서버를 공부한 뒤 처음 해보는 프로젝트라 새롭게 도전하는 부분과 배우게 된 부분이 정말 많았습니다. 데이터 관련 이슈가 너무 많았어서 구글링을 정말 열심히 했고, 멘토와 팀원의 도움도 많이 받았습니다.
협업하면서 느낀 점은 먼저, 프론트엔드 개발자 분들께 API 문서를 최대한 빨리, 실수 없이 작성해서 전달하자.. 입니다. 정말 죄송하게도 실수가 너무 잦았습니다,, 다음부터는 꼭 여러번 확인하고 보내겠습니다. 그리고 디자이너 분과 회의할 때는 내가 제공할 수 있는 데이터가 무엇인지 확실하게 알아와야 한다는 걸 배웠습니다. 데이터 제공 가능 여부에 따라 디자인이 크게 바뀔 수 있으니 회의 전, 미리미리 알아보는 게 중요하다는 걸 느꼈습니다.
그리고! 이슈가 생겼을 때 멘토인 예빈오빠한테 도움을 요청하면 바로바로 해결방안을 제시해주는 게 정말 존경스러웠습니다. 저도 그만큼 경험과 지식을 쌓아서 바로바로 방법을 찾아내는 개발자가 되고 싶다는 걸 크게 느꼈습니다.


명지대학교 메타버스 디자이너 스쿨 2기

명지대학교 메타버스 ROBLOX 결과물

기간 : 2023.06.02 ~ 2023.12.27
역할 : 개발팀 / UI 연결
구현 내용 : NPC 대화, 달력, 텔레포트, 역할 선택, 프로필 띄우기

활동 내용

한 달 동안 개발자 선생님의 지도 하에 Lua 언어와 Roblox 툴에 대해 학습했고, UI 연결 및 기타 작업 역할을 맡아 명지대학교 메타버스를 구현했습니다. 프로젝트는 매주 과제가 나가듯 진행됐고, 매주 화요일마다 모여 회의 및 질문 시간을 가졌습니다.

지원 동기

예전부터 친구들과 메타버스 플랫폼을 접해봤기 때문에 관심 있었는데 마침 학교를 메타버스로 구현한다고 하여 직접 메타버스를 만들어보고 싶다는 생각에 지원하게 됐습니다. 처음엔 마인크래프트로 하는 줄 알았는데 아니어서 실망했지만 평소에 많은 언어에 접해보고 싶었기 때문에 로블록스라는 새로운 툴과 Lua 언어를 배울 수 있어 좋은 기회가 될 것이라고 생각했습니다.

어려웠던 점

UI 연결 작업은 쉬웠지만, 세부 작업을 하는 게 힘들 게 느껴졌습니다. 예를 들어, 달력에서 오른쪽 화살표 버튼을 누르면 그 달의 일정을 띄워야 했고, 일정이 있는 날만 다른 색으로 표시하는 작업이 있었습니다. 저는 이런 작업을 하면서 효율적인 코드 를 짜는 게 가장 중요하다고 생각됐는데, Lua 언어에 완전히 익숙해지지 못 해 비효율적인 코드를 짠 것 같아 아쉬웠습니다.
한 번은 스스로 리팩토링 해보는 시간을 가져봤는데, 과거에 작성했던 코드가 너무 안 예뻐서 놀랐습니다.. 그래도 리팩토링 하면서 조금은 실력이 늘어난 것 같다는 생각이 들었습니다.

느낀 점

교육이 생각보다 짧았고, 다른 언어와 차이가 있어 처음에는 익숙해지는 게 쉽지 않았습니다. 매주 할 일이 주어졌는데, 공식 문서와 질문 사이트를 열심히 찾아가며 수행하려고 노력했고, 그래도 모르겠는 건 개발자 선생님의 도움을 받아 해결했습니다. 처음엔 아예 감이 안 왔는데 계속 해보니까 점점 방향이 보이는 것이 신기했습니다.
이번 기회를 통해 멀게만 느껴졌던 메타버스가 친근해진 건 물론이고, 새로운 기술을 배울 수 있었다는 점이 정말 좋았습니다.


2023년도 명지대학교 창의적 SW프로그램 경진대회 (SW부문)

Voyage (대학생 포트폴리오 기록 및 활동 추천 서비스)

GITHUB

기간 : 2023.06.26 ~ 2023.08.24
역할 : 서버
프레임워크 : 서버 - NestJS / AI - FastAPI
구현 내용 : 회원가입 / 로그인 / 체크리스트 / 포트폴리오 기록
대회 결과 : 장려상 수상

프로젝트 설명

대학생들의 포트폴리오와 학기 별 목표를 간편하게 관리할 수 있도록 도와주는 서비스입니다.
아래 페이지에서 개발 배경, 기능, 시연 영상, 기능 명세서 및 결과 보고서 확인할 수 있습니다.

>> VOYAGE 소개 페이지

프로젝트 진행 과정

기획은 다같이 진행하고, 앱/서버/AI/디자인으로 역할을 나누어 진행했습니다.

서버는 회원가입, 로그인, 게시물, 투두리스트, 크롤링한 정보를 FE에 전달, 주기적으로 AI를 실행하는 작업을 했습니다. 대부분 이전에 해봤던 작업들이라 크게 어려움 없이 진행했지만, AI와 서버를 연결해보는 작업은 처음이라 서툴렀던 것 같습니다.

프레임워크는 주변에 자문을 구해서 FastAPI를 사용하였습니다. FastAPI는 더 빠른 속도와 높은 성능을 가지고 있고, API 문서도 자동으로 만들어져서 편리했습니다.
AI 및 크롤링 코드는 AI 담당하는 친구가 작성하고, API 구현 및 배포를 제가 맡아 진행했습니다.

느낀 점

이전 멋사 해커톤 프로젝트에서 배운 깃허브 활용법, Axios 함수로 API 호출하는 방법, AWS LightSail 배포 방법 등을 바로 활용했습니다. FastAPI와 연동하는 과정에서 배포하는 거에서 좀 헤맸는데, 해당 과정은 추후에 블로그에 정리해서 올려두려고 합니다.
FastAPI 배포에서 오래 걸리기도 하고, 배포 후 오류가 잦아서 프론트를 담당한 친구가 고생을 많이 했습니다.. 코드를 작성할 때 어떤 오류가 생길지 잘 고려해보고, 어려울 것 같은 부분은 미리 학습해보는 자세를 가져야 하는데, 지키지 않아서 반성을 많이 했습니다. 이후에 프로젝트를 진행할 때는 이러한 부분들을 반드시 잘 지키고, 프론트엔드와 맞춰보는 시간을 여유있게 가지도록 하겠습니다.


캡스톤디자인 : AIME (주관식 AI 예측 MBTI 테스트)

기간 : 2023.09.02 ~ 2023.12.04
역할 : AI
프레임워크 : FastAPI
구현 내용 : 텍스트를 통한 MBTI 예측 알고리즘

프로젝트 설명

주관식 MBTI 테스트입니다. 사용자가 텍스트 답변을 남기면 AI가 해당 답변을 분석하여 MBTI를 예측합니다.
많은 사람들이 MBTI 테스트에 큰 관심을 가지고 있다는 점과 기존 객관식 MBTI 테스트의 불편했던 점들을 정리해본 결과, 사용자가 답변을 자유롭게 할 수 있는 MBTI 테스트를 진행하면 재미있을 것 같다는 생각에 시작하게 됐습니다.

프로젝트 진행 과정

처음에는 서버를 진행하려고 했으나, 데이터를 저장할 필요가 없어 서버는 제외시켰습니다. 그래서 AI를 담당하게 됐는데, AI 알고리즘을 개발하는 것이 처음이라 인터넷 서칭을 통해 공부하면서 진행했습니다. 프레임워크는 FastAPI를 사용했습니다.

데이터셋은 kaggle에서 가져오거나 조사를 통해 직접 만들었습니다.

알고리즘은 2개로 나누어서 작성했습니다. 하나는 'ISFP'처럼 전체 MBTI를 예측하기 위한 알고리즘, 그리고 하나는 I/E, S/F 처럼 둘 중 무엇인지 예측하는 알고리즘입니다. 둘 다 공통적으로 자연어 처리 모델인 TfidfVectorizer를 사용하여 텍스트 데이터를 TF-IDF형식으로 변환했습니다. 예측 알고리즘에 사용한 모델은 각각 다른데, 전체 MBTI 예측 알고리즘에는 랜덤 포레스트 분류기와 그리디 서치를 사용하여 트리 개수, 최대 깊이, 특성 수, 분할 기준 등 최적의 조합을 찾아 정확도를 최대화 시킨 모델에 학습시켜, 추후에 MBTI를 추측할 수 있도록 했습니다. 그리고 하나의 MBTI 예측 알고리즘은 직접 만든 데이터셋을 사용했기 때문에 데이터 양이 많지 않아 LinearSVC를 사용했습니다.

*TF-IDF: 한 문장 내의 단어 빈도수와 단어가 등장하는 문장의 개수를 고려하여 수치화한 데이터

결과

서비스 배포 후, 3일 동안 약 100명의 유저들이 서비스를 사용했습니다.

감사하게도 아이디어 독창성에 대한 긍정적인 평가와 MBTI를 실제로 맞췄다는 이야기를 들을 수 있었습니다!

하지만 문제점도 있었습니다. 데이터셋에서 훈련데이터와 테스트데이터를 나누어서 정확도를 측정했을 때는 정확도가 0.9 이상으로 나왔었지만, 실제 사용자들의 답변으로는 정확도가 높지 않았습니다. 짧은 답변을 남길 경우, 예측할 수 있는 데이터의 양이 적기 때문에 정확한 결과가 나오지 않은 것이라고 생각했습니다. 훈련데이터의 양을 더 늘리거나 재훈련 시키는 방식으로 해결해보려고 했지만, 텍스트 길이가 짧으면 여전히 정확도가 낮았습니다. 따라서 이 부분은 사용자에게 답변을 구체적으로 길게 해달라는 안내 문구를 팝업으로 띄워 해결하고자 했습니다.

문제점도 있었지만 전체적으로 서비스 후기가 좋았으며, 학점도 잘 나왔습니다. 헤헤

느낀 점

AI 알고리즘은 다른 분들의 코드를 보고 공부하면서 저희 프로젝트에 맞게 수정하는 방식으로 진행했는데, 사실 코드를 이해하는 게 정말 어려웠습니다.. 그래도 머신러닝 교재로 따로 공부하고, 계속 코드를 보니까 점점 흐름이 보이기 시작했습니다! 그때부터는 코드를 원하는 방식으로 수정해나갈 수 있었고, 다행히 무사히 마쳤습니다.

AI 알고리즘을 짜보면서 또 새로운 경험을 할 수 있어서 즐거웠습니다. 백엔드에 한정지어 공부하는 것보다 이렇게 다양하게 접해보면서 하는 것도 재미있는 것 같습니다. 이번 프로젝트를 통해 자연어처리, 모델을 선정하는 과정, 모델에 학습시키고 예측하는 과정까지 배울 수 있었습니다.


기타 활동

  • 2023학년도 메타버스 아이디어 공모전 최우수상 수상
  • 알고리즘 스터디