-
[JAVA] - Iterator란
Iterator 객체 지향적 프로그래밍에서 배열이나 자료 구조의 내부의 요소를 순회하는 객체이다. iterate : (계산, 컴퓨터 처리 절차를) 반복하다 iterator : 반복자 자바의 Iterator 인터페이스는 어떤 Collection객체라도 저장된 요소들을 순회할 수 있는 표준화된 방법을 제공하기 위해 만들어졌다. 물론, 대표적인 제어문인 for, while 문으로도 반복문을 얼마든지 가능하지만, Iterator는 '표준화된 방법을 제공'한다는 점에서 다형성을 구현하고자 했다. Iterator 관련 메서드 Iterator 인터페이스가 제공하는 메서드는 3가지로 꽤 단순하다. 또한, '반복자'라는 이름답게 while, for 문과 함께 사용된다. hashNext() 다음 요소가 존재하는지 혹은 그..
2024.03.16 21:39 -
[JAVA] 스트림(Stream) 중간연산, 최종연산 메소드 - (2)
Stream 개념 : [Spring/JAVA] - [JAVA] 스트림(Stream)이란 - (1) 중간연산 메소드 요소의 범위를 줄이는 작업을 먼저 실행하는 것이 불필요한 연산을 막을 수 있어 성능을 향상할 수 있다. 이런 메소드로는 skip, filter, distinct 등이 있다. 스트림 자르기 Skip (long n) 처음 n개의 요소 건너뛰기 Limit (long maxSize) 스트림의 요소를 maxSize개로 제한 IntStream exampleStream1 = IntStream.rangeClosed(1, 10); // 1~10의 요소를 가진 스트림 exampleStream1.skip(3).limit(5).forEach(System.out::print); // 45678 스트림 요소 걸러내기..
2024.02.12 23:02 -
[JAVA] 스트림(Stream)이란 - (1)
스트림(Stream)이란 스트림(Stream)은 자바 8 API에 새로 추가된 기능이다. 스트림을 이용하면 선언형(더 간결하고 가독성이 좋도록)으로 컬렉션 데이터를 처리할 수 있다. 스트림은 파이프라이닝과 내부반복이라는 특징을 가지고 있으며 스트림의 연산은 중간연산, 최종연산으로 구분된다. 중간연산은 layziess(게으름), loop fusion(루프 퓨전)의 특징을 가진다. 최종연산을 하게되면 해당 스트림은 재사용을 할 수 없다는 특징을 가진다. 스트림 연산 중간 연산 필터링(filtering) 및 맵핑(mapping) 등 요소의 범위를 줄여나가는 연산이다. 중간 연산 메소드들은 중간 처리된 '스트림'을 리턴한다. 그리고 이 스트림에서 다시 중간 처리 메서드를 호출해서 파이프라인을 형성하게 된다. 이..
2024.01.20 16:28 -
[JAVA] 대용량 데이터 조회 - ResultHandler
ResultHandler 사용이유 Mybatis를 사용하여 대용량데이터를 select 해서 List 형태로 호출하게 되면 몇십만 건 혹은 몇백만 건 row data를 한 번에 호출하게 되면 OOM(Out of Memory) 에러가 발생될 가능성이 매우 높다. OOM오류를 회피하는 방법으로 Mybatis의 ResultHandler를 통해 데이터 Row별로 반복 작업이 가능하다. ResultHandler Example Service public void resultHandlerTest(){ devLogMapper.selectData(new ResultHandler(){ @Override public void handleResult(ResultContext
2023.10.15 10:00 -
Mybatis selectKey 사용법
selectKey 사용 - INSERT전 Key값을 증가시켜서 입력하는 경우 (order:BEFORE) - INSERT후 생성된 Key값을 반환해야 하는 경우 (order:AFTER) - KEY로 사용되는 여러 개의 칼럼을 조회한 후 사용해야 하는 경우 selectKey Element 속성 keyProperty : selectKey의 구문 결과가 세팅될 대상의 프로퍼티 명 resultType: 결과의 자료형 (String, Long, Integer...) 여러 개의 Key를 조회하는 경우라면 별도의 객체 또는 hashmap를 사용하여야 한다. keyColumn: 내부에 작성한 SELECT 문의 조회 결과 칼럼과 일치시킨다. 여러 개의 칼럼을 사용한다면 칼럼명의 목록은 콤마를 사용해서 구분한다. (띄어쓰기..
2023.10.14 19:33 -
로드밸런싱 / 서버 부하 분산 (Server Load Balancing)
로드밸런싱 로드밸런싱은 네트워크나 웹 서버와 같은 컴퓨터 시스템에서 발생하는 트래픽을 여러 대의 서버에 균등하게 분산하는 방법을 의미한다. 다수의 서버를 사용하여 사용자 요청을 처리하고 서버 부하를 분산시키는 방법 중 하나이다. 로드 밸런싱은 웹 사이트나 애플리케이션의 가용성과 성능을 향상시키는데 중요한 역할을 한다. 분산처리는 'Network Switch'가 담당한다. 즉, 외부로부터의 요청을 서버가 직접 받는 것이 아닌 'Network Switch'가 받은 후 이를 서버로 나누어 주는 것이다. 'Network Switch'를 Load Balancer 혹은 L4 Switch(Layer 4)라 부른다. 로드밸런서(L4 스위치)가 필요한 이유 폐쇄망에서 50명정도만 사용하는 웹 서비스가 있다고 가정해 보자..
2023.09.28 19:59 -
[STS/Eclipse] JAR Decompiler Plugin 설치
STS, Eclipse는 JAR파일에 대해 Decompile을 제공해주지 않는다. 따라서 Decompile Plugin을 설치해야 개발을 함에 있어 불편함이 없어질 것이다. 인텔리제이는 제공해 주는 것으로 알고 있다. 1. Plugin 및 jad.exe파일 준비 1) Plugin : https://sourceforge.net/projects/jadclipse/ 2) jad.exe : http://varaneckas.com/jad/ OS에 맞게 다운로드하면 된다. 2. Plugin JAR(net.sf.jadclipse_3.3.0.jar)파일 IDE plugins 디렉토리로 이동 IDE가 설치되어 있는 위치에 plugins 디렉토리가 존재할 것이다. 해당 디렉토리에 net.sf.jadclipse_3.3.0...
2023.05.22 18:56 -
@Transactional 기초 및 주의사항
@Transactional @Transactional은 클래스 또는 메소드에 사용할 수 있으며 @Transactional이 포함된 메소드가 호출될 경우, 프록시 객체가 생성된다. 이 방식을 선언적 트랜잭션이라고 부른다. 프록시 객체는 해당 메소드 실행 이전에 PlatformTransactionManager를 사용하여 트랜잭션을 시작하고 결과에 따라 Commit 또는 Rollback 한다. @Transactional 어노테이션은 프록시 방식으로 동작한다. 프록시 방식이 무엇인지 간단하게 설명하고 넘어가겠다. @Service @RequiredArgsConstructor public class SampleService { @Transactional public void study(){ // do somethi..
2023.05.06 20:45 -
[Spring] JPA Example
JPA에 대한 개념은 ORM, JPA에 대한 이해에 정리하였다. Maven org.springframework.boot spring-boot-starter-data-jpa com.h2database h2 runtime org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok H2 인메모리 관계형 데이터베이스 메모리에서 실행되기 때문에 애플리케이션을 재시작할 때마다 초기화된다는 점에서 테스트 용도로 많이 사용한다. lombox lombok에 대해 모른다면 lombok 어노테이션에 ..
2023.03.30 00:01 -
ORM, JPA에 대한 이해
ORM Object Relational Mapping의 약자이며 DB의 특정 테이블이 JAVA의 객체로 맵핑되어 SQL문을 일일이 작성하지 않고 객체로 구현할 수 있도록 하는 프레임워크이다. JAVA는 객체 지향이고, 관계형 데이터베이스는 데이터를 정규화해서 잘 보관하는 것을 목표로 한다. 객체를 데이터베이스에 넣기 위해서는 SQL문을 통해 변환해서 저장해야 하고, 데이터베이스에서 객체를 다시 꺼내오기 위해서는 복잡한 SQL문을 작성해야 한다. 결국 객체를 단순히 데이터 전달 목적으로 사용할 뿐 객체지향적으로 프로그래밍을 할 수가 없다. 이는 객체지향과 관계형 데이터베이스 간의 패러다임이 불일치하기 때문이다. 이를 해결하기 위해서 나온 기술이 ORM이다. 객체는 객체지향적으로, 데이터베이스는 데이터베이스..
2023.03.29 17:21