스프링 27

[디자인 패턴] 구조 패턴 - 프록시 패턴 (Proxy Pattern)

(인프런) 코딩으로 학습하는 GoF의 디자인 패턴 - 백기선, 강의를 보고 정리한 글입니다. 코드는 GitHub 에 있습니다 #1. 객체 생성 관련 패턴 #2. 구조 관련 패턴 #3. 행동 관련 패턴 싱글톤 패턴 팩토리 메소드 패턴 추상 팩토리 패턴 빌더 패턴 프로토타입 패턴 어댑터 패턴 브릿지 패턴 컴포짓 패턴 데코레이터 패턴 퍼사드 패턴 플라이웨이트 패턴 프록시 패턴 책임 연쇄 패턴 커맨드 패턴 인터프리터 패턴 이터레이터 패턴 중재자 패턴 메멘토 패턴 옵저버 패턴 상태 패턴 전략 패턴 템플릿 메소드 패턴 방문자 패턴 ✔️ 프록시 패턴이란 (Proxy Patterns) 특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴입니다. 프록시(Proxy)란 대리자, 대변인의 의미를 가지고 있습니다...

Java/Design Pattern 2023.03.24

[Spring] Exception 예외 처리 - AOP와 @RestControllerAdvice를 이용한 ErrorHandling

이전의 작성된 글을 조금 수정하여, Spring 에서 throw 로 던져지는 예외들을 전역적으로 잡아 처리하는 방법에 대해 설명합니다. 예전 팀프로젝트를 할때 팀원분이 AOP를 이용한 예외처리를 한적이있는데, 후에 다른기업 코테 과제테스트를 하다가, try catch 문을 이용해서 예외처리를 하니 코드가 너무 길어지고 보기가싫어서 @ResControllerAdvice 어노테이션을 이용한 AOP 예외처리 에러핸들링 방법에대해 공부했던 적이 있습니다. 다시 사이드프로젝트를 진행하면서 예전 레거시 포스팅(?) 을 리펙토링한다는 생각으로 작성해봅니다! [목차] Spring 에서 Exception 을 전역적으로 처리하는 과정 @ControllerAdvice 와 @RestControllerAdvice @Except..

Spring/Spring Boot 2023.03.06

[Spring] service 단위 테스트 하기 - DB 와 독립된 테스트 환경 구축 (service unit test)

📌 이번 포스팅의 목적은 "Repository 에 의존하지 않는 Service Test" 와 "항상 성공하는 테스트 환경" 을 구축해보는 것입니다! 지금 사내에서는 service : repository = 1:1 구조로 가고있는데 repository 에서 조회하는 데이터 값의 조건에 따라서 다르게 흘러가는 로직을 테스트하고 싶었습니다. 한마디로 Repository 의 의존도를 가지고있는 Service 레이어를 테스트하고싶었는데 유닛테스트로 빠르게, 데이터베이스에 의존하지 않게 테스트하면서 Mocking 보다는 실제환경과 유사하게 테스트환경을 구축하고 싶었습니다. 👏🏻 즉, 조건을 정리하자면 유닛테스트 테스트에서 Repository 의존도 분리 mocking 말고 실 데이터 사용 항상 성공하는 테스트 작성..

[Spring & Java] 🚀 재고시스템으로 알아보는 동시성이슈 해결방법

인프런 "재고시스템으로 알아보는 동시성 이슈 해결방법" 강의를 보고 정리한 글입니다. 📗 Spring & Java, Mysql, Redis 를 이용합니다 재고시스템을 활용해서, 멀티스레드 혹은 분산환경에서 가변데이터에 접근하는 동시성 문제를 해결하는 내용이 강의에 담겼습니다. 동시성 문제란, 동일한 하나의 데이터에 2 이상의 스레드, 혹은 세션에서 가변 데이터를 동시에 제어할 때 나타는 문제로, 하나의 세션이 데이터를 수정 중일때, 다른 세션에서 수정 전의 데이터를 조회해 로직을 처리함으로써 데이터의 정합성이 깨지는 문제를 말합니다. 📌 강의를 듣고 느낀 점은, 동시성 문제의 근본적인 해결 방법은 가변데이터에 순차적으로 접근할 수 있는 방법을 구상하는 것 이라고 생각했습니다 데이터베이스를 이용한 락 프레..

[Spring DB 1편] (2) 커넥션풀과 데이터소스 이해

인프런 김영한 - 스프링 DB 1 강의를 듣고 정리한 글 입니다. 목차 Connection Pool 이란 DataSource 란 DataSourc 예제 1. 커넥션 풀 이해 이전 게시물의 방법대로 JDBC 를 사용한다면 데이터베이스에 접근할 때 마다 매번 커넥션을 획득해야하고 아래와 같은 불필요한 커넥션 과정을 거쳐야합니다. 커넥션 획득 과정 어플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다. DB 드라이버는 DB 와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW 와 기타 부가정보를 DB 에 전달한다. DB는 ID, PW 를 통해 내부 인증을 완료하..

[Spring Data Jpa] delete(Entity e) vs deleteById 차이

그저 궁금해서 알아보는 jpa delete 와 deletById 의 차이점 결론부터 말하면 똑같다. deleteById 는 findbyId + delete(entity e) 의 과정이 합쳐진 메소드라고 볼 수있습니다. 👏🏻 두 메소드의 차이점은 deleteById를 사용하면 내부적인 findById 조회 시 값이 없을 경우 EmptyResultDataAccessException 이 발생한다는 점 입니다. 따라서 엔티티조회시, 커스텀한 익셉션을 떨어트려 메세지를 담고싶다면 delete 를 사용하는게 마음이 더 편하다..? public Notice getNotice(final Integer idx) { return noticeRepository.findById(idx).orElseThrow( () -> ne..

Spring/Spring Boot 2022.09.26

JPA DTO PROJECTION - 클래스 기반, 인터페이스 기반

jpa 로 데이터를 불러올때, dto 혹은 엔티티말고 다른 무엇인가로 데이터를 담는방법 = 프로젝션 하고싶은 것 queryDsl 을 사용하지 않고 간단하게 jpa 만을 사용해서 dto를 담고싶었습니다. interface 기반의 dto 프로젝션이 가능하다는 것을 알고 있지만 재사용성을위해 dto class 그대로 사용하고싶었습니다. 문제 하지만 컬럼명이 맞지않아서 오류가 났고 이를 해결...해야함 인터페이스 기반이 아닌 클래스 기반 프로젝션을 할 때 에러가 남 no converter found capable of converting from type [org.springframework.data.jpa.repository.query.abstractjpaquery$tupleconverter$tupleback..

Spring/Spring Boot 2022.09.15

[Spring] jwt란 - jwt 내부구조, 동작과정, 스프링에서 파싱하기

같이 보면 좋을 연결된 포스팅들 ✔️ Spring Jwt Refresh Token - 인증 인가의 흐름 👉 [Spring] jwt란 - jwt 내부구조, 동작과정, 스프링에서 파싱하기 ✔️ [Spring] Spring JWT 인코딩, 디코딩 하기 - Java Json 파싱 이전 포스팅에서 인증과 인가의 흐름, 인증하는 방법들에 대해 공부를 해보았고 이번에는 실질적으로 자주 사용하고 사용되는 JWT 토큰에 대해서 조금 더 자세하게 공부해 보고자 합니다. JWT란 👏🏻 JWT는 Json Web Token의 약자로, 단어 그대로 Json 기반의 Web Token입니다. 발급된 토큰값을 Json 객체로 변환시켜 client에게 전송해주는 것을 말합니다. JWT는 JWS(Json Web Signature) 와 J..

Spring/Spring Boot 2022.08.18

[Spring] 스프링 부트 JPA 페이징 성능 개선 - querydsl 페이지네이션(오프셋 페이징, 커서 페이징, querydsl 정렬)

JPA N+1 문제를 해결했으니, 이제 페이지네이션 성능개선을 해볼려고 한다. https://thalals.tistory.com/246 [Spring] 스프링 부트 페이지네이션 (Query, JPA, offset / cursor 페이지네이션) 페이지네이션을 구현해보자!! spring boot 의 JPA를 이용해서 구현을 할 예정이다 페이지네이션을 구하기 위해서는 요롷게 3가지를 생각해 주어야한다. view size : 한페이지에 보여줄 개수 total page : thalals.tistory.com 이전에, 페이지네이션에 대해 공부해 보았을 떄 offset 과 cursor 2가지 방식의 페이지네이션 구현 방법이 존재하고 JPA 페이징 API는 오프셋 기반 방식이라는 것을 확인한 적이 있다. 오늘은, JP..

Spring/Spring Boot 2022.04.10

[Spring/스프링] springboot gradle - XSS 스크립트 오류 해결하기 (with @RequestBody)

프로젝트 댓글에, 누군가 XSS 공격을 해놓았다.. 껄껄껄 이론으로만 알던걸 직접 당해보니 기분이 새롭고 상쾌하다 해결하자!! 1.XSS 란 2. Spring에서 Xss 해결하기 1. XSS 란 Crooss-site Scripting으로, 클라이언트가 입력값으로 악의적인 스크립트 문을 삽입하여, 개발자의 의도대로 동작하지 않게하는 공격을 말합니다. 바로 아래처럼,,..!! ㅠㅠ 2. Spring에서 Xss 해결하기 XSS 공격을 예방하는 방법으로는, 특정문자 치환하기 특정문자 입력시 검사 후, 입력받지 않게하기 모든 body태그에 C:out 입력하기.. 등등 하지만! 네이버에서 이 기능등을, lucy xss servlet filter라는 정의해둔 라이브러리가 존재한다, 이걸 프로젝트에 적용해서 사용해보자..

Spring/Spring Boot 2022.04.05
반응형