[DEV] 기록 165

[SpringBoot] JPA 쿼리 성능 감시 가이드

개요 팀 내 JPA 쿼리 성능 감시 가이드를 작성하는 업무를 맡은 김에 간단하게 다음 항목을 정리해 보겠습니다. JPA slow 쿼리 검출 JPA N + 1 문제가 의심되는 api 검출 JPA N + 1 문제가 의심되는 api의 경우 범고래님 블로그를 많이 참고했습니다! 감사합니다. 프로젝트 환경 SpringBoot 2.6.3 Java 1.8 Jpa slow 쿼리 검출 application.yml에 다음과 같이 설정을 하면 Hibernate에서 slow query를 로깅해 줍니다. 테스트 삼아 100ms를 기준으로 잡았고 그 결과 실행시간이 205ms인 SELECT 쿼리가 아래와 같이 로깅되었습니다. 오래 걸린 쿼리를 로깅하는 것 자체는 좋았지만 구현한 JpaRepository가 워낙 많다 보니 검출된 ..

[DEV] 기록 2024.03.12

Chrome에서 ChatGPT 안되는 경우 해결 방법

2024년 3월 8일 자 기준으로 크롬에서 ChatGPT 사용 시 응답이 없는 버그가 발생했습니다. 이는 쿠키 관련 버그이기 때문에 다음 절차를 따라야 합니다. ctrl + F5를 눌러 페이지 캐시를 지우고 ctrl + shift + del을 누른 뒤 쿠키 삭제 이 과정을 거치면 자동 로그인 된 페이지들이 다 로그아웃 됨 chatgpt 다시 로그인하면 정상적으로 동작 출처 https://community.openai.com/t/chatgpt-is-not-responding-to-prompts/671804/10 ChatGPT is not responding to prompts I search about this thing there is no request in network also. community...

[DEV] 기록 2024.03.09

[SpringBoot] yml 파일로 메세지 다국어 처리

개요 진행 중인 프로젝트에 다국어 처리를 추가해야 하는데, 공식 문서에서 제시한 properties 파일 대신 yml 파일을 사용하고 싶었고, 조사 결과 이를 가능하게 하는 라이브러리가 존재했습니다. https://github.com/akkinoc/yaml-resource-bundle?tab=readme-ov-file GitHub - akkinoc/yaml-resource-bundle: Java ResourceBundle for YAML format. Java ResourceBundle for YAML format. Contribute to akkinoc/yaml-resource-bundle development by creating an account on GitHub. github.com 이 게시글에..

[DEV] 기록 2024.02.14

[Intellij] Naver Java 코딩 컨벤션 적용 방법

코딩 컨벤션 코딩 컨벤션이란 가독성이 좋고 관리하기 쉬운 코드를 작성하기 위한 코딩 스타일 규약을 말합니다. 각자 코딩 스타일이 다르겠지만 팀원 모두 코딩 컨벤션을 준수할 경우 가독성이 좋아지고, 성능에 영향을 주거나 오류를 발생시키는 잠재적 위험 요소를 줄여줍니다. 특히 규모가 큰 프로젝트일수록 유지보수 비용을 줄이는 데 도움이 됩니다. 코딩 컨벤션을 적용하기 위해 정적 코드 분석 도구를 도입하는데, 보통 Java에서는 Checkstyle과 같은 도구를 주로 사용하고 자바스크립트에서는 ESLint를 적용하여 사용합니다. ex) google java coding convention, naver java coding convention, airbnb eslint 이번 게시글에서는 Intellij에서 네이..

[DEV] 기록 2024.01.10

사내 개발 스터디 계획 초안

개요새해를 맞이하여 R&R 계획을 수립 중에 팀 내 개발 스터디 관리 업무를 맡게 되었습니다. 입사 이후 스터디를 진행한 경험이 부족하여 레퍼런스를 찾기 위해 구글에서 개발 스터디 진행 방식을 검색하였고 그 결과 아래 영상들을 통해 어느 정도 방향성을 파악할 수 있었습니다. https://www.youtube.com/watch?v=bx29lcIXCPg https://www.youtube.com/watch?v=6gNMsjcH3oA 스터디 유형스터디 유형은 아래와 같이 크게 두 가지가 있는 것 같습니다.한 명의 시니어가 주도적으로 리딩하여 강의형으로 진행하는 방식공통 관심사를 가진 개발자들끼리 모여서 각자 파트를 나누어 발표하는 방식 사실 주니어 입장에서는 전자와 같은 방식이 훨씬 좋습니다. 한 명의 전문가..

[DEV] 기록 2024.01.03

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