Java/Spring 55

[Spring] RestTemplate

카카오 OAuth 로그인을 구현해 보면서, RestTemplate을 사용하게 되었는데 RestTemplate이 무엇인지와 동작원리 등에 대해 정리해보려고 합니다.  RestTemplateHTTP 통신을 위한 도구로 Rest API 웹 서비스와의 상호작용을 쉽게 할 수 있도록 도와주는 도구HTTP 메서드를 제공하고 원격 서버와 동기적, 블로킹 방식으로 Json, xml 방식으로 다양한 데이터 형식으로 통신합니다.Spring Framework의 핵심이 제공하는 동기식 RestClient간단하게 외부 도메인과 Rest API을 제공하는 서비스와의 상호작용을 쉽게 해주는 도구로 해석하면 될 것 같은데요. 이제 동작 원리에 대해 설명드리도록 하겠습니다.  RestTemplate FlowApplication이 Re..

Java/Spring 2024.11.22

[Spring] Spring Cloud Gateway (+ Eureka Server)

오늘은 MSA에서 빠질 수 없는 개념인 API Gateway의 역할을 수행하는 Spring Cloud Gateway에 대해 포스팅하려고 합니다. 더불어 Microservice의 IP, Port 정보들을 저장 및 관리해 주는 Eureka Server도 함께 알아보도록 하겠습니다. Spring Cloud Gateway에 대해 알아보기 전, API Gateway가 무엇인지 설명드리겠습니다. API Gateway비즈니스 로직이 아닌 기타 관심사들을 처리하는 역할분산 시스템 또는 마이크로서비스 아키텍처에서 매우 중요한 역할을 하는 컴포넌트입니다.클라이언트와 백엔드 서비스 사이에 위치하는 리버스 프록시 역할을 하는 서비스입니다. 클라이언트 요청을 여러 마이크로서비스로 분배하고, 이를 중앙에서 관리하는 단일 진입점입..

Java/Spring 2024.10.26

[Spring] Spring Webflux

오늘은 비동기 기반의 반응형 프로그래밍을 위한 Framework인 Webflux에 대해 알아보려고 합니다. Webflux를 사용하기 위해서는 Reactive Stream, Mono, Flux, r2dbc 등 다양한 개념을 인지하고 있어야 하는데, 이러한 개념들을 대략적으로 정리해 보도록 하겠습니다.   WebFlux에 근간이 되는 Reactive Programming 방식에 대해서 설명드린 후, WebFlux에 대해 알아보도록 하겠습니다. Reactive Programming (반응형 프로그래밍)데이터의 흐름과 변경사항의 전파에 중점을 둔 선언적 프로그래밍 패러다임패더라임: 어떤 한 시대의 사람들의 견해나 사고를 근본적으로 규정하고 있는 테두리로서의 인식의 체계, 또는 사물에 대한 이론적인 틀이나 체계를..

Java/Spring 2024.10.23

[Spring] org.springframework.orm.jpa.JpaSystemException: Error attempting to apply AttributeConverter

오늘은 에러 로그 관련해서 포스팅을 진행하려고 합니다. 개발 도중에 발생한 Error log인데, Error log를 먼저 보여드리고 분석한 내용에 대해 설명드리겠습니다. Error logorg.springframework.orm.jpa.JpaSystemException: Error attempting to apply AttributeConverter; nested exception is javax.persistence.PersistenceException: Error attempting to apply AttributeConverter at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(E..

Java/Spring 2024.09.26

[Spring] @Transactional isolation level, propagation level, timeout

오늘은 @Transactional annotation의 isolation level, propagation level, timeout에 대해 설명드리도록 하겠습니다.  먼저 @Transactional annotation이 무엇인지에 대해 알아본 후에, 핵심적인 내용들을 설명드리겠습니다.  @Transacational@Transactional은 DB 작업에서 Transaction을 관리하는 데 사용되는 annotationTransaction: 단일 작업 단위로 실행되는 하나 이상의 데이터베이스 작업 시퀀스, 더 이상 쪼갤 수 없는 최소 작업 단위Transcation은 commit으로 성공하거나 rollback으로 작업을 취소하고 이전 상태로 복원해야 합니다.commit: Transaction이 끝나는 시점..

Java/Spring 2024.09.23

[Spring] Spring Security 동작 원리 파악 (id, pw 기반의 basic auth 방식)

Spring Framwork 기반 Application에서 Spring Security를 적용하여 로그인 기능을 구현하곤 합니다. 기능 구현 방식에 있어, 전통적인 방식인 id, pw 기반의 세션 인증 방식이 있습니다. 오늘은 이 방식에 대해 상세히 정리해 보도록 하겠습니다. 이 포스팅은 Jwt, OAuth 기반의 인증에 대한 내용과는 별개의 내용이므로 참고 부탁드립니다. 우선 Spring Security의 개념과 관련 용어들에 대해 간단히 설명드리도록 하겠습니다. Spring Security Spring Security는 스프링 기반 애플리케이션의 보안을 담당하는 스프링 하위 프레임워크입니다.보안과 관련해서 체계적으로 많은 옵션들을 제공해 주기 때문에 개발자의 입장에서는 보안 관련 로직을 직접 작성하지..

Java/Spring 2024.09.06

[Spring] org.hibernate.AssertionFailure: null id in entry (don't flush the Session after an exception occurs)

(conn=65) Duplicate entry '13-11.1.1.81' for key 'device_id_ip_UNIQUE'org.hibernate.AssertionFailure: null id in com.piolink.cc.app.ndm.domain.Host entry (don't flush the Session after an exception occurs) 해당 에러가 어떠한 에러인지 간략하게 설명드리겠습니다. try ~ catch 문에서 save 과정을 거칠 때, unique key 제약 조건을 위반하여 첫 번째로 Hibernate Exception인 DataIntegrityViolationException이 발생하게 됩니다.  이후 JPA Save가 실패하면서 세션이 초기화되어야 하지만, H..

Java/Spring 2024.09.04

[Spring] Spring Batch Architecture & Component

오늘은 스프링 배치에 대해서 포스팅하려고 합니다. 스프링 배치가 무엇이고 왜 사용하는지에 대해 설명드리겠습니다.Spring Batch는 대용량 데이터를 처리하기 위한 프레임워크(이 작업을 "자동화"하여 "시스템의 부하를 줄이고 효율적인 데이터 처리"가 가능하여 사용)로서, 스프링 프레임워크 위에서 동작합니다. Batch 작업이라고 하면, 논리적, 물리적으로 관련된 일련의 데이터를 그룹화하여 일괄 처리하는 작업입니다. Scheduler 기능과는 엄연히 다른 기능인데, Spring Batch에서도 스케줄러 기능과 함께 사용할 수 있습니다.  Spring Batch 특징확장성과 성능: Spring Batch는 대용량의 데이터를 효율적으로 처리할 수 있는 기능을 제공합니다 (멀티스레딩, Chunk 기반 처리, ..

Java/Spring 2024.07.05

[Spring] Ajax 통신에서 Csrf Header, Token 정보를 넘겨주는 방법

오늘은 CSRF(Cross-site request forgery) 공격을 막기 위한 방법에 대해 알아보려고 합니다. 우선 Spring Security에서 csrf 설정을 활성화한다는 전제가 있어야 하고, 이 전제를 기반으로 Ajax Post 요청에서 Request Header에 Csrf Header, Token 정보를 넘겨줄 수 있게 됩니다.  CSRF 공격이 무엇인지 알아보고, 왜 Client의 Request에 csrf 설정을 해줘야 하는지까지 설명드리겠습니다.  CSRF(Cross-site request forgery, 사이트 간 요청 위조) 사이트 간 요청 위조는 웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹 사이트에 요청하게 하는 공격하나의 사례..

Java/Spring 2024.05.29

[Java] ProcessBuilder

회사에서 Selenium Web UI Test를 담당하면서 테스트 격리를 위해 DB를 기존 초기 세팅된 상태로 초기화해야 하는 상황이 생겼습니다. 그래서 처음에는 RDB(MariaDB)와 NoSQL(Elasticsearch)을 세팅하는 docker-compose를 재실행하면 될 거라는 막연한 생각이었지만, 이는 시간이 많이 소모되기에 cmd창에서. sql 파일을 실행하는 방향으로 갔습니다. statement를 이용하여 sql을 실행하는 것도 가능하지만, DB 연결을 맺는 코드를 따로 작성해줘야 했기에 ProcessBuilder 클래스를 활용하게 되었습니다. ProcessBuilder 다른 외부 프로세스를 실행하거나 컨트롤러하는 것을 지원해 주는 Java class 윈도우의 cmd, 리눅스의 sh를 이용하..

Java/Spring 2024.04.02