Til

    4/24 월 [프로그래머스] 해시(Hash) 문제와 이터러블(Iterable) TIL

    4/24 월 [프로그래머스] 해시(Hash) 문제와 이터러블(Iterable) TIL

    [프로그래머스] 해시 > 의상https://school.programmers.co.kr/learn/courses/30/lessons/42578나의 풀이: // 더 깔끔히 정리한 버전 function solution3(clothes) { const map = {} for (const [name, type] of clothes) { map[type] = (map[type] ?? 0) + 1; // map[type] = (map[type] || 0) + 1; // -> 이것도 된다. } let count = 1; for (const key in map) { count *= (map[key] + 1); } return count - 1; } // Map을 이용하기 function solution4(clothes..

    4/21 금 (모듈과 테스트 코드에 대하여) TIL

    모듈 (Module)이란? 그리고 Node.js에서 모듈을 사용하는 방법? (내장/외부/사용자 정의 모듈 사용 가능) 모듈: JavaScript 파일 단위로 분리된 코드. 특정한 기능을 가진 여러 개의 함수와 변수들의 집합. 용례: 고수준 계층의 모듈(도메인)이 저수준 계층의 모듈(하부 구조)에 의존하게 두지 말자 - 의존성 역전 원칙node_module = npm install 명령어를 통해 설치된 모듈 파일들이 모여있는 곳. 하나의 모듈에서 다른 모듈을 호출하여 사용할 수 있다. 모듈은 그 자체로도 하나의 프로그램이면서 다른 프로그램의 부품으로도 사용될 수 있다. Node.js의 서버 모듈에는 대표적으로 http 모듈과 Express 모듈이 있다. tsconfig.json에서 esModuleInter..

    4/20 목 (프로미스(async/await)와 클로저) TIL

    프로미스 (Promise)와 async/await에 대하여 ES6 이전: 함수 안의 함수 안의 … 함수: 콜백 지옥: 콜백의 결과값을 그 다음 함수에 대입하려면 그 값이 살아있는 블록(=지금 함수)안에 또 콜백을 부르는 함수를 넣는 식으로 들어가야 했음. 블록 안의 블록 안의 블록이 계속 이어짐. ES6의 Promise 객체 도입: Promise와 .then()의 조합으로 비동기 함수로 받는 콜백 결과값을 선형적(체이닝)으로 연결시키게 됨.ES6부터는 Promise라는 걸 도입, 콜백 지옥을 해결함. 비동기 수행을 하는 함수는 Promise 객체를 반환.⇒ 이 Promise는 함수를 매개변수로 받음. ex)function 고교_DB_주소_조회_Promise(학생_주민번호, 고교명) { return new..

    4/19 수 (소프트웨어 개발 방법론 개괄) TIL

    개발 방법론 (Development Methodology)에 대하여: 시스템 개발의 이론적 기반: 소프트웨어를 개발하는 방법에 대한 이론으로서, 소프트웨어 개발 과정, 절차, 방법, 산출물, 기법, 도구들을 체계적으로 정리하고 표준화시킨 것. 과거에 비해 개발 및 시스템 통합 작업이 복잡하고 긴 개발일정을 필요로 하게 됨.⇒ 몇몇 개발자에 의존하기 보다 프로젝트의 관리와 이의 바탕이 되는 개발 방법론의 중요성이 부각되게 됨. 연도별 주요 소프트웨어 개발 방법론의 변화 (참고: https://www.koscom.co.kr/portal/main/contents.do?menuNo=200368) 1. 구조적 방법론: 절차 중심의 SW개발 방법론. 폭포수 모델이 대표적DFD (Data Flow Diagram, 데..

    4/18 화 (문제풀이) TIL

    ※ 이하는 스스로 공부하며 적어둔 노트이며 불확실한 내용이 있을 수 있습니다. 학습용으로 적합하지 않음을 유념해주세요. ※ [프로그래머스] 문자열 밀기https://school.programmers.co.kr/learn/courses/30/lessons/120921나의 풀이: // 016-문자열 밀기.js // 시간복잡도는 O(N) function solution(A, B) { if (A === B) { return 0; } // 오른쪽으로 미는 것이므로 만들어지는 순환 문자열은 잘리는 부분 i가 오른쪽 끝부터 왼쪽으로 이동해야 함. for (let i = A.length - 1; i > 0; i--) { // 시간복잡도 O(1) const newString = A.slice(i) + A.slice(0,..

    4/3 월 (수료하다) TIL

    최종 발표가 있던 날이다. 하루 종일 일이 손에 안 잡혔다. 배가 안 고프다가 갑자기 급격하게 꼬르륵 거리기도 하였다. 각 팀 부스에서 손님(?)을 먼저 받아 Q&A 시간을 가졌고 우리 부스는 외부 손님 한 분을 맞아 30분간 얘기를 나눴다. 오신 분이 우리 전부가 웃는 것보다 더 활짝 웃으면서 얘기를 이끌어줘서 편안하게 얘기할 수 있었다. 감사했다. 사실 여기에 깜짝 비화가 숨겨져 있는데, 지금은 생략하겠다. 아직 결말이 나지 않은 이야기라서 한달 쯤 뒤 해피엔딩이 나면 적을 생각이다. 1시간 후 저녁 8시부터 가운데 발표장으로 모여 최종 발표 세션을 가졌다. 각 팀당 10분을 가이드라인으로 잡았는데 우리 2조가 10분을 제일 잘 지켜서 (심지어 그보다 덜 됐을 수 있다) 깔끔하게 딱 마무리지었다. 발..

    4/1 토 (Redis에 대하여, CPU와 core에 대하여) TIL

    4/1 토 (Redis에 대하여, CPU와 core에 대하여) TIL

    (최종 프로젝트 마무리 중) 보던 페이지(아직 정리 전): 여기 잠깐 봄: (1시간 40분)[우아한테크세미나] 191121 우아한레디스 by 강대명님💻 우아한형제들의 기술조직 이야기를 전하는 우아한Tech 유튜브입니다.💻 1) Redis 는 어떤 것이고 어떤 식으로 사용할 수 있는가? 2) Reids 기본 기능 3) Redis 운영시 장애 포인트등 잘 쓰는법 우아한테크세미나는 구성원분들이 관심을 갖고 있는 기술적 주제에 대해 내외부 강사분을 통해 살펴보는 시간으로 꾸며지며, 구성원들뿐만 아니라 같은 고민과 관심을 가진 외부 개발자분들도 초대하여 진행됩니다.https://www.youtube.com/watch?v=mPB2CZiAkKM대략 목차: 왜 collection이 중요한가 ?11:11redis를 실행..

    3/31 금 (V8 엔진에 대하여 - Node.js가 빌드(컴파일)을 한다고?) TIL

    (최종 프로젝트 마무리 중) 보던 페이지: V8 엔진이란? (’node인데 얘가 빌드(컴파일)을 하는 게 맞나?’) - https://1000hg.tistory.com/48 ※ 이하는 스스로 공부하며 적어둔 노트이며 불확실한 내용이 있을 수 있습니다. 학습용으로 적합하지 않음을 유념해주세요. ※ V8 엔진 https://blog.bitsrc.io/secret-behind-javascript-performance-v8-hidden-classes-ba4d0ebfb89d: Google의 오픈소스 자바스크립트 엔진. C++로 작성됐고 구글 크롬, 크로뮴 웹 브라우저와 Node.js에 쓰임. 컴파일을 한다는 것은 코드를 기계어로 변환한다는 것이다. 당연히 운영체제에 맞는 기계어여야 할 터이므로 컴파일된 프로그램은..

    3/30 목 (Entity 관계 설정 다시 하고 발표 영상 피드백도 받다) TIL, TIT

    (최종 프로젝트 마무리 중) 오늘 한 일: requestList.ejs에서 ‘비로그인 상태에서는 getRequestsByCursor 불러오게 분기하기 entity들에서 ManyToOne, OneToMany cascade 옵션 뒤바꾸기dbeaver에서 Ctrl+Shift+F 누르면 자동 정렬 된다. 왜 쿼리는 조인해오는 테이블의 deleted_at=null도 조건으로 검사해오도록 짜여졌는데 왜 결과는 그게 아닌가? Left Join이 수상하다. 내일 할 일: 피드백 받은 ‘재 페인팅해야 하는 컴퓨테이션을 제거 및 개선했다…’ 부분 알아보고 ppt 고치기 (링크: https://docs.google.com/spreadsheets/d/13-EjXTbm2U_NYutdDJg7IfMNXWL5b3P1rdBrROmTA..

    3/29 수 (최종 발표 대본 제작) TIL

    3/29 수 (최종 발표 대본 제작) TIL

    (최종 프로젝트 진행중) 내일 할 일: requestList.ejs에서 ‘비로그인 상태에서는 getRequestsByCursor 불러오게 분기하기 entity들에서 ManyToOne, OneToMany cascade 옵션 뒤바꾸기dbeaver에서 Ctrl+Shift+F 누르면 자동 정렬 된다. 왜 쿼리는 조인해오는 테이블의 deleted_at=null도 조건으로 검사해오도록 짜여졌는데 왜 결과는 그게 아닌가? Left Join이 수상하다. 조사할 항목 및 문제상황 기록: 발행-구독 모델(Publish–subscribe pattern)발행구독 패턴은, 비동기 메시징 패러다임이다.발행자와 구독자가 있고, 그 사이에 브로커(=메시지 큐)가 존재하는 형태이다.이것의 특징을 요약하면,1. 발행자 메시지의 수신자가..

    3/28 화 (최종 발표 PPT 제작 및 자료 조사) TIL, TIT

    3/28 화 (최종 발표 PPT 제작 및 자료 조사) TIL, TIT

    (최종 프로젝트 진행중) 한 일: 최종 PPT 자료 만들기 ‘주별 진척도’ 그리기 ※ 이하는 스스로 공부하며 적어둔 노트이며 불확실한 내용이 있을 수 있습니다. 학습용으로 적합하지 않음을 유념해주세요. ※ [TypeORM] queryBuilder의 andWhere 조건문에 삼항 연산자를 적용하고 싶었다 ✔️이것과 비슷한 조건절을 queryBuilder로 구현하고 싶었다: // 커서 페이지네이션 async getPostsByCursor(endCursor?: number) { const isFirstPage = !endCursor; const [posts, total] = await this.postsRepository.findAndCount({ take: 7 + 1, where: !isFirstPage ?..

    3/27 월 (Timezone 트러블슈팅 정리중) TIL, TIT

    (최종 프로젝트 진행중)내일 할 일 시간 차 트러블슈팅 정리하기 ※ 이하는 스스로 공부하며 적어둔 노트이며 불확실한 내용이 있을 수 있습니다. 학습용으로 적합하지 않음을 유념해주세요. ※ 시간 차 트러블슈팅중…UTC 적용전…현재 사용하는 Timezone 정리: 분류타임존비고AWS RDS DBMSUTCTypeORMZ = UTCTypeORM에게 너가 연결할 DBMS는 UTC로 되어있다! 라고 알려주는 거죠.옵션에 timezone=’Z’라고 추가함서버컴퓨터(Heroku) UTC아! 이 컴퓨터의 ‘로컬 타임’이 KST나 en-US 등이 아니고, UTC로 되어 있다는 뜻이었다..! 여기서 프론트에서 “Asia/Seoul”로 바꿔서 출력해주는 게 맞는 것이었다. 개발컴퓨터KST무시하자 = “Asia/Seoul”로 ..

    3/25 토 (중복 렌더링 트러블슈팅 완료) TIL, TIT

    (최종 프로젝트 진행중) 할 일: 3번씩 HTTP 요청 보내던 것 시간차 조사하기 ※ 이하는 스스로 공부하며 적어둔 노트이며 불확실한 내용이 있을 수 있습니다. 학습용으로 적합하지 않음을 유념해주세요. ※ 문제 상황: 페이지를 호출할 때 첫 번째 GET 요청 후 마지막에 2번의 똑같은 요청이 더 생긴다. 다른 팀들에도 물어봤는데 다들 이런 현상은 없다고 한다. 튜터님과 함께 고민해봤지만 이유를 알 수 없어 일단 물러나왔다. 저녁이 되고 우리 팀원 중 한 명의 로컬 환경(localhost)에서는 이런 현상이 없다는 점에 방점을 두고 조사를 이어나갔다. 어떤 페이지에 들어가든 이런 현상이 발생한다는 것도 힌트가 될 수 있을 것 같았다. 우리 프로젝트는 테두리 템플릿을 두고 가운데 내용물을 바꿔 끼워가며 페이..

    3/24 금 (프로젝트 기술 질답(수정중)) TIL

    (최종 프로젝트 진행중)오늘은 프로젝트에서 나올 수 있는 예상 기술 질문에 대한 질답 시간을 가졌다. ※ 이하는 스스로 공부하며 적어둔 노트이며 불확실한 내용이 있을 수 있습니다. 학습용으로 적합하지 않음을 유념해주세요. ※ 커서 기반 페이지네이션 v.s. 오프셋 기반 페이지네이션 과 각각의 장단점offset 이전/다음 페이지의 결과를 요청할 때 페이지의 번호와 크기를 지정해 이전 페이지의 마지막 결과 행의 오프셋을 사용하여 다음 페이지의 결과를 가져오는 방식이다. offset/limit을 사용한 쿼리 이용장점: 페이지 단위로 구분해 유저가 페이지를 선택하고 이동가능하며 전체 페이지의 갯수를 알 수 있다.직관적이고 구현이 간단하다. (어드민 페이지 같은 단순한 경우에 적합)단점: 데이터 중복, 사용자가 ..

    3/23 목 (이래서 다들 오픈일에 비상 근무 하는 거구나…) TIL, TIT

    (최종 프로젝트 진행중)어제 배포하고 오늘 유저 테스트를 오픈함. 배포환경에서 잘 동작하도록 낮까지 열심히 버그를 수정하고 또 수정하고 하다가 설문을 공지하기로 한 시간보다 한참 지나서야 공지를 올리게 되었다. 이때까지만 해도 고칠 건 대략 다 고쳤으니까 유저 피드백이 들어오는 동안 밥 먹으러 갈 수 있겠거니 하는 생각을 하고 있었더랬지… 또 나름 ‘지금 상태로 유저에게 적발되는(?) 에러도 피드백의 일종이니까, 설문이 마감될 때까지 코드를 고치지 않는 게 타당하지 않겠냐’하는 논의도 팀 내에서 오갔었다. 다시 말하지만 이 모든 생각은 유저가 몰려든 직후 메인 페이지가 다운되기 이전까지의 일이었다. ‘에러도 피드백의 일종이니까’는 무슨, 아예 서비스를 접속도 못해서 피드백 자체가 불가능하게 생겼는데 밥은..

    3/22 수 (HTTPS로 배포하기 사전 조사 및 과정) TIL, TIT

    (최종 프로젝트 진행중)오늘은 서버 배포를 진행하였다. ※ 이하는 스스로 공부하며 적어둔 노트이며 불확실한 내용이 있을 수 있습니다. 학습용으로 적합하지 않음을 유념해주세요. ※ Heroku로 배포를 결정하기까지 의사 결정 과정로컬 컴퓨터에서 만든 웹 서비스를 빌드하여(정적 파일로 만든 다음에) S3에 배포할 수 있다고 한다. 빌드(Build)란?소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 그 결과를 말한다. 인간이 짠 코드를 한 번에 기계어로 변환해주는 작업을 컴파일이라고 하는데, 빌드는 이렇게 컴파일 된 코드를 실제 실행할 수 있는 상태로 만드는 일. (빌드 과정을 도와주는 도구를 Build Tool이라고 함) 정리: Build = Complie + 그 외 작업 (테스..

    3/20 월 (할 일 목록 정해 개발 중) TIL

    (최종 프로젝트 진행중)할 일 users.module에 위치를 인증할 수 있도록 하는 PATCH api 만들기 users.address_certified 를 true(=1)로 바꾸는 PATCH api 작성 ‘동네명’이 같거나, 좌표 사이 거리가 1km 이내라면 ‘동네 인증이 완료되었습니다’ 메세지와 함께 ⇒ 프로트에서 체크 후 PATCH api 호출 이 프론트를 어디 페이지에 붙일 것인가? 일단 ‘위치 인증하는 페이지’를 만든다. → 아니다. 그냥 js 함수만 만들어둔다. … → 으아 복잡하다. 그냥 페이지로 가서 버튼을 누르면 동작하게 하자!후보1: 최초 회원가입 시 ‘위치 인증 하러 가시겠습니까?’ 모달과 함께 위치 인증 js 함수를 호출한다. 후보2: 아니면 상단바에 위치 미인증 유저일 시 ‘위치인..

    3/19 일 (Jest로 프론트 동작 테스트하기 연구중) TIL

    (최종 프로젝트 진행중)할 일 mooin_cat_dev DB를 새로 만들고 구조 먼저 따오고 데이터 복사하기 ‘mooin_cat_dev’라는 이름으로 새 DB 만들기 서버 켜서 synchronization: true로 외래키 설정이랑 디폴트값 같은 설정 그대로 빈 테이블들 만들기 mooin_cat에서 테이블들 선택하여 ‘데이터 내보내기’로 mooin_cat_dev에 타겟 지정하여 데이터 복사하기 share_product 파트의 외래키와 관련해서 에러 메세지가 두 번 떳지만 일단 필요한 데이터는 다 들어옴 확인. (참고: https://islet4you.tistory.com/entry/dbeaver-table-data-다른-DB로-내보내기) users 테이블이 ‘우편번호 → 도로명 주소’, ‘동네명’, ‘..

    3/18 토 (localhost에 HTTPS 연결하기와 Geolocation 웹 API 실험) TIL, TIT

    (최종 프로젝트 진행중)할 일 Date input타입을 서버로 보내기 시작 날짜와 끝 날짜를 requests 테이블에 저장하기 ‘모집중|모집완료’ 컬럼을 requests 테이블에 추가하기 ‘작성 완료’ 버튼 ajax 연결하기 수정하기 페이지에 기본 글과 함께 불러와놓기 작성자 본인이면 수정하기 및 삭제 버튼이 나타나도록 하기 ‘수정 완료’ 버튼 ajax 연결하기 ‘모집중’→’모집완료’로 바꿀 방법 생각하기 삭제는 마이페이지에 가서 하도록 할 생각. ? user에게서 받은 집주소로 geoCoder.address…()으로 좌표와 동네명 얻기. ‘처음에 테이블 구조를 단순히 address만 있는 항목으로 만들어서 아직 수정하지 못했다” ※ 이하는 스스로 공부하며 적어둔 노트이며 불확실한 내용이 있을 수 있습니..

    3/17 금 (<img> 경로 설정 문제) TIL, TIT

    3/17 금 (<img> 경로 설정 문제) TIL, TIT

    (최종 프로젝트 진행중)할 일 Date input타입을 서버로 보내기 시작 날짜와 끝 날짜를 requests 테이블에 저장하기 ‘모집중|모집완료’ 컬럼을 requests 테이블에 추가하기 ‘작성 완료’ 버튼 ajax 연결하기 수정하기 페이지에 기본 글과 함께 불러와놓기 작성자 본인이면 수정하기 및 삭제 버튼이 나타나도록 하기 ‘수정 완료’ 버튼 ajax 연결하기 ‘모집중’→’모집완료’로 바꿀 방법 생각하기 삭제는 마이페이지에 가서 하도록 할 생각. ? user에게서 받은 집주소로 geoCoder.address…()으로 좌표와 동네명 얻기. ‘처음에 테이블 구조를 단순히 address만 있는 항목으로 만들어서 아직 수정하지 못했다” ※ 이하는 스스로 공부하며 적어둔 노트이며 불확실한 내용이 있을 수 있습니..