Development/Diary (32) 썸네일형 리스트형 [Diary] @SpringBootApplication의 @ComponentScan 범위 문제 상황JwtUtil 클래스를 Bean에 등록했음에도, autowire을 할 수 없다는 경고가 자꾸 나온다.문제 원인: Component Scanning 범위원인이 무엇인지 갈피를 못 잡아서 GPT한테 물어보니, "Component Scanning이 이루어지는 패키지 안에 있음?"이라고 한다.경로를 다시 보니 개발이 이루어지는 domain과 global 디렉토리가 @SpringBootApplication 이 있는 패키지 밖에 있었다.문제 해결해결은 위 두 디렉토리를 패키지 안으로 넣어서 해결했긴 한데, 이 @SpringBootApplication의 Component Scan 범위에 대해 알게 되었다.기본적으로 Component Scan이 이루어지는 범위는 @SpringBootApplication이 적용.. [Diary][Spring] Spring Cloud Gateway와 FeignClient를 같이 사용하면 발생할 수 있는 문제 Spring Cloud Gateway는 비동기 방식의 요청 처리를 지원하는 API Gateway 입니다. 하지만 이와 같은 비동기 환경에서 동기식 HTTP 클라이언트를 사용할 경우 성능 저하나 예상치 못한 문제가 발생할 수 있습니다. 이번 글에서는 Spring Cloud Gateway에서 FeignClient를 사용할 때 발생할 수 있는 문제와 그 해결 방법에 대해 다루어 보겠습니다.문제 상황@Componentpublic class CheckUserRegisterFilter implements GlobalFilter { @Value("${service.jwt.secret-key}") private String secretKey; private final AuthClient authClie.. [Diary] AWS EC2에서 겪은 포트포워딩 문제: 리눅스 네트워크 인터페이스 eth0와 enX0 AWS EC2 인스턴스를 사용하여 웹 애플리케이션을 배포할 때, 퍼블릭 IPv4 DNS 주소를 통해 애플리케이션에 접속할 수 있습니다. 하지만 사용자는 종종 주소 끝에 애플리케이션이 동작하는 포트 번호를 추가해야 합니다. 이 문제를 해결하기 위해 포트포워딩을 설정하여 포트를 입력하지 않으면 자동으로 웹 서버 포트로 리디렉션 하도록 하려 했으나, 네트워크 인터페이스 이름을 잘 못 설정하여 동작하지 않았습니다. 이 글에서는 AWS EC2에서 포트포워딩 설정 중 발생한 문제와 그 해결 과정을 공유하고자 합니다.문제 상황 재현: EC2에 접속하여 포트포워딩 진행포트 번호를 입력하지 않아도 자동으로 접속되기 위해, 80포트로 오는 요청을 8080 포트로 전달하게 하는 포트포워딩 명령어를 다음과 같이 입력하였다.s.. [Diary] 지저분한 Service 메서드 코드 Command DesignPattern 적용기 이 글에서는 설문조사 웹 애플리케이션 개발 프로젝트에서 서비스 레이어 메서드의 로직이 가독성이 떨어지고, 유지보수가 어려운 상황을 개선하기 위해 Command 디자인 패턴을 적용한 경험을 공유하고자 합니다.Command 패턴Command 패턴은 행동 패턴 중 하나로, 요청을 객체의 형태로 캡슐화하여 여러 가지 다른 요청이 나중에 필요할 때 실행되거나 취소될 수 있도록 하는 패턴이다. 이 패턴을 사용하면 요청하는 객체와 요청을 수행하는 객체 사이의 결합을 느슨하게 만들 수 있다.Command 패턴의 핵심 아이디어는 작업을 요청하는 객체를 독립적으로 처리할 수 있게 하는 것이다.Command 패턴의 구성 요소Command 인터페이스:실행될 동작을 정의하는 인터페이스이다. 일반적으로 execute() 메서드를.. [개발 일기][Spring] grafana_session 쿠키 문제와 Custom Login Filter 구현하기 제 프로젝트에서 Spring Security로 구현한 인증 로직에서는, 인증이 필요한 엔드포인트에 접근할 때 JSESSIONID가 쿠키에 포함되어 있는지를 검사하는 로직이 있었습니다. 하지만 같은 도메인에 접근하는 경우, 모든 요청에 쿠키가 함께 전송되기 때문에 문제가 발생했습니다.이 글에서는 grafana를 사용할 때 grafana_session이라는 쿠키의 path가 '/'로 되어있어서, Spring Security Session Filter에서 쿠키 검사 시 인증이 되지 않았던 문제 상황과 해결 과정을 소개합니다.문제 상황위처럼 FilterChain에서 permitAll()이 설정되어 있는 링크를 접속했더니 이런 예외를 발생시켰다.아니 왜 permitAll이 설정되어 있는 엔드포인트 접근인데 인증이.. [Diary] Spring 비관적 락(Pessimistic Lock)과 MVCC 동작의 조합으로 발생할 수 있는 이상 현상(+Snapshot) 이 글에서는 비관적 락을 사용하였음에도 멀티 스레드 환경에서 원하는 결괏값이 나오지 않아 발생한 문제 상황에 대해 작성하고자 합니다.문제 상황: 한 스레드가 새로운 레코드를 Insert 하고 다른 스레드가 findAll() 했을 때 새로운 레코드를 읽지 않는다?문제 재현UserTest@Entity@Getter@Setterpublic class UserTest { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(nullable = false) private String username;}UserTestRepository@Repositorypublic interface UserTestRepos.. [Diary] Spring 테스트 관리 트랜잭션(Test-managed transactions)과 테스트 생명주기 + 멀티 스레드에서 테스트 문제 Spring에서 테스트 관리 트랜잭션(Test-managed transactions)은 통합 테스트(integration test) 중에 트랜잭션이 자동으로 관리되고, 테스트 메서드가 종료되면 자동으로 롤백되는 트랜잭션입니다. 이러한 트랜잭션은 Spring에서 관리되는 트랜잭션(테스트를 위해 로드된 ApplicationContext 내에서 직접적으로 Spring에 의해 관리되는 트랜잭션)이나 애플리케이션에서 관리되는 트랜잭션(테스트에서 호출되는 애플리케이션 코드 내에서 프로그래밍 방식으로 관리되는 트랜잭션)과는 다릅니다. 메서드 수준의 생명주기 메서드(예: JUnit Jupiter의 @BeforeEach 또는 @AfterEach로 주석이 달린 메서드)는 테스트 관리 트랜잭션 내에서 실행됩니다. 반면 클래.. [개발 일기] Hibernate의 UUID 변환과 PostgreSQL, H2 DB에 저장할 때 동작 + Foreign Key Constraint 개요프로젝트 테스트 환경이 PostgreSQL의 서버를 필수적으로 켜져있어야 테스트가 가능했다.Springboot는 h2 db를 내장하고 있어 PostgreSQL의 의존성을 없애기 위해 새로운 테스트 환경을 만들고 있었다. 문제는 데이터 타입을 UUID로 사용하고 있는 필드에 대해서 아래와 같은 에러가 발생했다.Caused by: org.h2.message.DbException: Data conversion error converting "UUID requires 16 bytes, got 255" [22018-214] at org.h2.message.DbException.get(DbException.java:223) at org.h2.message.DbException.get(DbException.jav.. 이전 1 2 3 4 다음