전체 글
[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..
[Git Action]Spring boot + GitHub Action 적용 시 빌드 실패와 관련된 에러 해결 방법
[Git Action]Spring boot + GitHub Action 적용 시 빌드 실패와 관련된 에러 해결 방법
2022.06.02들어가기 전 들어가기 전에 GitHub Action이 무엇인지에 대해 간략히 알아보겠습니다. GitHub Action을 자세히 대해서는 다루지 않고 개념만 간단히 설명하고 해결방법에 대해서 설명하겠습니다. GitHub Action이란? GitHub Action은 빌드, 테스트, 배포 파이프라인을 자동화할 수 있는 CI/CD 플랫폼입니다. 단순한 DevOps를 넘어 repository에서 다른 이벤트가 발생할 때 workflow를 실행할 수 있도록 합니다. GitHub Action의 컴포넌트에는 workflows, events, jobs, steps, actions, runners가 있습니다. 빌드 실패 관련 에러 메시지 에러 메시지 1 ApplicationTests > contextLoads() FAIL..
[Java] this란?
[Java] this란?
2022.05.01this란? this는 Java에서만 사용하는 것이 아니라 C, C++ 등 여러 곳에서 많이 사용됩니다. 여기서 this의 영어를 뜻은 "(가까이 있는 것을 가리켜)이것"이라는 것처럼 this는 객체 자기 자신을 가리킵니다. this가 많이 사용되는 곳은 매개변수가 있는 생성자, setter 등에서 많이 사용됩니다. 예를 들어서 Person이라는 객체가 존재한다고 해보겠습니다. public class Person { String name; Integer age; public Person() { } public Person(String name) { this.name = name; } public Person(String name, int age) { this.name = name; this.age = a..