전체 글

최고의 프론트엔드 개발자가 되겠습니다.
·FrontEnd/React
프론트엔드 개발자는 백엔드 개발자들이 구현해놓은 api를 호출하여 얻은 데이터를 UI에 띄워주곤 한다.아마 대부분의 경우 GET method를 통해 데이터를 얻어올 것이다. 불러오는 데이터의 양이 그리 많지 않다면 큰 문제는 없을 것이지만, 만약 불러와야 할 데이터의 양이 매우 크면 문제가 생기게 된다.사용자는 어쩌면 데이터를 확인하기 위해 많은 시간을 기다려야 할 수도있다.데이터에 이미지가 포함되어 있다면 그 시간은 엄청나게 늘어날 것이다! 이를 방지하기 위해 무한 스크롤은 프론트엔드에서 필수적인 기술이라고 할 수 있다. 무한 스크롤이란? 말 그대로 무한으로 스크롤되게 만드는 기법을 뜻한다.무한으로 스크롤이 된다는 것은, 보여줄 데이터가 아직 남아있음을 뜻한다.즉 한번에 모든 데이터를 불러오는 것이 아..
·FrontEnd/Test Code
강의의 마지막 세션에서는 현업에서 테스트코드라는 주제를 다루었다.현업에서는 다양한 도구들을 활용하여 테스트코드를 작성하고 있는 것 같았다. Cypress Cloud Cypress Cloud는 Cypress에서 무료로 제공해주는 클라우드 서비스이다.Cypress에 로그인만 하면 Cypress Cloud에 접근할 수 있다. 여러 단계를 거쳐서 로그인을 한 후 프로젝트를 하나 생성해주면  위와 같이 프로젝트 ID를 발급받을 수 있다.이 ID를 cypress.config.ts 파일에 명시해주면 된다. export default defineConfig({ projectId: "발급받은 프로젝트 ID", e2e: { setupNodeEvents(on, config) { // implement no..
·FrontEnd/React
이전 블로그에서 효율적인 협업을 위해서는 git commit을 깔끔히 관리하는 것이 중요하다고 느껴 git merge에 대해 자세히 알아보고, 상황별 적합한 merge 방법에 대해 알아보았다.협업에서 또 가장 중요한 것이 팀원들과 정해나가는 컨벤션이라고 생각한다. 협업 과정에서는 수많은 컨벤션을 정해 나가야한다.PR및 commit의 단위, commit 메시지 형식, PR 형식, 폴더 및 파일 구조 등 통일해야 할 것이 너무나도 많다.디프만 프로젝트에서 채택한 협업구조를 간략하게 정리해보려고 한다.기본적인 세팅은 Next 14(CNA)의 디폴트 세팅부터 시작한다. ESLint ESLint는 협업 상황에서 코드의 일관성을 유지시켜주고, 잠재적인 에러를 잡아주는 역할을 한다.예를 들어, 사람마다 arrow f..
·FrontEnd/React
이전까지는 혼자, 혹은 둘이서만 프론트 프로젝트를 진행하거나 / 다수로 진행하더라도 촉박한 기간으로 인해 협업을 위한 컨벤션 정하기 및 세팅에 소홀했었던 것 같다.이번에 디프만 프로젝트를 진행하면서 협업에 더욱 신경써야할 것 같았고, 이를 위해 효율적인 협업을 위한 세팅을 진행해보고 Git 복습도 진행하기로 했다. Merge / Squash & Merge / Rebase & Merge 나는 지금껏 일반적인 Merge만 사용해왔었다.그런데 Merge에도 여러 종류가 있고, 팀의 컨벤션에 맞게 적절한 Merge 방안을 선택한다면 수많은 commit들을 더욱 효율적으로 관리할 수 있을 것 같았다. PR을 날린 후 Merge에 종류를 보면  위처럼 3가지의 merge 방식 중 하나를 택할 수 있다.그럼 각 방식..
·FrontEnd/Test Code
이전 블로그에서는 Jest와 MSW를 이용하여 회원가입 테스트를 진행해보았다.이제는 E2E 테스트의 대표적 선두주자인 Cypress로 회원가입 E2E 테스트를 진행해보기로 했다. Cypress 설치 yarn add -D cypress 그 어느 패키지와 마찬가지로 위 명령어를 통해 설치를 시도했다.근데 위 명령어로 설치를 하고 cypress를 구동하면 계속 No version of cypress is installed 라는 에러가 떴다.나는 프로젝트에서 Next 14와 Typescript v5를 사용하고 있는데 호환이 안되는 것 같았다. 구글링 결과 ./node_modules/.bin/cypress install 위 명령어를 통해 cypress의 바이너리 파일을 다운로드 해주면 문제를 해결할 수 있다고 했..
·FrontEnd/Test Code
컴포넌트들이 모여 어떠한 하나의 기능을 수행할 때, 서버 통신이 개입되는 경우가 많다. 이 때, 만약 백엔드 단에서 api가 덜 만들어졌거나 원하는 결과를 넘겨주지 않는다면 먼저 프론트 개발을 들어가기도 어렵고, 완성되지 않은 api를 요구하는 기능의 테스트를 건너뛸 수 밖에 없다.결국 서버 통신이 요구되는 어떠한 기능이 잘 돌아가는지 보장할 수도 없고, 추후에 추가하더라도 이미 다른 코드들이 많이 짜여져있는 상황인데 이 기능의 예상치 못한 버그로 인해 많은 코드를 고쳐야할 수도 있다. 이러한 상황을 방지하기 위해 nock과 같은 라이브러리도 있지만, 나는 MSW를 도입하기로 하였다. MSW란?  MSW는 API 요청을 가로채서 사전에 설정해둔 목업 데이터를 넘겨주도록 설정해 주는 도구이다.nock과 같..
·FrontEnd/Test Code
나는 강의를 들으며 강의 내용을 내가 진행한 프로젝트에 적용해보기로 하였다. 해당 프로젝트는 Next를 활용해서 구현하였고, 적용을 위해 추가적인 세팅이 필요했다. jest.config.ts import type { Config } from "jest";import nextJest from "next/jest";const createJestConfig = nextJest({ dir: "./", // jest가 동작되는 기본 경로 설정});const config: Config = { preset: "ts-jest", // jest 설정에 기반이 되는 preset 등록 coverageProvider: "v8", // coverage 코드 추적을 위해 사용되는 provider 설정 testEnviron..
·FrontEnd/Test Code
여기서 사용할 문법은 Jest, Cypress 둘 다 동일하지만 Jest가 터미널 로그 확인이 더 수월해서 Jest로 문법을 익혀보았다. 환경설정 yarn add -D jest @types/jest ts-jest jest-environment-jsdom @testing-library/react @testing-library/dom @testing-library/jest-dom 위와 같이 패키지 설치를 진행한다. jest.config.ts  위 파일을 하나 만든 후 module.exports = { preset: "ts-jest", testEnvironment: "jest-environment-jsdom",}; 위의 내용처럼 설정해준다.package.json 파일 내에 위 내용을 선언해주어도 동작하지만..
·FrontEnd/Test Code
테스트코드를 입문하기 전, 대체 왜 사용할까에 대해 강의를 듣고 정리해보았다. 테스트 코드의 장점 1. 리팩토링 시 최소한의 통과 기준을 만들어낼 수 있음 프론트엔드 작업을 하다보면 리팩토링을 하게되는 경우가 많은데, 이 때 예기치 못한 부분에서 버그가 발생하는 등 이슈가 발생할 수 있다.이 때 테스트코드를 작성해 놓으면 우리가 작업한 후의 코드가 통과해야 하는 최소한의 기준을 세울 수 있다.즉, 우리의 코드 변경으로 인해 중요한 로직이 이상하게 동작하는 것을 배포하기 전에 발견할 수 있을 것이다! 2. 문서화에 용이함 describe("회원가입 페이지", () => { /* 각 항목을 jira ticket으로 생각하고 작업할 수 있음 브랜치 별로 테스트코드 작업 가능 */ test("인풋이 활성화되..
·FrontEnd/React
서비스를 구현할 때, 성능을 최대한으로 끌어올리기 위해 캐시를 흔히 사용한다.여러 종류의 캐시가 있지만, 여기서는 HTTP Cache에 대해 알아보려고 한다. Cache-Control 헤더 브라우저가 HTML, CSS, JS, 이미지, 비디오 파일 등 서버에 처음 요청할 때, 브라우저와 서버는 완전한 HTTP 요청/응답을 주고받는다.이 때, Cache-Control 헤더 응답 값에 따라서 처음 요청한 리소스의 캐싱 방식이 결정되게 된다. max-age 예를 들어 Cache-Control 헤더 값으로 max-age=10 을 설정하면, 리소스에 대한 캐시의 유효한 시간은 10초가 된다.  예를 들어 위와 같은 요청에서 완전한 HTTP 요청/응답을 주고받고 status 200이 반환된 것을 확인할 수 있다. ..
brian99
정상을 향해~