분류 전체보기
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcgd71o%2FbtsLAgbeHzQ%2Fms1C5kiTjiKhMzJk3M2YRk%2Fimg.jpg)
모던 리액트 deep dive 스터디 - 14장 발표 정리
모던 리액트 deep dive 스터디 - 14장 발표 정리 주제: 14장 웹사이트 보안을 위한 리액트와 웹페이지 보안 이슈(874p~902p)크로스 사이트 스크립팅(XSS)웹사이트 개발자가 아닌 제3자가 웹사이트에 악성 스크립트를 삽입해 실행할 수 있는 취약점 xss 이슈가 발생할 수 있는 방법 dangerouslySetInnerHTML prop - 특정 브라우저 DOM의 innerHTML을 특정한 내용으로 교체할 수 있는 방법- 인수로 받는 문자열에는 제한이 없다. (검증 필요) useRef를 활용한 직접 삽입 - useRef를 활용하면 직접 DOM에 접근 가능하져 보안에 취약해진다. xss 문제를 피하는 방법 - 제3자가 삽입할 수 있는 HTML을 안전한 HTML 코드로 한 번 치환하는 것..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmWTVy%2FbtsLm3dnQ6A%2FfRK02y32fXmiJbmGfZl21k%2Fimg.jpg)
모던 리액트 deep dive 스터디 - 12장 발표 정리
모던 리액트 deep dive 스터디 - 12장 발표 정리 주제: 12장. 모든 웹 개발자가 관심을 가져야 할 핵심 웹 지표 (775p ~ 812p) 핵심 웹 지표 - 최대 콘텐츠풀 페인트(LCP)- 최초 입력 지연(FID)- 누적 레이아웃 이동(CLS) - 최초 바이트까지의 시간(TTFB)- 최초 콘텐츠풀 시간(FCP) 1. 최대 콘텐츠풀 페인트(LCP) 페이지가 처음으로 로드를 시작한 시점부터 뷰포트 내부에서 가장 큰 이미지 또는 텍스트를 렌더링하는 데 걸리는 시간 큰 이미지와 텍스트 (가장 큰 요소로 고려됨) 내부의 poster 속성을 사용하는 url()을 통해 불러온 배경 이미지가 있는 요소텍스트와 같이 인라인 텍스트 요소를 포함하고 있는 블록 레벨 요소 (, ...) 크기가 크더라..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdbvf6f%2FbtsLcpgbN2n%2FkPKDiMbitxhMkU1ZIGCj6K%2Fimg.jpg)
모던 리액트 deep dive 스터디 - 10장 발표 정리
모던 리액트 deep dive 스터디 - 10장 발표 정리 주제: 10장 리액트 17과 18의 변경 사항 살펴보기 (655p ~ 714p) 리액트 17 특징 : 16 버전과 비교하면 새롭게 추가된 기능은 없으며 호환성이 깨지는 변경 사항, 즉 기존에 사용하던 코드의 수정을 필요로 하는 변경 사항을 최소화하였다. 16 버전에서 17 버전으로의 업그레이드는 큰 부담 없이 할 수 있다. 리액트 17부터는 점진적인 업그레이드가 가능하다. *일부 트리와 컴포넌트에 대해서만 리액트 18을 선택하는 점전적인 버전 업이 가능이전버전까지는 이전 버전에 머무르던 새로운 버전으로 완전히 넘어가버리던 둘 중 정했어야함. 관리측면에서는 비효율이지만, 새로운 버전으로 한꺼번에 업그레이드하기 부담스러울 때는 유용하다 ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtqS8d%2FbtsKWkUc214%2FyxiEDzhKkucy3Fk5HVN7UK%2Fimg.jpg)
모던 리액트 deep dive 스터디 - 4장 발표 정리
모던 리액트 deep dive 스터디 - 4강 발표 정리 주제: 4장 서버 사이드 렌더링 (252p ~ 335p) 싱글 페이지 애플리케이션(SPA) 렌더링과 라우팅에 필요한 대부분의 기능을 서버가 아닌 브라우저의 자바스크립트에 의존하는 방식 최초에 서버에서 최소한의 데이터를 불러온 이후부터는 이미 가지고 있는 자바스크립트 리소스와 브라우저 API를 기반으로 모든 작동이 이뤄진다. # LAMP Linux, Apache, MySQL, PHP/Python # JAM JavaScript, API, Markup JAM 스택을 사용하여 프런트엔드는 자바스크립트와 마크업을 미리 빌드해 두고 정적으로 사용자에게 제공하여 서버 확정성 문제에서 자유로워질 수 있게 됨. 시대가 지나면서 인터넷 속도, 하드웨어..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcP91BV%2FbtsKl2syCH7%2FviIppKrOWkdcjaMYYZwWRk%2Fimg.jpg)
[협업] 사내 Git Branch 전략 소개 및 git branch sync - shell script 작성
사내에서 사용중인 git branch 전략에 대해 설명해보고자 합니다. 저희 프로젝트는 서비스 운영 전에는 단일 서버로만 운영되었고, 약 5명의 프론트엔드 개발자들이 동시에 많은 개발 작업을 진행하다 보니, develop 브랜치 하나에 모든 커밋을 쌓아가며 개발을 진행했습니다. 그러나 실제 서비스가 운영되면서 서버가 두 개(운영, 개발)로 나뉘게 되었고, 프론트엔드 Git 브랜치 관리에 새로운 전략이 필요해졌습니다. 서비스 운영 당시에는 저를 포함한 두 명의 프론트엔드 개발자가 메인 개발을 담당했고, 어떻게 하면 가장 편리하고 효율적으로 서로 작업할 수 있을지 고민했습니다. 이후 몇 번의 시행착오를 거친 끝에, 현재도 유지 중인 회사의 Git 브랜치 전략을 마련할 수 있었습니다. 서비스 운영시점부터 실제..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA6ow6%2FbtsH8x2CUeM%2FRD7t19KqbXl7z1EXbQjVz0%2Fimg.jpg)
이펙티브 타입스크립트 스터디 - 7주차 발표 정리
이펙티브 타입스크립트 스터디 - 7주차 발표 정리 아이템 56. 정보를 감추는 목적으로 private 사용하지 않기 const diary = new Diary()diary.secret// ~~~~~~ Property 'secret' is private and only// accessible within class 'Diary' 타입스크립트에는 public, protected, private 접근 제어자를 사용하여 접근을 제한할 수 있다. 하지만, 이러한 접근 제어자들은 타입스크립트 키워드이기 때문에 컴파일 이후에는 제거된다 자바스크립트에서는 접근 제어자가 없기때문이다. 자바스크립트 코드로 변환되면 일반적인 속성으로 취급되어 접근이 가능해진다. onst diary = new Diar..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbnoqdp%2FbtsHZYGA9r2%2FV6FCNxyVMsO7lpJBskVKI1%2Fimg.jpg)
이펙티브 타입스크립트 스터디 - 6주차 발표 정리
이펙티브 타입스크립트 스터디 - 6주차 발표 정리 아이템 49. 콜백에서 this에 대한 타입 제공하기let, const는 렉시컬 스코프인 반면에, this는 다이나믹 스코프이다. 이는 '정의된' 방식이 아니라 '호출된' 방식에 따라 달라지는 것을 말한다. const c = new C()const method = c.logSquaresmethod() 이 코드는 this를 찾지못해 런타임에 오류를 발생시킨다. method.call(c) 이럴때는 call을 사용해서 명시적으로 this를 바인딩 하여 문제를 해결할 수 있다. this는 반드시 인스턴스에 바인딩 되어야하는 것이 아니며 어떤 것이든 바인딩 할 수 있다. class ResetButton { constructor() { this...
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp2DJP%2FbtsHRNwFoiR%2FFMRfh2l5qizFLJA29bYNVk%2Fimg.jpg)
이펙티브 타입스크립트 스터디 - 5주차 발표 정리
이펙티브 타입스크립트 스터디 - 5주차 발표 정리 주제: 5장 any 다루기 (아이템 42 ~ 44) 아이템 42. 모르는 타입의 값에는 any 대신 unknown을 사용하기 함수의 반환값과 관련된 형태function parseYAML(yaml: string): any { // ...}interface Book { name: string author: string}const book: Book = parseYAML(` name: Wuthering Heights author: Emily Brontë`) 만약, 함수의 반환 타입을 any로 설정했다면 사용하는 쪽에서 함수의 반환 타입을 따로 설정을 해줘야한다. const book = parseYAML(` name: Wuthering Height..