23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
안녕하세요! 취준생을 위한 취준 프로세스 지원 서비스, “취얼업!”을 개발한 팀 5CEAN입니다 🌊
저희 조는 FE 2명, BE 2명, AI 1명으로 이루어진 팀으로, 취준생들이 겪고 있는 문제를 풀기 위해 다함께 헤엄쳐 왔습니다 🏊
저희 5CEAN 팀은… 기획 과정에서 유독 우여곡절이 많았던 팀인데요 🤣
자세한 내용은 중간 발표 때 많이 다뤘던 것 같아서 생략하고 결론만 말씀드리도록 하겠습니다!
저희는 21문항으로 구성된 자체 설문조사와 데보션 프로분들의 피드백을 통해 서비스를 개선해 나갔고, 최종적으로는 다음의 서비스를 만들어내게 되었습니다.
기업 공고가 올라오면 ① 해당 일정을 달력에 추가하고, ② 해당 기업을 조사하는 것부터 시작해서,
③ 서류 준비부터 ④ 면접 준비까지 진행하게 되는데요.
그리고 해당 기업에서 내가 진행하고 있던 전형이 끝나게 되면, 전형은 어땠고 받았던 질문은 어떤 거였는지 ⑤ 회고나 복기를 진행하게 되죠.
“취얼업!”은 취준생이 이러한 취준의 모든 과정을 하나의 서비스로 편리하게 관리하고, 또 발전할 수 있도록 하는 기능을 제공합니다!
캘린더 페이지에서는 내가 지원하고자 하는 기업의 전형 일정들을 등록할 수 있습니다.
하지만 기업 공고를 살펴보면, 서류 전형을 제외한 다음 전형들은 날짜가 정확하게 나오지 경우도 더러 있죠?
그런 전형들을 위해서 “예정 일정” 리스트를 만들어서, 예정된 일정 중에 나중에 날짜가 정확하게 확정되면 달력으로 옮길 수 있도록 하는 기능을 구성했습니다.
어떤 기업에 지원하기 위해 가장 먼저 해야 할 일은 역시 해당 기업이 어떤 기업인지 조사하는 일일 것 같은데요!
취얼업은 ‘지원 준비’ 페이지에서 3개의 탭 중 하나로 ‘기업 조사’ 탭을 제공하여, 해당 기업의 인재상, 제품, 최신 뉴스, 기타 정보 등을 저장하고 관리할 수 있게 합니다.
‘서류 준비’ 탭에서는 기업의 서류 문항과 답변을 아코디언 형식으로 깔끔하게 작성하고 확인할 수 있도록 했습니다.
면접에서 물어보는 질문은 아주 다양한 종류가 있는데요! 저희는 저희가 받았던 면접 질문들을 토대로 카테고리를 나눠서 ‘면접 준비’ 탭을 구성해 보았습니다.
자기소개서 예상 질문 : 내가 서류 전형에서 작성했던 자기소개서에서 나올 수 있는 질문을 대비합니다.
지원한 기업 관련 질문 : 해당 기업에서만 나올 수 있는 기업 관련 질문을 대비합니다.
ex) 저희 회사 제품 중에 사용해 본 게 있나요? / 지원자님을 뽑아야 하는 이유를 저희 회사의 인재상과 엮어 설명해 주세요.
인성 질문 : 지원자의 성향과 인성 관련 질문을 대비합니다.
직무 질문 : 직무와 관련된 전문성과 역량을 평가하는 질문을 대비합니다.
개인 질문 : 지원자의 활동과 경력사항 등 경험에 관련된 질문을 대비합니다.
ex) 학교에서 들었던 전공 중에 가장 인상 깊었던 것을 알려주세요. / IT 동아리를 운영해 본 경험이 있다고 적혀 있는데, 어려운 점은 없었나요?
기타 질문 : 그 외 다양한 질문을 대비합니다.
이 중 자기소개서 예상 질문의 경우, AI가 내 자기소개서를 기반으로 나올 수 있는 예상 질문을 뽑아주는 기능 또한 구성해 보았습니다 :)
각 전형별로 원클릭이나 간단한 입력으로만 구성된 회고를 진행해, 동기 부여를 높여줄 기능을 제공하고자 했습니다.
필기 전형이나 면접 전형에서는, 사용자가 받았던 질문들과 사용자가 어떻게 답변했는지를 기록해, 어떤 점을 잘했고 어떤 점이 부족했는지를 돌아볼 수 있도록 했습니다.
그리고 취준을 해 본 사람이라면 이전연도의 취준 후기를 안 찾아 볼 수 없죠!
취얼업은 인터넷에 있는 취준 자료의 링크를 회고/복기로 카테고리화 해서 서비스 내에서 손쉽게 관리해 볼 수 있도록 기능을 구성했습니다.
실제 기능이 동작하는 데모 영상은 위에서 확인해 볼 수 있습니다 ☺️
기술 스택 | 선정 이유 |
|---|---|
Next.js | 폴더 구조를 통한 직관적인 라우팅과 빠른 초기 로딩 속도 |
tailwindcss | HTML과 CSS를 하나의 파일에서 관리가 가능해 개발 속도를 높일 수 있고, 별도의 클래스명 지정 없이 스타일을 적용시킬 수 있어 팀원 간에 클래스명 컨벤션을 통일하는 수고를 덜 수 있음 |
Radix-ui | Headless UI 라이브러리로, 기능 구현이 되어 있는 컴포넌트를 UI만 커스텀하여 사용할 수 있기 때문에 컴포넌트를 개발하는 시간이 절약됨 |
zustand | 사용자와 학습 자료가 많고, Store 기반으로 상태가 관리됨 |
🏁 데보션 영 도서 스터디에서 배운 내용 적용
useEffect에 기명 함수 사용
저는 “모던 리액트 Deep Dive” 도서 스터디에서 useEffect의 사용법에 대해 다시 배우는 시간을 가졌는데요!
제가 발표를 맡은 파트였는데 발표를 하면서도 “제가 지금까지 useEffect를 잘못 사용하고 있었던 것 같습니다…” 라고 했던 기억이 있습니다 🤣
저는 해당 파트에서 useEffect에 기명 함수를 사용하면 개발자 도구에서 디버깅할 때 편리하고,
useEffect 는 의존성 배열로 전달한 값의 변경이 일어날 때 부수 효과를 주고 싶은 경우에만 사용하는 게 좋다는 내용을 새롭게 배워서,
이 개념을 코드에도 많이 적용시키고자 노력했던 것 같습니다 😀
zustand 채택
위 이미지는 5장 상태 관리 파트에서 성철님이 가져와 주신 사진이었는데요 😎
데보션 영 이전에 했던 프로젝트에서는 별 생각 없이 기존에 사용하던 recoil과 유사한 jotai를 채택했었는데,
해당 파트를 배우면서 라이브러리를 채택할 때 사용하고 있는 사람들이 많은지, 버저닝이 활발하게 이루어지고 있는지를 반드시 중요하게 생각해야 한다는 점을 또 한 번 배운 것 같습니다.
그래서 데보션 영 프로젝트에서는 스타 수가 월등히 많고, 업데이트 또한 활발히 이루어지고 있는 zustand를 기술 스택으로 채택해 보았습니다 XD
기술 스택 | 선정 이유 |
|---|---|
Java | C와 달리 가비지 컬렉터가 있어서 메모리 관리 편함 & JVM 기반으로 실행되기 때문에 운영체제에 독립적으로 안정적으로 운영 가능 |
Spring | 계층을 통해 객체지향프로그래밍 대표적인 원칙 (ex. 상속, 추상화, 다형성, 캡슐화)적용 가능 + 의존성 주입을 통해 스프링 컨테이너가 자동으로 관리해주기 때문에 개발자는 편리하게 기능과 로직 분리하여 구현 가능 |
🏁 OOP 개념 중 상속 활용
저희 프로젝트에는 서비스 특성상 회고, 복기, 서류 준비 등 “제목 - 내용” 구조가 반복되는 경우가 많았는데요.
저희는 이를 따로 분리하여 각각 구현하는 것이 아닌, 부모 클래스(document)를 만들고 이를 상속받는 오버라이딩를 적용하여 확장성과 유지보수성을 향상시키고자 했습니다.
이를 통해 OOP 개념을 실무적으로 어떻게 적용시킬 수 있을지에 대해 배울 수 있었던 것 같습니다 :)
🏁 데보션 영 도서 스터디에서 배운 내용 적용
이전에는 spring과 jpa가 하나의 세트로 유명해서 구체적인 원리나 쓰는 이유를 알지 못하고 기계적으로 썼습니다.
하지만 스터디를 계기로 JPA와 JDBC의 차이점을 인지하며 JPA의 장점과 역할을 분명히 알 수 있었습니다!
특히 JPA을 사용하며 발생할 수 있는 N+1 문제에 대해 깊게 학습하며 JPQL, fetch join을 통해 이러한 문제를 해결하는 과정이 가장 기억에 남습니다.
(개발도 하고 기술 면접도 준비하고 데보션하고 1석 3조 😉)
저는 “자소서 기반 예상면접질문 생성ai 기능”을 구축하는것이 목표였습니다.
“자기소개서 문장에 대응하는 면접질문을 학습시켜 제작해 봐야겠다!”라는 생각으로 출발했습니다. (하다보니 정말 많은것을 배우고 갈아엎었지만 ㅎ.ㅎ)
첫번째로 finetuning에 활용할 데이터를 모으는것이었습니다.
잡코리아의 합격자소서&면접질문을 beautifulsoup를 활용하여 모았습니다.
약 40,000개의 data가 되더군요.
그후, 불용어등을 제거한 후에 BERT유사도 검사를 통해서 면접질문이 어떤 자기소개서 문장을 통해서 도출되었는지 찾아보려 했습니다.
이후 유사도가 0.4이하인 쌍을 제외하고 학습에 활용하였습니다.
두번째로는, 어떤 모델을 활용할지 고민하였습니다.
우리의 목적은 면접질문을 만들어 내는것이기에 생성형 모델을 사용해야겠다 생각했으며, etri에서 배포한 ET5모델을 사용해 보았습니다.
학습된 모델에 여러 자기소개서 문장을 입력해보았을때, 한 단어에 꽂혀서 같은 예상 질문만을 출력한다던지, 일상적인 질문을 물어도 “지원동기는 무엇입니까?”와 같은 엉뚱한 대답을 하기도 했습니다.
세번째로는, “RAG를 활용해보자”였습니다.
할루시네이션과 이상한 답변을 막아줄 수 있을거라는 목표와 새로운 기술을 연습해보자는 생각으로 도입했습니다.
벡터DB에 자기소개서, 예상 면접 질문을 저장하여 사용자가 자신의 자기소개서를 입력하면,
각 문장을 임베딩하여 벡터db에 저장하고, 거리적으로 가까운 예상 질문을 3개 추출하여 프롬프트에 컨텍스트로 건네주었습니다.
이전보다는 나아졌지만,, 아직도 같은 답변을 계속 뱉는 문제에서 벗어나진 못했습니다.
마지막시도는, “새로운 모델, gpt-3.5를 사용해보자”였습니다.
가장 대중적으로 사용하기도 하고, 성능도 1등인 모델은 정말 뛰어날까 싶어 사용해 보았는데요.
“정말! 뛰어납니다!”
물론, 모델의 작동원리가 다른 점도 있겠지만, 같은 데이터를 학습시켜도 결과는 달랐습니다.
똑같은 말을 반복하지도 않고, 엉뚱한 답변을 하지도 않았습니다.
최종적으로는 RAG + Finetuning gpt를 활용하여 기능을 완성했습니다.
개발을 진행하며 여러 어려움이 있었습니다.
data가 충분치 않았다. 잡코리아 크롤링만으로는 자소서, 질문 00개 밖에 없어서 finetune(train, valid, test)이 쉽지 않았다.
AI에 대해 충분한 지식이 없는 채로 시작해서 단어와 개념이 많이 생소했다.
첫 프로젝트이다 보니 사실 모든게 어려웠다.
AI 모델에 대한 기초지식,, 프백과 함께하는 연결 및 배포 등등.. 학문 이론적 cs지식이 아닌 현업,프로젝트의 언어와 방식이 새롭고 적응하긴 힘들었습니다.
하지만 10개월의 프로젝트가 끝난 지금은 훨씬 성장하여 시야도 넓어지고, 깊이도 많이 깊어졌다고 생각합니다.
중간 발표 이후… 저희는 다같이 피그잼에 모여 2시간 동안 4F 회고를 진행했는데요! 🤣
서로 어떤 일이 있었는지, 어떤 점을 느끼고 배웠는지, 최종 발표를 위해서는 어떻게 하면 좋을지에 대해 솔직하게 이야기해 볼 수 있는 좋은 시간이었습니다 ㅎㅎ
각 내용을 요약하자면 다음과 같아요!
Fact
기획 단계에서 제대로 하고 싶다는 마음이 너무 커서 개발을 많이 하지 못했다
팀에서 4명이 인턴을 하고 있어서 정말 바빴던 것 같다
Feeling
PM으로서의 자질이 아직은 많이 부족하다 느꼈다 🥲
코로나 때는 많이 경험하지 못 했던 진짜 ‘대학생’다운 프로젝트를 하고 있는 것 같다!
개발뿐만 아니라 프로젝트 진행 방식이나 여러 가지 툴을 사용해 보는 방법도 배울 수 있어서 좋았다
Finding
결과도 물론 중요하지만, 과정 중심 사고가 중요하다는 걸 알게 되었다
남는 건 사람이다! 같이 하는 사람들이 너무 소중하다는 걸 배우게 되었다
피그마, 노션, 스프링부트 등 사용해 본 적 없었던 것들을 어떻게 이용하는지 알게 되었다
Future Action
이번에는 기획 과정이 너무 길어졌어서, 현실과 타협해가야 할 것 같다 🤣
기획을 빠르게 마무리짓고, 개발을 열심히 해 보자 👊
저희는 1주 단위로 스프린트를 진행했고, JIRA를 통해 진행률을 공유하고자 했습니다!
그리고 JIRA와 GitHub을 연동해 브랜치와 커밋, PR을 관리했습니다.
저희 팀은 매일 서로의 진행 상황과 멘탈 관리를 위해 위클리 스크럼(회의)과 데일리 스크럼을 진행했습니다.
우선 데일리 스크럼에서는 팀원들이 평소 어떻게 지내는지 TMI와 기분 지수를 공유하며 서로 응원하자는 취지로 스크럼을 진행했습니다.
매 스크럼마다 기분 지수와 TMI로 팀원들이 어떤 상황에 놓여 있고, 힘들어 하고 있지는 않은지를 서로서로 알 수 있었던 것 같습니다👍
위클리 스크럼에서는 주로 그 주의 진행 상황과 배운 점을 위주로 공유를 진행했습니다.
위클리 스크럼에서는 주로 마감 기한 안에 준비했던 기능을 모두 구현할 수 있을지, 금주에는 어떤 것을 했고 차주에는 어떤 것을 해야 할지를 위주로 내용을 작성했던 것 같습니다.
PM으로서 기획부터 개발까지 참여해 본 첫 프로젝트였는데, 너무 좋은 팀원들을 만나 많이 배웠고 행복한 시간이었던 것 같습니다 ☺️
개발도 물론 중요하지만 팀원 전체가 프로젝트 활동을 하면서 좋은 추억도 쌓고 배워가는 게 많았으면 좋겠어서 스크럼이나 회고를 많이 해 보려고 노력했던 것 같아요.
부디 제가 도움 받은 만큼 팀원들한테도 많은 도움이 되었기를 바라며…♥️
다시 한 번 열심히 따라와 준 팀원들과 피드백 많이 해 주신 프로분들께 너무 감사하다는 말씀 드리면서 마무리짓고 싶습니다 :)
이번 데보션 프로젝트 통해서 프론트엔드 엔지니어로서 많이 배우고 성장한 것 같습니다.
열정 넘치는 팀원들이랑 함께해서 저도 시너지 받아 노력할 수 있었습니다.
이번 학문적인 길만 바라보던 저에게 현업의 협업방식과 어떤 일들이 일어나는지 많은것을 배우고 눈을 뜨게해준 소중한 프로젝트였습니다.
좋은 팀원을 만나 1년동안 업무적으로 인간적으로 많은 점을 배웠습니다!
쉽게 접할 수 없는 전문가,영분들과 같은 플랫폼에서 소통하고 정보를 공유하며 많이 성장하게 된 기간이었습니다. 감사합니다.
기획부터 개발까지 약 6개월동안 진행된 장기 프로젝트였지만, 팀원들과 함께 서로 응원하며 즐거운 시간을 보낼 수 있었습니다.
평소라면 만나기 어려운 영역의 사람들과도 소통할 수 있었던 좋은 경험이었습니다.
다양한 사람과 모여서 팀플을 진행했는데, 처음 만난 날부터 잘맞고, 팀원들이 좋았습니다! 데보션을 하면서 얻은 것 중 가장 소중한건 우리 팀원들(?)ㅎㅎ ❤️
기술적으로 다양한 시도를 해보고 싶었는데, 그러지 못해서 아쉽지만 전문가 밋업, 네트워크 스터디, JPA 스터디 등등 학습할 수 있는 좋은 기간이었습니다.
끝으로, 매주 회의 및 기록 진행해주며 가장 고생한 우리 PM혜원이와 기상캐스터 상견례프리패스상 세희언니, 귀여운 막내 똑디 희건이, 내 최애 팀원 우리 지원이까지 다들 최고였고 감사했습니당~
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.