728x90 CS86 크롬 브라우저에 URL을 입력하면? 요약 브라우저 URL 해석 URL 파싱 - HSTS, DNS, ARP HTTP 메시지를 통한 TCP socket 통신(Three-Way Handshake), ARP HTTP 프로토콜 요청, HTTP 서버 응답 웹 브라우저가 리소스 그림 - 브라우저 렌더링 TCP 연결 종료 (TCP Four-Way Handshake) 출처 : http://tcpschool.com/webbasic/works 크롬 브라우저에 url을 입력하면! 크롬에서 일어나는 일 Handling inputs : url 입력 Browswer process 안에 UI thread가 text를 search query or URL 판단 search query -> search engine으로 query를 보내 검색 준비 URL -> network.. 2023. 10. 17. [알고리즘] 다양한 이분 탐색 문제 풀이 2차 배열 이분 탐색 row 값과 cols값을 구하기만 한다면 문제는 import java.io.IOException; public class Main { private static boolean solution(int[][] arr, int target) { if (arr == null || arr.length == 0) { return false; } int left = 0; int rows = arr.length; int cols = arr[0].length; int right = rows * cols - 1; while (left days) { minWeight = carryingWeight + 1; } //현재 적재량이 넉넉하기 때문에 적재량 감소 else { maxWeight =.. 2023. 2. 24. 이진 탐색 트리(Binary Search Tree) 이진 탐색 트리(Binary Search Tree) 규칙 왼쪽 자식 노드의 키는 부모 노드의 키보다 작음 오른쪽 자식 노드의 키는 부모 노드의 키보다 큼 중복된 키를 허용하지 않음 각가의 서브 트리도 이진 탐색 트리를 유지 특징 이진 탐색 트리 규칙에 의해 데이터가 정렬됨 이진 트리에 비해 탐색이 빠르다. (균형 유지 필요) 균형 상태 : O(logN) 불균형 상태 : O(N) 탐색 찾고자 하는 데이터를 루트 노드부터 비교 시작 대소 비교를 하여 찾는 데이터가 작으면 왼쪽, 크면 오른쪽 노드로 이동. 어떤 데이터를 찾더라도 최대 트리 높이 만큼의 탐색이 이루어진다. 찾는 데이터가 없으면 null반환 삽입 루트 노드부터 비교 시작 삽입할 키가 현재 노드의 키보다 작으면 왼쪽, 크면 오른쪽 노드로 이동. L.. 2023. 2. 15. 해시 테이블(Hash Table) 해시 테이블(Hash Table) 키, 값을 대응시켜 저장하는 데이터 구조로 키를 통해 해당 데이터에 빠르게 접근 가능 해싱 키를 특정 계산식에 넣어 나온 결고를 사용하여 값에 접근하는 과정 해시 테이블 구조 키 : 해시 테이블 접근을 위한 입력 값 해시 함수 : 키를 해시 값으로 매핑하는 연산 해시 값 : 해시 테이블의 인덱스 해시 충돌 해시 함수를 통한 해시 값이 동일한 경우 해시 테이블의 같은 공간에 서로 다른 값을 저장하려는 경우 해시 충돌 해결 방법으로는 크게 개방 주소법과 분리 연결법이 있다. 해시 충돌 해결 방법 개방 주소법(Open Address) 충돌 시, 테이블에서 비어 있는 공간의 hash를 찾아 데이터를 저장 hash와 value가 1:1 관계 유지 (해시 키는 하나의 데이터만 가지.. 2023. 2. 10. 팩토리 패턴(factory pattern) 팩토리 패턴(factory pattern) 팩토리 패턴을 사용하는 이유 다형성은 높이고 의존성 낮추기 위해서이다. 구상 클래스, 추상 클래스, 인터페이스 사용 이유 new 연산자를 사용해 인스턴스를 구현하면 나중에 코드를 수정해야 할 가능성이 커지고, 유연성이 떨어집니다. 그래서 상위 형식에 맞춰서 프로그래밍합니다. (인터페이스에 맞춰서 프로그래밍한다.) 실제 실행 시에 쓰이는 객체가 코드에 공정되지 않도록 상위 형식(supertype)에 맞춰 프로그래밍해서 다형성을 활용해야 한다는 점 변수를 선언할 때 보통 추상 클래스나 인터페이스 같은 상위 형식으로 선언해야 한다. 객체를 변수에 대입할 때 상위 형식을 구체적으로 구현한 형식이라면 어떤 객체든 넣을 수 있기 때문이다. 그러면 "변수를 선언하는 클래스에.. 2023. 1. 13. 싱글톤 패턴 (Singleton) 싱글톤 패턴 (Singleton) 클래스의 인스턴스가 하나임을 보장하고 접근할 수 있는 전역적인 접근점을 제공하는 패턴 장점 하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에 인스턴스를 생성하는데 드는 비용이 줄어든다. 자원을 많이 잡아먹는 인스턴스가 있다면 유용하다. 단점 의존성이 높다. -> 의존성 주입(DI, Dependency Injection)을 통해 모듈 간의 결합을 조금 더 느슨하게 만들어 해결할 수 있다. TDD -> 단위 테스트는 서로 독립적이어야 하며 어떤 순서로든 실행할 수 있어야 한다. 싱글톤 패턴은 테스트마다 독립적인 인스턴스를 만들기 어렵다. 싱글톤이 깨지는 경우 멀티스레딩 -> 동기화 필요 클래스 로더가 2개 이상일 때 -> 클래스 로더를 직.. 2023. 1. 12. 디자인 패턴 소프트웨어 디자인에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책이다. 특정한 상황에 맞게 사용될 수 있는 구조적 문제들을 해결하는데 쓰이는 서술이나 템플릿. 디자인 패턴은 외우기보다는 어떠한 패턴이 있는지 알고 수많은 디자인 패턴에서 다양한 코딩 노하우를 습득하는것이 중요하다고 생각합니다. "이 코드에는 무조건 이 패턴을 적용시킬거야!" 이것이 아니라 여러가지 패턴이 자연스럽게 내 코드에 녹아드는것이 좋다고 생각합니다. 출처 : https://coding-factory.tistory.com/708 즉, 모든 곳에 패턴을 적용하려고 하면 안 된다. 디자인 패턴의 종류 생성(Creational) 패턴 객체 생성에 관련된 패턴 객체의 생성과 조합을 캡슐화해 특정 객체가 생성되거나 변경되어도 프로그램.. 2023. 1. 11. 웹소켓 vs SSE(Server-Sent-Event) 차이점 웹소켓 vs SSE(Server-Sent-Event) 차이점 SSE는 전통적인 HTTP를 통해 전송된다. 즉, 작동하려면 특별한 프로토콜이나 서버 구현이 필요하지 않는다. 반면 WebSocket은 프로토콜을 처리하기 위해 전이중 연결과 새로운 웹 소켓 서버가 필요하다. 또한 서버 보낸 이벤트에는 자동 재연결, 이벤트 ID 및 임의 이벤트를 보내는 기능과 같이 WebSocket은 디자인 측면에서 부족한 다양한 기능이 있다. 2022. 12. 6. SSE(Server-Sent Event) SSE(Server-Sent Event) 서버의 데이터를 실시간으로, 지속적으로 Streaming 하는 기술. 웹 표준으로써 IE를 제외한 모든 브라우저에서 지원되며, IE역시 polyfill을 통해 지원이 가능 동작 방식 장점 전통적인 HTTP를 통해 통신하므로 다른 프로토콜이 필요가 없다. 재접속 처리 같은 대부분의 저수준 처리가 자동으로 된다. 표준 기술답게 IE를 제외한 브라우저 대부분을 지원한다. HTML과 JavaScript만으로 구현할 수 있으므로 현재 지원되지 않는 브라우저(IE 포함)도 polyfill을 이용해 크로스 브라우징이 가능하다. (여기서 polyfill이란 브라우저가 지원하지 않는 API를 플러그인이나 JavaScript 등으로 흉내 내 구현한 것을 뜻한다) 단점 IE에선 SS.. 2022. 12. 4. 웹소켓(Web Sockets) 웹소켓(Web Sockets) HTML5 표준 기술로, 사용자의 브라우저와 서버 사이의 동적인 양방향 연결 채널을 구성하고 사용자의 브라우저와 서버 사이의 인터액티브 통신 세션을 설정할 수 있게 하는 고급 기술이다. 개발자는 웹 소켓 API를 통해 서버로 메시지를 보내고 서버의 응답을 위해 서버를 폴링하지 않고도 이벤트 중심 응답을 받는 것이 가능하다. 동작 방식 순서 : 핸드쉐이크 > 데이터를 양방향으로 주고받음 > 웹소켓을 Close 장점 서버와 클라이언트 사이에서 데이터를 주고받을 수 있다. HTTP REST 메서드인 POST보다 빠르다. 여러 API 또는 여러 게임 멀티플레이에도 사용된다. 단점 프로그램 구현에보다 많은 복잡성을 초래한다. 웹 소켓은 HTTP와 달리 Stateful protocol.. 2022. 12. 2. Token 인증 타입, Bearer 이란 무엇인가 토큰 기반 인증을 사용할 때 토큰은 대체로 요청 헤더의 Authorization 필드에 담아져 보내진다. Authorization: type 에 들어가는 값이 Bearer 값이다. 토큰에는 많은 종류가 있고 서버에도 다양한 종류의 토큰을 처리하기 위해 type 값이 다양하다. type 종류 Basic 사용자 아이디와 암호를 Base64로 인코딩한 값을 토큰으로 사용합니다. (RFC 7617) Bearer JWT 혹은 OAuth에 대한 토큰을 사용합니다. (RFC 6750) Digest 서버에서 난수 데이터 문자열을 클라이언트에 보냅니다. 클라이언트는 사용자 정보와 nonce를 포함하는 해시값을 사용하여 응답합니다. (RFC 7616) HOBA 전자 서명 기반 인증방식입니다. (RFC 7486) Mutua.. 2022. 11. 18. Session vs Token : JWT 사용 이유, 다중 서버 인증 HTTP의 무 상태성과 비 연결성이라는 특징으로 인해 사용자의 인증 정보가 필요할 때마다 인증해야 하는 문제점이 발생한다. 이런 문제를 해결하기 위해 쿠키, 세션, 토큰 등과 같은 곳에 인증 정보를 담아 사용하여 문제를 해결하게 된다. 다중 서버에서는 세션을 이용해 인증 할 수 있지만 세션을 따로 관리해야 하고 복잡하기 때문에 토큰 인증 방식을 주로 사용한다. Session 사용자가 서버에 로그인 요청을 보냅니다. 서버는 로그인 요청을 인증하고, 데이터베이스에 세션을 전송하고, 사용자에게 세션 ID를 포함하는 쿠키를 반환한다. 이제 사용자는 새로운 요청을 (쿠키와 함께) 보냅니다. 서버는 데이터베이스에서 쿠키에서 발견된 ID를 확인하고, ID가 발견되면 요청된 페이지를 사용자에게 보냅니다. 세션의 경우 .. 2022. 11. 15. [Git] commit conventions 커밋 메시지의 형식 (): 커밋 메시지의 각 줄은 100자를 넘기지 말아야 한다. 에 들어갈 수 있는 항목들 feat : 새로운 기능 추가 fix : 버그 수정 docs : 문서 관련 style : 스타일 변경 (포매팅 수정, 들여쓰기 추가 등) refactor : 코드 리팩토링 test : 테스트 관련 코드 build : 빌드 관련 파일 수정 ci : CI 설정 파일 수정 perf : 성능 개선 chore : 그 외 자잘한 수정 에 들어갈 수 있는 항목들 어디가 변경되었는지, 변경된 부분은 모두 들어갈 수 있다. 함수가 변경되었으면 함수 이름, 메소드가 추가되었으면 클래스 이름 scope는 생략 가능합니다. 요약 설명 첫글자를 대문자로 쓰지 마세요. 소문자로 쓰세요. 명령문, 현재 시제로 작성합니다. .. 2022. 11. 8. [Algo]-Counting Sort 요약 핵심 아이디어 카운팅 정렬(계수 정렬)은 입력을 반복하고 각 항복이 발생하는 횟수를 새로운 배열에 카운트한다. 카운트한 배열을 사용해 정렬한다. 장점 시간복잡도는 O(n) 으로 엄청난 성능을 보여주는 알고리즘이다. 대표적인 빠른 정렬 알고리즘보다 성능이 좋다. 큌 정렬, 힙 정렬, 합병 정렬 등의 시간복잡도는 O(nlogn) 으로 빠른 성능을 가지고 있다. 단점 입력값의 범위를 미리 알고 있을때만 사용하는게 좋다. 정렬을 하기 위해 새로운 배열을 선언해주어야 한다. 즉, 입력값의 범위가 커지면 메모리 낭비가 된다. ex) 5개의 원소를 정렬하고 하는데, 수의 범위가 0~5000 이라면 새로운 배열의 사이즈는 5000이 된다. 작동 애니메이션 URL https://www.cs.miami.edu/hom.. 2022. 10. 14. [git] .gitignore 적용안될 때 git 의 캐시 문제로 캐시 내용을 전부 삭제후 다시 커밋하면 해결된다. git rm -r --cached . git commit -am "fixed "remove git cache" 2022. 9. 16. 화이트 박스 테스트 검증 기준 커버리지 내용 구문(문장) 커버리지 Statement Coverage - 프로그램 내의 모든 명령문을 적어도 한 번 수행하는 커버리지 - 조건문 결과와 관계없이 구문 실행 개수로 계산 결정(선택), 분기 커버리지 Decicon,Branch Coverage - 각 분기의 결정 포인트 내의 전체 조건식이 적어도 한번은 참과 거짓의 결과를 수행하는 테스트 커버리지 - 구문 커버리지를 포함 조건 커버리지 Condition Coverage - 각 분기의 결정 포인트 내의 각 개별 조건식이 적어도 한 번은 참과 거짓의 결과가 되도록 수행하는 테스트 커버리지 - 구문 커버리지를 함 조건/결정 커버리지 Condition/Decicion Coverage - 전체 조건식뿐만 아니라 개별 조건식도 참과 거짓의 결과가 한 번.. 2022. 7. 12. 데이터 마이닝(Data Minnig) 데이터 마이닝(Data Minnig) 대규모로 저장된 데이터 안에서 체계적이고 자동적으로 통계적 규칙이나 패턴을 찾아내는 기술 데이터 마이닝은 대규모 데이터에서 의미 있는 패턴을 파악하거나 예측하여 의사결정에 활용하는 기법 데이터 마이닝은 데이터의 숨겨진 정보를 찾아내어 이를 기반으로 서비스와 제품에 도입하는 과정 통계분석은 가설이나 가정에 따른 분석, 검증을 하지만 데이터 마이닝은 수리 알고리즘을 활용하여 대규모 데이터에서 의미 있는 정보를 찾아낸다. 데이터 마이닝 절차 목적 설정 -> 데이터 준비 -> 가공 -> 마이닝 기법 적용 -> 정보 검증 데이터 마이닝 주요 기법 덱스트 마이닝 대량의 텍스트 데이터로부터 패턴 또는 관계를 추출하여 의미 있는 정보를 찾아내는 기법 304745비정형/반정형 데이터.. 2022. 6. 21. NoSQL (Not Only SQL) NoSQL (Not Only SQL) NoSQL은 전통적인 RDBMS와 다른 DBMS를 지칭하기 위한 용어로 데이터 저장에 고정된 테이블 스키마가 필요하지 않고 조인 연산을 사용할 수 없으며, 수평적으로 확장이 가능한 DBMS 특성 특성(BASE) 설명 Basically Available 언제든지 데이터는 접근할 수 있어야 하는 속성 분산 시스템이기 때문에 항상 가용성 중시 Soft-State 노드의 상태는 내부에 포함된 정보에 의해 결정되는 것이 아니라 외부에서 전송된 정보를 통해 결정되는 속성 특정 시점에서는 데이터의 일관성이 보장되지 않음 Eventually Consistency 일정 시간이 지나면 데이터의 일관성이 유지되는 속성 일관성을 중시하고 지향 유형 유형 설명 Key-Value Store .. 2022. 6. 17. 데이터 모델의 구성요소 데이터 모델의 구성요소 개체 데이터 모델에서는 연산(Operation)을 이용하여 실제 데이터를 처리하는 작업에 대한 명세를 나타낸다. 논리 데이터 모델에서는 구조(Structure)를 어떻게 나타낼 것인지 표현한다. 제약 조건(Constraint)은 데이터 무결성 유지를 위한 DB의 보편적 방법으로 릴레이션의 특정 칼럼에 설정하는 제약을 의미하며, 개체 무결겅과 참조 무결성 등이 있다. 연산 (Operation) 데이터베이스에 저장된 실제 데이터를 처리하는 작업에 대한 명세 릴레이션을 조작하기 위한 관계 연산을 나타낸다.(Select, Project, Join, Division) 구조 (Structure) 데이터베이스에 논리적으로 표현될 대상으로서의 개체 타입과 개체 타입들 간의 관계 데이터 구조 및 .. 2022. 6. 14. 비 정규화 / 반 정규화(De-Normalization) 비 정규화 / 반 정규화(De-Normalization)개념 비 정규화는 정규화된 엔티티, 속성, 관계에 대해 성늘 향상과 개발 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법 비 정규화, 역 정규화라고도 불린다. 특징 장점 비 정규화된 데이터 구조는 성능 향상과 괄리의 효울성이 증가 단점 데이터의 일관성 및 정합석 저하 유지를 위한 비용이 별도로 발생하여 성능에 나쁜 영향을 미칠 수 있음 기법 테이블 테이블 병합 1:1 관계, 1:N 관계를 통합하여 조인 횟수를 줄여 성능을 향상 슈퍼타입/서브타입 테이블 통합을 통해 성능 향상 테이블 분할 테이블을 수직 또는 수평으로 분할하는 것으로 파티셔닝이라고 한다. 종류 설명 수평분할 테이블 분할에 레코드 기준으로 활용 수직 분할 하나.. 2022. 6. 10. join vs Subquery MySQL 5.5 까지는 서브쿼리 최적화가 최악이라 웬만하면 Join으로 전환하자 메인테이블의 row 수 만큼 서브 쿼리를 수행한다 MySQL 5.6 에서 서브 쿼리가 대폭 최적화 되었다. 다만 최적화가 적용 안되는 조건들이 다수 존재한다 버전/조건 관계 없이 좋은 성능을 내려면 최대한 Join을 이용하자 Join을 사용하기가 너무 어렵다면 Subquery는 사용하되, MySQL 5.5 이하라면 절대 사용하지 않는다. 차라리 쿼리를 나눠서 2번 실행 (메인쿼리/서브쿼리)하고 애플리케이션에서 조립하는게 낫다. Reference : https://jojoldu.tistory.com/520 2022. 5. 6. ERP란 전사적 자원 관리(ERP)는 조직이 회계, 구매 프로젝트 관리, 리스크 관리와 규정 준 및 공급망 운영 같은 일상적인 비즈니스 활동을 관리하는 데 사용하는 소프트웨어 유형을 의미 2022. 5. 4. 프로시저란 저장 프로시저 또는 스토어드 프로시저는 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합 데이터베이스에 대한 일련의 작업을 정리한 절차를 관계형 데이터베이스 관리 시스템에 저장한것으로, 영구저장모듈 이라고 불린다. 2022. 5. 3. 레거시란 과거로부터 물려 내려온 낡은 기술이나 방법론, 컴퓨터 시스템, 소프트웨어 등으로 새로이 대체가 가능한 기존의 기술 2022. 4. 26. JWT-사전지식-RSA-암호화 RSA암호화를 알기전에 RSA란 비대칭키 알고리즘의 대표적인 알고리즘이다.즉, RSA 암호화는 RSA 알고리즘을 이용한 암호화이다 대칭키 암호화 위 이미지와 같이 같은 key로 암호화 복호하 하는 것을 뜻한다. 비대칭키 암호화 비대칭키 암호화는 암호화하는 key와 복호하하는 key의 값이 다르다. 값이 다른데 어떻게 암호화,복호화가 가능한지는 RSA 알고리즘을 이해하면 된다. RSA 알고리즘을 통해 Public Key (공개키), Private Key (개인키)를 사용해 암호화를 한다. Reference : Twilio RSA 암호화를 사용하는 이유 기밀성 (인가된 사용자 인가) Bob's 공개키로 문서를 암호화 하면 Bob's 개인키로만 그 문서를 복호하 할 수 있다. 무결성 (누가 보냈는가) Bob'.. 2022. 4. 15. 이전 1 2 3 4 다음 728x90