no image
[Algorithm]BeakJoon_11399
=>정답률도 높고 그렇게 어려운 문제도 아닌거 같다.1234567891011121314151617181920212223242526272829303132333435363738394041package beak_joon; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;import java.util.StringTokenizer; public class BeakJoon_11399 {     public static void main(String[] args) throws IOException {         BufferedReader br = new Buf..
2021.07.18
no image
[Algorithm]BeakJoon_1931
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;import java.util.Comparator;import java.util.StringTokenizer; public class BeakJoon_1931 {    public static void main(String[] args) throws IOException {        BufferedReader br = new BufferedRe..
2021.07.18
no image
[Algorithm]BeakJoon_14681
123456789101112131415161718192021222324public class BeakJoon_14681 {    public static void main(String[] args) throws IOException {        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));         int X = Integer.parseInt(br.readLine());        int Y = Integer.parseInt(br.readLine());         if (X > 0) { //x가 0보다 클때            if (Y > 0) {                System.out.print..
2021.07.18
no image
[Algorithm]BeakJoon_1330
두 수 비교하기  1234567891011121314class BeakJoon_1330_2{    public static void main(String[] args) throws IOException {         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));         String str = br.readLine();        StringTokenizer st = new StringTokenizer(str," "); //공백 단위        int A = Integer.parseInt(st.nextToken());        int B = Integer.parseInt(st.nextToken());  ..
2021.07.18
no image
로깅(Logging)
➡️ 로깅(logging)이란? 정보를 제공하는 일련의 기록인 로그(log)를 생성하도록 시스템을 작성하는 활동이다. 프린트 줄 넣기(printlning)는 간단한, 보통은 일시적인, 로그를 생성하기만 한다. 시스템 설계자들은 시스템의 복잡성 때문에 로그를 이해하고 사용해야 한다. 로그가 제공하는 정보의 양은, 이상적으로는 프로그램이 실행되는 중에도, 설정 가능해야한다. 일반적인 로그 기록의 이점 로그는 재현하기 힘든 버그에 대한 유용한 정보를 제공할 수 있다. 로그는 성능에 관한 통계와 정보를 제공할 수 있다. 설정이 가능할 때, 로그는 예기치 못한 특정 문제들을 디버그하기 위해, 그 문제들을 처리하도록 코드를 수정하여 다시 적용하지 않아도, 일반적인 정보를 갈무리할 수 있게 한다. ➡️로그를 출력하는..
2021.07.13
no image
HTTP 메서드(GET,POST,PUT,PATCH,DELETE)
📡HTTP메서드 종류 GET : 리소스 조회 POST :요청 데이터 처리, 주로 등록에 사용한다. PUT : 리소스를 대체 , 해당 리소스가 없으면 생성한다. PATCH : 리소스 부분 변경 DELETE : 리소스 삭제 ➡️GET 리소스를 조회할 때 사용한다. 서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)을 통해서 전달한다. 메시지 바디를 통해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 믾아서 권장하지 않는다. 메시지 전달 -> 서버 도착 -> 응답 데이터 반환 ➡️POST 요청 데이터를 처리한다. 메시지 바디를 통해 서버로 요청데이터를 전달한다. 서버는 요청 데이터를 처리한다. 메시지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다. 주로 전달된 데이터로 신규..
2021.07.12
no image
DBMS란 무엇인가
📁데이터 베이스(DB) 조직에 필요한 정보를 얻기 위해 논리적으로 연관된 데이터를 모아 구조적으로 통합해 놓은 것이다. 자료의 중복을 없애고 구조화하여 처리를 효율적으로 하기 위해서 관련성을 가지며 기억 시켜 놓은 데이터의 집합이다. 📂DBMS DBMS는 database management system의 약자로 데이터베이스를 조작하는 소프트웨어이다. 데이터베이스를 관리하며 응용프로그램들이 데이터베이스를 공유하며 사용할 수 있는 환경을 제공한다. 데이터 베이스를 구축하는 틀을 제공하고 검색 및 저장하는 기능을 제공한다. 응용프로그램들이 데이터베이스에 접근할 수 있는 인터페이스를 제공하고 복구 기능과 보안성 기능을 제공한다. 📂DBMS의 기능 데이터 정의(Definition) : 데이터의 구조를 정의하고 데..
2021.07.11
no image
Insertion_Sort(삽입 정렬)
➡️Insertion_Sort(삽입 정렬)이란 삽입 정렬은 현재 비교하고자 하는 target과 그 이전 원소들과 비교하여 자리를 교환하는 정렬 방법이다. 삽입 정렬은 테이터를 비교하면서 찾기 때문에 비교정렬이다. 삽입 정렬은 대상이 되는 데이터 외에 추가적인 공간을 필요로 하지 않기 때문에 제자리 정렬이다. ➡️Insertion_Sort(삽입 정렬)과정 현재 타켓이 되는 숫자와 이전 위치에 있는 원소들을 비교한다.(첫번째 타겟은 두번째 원소부터 시작한다.) 타겟이 되는 숫자가 이전 위치에 있던 원소보다 작다면 서로 위치를 교환한다. 다음 타겟을 찾아 위 과정을 반복한다. ➡️Insertion_Sort(삽입 정렬)장단점 장점 이미 정렬되어 있는 경우 매우 효율적이다. 안정 정렬이 가능하다. 추가적인 메모리..
2021.06.30
728x90

=>정답률도 높고 그렇게 어려운 문제도 아닌거 같다.

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
32
33
34
35
36
37
38
39
40
41
package beak_joon;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
 
public class BeakJoon_11399 {
 
    public static void main(String[] args) throws IOException {
 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        int N = Integer.parseInt(br.readLine());
        
        int [] arr = new int[N];
 
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
 
        for(int i = 0; i< N; i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }
        // 정렬 
        Arrays.sort(arr);
 
        int prev = 0;    // 이전까지의 대기시간 누적합         
        int total = 0;    // 사람별 대기시간 총합 
 
        for(int i = 0; i < N; i++){
            // 이전까지의 대기시간 + 현재 사람이 걸리는 시간.
            total += prev + arr[i];
 
            // 이전까지의 누적합 + 현재 걸리는 시간
            prev += arr[i];
        }
 
        System.out.println(total);
    }
}
//정리하자면 그냥 오름차순으로 정렬하고 더해주면 된다.
 
cs
728x90

'Dev > 알고리즘 ,자료구조' 카테고리의 다른 글

[Algorithm]BeakJoon_2981  (0) 2021.07.20
[Algorithm]BeakJoon_1541  (0) 2021.07.18
[Algorithm]BeakJoon_1931  (0) 2021.07.18
[Algorithm]BeakJoon_14681  (0) 2021.07.18
[Algorithm]BeakJoon_1330  (0) 2021.07.18
728x90

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
 
public class BeakJoon_1931 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        int N = Integer.parseInt(br.readLine());
 
        int [][] room = new int[N][2];
 
        for(int i = 0; i<N; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            room[i][0= Integer.parseInt(st.nextToken());
            room[i][1= Integer.parseInt(st.nextToken());
        }
        
        /**
        * 회의가 끝나는 시점으로 정렬 
        */
        Arrays.sort(room, new Comparator<int[]>() {
           
             @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[1== o2[1]){
                    return o1[0- o2[0];
                }
                return o1[1]- o2[1];
            }
        });
 
        int cnt = 0;
        int end_time = 0;
 
        for(int i = 0; i < N; i++){
            if(end_time <= room[i][0]){ //endtime 값이 회의 시작 시간보다 작다면 
                end_time = room[i][1]; //그 회의에 끝나는 시간을 endtime로 정의
                cnt++
            }
        }
 
        System.out.println(cnt);
    }
}
 
cs
728x90

'Dev > 알고리즘 ,자료구조' 카테고리의 다른 글

[Algorithm]BeakJoon_1541  (0) 2021.07.18
[Algorithm]BeakJoon_11399  (0) 2021.07.18
[Algorithm]BeakJoon_14681  (0) 2021.07.18
[Algorithm]BeakJoon_1330  (0) 2021.07.18
Insertion_Sort(삽입 정렬)  (0) 2021.06.30
728x90

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class BeakJoon_14681 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        int X = Integer.parseInt(br.readLine());
        int Y = Integer.parseInt(br.readLine());
 
        if (X > 0) { //x가 0보다 클때
            if (Y > 0) {
                System.out.print(1); //Y가 0보다 크면 1사분면
            } else {
                System.out.print(4); //Y가 0보다 작으면 4사분면
            }
        } else{ //X가 0보다 작을때
            if(Y > 0){
                System.out.print(2); //Y가 0보다 크면 2사분면
            }else{
                System.out.print(3); //Y가 0보다 작으면 3사분면
            }
        }
 
    }
}
 
cs

 

728x90

'Dev > 알고리즘 ,자료구조' 카테고리의 다른 글

[Algorithm]BeakJoon_11399  (0) 2021.07.18
[Algorithm]BeakJoon_1931  (0) 2021.07.18
[Algorithm]BeakJoon_1330  (0) 2021.07.18
Insertion_Sort(삽입 정렬)  (0) 2021.06.30
Selection_Sort(선택 정렬)  (0) 2021.06.29
728x90

두 수 비교하기 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class BeakJoon_1330_2{
    public static void main(String[] args) throws IOException {
 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        String str = br.readLine();
        StringTokenizer st = new StringTokenizer(str," "); //공백 단위
        int A = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
 
        System.out.println((A>B ? ">":((A<B) ? "<":"==")));//A가 크면 > B가 크면 < 같으면 ==
    }
}
 
cs

 

728x90

'Dev > 알고리즘 ,자료구조' 카테고리의 다른 글

[Algorithm]BeakJoon_1931  (0) 2021.07.18
[Algorithm]BeakJoon_14681  (0) 2021.07.18
Insertion_Sort(삽입 정렬)  (0) 2021.06.30
Selection_Sort(선택 정렬)  (0) 2021.06.29
Bubble_Sort(거품 정렬)+JAVA로 구현  (0) 2021.06.28

로깅(Logging)

ryudjae
|2021. 7. 13. 13:41
728x90

 

 

➡️ 로깅(logging)이란?

  • 정보를 제공하는 일련의 기록인 로그(log)를 생성하도록 시스템을 작성하는 활동이다.
  • 프린트 줄 넣기(printlning)는 간단한, 보통은 일시적인, 로그를 생성하기만 한다. 
  • 시스템 설계자들은 시스템의 복잡성 때문에 로그를 이해하고 사용해야 한다.
  • 로그가 제공하는 정보의 양은, 이상적으로는 프로그램이 실행되는 중에도, 설정 가능해야한다.
  • 일반적인 로그 기록의 이점
    • 로그는 재현하기 힘든 버그에 대한 유용한 정보를 제공할 수 있다.
    • 로그는 성능에 관한 통계와 정보를 제공할 수 있다.
    • 설정이 가능할 때, 로그는 예기치 못한 특정 문제들을 디버그하기 위해, 그 문제들을 처리하도록 코드를 수정하여 다시 적용하지 않아도, 일반적인 정보를 갈무리할 수 있게 한다.

➡️로그를 출력하는 방법

  • System.out.println()을 사용한다
  • 로깅 라이브러리를 사용한다.

로그 라이브러리는 Logback,Log4j,Log4J2등등 많은 라이브러리가 있는데,그것을 통합해서 제공하는 것이 바로 SLF4J 라이브러리이다.

SLF4J는 인터페이스고, 그 구현체로 Logback같은 로그 라이브러리를 선택하면 된다.

스프링 부트는 기본으로 SLF4J와 logback을 로깅 라이브러리를 사용한다.

 

➡️로그 사용법

로그 선언

1
2
3
private Logger log = LoggerFactory.getLogger(getClass());
 
private static final Logger log = LoggerFactory.getLogger(XXX.class);
cs

위 두가지 방법이 라이브러리를 쓸때 일반적인 방법이다. 

그러나 스프링부트를 사용하면서 롬복을 추가 하면 더욱더 간단하게 로그 선언을 할 수 있다.

롬복 로그선언 :@SLF4J

세 가지 방법 모두 다 동일하다.스프링 부트를 사용한다면 롬복으로 선언하는게 조금 더 편리해 보인다.


로그 호출

1
2
3
log.info("info log ={}",name);
 
System.out.println("info log ={}",name);
cs

위 두가지 방법이 있다.시스템 콘솔로 직접 출력하는거 보다 로그를 사용하는것이 좋다.

로그를 호출할 때 되도록이면 System.out.println은 사용을 하지 않는것이 좋다. 성능 차이가 너무 확연하게 난다.

 

간단한 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@RestController
@Slf4j
public class LogTestController {
 
      @RequestMapping("/log-test")
      public String logTest() {
          String name = "Spring";
          log.trace("trace log={}", name);
          log.debug("debug log={}", name);
          log.info(" info log={}", name);
          log.warn(" warn log={}", name);
          log.error("error log={}", name);
 
 
        return "ok";
    } 
}
cs

이 처럼 사용하면 콘솔창에 로그가 찍힌다.

이렇게 보면 확실히 System.out.println보다 깔끔하고 정확하게 확인 할 수 있다.

로그가 출력되는 순서대로 시간, 로그,레벨, 프로세스 ID,쓰레드 명,클래스명,로그메시지이다.


로그 레벨

  • 로그를 출력할 때 로그 레벨을 설정해서 원하는 레벨까지의 로그만을 출력 할 수 있다.
  • 로그 레벨 : TRACE ->DEBUG ->INFO->WARN ->ERROR
  • 개발 서버에서는 DEBUG까지 출력해도 상관 없지만 운영 서버에서 DEBUG를 출력하면 너무 방대한 양의 로그가 출력되기 때문에 운영 서버에서는 INFO레벨로 출력해주는 것이 좋다.

로그 레벨 설정

 application.properties에서 설정 해준다.

#전체 로그 레벨 설정(기본 info)
logging.level.root=info
#hello.springmvc 패키지와 그 하위 로그 레벨 설정 
logging.level.hello.springmvc=debug


 

로그 사용시 주의할점

  • log.debug("data="+data) :로그 출력 레벨을 INFO로 설정해도 해당 코드에 있는 더하기 연산이 실제로 실행되어 출력은 되지 않지만 더하기 연산으로 인해 값은 저장되므로 메모리를 사용하고,CPU를 소모한다.
  • log.debug("data={}", data) :로그 출력 레벨을 info로 설정하면 아무일도 발생하지 않는다. 따라서 앞과 같은 의미없는 연산이 발생하지 않는다.

 

로그 사용시 장점

  • 쓰레드 정보, 클래스 이름 같은 부가 정보를 함께 볼 수 있고, 출력 모양을 조정할 수 있다.
  • 로그 레벨에 따라 개발 서버에서는 모든 로그를 출력하고, 운영서버에서는 출력하지 않는 등 로그를 상황에 맞게 조절할 수 있다.
  • 시스템 아웃 콘솔에만 출력하는 것이 아니라, 파일이나 네트워크 등, 로그를 별도의 위치에 남길 수 있다. 특히 파일로 남길 때는 일별,
  • 특정 용량에 따라 로그를 분할하는 것도 가능하다.
  • 성능도 일반 System.out보다 좋다. (내부 버퍼링, 멀티 쓰레드 등등) 

 

마무리

로그를 여기서 모두 설명하기엔 양이 너무 방대 하기 때문에 혹시 더 자세한 내용이 궁금하다면 직접 검색해보면서 공부하는것이 조금 더 효율 적이라고 생각한다.

SLF4J - http://www.slf4j.org
Logback - http://logback.qos.ch

 

728x90
728x90

 

📡HTTP메서드 종류

  • GET : 리소스 조회
  • POST :요청 데이터 처리, 주로 등록에 사용한다.
  • PUT : 리소스를 대체 , 해당 리소스가 없으면 생성한다.
  • PATCH : 리소스 부분 변경
  • DELETE : 리소스 삭제 

출처: https://ko.wikipedia.org/wiki/HTTP


➡️GET 

  • 리소스를 조회할 때 사용한다.
  • 서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)을 통해서 전달한다.
  • 메시지 바디를 통해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 믾아서 권장하지 않는다.
  • 메시지 전달 -> 서버 도착 -> 응답 데이터 반환

 

➡️POST

  • 요청 데이터를 처리한다.
  • 메시지 바디를 통해 서버로 요청데이터를 전달한다.
  • 서버는 요청 데이터를 처리한다.
  • 메시지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다.
  • 주로 전달된 데이터로 신규 리소스 등록 , 프로세스 처리(요청 데이터 처리)에 사용한다.
  • 다른 메서드로 처리하기 애매한 경우에는 POST를 사용한다.
  • 메시지 전달 -> 신규 리소스 생성 ->응답 데이터 반환 

 

➡️PUT

  • PUT은 리소스를 대체한다.
  • 리소스가 없으면 신규로 생성하고, 있으면 대체한다.
  • 클라이언트가 리소스 위치를 알고 URI를 지정해서 사용한다.
  • 리소스를 완전히 대체한다.
  • 만약 리소스가 {"username" : " young" , "age": 30} 일때
  • PATCH로 {"age":50}을 요청하면 {"age": 50}으로 변경된다.("username"은 사라진다.)

 

➡️PATCH

  • PATCH는 리소스를 부분 변경한다.
  • 만약 리소스가 {"username" : " young" , "age": 30} 일때
  • PATCHfh {"age":50}을 요청하면 {"username" : " young" , "age": 50}으로 변경된다.

➡️DELETE

  • 리소스를 제거 한다.

 

➡️기타 메서드

  • HEAD :  GET과 동일하지만 메시지 부분을 제외하고 , 상태 줄과 헤더만 반환
  • OPTIONS : 대상 리소스에 대한 통신 가능 옵션(메서드)을 설명한다.
  • CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정
  • TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행 

 

 

📡HTTP메서드의 속성 

➡️멱등 

  • 한 번 호출하든 두 번 호출하든 100번 호출하든 결과가 똑같다.
  • GET: 한 번 조회하든, 두 번 조회하든 같은 결과가 조회된다.
  • PUT: 결과를 대체한다. 따라서 같은 요청을 여러번 해도 최종 결과는 같다. 
  • DELETE: 결과를 삭제한다. 같은 요청을 여러번 해도 삭제된 결과는 똑같다. 
  • POST: 멱등이 아니다! 두 번 호출하면 같은 결제가 중복해서 발생할 수 있다.

 

 

➡️캐시가능

  • 응답 결과 리소스를 캐시해서 사용해도 되는가?
  • GET, HEAD, POST, PATCH 캐시가능 실제로는 GET, HEAD 정도만 캐시로 사용
  • POST, PATCH는 본문 내용까지 캐시 키로 고려해야 하는데구현이 쉽지 않음

 

 

 

 

728x90

'Dev > Network' 카테고리의 다른 글

[Web] REST API 와 HTTP API  (0) 2022.01.04
[Network]HTTP와 HTTPS  (0) 2021.06.21
[Network]HTTP 상태코드  (0) 2021.05.23

DBMS란 무엇인가

ryudjae
|2021. 7. 11. 00:37
728x90

 

📁데이터 베이스(DB)

  • 조직에 필요한 정보를 얻기 위해 논리적으로 연관된 데이터를 모아 구조적으로 통합해 놓은 것이다.
  • 자료의 중복을 없애고 구조화하여 처리를 효율적으로 하기 위해서 관련성을 가지며 기억 시켜 놓은 데이터의 집합이다.

 

📂DBMS

  • DBMS database management system의 약자로 데이터베이스를 조작하는 소프트웨어이다.
  • 데이터베이스를 관리하며 응용프로그램들이 데이터베이스를 공유하며 사용할 수 있는 환경을 제공한다.
  • 데이터 베이스를 구축하는 틀을 제공하고 검색 및 저장하는 기능을 제공한다.
  • 응용프로그램들이 데이터베이스에 접근할 수 있는 인터페이스를 제공하고 복구 기능과 보안성 기능을 제공한다.

https://coding-factory.tistory.com/215

📂DBMS의 기능

  • 데이터 정의(Definition) : 데이터의 구조를 정의하고 데이터 구조에 대한 삭제 및 변경 기능을 수행한다.
  • 데이터 조작(Manipulation) : 데이터를 조작하는 프로그램이 요청하는 데이터의 삽입,수정,삭제 작업을 지원한다.
  • 데이터 추출(Retrieval) : 사용자가 조회하는 데이터 혹은 응용 프로그램의 데이터를 추출한다.
  • 데이터 제어(Control) : 데이터 베이스 사용자를 생성하고 모니터링하며 접근을 제어한다.백업과 회복 동시성 제어들을 지원한다.
  • 데이터 정의와 데이터 조작의 차이가 있다. 데이터 정의는 테이블 구조에 대해서 작업을 하는 것이고 데이터 조작은 테이블에 들어있는 혹은 테이블에 삽입할 데이터에 대해서 작업한다.

📂DBMS의 장단점

장점

  • 데이터 중복을 통제할 수 있다.
  • 데이터 독립성이 확보된다.
  • 데이터를 동시 공유할 수 있다.
  • 데이터 보안이 향상된다.
  • 데이터 무결성을 유지할 수 있다.
  • 표준화할 수 있다.
  • 장애 발생 시 회복이 가능하다.
  • 응용 프로그램 개발 비용이 줄어든다.

단점

  • 비용이 많이 든다.
  • 백업과 회복 방법이 복잡하다.
  • 중앙 집중 관리로 인한 취약점이 존재한다.

 

📁DBMS종류

Oracle

  • 오라클에서 만들어 판매중인 상업용 데이터베이스
  • 윈도우, 리눅스, 유닉스 등 다양한 운영체제(OS)에서 설치 가능
  • MySQL, MSSQL보다 대량의 데이터 처리 용이
  • 대기업에서 주로 사용하며, 글로벌 DB 시장 점유율 1위
  • 비공개 소스, 폐쇄적인 운영
  • 가장 널리 사용되는 RDBMS

MySQL

  • MySQL사에서 개발, 썬마이크로시스템즈를 거쳐 현재 오라클에 인수합병
  • 윈도우, 리눅스, 유닉스 등 다양한 운영체제(OS)에서 설치 가능
  • 오픈소스로 이루어져있는 무료 프로그램(상업적 사용 시 비용 발생)
  • 가격 등의 장점을 앞세워 다수의 중소기업에서 사용중
  • RDBMS

MSSQL

  • 마이크로소프트(MS)사에서 개발한 상업용 데이터베이스
  • 다른 운영체제에서도 사용가능하지만 윈도우에 특화됨
  • 비공개 소스로 폐쇄적인 운영(리눅스 버전은 오픈소스)
  • 중소기업에서 주로 사용중
  • RDBMS

MariaDB

  • MySQL이 오라클에 인수합병된 후 불확실한 라이선스 문제를 해결하려고 나온 오픈소스 RDBMS
  • 구현언어 : C++
  • MySQL과 동일한 소스 코드 기반
  • MySQL과 비교해 애플리케이션 부분 속도가 약 4~5천배 정도 빠름

 

 

 

 

 

 

728x90

'Dev > Database' 카테고리의 다른 글

[DB]이상현상(Anomly), 함수 종속성 (Functional Dependency)  (0) 2021.09.13
[DB] 정규화(Normalization)  (0) 2021.09.11
[MYSQL]SQL_1  (0) 2021.08.21
Redis란?  (1) 2021.08.16
데이터 베이스 시스템 개념  (0) 2021.07.20
728x90

 

➡️Insertion_Sort(삽입 정렬)이란

  • 삽입 정렬은 현재 비교하고자 하는 target과 그 이전 원소들과 비교하여 자리를 교환하는 정렬 방법이다.
  • 삽입 정렬은 테이터를 비교하면서 찾기 때문에 비교정렬이다.
  • 삽입 정렬은 대상이 되는 데이터 외에 추가적인 공간을 필요로 하지 않기 때문에 제자리 정렬이다.

https://ko.wikipedia.org/wiki/삽입_정렬

 

 

➡️Insertion_Sort(삽입 정렬)과정

  1. 현재 타켓이 되는 숫자와 이전 위치에 있는 원소들을 비교한다.(첫번째 타겟은 두번째 원소부터 시작한다.)
  2. 타겟이 되는 숫자가 이전 위치에 있던 원소보다 작다면 서로 위치를 교환한다.
  3. 다음 타겟을 찾아 위 과정을 반복한다.

 

➡️Insertion_Sort(삽입 정렬)장단점 

장점

  • 이미 정렬되어 있는 경우 매우 효율적이다.
  • 안정 정렬이 가능하다.
  • 추가적인 메모리 소비가 적다.

단점

  • 배열이 길수록 효율성이 떨어진다.
  • 역순에 가까울 수록 비효율적이다.

 

➡️Insertion_Sort(삽입 정렬)구현 코드 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Insertion_Sort {
 
 public static void sort(int[] arr) {
 
        for (int i = 1; i < arr.length; i++) {
 
           int target = i;
 
            while (i > 0 && arr[target - 1> arr[target]) {
 
                swap(arr, target - 1, target );
 
                target--;
            }
        }
    }
 
    private static void swap(int[] arr, int a, int b) {
        int tmp = arr[a];
        arr[a] = arr[b];
        arr[b] = tmp;
    }    }
}
cs
 

 

 


😎REFERENCE

 

728x90

'Dev > 알고리즘 ,자료구조' 카테고리의 다른 글

[Algorithm]BeakJoon_14681  (0) 2021.07.18
[Algorithm]BeakJoon_1330  (0) 2021.07.18
Selection_Sort(선택 정렬)  (0) 2021.06.29
Bubble_Sort(거품 정렬)+JAVA로 구현  (0) 2021.06.28
스택(Stack) JAVA로 구현  (0) 2021.04.24