분류 전체보기
[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" 위에 예외를 해결하려고 ..
[MySQL] Explain 사용법 및 분석
[MySQL] Explain 사용법 및 분석
2023.06.16들어가기 전 해당 포스팅에서는 Explain이 무엇이며 사용하는 방법, 사용했을 때 나오는 결과를 분석하여 설명드리겠습니다. 필자는 MySQL 버전 8.0 기준으로 설명하겠습니다. Explain이란? DB 서버가 어떠한 쿼리를 실행할 것인지 실행계획을 알고 싶을 때 사용하는 명령어입니다. Explain을 사용하면 실행시킬 쿼리의 실행계획을 알 수 있어 성능 분석을 하여 쿼리 튜닝을 할 수 있습니다. 사용방법 EXPLAIN [ANALYZE] SELECT (컬럼..) FROM 테이블 실행계획을 세울 쿼리 앞에 EXPLAIN 키워드를 사용합니다. ANALYZE 옵션은 쿼리 처리에 사용되는 각 반복자에 대해 TREE 형식의 SELECT 문 실행에 대한 확장 정보를 제공하고 예상 비용을 쿼리의 실제 비용과 비교 ..
[JPA] JdbcTemplate과 JPA 데이터 Insert 속도 비교
[JPA] JdbcTemplate과 JPA 데이터 Insert 속도 비교
2023.06.09들어가기 전 업무를 보다가 대용량 데이터를 저장해야 되는 상황에 맞닥뜨렸습니다. 그래서 평소처럼 JPA를 이용하여 데이터를 넣으려고 했는데 저장속도가 너무 느려 JdbcTemplate을 이용하여 bulkInsert를 하였습니다. 해당 포스팅에서는 JdbcTemplate과 JPA를 이용하여 예시로 50만 건의 데이터가 저장되는 속도를 비교하고 JdbcTemplate보다 Jpa가 데이터 저장속도가 느린 이유에 대해 알아보겠습니다. JPA를 이용하여 데이터 저장 JPA에서는 save, saveAll을 이용하여 데이터를 저장할 수 있습니다. 그래서 save와 saveAll 저장속도를 먼저 비교해 보겠습니다. 1. Save 1) 코드 @SpringBootTest public class BlogContents { ..
[Kotlin] 문자열 대체 메서드(removePrefix, removeSuffix, removeRange, removeSurrounding)
[Kotlin] 문자열 대체 메서드(removePrefix, removeSuffix, removeRange, removeSurrounding)
2023.05.04들어가기 전 Kotlin에서 지원하는 문자열 대체 메서드에 대해 알아보겠습니다. 자바는 replace, replaceAll 등을 지원하는데 Kotlin 같은 경우에는 removePrefix, removeSuffix, removeRange, removeSurrounding을 지원합니다. removePrefix removePrefix의 내부는 아래사진과 같이 되어있습니다. 매개변수로 들어온 prefix값을 해당문자열의 시작단어인지를 비교하고 매개변수의 값이 시작단어일 경우 prefix의 크기만큼 문자열을 잘라 return을 해줍니다. 테스트 코드 class StringRemoveMethodTest : FreeSpec({ "removePrefix" - { "조건이 일치하면 kotlin^^을 반환한다." - {..
[Kotlin] 기본 문법 (2)
[Kotlin] 기본 문법 (2)
2023.04.20들어가기 전 코틀린 변수 선언방법과 형변환 하는 방법에 대해 잘 모르시는 분들은 아래 링크 글을 먼저 보고 이 글을 보는 것을 추천드립니다. https://hoestory.tistory.com/49 [Kotlin] 기본 문법 (1) 들어가기 전 코틀린 기본 문법을 설명하면서 이해를 쉽게 할 수 있도록 자바 문법과 비교해 가면서 설명할 것입니다. var, val 이란? 코틀린에서는 변수나 상수를 선언을 할 때 var와 val을 사용하여 hoestory.tistory.com 제어문 자바에서는 제어문이 if문과 switch case문이 있습니다. 그런데 코틀린에서 if문과 when문이 있습니다. 공통점은 if문이 있고 차이점은 코틀린은 when문이 있습니다. fun main() { val result = ev..
[JPA] Cascade 옵션 종류 및 예제
[JPA] Cascade 옵션 종류 및 예제
2023.04.12Cascade란? Cascde는 영속성 전이라고 합니다. Cascade 옵션을 정의한 엔티티가 영속화되면 연관된 엔티티도 영속화되고 삭제되면 삭제되는 것 속성입니다. @ManyToOne, @OneToMany 등 연관관계를 설정하는 부분에 옵션으로 정의되어 있습니다. 주의 : 엔티티를 영속화할 때 연관된 엔티티도 같이 영속화한다는 편리함만 제공할 뿐 연관관계를 설정하는 어노테이션과는 관련이 없습니다. Cascade 종류 ALL PERSIST REMOVE MERGE REFRESH DETACH Cascade옵션 중 ALL, PERSIST, REMOVE, MERGE, DETACH에 대해서만 예제를 다루고 REFRESH에 대해서는 개념만 알아보겠습니다. 예제 공통 코드 // Image 엔티티 @Entity cla..