일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- heapq
- terraform backend
- Timezon설정
- terraform 기본개념
- SELinux비활성화
- Jenkins
- 프로그래머스
- Docker
- lsof
- ec2
- Mac
- Jenkinspipeline
- algorithm
- binarysearch
- session manager
- terraform 설치
- 이진탐색
- terraform variable
- Process monitoring
- haproxy
- JWT
- linuxr계정설정
- java
- terraform main commands
- 인텔리제이
- terraform
- endpoint
- s3
- Python
- PrivateSubnet
- Today
- Total
목록전체 글 (27)
MONG 기술블로그

의존성 주입 ( DI / Dependency Injection ) DI ( Dependency Injection ) 란 스프링의 핵심 기능으로써 객체를 직접 생성하지 않고, 외부에서 생성한 객체를 주입해주는 방식이다. IoC ( Inversion Of Control ) 이란 직역하면 "제어의 역전" 이라는 의미로, 스프링에서는 객체를 개발자가 아닌 스프링 컨테이너를 통해 관리한다. DI / IoC 를 통해 객체 간 결합도를 낮추고 유연성을 높힐 수 있다. 바로 예제로 알아보자. 위와 같은 구조에서 아래 테스트 코드를 기반으로 DI /IoC 의 유연성을 느껴보자 아래 코드에서 사용하는 showDbmsName() 메서드는 각 DbmsService의 name을 출력하는 메소드이다. package springb..

https://start.spring.io/ 로 접속하면 위와 같은 화면을 볼 수 있다. 여기에서 다음과 같이 선택하자. Project : Gradle Spring Boot : 3.0.2 Packaging : Jar Java : 8 ( PC에 설정된 Java 버전을 선택 ) Dependencies 의 ADD DEPENDENCIES... 를 선택하여 위 화면과 같이 Spring WEB을 선택한 뒤에 GENERATE를 선택하자. 최종적으로 GENERATE 선택으로인해 다운로드된 디렉토리를 IntelliJ 의 Open Project를 통해 열면 세팅이 완료된다. DemoApplication.java 를 실행하면 내장된 Tomcat 서버가 8080 포트 작동하는 모습을 볼 수 있다.
SpringBoot를 이용하면 어노테이션 기반으로 HTTP Method API를 구현할 수 있다. 어노테이션을 이용하여 간단하게 API 서버를 설계하며 사용법에 대해 간단히 알아보자. 개발환경에 대한 설정은 https://uosjihwan.tistory.com/93 를 참고하자. 우선 API를 구현하기 전에 @ResponseBody / @RestController 어노테이션에 대해 알아보자. @ResponseBody 자바 객체를 HTTP Response의 Body부분에 매핑할 때 사용한다. 주로 자바의 객체를 HTTP Response의 Body 부분에 Json 형태로 매핑하여 전달할 때 사용한다. @RestController 클래스에 @RestController를 선언하면 해당 클래스의 HTTP 요청 관..

IDE를 능숙하게 사용하는건 개발의 생산성을 향상할 수 있는 중요한 방법 중에 하나이다. Java프로그래밍 시 사용하는 IDE인 인텔리제이의 중요한 단축키에 대해 정리하고 익숙해질 수 있도록 노력하자. 정리에 사용되는 단축키 기호는 다음과 같다. 이미지 설명 ⇧ Shift ⌃ Control ⌥ Option ( Alt ) ⌘ Command ↩ Return ( Enter ) ↑ Up ↓ Down ⌫ Delete 용도 단축키 프로젝트 창 포커스 ⌥ + 1 미리보기 space 에디터 창 포커스 ⇧ + ⌘ + F12 새 파일 생성 ⌘ + N , ⌃ + ⌥ + N 라인 시작 / 끝 , 페이지 위 / 아래 Fn + 방향키 블록 주석 ⌥ + ⌘ + / 사용처 찾기 ⌥ + F7 빠른 찾기 ⌘ + B 경로 내 검색 ⌘ +..
자동 타입 변환 ( promotion ) 자동으로 타입 변환이 일어나는 것을 의미하며, 값의 허용 범위가 작은 타입이 큰 타입으로 대입될 때 발생한다. 기본 타입을 허용 범위 순으로 적어보면 아래와 같다. byte < short char < int < long < float < double int intValue = 10; // 자동 형변환 OK. // int보다 long이 허용범위가 더 큼. long longValue = intValue; // Error... // long은 int보다 허용 범위가 작기에 자동 형변환 불가 intValue = longValue; 강제 타입 변환 ( Casting ) 위 예제에서 큰 허용 범위 타입은 작은 허용 범위 타입으로 자동 타입 변환이 불가함을 확인했다. 이때 큰..

Heap 이란 거의 완전한 트리 기반의 자료구조이다. 거의 완전한 트리 기반으로 양쪽이 균형을 유지하는 특성을 가지기에 다음과 같은 알고리즘 및 자료구조를 구현하는데 사용된다. 우선순위 큐 다익스트라 알고리즘 힙 정렬 최소 신장 트리 ( MST ) Heap 자료구조를 python을 이용하여 직접 구현해보고, python에 내장된 heapq를 사용하는 방법에 대해 알아보자. BinaryHeap 구현 ( Python ) class BinaryHeap(): """ Heap은 편의성을 위해 배열의 첫번째 인자를 None으로 놓고 Index를 1부터 사용한다. """ def __init__(self) -> None: self.items = [None] def __len__(self): return len(self..

이진 탐색 ( Binary Search )이란 정렬된 배열에서 타겟을 빠르게 찾는 검색 알고리즘이다. 제약 조건 : 정렬된 상태의 배열에서 사용가능 장점 : 시간복잡도가 O(logN) 으로 매우 빠른 성능 보유 시간복잡도를 수치로 변경하여 설명해보면 다음과 같다. 크기 1억개인 배열에서 특정 값을 찾는 경우. ( 정렬된 경우 ) 순차 탐색 : 최악의 경우 1억번 탐색 필요 이진 탐색 : log100000000 번 탐색 필요. 대략 26번만의 탐색으로 특정 값을 찾을 수 있음 이를 Python 코드로 직접 구현하여 탐색 횟수를 비교해보자. import random # 1 - 천만 nums = [i for i in range(1, 10000001)] # 유니크한 백만개의 수를 1-천만 범위에서 리스트로 추출..

그래프 관련 주요 용어와 그래프의 대표 순회 알고리즘인 DFS. BFS에 대해서 간단히 정리해보자. 그래프 순회 알고리즘 DFS 깊이 우선 탐색 ( Depth First Search ) 스택 혹은 재귀로 구현하며 대부분의 그래프 순회 문제에서 사용한다. BFS 너비 우선 탐색 ( Breadth First Search ) 큐를 이용하여 구현하며, 특정 Vertex로부터의 최단 거리를 구하는 문제에서 사용한다. 그래프 표현 방법 인접 행렬 혹은 인접 리스트를 이용하여 표현하며 하기 코드는 인접 리스트를 Python 딕셔너리를 통해 표현한 예시이다. graph = { 1: [2,3,4], 2: [5], 3: [4,5,6] } 그래프 순회 알고리즘 구현 각 구현에서 방문 확인 & 추가를 하는 위치가 알고리즘상 ..