https://typescript-eslint.io/rules/explicit-function-return-type/ explicit-function-return-type | typescript-eslint Require explicit return types on functions and class methods. typescript-eslint.io 해당 lint는 다음과 같은 케이스에서 모두 오류, 경고를 발생합니다 // 함수에서도 void를 선언해야함 function test() { return; } // 변수에 할당하는 함수에도 number를 선언해야함 var fn = function () { return 1; }; // 애로우펑션에서도 string을 선언해야함 var arrowFn = () =..
swagger live demo redoc live demo 우리가 많이 사용하고 있는 openapi를 볼수 있는 UI 툴은 잘 알려진 swagger가 있지만, 그의 대체제인 redoc도 있다는것 아셨나요? 이것은 swagger UI 이고 이것이 redoc UI 입니다 redoc은 3개의 컬럼 기반으로 좌측에 path, 가운데 params, 우측에 example이 보여지는 형태의 구성입니다 사람마다 swagger, redoc 호불호가 있겠습니다 nestjs 프로젝트에서 redoc을 적용하는것도 어렵지 않습니다 https://www.npmjs.com/package/@jozefazz/nestjs-redoc @jozefazz/nestjs-redoc NestJS ReDoc (Swagger UI Alternati..
구글태그매니저는 태그매니저라는 매개체를 통해 front 소스코드의 변경없이 이벤트를 심을수 있는 매우 좋은 도구입니다 모든 이벤트 로깅을 구글 태그 매니저를 통하여 하도록 하면, front 소스코드에서 이벤트 로깅과 관련된 모든 코드를 격리할수도 있습니다 이게 더더욱 가능한 이유가 추상화된 트리거를 통해 추상화된 변수영역들을 넘겨준다면 해당 트리거를 통해 전달받은 변수값들을 요리조리 변경하여 GA, BRAZE, 앰플리튜드 등등 여러 매체에 데이터를 전송할수 있습니다 전달받은 변수값을 조작하기 위해서 이러한 방법으로 가능합니다 변수값을 생성할때 "맞춤 자바스크립트"를 설정하면 정말로 빈 종이에 javascript 변수값을 적어내려갈수 있습니다 제가 실제로 사용하고 있는 예제로 설명을 드려볼까합니다 기존에 ..
1. 타입 추론이 어려운 비어있는 오브젝트로의 초기화, null 초기화를 피해주세요 // ❌ 작성자의 변수 선언 의도를 알수 없음 const wrongTypeVariable1 = {} // const wrongTypeVariable1 = null; const wrongTypeVariable2 = { a: 3, } const wrongTypeVariable3 = {} wrongTypeVariable3.b = 'aaa'; 변수 선언시에 타입의 선언이 없이 빈 object를 할당하거나, null을 할당해도 동작에는 이상이 없으나, 코드를 읽는 사람으로 하여금 해당 변수가 향후 어떤 값을 갖게되는지 예측할수 없어 모든 로직을 훑어야만 합니다. 해당 변수가 어떠한 역할을 하며 어떠한 형태의 값을 갖게 되는지 선언..
// post_data.json { "hello": "world" } $ ab -p post_data.json -T application/json -H 'Authorization: Bearer aaaabbbbccccddddeeee' -c 10 -n 200 http://api.example.com/users apache bench(ab)는 쉽게 사용할수 있는 벤치마킹 도구인데요 post method api를 체크하고자 할때 사용하는 방법을 기록차 남겨둡니다
카카오모먼트는 카카오의 대표 광고시스템입니다 카카오톡에 광고를 노출한다거나, 카카오톡 채널로 광고메시지를 뿌린다거나 모두 카카오모먼트에서 담당을 하고 있습니다 특히나 카카오톡을 통한 메시지전달은 매우 유용하기 때문에 놓칠수가 없죠 우리가 알고 있는 알림톡의 경우 여러 벤더사들을 통해 계약하여 SMS 대신에 활용할수 있습니다 친구톡도 마찬가지구요 하지만 카카오모먼트 플랫폼을 이용해서 친구톡을 발송할수도 있습니다 그것도 개인화된 메시지로 보내기가 가능합니다 개인화메시지란 모두가 똑같은 메시지를 전달받는게 아니라 개인별로 메시지 내에 이름이나 다른 요소를 넣어서 개인별로 맞춤 메시지를 보낼수 있는것입니다 https://developers.kakao.com/docs/latest/ko/kakaomoment/com..
회사에서 사용하고 있는 ORM이 typeorm입니다 nodejs 진영에서 사용할수 있는 유명한 ORM은 또 그렇게 많지는 않습니다 typeorm, sequelize, prisma, mongoose 떠오르는대로 적어보면 이렇게 있네요 모두다 typescript를 지원합니다 mongoose는 mongodb용이니깐 일단 제쳐두고 mysql에서 사용가능한 typeorm, sequlize, prisma를 비교해보겠습니다 2년전만해도 sequelize, typeorm, prisma 순서로 인기가 있었는데 이제 prisma한테 모두 역전되었습니다 그도 그럴수밖에 없는것이 prisma가 신생 ORM이기도 하고 활동도 가장 활발한것 같더라구요 이중에서 typeorm은 일찍부터 typescript를 지원하는 ORM으로서 ..
사실 결제모듈이라는게 처음 서비스 셋업하고 잘 바꾸지 않는 케이스가 더 많기 때문에 한번 셋업한 이후로는 셋업하는 방법이나 관련 내용에 대해서 잊어버릴때가 많더라구요 이번에 많이들 사용하시는 결제모듈인 아임포트를 사용하면서 다시 확인한 내용들을 다시 정리해보려고 합니다 어딘가에 정리해두고 다음에 참고해야겠어요 결제수단 사전 준비물 부분취소가능여부 실결제여부 자동결제취소 특이사항 PG사 - 카드결제 삼성/현대/농협/신한 그외 불가(체크카드 사용하지 말것) 불가 실결제(카드 결제 발생) 매일 23:00~24:00에 자동 결제 취소됨 실제 결제는 취소되었지만 아임포트 상태는 결제완료상태임 토스페이 토스앱 가능 테스트결제 네이버페이 네이버앱, 네이버페이앱 가능 테스트결제 테스트용 계좌 또는 신용카드 등록이 필요..
메인보드를 케이스에 장착한뒤에 스위치를 연결하지 않아도 메인보드 전원을 켤수 있는 방법이 있습니다 사실 지금 첨부한 사진의 메인보드에는 전원을 켤수 있는 버튼이 있긴 하지만 버튼이 없는 메인보드 모델에서도 가능합니다 전원 스위치를 연결할수 있는 부분이 이부분인데요 여기에 보통 파워스위치를 꽂는 부분이 우측 상단의 2개입니다 +PWRBTN 이라고도 아래에 써있는것을 볼수 있네요 이 두개의 뾰족튀어나온것을 전기가 흐르는 물체로 한번에 접촉하면 쇼트가 발생하여 메인보드의 스위치가 켜집니다 전혀 고장이 나거나 문제를 발생시키는 방법은 아니구요 실제로도 케이스가 메인보드의 전원스위치를 켜는 방법과 같은 방식입니다
제가 주니어의 PR에 자주 피드백하는 것들을 생각난김에 정리해보았습니다 1. null이 꼭 필요한가요? * string 또는 boolean타입으로도 충분할것 같은데 null이 꼭 필요한가요? * false 또는"" (empty string)으로 처리되지 않을까요? * optional로 처리되어야 하는 이유가 있나요? 2. 더 좋은 이름이 있지 않을까요? * 다소 긴 이름이어도 괜찮습니다 * 함수 또는 변수의 목적이 좀 더 분명하면 좋겠네요 * 이것은 이름이 지나치게 구체적입니다 3. 순수성을 유지해주세요 부수효과가 발생하였습니다 다른곳에서 예상치 못한 오류로 발전될수 있습니다 4. 함수가 하나의 일만 하는것이 좋겠네요 해당 함수가 너무 많은 일을 하는것 같습니다 5. 타입이 추론되지 않습니다 타입이 추론..
- Total
- Today
- Yesterday
- 앱
- Apple
- 공모전
- 웹표준
- 게임
- 대학생
- 모바일
- android
- 자바스크립트
- 벤처
- 경진대회
- CSS
- 창업
- 아이디어
- 안드로이드
- iPhone
- 앱스토어
- 애플
- 스마트폰
- AWS
- php
- 네이버
- 아이폰
- JavaScript
- 트위터
- 소프트웨어
- 구글
- 어플리케이션
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |