전체 글
[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..
[AWS] RDS 데이터베이스 생성 및 MySQL Workbench 연동
[AWS] RDS 데이터베이스 생성 및 MySQL Workbench 연동
2023.10.17들어가기 전 이번 포스팅에서는 AWS RDS 데이터베이스를 생성 후 MySQL Workbench와 연동하는 방법에 대해 알아보겠습니다. RDS 생성 1. 데이터베이스 생성을 클릭합니다. 2. 필자는 MySQL을 사용할 예정이라 MySQL을 선택했습니다. 3. 원하는 MySQL엔진 선택을 하고 필자는 프리티어를 사용할 예정이라 프리티어를 선택했습니다. 4. DB 식별자, 사용자 이름, 암호를 작성을 합니다. 5. DB인스턴스 클래스에서 버스터블 클래스를 선택하고 db.t3.micro를 선택합니다. 6. 스토리지는 아래와 같이 구성을 하고 스토리지 자동 조정 활성화가 디폴트가 체크되어 있는데 과금이 발생할 수 있어 체크해제하는 것을 추천드립니다. 7. Virtual Prive Cloud와 DB 서브넷 그룹..
[Jenkins] EC2 Ubuntu 환경에서 GitHub 연동 및 CI 적용
[Jenkins] EC2 Ubuntu 환경에서 GitHub 연동 및 CI 적용
2023.10.01들어가기 전 EC2 프리티어를 사용하시는 분들 중 메모리로 인해 젠킨스가 실행 안 되는 문제를 겪고 계신 분들은 아래 포스팅을 읽고 해결한 뒤에 해당 포스팅을 읽으시는 걸 추천드립니다. 동작 방식에 대해서는 필자가 설정한 값 기반으로 설명하겠습니다. https://hoestory.tistory.com/63 [AWS] EC2 프리티어에서 발생하는 메모리 문제 해결방법 들어가기 전 EC2 프리티어에서는 메모리를 1GB만 지원을 해주고 있습니다. 필자 또한 프리티어를 사용해서 메모리 문제를 직면하여 EC2에 띄워놓았던 젠킨스의 실행 속도가 너무 느리거나 멈추는 hoestory.tistory.com 동작 방식 1. 개발자가 Pull Request 또는 Push를 합니다. 2. 깃허브는 개발자가 Pull Requ..
[AWS] EC2 프리티어에서 발생하는 메모리 문제 해결방법
[AWS] EC2 프리티어에서 발생하는 메모리 문제 해결방법
2023.09.25들어가기 전 EC2 프리티어에서는 메모리를 1GB만 지원을 해주고 있습니다. 필자 또한 프리티어를 사용해서 메모리 문제를 직면하여 EC2에 띄워놓았던 젠킨스의 실행 속도가 너무 느리거나 멈추는 현상을 겪었습니다. 해당 포스팅에서는 이 문제에 대해 해결하는 방법에 대해 설명하겠습니다. 문제를 해결하는 방법에 대해 알기 전에 스왑 메모리(Swap Memory)에 대해 먼저 알아보겠습니다. 스왑 메모리 스왑 메모리란 실제 메모리가 가득 찼지만 더 많은 메모리를 사용해야 될 때 디스크 공간을 빌려와 메모리를 사용할 수 있는 가상 메모리를 의미합니다. 리눅스 커널은 실제 메모리에 올라와 있는 메모리 블록들 중 당장 쓰이지 않는 것을 디스크에 저장함으로써 자동으로 사용 가능한 메모리 영역을 늘립니다. 하지만 스왑 ..
[Jenkins] EC2 Ubuntu 환경에서 젠킨스 설치 및 구축
[Jenkins] EC2 Ubuntu 환경에서 젠킨스 설치 및 구축
2023.09.22들어가기 전 AWS EC2 인스턴스 만드는 방법에 대해서는 아래 포스팅을 참고하시면 될 거 같습니다. 이번 포스팅에서는 Ubuntu환경에서 젠킨스를 설치하고 젠킨스 서버를 구축하는 방법에 대해 알아보겠습니다. 그리고 기본적으로 자바가 다운로드되어 있다는 전제하에 설명하겠습니다. https://hoestory.tistory.com/37 [AWS] AWS EC2 인스턴스 생성 들어가기 전 AWS EC2 인스턴스를 생성하는 과정에 대해 알아보겠습니다. ◎ 순서 1. 인스턴스 생성 2. 탄력적 IP 주소 할당 3. 보안 그룹 생성 EC2 인스턴스 생성 인스턴스를 클릭을 해줍니다. 인스턴 hoestory.tistory.com Jenkins 설치 방법 아래 명령어를 입력을 하여 젠킨스가 설치되었는지 안되었는지 확인..
[Spring Boot] 크롤링, 메일 전송 및 PDF 암호화
[Spring Boot] 크롤링, 메일 전송 및 PDF 암호화
2023.08.10들어가기 전 이번 포스팅에서는 Spring Boot + Java를 이용하여 크롤링을 하고 크롤링을 한 내용을 Pdf 파일로 만들어 메일에 담아서 보내는 방법에 대해 알아보겠습니다. 그리고 메일로 보낸 Pdf 파일을 암호화하는 방법에 대해서도 알아보겠습니다. 크롤링, 메일전송, Pdf 파일 생성 및 암호화하는 방법에 대해 알아보기 전에 해당 기능들을 구현하기 위해 사용되는 라이브러리에 대해 먼저 알아보겠습니다. 메일 전송에 사용되는 라이브러리 및 설정 JavaMailSender JavaMailSender는 스프링에서 메일을 손쉽게 보낼 수 있게 제공해 주는 라이브러리입니다. JavaMailSender를 사용하기 위해서는 의존성을 추가해 줘야 되고 application.yml 또는 properties에 설정..
[Redis] 기본 명령어
[Redis] 기본 명령어
2023.07.31들어가기 전 이번 포스팅에서는 레디스의 기본 명령어를 예제와 함께 알아보겠습니다. 이번 포스팅을 읽기 전에 캐시와 레디스에 대한 글을 먼저 읽고 이번 포스팅을 이어서 보면 좋을 거 같습니다. https://hoestory.tistory.com/46 [Redis] Redis 개념 및 특징 들어가기 전 Redis는 Cache와 연관이 되어 있어 Cache에 대해 먼저 알아보고 Redis의 개념과 특징에 대해 알아보겠습니다. Cache란? 자주 사용하는 데이터를 메모리에 미리 복사해 놓는 임시 장소입니다 hoestory.tistory.com Redis의 자료 구조 레디스에서는 여러 가지 자료구조를 지원을 해줍니다. String Hashes Sets Sorted Set Bitmaps Lists String 일반..
[Spring] 스프링 AOP와 프록시 패턴
[Spring] 스프링 AOP와 프록시 패턴
2023.07.03AOP란? AOP는 Aspect-Oriented-Programming의 약자로 관점지향 프로그래밍을 의미합니다. 어떤 로직을 관점으로 핵심적인 관점과 부가적인 관점으로 나누고 관점을 기준으로 모듈화 하는 것을 의미합니다. 로직상에서 다른 부분에 반복적으로 사용하는 부분을 흩어진 관심사라고 합니다. AOP는 흩어진 관심사를 모듈화 하여 핵심적인 비즈니스 로직에서 분리하여 재사용할 수 있게 해 줍니다. AOP의 용어 포인트 컷(Pointcut) : 조인 포인트 중에서 어드바이스가 적용될 경로, 주로 AspectJ 표현식을 사용하여 지정 어드바이스(Advice) : 부가기능 로직(로그 추적 기능, 메서드 실행시간 기록) 어드바이저(Advisor) : 하나의 포인트컷과 하나의 어드바이스로 구성 에스펙트(Aspe..
[Kotlin] java.time.* 사용시 발생하는 예외 해결 방법
[Kotlin] java.time.* 사용시 발생하는 예외 해결 방법
2023.06.19들어가기 전 코프링 토이프로젝트를 진행하면서 LocalDateTime을 자바에서 사용하듯이 사용을 했는데 예외가 발생했습니다. 발생한 예외를 해결하기 위해 검색을 했는데 정보가 존재하지 않아서 해결하는데 시간을 많이 투자했습니다. 그래서 이번 포스팅에서는 예외 내용과 예외 해결하는 방법에 대해 알아보겠습니다. 예외 내용 com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" 위에 예외를 해결하려고 ..