이제 초기 개발 세팅을 해보자.
전에도 얘기했지만 기획부터 디자인, UI/UX는 피그마에 돼있어서 그 기획된 기능을 프론트 팀원 5명 서로 나눠서 구현하기로 했다. 일단 5명 브랜치 파기 전에 develop 브랜치에 기본 개발 세팅부터 하자.
전에 얘기했듯이 폴더 및 파일 구조가 정해지지 않아서 중구난방이었다.
그래서 위 사진과 같이 폴더를 짰다. modules빼고 다른 걸 모두 만들었다. 네트워크 호출 코드 관련 api, ui 구현하는 components, pages, 색상 관련 theme파일이 있는 styles 등이 있다.
잘게 분리하면 좋은게 추후 리팩토링이나 유지보수시에 도움되니까 이렇게 나눴다.
폴더 및 파일명 네이밍도 통일돼있지 않아서 lowerCamelCase
로 하기로 했다.
우리는 CSS 라이브러리를 Styled-Components로 쓴다. 보통 const로 태그를 가져와 CSS 코드를 입력하는 식이다.
const Wrapper: styled.div`
padding-left: 24px;
padding-right: 24px;
`,
이렇게 말이다. 그런데 S-dot 방식이라고 다르게 입력하는 방식이 있다. 중괄호를 이용하여 props를 이용한 스타일링하는 것이다.
const S = {
Wrapper: styled.div`
padding-left: 24px;
padding-right: 24px;
`,
};
이렇게 사용하고 JSX 부분에는
<S.Wrapper>
S-dot
</S.Wrapper>
이렇게 입력한다.
왜 이렇게 하느냐
(출처: Chat GPT)
즉, props처럼 쓰면서 props의 이점을 가져올 수 있다는 것이다. 특히 가독성이 좋아지는 게 제일 좋다. 우리팀은 가독성이 좋은 것이 1번째라 그렇게 진행하도록 했다.
또 추가로 Styled 관련 코드는 그 컴포넌트 및 페이지 맨 아래에 쓰기로 통일했다.
api 호출하는 것도 통일했다. axios instance
를 만들어서 Server URL 및 네트워크 호출 방식을 통일했다.
import axios from "axios";
export const SERVER_URL = `https://server-prod.wingle.kr/api/v1`;
const instance = axios.create({
baseURL: SERVER_URL,
headers: {
Authorization: `Bearer ~~`,
},
});
export default instance;
이런 식으로 만들어서
import instance from "../axiosModul";
// axios도 가능
import axios from "../axiosModul";
export const getPickers = async () => {
const response = await axios.get("/groups");
return response.data;
};
이렇게 통일 했다. 저거 가지고 이제 리액트 쿼리에 쓰면 된다!
나중엔 인터셉터까지 사용해서 리프레쉬 토큰 재발급도 만들고 그럴 것이다!
세팅 중 굵직한 것들만 정리를 했다. 얇은 것들은 넘겼다. 통일했던 것들은 아래와 같다.
Default : camelCase
Folder, File names : lowerCamelCase
Component Function names : PascalCase
Function names : lowerCamelCase, verb + noun(ex: getUserInformation)
Constant names : CONSTANT_CASE
export default function Example() {}
const Example () ⇒ {}
이런 식이다!
코딩 컨벤션 꼼꼼하게 잘쓰셨네요 인상깊습니다! 화이팅!