![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/nZRf6/btqF1oAOXW0/jq78TIuAZQrbjBRKvhDkak/img.png)
React 시작하기 전에.. 리액트를 시작하기 전 기본적으로 알아야하는 것들이 있습니다. 각종 도구와 문법 그리고 라이프 사이클 등 많은 것들이 있지만 가장 기본적인 것에 대해서 알고 가도록 하겠습니다. 도구 1. WEBPACK 여러 개의 자바스크립트 파일이 여러 개가 존재할 때 각각을 따로 로딩할 경우 변수 충돌, 네트워크 비용 등의 문제가 존재합니다. 따라서 이를 하나의 파일로 관리하기 쉽게 해주는 웹 팩을 사용합니다. 다음은 웹 팩의 주요 네가지 개념입니다. Entry - 웹 팩은 모든 파일을 모듈로 관리합니다. 그 파일이 html, css 든 javascript 든 모든 것을 모듈로 로딩하여 사용합니다. 이 때 서로 의존성이 발생합니다. 이 의존성의 시작을 Entry라고 합니다. Output - ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/dFT5An/btqFp5HhiIb/33E0NF7AWKdSHMdHwp8v61/img.png)
Front-end 프레임워크와 라이브러리들은 데이터 변화가 많은 프로젝트에서 DOM 관리와 상태 관리를 최소화하여 개발자가 사용자 인터페이스에만 집중할 수 있도록 개발자 편리를 위해 만들어졌습니다. 특히 Front-end의 대표적인 프레임워크와 라이브러리는 Angular, React, Vue 이렇게 세 가지가 있습니다. Angular - 구글에서 개발했고 client-side 그리고 브라우저 기반의 자바 스크립트 프레임 워크입니다. 서버와 통신하며 HTML 페이지를 reload하지 않고 웹 페이지를 빠르고 효율적으로 렌더링합니다. 또한 앵규러는 all-in-one framework로 다양한 기능을 가지고 있으며 공식 라이브러리들이 존재합니다. React - 리액트는 페이스북에서 만들었고 사용하는 자바 스..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bscetC/btqEzAH1wdj/QGtej8CtvaCC9hk3zXEU4k/img.png)
외부 설정 각종 설정값들을 application의 안이나 밖에 정의하는 기능으로 application.properties와 같은 설정 파일을 이용해서 설정해줍니다. application.properties는 스프링 부트가 구동 시 자동으로 로딩하는 해주는 설정 파일입니다. application.properties 내부에 정의된 값들은 @Value 어노테이션을 이용해서 사용가능합니다. 아주 기본적인 방법이지만 값을 정확히 써야하므로 자주 사용하지는 않는다고 합니다. @Value를 사용한 방법 application.properties에 dibtd.name = dibtd 를 작성하고 @Value를 통해 확인하면 @Component public class SampleRunner implements Applica..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cyS2Y6/btqEh6PthsE/NAvZqNGwYniEAvKp7rJLQk/img.png)
스프링 부트 핵심 기능 다음 스프링 부트의 여러 핵심 기술 중 application을 시작하는 SpringApplication class에 대해 살펴보겠습니다. SpringApplication class는 패키지 최상단에서 aplication을 실행하는 메인이 존재하는 클래스입니다. 이 SpringApplication 클래스에서는 스프링 부트 실행에 있어 다양한 기능을 가지고 있습니다. log level 변경, 배너 변경, 애플리케이션 이벤트, 웹 어플리케이션 타입 변경 ... 등 하나씩 살펴보도록 하겠습니다. 우선 아마 처음 스프링 부트를 하시는 거면 다음과 같은 메인 메소드와 스프링 부트를 실행하는 메소드가 있는 클래스를 만들고 사용하게 될 텐데요. public static void main(Stri..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/H4OJ0/btqD5I1aoqu/0fMWfGPS5FNKkxXpOFOMRK/img.png)
Union-Find Union - find(합집합 찾기) 알고리즘은 여러 개의 node들이 존재하고 노드들을 서로 이어 집합을 만들 때 서로 다른 노드가 같은 집합인지 확인할 때 사용하는 알고리즘입니다. union - find 말 그대로 union과 find 과정을 통해 알고리즘을 수행합니다. 예를 들어 다음과 같이 5개의 노드들이 있다고 가정해봅시다. 1 2 3 4 5 1 2 3 4 5 1 행은 각 노드 번호 2행은 각 노드의 부모 노드 번호입니다. 우선 시작 시 노드들은 각자 자신을 부모로 가리키고 있고 서로 연결되어 있지 않습니다. union 과정을 통해 노드 1, 4를 2, 5 를 연결해봅시다. 1 2 3 4 5 1 2 3 1 2 다음과 같이 숫자가 더 높은 노드가 아래 노드를 부모로 가지도록 했..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/RJOiD/btqD4zC5KdL/qJU02P998biPokejZ8Rksk/img.png)
스프링 부트는 왜 사용할까요? spring boot를 사용하는 이유는 쉬운 자동 설정, 의존성 관리, 내부 servlet container 등 다양하게 있습니다. 오늘은 Auto Configuration(자동 설정)과 Easy dependendency Management(의존성 관리)의 동작 매커니즘을 정리해 보겠습니다 1. 의존성 관리 다른 프레임워크를 써보신 분들은 아시겠지만 프로젝트에서 여러 library를 가져올 때 각각의 버전을 명시해주고 또 서로 호환이 되는 지 안되는 지도 찾아봐야하고.. 상당히 귀찮은 작업들을 직접 해줘야 합니다. 하지만 스프링 부트에서는 spring-boot-starter-*에 스프링 부트 버전에 맞는 여러 library들이 사전에 설정되어 있습니다. 모든 library가..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bCcdmE/btqDRLK3lrS/pxoz2td9drDF9jWthlAbYk/img.png)
Counting Sort 계수 정렬은 말 그대로 데이터를 counting 하여 정렬되는 것과 마찬가지인 효과를 나타내는 정렬입니다. 앞서 보았던 정렬방식은 시간복잡도 O(N*N) 또는 O(N*logN)을 가졌습니다. 하지만 계수 정렬은 데이터를 한번씩만 접근하여 O(N)의 시간복잡도를 가질 수 있습니다. 어떻게 O(N)의 시간 복잡도를 가질 수 있을까요? 이유는 다른 정렬들은 데이터를 비교하고 위치를 바꾸지만 계수정렬은 데이터를 순차적으로 읽으면서 해당 데이터의 개수를 counting 하여 나중에 한번에 나타내는 방식이기 때문인데요. 이와 같은 이유 때문에 언제나 사용하기보다는 특정한 범위가 있고 중복이 많을 시 정렬이 효과적이라고 볼 수 있습니다. 계수정렬의 작동과정을 보면 다음과 같은 상황에 효과적입..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/TyfTL/btqDxt4BwEj/nP6laITUyVjQzLAVSu0m6k/img.jpg)
Quick sort 퀵 소트는 분할정복을 이용한 정렬방식 중 하나로 이름처럼 빠른 정렬입니다. 퀵 소트의 방식은 이렇습니다. 1. 무작위로 기준이 되는 수(pivot)를 고릅니다. 2. 이 때 피벗보다 작은 수를 왼쪽으로 놓습니다. 3. 피벗보다 큰 수를 오른쪽에 놓습니다. 4. 왼쪽과 오른쪽에 놓인 각각의 배열을 다시 1번 과정부터 반복합니다. 다음 아래와 같은 그림으로 보면 이처럼 pivot은 정렬된 것으로 보고 피벗을 기준으로 나머지를 분할하여 다시 피벗을 구해 마지막 피벗하나를 구할때까지 반복하는 구조입니다. 그렇다면 시간 복잡도 어떠할까요? 일반적인 경우의 시간복잡도는 NlogN을 가집니다. 왜냐하면 실제 N개의 수가 있다고 합시다. 만약 피벗이 정말 잘 골라져서 N이 딱 절반씩 계속해서 나눠진..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/b2pV1Y/btqDuq1erq9/eLOsdUicP9pKaG7wEUrbJK/img.png)
Insertion Sort Insertion sort란 필요한 경우에만 위치를 바꿔 적절한 위치에 원소를 삽입하여 정렬하는 알고리즘입니다. 그런데 이 필요한 경우를 알아내기 위해서는 조건이 필요합니다. 위치를 바꿀 요소의 앞 쪽 요소들이 모두 정렬되어있어야 하는 조건인데요. 그림을 통해 확인하면 다음과 같습니다. 4 3 5 1 2 4 3 5 1 2 3 4 5 1 2 3 4 5 1 2 1 3 4 5 2 1 2 3 4 5 1. 처음 위치해있는 4부터 확인합니다. 앞 쪽 요소가 없으니 건너뜁니다. 2. 다음 수 3을 확인합니다. 그 앞 요소인 4와 비교해 3보다 크니 위치를 바꿉니다. 3. 5를 확인합니다. 이미 1,2 과정에서 정렬이 되어있으므로 4하고만 비교를 합니다. 5가 더 크니 위치를 바꾸지않습니다...
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/KUJnO/btqDgyln5Mx/d6x4IGfy2bMAGidhyszbe1/img.png)
Bubble Sort bubble sort란 배열 정렬 시 바로 옆의 수와 비교하여 자신이 옆의 수 보다 클 경우 위치를 바꾸는 정렬입니다. 선택 정렬과 마찬가지로 비효율적인 정렬 방식인데요. 실제 어떻게 작동하는지 한 사이클만 그림으로 확인해보면 다음과 같습니다. 3 2 5 7 1 2 3 5 7 1 2 3 5 7 1 2 3 5 7 1 2 3 5 1 7 1. 우선 첫 번째 인덱스부터 시작합니다. 첫 번째 인덱스에 있는 숫자 3이 2보다 크므로 서로 위치를 바꿉니다. 2. 그리고 두 번째 인덱스와 세 번째 인덱스를 비교합니다. 두 번째 인덱스에는 1번에서 위치가 바뀌었으므로 3을 5와 비교합니다. 3이 5보다 작으므로 바꾸지 않습니다. 3. 위치 변화와 상관없이 세번째 인덱스와 네 번째 인덱스를 비교합니다..
- Total
- Today
- Yesterday
- 병합정렬
- react
- stack
- RDS
- 선택정렬
- 리액트
- 알고리즘
- 서버
- spring boot
- 알고스팟
- 정렬
- 배포
- 계수정렬
- 라이프 사이클
- 스프링 부트
- 합병정렬
- 가상환경
- greedy
- 다익스트라
- 버블정렬
- 퀵 소트
- AWS
- oauth
- CodeDeploy
- 자동화
- 백준
- ci/cd
- 삽입정렬
- Union-FInd
- EC2
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |