Spring

    [나날] 동시 요청시 Transaction Propagation 설정으로 인한 CP Deadlock 문제

    [나날] 동시 요청시 Transaction Propagation 설정으로 인한 CP Deadlock 문제

    문제 클라이언트로부터 동시 요청이 들어왔을때, 서버가 잠시동안 정상 동작하지 못하는 상황이 확인되었다. 문제 분석 Grafana 대시보드에 Connection Timeout Count가 증가된 것이 확인되었다. 서비스 특성상 지정된 connection-timeout 내에 처리가 불가능할만큼의 트래픽이 발생하지는 않았을 것이라 생각했고, Deadlock 발생으로 인한 문제를 예상하며 서버 로그를 확인하였다. // 스레드가 DB 커넥션을 요청한 시점으로부터 connection-timeout 만큼 지났을때 발생하는 로그들 HikariPool-1 - Connection is not available, request timed out after 5000ms. [CannotCreateTransactionExcept..

    [Spring] yml 로 DB 연결 시 주의사항 - Access denied for user 'name'@'server' (using password: YES)

    [Spring] yml 로 DB 연결 시 주의사항 - Access denied for user 'name'@'server' (using password: YES)

    문제 application.yml 에 DB 설정을 하고 서버를 실행해보니 아래와 같은 예외가 발생하였다. 비밀번호가 틀렸음을 의미하는 예외이지만, 비밀번호는 정확히 추가했음을 확신할 수 있었다. 해결 과정 여러 시도를 해보고 관련 자료를 찾아본 결과, yml 파일의 특성 문제였다. properties 파일에서는 db password 작성시 별다른 제약이 없지만, yml 파일에서는 대문자, 소문자, 숫자, 특수문자를 포함한 암호 길이 8자 이상으로 설정해야 한다고 한다. mysql에 새로운 계정을 만든 후 해당 계정의 비밀번호를 요구사항에 맞게 설정해주었다, 그다음 새로 만든 계정으로 DB 연결을 시도하니 문제없이 서버가 실행되었다. 출처: https://shlee0882.tistory.com/286

    [Spring] JPA 로 Table 생성시 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near... 예외

    [Spring] JPA 로 Table 생성시 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near... 예외

    문제 상황 스프링 부트를 시작시에 Jpa에서 자동으로 table을 만들어 줄 때 아래와 같은 오류가 발생하였다. 원인 mysql 에는 예약어가 존재한다. 내가 생성하려 했던 table 이름이 mysql 예약어와 일치했기 때문에 예외를 발생시킨 것이다. 아래는 mysql의 예약어 목록이다. ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY BLOB BOTH BY CALL CASCADE CASE CHANGE CHAR CHARACTER CHECK COLLATE COLUMN CONDITION CONSTRAINT CONTINUE CONVERT CREATE CROSS CURRENT_DATE CURRENT_TIME CURRENT_TIME..

    [Spring] Filter + Reflection == AOP

    Filter + Reflection == AOP 가 의미하는 것이 무엇일까? 위의 식이 의미하는 바는 Filter 에 reflection 을 사용하면, Spring의 AOP와 비슷한 효과를 발휘할 수 있 다는 것이다. 원래 Filter 만을 사용한다면 전처리 기능만 유효하다. 하지만 reflection 을 사용하여 호출될 함수를 알아낸 다음 Filter 안에서 호출한다면 후처리 작업까지 가능해진다. 이렇게 된다면 Spring에서 제공하는 AOP 처럼 Filter 로도 전처리, 후처리 작업을 직접 설정할 수 있게 된다. 잘못된 내용에 대한 수정이나, 본문에 대한 어떠한 피드백도 환영하니 댓글로 남겨주시면 감사하겠습니다. ㅎ

    [Spring] ec2로 서버 배포 중 발생한 thymeleaf 에러(Error resolving template)

    [Spring] ec2로 서버 배포 중 발생한 thymeleaf 에러(Error resolving template)

    문제 thymeleaf 를 사용하여 블로그 개발 중, Intelli J 에서는 발생하지 않던 error 가 ec2로 서버를 배포하자 발생하였다. Error resolving template 해결 과정 동일한 상황에서 해당 error가 발생한 사례를 발견하였고, 같은 방법을 적용해보았다. [SpringBoot] thymeleaf 에러(Error resolving template) [SpringBoot] thymeleaf 에러(Error resolving template) thymeleaf 를 사용하면서, Intelli J에서 개발할 때는 이상없이 html 파일을 찾아가며 화면이 노출되었는데, 리눅스 환경(AWS)에서 jar로 build 하고 외부에서 실행하면 아래와 같은 에러를 발생시키면서 dev-jwbl..

    [Spring] Component Scan 범위

    스프링의 Component Scan 범위는 @ComponentScan이 명시된 클래스가 위치한 디렉토리를 포함해서 그 하위 디렉토리들이다. 스프링 생성 시에 @SpringBootApplication 이 main 메서드를 가진 클래스에 명시되어 있고, 이 어노테이션은 내부적으로 @ComponentScan을 포함하고 있다. 따라서 스프링의 기본적인 Component Scan 범위는 해당 클래스가 위치한 디렉토리를 포함한 하위 디렉토리들이 된다. [Spring] @Component와 컴포넌트 스캔 [Spring] @Component와 컴포넌트 스캔 이번 글에서는 @Component와 이 어노테이션이 어떻게 인식이 되며, 어떻게 사용되는지 알아보도록하자. 1. @ComponentScan의 범위 @Componen..

    [Spring] @Configuration 을 설정해줘야 하는 이유.

    스프링으로 프로젝트를 진행하다보면 스프링 컨테이너에 Bean 등록을 위해서 새롭게 클래스를 만든 후에 @Configuration 을 추가해주는 것을 볼 수 있다. 하지만 Bean 등록은 @Bean 을 추가해주는 것 만으로도 가능하다. 그렇다면 어째서 @Configuration 까지 추가해주는 수고를 하는 것 일까? 그 이유는 싱글톤 패턴을 위해서 이다. 스프링에서는 @Bean 설정만으로는 싱글톤을 보장해주지 않는다. 만약 @Configuration 없이 @Bean 만으로 빈 등록을 한다면 아래와 같은 상황이 발생할 수 있다. 만약 @Configuration 이 설정되어 있다면 바이트 조작을 통해서 싱글톤을 보장해주는 프록시 객체를 만들어 스프링 컨테이너에 등록해준다. 잘못된 내용에 대한 수정이나, 본문에..