전체 글
-
JVM ARCHITECTURE (배경 , 특징 , 컴파일 과정 등)Java&Spring/Java 2023. 9. 15. 18:07
JVM (Java Virtual Machine) 2022 9월 28일 부터 지속적으로 글을 업데이트 중입니다. Java의 특징 : "OS 에 종속 적이지 않고 실행 가능 하다" 배경 Java 로 작성한 코드는 JVM 에 의하여 동작을 하게 됩니다. 이로 인하여 이론상 OS 및 하드웨어의 관계없이 자바 언어로 어플리케이션 개발이 가능합니다. JVM 은 많은 개발자의 C/C++ 로 개발시 복잡한 메모리의 할당 , 해제고민들로 부터 자유로워지게 만들었고 , OS 별로 고민을 해야할 많은 상황에서 자유롭게 만들었습니다. 주관적인 의견으로 개발의 난이도가 낮춰저 많은 인원이 하나의 서비스를 편하게 개발하는 단계가 시작이 되었다라고 생각합니다. * GC 로 인하여 메모리가 할당된 객체,변수를 신경쓰지 않아도 된다하..
-
MySql 조회 성능 최적화를 위한 Index 의 이해(2)Infra & Tools/MYSQL 2023. 9. 14. 23:04
이전 글에서 인덱스의 특징 설명을 했으니,, 실습을 해봤다. -> 다음 문장이 실제인지 알아보자. 1000 만건의 데이터의 통계를 위해 4000 만 건을 읽는 작업에서는(전체 테이블 레코드의 20 %) 인덱스를 이용하지 않는게 올바른 판단일 수가 있다. 다음과 같이 인덱스를 명시하지 않았으면 인덱스가 있다면 옵티마이저가 알아서 인덱스를 설정한다. (그렇다고 항상 최적으로 인덱스 설정하는것도 아님) 인덱스를 만들기 전에 , 인덱스가 없는 경우를 먼저 측정을 하고, 인덱스를 생성한 후 비교를 해주자. select created_time ,updated_time ,count(feed_id) as count from feed where member_id = 4 and created_time between '20..
-
SpringBoot 3.1.0 으로 마이그레이션Project/TravelFeelDog 2023. 9. 7. 11:32
기존 프로젝트의 버전은 다음과 같습니다. SpringBoot 의 경우 버전 2.7 을 사용중이였고 , Java 의 경우 버전 17을 사용중이였습니다. plugins { id 'java' id 'org.springframework.boot' version '2.7.7' id 'io.spring.dependency-management' version '1.1.0' } group = 'woowahangongdol' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' ///gradle-7.6.1 Java 의 버전 선택에서는 다음 3가지는 필수로 존재하는 버전을 선택 하고자 했습니다. 1. Java 12 버전 에서 도입된 동적 Switch 문 2. Java 14 Dto..
-
[프로그래머스] 디펜스 게임 자바 : 막히면 자료구조를 생각해봐CodeingTestPrac/Java Coding Test 2023. 9. 6. 19:07
문제 : 디펜스 게임 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 다음과 같이 n, k, 적들의 정보가 주어진 상황에서 -> 7, 3, [4, 2, 4, 5, 3, 3, 1] 적의 최대값이 10^6 으로 들어올 수 가 있다. 알고리즘의 시간복잡도가 O(N^2) 은 시간 초과가 날 것을 알기때문에 O(N*logN) 을 사용해야한다. O(N*logN) 을 사용하여 해결 가능한 조건은 1. 자료구조 : 힙 2. 알고리즘 : 탐색 , DP , 백트래킹 등 으로 갈릴것 같다 . 탐색의 순서는 인덱스 0 번을 기준으로 시작 하여 데이터의 크기가 매우큼으로 , 특정..
-
Cache Memory 란 무엇인가 ?CS-Theory/OS 2023. 9. 6. 12:23
하드디스크에서 데이터 파일을 불러와 cpu 에서 연산을 수행을 하는 상황을 이해해보자 . 1. Main Memory 의 등장 배경 , DRAM Dyanmic Random Access Memory CPU 의 연산 속도 차이와 HDD/SDD(외장메모리) 의 연산 속도 , 데이터 I/O로 인하여 발생하는 속도의 차이로 인하여 병목 현상이 발생하고 이러한 문제점을 해결하기 위하여 cpu 가 작업할 데이터와 명령들을 저장하는 Main Memory 를 두게 되었다. Main Memory 는 보통 DRAM 을 사용한다. In Memory DB Redis 도 DRAM 을 기본으로 동작한다. 2. Cache Memory 의 등장 ,SRAM : Static Random Access Memory 기술의 발전에 따라 프로세서..
-
Genric 이 타입 일반화인 줄 만 알면, 주니어입니다.Java&Spring/Java 2023. 9. 4. 20:32
Generic : 클라스나 메소드에서 사용할 내부 데이터 타입을 외부에서 지정하는 기법 이다. - 하나의 값이 다양한 타입을 지정 받기 위하여 사용 한다. API 의 response class 가 정해져 있지 않은 상황에서 API 의 data body 를 Generic 으로 선언 후 개발을 진행 하고 완료후 타입을 강제 할 수 가 있다. - 컴파일 타임에 타입이 정해짐으로 따로 캐스팅을 해줄 필요가 없다. [자세한 내부 동작은 글 하단에서 다룬다.] 예시의 모든 설명은 다음과 같은 상속 관계를 갖는다. 클라스 Object
-
자료구조 Stack , add vs pushJava&Spring/Java 2023. 9. 4. 18:15
자바의 스택 자료 구조는 다음과 같이 선언 사용이된다. Stack stack = new Stack(); stack.add(1); stack.push(2); stack.add(0,71); stack.add(stack.size(),71); stack.add(stack.size()-1,74); System.out.println(stack.peek()); System.out.println(stack); stack.pop(); stack.add(stack.size() + 1,100); // out of index 보통의 자료구조인 stack 을 사용하는 것은 선입 후출의 개념으로 사용이 되며 , push , pop 의, 연산을 지원하지만. Java 의 Stack 의 경우 정말 독특한점은 add() 도 같이 지원을..
-
Sort : Arrays.sort() vs Collections.sort() & 배열 다중 정렬 및 출력Java&Spring/Java 2023. 9. 4. 17:40
Arrays.sort() vs Collections.sort 두개는 사용하는 정렬이 다르다. .... ? 정답 ) Collections.sort() 는 List 객체를 object 로 변환해서 Arrays.sort() 를 실행한다. Arrays.sort() 는 primitive type 의 경우 DualQuickSort , 아닌 경우 Merge Sort 를 변형시킨 TimSort 를 사용한다. QuickSort() 의 경우는 안정성을 보장하지 않는다 . 1,4,3,3,5,3 일때 , 중복되는 숫자의 순서가 바뀔 수가 있다. - 원시 타입의 값들은 배열의 중복되는 값들의 순서가 중요하지 않는 경우이니 , 평균속도가 빠른 QuickSort 를 이용하고 - 안정성이 보장이 되어야 하는 "객체" , 중복값을 가..