전체 글

· 개발일기
글또를 시작하며나는 평소 경험이나 배운 것들을 기록으로 남기려고 한다.평소 배운것을 밖으로 설명하는데에 어려움을 겪어, 글로 드러내며 그 연습을 하려 한다.그러나 문제는 글을 잘 쓰지 못한다는 것이다.글을 쓰다보면 갑자기 내용이 삼천포로 빠지기도 하고, 기술적인 설명을 깔끔하게 하지도 못한다.그래서 그런지 어느날 부터 글 잘 쓰고 말 잘하는 사람이 나의 동경의 대상이 되버렸다. (넘나 부러움...)  사실 오늘 '회사 프로젝트 회고' 를 작성해서 첫번째 글로 제출하려고 했다.그러나 쓰다보니 시간이 너무 길어지고 이렇게 쓰는게 맞나 의문이 들어 마무리하지 못했다.그 이유는 독자가 일반적인 사람이 아닌, 나만을 위한 글 처럼 되버렸기 때문이다.회사의 상황, 프로젝트 배경과 같이 부연 설명 없이는 이해하기 어..
ftp 자동배포를 시도하면서 알게된 것들에 대한 내용을 포스팅해보겠다. 누군가 FTP가 뭐에요?라고 묻는다면, 나는 "파일 전송 프로토콜"이요 라고 밖에 말하지 못하겠다. 이렇게 허접하게 말고, 좀 더 제대로 알고 싶다! # FTP와  SFTPFTP(File Transfer Protocol)서버와 클라이언트 간에 파일을 전송하기 위한 네트워크 프로토콜 특징1. 전송방식: 파일을 암호화하지 않은 상태로 전송함.: 전송 데이터가 암호화되지 않고 평문으로 전송해되기 때문에 전송된 파일, 사용자이름, 비밀번호가 노출될 위험 있음. -> 보안 취약 특징2. 보안이 취약함 : 보안적으로 취약함. 그래서 실무에서는 대체로 사용하지 않는다. SFTP(SSH File Transfer Protocol)ftp 연결에 보안..
css scope기본적으로 css는 전역으로 적용된다.그러나 css scoping을 하면, 해당 컴포넌트 내에서만 한정적으로 적용할 수 있게 된다.css 범위를 해당 컴포넌트로 제한하여, 컴포넌트간 스타일 충돌을 방지할 수 있다. css scoping 적용하면 컴포넌트별로 랜덤한 접두사가 붙는다.html 요소에는 고유한 랜덤 접두사가 추가되고, css에는 접두사가 포함된 셀렉터로 변환된다.만약, 두 컴포넌트에서 동일한 클래스명을 쓰더라도 서로 다른 접두사가 추가되어 서로 충돌나지 않는다.scope 예외그러나 외부 UI라이브러리를 쓰다보면 scoping을 무시해야 할 때가 있다.전역에서 하위 컴포넌트에 설정되있는 스타일을 직접 바꿔서 처리해야 하는 경우가 발생하곤 한다. 그럴 경우 vue에서는 ::v-de..
벨만-포드(Bellman-Ford) 알고리즘 1. 그래프에서 최단 경로를 찾는 알고리즘 중 하나 2. 간선비용이 양수,음수에서 모두 정상 동작함.: 간선 비용은 시간,거리,요금을 나타내서 양수가 일반적임.: 그러나 간선 비용이 음수인 경우에도 정상 동작함 (다익스크라는 음수인 간선에선 동작하지X) 3. 음수 사이클: 음수 사이클이 있는 경우 거리를 무한히 줄이게되서, 최단 경로를 정의할 수 없음. (최단거리가 존재X)구현 코드function bellmanFord(graph, start, end) { const numOfNodes = graph.length; // 10 const distance = Array(numOfNodes).fill(Infinity); // [0, 8, 2, 4, 9, 10, 1..
1. interceptor를 컴포넌트로 만들기✅ 문제처음엔 api에러시 공통 에러메세지를 팝업으로 띄우기 위한 interceptor를 js파일로 만들었다.그랬더니 공통 에러 메세지는 자동으로 관리되지만, 팝업을 띄우기 위한 UI는 컴포넌트에서 별도로 구현해야했다. ✅ 해결이러한 번거로움을 해결하기 위해 interceptor도 컴포넌트로 만들어 사용했다. ✅ 결과→ 에러메세지 팝업창을 interceptor에서 한번만 관리하면 된다.→ 단순히 로직만 공통하는게 아니라 UI까지 공통화 할 수 있어 더 편하다→ 앞으로 확장성을 고려해 js가 아닌 컴포넌트로 만들어 놓는게 좋겠다고 생각됐다.  2. 인터셉터 관리하기 - eject✅ eject메서드: 여러개 인터셉터를 설정한 후, 특정 인터셉터가 더 이상 필요하지..
✅ 문자열을 sort로 정렬시 문제점sort메서드는 문자열을 유니코드 값(아스키 코드)에 따라 정렬한다.그래서 한글의 사전 순서와 다를 수 있고, 대소문자/특수문자가 있는 경우 예기치 않은 결과가 나올 수 있다.유니코드와 아스키코드 대해서  sort로 정렬시 유니코드 순서로 정렬, 대소문자 구분이 되지 않는다.const words = ["apple", "Banana", "apple-pie", "Apple", "banana", "applepie"];words.sort(); // 결과 : [ "Apple", "Banana", "apple", "apple-pie", "applepie", "banana"]  ✅ localeCompare란문자열을 특정 언어의 규칙에 따라 비교 가능.- 언어별로 올바른 ..
✅ 이진 탐색 트리란이진 탐색 개념으 트리 구조에 적용한 것 ✅ 활용- (균형잡힌 트리인 경우) 효율적인 '검색'을 위해- 데이터 '삽입', '삭제'가 빈번할 경우- 우선순위가 필요한 작업 (최소값,최대값 빠르게 탐색)-  데이터베이스 인덱싱, 정렬, 검색 엔진, 네트워크 라우팅(라우팅 테이블 관리시) 등 ✅ 시간복잡도O(log n) : 모든 노드를 탐색하지 않고, 트리의 높이만큼 탐색하게 된다. (왼쪽, 오른쪽 트리의 높이가 비슷할 경우)O(n) : 그러나 트리가 한쪽으로 치우쳐 세로로 늘어진 경우 성능 저하  ✅ 특징1. 각 노드의 왼쪽 가지의 값들은 본인보다 작다: 10을 예로들면, 10 아래의 3,8은 10보다 작다 2. 각 노드의 오른쪽 가지 값들은 본인보다 크다.: 16을 예로들면, 23,..
회사에서 순수js로 디바운스를 구현해야 하는 일이 생겼다.프로젝트 내에 lodash를 여기저기 쓰고있어서 나는 디바운스 로직을 직접 구현하지 않고 편하게 쓰고있었다. 막상 직접 로직을 구현하려하니 많이 버벅였다.라이브러리를 쓰기 전에 그 로직의 원리를 이해해야 하는데 라이브러리에 너무 기대고 있었던걸까 다시 기본을 다지도록✅ 디바운스1.개념 : 여러번 발생하는 이벤트에서, 가장 마지막 이벤트 만을 실행되도록 제한함 2. 사용: 사용자가 검색어를 입력할 때, 입력이 멈추면 서버에 요청을 보낼 때: 버튼 연타시 불필요한 api호출을 막기 위해 3. 효과 : 불필요한 이벤트 핸들러의 실행을 줄일 수 있음 4. 내가 구현한 코드- 버튼 클릭시 setTimeout함수가 반환한 Id를 Clear해서  setTime..
✅ 문제피그마 규격대로 똑같이 구현을 했는데 버튼의 너비가 틀어지는 현상 발생이유는 버튼 안의 글자가 피그마와 브라우저간 다르게 나타나기 때문이다. font weight나 자간이 다르게 출력된다. ✅ 원인1. 피그마는 자체 폰트 렌더링 방식이 있기 때문에 피그마는 브라우저등 사용자 환경에 구애받지 않고, 일관된 플래폼을 보여주기 위해 자체 렌더링 방식(antialiasing)을 사용한다. 안티앨리어싱 이란?: 픽셀로 되있어 나타나는 계단 현상을 줄이고 이미지를 부드럽게 만드는 기술.👉해결법피그마와 완전 동일한 표현은 불가하다.css속성을 사용하여 글꼴을 피그마와 비슷하게 표현해줄 뿐이다. 1. macOS : font-smooth 사용Font-smooth 속성은 글꼴이 렌더링될 때 앤티앨리어싱 적용을 막..