목록전체 글 (115)
기술 블로그
왜 하는가? 정확히는 자동화된 테스트를 왜하는가 개발자가 변경한 어떤 요소가 웹 어플리케이션에 손상을 유발할 수 있다고 이를 뒤늦게 발견하여 비용을 발생시킬 수 있다. 수동 테스팅이 중요하지 않다는 것이 아니다. 추후 발생할 문제를 발생하기 위해 테스트 코드를 작성하여 자동적으로 손상을 감지하고 해결할 수 있다. 즉 더 나은 코드 품질을 보장하는 것이다. 이중에서도 단위 테스트를 이해하고 수행해보고자 한다. 종류 단위 테스트 함수나 컴포넌트등 개별적 대상으로 테스트한다. 가장 일반적이며 중요하다. 통합테스트 e2e 테스트 전구간 테스트 애플리케이션 전체의 워크플로우, 전체 시나리오를 테스트한다. 본 글은 기본적인 환경 설정 세팅 이후라고 가정하고 작성되어있다. ㅡ screen.getAllByRoll() ..
정확한 알람 예약은 기본적으로 거부됨 https://developer.android.com/about/versions/14/behavior-changes-all?hl=ko 안드로이드 14부터 정확한 알람 권한이 비활성화 되어 사용자로 부터 권한을 받아야 한다. 사내에서 운영 중인 어플리케이션은 rn 서드파티 라이브러리를 통해 권한을 요청하고 관리해왔지만 현 시점 대응한 라이브러리가 없어 직접 네이티브 모듈을 구축해야했다. SCHEDULE_EXACT_ALARM은 선택적 권한이 아니기 때문에 알림상자로 권한 승인은 불가능하고 해당 앱의 설정으로 이동시켜주는것이 최선이다. // android/app/src/main/AndroidManifest.xml . . // android/app/src/main/java/..
axios와 fetch모두 데이터 패칭을 위한 도구이다. 가장 큰 차이점은 axios는 외부 라이브러이인 반면 fetch는 자바스크립트에서 기본으로 제공한다. fetch fetch('https://cataas.com/cat') .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.blob(); }) .then(blob => { document.getElementById('catImage').src = URL.createObjectURL(blob); }) .catch(error => { console.error('There was a problem with the fetc..
코테중 제곱수를 확인하는 문제가 있어 아래와 같이 구현했다. parseInt(parseInt(n).toString(2).split('').reverse().join(''))===1 2의 제곱수 특성을 활용해 2진수 문자열로 변환 후 리버스 후 1과 같은지 확인했다. 다른 아래와 같은 방법도 있다. 1.비트연산 위의 이진수를 활용한 개념와 유사하지만 더 명료하게 비트연산을 활용한다. function isSquare(n) { return n > 0 && (n & (n - 1)) === 0; } 만약 n이 8이라면 8 & 7의 and연산을 수행한다. 즉 1000과 0111의 and == 0000이므로 2의 제곱수가 맞다 만약 9일경우 1001 and 1000 = 1000 != 0이므로 2의 제곱수가 아니다. ..
const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); let input = [] rl.on("line", function(line) { if(!line) { rl.close() } else { input.push(line) } }).on("close", function() { sol(input); process.exit(); }); function sol(input){ console.log(input+"hello") } https://forgottenknowledge.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB..
class Heap { constructor() { this.heap = [null]; //0인덱스비워두기 } size() { return this.heap.length; } swap(i, j) { [this.heap[i], this.heap[j]] = [this.heap[j], this.heap[i]]; } heappush(value) { this.heap.push(value); let curIdx = this.heap.length - 1; // 현 노드 (위 value가 들어간 값) let parIdx = (curIdx / 2) >> 0; // 부모노드 while (curIdx > 1 && this.heap[curIdx] < this.heap[parIdx]) { //현 노드가 루트노드가 아니며, 동시..