Back-end 65

Java heap, stack

# ThreadLocal 과 관련하여 : 객체는 Heap 또는 Stack 메모리 영역에 배치시킬 수 있습니다. Heap 영역은 일반적으로 모든 thread에서 접근 할 수 있으며 stack은 thread 하나당 만들어 지는 메모리 영역으로 thread간 접근이 불가능한 것으로 알려져 있습니다. 1. stack 1) Heap 영역에 생성된 Object 타입의 데이터의 참조값이 할당된다. 2) 원시타입(primitive types)-byte, short, int, long, double, float, boolean, char 타입)의 데이터가 값과 함께 할당된다. (원시 타입의 데이터들에 대해서는 참조값을 저장하는 게 아니라 실제값을 stack에 저장하게 된다.) 3) 지역 변수들은 scope에 따른 vis..

스프링 배치

1. 스프링 배치 Spring Batch는 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기, 리소스 관리 등 대용량 레코드 처리에 필수적인 기능을 제공한다. 또한 최적화 및 파티셔닝 기술을 통해 대용량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스 및 기능을 제공한다. Spring Batch에서 배치가 실패하여 작업 재시작을 하게 된다면 처음부터가 아닌 실패한 지점부터 실행을 하게 된다. https://khj93.tistory.com/entry/Spring-Batch%EB%9E%80-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B3%A0-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0 Spring Batch란? 이해하고 사용하기(예제소스 포함) ..

System.out과 logging

1. System.out과 logging https://blog.silentsoft.org/archives/13 Logging을 System.out으로 하면 안되는 이유 운영 시스템에서 System.out으로 로그를 남기는 경우는 없다고 봐도 무방하다. 또, ‘Logging은 절대 System.out으로 하면 안 된다’고 생각하는 사람이 많다. 그런데 아이러니하게도 그 이유를 모르는 blog.silentsoft.org 요약 에러/장애 발생 시 추적할 수 있는 최소한의 정보가 없다. 최소한의 정보는 고사하고, 로그 내용을 가져오기 어렵다. 누가 봐도 System.out.println은 콘솔에 로그를 출력하는 API이다. 성능저하 원인이 될 수 있다. -> 참고 (https://junghyungil.tist..

비동기 처리를 위한 ThreadPoolTaskExcutor

1. ThreadPoolTaskExcutor 스프링에서 제공해주는 클래스로 org.springframework.scheduling.concurrent패키지에 속하며 기본생성자 하나만 존재한다. 이는 쓰레드풀을 이용하여 멀티쓰레드 구현을 쉽게 해주는 클래스이다. 2. 관련 메서드 1) setCorePoolSize : corePoolSize값을 설정한다. 이는 동시에 실행시킬 쓰레드의 개수를 의미하며 default값은 1이다. 2) setAllowCoreThreadTimeOut : 코어 쓰레드의 타임아웃을 허용할 것인지에 대한 세터 메서드로 true로 설정할 경우 코어 쓰레드는 10으로 설정했어도 일정시간(keepAliveSeconds)이 지나면 코어 쓰레드 개수가 줄어든다. default값은 false이다..

스트림(stream)

1. 스트림이 생기게 된 배경 통상적으로 많은 수의 데이터를 다룰 때 컬렉션이나 배열에 데이터를 담고 for문과 Iterator를 이용해서 코드를 작성해왔다. 그러나 이러한 방식으로 코드를 작성한다면 너무 길고 알아보기 어려우며 재사용성도 떨어진다. 또한, 데이터 소스마다 다른 방식으로 다루어야 한다. 예를 들어 List를 정렬할 때는 Collections.sort(); 배열을 정렬할 때는 Arrays.sort(); 이러한 문제점을 해결하기 위해 스트림이 만들어졌다. 스트림은 데이터 소스를 추상화 함으로써 데이터 소스가 무엇이든 간에(List, Set, Map, 배열, 파일에 저장된 데이터 등) 같은 방식으로 다룰 수 있게 되었으며 이로 인해 코드의 재사용성이 높아졌다. 2. 스트림 생성 //주문 상품 ..

변수명 짓는 방법

1. 변수명을 거의 동사로 시작하지 않는다.(boolean변수는 isLoggedIn) 명사, 형용사, 부사만 들어간다. 2. 최대한 간결하게 && 의미 명확히 전달되게 3. 관사 쓰는거 아니다. auser 이런 거 안된다. (users-복수, user-단수) 4. 전치사 쓰는 것 아니다.(~의 갯수) numberOfUsers 보다는 userCount아니면 numUsers 5. 마이크로소프트 오픈소스보면 변수명 잘 지어져있다. https://tecoble.techcourse.co.kr/post/2020-04-24-variable_naming/ 좋은 코드를 위한 자바 변수명 네이밍 JAVA… tecoble.techcourse.co.kr

@SuppressWarnings

1. @SuppressWarnings 이란? @SuppressWarning 어노테이션은 컴파일 경고를 사용하지 않도록 설정해주는 것으로 컴파일 에러가 나올 때 그 경고를 없앨 수 있도록 하는 것이다. 두 가지 종류를 같이 사용할 때는 @SuppressWarnings({"unused","unchecked"})처럼 객체 형식으로 묶어서 사용할 수 있다. //unused : 사용하지 않는 코드 또는 불필요한 코드가 있을 경우 경고를 억제시킨다. @SuppressWarnings("unused") private final Logger logger = LoggerFactory.getLogger(getClass()); //all : 모든 경고 //cast : 캐스트 연산자 관련 경고 //dep-ann : 사용하지 말..

ENUM

1.열거형이란? 관련 상수(열거형 상수는 객체임)들을 같이 묶어 놓은 것을 말한다. java의 열겨형은 값과 타입 둘다 체크함 2. 열거형 정의하는 방법 enum 열거형 이름{ 상수명1, 상수명2, ...} enum Direction {EAST, SOUTH, WEST, NORTH} class Unit{ int x, y; Direction dir ; //열거형을 인스턴스 변수로 선언 void init(){ dir = Direction.EASE; //유닛의 방향을 EAST로 초기화(클래스의 static 변수를 참조하는 것과 동일) 열거형 상수 비교에 ==와 compareTo(비교연산자 사용 불가 대신 compareTo사용)사용가능 compareTo 같으면 0, 왼쪽이 크면 양수, 오른쪽이 크면 음수 3. 열..