전체 글
[Redis] Spring Boot + Docker-Compose + Redis + Session을 이용한 로그인
[Redis] Spring Boot + Docker-Compose + Redis + Session을 이용한 로그인
2023.02.01들어가기 전 글의 순서는 Docker-Compose로 Redis 세팅하고 Spring에서 세팅된 Redis에 대한 설정을 한 뒤 Session을 이용해서 로그인하는 순서대로 설명하겠습니다. Docker-Compose로 Redis 세팅 docker-compse.yml 파일을 만들어서 아래와 같이 설정을 해줍니다. version : "3" services : redis: image: redis:latest container_name: redis hostname: test ports: - "6379:6379" image : redis 이미지를 내려받습니다. 여기서 latest는 최신버전을 뜻합니다. 즉 최신버전 redis를 이미지로 내려받습니다. container_name : 다운받은 redis image를 ..
[Redis] Redis 개념 및 특징
[Redis] Redis 개념 및 특징
2023.01.27들어가기 전 Redis는 Cache와 연관이 되어 있어 Cache에 대해 먼저 알아보고 Redis의 개념과 특징에 대해 알아보겠습니다. Cache란? 자주 사용하는 데이터를 메모리에 미리 복사해 놓는 임시 장소입니다. 캐시는 저장공간이 작고 비용이 비쌉니다. 하지만 사용하는 이유는 빠른 성능을 제공하기 때문입니다. 보통 데이터를 사용할 때 디스크에 접근을 해서 저장된 데이터를 사용을 합니다. 지속적으로 데이터를 요청을 하면 DBMS의 부하가 늘어나고 시간도 오래 걸립니다. DBMS의 부하를 줄이고 시간을 줄이기 위해 캐시를 사용합니다. 캐시는 메모리에 데이터를 저장하고 관리하기 때문에 DBMS에 접근하는 거에 비해 성능이 뛰어납니다. 클라이언트가 원하는 데이터를 요청을 했을대 캐시에 원하는 값이 있으면 ..
[JPA] N+1 원인 및 해결방법
[JPA] N+1 원인 및 해결방법
2023.01.18들어가기 전 이번 글에서는 N+1이 무엇이고 발생 원인과 N+1을 방지하기 위한 임시방편, 해결방법에 대해 알아보겠습니다. 그리고 예시로 Person, House 엔티티가 있습니다. Person(N) : House(1) 관계로 이루어져 있습니다. 즉 Person이 해당 예시에서 연관관계 주인입니다. @Entity @Getter @Setter public class House { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String address; } @Entity @Getter @Setter public class Person { @Id @GeneratedValue..
보일러 플레이트
보일러 플레이트
2023.01.13들어가기 전 보일러 플레이트의 정의만 보고 "오? 보일러 플레이트코드 좋은 거 같은데 왜 보일러 플레이트코드를 줄이려고 하지?"라는 생각으로 처음에 이해가 잘 가지가 않았습니다. 그래서 이번 글에서는 보일러 플레이트 정의, 단점, 줄이는 법과 필자가 왜 좋다고 생각했는지에 대해 알아보겠습니다. 보일러 플레이트란? 보일러 플레이트는 최소한의 변경으로 여러 곳에서 재사용되며, 반복적으로 비슷한 형태를 띠는 코드를 말합니다. 예시) public class Person { private String name; private int age; public Person() {} public Person(String name, int age) { this.name = name; this.age = age; } publ..
[Jenkins] Docker를 이용한 Jenkins 초기설정
[Jenkins] Docker를 이용한 Jenkins 초기설정
2022.12.15들어가기 전 Jenkins 초기 설정에 들어가기 앞서 CI/CD에 대해 먼저 알아보겠습니다. 그리고 Docker 설치에 대한 설명은 생략하겠습니다. 필자가 작업하는 환경은 mac os 환경이라 mac os 기준으로 설명해 나가겠습니다. CI/CD란 CI(Continuous Integration) : CI는 지속적인 통합을 뜻합니다. 지속적인 통합은 개발을 진행하면서도 품질을 관리할 수 있도록 하는 것으로 여러 명이 하나의 코드에 대해 수정을 진행해도 지속적으로 통합하면서 관리할 수 있는 것을 말합니다. CI는 빌드 -> 테스트 -> 병합(merge)을 자동화해주는 것입니다. 자동화를 해주면 개발자 입장에서는 편할 수밖에 없습니다. 예를 들어보면 로컬에서 작업을 하고 빌드 -> 테스트 -> 병합(merge..
[Java] ConcurrentModificationException 원인 및 해결 방법
[Java] ConcurrentModificationException 원인 및 해결 방법
2022.11.22들어가기 전 필자가 이 내용을 다루게 된 이유는 업무를 보다가 ArrayList로 담긴 데이터를 순회하면서 삭제하다가 ConcurrentModificationException 예외를 접하게 되었습니다. 자바를 여태 하면서 IndexOutOfBoundsException는 많이 봤어도 ConcurrentModificationException라는 예외는 처음 봐서 이거에 대해 알아보고 싶었고 그리고 이 문제를 겪는 사람들이 많을 거라고 생각되어 다루게 되었습니다. 이제 문제의 원인이랑 해결방법에 대해서 알아보겠습니다. 원인 원인에 대해 먼저 알아보기 전 원인이 된 코드를 먼저 보겠습니다. public class Test { public static void main(String[] args) { List fi..
[Spring Boot] @ModelAttribute + 객체값 Null일때 해결방법
[Spring Boot] @ModelAttribute + 객체값 Null일때 해결방법
2022.10.25들어가기 전 해결방법은 lombok 라이브러리를 사용하여 해결하는 과정을 써 내려갈 것입니다. @ModelAttribute @ModelAttribute가 무엇인지는 간략하게 설명하겠습니다. @ModelAttribute는 @RequestParam처럼 파라미터로 값을 바인딩하는 것인데 @RequestParam은 하나의 대한 파라미터이고 @ModelAttribute는 여러 개의 값을 객체에 정의하고 파라미터의 값을 여러 개를 받을 때 사용합니다. 그리고 사용을 할 때 @RequestParam과 @ModelAttribute는 생략이 가능합니다. 만약 아래와 같이 코드를 작성하여 @ModelAttribute를 사용하면 어떻게 될까요? Controller 코드 @RestController public class T..
[Spring Batch] Job, JobInstance, JobParameter, JobExecution 에 대하여
[Spring Batch] Job, JobInstance, JobParameter, JobExecution 에 대하여
2022.10.09Job이란 배치 계층 구조의 가장 상위에 있는 개념으로 하나의 배치 작업 자체를 의미합니다. Job Configuration을 통해 생성되는 객체 단위로서 배치 작업을 어떻게 구성하고 실행할 것인지 전체적으로 설정하고 명세해놓은 객체입니다. 배치 Job을 구성하기 위한 최상위 인터페이스이며 스프링 배치가 기본 구현체인 SimpleJob과 FlowJob 등 구현체를 제공해줍니다. 여러 Step를 포함하고 있는 컨테이너로 반드시 하나 이상의 Step으로 구성해야 합니다. 스프링 배치가 기본적으로 제공해주는 구현체 SimpleJob Job내에 구성되어있는 Step을 순차적으로 실행시킵니다. FlowJob SimpleJob과 달리 특정 조건과 흐름에 따라 Step을 실행시킵니다. Flow 객체를 실행시켜서 작업..
[Spring Batch] @EnableBatchProcessing을 이용하여 스프링 배치 사용하기
[Spring Batch] @EnableBatchProcessing을 이용하여 스프링 배치 사용하기
2022.10.051. 스프링 배치를 사용하기 위한 의존성 추가 스프링 배치를 사용하기 위해서는 build.gradle 또는 pom.xml에 스프링 배치에 대한 의존성을 추가해줘야 합니다. build.gradle implementation 'org.springframework.boot:spring-boot-starter-batch' pom.xml org.springframework.boot spring-boot-starter-batch 2. @EnableBatchProcessing @EnableBatchProcessing를 선언을 하면 스프링 배치를 작동시켜줍니다. 스프링 배치의 모든 초기화 및 실행을 이루고 총 4개의 설정 클래스를 실행합니다. 스프링 부트 배치의 자동 설정 클래스가 실행됨으로 빈으로 등록된 Job을 조..
[AWS] EC2 Ubuntu환경에서 Spring Boot 배포
[AWS] EC2 Ubuntu환경에서 Spring Boot 배포
2022.07.16들어가기 전 EC2 Ubuntu환경에서 Spring Boot를 배포를 하려면 EC2 인스턴스를 생성해야 됩니다. EC2 인스턴스 생성에 대해 궁금하신 분은 아래에서 확인해주시기 바랍니다. [AWS] AWS EC2 인스턴스 생성 [AWS] AWS EC2 인스턴스 생성 들어가기 전 AWS EC2 인스턴스를 생성하는 과정에 대해 알아보겠습니다. ◎ 순서 1. 인스턴스 생성 2. 탄력적 IP 주소 할당 3. 보안 그룹 생성 EC2 인스턴스 생성 인스턴스를 클릭을 해줍니다. 인스 hoestory.tistory.com EC2 Ubuntu환경에서 Spring Boot 배포 1. EC2 인스턴스를 생성하는 과정에서 키 페어를 만들어 로컬에 키 페어가 다운로드되었을 겁니다. 터미널을 켜서 다운로드된 경로로 가서 키 페어..
[AWS] AWS EC2 인스턴스 생성
[AWS] AWS EC2 인스턴스 생성
2022.07.16들어가기 전 AWS EC2 인스턴스를 생성하는 과정에 대해 알아보겠습니다. ◎ 순서 1. 인스턴스 생성 2. 탄력적 IP 주소 할당 3. 보안 그룹 생성 EC2 인스턴스 생성 인스턴스를 클릭을 해줍니다. 인스턴스 클릭하면 아래와 같이 인스턴스 시작이 보입니다. 인스턴스 시작을 클릭해줍니다. 인스턴스 시작을 클릭하면 아래 사진과 같은 화면이 나옵니다. 이름에는 자신의 서버 이름을 적어주면 됩니다. 그리고 애플리케이션 및 OS 이미지는 필자 같은 경우는 Ubuntu를 선택했습니다 필자의 경우 위에서 말했듯이 Ubuntu를 선택하여 아래와 같은 사진처럼 나옵니다. 인스턴스 유형은 아래와 같습니다. 프리티어 사용 가능이라는 것은 무료로 사용이 가능하다는 뜻입니다. 무료는 평생 무료가 아니고 1년 무료인 것을 인..
[Querydsl] 스프링 부트에서 Querydsl 설정
[Querydsl] 스프링 부트에서 Querydsl 설정
2022.06.14들어가기 전 스프링 부트 2.6 이상 버전에서는 2.6 이하 버전에서 설정한 부분에 조금 추가를 하셔야 정상적으로 동작합니다. 필자는 스프링 부트 버전 2.7 Gradle 버전 7.4.1을 기준으로 설정을 하였습니다. 스프링 부트 2.6 이하 버전 먼저 스프링 부트 2.6이하 버전에서 querydsl 설정을 알아보겠습니다. build.gradle plugins { // querydsl 추가 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" } dependencies { implementation 'com.querydsl:querydsl-jpa' } //querydsl 추가 def querydslDir = "$buildDir/generated/queryds..