Cute Hello Kitty Kaoani

WebServer/Spring

WebServer/Spring

Kafka Consumer Retry 전략

Spring Kafka Consumer 부분을 맡으면서 예외 상황을 처리하기 위해 Kafka Retry 전략에 대해 알아보았다. 메시지를 소비하는 동안 예상치 못한 오류가 발생할 수 있으며, 이를 적절히 처리하는 로직이 필요하다. 메시지를 반복적으로 재처리하거나, 재처리 후에도 실패하는 메시지를 별도의 토픽으로 관리해야한다. Consumer의 예외 상황을 처리하기 위한 방식으로는 ErrorHandler 방식과 어노테이션 방식 이 있다. ErrorHandler 방식Spring Kafka는 이러한 예외 상황을 처리하기 위해 DefaultErrorHandler 와 BackOff 기능을 제공한다.재시도 간격에 따라 다양한 Backoff 전략이 있다.Fixed Backoff : 일정된 시간 간격으로 재시도하는 전..

WebServer/Spring

[Spring] @RequestBody 와 @ResponseBody

@RequestBody @ResponseBody 는 XML이나 JSON과 같은 메시지 기반의 커뮤니케이션을 위해 사용된다. @ResponseBody가 메서드 레벨에 부여되면 메서드가 리턴하는 객체는 뷰를 통해 결과를 만들어내는 Model로 사용되는 대신, 메시지 Converter를 통해 바로 HTTP 응답의 메시지 본문으로 전환된다. @RequestBody @ResponseBody를 위한 jackson 라이브러리 필요 com.fasterxml.jackson.core jackson-databind 2.14.2 💡 스프링부트에서는 의존성이 자동으로 포함되어 있음. @ResponseBody Controller에서 응답처리를 JSP로 하지 않고 JSON 형식으로 처리가 가능하다. 즉, 자바클래스를 리턴하면 자동..

WebServer/Spring

[Spring] Spring 기반의 파일업로드(File Upload)

① 의존성 추가 Apache 에서 제공하는 Commons 기반의 라이브러리 의존성 추가 commons-fileupload commons-fileupload 1.4 commons-io commons-io 2.6 ② 파일 업로드 JSP 작성 comment: file: ③ DTO 작성 type="text"와 type="file" 2개를 한꺼번에 저장하기 위해 UploadDTO 클래스를 작성한다. @AllArgsConstructor @Data public class UploadDTO { String theText; CommonsMultipartFile theFile; } 💡 CommonsMultipartFile 클래스는 파일을 저장하는 핵심 클래스이다. ④ Controller 작성 @Controller publ..

WebServer/Spring

[Spring] MVC 네임스페이스 태그 관련

@MVC 관련 기능을 활용할 때, 다음 두 가지는 필수 지정 HandlerInterceptor 스프링의 HandlerMapping은 HandlerInterceptor를 이용해 Controller가 요청을 처리하기 전과 후에 알맞은 기능을 수행하도록 지원 boolean preHandle(request, response, object): 클라이언트 요청을 Controller에 전달하기 전 호출 void postHandle(request, response, object, mav) : 클라이언트 요청을 처리한 후 호출 void afterCompletion(request, response, object, ex): 뷰를 통해 클라이언트에 응답을 전송한 후 호출 HandlerInterceptor를 구현한 뒤에는 반드..

WebServer/Spring

[Spring] 스프링의 포워드(forward)와 리다이렉트(redirect) + RedirectAttributes

[Servlet] 요청 위임 클라이언트의 요청을 받은 서블릿에서 다른 컴포넌트(서블릿, JSP, html)로 요청을 위임할 수 있다. 직접 요청 받은 서블릿에서 모든 작업을 처리하지 않고 위임한 컴포넌트에서 특정 작업을 처리 gangintheremark.tistory.com 리턴 타입이 String 일 때, 다음과 같은 특별한 키워드를 붙여서 사용할 수 있다. forward : 포워드 방식으로 처리 forward:target redirect : 리다이렉트 방식으로 처리 redirect:target 포워드(forward) 처리 화면 URL 변경 X request scope에 저장된 데이터 target에서 사용 가능 @RequestMapping("/aaa") public String aaa(Model m) ..

WebServer/Spring

[Spring] 스프링 MVC의 Controller

스프링 MVC의 Controller는 다음과 같은 특징이 있다. 다양한 타입의 파라미터 처리, 다양한 타입의 리턴 타입 사용 가능 GET/POST 전송 방식을 어노테이션으로 처리 가능 @RequestMapping @RequestMapping은 사용자가 요청한 URL 정보를 이용하여 실제 처리되는 메서드를 선택할 수 있다. URL 패턴 @Controller public class TestController { // 💡 매핑값 하나 // http://localhost:8090/app/xxx @RequestMapping(value = "/xxx") public String xxx() { return "main"; } // 💡 매핑값 두 개 // http://localhost:8090/app/xxx2 // ht..

WebServer/Spring

[Spring] Spring MVC 구조와 컴포넌트

Spring MVC 구조 스프링 프레임워크는 MVC2 패턴을 준수한다. MVC2 패턴은 쉽게 말해 로직과 화면을 분리하는 스타일의 개발방식이다. UI코드와 비즈니스 코드를 분리함으로써 종속성을 줄이고 재사용성을 높여 보다 쉬운 유지보수를 확보할 수 있다. MVC2 방식에서 사용자의 Reqeust를 처리하기 위해 주로 Controller를 호출한다. 나중에 View를 교체하더라도 사용자가 호출하는 URL 자체에 변화가 없게 만들어주기 때문이다. 스프링 MVC의 기본 구조는 아래와 같다 ① 사용자의 Request는 Front-Controller인 DispatcherServlet을 통해 처리한다. ② HandlerMapping은 Request의 처리를 담당하는 Controller를 찾는다. @RequestMa..

WebServer/Spring

[Spring] 트랜잭션 처리 (TransactionManager)

스프링에서는 트랜잭션 관리자인 TransactionManager 클래스를 제공하여 트랜잭션을 처리한다. TransactionManager 빈등록 및 설정 @Transactional 어노테이션 이용 @Transactional @Override public int InsertAndDelete() { // insert DeptDTO dto = new DeptDTO(50, "개발", "부산"); dao.deptAdd(dto); // delete dao.deptDelete(60); return 0; }

WebServer/Spring

[Spring] Spring에서의 MyBatis 연동

Oracle 연습용 계정인 SCOTT 계정의 DEPT 테이블 정보를 조회/삽입/수정/삭제를 해보자 ① 의존성 설정 pom.xml에 5개의 jar 설정 ojdbc6_g.jar, mybatis.jar, spring-jdbc.jar, spring-mybatis.jar, commons-dbcp2.jar org.mybatis mybatis 3.4.6 org.mybatis mybatis-spring 1.3.2 org.springframework spring-jdbc 5.0.8.RELEASE org.apache.commons commons-dbcp2 2.5.0 com.jslsolucoes ojdbc6 11.2.0.1.0 ② jdbc.properties 작성 및 등록 jdbc.properties 작성 # src/mai..

WebServer/Spring

[Spring] 빈 객체 스캔 (component-scan)

component-scan이란 빈으로 등록될 준비를 마친 클래스들을 스캔하여 빈으로 등록해주는 것이다. 즉, 사용자가 만든 빈들을 xml에 등록없이 객체를 생성할 수 있다. @Controller @Service @Component @Repository 어노테이션을 붙인 클래스들이 빈으로 등록 될 준비를 한 것이다. 빈 객체 스캔 태그의 base-package 속성으로 지정된 패키지 내 클래스를 검색하여 자동으로 빈 등록 내부적으로 기능을 포함 XML 설정 파일에 여러 빈 정보를 명시적으로 추가하지 않고 자동으로 빈들을 등록 패키지에 있는 모든 클래스들이 빈으로 등록되는 것이 아니며 반드시 어노테이션으로 지정된 빈만 해당 @Component : 포괄적인 마킹 @Service : Service에 사용하는 마..

WebServer/Spring

[Spring] AOP (Aspect Oriented Programming)

AOP 보안이나 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분을 스프링에서는횡단 관심사라고 한다. AOP는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임이다. 즉, 문제를 해결하기 위한 핵심 관심사항과 전체에 적용되는 공통 관심사항을 분리하여 프로그래밍함으로써 공통 모듈을 여러 코드에 쉽게 적용할 수 있도록 도와준다. 부가기능: 공통기능으로 어플리케이션 전반에 걸쳐 필요한 기능 ➜ 로깅, 트랜잭션, 보안, 예외처리 등 핵심기능: 핵심 비즈니스 로직 ➜ 로그인, 회원가입, 계좌이체 등 AOP 주요 용어 Advice: 실질적인 부가 기능 로직을 정의하는 곳 Join point: advice가 적용될 수 있는 모든 시점. Spring AOP에서는 메서드 호출 시점만 ..

WebServer/Spring

[Spring] SpEL (Spring Expression Language)

SpEL (Spring Expression Language) 이란 런타임에 평가하는 표현식을 이용하여 빈의 프로퍼티나 생성자 인자에 값을 할당하는 간결한 방식이다. xml 파일에서 속성값을 #{표현식} 이용하여 설정 리터럴 값 2}" 빈, 메서드, property 참조 SpEL 문법으로 다른 빈을 참고할 때는 ref 대신에 value 사용 value="#{빈id값}" value="#{빈id값.변수}" value="#{빈id값.메서드()}" 상수 및 static 메서드 참조 value="#{T(패키지명포함한클래스명).메서드()}" 리소스 번들(properties) 참조 value="#{번들의id값['key']}" 컬렉션의 selection .?[조건식] 기준을 만족하는 행 만 포함하는 새로운 컬렉션 생성 ..

gangintheremark
'WebServer/Spring' 카테고리의 글 목록