전체 글
[Java] 동시성 이슈 개념과 발생하는 동작 과정
[Java] 동시성 이슈 개념과 발생하는 동작 과정
2024.07.26들어가기 전이번 포스팅에서는 동시성 이슈에 대해 알아보겠습니다. 동시성 이슈를 알아보기 전에 싱글 스레드와 멀티 스레드 환경에 대해서 알아보겠습니다. 싱글스레드와 멀티스레드 싱글 스레드(Single Thread) 싱글 스레드는 애플리케이션이 스레드 하나로만 실행되는 것을 의미합니다.아래와 같이 자바 애플리케이션을 실행하면 싱글 스레드로 동작을 합니다. public class SingleThread { public static void main(String[] args) { System.out.println("싱글 스레드 실행");} 싱글 스레드는 작업을 순차적으로 실행시킵니다.멀티 스레드(Multi Thread)멀티 스레드는 싱글 스레드와 달리 애플리케이션이 여러 개의 스레드로 실행되는..
[Java] 스레드의 상태와 생명주기
[Java] 스레드의 상태와 생명주기
2024.07.23들어가기 전이번 포스팅에서는 스레드의 상태와 생명주기에 대해서 알아보겠습니다.해당 내용을 알아보면서 "사용자 수준 스레드"와 "커널 수준 스레드"라는 단어가 나오는데 해당 단어들이 무엇을 의미하는지 아래 포스팅을 통해 알게 되고 난 뒤에 이번 내용을 읽으시는 것을 추천드립니다. https://hoestory.tistory.com/81 [Java] 멀티 스레드 모델에 대해서들어가기 전 이번 포스팅에서는 멀티스레드 모델에 대해 알아보겠습니다. 스레드 모델에는 일대일, 일대다, 다대다가 있습니다. 프로세스와 스레드의 차이점에 대해 궁금하신 분은 아래 포스hoestory.tistory.com 먼저 스레드의 상태에 무엇이 있는지 알아보고 스레드의 생명주기에 대해서 알아보겠습니다. 스레드의 상태에서는 간략하게 무..
[Java] 멀티 스레드 모델에 대해서
[Java] 멀티 스레드 모델에 대해서
2024.07.14들어가기 전 이번 포스팅에서는 멀티스레드 모델에 대해 알아보겠습니다. 스레드 모델에는 일대일, 일대다, 다대다가 있습니다. 프로세스와 스레드의 차이점에 대해 궁금하신 분은 아래 포스팅을 보시는 것을 추천드립니다. https://hoestory.tistory.com/73 [운영체제] 프로세스 & 스레드에 대하여프로세스 운영체제에 의해 파일 시스템에 설치되어 있는 파일을 프로그램이라고 부릅니다. 프로세스는 프로그램의 실제 실행의 의미하며 프로그램 파일을 실행함으로써 프로그램 데이터들이hoestory.tistory.com 멀티스레드 모델에 대해서 설명하기 전에 사용자 수준 스레드와 커널 수준 스레드에 대해 먼저 알아보겠습니다. 사용자 수준 스레드 사용자 수준 스레드는 JVM에서 생성하고 관리하는 스레드입니다...
[MySQL] 인덱스 적용안되고 풀스캔이 적용되는 패턴
[MySQL] 인덱스 적용안되고 풀스캔이 적용되는 패턴
2024.06.30들어가기 전이번 포스팅에서는 인덱스를 설정을 하고 인덱스 스캔방식을 원했지만 풀스캔이 쿼리 패턴에 대해서 알아보겠습니다.Mysql에서 지원해 주는 Explain이라는 키워드를 사용하여 스캔방식을 파악할 것입니다. 테이블 구조 및 데이터 삽입 테이블 생성 create table member( id bigInt primary key auto_increment, name varchar(255) not null, age int not null, login_count bigint default 0, created_at datetime not null default now()); 인덱스 생성 CREATE INDEX idx_login_count ON member(login_count); 더미..
[Spring] Checked Exception, Unchecked Exception의 트랜잭션 처리 방식
[Spring] Checked Exception, Unchecked Exception의 트랜잭션 처리 방식
2024.06.26들어가기 전이번 포스팅에서는 체크드 익셉션(Checked Exception), 언체크드 익셉션(Unchecked Exception)에서의 트랜잭션을 어떻게 처리하는지에 대해 알아보겠습니다. 그리고 @Transactional의 속성인 noRollbackFor, rollbackFor 속성에 대해서도 알아보겠습니다. 체크드 익셉션(Checked Exception)RuntimeException을 제외한 Exception과 하위 예외를 모두 컴파일러가 체크하고 애플리케이션 로직에서 사용할 수 있는 최상위 예외입니다.try-catch 또는 throws를 이용하여 예외를 처리해야 합니다.그리고 체크드 익셉션 같은 경우는 언체크드 익셉션과 달리 예외가 발생하면 롤백이 되지 않고 커밋이 된다는 특성이 있습니다.커밋이 ..
[JPA] Fetch Join의 양면성
[JPA] Fetch Join의 양면성
2024.05.28들어가기 전저는 Fetch Join이 장점만 존재한다고 생각을 하였었습니다. 그런데 모든 기술에는 장점만 존재하지 않다는 것을 다시 한번 깨닫게 되었습니다.그래서 이번 포스팅에서는 N+1 문제를 해결하기 위해 사용하는 Fetch Join의 양면성에 대해서 다뤄보겠습니다. N+1이 무엇인지 정확하게 모르시는 분은 아래 포스팅을 읽고 이번 포스팅을 읽으시는 것을 추천드리겠습니다. https://hoestory.tistory.com/45 [JPA] N+1 원인 및 해결방법들어가기 전 이번 글에서는 N+1이 무엇이고 발생 원인과 N+1을 방지하기 위한 임시방편, 해결방법에 대해 알아보겠습니다. 그리고 예시로 Person, House 엔티티가 있습니다. Person(N) : House(1) 관계로 이hoestor..
[Spring] @DataJpaTest에서 Auditing 적용 안되는 현상
[Spring] @DataJpaTest에서 Auditing 적용 안되는 현상
2024.05.21들어가기 전이번 포스팅에서는 데이터 접근 계층 테스트 코드를 작성할 때 Auditing이 적용 안 되는 현상에 대해 알아보고 해결하는 방법에 대해 알아보겠습니다. 필자가 작성한 코드를 먼저 보고 오류 메시지를 확인해 보겠습니다. @EnableJpaAuditing@Configurationpublic class AuditingConfig {}@Getter@MappedSuperclass@EntityListeners(AuditingEntityListener.class)public abstract class BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @CreatedDate @..
[운영체제] 동시성, 병렬성
[운영체제] 동시성, 병렬성
2024.04.12동시성과 병렬성 동시성 : 특정한 순서 없이 겹치는 기간에 시작, 실행 및 완료되는 여러 작업에 관한 것을 의미합니다. 병렬성 : 멀티코어 프로세서에서 동시에 실행되는 동일한 작업의 여러 작업에 관한 것을 의미합니다. 동시성 CPU가 한 번에 많은 일을 처리하는 것에 중점을 두고 있습니다. 즉 많은 작업들을 아주 빠른 시간으로 교체하면서 전체 작업을 처리합니다. 작업의 처리를 빠르게 하기 위한 목적이 아닌 CPU를 효율적으로 사용하는 것에 중점을 둡니다. 스레드가 작업을 처리하다가 I/O 블록에 걸렸을 경우 CPU는 다른 스레드로 전환해서 작업을 진행합니다. I/O에 대한 작업은 CPU 담당이 아니기 때문에 I/O 블록으로 인해 대기하는 것보다는 다른 스레드로 전환해서 작업을 진행하는 것이 효율적입니다...
[Spring] 나태지옥에 빠지지 않기 위한 스케줄러
[Spring] 나태지옥에 빠지지 않기 위한 스케줄러
2024.04.07저는 주로 새롭게 학습한 내용이나 문제가 발생했을 때 해결했던 내용을 기반으로 블로그를 작성을 합니다. 이렇게 하면 나중에 복습하거나 문제가 발생했을 때 원인을 빠르게 파악할 수 있어서 최대한 많이 작성을 해놓으려고 노력하고 있습니다. 그런데 최근에 퇴사를 하고 하고 싶었던 공부를 하려고 하는데 사람의 마음이란.. 일을 안 하니깐 시간이 많다는 이유로 여유를 부리면서 집에서 누워있거나 핸드폰을 많이 하게 되더군요.. 회사를 다니면서도 "블로그를 열심히 작성을 해야지!"라는 마음을 가지고 있었지만.. 많이 피곤해서 작성을 못했었는데 지금은 시간이 아주 많고 잠도 많이 잘 수 있습니다. 그래서 이대로는 안 되겠다 싶어서 제가 사용할 수 있는 방법으로 나태해지는 제 자신을 방지하기 위해 방법을 생각했습니다. ..
[Docker] 도커에 대하여
[Docker] 도커에 대하여
2024.04.05들어가기 전 이번 포스팅에서는 도커의 이미지, 컨테이너, 컨테이너의 생명주기에 대해서 알아보겠습니다. 도커에 대해 알아보기 전에 도커에서 사용되는 컨테이너 가상화와 비교되는 하이퍼바이저 가상화 대해서 알아보겠습니다. 하이퍼바이저 가상화 VS 컨테이너 가상화 하이바이저 가상화 하이퍼바이저는 호스트 운영체제에 설치된 소프트웨어입니다. 하이퍼바이저는 호스트 운영체제에서 여러 개의 가상 머신 서버를 생성할 수 있습니다. 가상 머신은 각각 독립된 환경에서 실행되기 때문에 하나의 가상 머신에 문제가 생겨서 강제종료되더라도 다른 가상머신에는 영향을 주지 않습니다. 그리고 각각의 가상머신에는 운영체제가 있는데 이것을 게스트 운영체제라고 부릅니다. 컨테이너 가상화 컨테이너 가상화는 하이퍼바이저와 유사하게 호스트 운영체제..
[운영체제] 프로세스 & 스레드에 대하여
[운영체제] 프로세스 & 스레드에 대하여
2024.03.26프로세스 운영체제에 의해 파일 시스템에 설치되어 있는 파일을 프로그램이라고 부릅니다. 프로세스는 프로그램의 실제 실행의 의미하며 프로그램 파일을 실행함으로써 프로그램 데이터들이 메모리에 올라와 CPU를 할당받고 명령을 수행하고 있는 상태 프로세스는 운영체제로부터 자원을 할당받은 최소 작업 단위 운영체제는 프로세마다 각각 독립된 메모리 영역을 Code/Data/Heap/Stack의 형식으로 할당합니다. 독립된 메모리 영역을 할당해 주기 때문에 프로세스 간 영향을 받지 않고 독립적인 작업을 수행할 수 있습니다. 기본적으로 다른 프로세스의 변수나 자료에 접근할 수 없고 IPC나 공유메모리 등의 통신기법들을 사용해서 프로세스 간 통신해야 합니다. 스레드 스레드는 프로세스가 운영체제로부터 할당받은 자원을 이용하는..
[Spring Boot] Spring Boot + Kotlin + AWS S3를 이용한 이미지 다루는 방법
[Spring Boot] Spring Boot + Kotlin + AWS S3를 이용한 이미지 다루는 방법
2024.03.18들어가기 전 이번 포스팅에서는 Spring Boot와 Kotlin, AWS S3를 이용하여 이미지를 업로드, 조회, 삭제하는 방법에 대해 알아보겠습니다. AWS S3란? S3(Simple Storage Service)는 AWS에서 제공하는 클라우드 스토리지 서비스입니다. S3는 파일, 데이터 및 다양한 유형의 미디어 등 정적인 파일을 저장하고 관리하는 데 사용되는 웹 기반 스토리지 시스템입니다. 저장하는 데이터 양에 대한 비용도 저렴하고, 많은 양에 데이터를 저장할 수 있습니다. 그리고 하나의 버킷에 여러 객체를 저장할 수 있습니다. 버킷과 객체 버킷은 하나의 공간, 객체는 공간에 있는 사물이라고 이해하시면 됩니다. 버킷 안에는 여러 형태의 객체를 저장할 수 있고 수정, 삭제할 수 있습니다. 버킷의 이름..