반응형

Java Collection framework interface의 특징

 - List : 순서가 있는 데이터의 집합, 데이터의 중복을 허용
- Set : 순서가 없는 데이터의 집합, 데이터의 중복을 허용하지 않는다.
- Map : key / value의 쌍으로 이루어진 데이터의 집합. 순서는 유지되지 ㅇ낳으며 키는 중복ㅇ르 허용하지 않고 값은 중복을 허용한다. 
반응형

'프로그래밍 > 면접대비문제' 카테고리의 다른 글

DB정규화  (0) 2021.01.11
MVC란?  (0) 2021.01.11
Error와 Exception  (0) 2021.01.10
REST API에 대해서  (0) 2021.01.10
MSA란 무엇인가?  (0) 2021.01.10
반응형

Error와 Exception

Error

컴파일시 문법적인 오류와 런타임시 예측불가능한 에러가 있다. 에러의 예로는 StackOverflowError / OutOfMemoryError 등이 있으며 발생시 프로세스가 종료된다. 핸들링이 불가능하고 회복이 불가능하다.

Exception

프로그램이 핸들링이 가능한 경우 익셉션이라한다.
처리가 가능하다.
프로그램이 동작중 예상하지 못한 상태가 발생하여 수행중인 프로그램이 영향을 받는것.
CheckedException(Compile tiem)

  • 컴파일시점에 예측이 가능하다.
    UncheckedException(Run time)
    • 컴파일 시점에는 예측이 불가능하고, 런타임시에 발생하는 예외

스프링에서의 예외처리

  1. 메소드 단위에서 try/catch를 이용하여 처리
  2. 컨트롤러 단위에서 @ExceptionHandler를 이용해서 처리
    • @Controller / @RestController 가 적용된 Bean내에서 발생하는 예외를 잡아서 하나의 메소드에서 처리해주는 기능.
  3. @ControllerAdvise를 이용하여 Global level에서 컨트롤러 이후 Client에게 전달되기 직전 처리
    • @ControllerAdvise 모든 @Controller 즉, 전역(Global)에서 발생할 수 있는 예외를 잡아서 처리해주는 어노테이션
반응형

'프로그래밍 > 면접대비문제' 카테고리의 다른 글

MVC란?  (0) 2021.01.11
Java Collection framework interface의 특징  (0) 2021.01.11
REST API에 대해서  (0) 2021.01.10
MSA란 무엇인가?  (0) 2021.01.10
[IT 개발자 면접 대비문제] Spring의 원리  (0) 2016.09.17
반응형
반응형
반응형

MSA란 무엇인가?

  • MSA

    • 하나의 서비스를 만들때 도메인별로 서비스를 쪼개어 독립적으로 서비스하고, 디플로이할 수 있도록 구성하는 아키텍쳐
    • 모놀리식(monolithic) 아키텍처와 대비되는 성격의 아키텍처이다.
    • 애플리케이션 로직을 각자 책임이 명확한 도메인별로 분리하여 이를 조합해 솔루션을 제공한다.
    • 각 컴포넌트(도메인)는 작은 책임 영역을 담당하고 완전히 상호 독립적으로 배포된다. 마이크로 서비스는 비지니스 영역의 한 부분에서의 책임만을 담당하고, 여러 어플리케이션에서 재사용할 수 있어야한다.
    • 어플리케이션은 항상 기술 중립적 프로토콜을 사용해 통신하기때문에 서비스 구현기술과 무관하다. 이는 한 서비스를 구축하할때 개발언어 및 기술에 종속되지 않고 다양한 언어와 기술을 사용할 수 있다는 장점이있다.
  • Monolithic

    • 모듈이 서비스 내부의 Product 현태로 종속되어있으며, 서비스에만 집중할 수 있는 구조
    • 장점
      • 개발 초기에는 단순한 아키텍처 구조와 개발의 용이함이 큰 잠점.
    • 단점
      • 규모가 커짐에따라 복잡도의 증가가 심해진다.
  • MSA의 장점

    • 각 도메인별로 서비스를 배포하고 운용하기때문에 결합도(coupling)이 낮아지는 장점이있다.
    • 배포가 유연하다.
    • 재사용성 및 확장성이 크다.
    • 서비스별 기술의 도입 및 확장이 자유롭다.
    • 하나의 서비스에 문제가생겨도 연관되지 않은 다른 도메인은 지속적으로 서비스가 가능하다.
  • MSA의 단점

    • 장애추적, 모니터링, 매시징이 어렵다(?? 이게 어렵나?)
    • 어려 도메인에 걸친 기능의 경우 트랙잭션을 다루기 어렵다.
    • 도매인간 의존성이 있는경우 릴리즈가 어렵다. <=> 도매인간 roll-out계획 마련 및 명확한 의존성 관리

** 참고 자료 https://waspro.tistory.com/429

반응형
반응형

레코드, 키의 정의 및 검색 트리

 트리에대한 알고리즘 공부에 앞서 트리에 대해 알아보는 시간을 가진다. 
대부분의 자료는 gmlwjd9405.github.io/2018/08/12/data-structure-tree.html 를 참조하였다. 알고리즘및 자료구조에관한 정리를 매우 잘 해놓은 블로그이니 참조하면 좋다.

레코드, 키의 정의 및 검색 트리

  • 레코드
    • 개체에대해 수집된 모든 정보를 포함하고있는 저장단위
  • 필드
    • 레코드에서 각각의 정보를 나타내는 부분
  • 검색키
    • 다른 레코드와 중복되지 않는 각 레코드를 대표하는 필드
    • 키는 하나의 필드로 이루어질 수 도 있고 두개 이상의 필드로 이루어질 수 도 있다. 
  • 검색트리
    • 각 노드가 규칙에 맞도록 하나씩의 키를 가지고있다. 
    • 이 키를 이용해 해당 레코드가 자정된 위치를 알 수 있다.  

TREE 자료구조의 특징

  • TREE는 노드로 이루어진 자료구조이다.
    • 트리는 하나의 루트 노드를 가진다.
    • 루트노드는 0개 이상의 자식 노드를 가진다. 
    • 그 자식노드도 0개이상의 자식 노드를 가진다. 
  • 트리는 노드(node)와 그 노드들을 연결하는 간선(edge)으로 이루어져있다. 
    • 트리의 노드 사이에는 CYCLE(순환)이 없다. 
    • 노드 사이엔 특정 순서가 있을수도 있고 없을수도있다. 
    • 각 노드는 부모도드로 연결이 있을수도있고 없을수도있다. 
    • 각 노드는 어떤 자료형으로도 표현이 가능하다. 
  • 비 선형 자료구조이고계층적 관계를 표현한다.
    • 주어진 배열에서 최솟값을 찾는다.
    • 그 값을 맨앞의 값과 교체한다.
    • 맨처음 위치를 뺀 나머지 리스트를 같은 방법으로 교채한다.
    • 하나의 원소만 남을때까지 위의 과정을 반복한다.
  • 그래프의 한 종류이다. 
    • 사이클이 없는 연결그래프이다. 
    • DAG(Directed Acyclic Graph, 방향성이 있는 비순환그래프)의 한종류이다. 

 

TREE 와 연관된 용어

  • 루트(root)노드: 부모가 없는 노드. 트리는ㄴ 하나의 루트노드만 가진다. 
  • 단말(leaf)노드: 자식이 없는 노드.
  • 내부(internal)노드: 루트도, 단말도 아닌 노드(부모와 자식이 있는 노드)
  • 간선(edge): 노드들을 연결하는선. link, branch라고도 부른다. 
  • 형제(sibling)노드: 같은 부모를 가지는 노드 
  • 노드의 크기: 자신을 포함한 모든 자손 노드의 수
  • 노드의 깊이(depth): 루트에서 특정 노드에 도달하기위해 거쳐야하는 간선의수
  • 노드의 레벨(level): 루트에서 어떤 노드에 도달하기 위해 거처야하는 간선의 수 
  • 노드의 차수(degree): 하위 트리의 개수 / 간선 수 degree = 각 노느가 가진 가지의 수
  • 트리의 타수(degree of tree): 트리의 최대 차수
  • 트리의 높이(height): 루트에서 부터 가장 깊숙히 있는 노드의 깊이.

이미지 출처 https://gmlwjd9405.github.io/2018/08/12/data-structure-tree.html

TREE 의 종류

  • 이진트리(Binary Tree)
    • 각노드가 최대 두개의 자식을 가질 수 있다.
    • 모든 트리가 이진트리는 아니다. 
    • 중위(in-order), 전위(pre-order), 후위(post-order)순회가 가능
  • 이진 탐색트리
    • 모든 노드가 특정 순서를 따르는 속성이 있는 트리
    • 모든 외쪽 자식들 < 부모 < 오른쪽자식들의 순서를 가지고있는다.

 

이외의 균형/비균형, 전이진/완전이진/포화이진 트리 및  힙 트라이 같은 파생형은 출처에서 공부하면좋다. 

gmlwjd9405.github.io/2018/08/12/data-structure-tree.html

 

[자료구조] 트리(Tree)란 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

알고리즘을 공부하기위해 특징을 리마인드하기위한 포스팅이라서 구현방법같은 자료구조 영역은 생략한다. 자세한 사항은 출처를 확인하면 좋다. 

반응형

'프로그래밍 > 알고리즘' 카테고리의 다른 글

삽입정렬Insertion Sort  (0) 2020.12.27
버블 정렬Bubble Sort  (0) 2020.12.26
선택 정렬Selection Sort  (0) 2020.12.22
앞으로 공부할 알고리즘  (0) 2020.12.22
반응형

삽입정렬Insertion Sort

삽입정렬Insertion Sort알고리즘의 특징

**gmlwjd9405.github.io/2018/05/06/algorithm-insertion-sort.html 많은부분 참고했습니다.

  • 손안의 카드를정렬하는 방법과 유사.

  • 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 부분과 비교하여 자신의 위치를 찾아서 삽입한다. 

  • 매순서마다 원소를 삽입할 수 있는 위치를 찾아서 해당 위치에 넣는다. 

    • 두번째 자료(index = 1 )부터 시작한다

    • 1번째 값이 0번째값보다 작으면 1번째 값을 0번째에 넣고 0번째 값을 1번째 자리에 넣는다.

    • 여기까지하면 인덱스 0,1이 정렬된 자료가된다. 
    • 2번째 값을 0,1번째 값과 비교한후 적절한 자리에 넣고 해당 자리의원소들은 뒤로 한칸씩 밀린다. 

    • 여기까지하면 인덱스 0,1,2가 정렬된 자료가 된다. 
    • 3번째 값을 정렬된 자료와 비교하여 적절한 자리에 넣고 원래 자리에있던 원소들은 한칸씩 뒤로간다. 

    • 여기까지하면 0,1,2,3이 정렬된 자료가된다. 

    • n까지 반복하면 0부터 n까지 정렬이 완료된다.

  • 장점

    • 안정한 정렬방법이다.
    • 자료의 수가 적을경우 알고리즘이 매우 간단하다. 
    • 대부분 정렬이 된 상태일경우 효율적이다. 
  • 단점

    • 자료의 이동이 많다. 
    • 자료가 많은 경우 적절하지못하다. 

알고리즘 예제

31      25     12    22     11 처음 상태.
31     [25]    12    22    11 두 번째 원소를 부분 리스트에서 적절한 위치에 삽입한다.
<25> 31    [12]    22    11 세 번째 원소를 부분 리스트에서 적절한 위치에 삽입한다.
<12> 25    31    [22]    11 네 번째 원소를 부분 리스트에서 적절한 위치에 삽입한다.
12    <22>  25    31    [11] 마지막 원소를 부분 리스트에서 적절한 위치에 삽입한다.
<11>    12    22    25    31 종료.}

삽입정렬Insertion Sort 코틀린 코드

fun insertionSort(arr: IntArray) : IntArray{
    var j = 0
    var key = 0


    for (i in 1 until arr.size) { //0번째 자료는 정렬된것으로 간주한다.
        key = arr[i]

        j = i
        while (--j >= 0 && key < arr[j]) {
            arr[j+1] = arr[j]
            arr[j] = key
        }


    }

    return arr
}
  • 시간복잡도
    • 최선의경우
      • 비교횟수
        • 이동이 없이 1번의 비교만 이루어진다.
      • O(n)
    • 최악의 경우
      • 비교횟수
        • 모든 자료를 비교해야하기때문에 n개의 자료를 정렬할경우 n, n-1, n-2 ... 1 번의 비교를해야한다.
        • 비교는 O(n^2)번이라고할 수 있다.  
      • 교환횟수
        • 매번 교환이 이루어지기때문에 n, n-1, n-2 ... 1번의 교환이이루어진다. 
        • 교환이 O(n^2)번 이루어진다고할 수 있다.
      • 시간복잡도
        • O(n^2)

 

반응형

'프로그래밍 > 알고리즘' 카테고리의 다른 글

레코드, 키의 정의 및 검색 트리  (0) 2020.12.29
버블 정렬Bubble Sort  (0) 2020.12.26
선택 정렬Selection Sort  (0) 2020.12.22
앞으로 공부할 알고리즘  (0) 2020.12.22
반응형

버블 정렬Bubble Sort

버블 정렬Bubble Sort 알고리즘의 특징

  • 인접한 두 원소를 검사하여 정렬하는방법

  • 느리지만 코드가 간단하여 자주 사용된다.(라고는 하는데 개인적으로 학부때 수업들을때말고는 사용해본적이 없긴하다.)

  • 프로세스 방법

    • 인덱스 0 과 인덱스 1의 값을 비교한다.

    • 0번째의 값이 1번째의 값보다 크다면 스왑 한다.

    • 인덱스1과 인덱스 2의 값을 비교한다.

    • 1번째의 값이 2번째의 값보다 크다면 스왑 한다.

    • 인덱스를 증가시키면서 n 까지 반복한다.

    • n까지 반복하면 가장 큰 값이 맨 n에 위치하게된다.

    • 이제 인덱스 0부터 n-1 까지 반복한다.

    • 하나의 원소만 남을때까지 위의 과정을 반복한다.

  • 장점

    • 구현이 단순하다. 
  • 단점

    • 속도가 느리다.

알고리즘 예제

매우 적절할 버블정렬을 춤으로 나타낸 동영상이다.

youtu.be/lyZQPjUT5B4

버블 정렬Bubble Sort 코틀린 코드

fun bubbleSort(arr: IntArray): IntArray{
   var temp = 0
   for(i in arr.indices){
       for(j in 1 until arr.size - i)
           if(arr[j] < arr[j-1]) {
               temp = arr[j]
               arr[j] = arr[j - 1]
               arr[j - 1] = temp
           }
       }
    return arr
}
  • 시간복잡도
    • O(n^2)
    • 정렬할 자료의 길이만큼 이중 반복을한다.
반응형

'프로그래밍 > 알고리즘' 카테고리의 다른 글

레코드, 키의 정의 및 검색 트리  (0) 2020.12.29
삽입정렬Insertion Sort  (0) 2020.12.27
선택 정렬Selection Sort  (0) 2020.12.22
앞으로 공부할 알고리즘  (0) 2020.12.22
반응형

선택 정렬Selection Sort

선택 정렬Selection Sort 알고리즘의 특징

  • 제자리 정렬(in-place sorting)의 하나이다.
    • 입력벼열(정렬되지 않은 값들) 이외에 다른 추가 메모리를 요구하지 않는 정렬 방법.
  • 해당 순서에 원소를 넣을 위치는 이미 정해져있고, 어떤 원소를 넣을지 선택하는 알고리즘.
    • 첫번째 순서에 첫번째 위치에 가장 최소값을 넣는다.
    • 두번째 위치엔 남은값중 최솟값을 넣는다.
    • n 번째 위치엔 남은 값중 최솟값을 넣는다.
  • 프로세스 방법
    • 주어진 배열에서 최솟값을 찾는다.
    • 그 값을 맨앞의 값과 교체한다.
    • 맨처음 위치를 뺀 나머지 리스트를 같은 방법으로 교채한다.
    • 하나의 원소만 남을때까지 위의 과정을 반복한다.
  • 장점
    • 자료의 이동 횟수가 미리 결정된다.
  • 단점
    • 안정성을 만족하지않는다.

알고리즘 예제

선택정렬의 코틀린 코드

fun main(){

    print(selectionSort(intArrayOf(3,6,1,7,5,4,9)).joinToString(","))
    //1,3,4,5,6,7,9
}

fun selectionSort(arr: IntArray): IntArray{
   var minIdx = 0
   var temp = 0
   for(i in arr.indices){
       minIdx = i
       for(j in i+1 until arr.size   ){
          if(arr[minIdx] > arr[j]) {
              minIdx = j
          }
       }

       if(minIdx != i){
           temp = arr[i]
           arr[i] = arr[minIdx]
           arr[minIdx] = temp
       }

   }

    return arr
}
  • 시간복잡도
    • O(n^2)
    • 정렬할 자료의 길이만큼 이중 반복을한다.
반응형

'프로그래밍 > 알고리즘' 카테고리의 다른 글

레코드, 키의 정의 및 검색 트리  (0) 2020.12.29
삽입정렬Insertion Sort  (0) 2020.12.27
버블 정렬Bubble Sort  (0) 2020.12.26
앞으로 공부할 알고리즘  (0) 2020.12.22
반응형

앞으로 공부할 알고리즘. 공부가 끝나면 블로그에 정리 후 링크를 달아두기로한다. 

 

 

1. 정렬
  1.기본적인 정렬 알고리즘
    1. 선택 정렬Selection Sort
    2. 버블 정렬Bubble Sort
    3 .삽입 정렬Insertion Sort
  2. 고급 정렬 알고리즘
    1. 병합 정렬Merge Sort
    2. 퀵 정렬Quick Sort
    3. 힙 정렬Heap Sort
  3. 비교 정렬 시간의 하한
  4. 특수 정렬 알고리즘
    1. 기수 정렬Radix Sort
    2. 계수 정렬Counting Sort

2.선택 알고리즘
  1 평균 선형 시간 선택 알고리즘
  2 최악의 경우에도 선형 시간을 보장하는 선택 알고리즘

3.검색 트리  
  1. 레코드, 키의 정의 및 검색 트리
  2. 이진 검색 트리 
    1. 이진 검색 트리에서 검색
    2. 이진 검색 트리에서 삽입
    3 .이진 검색 트리에서 삭제
  3, 레드 블랙 트리
    1. 레드 블랙 트리에서 삽입
    2. 레드 블랙 트리에서 삭제
    3. 레드 블랙 트리의 작업 성능 분석
  4. B-트리
    1. B-트리에서 검색
    2. B-트리에서 삽입
    3. B-트리에서 삭제
    4. B-트리의 작업 성능 분석
  5. 다차원 검색 트리
    1. KD-트리
    2. KDB-트리
    3. R-트리
    4. 그리드 파일

4. 해시 테이블
  1. 해시 테이블 : 검색 효율의 극단
  2. 해시 함수
    1. 나누기 방법
    2. 곱하기 방법
  3. 충돌 해결
    1. 체이닝
    2. 개방 주소 방법
  4. 해시 테이블에서 검색 시간 분석

5. 집합의 처리
  1. 연결 리스트를 이용한 집합의 처리
    1. 작업의 개요
    2. 수행 시간
  2. 트리를 이용한 집합의 처리
    1. 기본 원리
    2. 연산의 효율을 높이는 방법

6. 동적 프로그래밍
  1. 어떤 문제를 동적 프로그래밍으로 푸는가
  2. 행렬 경로 문제
  3. 돌 놓기 문제
  4. 행렬 곱셈 순서 문제
  5. 최장 공통 부분 순서LCS

7. 그래프
  1. 그래프
  2. 그래프의 표현
    1. 인접 행렬을 이용한 방법
    2. 인접 리스트를 이용한 방법
    3 .인접 배열과 인접 해시 테이블
  3. 너비 우선 탐색BFS과 깊이 우선 탐색DFS
  4. 최소 신장 트리
    1. 프림 알고리즘
    2. 크루스칼 알고리즘
    3 .안전성 정리
  5. 위상 정렬Topological Sorting
  6. 최단 경로
    1. 다익스트라 알고리즘(음의 가중치를 허용하지 않는 경우 )
    2. 벨만-포드 알고리즘(음의 가중치를 허용하는 경우)
    3 .모든 쌍 최단 경로 알고리즘
    4 .사이클이 없는 그래프의 최단 경로
  7. 강연결 요소

8. 그리디 알고리즘
  1. 전형적인 그리디 알고리즘의 구조
  2. 그리디 알고리즘으로 최적해가 보장되지 않는 예
    1. 이진 트리의 최적합 경로 찾기
    2. 보따리 문제
    3 .동전 바꾸기
  3. 그리디 알고리즘으로 최적해가 보장되는 예
    1. 최소 신장 트리
    2. 회의실 배정 문제
    3 .그 밖의 예
  4. 매트로이드 : 그리디 알고리즘으로 최적해가 보장되는 공간 구조
    1. 매트로이드의 정의와 예
    2. 매트로이드의 확장과 포화
    3. 매트로이드 구조이면 그리디 알고리즘으로 최적해 보장
    ★ 4. 문제 공간 탐색 관점에서 본 매트로이드

9. 문자열 매칭
  1. 원시적인 매칭 방법
  2. 오토마타를 이용한 매칭
  3. 라빈-카프 알고리즘
  ★ 4. KMP 알고리즘
  5. 보이어-무어 알고리즘

10. NP-완비
  1. 문제의 종류
  2. Yes/No 문제와 최적화 문제
  3. NP
  4.. 다항식 시간 변환
  5. NP-완비
  6. NP-완비 문제들
  7. NP-하드를 최적화 문제로 확장하기
  ★ 8. 근사해 구하기
  ★ 9. 현상금 걸린 문제들

11.상태 공간 트리의 탐색
  1. 상태 공간 트리
  2. 백트래킹
    1. 미로 찾기 문제
    2. 색칠 문제
  3. 한정 분기
  4. A* 알고리즘
    1. 최단 경로 찾기 문제
    2. TSP
  Drift 공간 탐색과 끌개

반응형

'프로그래밍 > 알고리즘' 카테고리의 다른 글

레코드, 키의 정의 및 검색 트리  (0) 2020.12.29
삽입정렬Insertion Sort  (0) 2020.12.27
버블 정렬Bubble Sort  (0) 2020.12.26
선택 정렬Selection Sort  (0) 2020.12.22
반응형

스프링 부트에서 스프링 시큐리티를 사용할때 템플릿 엔진을 머스타쉬를 사용해서 로그인 / 회원가입등을 시도할경우 미리 설정한 리다이렉트 주소로 가게 되는경우가있다. 

이때 에러로그가 안찍혀서 난감해지는대 이럴땐 로그레벨을 낮추면 더 자세한 로그를 볼 수 있다. 

#application.properties

#logging
logging.level.root=debug

위와같이 application.properties 파일에 로깅 레벨을 디버그로 설정해준다( 디폴트는 info)

설정하고 다시 로그인 혹은 회원가입을 시도하면 아까랑은 다른 메시지를 볼 수 있는데 스프링 플터체인 로그가나오면서 "csrf"어쩌고 하는 로그가 나온다.

CSRF 란 Cross-site request forgery의 약자로 타사이트에서 본인의 사이트로 form 데이터를 사용하여 공격하려고 할 때, 그걸 방지하기 위해 csrf 토큰 값을 사용하는 것이다. 참조: velog.io/@max9106/Spring-Security-csrf

csrf에대해 서치를해보니 mustache는 csrf토큰을 기본적으로 제공을 안해주기때문에 생기는 문제였다. 
서치를 좀 해보니 인터셉터를 구현해서 모델에 어트리뷰트로 넣어주는 방법이 있었으나... 그럴리가 없다는 생각에 좀더 검색해보니...

스택오버플로우에서 발견했다. stackoverflow.com/questions/26397168/how-to-use-spring-security-with-mustache
역시 설정에 있었다. 다시한번 어플리케이션 프로퍼티를 열고 

#application.properties

#logging
logging.level.root=debug

#mustache
spring.mustache.expose-request-attributes=true

spring.mustache.expose-request-attributes=true 라고 추가해준다.

이제 머스타쉬에서 csrf를 사용할 수 있다. 

 폼에

  <input type="hidden" name="_csrf" value="{{_csrf.token}}" />

 

이렇게 히든으로 csrf값을 넣어주면 csrf로 인한 필터는 통과할 수 있게되었다. 

반응형

'프로그래밍 > 삽질내역' 카테고리의 다른 글

Intellij 톰캣 에러로그 한글깨짐현상  (0) 2019.11.12

+ Recent posts