안녕하신가요?
첫번째 프로젝트가 끝나고 얼마 안있어 두번째 프로젝트까지 끝이 났습니다.
이번 프로젝트는 저번과 똑같이 기존의 서비스를 모티브로 하되, 기획을 추가하여 진행하였습니다.
또한 다양한 라이브러리들을 사용해 완성도를 높이려 했습니다.
그러면 제 회고문을 보실까요?
구인구직 플랫폼 wanted를 클론코딩
홈페이지 분석을 통해 기획을 변경할 수 있는 부분은 재기획/디자인 후 구현
특히 wanted+라는 구독 서비스를 더더욱 강조할 수 있는 방향으로 기획 수정
2022.02.14 ~ 2022.02.25 (약 2주간)
이번엔 팀원 전체를 시켜서 실리콘밸리의 천재 프로그래머 그룹인 양 컨셉을 잡아보았다 😎
곽승현 : 연봉 그래프, 구독 서비스, 회사 정보, Footer
장예지 : Navigation 바, 소셜 로그인, 회원가입
박무선 : 랜딩 페이지, 이력서 업로드
윤남주 : 채용 리스트, 채용 상세, 마이페이지, 프론트엔드 배포 (AWS EC2)
김준영 : 소셜 로그인(OAuth 2.0), 마이페이지 정보 조회 및 수정, 채용 정보 리스트, 채용 정보 상세페이지, 회사 상세 페이지, 월간 구독 서비스, 직군별 연봉 데이터
김성수 : 이력서 파일 업로드 & 삭제, Soft Delete & 복구, 채용 공고 지원, 카테고리 리스트, 검색 기능
내가 작업한 페이지의 경우 ✅ 표시!
/landing
: 구독되지 않은 사람들에게 보여지는 페이지/contents
: 구독한 사람들에게 보여지는 페이지path parameter
로query parameter
로geocoder
를 통해 카카오맵 상 정확한 좌표를 찾습니다false
로 고정!
나는 이상한 코드 습관이 있다.
첫번째는 일단 보여지는 것에 집착한다는 것이고, 두번째는 일단 빨리 쳐내는 식의 코딩을 좋아한다는 것이다.
나는 컴포넌트를 만들며 무조건 스타일까지 완벽하게 구현해야한다. 예쁘지 않으면 코딩을 하기가 싫다.
그리고 나는 그냥 삘받은 대로 계속 끊기지 않고 코딩하는 것을, 그리고 빨리 쳐내놓고 나중에 수정하는(척 말만하는 것)을 좋아한다.
이번에는 그런 습관들이 악영향을 주었다.
스타일에 너무 많은 시간을 허비하여 첫째주엔 거의 컴포넌트 제작만 하였고,
내 머리가 정리되지 않고 끊어야 했는데도 계속 코딩을 해서 덕지덕지 못생긴 코드를 만들어버렸다...
⬇️ 이 코드가 그저 채용 리스트 백엔드 API를 불러오는 코드라면 믿으시겠습니까?
useEffect(() => {
const category = params.category && `category=${CATEGORY[params.category]}`;
const subcategory =
params.subcategory && `subcategory=${SUBCATEGORY[params.subcategory]}`;
const country =
searchParam('country', location.search) !== 'all'
? `country=${COUNTRY_EN_TO_KR[searchParam('country', location.search)]}`
: undefined;
const sort =
searchParam('job_sort', location.search) === 'created_at'
? 'sort=created_at'
: 'sort=-compensation';
const locationQuery =
searchParam('location', location.search) !== null &&
searchParam('location', location.search) !== 'all'
? searchParam('location', location.search)
.split(',')
.map(x => `location=${LOCATION_EN_TO_KR[x]}`)
: '';
const finalQuery = [category, subcategory, country, sort, ...locationQuery]
.filter(x => x !== undefined)
.filter(x => !x.includes('undefined') && !x.includes('null'));
axios.get(`${api.fetchRecruitments}?${finalQuery.join('&')}`).then(res => {
setPositionsData(res.data.Recruitment);
});
}, [params.category, params.subcategory, location.search]);
내가 아직 제대로 구조를 이해하고 있지 못하다고 느끼거나, 조금 더 멀리 떨어져서 생각할 시간이 필요하다고 판단되면
일단 끊고 더 제대로 생각해볼 시간을 갖는 것이 필수이다.
그리고 리팩토링!!!!!! 리팩토링 제발 하자!!!!!!
코딩하다가 "와 이거 리팩토링 어떻게 하지?", "이거 리팩토링 하기 겁나 싫다..." 라는 생각이 들면 그 코드는 이미 실패한거다.
코딩을 하면서 리팩토링 방향까지 감이 오도록 코드를 짜자!
이번에는 훨씬 백엔드와 커뮤니케이션이 잘되었고, 통신도 문제없이 되어서, 스프린트 2주차에 별다른 힘듦 없이 잘 마칠 수 있었다.
하지만 그럼에도 사전에 더 대화를 했더라면 좋았을 것을...
(계속 채용 리스트 부분에 대해서 말해서 죄송하지만, 이번 프로젝트 내가 제일 아쉬운 컴포넌트라 그렇다)
⬇️ 대화를 했더라면 아래와 같은 뻘짓은 하지 않아도 되었을텐데...
// 쿼리와 렌더링 될 문자열, 그리고 백엔드에 요청보낼 문자열을 변환시켜주는 객체들입니다.
export const CATEGORY = {
programming: 1,
design: 2,
education: 3,
finance: 4,
marketing: 5,
};
export const SUBCATEGORY = {
frontend: 1,
backend: 2,
uiuxdesign: 3,
branding: 4,
foreignlang: 5,
eduplan: 6,
accounting: 7,
financeplan: 8,
contentsmarketer: 9,
performancemarketer: 10,
};
export const COUNTRY_KR_TO_EN = {
전세계: 'all',
한국: 'kr',
대만: 'tw',
};
export const COUNTRY_EN_TO_KR = {
all: '전세계',
kr: '한국',
tw: '대만',
};
export const LOCATION_KR_TO_EN = {
전세계: 'all',
'한국 전체': 'all',
'대만 전체': 'all',
서울: 'seoul',
광주: 'gwangju',
타이페이시: 'taipei',
타이둥현: 'taitung',
};
export const LOCATION_EN_TO_KR = {
all: null,
seoul: '서울',
gwangju: '광주',
taipei: '타이페이시',
taitung: '타이둥현',
};
export const SORT_KR_TO_EN = {
최신순: 'created_at',
보상금순: 'compensation',
};
export const SORT_EN_TO_KR = {
created_at: '최신순',
compensation: '보상금순',
};
이 뭐하는 짓이야... 그냥 백엔드랑 다 한글로 맞췄으면 URI도 백엔드API도 렌더링할 문자열도 다 맞출 수 있었다...
그러니 더더 대화를 하자!
1주차에 걱정했던 것만큼 백엔드 통신이 어그러지지는 않았지만, 그래도!
또 좋은 팀원들을 만나, 좋은 프로젝트를 했다.
정말 솔직히 말하자면 중간에는 다 못 끝낼까봐, 그리고 다 못끝내서 다 끝난 내 페이지를 써먹지 못할까봐 걱정 많이 했다...
하지만 결과는... 계획한 것 모두 다 끝냈고! 우리는 시간 내에 프론트엔드 배포까지 했다! 🎉 🎉 🎉
심지어 끝에는 조금의 여유까지 있었다. 이건 정말 팀원들이 너무 함께 같이 잘해줘서 그런거야. 나 혼자 잘난다고 되는 일 하나도 없다.
나의 성격은 항상 조금은 신경질적이고, 꽤나 쓸데없는 걱정을 많이 하는 성격이었는데.
이번 프로젝트를 하며 걱정할 시간에 내 일을 하고, 남을 도와주는 것이 답이라는 것을 깨달았다.
걱정보다는 미래에 대한 기대를, 공허한 자만보다는 나에 대한 믿음을 가지자.
매 경험들을 지나며 조금씩 조금씩 무뎌지고, 차차 강해질 것이다.