[DEV] 기록 170

CORS 개요

CORS (Cross-Origin Resource Sharing) javascript로 요청 시 HTTP Header를 통해 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제 여기서 출처란 프로토콜, 호스트, 그리고 포트의 집합을 의미 포트를 명시적으로 선언할 때는 브라우저 구현에 따라 다른데 explorer의 경우 포트 자체를 무시 서버는 SpringBoot, 클라이언트는 리액트로 구현할 때 포트가 서로 다르므로 프로토콜 및 호스트가 같더라도 CORS 처리 필요 ex) localhost:8080, localhost:3000 출처만 같다면 query parameter 및 path parameter는 상관없음 웹 애플리케이션이 요..

[DEV] 기록 2023.12.21

[SpringBoot] HibernateException: No CurrentSessionContext configured!

개요 HibernateItemWriter를 실행하려는데 아래와 같은 에러가 발생했습니다. No CurrentSessionContext configured! 해결 방법 아래와 같이 application.properties 혹은 application.yml에 설정을 추가하면 해결됩니다. 출처 https://stackoverflow.com/questions/33635453/hibernateexception-no-currentsessioncontext-configured-in-spring-boot HibernateException: No CurrentSessionContext configured! in spring boot I have the following configuration: @SpringBootAp..

[DEV] 기록 2023.12.19

[Spring Batch] Input resource must exist (reader is in 'strict' mode)

개요 Spring Batch를 실행하는데 FlatFileItemReader가 JobParameter를 통해 전달받은 파일을 open() 메서드를 통해 열 때 아래와 같은 오류가 발생했습니다. Input resource must exist (reader is in 'strict' mode) 해결 방법 resource 파라미터에 new PathResource("절대 경로")로 전달하면 위 문제가 해결이 됩니다. 다만, 이 방법은 절대 경로를 전달받을 경우에만 해결이 가능한 방법입니다. 상대경로를 전달 받을 경우 절대 경로를 구하는 메서드를 아래와 같이 구현해야 합니다. 그리고 new PathResource(getReceivedFilePath("전달 받은 상대 경로"))를 resource 파라미터에 전달하면 ..

[DEV] 기록 2023.11.13

[Windows + Docker] Socket fail to connect to host:address=(host=localhost)(port=

개요스프링부트 서버가 도커로 띄운 MariaDB를 접근하는데 아래와 같은 에러와 함께 지속적으로 실패했습니다. Socket fail to connect to host:address=(host=localhost)(port=3306)(type=primary). Connection refused: no further information 위와 같은 에러가 발생해서 도커 컨테이너를 재기동 시도했는데 stop 이후 start가 안되고 아래와 같은 에러가 발생했습니다. Ports are not available: listen tcp 0.0.0.0/3306: bind: An attempt was made to access a socket in a way forbidden by its access permissions..

[DEV] 기록 2023.11.11

[Spring Batch] EL1008E: Property or field 'jobParameters' cannot be found on object of type

개요 스프링 배치 잡을 실행 하는데 Tasklet에서 잡 파라미터를 lazy binding 할 때 아래와 같은 에러가 발생했습니다. [Spring Batch] EL1008E: Property or field 'jobParameters' cannot be found on object of type 원인 및 해결 방법 Tasklet 메서드에 @StepScope 어노테이션을 부여하지 않아서 발생한 문제였습니다. @Bean 어노테이션과 함께 @StepScope 어노테이션을 부여하면 깔끔하게 해결이 됩니다! * 저 같은 경우 Step에서 사용했기 때문에 @StepScope을 부여했지만 Job에서 JobParameter를 lazy binding 할 경우 해당 잡에 @JobScope 어노테이션을 부여해야 합니다.

[DEV] 기록 2023.10.27

[elasticsearch] Limit of total fields [1000] in index has been exceeded

개요 logstash를 통해 elasticsearch에 로그를 저장하는데 필드가 1,000개가 넘지 않는데도 불구하고 간헐적으로 아래와 같은 에러 메시지가 발생했습니다. Limit of total fields [1000] in index has been exceeded 원인 로그로 쌓는 데이터 중 HashMap 형태의 데이터들이 있었는데 해당 field에 대한 매핑 정보를 그대로 저장할 경우 map에 포함된 각각의 key가 필드로 매핑되어 파라미터의 개수와 필드 개수가 정비례하면서 발생하는 문제였습니다. 해결 방법 굳이 Map 형태로 로그를 쌓을 필요가 없어 toString 메서드를 오버로딩하여 문자열 형태로 저장하는 방식으로 해결했습니다. 물론 아래와 같이 필드 제한 개수를 늘리는 방법을 선택할 수도 ..

[DEV] 기록 2023.09.11

[Jackson 라이브러리] @JsonBackReference

개요객체 간 순환 참조를 방지하기 위해 추가한 @JsonBackReference가 @JsonIgnore 애노테이션과 비슷한 역할을 하여 ObjectMapper의 writeValueAsString() 메서드에서 해당 필드가 무시되는 현상이 발생했습니다. 생각보다 해당 문제를 다루는 문서가 없는 것 같아 @JsonBackReference 어노테이션의 역할과 위 문제를 어떻게 해결했는지 이번 포스팅에서 작성해 보겠습니다. @JsonBackReference란?Jackson 라이브러리의 @jsonbackReference는 Java 객체 간 양방향 참조를 다룰 때 사용됩니다. 해당 어노테이션은 주로 JSON Serialization(직렬화) 및 Deserialization(역직렬화) 프로세스에 사용되며 객체 간 순..

[DEV] 기록 2023.09.07

[Spring Data Jpa] java.lang.StackOverflowError

개요 JPA 객체를 저장하는데 아래와 같은 에러가 발생했습니다. java.lang.StackOverflowError: null at com.ecomhunt.entities.Order.hashCode(Order.java:15) ~[classes/:na] at java.base/java.util.AbstractSet.hashCode(AbstractSet.java:124) ~[na:na] at com.ecomhunt.entities.Customer.hashCode(Customer.java:11) ~[classes/:na] at com.ecomhunt.entities.Order.hashCode(Order.java:15) ~[classes/:na] at java.base/java.util.AbstractSet.h..

[DEV] 기록 2023.09.04

[javascript] common-lang3의 ObjectUtils.isEmpty()와 같은 코드를 작성하고 싶다면?

개요 useEffect React Hook을 통해 특정 객체가 비어있을 때만 업데이트하는 로직을 작성하려는데 common-lang3의 ObjectUtils.isEmpty()와 같은 동작을 하는 코드가 있으면 좋겠다 싶어 비슷하게 구현한 코드를 찾았습니다. 코드 object가 확인하고 싶은 객체라고 할 때 코드는 아래와 같습니다. Object.keys() 메서드는 object 객체의 배열 또는 모든 키를 반환합니다. 그리고 반환된 값의 길이를 확인하여 빈 개체인지 여부를 확인할 수 있습니다. 출처 https://stackoverflow.com/questions/48353471/checking-if-a-state-object-is-empty Checking if a state object is empty I..

[DEV] 기록 2023.08.31