본문 바로가기
728x90
반응형

source-code205

소프트웨어 장인 정신 이야기 (2) 2024.05.07 - [source-code/software] - 소프트웨어 장인 정신 이야기 (1)3장. 고급 테스트 주도 개발단계마다 테스트는 더욱더 제한적이고 구체적으로 바뀌는 반면, 제품 코드는 점점 더 일반화된다. 이 과정은 제품 코드가 너무 일반적이어서 실패하는 테스트를 더 이상 생각해 낼 수 없을 때까지 계속된다. 그러면 문제가 모두 풀린 것이다. 복잡한 문제일 수록, 단순한 공리(실패하는 테스트 코드)에서 출발해야 한다.한 번에 한 단계씩, 제품 코드를 구현하고, 리팩터링 하고, 다음 테스트 케이스를 작성해야 한다. 하지만... 모든 경우에 이러한 주기를 적용하는 게 어렵지 않을까?가장 대표적인 예시가 → 요구사항이 너무 복잡해서, 한 번에 모든 구현을 작성하지 않으면 테스트 케이스가 통.. 2024. 5. 9.
소프트웨어 장인 정신 이야기 (1) 1장. 장인 정신...이 연대표를 항공학 연대표와 비교해 보자. 비슷한 점을 찾을 수 있는가? 이론의 단계적인 발전, 마니아들이 성급한 도전과 실패, 역량의 단계적인 발전이 보이는가? 우리가 무엇을 하는지도 몰랐던 수십 년의 기간이 보이는가?...오늘날의 항공기 조종사들만큼이나 자기 기술을 깊이 이해하는 프로그래머를 양성해 왔는가? 분명히 장인이 필요한데 우리에게는 장인이 있는가? 항공학 역사를 소개하며, 장인 정신의 필요성을 강조한 구문이 굉장히 인상 깊었다. 프로그래밍 역시 (항공학과 유사하게) 인류의 삶에 밀접하게 연관되어 있으며빠른 속도로 발전했고명확한 장인 정신이 구축되지 않은 상태로 사용되었으며이로 인해 불필요한 시행착오들이 반복되고 있다 는 것!즉... 오늘날의 항공학이 '안전하게 비행기를 .. 2024. 5. 7.
[Github Actions] release assets에 build 결과물 zip 업로드하기 Background현재 chrome extension 서비스는 아래와 같은 과정을 거쳐 스토어 업데이트를 진행하고 있습니다.production branch 병합개발자 local 환경 build생성된 build 결과 파일 스토어 업데이트그런데 이 중 3) 개발자 local 환경 build 로 인해원격 source code와 관계없이, 당시 개발자의 local 환경에 따라 build 결과물이 달라진단 문제가 발생했습니다. 실제로 담당 인원의 실수로, 스토어에 staging 환경에 코드가 업로드 되어스토어 재심사가 완료될 때까지 서비스를 이용할 수 없었던 적도 있었기 때문에... 해당 과정의 자동화가 반드시 이뤄져야 한다고 생각했습니다. Solutions담당 개발자 local 환경이 아닌, 원격 환경에서 번들.. 2024. 5. 5.
[jest] jest dom을 통한 DOM 객체 동작 테스트 하기 Backgrounds 현재 개발 중인 서비스에서는 사용자가 생성한 데이터를 통해 웹 페이지에서 특정 요소(HTMLElement)를 조회하는 기능을 제공하고 있습니다. 이때 해당 요소를 찾는 알고리즘이 제법 복잡하고 예외 케이스가 많이 발생해, 코드를 수정할 때마다 고객사 페이지에 직접 접속해 정상 동작 여부를 확인하는 불편함이 존재했습니다. 그리고 이로 인해 1) 개발 소요 시간 증대 2) 적극적인 리팩토링 어려움 (수정이 발생하면, 기존 잘 되던 케이스가 안될 것이라는 두려움) 과 같은 문제들이 발생했습니다. Solutions 최선의 방안은 모든 고객사 페이지를 자동으로 크롤링하면서, 로직이 정상 동작하는지 확인하는 것이겠으나... 하루아침에 이 정도의 자동화 테스트를 도입하기엔 현실적인 무리가 있었습.. 2024. 4. 10.
단위 테스트 - 고전파와 런던파, 그리고 개인적인 견해 Backgrounds사내 package를 개발하며 테스트 코드를 작성하던 도중, 이런 일이 있었습니다. 입력받은 데이터를 서비스 내부 정책에 따라 필터링하는 모듈이 존재했고, 해당 모듈은 내부 정책 관련 로직을 처리하는 다른 모듈을 의존성으로 주입받고 있었습니다.class Module { filterPoliciy: Policy constructor (filterPoliciy: Policy) { this.filterPoliciy = filterPoliciy } filter(data:Data): Data | null { // 해당 메서드 내부적으로 Policy interface 사용 ...this.filterPoliciy.isIdExist() } } 아래와 같은 형태로 테스트 코드를 작성했습니다.descri.. 2024. 3. 28.
[Github Actions] PR 병합 시, 자동으로 package publish 하기 Backgrounds 현재 사내 서비스에서 공통적으로 쓰이는 모듈들을 github package로 제공하고 있습니다. git flow 전략에 따라 develop - staging - production 환경으로 구성되어 있으며, 각 개발 사항을 develop branch에 병합한 뒤, staging 환경에서 테스트한 후, production branch에 병합합니다. 이때 해당 패키지의 새로운 버전을 publish 하기 위해서는 다음과 같은 과정이 필요합니다. production 브랜치 내 PR 생성 → review 및 merge 개발자 local 환경에서 production branch 이동 → build + publish 해당 배포 사항 직접 공지 Problems 위 과정에는 다음과 같은 문제점이 존.. 2024. 3. 26.
[Github Actions] Workflows에서 복수개 env variables 사용하기 배경 github actions를 통해 사내 npm 패키지를 자동으로 빌드-배포-릴리즈 하고자 했습니다. production branch에 버전과 관련된 PR이 병합되면 패키지 버전 변경 → build → publish → release 를 수행하는 workflow를 작성했는데... 여기서 env 파일, 즉 환경 변수 관련 문제와 마주했습니다. export class DataFetcher { private BASE_URL = process.env.BASE_URL } 다음과 같이 환경 변수를 참조하고 있으며 // package.json { "scripts": { "build:prod": "DOTENV_CONFIG_PATH=.env.production node -r dotenv/config scripts/e.. 2024. 3. 25.
[next js] App Router Fetch Cache가 동작하지 않을 때 Data Fetching https://nextjs.org/docs/app/building-your-application/data-fetching/fetching-caching-and-revalidating Data Fetching: Fetching, Caching, and Revalidating | Next.js Learn how to fetch, cache, and revalidate data in your Next.js application. nextjs.org Next js App router는 fetch web api를 확장, caching, revalidating 등의 기능을 제공해 각 요청을 자동으로 memoize 할 수 있도록 합니다. async function getData() { con.. 2024. 3. 11.
localhost fetch시 ECONNREFUSED 에러 해결하기 문제 상황 Next JS server component에서 로컬 개발 서버(ex localhost:8080)로 fetch를 통해 요청을 보내자 다음과 같은 에러가 발생했습니다. Internal error: TypeError: fetch failed at Object.fetch Cause: Error: connect ECONNREFUSED ::1:3004 개발 환경은 Next JS 14 버전(즉 node 18.17.0 이상). 해결 방안 처음에는 프론트단의 문제(혹은 Next server component의 문제..?)라 생각을 했었는데 fetch API 단에서 에러가 나는 걸 보고, 바로 구글링에 착수. 다음과 같은 이슈를 만날 수 있었습니다. https://github.com/node-fetch/nod.. 2024. 3. 7.
728x90
반응형