일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스프링부트
- k8s
- 클린아키텍처
- 스프링핵심원리
- 카카오 면접
- 이펙티브자바
- 스프링 핵심원리
- Effective Java 3
- 오블완
- Sort
- ElasticSearch
- 예제로 배우는 스프링 입문
- Spring
- 김영한
- Effective Java
- 스프링
- 알고리즘정렬
- 코딩테스트
- JavaScript
- java
- effectivejava
- 이차전지관련주
- 이펙티브 자바
- 알고리즘
- 티스토리챌린지
- 자바
- 카카오
- 엘라스틱서치
- kubernetes
- 자바스크립트
- Today
- Total
목록2020/09 (42)
Kim-Baek 개발자 이야기
Javascript 란? 자바스크립트는 객체 기반의 웹 브라우저에서 동작하는 스크립트 언어이다. node.js와 같은 런타임 환경과 같이 서버 사이드 네트워크 프로그래밍에도 사용된다. 웹 개발, 서버 개발, 애플리케이션 개발 등 다양한 분야에서 사용된다. Javascript의 핵심 개념 객체 : 자바스크립트의 기본 데이터 타입을 제외한 거의 모든 것은 객체이다. 함수 : 자바스크립트의 함수는 일급 객체로 다뤄지고, 함수 역시 객체이다. 프로토타입 : 모든 객체는 프로토타입을 가진다. 프로토타입으로 상속 등 다양한 자료구조를 구현할 수 있다. 실행 컨텍스트, 클로저 : 자바스크립트는 실행 컨텍스트를 가지고 scope가 존재한다. scope를 이용해 우리는 클러저를 활용 할 수 있다. 객체지향 프로그래밍 &..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ◎ 객체와 클래스 - 객체 (instance) -> 존재하는 것 (유, 무형) - 품사로는 명사 - 클래스 (class) - 너무 범위가 작거나 큰 것은 클래스로 유효하지 않다. ex) 고객은 이름, 나이, 주소를 갖는다. -> 값 1개 : 클래스로 하기에는 작다 * 하지만 이름이 성, 본관, 이름 등 분류되서 사용되는 경우에는 class 가 될 수도 있다. ※ 공통점을 뽑아내는 과정 -> 추상화 ◎ 클래스 다이어그램 - 세 칸의 표를 통해서 클래스의 선언을 다이어그램으로 나타낼 수 있다. 맨 위칸에는 클래스의 이름, 두 번째칸에는 클래스의 속성, 세 번째 칸에는 클래스의 동작을 넣는다 [ modifier ] ..
Heap Sort는 Heap 이라는 자료구조를 이용해 정렬을 하는 알고리즘이다. Heap 이란 완전 이진 트리 형태로 Paren Node 는 Child Node 보다 반드시 큰(작은) 값을 가진다. Heap Sort의 경우 항상 O( N log(N) ) 의 시간복잡도를 가진다. 우선 모든 원소를 최대(최소) Heap에 삽입한다.( O(logN) ) Heap 트리의 최대(최소) 값을 출력한다.( O(1) ) 최대(최소) 값을 제거하고 Heap을 재배열 한다.( O(logN) ) Heap이 빌때가지 반복한다.( O(N) ) Stable 을 만족하지 않는다. #include #include #include using namespace std; int main() { vector v = { 3,1,4,1,5,9..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ◎ IDE (Intergrated (통합), Development (개발), Environment(환경)) - javac.exe, java.exe 와 같은 개발에 필요한 여러 프로그램을 묶어준 것.프로그램의 개발 Tools 이다.( Eclips, Intelli J, NetBeans 가 대표적) -> Plug in 기능이 있어 tool을 개발해 기능추가가 가능 (확장성) ◎이클립스의 사용 - Perspecitive ( 개발 Tool 별 전체화면 ) -> 이클립스 안에는 자바, 디버깅, 형상관리 등 어러 프로그램이 내장되어 있다. 이때 각 각 개발하고자 하는 Tool 마다 화면이 다른데, 이 화면이 Perspect..
Quick Sort는 데이터내의 Pivot 값을 정하고 그 기준으로 두 개의 부분집합으로 나눈다. 한쪽은 Pivot보다 작은 값을 다른 한쪽은 Pivot보다 큰 값으로 나눈다. 더 이상 쪼갤 부분집합이 없을 때까지 재귀적으로 진행한다. Quick Sort는 어떤 Pivot 값을 고르는지에 따라 성능이 결정된다. 가장 이상적인 Pivot은 전체 데이터를 절반씩 쪼갤 수 있어야 한다. 이 경우 O(N log(n)) 의 복잡도를 가진다. 최악으 경우는 집합의 최소(최대) 값을 Pivot으로 고른 경우이다. 그러면 한쪽의 부분집합은 비어있고, 다른 한쪽은 n-1개의 원소가 있다(pivot 제외). 이 경우 재귀호출 횟수가 O(N)이며, 최악의 경우 O(N^2) 의 복잡도를 가진다. 하지만 평균적으로 O(N lo..
Merge Sort는 Divide and Conquer 알고리즘 기법이다. Merge Sort의 경우 항상 O( N log(N) ) 의 시간복잡도를 가진다. 성능은 전반적으로 Quick Sort 에 비해 떨어진다. Stable 하다 추가 메모리 공간(Not in-place)이 필요하다. C++의 stable_sort 가 Merger Sort 로 구현되어 있다. #include using namespace std; void merge_sort(int ary[], int left, int right); void merge(int ary[], int left, int mid, int right); int* temp; int main() { int ary[] = { 6,4,2,7,9,7,6,4,4,1,0 }; ..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ◎ 자바의 입출력(I/O) Data ------ 입력 ------> program ------- 출력 -------> 모니터 - 입력은 외부로부터 값을 받아오는 것 - 출력은 값을 모니터와 같은 곳에 출력하는 것 ex)System,out.print("안녕"); ◎ Scanner - Java 1.5 부터 추가된 기능으로 유저에게 입력기능을 제공한다. 사용하기 위해서는 class 의 밖에 맨처음 줄에 import java.util.*; 이 필요하다 - 사용법 Scanner 변수명(일반적으로 sc 를 많이 사용) = new Scanner(System.in) - 문자를 읽는 스캐너를 생성하는 코드 String str ..
Insertion Sort는 단순한 정렬 알고리즘 중 하나이다. 한번의 한 원소씩 이미 정렬된 다른 원소들과 비교하여 올바른 위치에 삽입하는 정렬이다. 삽입 정렬은 이미 정렬되어 있을때 O(N) 의 효율이다.(Best Case) Average, Worse Case의 경우 O(N^2) 이다. Bubble Sort에서 발전된 형태이다.(비교 횟수를 줄였다) 소량의 데이터를 처리할때 좋다. Stable 하다 무작위로 정렬된 많은 데이터의 효율이 매우 안좋다. #include using namespace std; void insertion_sort(int data[], int size); int main() { int data[] = {3,7,9,4,5,1,3,4,6,9}; insertion_sort(data,..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 시험 1. JRE의 의미(역할)와 구성 요소를 적으세요. Jave Runtime Environment 의 줄임말로 자바 실행 환경을 의미한다. 자바로 만든 프로그램을 실행하기 위한 환경을 의미한다. Java program 같은 경우는 o.s, h/w(platform)에서 실행되는 것이 아니라 JRE 위에서 실행된다. 왜? 자바가 interpreted 방식이기 때문이다. JRE 의 구성요소로는 첫 번째로 interpreter 역할을 하는 JVM (Java Virtual Machine) 있다. JVM 의 경우 자바 프로그램의 입장에서는 o.s 이자 h/w 역할을 모두 다 한다고 볼 수 있다. 두 번째로 API(A..
알고리즘 문제에서 정렬(Sort)는 중요한 기술이다. 여러가지 정렬 알고리즘이 있지만 기본적인 것 부터 하나하나 알아보자. 선택 정렬 (Selection Sort) 단순한 정렬 알고리즘 중 하나이다. 배열의 첫 번째 원소에서 시작하여 배열 전체를 훓으면서 작은(큰) 값을 찾아 첫 번째 원소와 바꿔준다. 이 작업을 (배열의 길이 - 1 ) 만큼 진행한다. 선택 정렬은 Best, Average, Worst Case 모두 O(N^2) 의 효율이다 - 원소를 바꾸는 횟수가 최대 n -1 이다. 즉 원소를 바꾸는 과정에서 많은 비용이 드는 경우에 효율적일 수 있다. - 선택 정렬은 다른 알고리즘에 비해 효율(performance) 가 좋지 않다. - stable을 만족하지 않는다. #include using na..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다. ◎화면에 값을 출력하는 방식 - System.out.println(출력할 값); -> 값 + enter 를 나타낸다 ( ln이 line next 를 의미) 값을 1개만 출력하기 때문에 원하는 형태를 위해서는 + 연산자를 통해 문자열을 계속 붙여야 한다. - System,out,print(출력할 값); 1개의 값을 출력하나 enter 가 들어가지 않는다. - System.out.printf("출력문자열 format"[, 값]); -> jdk 1.5 이상부터 지원하는 기능 f 가 format을 의미한다. ※ %문자 (지시자, 전환문자) -> %d : 정수 , %f : 실수, %s - 문자열(모든 type), %%..
OAuth2 승인 방식의 종류 Authorization Code Grant Type : 권한 부여 코드 승인 타입 클라이언트가 다른 사용자 대신 특정 리소스에 접근을 요청할 때 사용됩니다. 리스소 접근을 위한 사용자 명과 비밀번호, 권한 서버에 요청해서 받은 권한 코드를 함께 활용하여 리소스에 대한 엑세스 토큰을 받는 방식입니다. Implicit Grant Type : 암시적 승인 권한 부여 코드 승인 타입과 다르게 권한 코드 교환 단계 없이 엑세스 토큰을 즉시 반환받아 이를 인증에 이용하는 방식입니다. Resource Owner Password Credentials Grant Type : 리소스 소유자 암호 자격 증명 타입 클라이언트가 암호를 사용하여 엑세스 토큰에 대한 사용자의 자격 증명을 교환하는 ..
BFS는 너비우선탐색 이라고 블리는 Graph 알고리즘 중 하나이다. - BFS 는 일반적으로 Queue를 이용해 구현 - 시작 정점과 인접한 모든 정점을 방문하는 방법 - 얻어진 해가 최단 경로가 된다는 것을 보장 - 경로가 매우 길 경우에는 많은 저장 Memory 가 필요 C++를 이용해 BFS를 구현 #include #include #include using namespace std; vector* vertex; bool* checked; void bfs(int st); int main() { int n, m, s; int from, to; cin >> n >> m >> s; vertex = new vector[n + 1]; checked = new bool[n + 1]; for (int i = 0..
HDFS HDFS(Hadoop Distributed File System)는 수십 테라바이트 또는 페타파이트 이상의 대용량 파일을 분산된 서버에 저장하고, 많은 클라이언트가 저장된 데이터를 빠르게 처리할 수 있게 설계된 파일 시스템이다. HDFS를 이용하면 수십 혹은 수백 대의 웹 서버급 서버를 묶어서 하나의 스토리지처럼 사용할 수 있다. 즉 기존 대용량 파일 시스템과의 차이점은 저사양 서버를 이요해 스토리지를 구성할 수 있다. 물리적으로 분산된 서버 디스크에 저장된 데이터들은 HDFS에서 제공하는 API를 이용하여 파일의 읽기 및 저장과 같은 제어가 가능하다. 은행이나 전자상거래처럼 트랜잭션이 중요한 경우는 HDFS가 적합하지 않으며, 대규모 데이터를 저장하거나 배치로 처리하는 경우 유용하다. HDFS..
사용자가 현재 a.com 이라는 사이트에 접속해서 인터넷을 하고 있다. 그런데 사용자의 PC가 해킹되어 사용자가 모르는 hacking.js 라는 프로그램이 내부적으로 동작하고 이 hacking.js 는 사용자가 a.com 사이트에 접속하면 사용자 PC의 개인정보가 담겨있는 쿠키파일을 hacking.com 으로 전송한다고 하자. (이를 크로스 사이트 스크립팅(XSS) 해킹기법이라고 한다.) 웹 브라우저는 이처럼 사용자가 특정사이트에 접속중인 상태에서 동시에 다른 사이트를 접근하는 경우 보안상 문제가 발생했다고 인식하여 이와 같은 행위를 기본적으로 불허한다. 이를 동일출처정책(Same Origin Policy) 이라고 한다. 그런데 이러한 해킹말고 실제로 기능구현 할 때 다른 사이트를 동시에 접속해야 될 필..
인프런에서 백기선 님의 [스프링 프레임워크 핵심 기술] 을 듣고 정리한 내용입니다 Inversion of Control: 의존 관계 주입(Dependency Injection)이라고도 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라, 주입 받아 사용하는 방법을 말 함. - 추가적으로 토비의 스프링에서의 설명 어떤 프로그램을 만들 때, 각 기능들을 만들어 두더라도 이 기능들이 필요에 따라 순서대로 작동하지 않는다면 그 프로그램은 제대로 작동할 수 없습니다. 따라서 각 기능들이 순서대로 작동하게 하기 위해서 제어(Control)가 필요합니다. 위에서 이야기한 제어할 항목들이 적다면 프로그래머가 기능의 순서를 알고 관리할 수 있습니다. 하지만 기능들이 늘어나서 수천, 수만개의 제어..
Hadoop 하둡은 대용량 데이터를 분산 처리할 수 있는 자바 기반의 오픈소스 프레임워크이다. 하둡은 분산 파일 시스템인 HDFS(Hadoop Distributed File System)에 데이터를 저장하고, 분산 처리 시스템인 맵리듀스를 이용해 데이터를 처리한다. 하둡은 구글의 논문 GFS(Google File System)과 맵리듀스(MapReduce)를 더그 커팅이 2005년에 구현한 결과물이다. 하둡은 오픈소스 프로젝트이므로 소프트웨어 라이센스 비용이 없다. 리눅스 서버면 얼마든지 하둡을 설치해 운영할 수 있고, 저장 용량이 부족하면 필요한 만큼의 리눅스 서버만 추가하면 된다. 데이터의 복제본을 저장하기 때문에 데이터 유실이나 장애가 발생했을 때도 데이터 복구가 가능하다. 기존 RDBMS는 데이터..
인프런에서 백기선 님의 [스프링 프레임워크 핵심 기술] 을 듣고 정리한 내용입니다 참고: 스프링 프레임워크 레퍼런스 https://docs.spring.io/spring/docs/current/spring-framework-reference/index.html 스프링이란? https://docs.spring.io/spring/docs/current/spring-framework-reference/overview.html#overvie “소규모 애플리케이션 또는 기업용 애플리케이션을 자바로 개발하는데 있어 유용하고 편리한 기능을 제공하는 프레임워크" ● 스프링 프레임워크 그 자체 ● 스프링 프레임워크 포함 모든 스프링 프로젝트 (스프링 부트, 스프링 데이터, 스프링 시큐리티...) ● 이 강좌에서 스프링은..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다. ◎소스코드를 짤 때 편하게 해주는 툴 가장 기본적으로 사용이 가능한 것(메모자) -> Editplus -> Eclipse(IDE-통합개발환경) - Editplus 의 경우 한국 사람이 만든 툴이다 ◎Editplus 의 사용 설정' -Editplus 를 사용하기 위해서는 자바의 컴파일러(javac.exe)와 인터프리터(java.exe)를 등록을 하자 도구 -> 사용자 도구 -> 추가 -> 프로그램의 경로에서 메뉴 제목 : 프로그램의 이름을 지정하자 명령 : 실행을 시킬 파일 등록 인수 : 추가한 프로그램에게 전달시킬 파일의 경로를 지정 ※javac.exe의 경우 파일의 이름을 그대로 넘기기 때문에 파일 이름을 ..
Kubernetes StatefulSets Qwiklabs의 Running a MongoDB Database in Kubernetes with StatefulSets을 공부 하면서 정리한 내용이다. k8s에서 MongoDB를 셋업하는 내용이다. DB의 경우 상태를 계속 유지하고 있어야 하는 Stateful한 성격이 있기 때문에 k8s의 StatefulSet 에 대한 개념과 이해가 필요하다. Stateful App의 반대 개념은 Stateless App 이다. Reference https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/ MongoDB를 k8s에서 구축하기 위해서 StorageClass, headless service, St..