본문 바로가기

JAVA

(62)
[MyBatis] ResultHandler에 대해 . ResultHandler는 MyBatis에서 제공하는 인터페이스로, SQL 쿼리의 결과를 자바 객체로 변환하는 과정을 사용자가 직접 제어할 수 있게 해줍니다. handleResult 메소드를 오버라이딩하여, 원하는 방식으로 결과를 매핑하거나 추가적인 로직을 적용할 수 있습니다. 이 두 요소의 조합을 통해, 데이터베이스에서 쿼리 결과를 더 유연하고 효율적으로 다룰 수 있게 됩니다. 필요성 대용량 데이터 처리 일반적인 MyBatis의 쿼리 실행 방식은 1건씩 호출하기에 대용량 데이터에 비효율적입니다. 그러나 ResultHandler를 사용하면, 결과 셋이 DB에서 한 번에 하나씩 메모리에 로드되기 때문에 대용량 데이터도 효율적으로 처리할 수 있습니다. 작동 원리 내부 구조 ResultHandler는 ha..
[Spring] 스프링MVC - HTTP 요청과 응답 [Spring]스프링MVC - HTTP 요청과 응답 스프링에서 HTTP요청을 받는 방법은 여러가지가 있다. 폼 데이터의 인자로 넘어올 때는 RequestParam, ModelAttribute를 사용할 수 있지만 Http 바디를 통해 직접 넘어올 때는 별도의 파싱이 필요하다. 텍스트 파싱 1. InputStream (V1) @PostMapping("/request-body-string-v1") public void requestBodyString(HttpServletRequest request, HttpServletResponse response) throws IOException { ServletInputStream inputStream = request.getInputStream(); String me..
[Spring] 스프링 트랜잭션과 동작방식에 대한 간략한 기록 스프링의 데이터베이스 처리 중 작동 방식에 대해 컨트롤할 수 있는 트랜잭션 기능을 제공합니다. 동작방식은 아래 4가지와 같습니다. 전파: 로직 중 예외가 발생했을 때 예외까지 변경된 데이터가 되돌아가야(RollBack) 할지, 저장되어야 할지 (Commit) 제한시간: 수행하는데 걸리는 시간을 설정 격리수준: 실시간으로 수정 중인 다른 데이터를 조회했을 때 수정된 상태로 보여야 하는지, 트랜잭션 간의 작업의 연관성에 개입 읽기전용: 데이터 조작을 방지 트랜잭션 전파 (PROPAGATION) 작업 A와 B가 있을 때 두 작업 간의 처리방식에 대한 설정입니다. PROPAGATION_REQUIRED A 작업이 수행된 후 B는 새로운 트랜잭션을 만들지 않고 A에 트랜잭션에 참여합니다. A와 B는 하나의 트랜잭션..
[Java] 자바 스트림 API에 대해 (Java8 Stream Guide & Example) 스트림API를 이해하기 위해서는 lamdba expressions. Optional, method references에 사전학습 하는 것을 권장합니다. Java Method Reference Java Lamdba Expressions Java Optional Stream API는 자바 8에 추가되어 다수의 데이터를 다룰 때 사용하는 배열이나 컬렉션의 비효율적인 면을 개선하기 위해 탄생한 방법입니다.(데이터를 입출력할 때 사용하는 스트림( I/O Streams )(ex: FileInputStream)과는 다른 개념입니다.) 스트림 API는 데이터를 추상화하여 다루어 다양한 데이터 타입을 같은 방법으로 다룰 수 있게 됩니다. StreamAPI 는 컬렉션(이하 기존 반복문)은 외부 반복을 통해 작업하지만 스트..
[Java] 메소드참조란? (MethodReferene란?) Java Method Reference 메소드 레퍼런스(Method Reference) 메소드 레퍼런스는 람다 표현식을 더 간단하게 표현하는 방법이다. 클래스이름::메소드이름 또는 참조변수이름::메소드이름 위와 같이 사용하여 불필요한 매개변수를 제거할 수 있다. Ex) 람다식으로 Hello를 출력하는 코드이다. Consumer func = text -> System.out.println(text); func.accept("Hello"); // 실행 결과 // Hello 위 람다식은 다음과 같이 표현될 수 있다. Consumer func = System.out::println; func.accept("Hello"); // 실행 결과 // Hello 메소드 레퍼런스는 ClassName::MethodName ..
[Java] Java Optional에 대해 Java Optional http://www.tcpschool.com/java/java_stream_optional Java Optional이란? 자바 8에 추가된 (java.util.Optional) 클래스이며 Integer이나 Double 클래스 처럼 ‘T’타입의 객체를 포장해주는 Wrapper class이다. 고로 모든 타입의 참조 변수를 저장할 수 있다. (Wrapper Class는 객체 활용이 불가능한 기본타입의 데이터를 객체로 Boxing(변환)하기 위한 Class이다. Ex) int i = 1; → Integer j = Integer.valueof(i);) 이러한 Optional 객체를 이용하여 NullPointException를 간단하게 방지할 수 있다. Optional 객체 생성 of()..
[Java] 람다표현식 (Java-LamdbaExpressions) Java Lamdba Expressions https://www.w3schools.com/java/java_lambda.asp 자바 람다표현식이란(Java Lamdba Expresions) 자바 람다표현식은 Java8에서 추가되었다. 람다식은 매개변수를 받아 반환하는 짧은 코드블럭이다. 메소드와 비슷하지만 이름을 가지지 않고, 메소드 본문만을 이용하여 구현을 한다. 문서에서는 Lamdba Expressions를 ‘람다식’, ‘람다표현식’으로 적어 표현한다. 문법 parameter -> expression 가장 간단한 람다식 (단일 파라미터와 표현식만이 사용된다.) (parameter1, parameter2) -> expression 더 많은 파라미터를 사용하려면 파라미터를 감싼다. (parameter1,..
[Spring] 웹 스코프 웹 스코프의 특징 웹 스코프는 웹 환경에서만 동작한다. 웹 스코프는 프로토타입과 다르게 스프링이 종료시점 까지 관리한다. (종료 메서드 호출됨) 종류 request : ****HTTP 요청 하나가 들어오고 나갈 때 까지 유지되는 스코프, 각각의 요청마다 별도 빈 인스턴스가 생성되고 관리됨 session : http session과 동일한 생명주기를 가지는 스코프 application : 서블릿 컨텍스트(ServletContext)와 동일한 생명주기를 가지는 스코프 websocket : 웹 소켓과 동일한 생명주기를 가지는 스코프 설명보다 예제를 만들어보는 것이 이해가 더 잘될 것이다. request 스코프 예제 만들기 웹 환경 추가하기 웹 스코프는 웹 환경에서만 동작하므로 web 환경이 동작하도록 라이브러..