Proxy란?프록시(Proxy)는 대리자 라는 뜻으로,클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 역할을 한다.대상 객체의 기능을 대신 수행하는 대리 객체를 사용하는 것이 프록시!프록시가 실제 대상인 것처럼 위장 ➡️ 클라이언트는 구체 클래스를 알 필요가 없어짐클라이언트의 요청을 받아서 원래 요청 대상에게 바로 넘겨주지 않고, 다양한 부가기능 지원 가능Proxy 패턴특정 객체로의 접근을 제어하는 대리인(특정 객체를 대변하는 객체)을 제공 Proxy와 RealSubject 모두 Subject 인터페이스를 구현⇒ RealSubject 객체가 들어갈 자리면 Proxy를 대신 넣을 수 있음.→Proxy가 RealSubject로의 접근을 제어하는 역할을 해줄 수 있다Rea..
spring
Resilience4jResilience: 회복 탄력성, 장애 내성Resilience는 보통 심리학 쪽에서 사용되는 언어로, 충격이 있을 때 빠르게 피해를 극복하는 성질을 이야기 한다. 어플리케이션 관점의 충격은 장애를 말할 수 있다. 즉 레질리언스는 장애에 대한 내성을 가지는 것이다.하나의 API 서버에서 여러 API 서버나 데이터베이스를 호출하여 기능을 수행한다고 했을 때, 일부 서버에서 장애가 발생하여 에러가 날 수 있다. 이 장애의 시간이 길든 짧든 우리의 API 서버가 영향을 받지 않도록, 받아도 최소한의 영향만 받도록 만들어 줄 수 있는 것이 Resilience4j 이다.📌 비슷한 의미의 용어Resilience: 장애내성Fault Tolerance: 결함 내성, 결함 허용, 장애 허용Faul..
스프링에서 MSA 모식도 각각의 경로에 대해 비즈니스 로직을 각각의 스프링 부트 서버로 띄울 것이다. 특정 주소로 오면 경로를 따라 게이트 웨이가 특정 컨트롤러를 가진 서버에 데이터를 전달한다.여러개의 비즈니스 로직에 대한 url 요청을 받는 것이 아닌 한개의 url 요청을 게이트 웨이가 받아서 해당 요청을 나누어 주는 게이트웨이가 있는 것이다. 이렇게 게이트웨이와 스프링부트 어플리케이션 만으로도 시스템을 구축할 수 있다. 유레카 서버는 각각의 스프링부트 어플리케이션이나 게이트웨이가 활성화된 상태로 떠 있는지 어떤 정보를 가지고 있는지 모니터링 할 수 있는 서버다. 등록되어 있는 모든 서버 정보들이 뜬다. 뜨게 하기 위해선 원하는 서버를 등록해주어야한다. 등록된 서비스가 유레카 클라이언트라고 불린다. 유..
강의에 따른 댓글을 불러오는데 댓글의 대댓글이 몇개인지 함께 들고오고 싶었다. 먼저 SQL의 로직은1. join: Comment(as c)와 Comment(as child)를 c.id = chile.parentId AND c.lecture = lecture의 조건으로 join 한다.2. group by c.id를 해준다.3. c.parentComment가 null 인 c와 count(child)를 select4. pageable를 이용하거나 offset이용그냥 pageable를 사용하는 것과 직접 limit offset을 사용하는것에 실행되는 쿼리를 비교하고 싶어서 작성한 글이다.Entity@Entity@Getter@Table(name = "comments")@NoArgsConstructor(access..
인력 비용처음 프로젝트를 개발하면 버그는 없는지 예상한대로 결과를 잘 내놓는지 테스트가 필요할 것이다. 이런 테스트를 사람이 수동으로 직접 할 수 있겠지만 후에 기능을 추가하고자 할 때 기존 프로덕션 코드와 겹치는 부분이 발생한다면 해당 부분의 기존 코드를 다시 검증해야할 것이다. 코드는 점점 확장을 하게 된다. 확장이 될 때 마다 검증을 수동으로 새로 해야한다면 인력비용이 증가할 것이다. 사람이 테스트사람은 실수를 할 수 있는 가능성을 지니고 있다. 수동으로 테스트하면 누락 케이스가 발생할 수 있고 그것이 치명적인 결함이 될 수 있다. 시간이 지날 수록 고도화되고 확장되면 커버할 수 없는 영역이 발생경험과 감에 의존늦은 피드백유지보수 어려움SW 신뢰도 낮아짐등과 같은 문제가 생기게 된다.테스트 목적빠른..
문제org.mockito.exceptions.base.MockitoException: Cannot mock/spy class net.nurigo.sdk.message.service.DefaultMessageServiceMockito cannot mock/spy because : - final class@Mock을 사용해서 mocking을 하려고 했는데 해당 클래스가 final 클래스여서 mocking이 불가능한 상태였다. 해결하기 What's new in Mockito 2Most popular Mocking framework for unit tests written in Java - mockito/mockitogithub.com위의 Mockito2를 사용하면 이를 해결할 수 있다. 여기서 sample도 ..
문제org.hibernate.LazyInitializationException: could not initialize proxy [com.zb.deuggeun.programschedule.entity.ProgramTimeSlot#2] - no Session org.hibernate.LazyInitializationException은 Hibernate이 지연로딩된 엔티티를 초기화할 때 발생하는 예외다.일반적으로 Hibernate 세션이 종료된 후에 지연로딩된 엔티티를 사용하려고 할 때 발생한다. 해결하기Hibernate 세션 유지지연로딩된 엔티티를 사용하는 동안 Hibernate 세션을 열어두는 것이 가장 간단한 방법이다.이렇게 하려면 트랜잭션 범위에서 세션을 열고, 트랜잭션이 끝나기 전에 세션을 닫으면 ..
문제 Failed to convert Message contentorg.springframework.amqp.support.converter.MessageConversionException: Failed to convert Message content at org.springframework.amqp.support.converter.AbstractJackson2MessageConverter.createMessage(AbstractJackson2MessageConverter.java:463) at org.springframework.amqp.support.converter.AbstractMessageConverter.toMessage(AbstractMessageConverter.java:70) at org..
지난번에는 rabbitMQ를 docker에 설치하고 rabbitMQ 관리 콘솔로 실행되는 것 까지 해보았다. [RabbitMQ] docker에 설치하고 springboot에서 사용하기 내가 RabbitMQ를 사용하고자 하는 이유 프로젝트에서 알림의 기능을 구현하고자 했다. 특정 시간마다 스케줄링으로 여러명에게 알림을 보낼 생각이기 때문에 여러명에서 순차적으로 알림을 보내 jepa.tistory.com 오늘은 rabbitMQ를 위한 config파일을 만들고 코드를 이용해 메시지를 발행해보고자 한다. RabbitMqConfig /** * 실행하면 RabbitMQ에 메시지 큐를 생성하고 큐를 통해 메시지 송신, * * 큐에 쌓인 메시지를 받아 출력하는 로그를 확인할 수 있다. */ @Configuration ..
나의 오류 내용 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration': Injection of autowired dependencies failed ... Caused by: java.lang.RuntimeException: Could not postProcess org.springframework.security.config.annotation.web.builders.WebSecurity@443d94ae of type class org.sp..