Spring 91

Spring WebSocket STOMP 채팅 서버 구현하기 (with. JWT, Exception Handling)

===== 채팅서버 구현하기 시리즈 ===== ✔️ [Web-Network] - 채팅 서버 설계를 위한 배경지식 정리 (HTTP, WebSocket, WebRTC) ✔️ [Spring/Spring Boot] - Spring WebSocket 공식문서 가이드 살펴보기 👉🏻 [Spring/Spring Boot] - Spring WebSocket STOMP 채팅 서버 구현하기 (with. JWT, Exception Handling) ✔️ [Spring/Spring Boot] - Spring Data mongoDB + mysql 사용하기 (with. queries) spring 으로 간단하게 채팅기능을 구현해 기록해보고자 합니다. 구현을 중점으로해서 가장 좋은 방법은 아닐겁니다(?) 만들고자 했던 서비스는, 카..

Spring/Spring Boot 2023.06.14

Spring WebSocket 공식문서 가이드 살펴보기

===== 채팅서버 구현하기 시리즈 ===== ✔️ [Web-Network] - 채팅 서버 설계를 위한 배경지식 정리 (HTTP, WebSocket, WebRTC) 👉🏻 [Spring/Spring Boot] - Spring WebSocket 공식문서 가이드 살펴보기 ✔️ [Spring/Spring Boot] - Spring WebSocket STOMP 채팅 서버 구현하기 (with. JWT, Exception Handling) ✔️ [Spring/Spring Boot] - Spring Data mongoDB + mysql 사용하기 (with. queries) spring websocket 공식문서를 따라해보면서 spring 에서는 websocket을 어떻게 사용해야하는지 알아보고자 합니다. 코드는 깃허브..

Spring/Spring Boot 2023.06.01

Spring Security 가이드 (with. Spring boot 3.0) - 스프링 시큐리티란, 동작 과정, 사용 방법, JWT 발급

개발환경은 Spring Boot 3.0.x + Spring Security 6.x 입니다 토이 프로젝트에서 로그인-회원가입 기능을 개발해야하는데 "스프링 시큐리티"를 적용할까 말까 하다가, 이왕 할때 해보자라는 생각으로 "스프링 시큐리티를 적용"해보고자 합니다. 솔직히 프레임워크에 대해서 깊게 공부하고 싶지는 않으니까 "간단, 간단 겉핥기 식 - 기능 구현" 에 초점을 맞춰 정리해볼려구 합니다! 👏🏻 목표는 1. 로그인 성공시 JWT 토큰 반환 + 2. 생성한 User Entity 기반의 회원가입입니다. [목차] 스프링 시큐리티란 스프링 시큐리티 동작과정 스프링 시큐리티 사용 가이드 JWT 사용해서 인증-인가 해주기 (custom 한 jwt filter 생성) 1. Spring Security 란 Spr..

Spring/Spring Boot 2023.05.04

[Spring] restdocs + swagger ui 같이사용하기 (restdocs 문서 자동화)

✨ api 문서화 정리 글 Swagger Spring Rest Docs RestDocs + Swagger-UI 같이사용하기 오느른, 오늘은,, 오늘우리는,,, Spring Restdocs 를 사용해 test 코드로 Ascciidoc 문서조각을 모으고,, 모아서 만든 adoc 문서를 또 편집하고.. html 로 변환하고 이 일련의 귀찮은 과정을 거쳐야하는 Spring Rest Docs 의 단점을 커버하기 위해 Swagger 와 restdocs 를 결합해보겠습니다 ! 👏🏻👏🏻👏🏻 사실 시작은 이러했습니다. 현재 사내에서는 Swagger 만을 사용하고 있기 때문에 프로덕션코드에 API 문서를 위한 코드가 존재하는게 지저분해서 현재 하고있는 토이프로젝트에는 RestDocs 를 적용해 보았습니다. 하지만, 아래처..

Spring/Spring Boot 2023.04.14

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

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

Spring/Spring Boot 2023.03.06

[Spring] querydsl orderby null - 동적 정렬 스킵하기

queryDsl 에서 OrderSpecifier 를 사용하여 동적으로 정렬할 컬럼을 지정할 수 있습니다. (참고) ✨이번 게시글에서는, 동적 정렬 시 특정조건에서는 정렬을 하지않는 방법에 대해서 정리해보겠습니다. 👏🏻 사건의 발단은 이렇습니다. where 절의 BooleanExpression 처럼, null 을 반환하면 조건에 무시될 것이라 생각해서 OrderSpecifier 에서 조건에 맞지않으면 null 을 반환하여 orderBy 를 무시하자라는 무식생각으로 접근을 해보았습니다. public List getSortFiledEntityList(String field) { return queryFactory .select(..) .from(qEntity) .orderBy(sortByField(field)..

Spring/Spring Boot 2023.02.03

[Java] LocalDate.now() mocking - 정적 메소드 테스트 하기

이번 포스팅에서는 LocalDateTime 혹은 LocalDate 의 now() 를 테스트를 위해 mocking 하는 방법에대해 공부해보고자 합니다. (포스팅에 나오는 모든 코드는 회사 코드의 형식을 유지하면서 수정한것이기 때문에 뭔가 이상할 수 도 있습니다. 👍) 📌 얼마전에 오늘 일자로 특정 날짜가, 몆 주차이인지 계산하는 로직을 작성하여 이를 테스트하고자 했습니다. 하지만 막상 테스트를 짤려하니, LocalDate.now() 메소드는 static 메소드이긴 때문에 목킹하여 항상 성공하는 테스트 케이스를 작성하는데에 어려움이 있었서, 찾아보니 2가지 방법을 찾을 수 있었습니다. 첫번쨰는, Mockito를 이용하여서도 static method 를 mocking 하는 것이고 (PowerMock 을 이용해..

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

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

[Junit] @ParameterizedTest 객체에 값을 자동으로 넣어주는 Auto Param - @autosource

지인이 테스트 코드를 짤 떄, 파라미터의 값을 자동으로 세팅해주는 요상한게 생겼다고 해서 사용을 해보았습니다. 강남언니 CTO 이규원님이 만든 오픈소스라고 하더군요 AutoParams는 AutoFixture에서 영감을 받은 Java의 매개변수화된 테스트를 위한 임의 테스트 데이터 생성기입니다. Auto Param 이 제공하는 기능은, 매개변수에 값을 자동으로 주입해줍니다. 리터럴 변수, Enum, Object, Generic, Collection, Primitive Type Stream 까지 지원을 해줍니다.. (굉장해) @AutoSource 사용해보기 @ParameterizedTest 와 @AutoSource 어노테이션을 사용이용해서 간편하게 사용할 수 있습니다. Auto Param을 사용하기 위해서는..

[Spring] JPA 영속성 컨텍스트의 시작 범위 (Lazy Loding proxy 객체 조회 시 에러가 나는 이유)

many to one 관계에 있는 엔티티를 jpa 즉시로딩에서 지연로딩으로 바꾸었더니 생각치 못했던 곳에서 생긴 문제의 기록입니다. 결론 더보기 jpa 지연로딩의 proxy 객체를 호출할 떄면, proxy 는 영속성 컨텍스트에서 데이터를 조회합니다. 즉 준영속 상태라면 proxy 객체와 실제객체를 매핑시킬 수 없습니다. 영속성 컨텍스트의 생명주기는 트랜잭션의 생명주기와 동일합니다. 📌 문제 상황 회사 코드에서 N+1 문제가 발생하는 부분이 있어 몇일 전 가벼운 마음으로 @ManyToOne 관계에 있는 엔티티를 Eager 로딩에서 Lazy 로딩으로 바꿔 주었다. 어치파 지연로딩으로 바꾼다고 하여도, 객체를 불러올 때 Proxy 객체에서 필요하면 엔티티를 조회하기 때문에 진정한 N+1 문제의 해결방안은 아니..

Spring/Spring Boot 2022.12.15
반응형