목록WIL/Hanghae (8)
dansoon.log()

"더 깊이 알고 싶다", "이게 최선일까?", "정말 이게 맞는 걸까?"개발자로서 끊임없이 마주치는 이 질문들에 대한 답을 찾을 수 없겠지만,정해진 길이 없는 개발자의 성장 경로에서, 혼자만의 학습이 아닌 새로운 방향을 찾고 싶었다.그렇게 시작한 10주간의 여정이 마무리되었다. 다양한 경력을 가진 팀원들과 함께하며 새로운 시각을 발견했다.밤늦게까지 이어진 과제와 코드 리뷰 시간은 단순한 기술 공유를 넘어 서로의 관점을 이해하는 소중한 시간이었다.'이런 식으로도 생각할 수 있구나!' 하는 깨달음의 순간들이 쌓여갔고,열정 넘치는 코치님들의 멘토링은 기술 외적인 부분에서도 값진 배움을 선물해주었다. 처음엔 모든 과제를 완벽하게 해내겠다는 욕심을 부렸지만,회사 업무와 병행하는 게 쉽지만은 않았다.하지만 31..
1. 문제AWS를 활용한 CI/CD 파이프라인 구축 프로젝트를 진행했다.다양한 클라우드 서비스 중에서 AWS를 선택한 이유는 실제 업무 환경에서 가장 널리 사용되고 있으며,S3와 CloudFront의 조합이 비용 효율적이면서도 확장성이 뛰어나기 때문이다.AWS 아키텍처는 S3 버킷을 기반으로 정적 웹사이트 호스팅 설정을 구성하고, CloudFront를 통한 글로벌 CDN 배포망을 구축했다.IAM을 통해 최소 권한 원칙에 따른 보안 설정을 적용하고, GitHub Actions를 활용하여 완전 자동화된 배포 파이프라인을 구현했다.특히 GitHub Actions 워크플로우를 통해 코드 변경 시 자동으로 빌드, 테스트, 배포가 이루어지는 시스템을 구축했으며, 시크릿 키와 환경 변수의 안전한 관리 체계를 마련했다..
1. 프로젝트 개요이번 주에는 프론트엔드 애플리케이션의 테스트 시나리오를 직접 작성하고 구현하는 작업을 진행했다.처음 과제를 접했을 때, 단순히 테스트 코드를 작성하는 것을 넘어서 이 과정이 개발 품질 전반에 얼마나 큰 영향을 미치는지 깨닫게 되었다. 특히 사용자 관점에서의 신뢰성 확보와 엣지 케이스 처리의 중요성을 직접 체감할 수 있었다.2. 테스트 설계 과정팀 내에서 처음 테스트 전략을 논의할 때, 다양한 의견이 존재했다.Unit 테스트와 E2E 테스트를 조합해야 한다는 의견,Unit 테스트와 Integration 테스트의 조합이 효율적이라는 의견, 모든 단계의 테스트가 필요하다는 의견까지, 각자의 경험과 프로젝트 배경에 따라 접근 방식이 달랐다.여러 논의 끝에 Integration 테스트를 중심으로..
1. 문제이번 주 과제는 기존의 상태 관리와 컴포넌트 구조를 FSD(Folder Structure Design) 패턴으로 리팩토링하고, react-query와 zustand를 활용해 상태 관리 방식을 개선하는 것이었다. 이를 진행하면서 다음과 같은 문제들이 있었다:코드 구조의 복잡성상태 관리와 API 호출, UI 로직이 한 파일에 얽혀 있어 코드가 길어지고, 컴포넌트별로 코드를 이해하기 어려운 점이 많았다.프로젝트가 커질수록 파일 간 의존성이 높아지고, 변경 사항을 적용할 때 발생할 수 있는 오류 가능성 또한 높아졌다.유지보수성 저하상태 관리와 관련된 로직이 분산되어 있어 특정 기능이나 컴포넌트를 수정할 때 관련된 코드를 모두 찾아 수정해야 하는 번거로움이 있었다.여러 곳에서 필요한 상태를 공유할 때 상..
1. 문제이번 주에는 기존 리액트 코드의 상태 관리 방식을 Context와 Custom Hook을 활용해 리팩토링하는 과제가 있었다. 컴포넌트마다 각기 다른 상태와 로직을 관리하고 있었기 때문에 코드가 복잡해지고, 유지보수가 어려워지는 문제가 있었다. 특히 다음과 같은 문제가 있었다:복잡한 상태 관리AdminPage, CartPage 같은 주요 컴포넌트에서 여러 상태(products, cart, coupons)를 개별적으로 관리하고 있었다.상태가 분산되다 보니 로직이 길어지고, 코드 흐름을 이해하기 어려웠다.중복된 코드제품 추가, 수정, 삭제 등의 로직이 각각의 컴포넌트에 중복되어 있었다.동일한 로직을 여러 곳에서 관리하다 보니, 기능을 수정할 때 모든 컴포넌트를 일일이 수정해야 하는 번거로움이 있었다...

1. 문제3주차에는 리액트 컴포넌트를 최적화하는 방법에 집중했다. 특히 메모이제이션과 렌더링 최적화를 통해 성능을 개선하는 것이 목표였다.주요 문제는 크게 세 가지로 나뉘었다:컴포넌트 재렌더링: 상태나 props가 바뀔 때마다 불필요하게 컴포넌트가 다시 렌더링되는 문제를 해결해야 했다. 이를 막기 위해서는 값이 실제로 변경된 경우에만 렌더링을 트리거해야 했고, 이를 최적화할 방법을 고민했다.메모이제이션: 동일한 연산을 반복해서 수행하는 대신, 이전의 연산 결과를 기억해 성능을 높이는 방법을 적용할 필요가 있었다. 이 과정에서 useMemo와 useCallback을 적절히 활용하는 방법을 고민했다.깊은 비교 vs 얕은 비교: 객체나 배열 같은 복잡한 데이터 구조를 다룰 때, 얕은 비교만으로는 변화 여부를 ..
1. 문제리액트와 같은 프레임워크에서는 가상 DOM을 사용하여 성능을 최적화하는데, 이 과제에서는 이를 직접 구현해야 했다. 주된 문제는 다음과 같았다.첫번째로 가상 노드(vNode)를 실제 DOM 요소로 변환해야 했는데, 다양한 타입(숫자, 문자열, 배열, 함수형 컴포넌트 등)을 고려하여 처리하는 로직을 만들어야 했다.두번째로 여러 이벤트 핸들러를 각 요소에 개별적으로 설정하지 않고, 이벤트 위임 방식을 사용해 성능을 최적화하고 유지보수를 쉽게 해야 했다.세번째로 최적화된 렌더링을 위해 가상 DOM과 기존 DOM을 비교해 필요한 부분만 업데이트함으로써 불필요한 DOM 조작을 최소화해야 했다.이 문제들은 성능 최적화와 복잡한 사용자 인터페이스를 관리하기 위해 필수적인 부분들이었다.하지만 주로 잘 만들어진..
과제 개요이번 과제에서는 Vanilla JavaScript로 SPA(Single Page Application)를 구현했다. 주요 요구사항은 History API로 라우터를 구현하는 것, LocalStorage를 사용한 사용자 관리 기능, 컴포넌트 기반 구조 설계, 초기 상태 관리 구현, 그리고 테스트 코드 통과였다.이전에 react-router를 사용해본 경험이 있지만, 그것이 내부적으로 어떻게 동작하는지는 구체적으로 알지 못했다. 이번 과제를 통해 SPA 라우팅이 어떻게 작동하는지 직접 구현하면서 더 깊이 이해할 수 있는 시간을 가졌다.시도한 것들라우터 직접 구현기존에 사용하던 라우터 라이브러리 대신, 브라우저의 History API를 사용해 페이지 전환 기능을 구현했다. history.pushSta..