분류 전체보기 410

캐시 전략

Redis의 캐싱 전략 개발을 할 때에 Redis를 통해서 값을 캐싱시켜 둔다면, 더 빠르게 값들을 처리할 수 있다. 이 이유를 간단하게 말하자면 DB를 통해 값을 가져오는 것 보다 캐시에 있는 데이터를 사용하면 성능면에서 더 빠르기 때문이다. 그렇기 때문에 cache miss(캐시된 데이터가 없어서 DB를 통해 해당 값을 가져온다.)를 적게 하고 cache hit(캐시된 데이터에서 바로 값을 가져옴)를 최대한으로 해야 한다. 또한 캐시는 RAM데이터를 사용하는데, 이게 데이터가 크지 않기 때문에 이를 잘 관리해야 한다. 즉 최대한 DB서버를 통하지 않고 Redis를 통해 값을 받을 수 있도록 하기 Redis의 크기를 효율적으로 관리하기 를 해내야 할 것이다. 이를 위한 전략들을 살펴보도록 한다. 읽기 ..

Stream의 연산

스트림의 연산 스트림은 중간 연산과 최종 연산을 제공한다. 중간연산 연산결과가 Stream 여러 번 적용 가능 최종연산 연산결과가 Stream이 아니다. 단 한번만 적용 가능(Stream요소를 소모함) 중간 연산 스트림 자르기 - skip(), limit() Stream skip(long n) // 앞에서부터 n개 건너뛰기 -> n+1 ~ 끝까지 Stream limit(long maxSize) // maxSize이후는 잘라냄 -> 0 ~ maxSize까지예를 들어 IntStream intStream = IntStream.rangeClosed(1, 10); // 1 2 3 4 5 6 7 8 9 10 intStream.skip(3).limit(5).forEach(System.out::print); // 4 ..

이론 정리/java 2023.01.14

Stream 만들기

Stream 만들기 collection을 Stream으로 만들기 Collection 인터페이스의 stream()으로 컬렉션을 스트림으로 변환 Stream stream() // Collection인터페이스의 메서드 List, Set을 변환할때 이를 사용한다. 예를 들어 List list = Arrays.asList(1,2,3,4,5); Stream intStream = list.stream(); // list를 스트림으로 변환 // 스트림의 모든 요소를 출력 intStream.forEach(System.out::print); //12345요런 식으로, List를 stream()메소드를 사용하여 Stream으로 바꿀 수 있다. 그리고 메서드 참조를 사용하여 stream의 내용을 다 출력시키면 된다. 참고로 ..

이론 정리/java 2023.01.13

java 오버로딩(overloading)과 오버라이딩(overriding)

오버로딩, 오버라이딩 오버로딩(Overloading) 메소드 이름이 같지만, 매개변수에 따라 다른 것으로 판단 한번 예를 들어보겠다. 오버로딩 사용 먼저 다음과 같이 메서드를 정의해 준다. class OverloadingMethods { public void ryoochan(Integer iq){ System.out.println("류찬의 아이큐는 " + iq + " 입니다."); } public void ryoochan(String look){ System.out.println("류찬의 외모는 " + look + " 입니다."); } }보다시피 ryoochan은 같은 이름을 가진 메서드인데, 매개변수가 Integer, String으로 각각 다르게 설정되어 있다. public void 오버로딩테스트() ..

이론 정리/java 2023.01.13

Stream(스트림)

Stream(스트림) 다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것 여기서 데이터 소스란, 컬렉션이나 배열처럼 여러가지 데이터들을 저장하고 있는 것을 의미한다. 그동안은 표준화된 방법을 위해 Collection Framework(List, Set, Map)을 사용해 왔는데 이 Collection Framework의 List, Set, Map은 서로의 사용법이 달랐었다. -> 즉, 사실 제대로된 표준화가 아니었다. JDK1.8부터는 stream을 통해 진짜 저 Collection Framework를 제대로 통일시킬 수 있었다. Stream 장점 컬렉션(List, Set, Map)과 배열을 Stream에 태운다. Stream의 사용 방식대로 쓰면 다른 데이터소스인데도 같은 메서드를 사용해서 같은 결..

이론 정리/java 2023.01.12

java에서 병렬성

java에서 병렬성 일단 이 병렬처리는, 엄청나게 많은 데이터를 처리할 때에 하나로 다 하는것보다 나눠서 처리시켜서 작업 처리 시간을 줄이는 것에 목적이 있다. 참고로 이거 데이터 나누고 / 병렬 쓰레드 만들고 / 다시 합치고 등등...에서 시간을 잡아먹어서 안하느니만 못한 경우도 있다. 그래서 요소가 많을때 주로 한다고 한다. 동시성, 병렬성 일단 동시성이랑 병렬성이 뭔지 좀 알고 넘어가자. 동시성 하나의 코어에서 여러 쓰레드가 작업 동시에 진행되는것이라기 보다는 그냥 빠르게 돌아가면서 실행하는것 병렬성 여러 코어에서 작업을 진행 실제로 여러개의 작업이 병렬적으로 실행되는것 이런 느낌이다. 포크조인 프레임워크 자바 병렬 스트림은 요소들을 병렬 처리하기 위해 포크조인 프레임워크(JVM내부에 있는 프레임워..

이론 정리/java 2023.01.12

MySQL8 대소문자 구분하기

MySQL8 대소문자 구분하기 MySQL은 기본적으로 대소문자를 구분한다. 그러면 이거를 대소문자를 구별하지 않도록 하려하면 어떻게 해야 할까?? 대소문자 구별 여부 확인하기 show variables like 'lower_case_table_names'; 다음 명령어를 입력하면 대소문자 구별여부를 알 수 있다. 0 대소문자 구별 O (default) 1 대소문자 구별 X 모든 네이밍을 소문자로 변환하여 저장 2 대소문자 구별 X 모든 네이밍을 사용한 그대로 저장 하지만 조회할 때에는 소문자로 변환하여 사용 대소문자 구별 여부 변경하기 저 lower_case_table_names를 바꾸면 알아서 바뀔 것이다. 그러면 그냥 set lower_case_table_name=1; 이렇게 하면 구별..

java의 Atomic Type(AtomicInteger, AtomicBoolean)

java의 Atomic Type(AtomicInteger, AtomicBoolean) 멀티 쓰레드 환경에서는 주로 동시성 문제 해결을 위해 다양한 방안이 도입된다. 그중 유명한 것들이 synchronized, volatile, 그리고 Atomic이다. Atomic?? CAS 일단 Atomic Type은 CAS(Compare And Swap)알고리즘을 사용한다. 이게 뭐냐면... 변수의 값을 변경하기 전에 기존에 가지고 있던 값이 예상하던 것과 같은 경우에만 새로운 값으로 할당하는 방법 예를 들자면 public class AtomicExample { int val; public boolean compareAndSwap(int oldVal, int newVal) { if(val == oldVal) { val..

이론 정리/java 2023.01.09

lambda에서의 지역 변수 final, effectively final

lambda에서의 지역 변수 lambda식에서 지역 변수는 final의 특성을 가져야 한다. 즉, 람다식에서 지역변수를 읽어오는 것은 가능하지만, 값을 변경하는 것은 불가능해야 한다는 것이다. final, Effectively Final 한번 일단 작성해보자 @FunctionalInterface public interface SumInterface { public int sum(int x, int y); }이런 FunctionalInterface가 있고 public void test() { int a = 5; int b = 10; SumInterface si = (x, y) -> (x+y); int ans = si.sum(a, b); System.out.println(ans); }이런 식으로 sum을 해..

이론 정리/java 2023.01.09

HTTP methods(멱등성, safe, post requestbody 검색, patch-put차이 등등..)

먼저 글을 시작하기 전에 몇가지 내용을 설명하려 한다. Http methods가 뭔데 브라우저가 서버로 데이터를 전달하는 방법이다. 보통 이는 request header부분에 명시된다. 멱등성 멱등성이란, 여러 번 연산을 수행해도 동일한 결과를 보장하는 성질을 뜻한다. 이게 수학적으로 보면 f(f(x)) = f(x) 인 경우 멱등법칙을 만족한다는 것이다. Safe Safe Methods인지 아닌지를 판단하는 것으로, 서버의 상태를 변경시키지 않는 HTTP 메서드들을 뜻한다. 말하자면 해당 메서드가 실행되었을 때에 상태가 변경되는지를 의미한다. REST Api 알다시피 REST api에서 우리는 get, post, put, patch, delete, HEAD, OPTIONS 와 같은 여러 메소드를 사용한다..

이론 정리 2023.01.08