4차산업혁명의 일꾼/Spring 102

비동기 클라이언트 수신 SseEmitter 사용법과 어노테이션 끄적

private Map emitterMap = new HashMap();public Optional get(Integer userId) { // userId에 해당하는 SseEmitter를 emitterMap에서 가져옴 SseEmitter result = emitterMap.get(getKey(userId)); // 가져온 결과를 로그에 기록 log.info("Get Emitter from Redis {}", result); // 결과를 Optional로 감싸서 반환 return Optional.ofNullable(result);}private String getKey(Integer userId) { return "emitter:UID:" + us..

스프링부트 3.x 연구

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes Spring Boot 3.0 Release NotesSpring Boot helps you to create Spring-powered, production-grade applications and services with absolute minimum fuss. - spring-projects/spring-bootgithub.com v3.0자바17지원 , Graal 22.3이상(상당한 메모리 및 시작 성능개선) , Native Build Tools Plugin 0.9.17 이상 필요, 스프링 시큐리티 6.0, 스프링인터그레이션 6.0, 그래프ql 1.1 , ..

스프링부트 2.x 연구

v2.0https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release-Notes Spring Boot 2.0 Release NotesSpring Boot helps you to create Spring-powered, production-grade applications and services with absolute minimum fuss. - spring-projects/spring-bootgithub.com 자바8 이상, 톰캣 8.5 , 플라이웨이5, 하이버네이트 5.2, 타임리프 3 , 스프링웹플럭스(비차단 반응형대안), 그래들4.x이상, 코틀린1.2.x 지원, 속성으로 redis기본값구성, 애니메이션 gif배너지원 http..

스프링부트 버전 1.x 대 연구

v1.1메이븐을 사용하여 실행, 타임리프, JSP  지원, 지표 및 엔드포인트 , Flyway 로 이제 데이터베이스 마이그레이션에 대한 자동구성제공v1.2이메일 지원, 배너속성( ${}) 지원, 잭슨 커스터마이징 , JNDI( datasource 및 JMS빈 모두조회) v1.3스프링4.2이상이 필요, 스프링시큐리티4.0 이상, 라이브리로드 지원, 캐시자동구성 지원, 세션테이터 저장(server.session.store-dir) , 고급 http 세션구성(server.session.*) , 엔드포인트( /logfile , /flyway, /liquibase 추가 및 CORS 지원) , .env 지원v1.4하이버네이트5.0이상 , 서버헤더( 속성이 설정되지 않은면 응답헤더는 설정안됨) , 스프링4.3이상 ,..

스프링을 적용한다는건...

[요구사항]- 해외직구를 위한 원화 결제 준비 기능 개발- 주문번호, 외국통화종료, 외국통화기준 결제 금액1. 기본로직 환율 가져와서, 환율 값 계산하고, 환전된 원의 유효기간을 구한다.여기서 url에서 가져오는 환율정보를 가져오는 기술적 로직과업무적로직은 향후 추가 될 수 있다. 그래서 아래와 같이 구조 개편을 한다.2. 인터페이스 객체지향 의존성역전원칙 적용 ( Object Factory - IOC/DI도 적용) PaymentService 에 ExRateProvider를 구현하고 환율 구하는 부분을 클래스로 따로 뺀다. 이렇게 하면 환율 적용하는 방식의 변동에 유연하게 대응할 수 있다. (환율 수수료 무료 등 정책에 유연한 대응)  3. 객체지향설계 원칙중 개방폐쇄원칙을 적용해서 변하는 부분과 변하지..

JPA 간단정리3

김영한님의 자바ORM 표준 JPA 프로그래밍책으로 공부를 한다. 책으로 공부하는 것도 좋은듯하다. 스프링데이터 예제 프로젝트로 배우는 전자정부 표준데이터베이스 프레임워크~! jpa는 CRUD를 생성해주므로 생산적이다. 객체 설계중심으로 db와 연동가능하다. jpa는 상속,연관관계,객첵그래프탐색, 패러다임의 불일치 문제를 해결해준다. 객체지향을 통한 성능최적화를 할 수 있으나 잘 못 사용하면 n+1문제가 나타난다. JPA는 통계쿼리 같이 복잡한 쿼리보다는 실시간 처리용 쿼리에 더 최적화 되어 있다.김영한님 강의도 있지만... 책으로 하는게 편하다.https://www.youtube.com/watch?v=ZgtvcyH58ys jpql은 엔터티 객체를 대상으로 쿼리한다.(entity 클래스와 필드) jpql ..

스프링시큐리티6(OAuth2)의 속도, 자원절감, 보안향상, 권한조정의 이점

스프링 시큐리티는 버전 1~6까지 있는데, 2에서부터 SpringSecurity라는 이름으로 설정되었다. 버전 2가 되면서 공실상부 스프링의 시큐리티 담당으로 인정받은 것이다. 당연히 이 당시에는 xml 기반으로 이루어졌다. 3부터 Java Config, OAuth2의 지원이 추가되었다. OAuth는 요청마다 서명 생성하는데(요청토근,액세스토큰), OAuth2 는 더 단순한 토큰 기반인증으로 액세스 토큰을 사용하여 액세스에 접근한다. SSL/TLS사용이 필수라서 전송 중 데이터의 기밀성과 무결성을 보장한다. 확장성도 있어서 안쓸 이유가 없다.그리고 인증에 있어서 빅테크를 활용의 지평을 넓히면서 SpringSecurity의 위상이 높아졌다.  4부터 드디어 스프링부트와 통합되었다. 쓰기 편해졌다. 5에서는..

클라우드시대에 2025년부터 지원 끊기는 이유 WebFlux(Spring5), 클라우드 시대에 절약과 함께 빛나는 AOT엔진의 Spring6 ~!

SpringMVC는 전통적인 동기형이다. 그러나 스프링5에서 도입된 WebFlux는 새로운 웹프레임워크로, 비동기 및 논블로킹 애플리케이션을 개발할 수 있다. WebFlux는 리액티브 프로그래밍 모델을 기반으로 하여, 고성능,확장성, 효율성을 요구하는 어플리케이션에 적합하다. 즉, MSA,함수형프로그래밍으로 간결한 코드, 논블로킹 I/O로 동시에 더 많은 처리, Netty, jetty,tomcat 등 다양한 서버엔진이 있다. 결국 WebFlux는 실시간, MSA, 스트리밍 어플리케이션에 적합하다. 결국 스프링5는 실시간,MSA,스트리밍 등 분업화와 실시간 및 대용량 처리에 적합하다.스프링6으로 넘어가면서 자바17이 강제되고, AOT엔진으로 애플리케이션 시작시간 단축하고 메모리 사용량을 줄인다. 그리고 j..

자바의 희망 구독/서브모델의 Kafka , 대용량처리 관련 캐쉬하는 Redis, 장애예방 CircuitBreaker, 장애대응책 RetryConfig

1. Redis Redis를 보다보니까 잘 변하지 않는데이터, 즉 약국 검색시에 약국위치 같은 거를 저장하고 있는 것이다. 약국의 이름과 위치는 자주 바뀌지 않는다 그러므로 이런 데이터 중에 자주 조회하는 데이터를 Redis로 캐싱해서 저장하면 궂이 DB까지 안가도 된다. 이렇게 Redis는 비동기 메시지큐로 대규모 병렬 분산처리가 가능해서 메시지큐 역할도 할 수 있다.2. KafkaKafka는 구독/서브 모델이다.생산자와 소비자가 있고,Topic(주제)이 있다. 이를 통행 생산자와 소비자 사이에 발생하는 대용량 실시간 스트리밍을 할 수 있다. 이러한 메시지 브로커 역할은 이벤트 기반 아키텍처에 기반한다. 이것은 메시지 큐와 다르게, 라우팅도 할 수 있고 다양한 패턴으로 전송할 수 있다. 보통 블로그나 ..

스프링 기본개념과 변천사 그리고 스프링버전5이상 혹은 스프링부트3의 필요성에 관하여

스프링은 DI, IOC, AOP의 기본개념이 있다. 사실 자바는 New해서 만들어서 static main 메소드에서 제어한다. 그러나 스프링에서는 그것을 프레임워크가 다 제어한다. 이것은 프로그래머가 아닌 프레임워크가 관리하기에 IOC라는 역전제어가 일어난다. 스프링부트에서 이러한 것들을 참으로 편리하게 application.properties에서 거의 관리할 수 있게 하기에서, 수많은 xml 파일로 IOC설정하는 것들이 필요 없어진다.     DI로 인해서 자바는 의존성 주입이라는 것을 통해 객체지향 프로그래밍을 쉽게 할 수 있다. 파이썬 언어는 것은 하나의 파일 개념으로 프로그래밍 하기 편하다고 할 수 있다. 그러나 공장형태의 조립개념이라면 이러한 의존성 주입의 객체지향은 참으로 편리한 프로그래밍 방..

스프링부트3 백엔드 개발자 되기 2 편(TDD, RESTful)

1편에서https://iamipro.tistory.com/502 스프링부트3 백엔드 개발자 되기(신선영 지음) - 1. 스프링부트 입문기초신선영 리멤버 백엔드 개발자님의 책이다.shinsunyoung.tistory.com 운영중이고 깃헙도 그렇다.https://shinsunyoung.tistory.com/ 해어린 블로그공블로그shinsunyoung.tistory.comhttps://github.com/shinsunyoung shinsunyoung - Oiamipro.tistory.com 사실 Test 인 Junit 빼고는 나머지는 익히 다 안것이었다.개발을 TDD로 해본적이 없어서 저번 항해플러스에서 많이 애먹었는데백엔드 입문 기본에 TDD식 기본이 나온다.@AutoConfigureMockMvc@Spri..

스프링부트3 백엔드 개발자 되기(신선영 지음) - 1. 스프링부트 입문기초

신선영 리멤버 백엔드 개발자님의 책이다.shinsunyoung.tistory.com 운영중이고 깃헙도 그렇다.https://shinsunyoung.tistory.com/ 해어린 블로그공블로그shinsunyoung.tistory.comhttps://github.com/shinsunyoung shinsunyoung - Overviewshinsunyoung has 25 repositories available. Follow their code on GitHub.github.com 이책을 사서 한번 보다 말았는데 다시 본다구 첫 입문인 스프링4.0~5.0 대의 책을 복습하고 봐서 그런지스프링 6.0 을 보는데 이해가 좀더 잘 되는 것 같았다.  클라이언트,서버,RDB,SQL,NoSQL, IP,Port, Libr..

자바8 , 11, 17 간단 정리

스프링 5에서 자바8강제하는데자바 8은 람다, 스트림, 펑션, 옵셔널, 날짜 등이 큰 변화점이고, // 람다식 사용 일회 스레드 new Thread(()-> System.out.println("일회용 스레드 생성")).start(); // 람다식 Runnable runnable = () -> { System.out.println("test"); }; // 삼항식에 람다식 적용 //(x,y) -> x list = Arrays.asList("a", "b", "c");; // 스트림 list.stream() .filter(s -> s.equals("a..

스프링 버전 4와 5의 차이 정리

Spring 4의 주요 특징Spring 4는 2013년 12월에 릴리스되었으며, 다음과 같은 주요 기능을 포함하고 Java 8 지원, Spring WebSocket, RestController , Groovy Bean 정의, 일부 Java EE 7 지원하는 특징이 있다.Spring 5의 주요 특징Spring 5는 2017년 9월에 릴리스되었으며, Spring 4에 비해 많은 개선 사항과 새로운 기능이 포함되어 있다.Reactor 기반의 리액티브 프로그래밍 지원:Spring 5는 Project Reactor를 기반으로 리액티브 프로그래밍을 지원합니다.Flux와 Mono API를 통해 비동기식 및 논블로킹 프로그래밍 모델을 제공합니다.Spring WebFlux:Spring WebFlux는 비동기 및 논블로킹..

OAuth와 SSR

OAuth (Open Authorization)는 웹사이트나 애플리케이션이 사용자의 비밀번호를 공유하지 않고도 다른 애플리케이션 또는 웹사이트에 제한된 자원 접근 권한을 부여할 수 있도록 하는 개방형 표준으로 즉, OAuth는 안전한 위임(access delegation)을 위한 프로토콜 규약이다.주요 개념자원 소유자 (Resource Owner): 자원을 소유한 사용자입니다. 예를 들어, 사용자가 Google Drive에 저장된 파일을 가지고 있다면, 사용자가 자원 소유자클라이언트 (Client): 자원 소유자가 접근을 허락한 제3의 애플리케이션입니다. 예를 들어, 사용자가 자신의 Google Drive 파일에 접근하도록 허용한 웹 애플리케이션이 클라이언트자원 서버 (Resource Server): 보..

log와 junit5 ,validation 그리고 interceptor

junit5은 TDD방식으로 개발하는데 있어서 견고하고 탄탄한 구조의 코드를 작성할 수 있게 해준다. 기본적으로 @Test 어노테이션으로 테스트하는데 추가 조건으로 아래 조건을 주어서 테스트가 되고여러 입력값에 대해 동일한 파라미터화된 테스트도 지원이 된다.import org.junit.jupiter.params.ParameterizedTest;import org.junit.jupiter.params.provider.CsvSource;import static org.junit.jupiter.api.Assertions.*;public class ParameterizedTestExample { @ParameterizedTest @CsvSource({ "1, 1, 2", "..

java 파일 다운로드/ 엑셀및 pdf 그리고 소켓통신 그리고 JSON 복습

package com.example.demo.controller;import org.springframework.beans.factory.annotation.Value;import org.springframework.core.io.InputStreamResource;import org.springframework.http.HttpHeaders;import org.springframework.http.HttpStatus;import org.springframework.http.MediaType;import org.springframework.http.ResponseEntity;import org.springframework.stereotype.Controller;import org.springframewo..