분류 전체보기
[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는 파일, 데이터 및 다양한 유형의 미디어 등 정적인 파일을 저장하고 관리하는 데 사용되는 웹 기반 스토리지 시스템입니다. 저장하는 데이터 양에 대한 비용도 저렴하고, 많은 양에 데이터를 저장할 수 있습니다. 그리고 하나의 버킷에 여러 객체를 저장할 수 있습니다. 버킷과 객체 버킷은 하나의 공간, 객체는 공간에 있는 사물이라고 이해하시면 됩니다. 버킷 안에는 여러 형태의 객체를 저장할 수 있고 수정, 삭제할 수 있습니다. 버킷의 이름..
[Java] Static Block 실행 시점
[Java] Static Block 실행 시점
2024.03.15들어가기 전 이번 포스팅에서는 자바에 있는 Static Block이 어떤 시점에 실행이 되는지에 대해 알아보겠습니다. Static Block은 아래와 같이 코드를 작성해 주시면 됩니다. public class StaticBlock { static { 구현부 } } Static Block를 알아보기 전에 Static이 무엇인지에 대해 알아보겠습니다. Static 자바에서는 Static 키워드를 사용하여 정적 변수, 정적 메서드를 만들 수 있습니다. 이 둘을 묶어서 정적 멤버라고 불립니다. Static은 JVM 런타임 데이터 영역 중 메서드 영역 또는 Static 영역에 할당이 됩니다. Static영역에 할당된 값들은 모든 객체가 공유하여 어디서든지 참조할 수 있습니다. 그리고 프로그램이 시작될 때 메모리에..
[Spring Boot] Spring Security + Kotlin + JWT를 이용한 로그인
[Spring Boot] Spring Security + Kotlin + JWT를 이용한 로그인
2024.03.12들어가기 전 이번 포스팅에서는 스프링 시큐리티 + JWT + 코틀린을 사용하여 일반 로그인 구현하는 방법에 대해서 알아보겠습니다. 만약 스프링 시큐리티 + Oauth2.0 + JWT + 자바를 이용한 소셜 로그인 구현하는 방법에 대해서 궁금하신 분은 아래 포스팅을 참고하시는 것을 추천드립니다. https://hoestory.tistory.com/32 [OAuth] Spring Boot + React + OAuth2.0 이용한 네이버, 카카오 로그인 들어가기 전 토이 프로젝트를 진행하면서 OAuth를 이용한 소셜 로그인을 구현해보았습니다. 프론트는 React를 이용하였고 백엔드는 Spring Boot를 이용하였습니다. 네이버, 카카오 로그인에 대한 코 hoestory.tistory.com 설정 build...
[JPA] 2차 캐시란?
[JPA] 2차 캐시란?
2024.01.16들어가기 전 이번 포스팅에서는 JPA의 1차 캐시가 아닌 2차 캐시에 대해 알아보겠습니다. 필자는 지금까지 JPA의 2차 캐시에 대한 존재를 모르고 개발을 하고 있었습니다. 최근에 2차 캐시라는 단어를 우연히 듣게 되어 이렇게 블로그를 쓰게 되었습니다. 일단 2차 캐시에 대해 알아보기 전에 1차 캐시에 대해 알아볼 것이고 캐시라는 단어가 생소한 분들께서는 아래 포스팅을 읽고 이번 포스팅을 보면 좋을 거 같습니다. https://hoestory.tistory.com/46 [Redis] Redis 개념 및 특징 들어가기 전 Redis는 Cache와 연관이 되어 있어 Cache에 대해 먼저 알아보고 Redis의 개념과 특징에 대해 알아보겠습니다. Cache란? 자주 사용하는 데이터를 메모리에 미리 복사해 놓는..
[Spring Boot] @Transactional readOnly 속성에 따른 비즈니스 로직 분리
[Spring Boot] @Transactional readOnly 속성에 따른 비즈니스 로직 분리
2023.12.21필자는 처음에 @Transactional(readOnly = false)와 @Transactional(readOnly = true)를 기능에 맞게 메서드에 하나씩 붙여주면서 사용하거나 @Transactional(readOnly = false)만 클래스 단위에 붙여서 사용했습니다. 이와 같이 사용하다 보니 데이터 조회 기능과 삽입, 삭제, 수정 기능들이 비즈니스 로직에 복합적으로 구현되어 있어 가독성이 떨어지고 비효율적이라고 느꼈습니다. 비효율적으로 느낀 이유는 아래와 같습니다. 조회 기능에 대해서 오류 또는 기능 추가를 하게 될 때 조회 기능에 대한 로직만 읽으면 되는데 삽입, 삭제, 수정에 대한 로직들도 한 번씩 읽어 시간적 비용이 발생한다고 생각했습니다. 조회 기능과 삽입, 삭제, 수정 기능이 한 곳..
[Spring Boot] 스프링 Event에 대하여
[Spring Boot] 스프링 Event에 대하여
2023.12.01들어가기 전 프로젝트를 진행하다 보면 불필요한 객체를 의존하고 있는 코드들이 무수히 많습니다. 필자 또한 업무를 보다가 불필요한 의존성을 가지고 있는 것을 끊어주고 싶어서 EventListener에 대해 알아보고 적용을 해보았습니다. EventListener를 사용하는 이유는 강한 의존성을 끊기 위해 사용합니다. EventListener 사용하는 경우에 대해서 예를 들면 사용자가 회원가입을 하였을 때 회원에게 회원가입 축하 메시지를 보낼 때 사용합니다. 이유에 대해서는 EventListener와 TransactionalEventListener에 대해 알아보고 예제로 알아보겠습니다. Event 스프링에서 Event는 빈과 빈 사이에 데이터를 전달해 주는 방법 중 하나입니다. Event에는 이벤트를 발행하는..
[AWS] RDS(MySQL)와 EC2(Spring Boot) 연동하는 방법
[AWS] RDS(MySQL)와 EC2(Spring Boot) 연동하는 방법
2023.10.17들어가기 전 이번 포스팅에서 RDS로 구축한 MySQL과 EC2에 배포된 스프링 애플리케이션을 연동해 보겠습니다. 만약 RDS로 MySQL이 구축 안된 상태면 아래 포스팅을 참고하시길 바랍니다. https://hoestory.tistory.com/65 [AWS] RDS 데이터베이스 생성 및 MySQL Workbench 연동 들어가기 전 이번 포스팅에서는 AWS RDS 데이터베이스를 생성 후 MySQL Workbench와 연동하는 방법에 대해 알아보겠습니다. RDS 생성 1. 데이터베이스 생성을 클릭합니다. 2. 필자는 MySQL을 사용할 예정 hoestory.tistory.com 그리고 AWS EC2에 스프링이 배포가 안된 상태라면 아래 포스팅을 참고하고 이번 포스팅을 보시는 게 좋을 거 같습니다. h..