분류 전체보기 120

Thread 를 알아보자 - mulit vs single, PrioirtyQueue, ThreadGroup, 실행제어( 2 / 3 )

예제 소스 링크 언제 싱글쓰레드가 멀티쓰레드보다 효율적일까? 이전 게시글에도 적었지만, 프로세스는 하나또는 그 이상의 쓰레드를 가질수 있으며 하나의 쓰레드는 하나의 코어에 의해 실행 된다. 어떤 작업을 하나의 쓰레드가 처리하는 것을 싱글 쓰레드, 여러개의 쓰레드가 처리하는 것을 멀티 쓰레드라고 한다. 하나의 일을 여러명이 나누어서 하면 빨리 끝나듯 쓰레드도 여러개면 작업이 빠르게 진행 될 것 같지만 그렇지는 않다. 그 이유는 작업 전환 시간(context switcing)에 시간이 걸리기 때문이다. 작업 전환 시간(context swtiching) 프로세스 또는 쓰레드 간의 작업 전환을 의미한다. 작업 전환을 할 때 현재 진행 중인 작업의 상태나 다음에 실행해야할 위치 같은 정보를 저장하고 읽어오는 시간..

Dev/Java 2024.04.01

[프랑스여행] 리옹에서 안시(Annecy)가기/안시호수(Annecy Lake)후기/blarblarCar Bus예매

이전 포스팅은 여기로 2024.02.17 - [여행정보/2023 프랑스] - [프랑스여행] 안탈리아에서 리옹가기/튀르키에SAW공항/리옹시청수영장후기/리옹볼거리 [프랑스여행] 안탈리아에서 리옹가기/튀르키에SAW공항/리옹시청수영장후기/리옹볼거리 이전 포스팅은 여기로 2024.02.14 - [여행정보/2023 터키] - [터키여행] 데니즐리에서 파묵칼레가기/7월파묵칼레후기/안탈리아양고기맛집추천 [터키여행] 데니즐리에서 파묵칼레가기/7월파묵칼레후 zigo-autumn.tistory.com 꾸준히 쓴다고 했는데 개발관련 글을 쓰다 보니 여행기가 뒷전이 되었다. 구글 노출설정 이후 여행 관련글로 유입이 매일매일 갱신 되는걸보면서 더 미룰 수 없어 지하철안에서 써보는 안시여행기...ㅎ 나도 이전에 어디까지 적었는지 ..

Trip/2023 프랑스 2024.03.26

Springboot + ElasticSearch 연동하기 ( feat. RDBMS 에서 Like 를 사용할 때 보다 검색 속도가 얼마나 향상 될까? )

이전 포스팅은 여기로 2024.03.13 - [개발/ELK] - MacOS 에서 ElasticSearch 설치하기 ( homebrew 사용 X ) MacOS 에서 ElasticSearch 설치하기 ( homebrew 사용 X ) Open API 통해서 데이터를 긁어온 뒤 검색 엔진에 ElasticSearch를 연동하는 토이 프로젝트를 해보고 싶어서 사용 방법을 익히기 위해 설치를 진행했다. 새로운 내용을 학습할 때 인프런을 통해 많이 zigo-autumn.tistory.com 개발환경 IDE : intelliJ FrameWork : springboot 3.2.3 Launguage java 17 DB : h2 ElasticSearch : 8.7.1 BuildTool: Gradle Plugin: spring..

Dev/ELK 2024.03.26

Thread 를 알아보자 - 프로세스와 쓰레드, 태스킹과 쓰레딩, start() vs run() ( 1 / 3 )

예제 소스 링크 프로세스와 스레드 프로세스 프로세스는 간단히 말해서 실행 중인 프로그램을 나타낸다. 프로그램을 실행하면, OS로부터 실행에 필요한 자원을 할당받아 프로세스가 된다. 프로세스는 데이터와 메모리등의 자원, 그리고 스레드로 구성되어 있다. 스레드 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 바로 스레드이다. 그래서 모든 프로그램에는 최소한 하나 이상의 쓰레드가 존재하며, 둘 이상의 쓰레드를 가진 프로세스를 '멀티 쓰레드 프로세스'라고 한다. 쉽게 말하면 프로세스는 회사, 스레드는 직원이라고 생각하면 된다. 하나의 프로세스가 가질 수 있는 쓰레드는 제한되어 있지 않지만 스레드가 작업을 수행하는데 개별적인 메모리공간(호출스택)을 필요로 하기 때문에 프로세스의 메모리 한계에 따라 생성할 ..

Dev/Java 2024.03.25

열거형(enums) - 열거형을 통해 사용할 수 있는 방법들

열거형은 열거형이 갖는 값뿐만 아니라 타입까지 관리하기 때문에 보다 논리적인 오류를 줄일 수 있다. 일반적으로 타입이 달라도 값이 같으면 조건식 결과가 true였으나, 자바의 열거형에서는 실제 값이 달라도 타입이 다르면 조건식의 결과가 false 가 된다. // 열거형을 쓰기전 class Card { static final int CLOVER = 0; static final int HEART 1; static final int DIAMOND =2; static final int SPADE = 3; static final int TWO = 0; static final int THREE = 1; static final int FOUR = 2; final int kind; final int num; } // ..

Dev/Java 2024.03.25

지네릭스(Generics) - 지네릭스를 알면 API 문서를 읽기 쉽다!

예제 소스 링크 지네릭스를 왜 사용해야 할까? 지네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입을 체크해 주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여준다. 즉, 지네릭스를 사용하면 타입의 안정성을 제공받을 수 있고, 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해진다. T(Type), E(Element), K(Key), V(Value)가 의미하는 것은 무엇일까? 이들은 기호의 종류만 다를 뿐 '임의의 참조형 타입'을 의미한다. 기존에는 다양한 종류의 타입을 다루는 메서드의 매개변수나 리턴타입으로 Object 타입의 참조변수를 많이 사용했고, 그로 인해 형변환이 불가피했지만 지네릭을 사용하면 Obje..

Dev/Java 2024.03.25

Comparator 와 Comparable 의 차이 - 객체 내부 비교와 외부 비교 관점

예제 소스 링크 Comparator와 Comparable 이란 뭘까? 둘 다 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있다. Comparable Comparable 을 구현하고 있는 클래스들은 같은 타입의 인스턴스끼리 서로 비교할 수 있는 클래스들을 의미하며 주로 Integer와 같은 wrapper 클래스와 String, Date, File과 같은 것들을 말한다. 기본적으로 오름차순으로 구현되어 있다. 아래 소스는 실제로 java.lang 라이브러리에 있는 Integer, String 같은 클래스를 확인해본 것이다. 각각 기준에 맞게 Comparable interface를 구현해서 사용하고 있다. // Integer public final class Integer extends Numbe..

Dev/Java 2024.03.25

Java Stream ( feat. Optional 과 collect )

이전 포스팅은 여기로 2024.03.11 - [개발/java] - 람다식 ( Lamda expression ) / @FunctionalInterface 예제 소스 링크 본 게시글의 예제 코드를 이해하기 위해서는 람다식과 메서드 참조 ( 더블 콜론 )에 대한 이해가 있어야 하므로, 해당 내용에 대해 모른다면 위에 있는 이전 포스팅을 읽어보는 것을 추천한다. 왜 스트림이 등장했을까? for, Iterator 를 이용해서 코드를 짜게 되면, 재사용성과 가독성이 떨어진다는 단점이 있다. Collection 이나 Iterator 만 봐도 같은 기능의 메서드들이 중복되어 있고, List와 배열 정렬 시에도 동일한 sort() 함수를 사용하지만 각각 Collections.sort(), Array.sort()를 사용해..

Dev/Java 2024.03.18

OSIV 를 통한 성능 최적화 ( Connection 관리 관점 )

OSIV 란 뭘까? OSIV는 Open Session In View의 약자로 spring.kpa.open-in-view 옵션을 통해 application.properties 또는 yml 파일에서 On / Off 설정을 할 수 있다. OSIV의 기본값은 true 이다. ( on 상태를 의미한다. ) 기본적으로, 트랜잭션을 시작할 때 JPA의 영속성 콘텍스트는 데이터베이스 커넥션을 가져온다. OSIV는 트랜잭션이 끝나도 사용자에게 Response 가 반환 될 때까지 영속성 콘텍스트와 데이터베이스 커넥션을 끝까지 살려주는 역할을 한다. OSIV - On OSIV 가 On 이면 위 그림과 같이 요청에서 응답까지 이르는 모든 범위에서 영속성 콘텍스트와 데이터베이스 커넥션이 살아 있다. 이렇게 모든 범위에서 영속성..

Dev/JPA 2024.03.15

JPA 에서 Collection 조회시 주의점 및 성능 튜닝 방법

Entity -> Dto 변환 시 Collection 도 잊지 말고 변환해야 한다 Collection을 dto 로 변환하여 리턴할 경우에도 엔티티에 대한 의존도를 끊어야 한다. 예시 코드를 보자. 흐름도 Order 엔티티 정보 @Entity @Table(name = "orders") @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Order { @Id @GeneratedValue @Column(name = "order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) // 지연로딩 @JoinColumn(name = "member_id") private Me..

Dev/JPA 2024.03.15