전체 글 405

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

메서드 참조

메서드 참조(Method reference) 하나의 메서드만 호출하는 람다식은 메서드 참조로 더 간단히 할 수 있다. 종류 람다 메서드 참조 static메서드 참조 (x) -> ClassName.method(x) ClassName::method 인스턴스메서드 참조 (obj, x) -> obj.method(x) ClassName::method 특정 객체 인스턴스메서드 참조 (x) -> obj.method(x) obj::method 사용법은 그냥 클래스이름::메서드이름 으로 적어주는거임. 저중에서 특정 객체 인스턴스메서드 참조는 잘 안쓰이고, 위의 두개가 쓰인다. Static 메서드 참조 Integer method(String s) { // 그저 Integer.parseInt(String s) 만을 호출 r..

이론 정리/java 2023.01.08

람다식이란??

람다식이란?? 메소드를 하나의 식으로 표현한 것. 익명 함수(annonymous function)이라고도 한다. 이를 사용하면 기존의 함수를 간단하고 명확한 식으로 표현할 수 있게 된다. 함수형 언어 JDK1.8부터 함수형 언어의 기능을 java가 지원하기 시작했다. 그래서 java는 oop언어임과 동시에 함수형 언어의 기능을 포함하고 있다. 람다식이란?? 1. 함수(메서드)를 간단한 식으로 표현하는 방법이다. 예를 들어 // 메서드 int max(int a, int b) { return a > b ? a : b; }요런 애를 // 람다식 (a, b) -> a > b ? a : b이런 식으로 간단하게 표현하는 것이다. 2. 람다식은 익명 함수(anonymous function)이다. 위의 예시에서 볼 수..

이론 정리/java 2023.01.07

함수형 인터페이스

함수형 인터페이스 단 하나의 추상 메서드만 선언된 인터페이스 에를 들면 interface MyFunction { public abstract int max(int a, int b); }이런 식으로 하나의 추상 메서드만 선언된 것을 말한다. 참고로 이거에다가 @FunctionalInterface 라는 어노테이션을 붙이면 컴파일러가 이친구가 제대로 작성된 추상 메서드인지 확인해준다. -> 엥간하면 이거 붙이자. 그래서 이 함수형 인터페이스 로직을 구현해 주면 MyFunction f = new MyFunction() { public int max(int a, int b) { return a > b ? a : b; } };이렇게 될 것이다. 이를 활용해서 람다식의 참조변수로 쓸 수 있는데 int value = ..

이론 정리/java 2023.01.07

logging - java에서 System.out.println()을 왜 사용하면 안될까??

logging - java에서 System.out.println()을 왜 사용하면 안될까?? 보통 현업에서 일할때에 절대 System.out.println()을 쓰지 말라는 말을 듣는다. -> 가급적 쓰지말자~ 가 아니라 절대다!! 대신 로깅을 진행할 때에는 주로 얼마전에 문제가 있었던 Log4j를 사용하고는 한다. 왜일까?? Sync문제 발생 한번 System.out.println()의 구현 코드를 살펴보도록 하자. 다양한 내부 코드들이 있는데, 이거는 보면 동작 과정에서 synchronized를 사용해서 동기화를 걸어준다.(writedln도 물론 synchronized가 걸려있는것을 확인 가능하다.) 즉, 해당 코드가 작동할 때에 다른 쓰레드는 작동이 불가능하다는 것이다!! 따라서 이 System.o..

이론 정리/java 2023.01.06

shared lock, exclusive lock

Shared lock과 Exclusive lock에 관하여 해당 lock들은 DB자체에서 걸어주는 lock으로, InnoDB의 Row-level lock이다. 이거랑 이거랑 이거를 읽고오면 좀더 이해가 쉬울 것이다. 간단히 예를 들어 설명하겠다. 예를 들어 DB에 다음과 같은 데이터가 있다고 가정해 보자 그런데 만약 A는 류찬의 외모를 읽음 B는 류찬의 외모를 잘생김에서 멋짐으로 변경 C는 류찬의 외모를 읽음 한다고 생각해보자. A Transaction에서 류찬의 외모를 가져오는 중(잘생김) B Transaction에서 류찬의 외모를 멋짐으로 변경(멋짐으로 변경) C Transaction에서 류찬의 외모를 가져옴 (멋짐) A Transaction에서 류찬의 외모를 가져옴 (잘생김) 이렇게 되는 이유는, ..