일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- MySQL
- JVM
- Spring
- laravel
- Gradle
- springboot
- Spring Batch
- Spring Boot
- 요리
- devops
- java
- redis
- linux
- javascript
- IntelliJ
- db
- it
- Design Patterns
- jsp
- php
- jenkins
- elasticsearch
- ReactJS
- Oracle
- ubuntu
- AWS
- tool
- Git
- 맛집
- Web Server
- Today
- Total
목록java (242)
아무거나
Spring Batch 활용 이전글: https://bkjeon1614.tistory.com/737 작업코드: 작업코드 Spring Batch 프로젝트 생성 프로젝트 환경 IntelliJ IDEA 2022. 1 Spring Boot 2.7.3 Java 11 Gradle 프로젝트 생성 프로젝트 유형 설정 프로젝트 관련 설정 생성된 build.gradle 확인 [build.gradle] plugins { id 'org.springframework.boot' version '2.7.3' id 'io.spring.dependency-management' version '1.0.13.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sou..
Spring Batch 란? Spring Batch 를 사용하면서 내부적으로 어떻게 동작하는지 어떤 특징이 있는지 등에 대해서 한 번 정리가 다시할 필요성을 느껴서 해당 포스팅을 작성하게 되었다. Batch? 정의 개발자가 정의한 작업을 한번에 일괄 처리하는 애플리케이션이며 즉, 데이터를 실시간으로 처리하는게 아니라, 일괄적으로 모아서 처리하는 작업을 의미한다. (Ex: 하루동안 쌓인 데이터를 배치작업을 통해 특정 시간에 한꺼번에 처리하는 경우) 예시 상품 키워드 검색 수에 대한 일/주/월 키워드 검색순위 데이터 집계 매출 데이터를 사용한 일매출 데이터 집계 (실시간 집계 쿼리로 해결하면 조회 시간이나 서버 부하가 많으므로 매일 새벽 전날에 매출 집계 데이터를 미리 생성) 내부 및 외부 시스템에서 우리에..
POJO (=Plain Old Java Object) POJO 란 마틴파울러가 만들어낸 용어이며 당시 인기를 끌고있던 EJB처럼 복잡하고 제한이 많은 기술을 사용하는 것보다는 자바의 단순한 오브젝트를 이용해 애플리케이션의 비즈니스 로직을 구현하는 편이 낫다고 생각하여 만듬 또한 단순히 "간단한 자바오브젝트를 사용" 한다는 말보다는 "POJO 방식의 기술을 사용" 한다는 말이 첨단기술을 쓰는 것처럼 느껴진다는 심리도 이용함 POJO 의 조건 특정 규약에 종속되지 않는다 자바 언어와 꼭 필요한 API 외에는 종속되지 않아야 한다. (EJB2, 스트럿츠1 과 같이 특정 규약을 따라 비즈니스 컴포넌트를 만들어야 하는 경우는 POJO가 아님) 특정 환경에 종속되지 않는다 특정 환경에 종속되게 만들면 안되고 환경에..
Java Stream 이란 개념은 알고 있지만 한 번 정리가 필요할 것 같아서 해당 포스팅을 작성하게 되었다. Stream 우리는 수 많은 데이터를 다룰 때, 컬렉션이나 배열에 데이터를 담고 원하는 결과를 얻기위해 for 문이나 Iterator 를 이용하여 코드를 작성해왔다. 그러나 이러한 코드는 가독성과 재사용성이 떨어진다. 또한 Collection 이나 Iterator 와 같은 인터페이스를 활용하여 컬렉션을 다루는 방식을 표준화하기는 하였지만. 각 컬렉션 클래스에는 같은 기능의 메서드들이 중복해서 정의되어 있다. 예를 들면 List 를 정렬하려면 Collections.sort() 를 사용하거나 배열은 Array.sort() 를 사용해야 한다. 이러한 문제점들을 해결하기 위해서 Java8 부터 추가된것..
Spring Boot Graceful Shutdown 애플리케이션을 배포(ex: Rolling Deploy) 또는 특정 케이스로 종료할 때 여러가지 방법이 존재한다. 다만 케이스별로 정상적은 종료를 위하여 반드시 정상 종료 프로세스는 꼭 필수이다. 그러므로 애플리케이션을 정상적으로 종료할 수 있게 도와주는 Graceful Shutdown 에 대하여 알아보자. 리눅스 KILL 명령 리눅스 환경에서 프로세스를 종료할 때 KILL 을 사용하고 옵션에 따라 종료시키는 보편적으로 사용하는 동작은 아래와 같다. -9: 작업중인 모든 데이터를 저장하지 않고 프로세스를 종료하기 때문에 저장되지 않는 데이터는 소멸된다. (강제종료) -15: 하던 작업을 모두 안전하게 저장한 후 프로세스를 종료한다. (정상종료) Grac..
Exception 을 개선하다가 예전에 포스팅을 작성해야지 하면서 깜박했던 부분이 있어 다시 작성하게되었다. @ControllerAdvice 를 통한 Global Exception Handler 처리 에러 객체 생성 [ErrorResponse.java] import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import org.springframework.validation.BindingResult; import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; import com.example.bkjeon.enum..
Soft Limit, Hard Limit 각 계정 마다 하나의 프로세스가 가질 수 있는 file descriptor에 제한이 있다. Soft limit 는 새로운 프로그램이 생성되면 디폴트로 적용되는 제한 값 Hard limit 는 Soft limit 부터 늘릴 수 있는 최대 값 (root만 조정 가능) aws ec2 기준으로는 인스턴스 타입에 따라 limit가 조정된다. 즉, 서버 사양에 따라 limit를 증가시킬 수 있다. Java는 hard 옵션까지 파일오픈이되고 Python에서는 soft옵션까지만 file이 오픈되는 이유 openjdk에서는 -XX:+MaxFDLimit 옵션이 true 인 경우 setrlimit 으로 limit를 증가시키므로 hard 옵션까지 파일이 오픈된다. 설치된 java의 M..
최근에 JVM 관련 대화를 나누던 도중 메모리 영역에 대한 잘못된 설명을 해버린적이 있다. 반성하는겸 다시 정리하고자 해당 포스팅을 작성하게 된다. Java 메모리(with. JVM) 정의 Stack: 정적 할당된 메모리 영역 boolean, char, short, int, long, float, double.. 등과 같은 데이터 즉, 원시타입의 데이터가 값이랑 같이 Stack 에 할당된다. Heap 영역에서 Object 타입 데이터의 참조값이 Stack 에 할당된다. Stack 의 메모리는 Thread 당 하나씩만 할당된다. 즉, 새로운 Thread 생성시 그 해당 Thread 에 대한 Stack 이 또 새롭게 생성된며 각 Thread 끼리는 Stack 영역을 접근 할 수 없다. 간단한 사용예시 pub..
Garbage Collection 기존글: https://bkjeon1614.tistory.com/249 GC(=Garbage Collection) 불필요한 또는 더이상은 사용하지 않는 객체들을 메모리에서 제거함으로써 Java 프로세스가 한정된 메모리를 효율적으로 사용할 수 있게 해준다. JVM Heap 구조 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다. // 10,000 건의 NewObject 객체는 Loop 내에서 생성되고, 사용되지만 Loop 밖에서는 더이상 사용할 일이 없어진다. 이런 객체들이 메모리를 계속 점유하고 있다면, 다른 코드를 실행하기 위한 메모리 자원은 지속적으로 줄어들기만 할 것이다. // GC는 이렇게 한번쓰이고 버려지는 객체들 즉, 접근 불가능 상태가 된..
Java + Spring Boot 개발시에 빈번하게 작성되는 try ~ catch 또는 예외처리등을 간소화하며 에러를 공통으로 핸들링하기 위해 전역으로 사용되는 Exception Handler 객체를 만들어보자. @ControllerAdvice 사용한 방법으로 진행하자. 자세한 코드는 https://github.com/bkjeon1614/java-example-code/tree/develop/bkjeon-mybatis-codebase 를 참고하면 된다. Global Exception Handler 처리 에러 객체 생성 [ErrorResponse.java] import java.util.ArrayList; import java.util.List; import java.util.stream.Collector..