본문 바로가기

전체 글157

[청하] Open API 호출 시 500 오류 발생 및 해결 과정 목차 1. 문제 상황 (배경)청년 정책 데이터를 제공하는 Open API(https://www.youthcenter.go.kr/go/ythip/getPlcy)를 호출하여 데이터를 가져오는 과정에서 간헐적으로 500 Internal Server Error가 발생했다.특정 요청에서는 정상적으로 응답을 받지만, 일부 요청에서는 오류가 발생하여 정책 데이터를 가져오지 못하는 문제가 있었다. 발생한 오류 로그2025-03-05T23:14:06.307+09:00 ERROR 37872 --- [nio-8080-exec-2] c.e.w.service.YouthPolicyService : Failed to fetch policy data from Open API: 500 Internal Server Err.. 2025. 5. 23.
[청하] 청년정책 Open API 개편에 따른 데이터 비교 (기존 vs 개선후) 목차 1. 기존 필드와 새로운 API 필드 매칭기존 필드에서 새로운 API 필드로 변환 가능 여부 분석기존 필드 (Response)기존 DTO (YouthPolicyResponseDto.java)기존 필드 설명 (Response)새로운 API 필드 (youthPolicyList)새로운 API 필드 설명(youthPolicyList)매칭 가능 여부idbizId정책 idplcyNo정책번호✅ (DTO 필드명 변경)titlepolyBizSjnm plcyNm정책명✅ (DTO 필드명 변경)introducepolyItcnCn정책 소개plcyExplnCn정책설명내용✅ (DTO 필드명 변경)classificationpolyRlmCd정책 분야 코드bscPlanPlcyWayNo기본계획정책방향번호⚠️ (정책 분야 코드 변경됨.. 2025. 5. 15.
[청하] 밸런스 게임/토론 기능 - (4) 댓글 조회 기능 개선 (feat. N+1 문제 방지를 위한 설계와 구현) 2025.01.13 이전 글에서는 밸런스 게임 조회 기능을 구현하면서 페이징 처리, 날짜 포맷팅, 참여 가능 여부 계산, 이전/다음 게임 이동 기능을 설명했다.이번 글에서는 밸런스 게임 조회 시 함께 제공되는 댓글 목록과 댓글 작성자의 선택 정보를 효율적으로 조회하기 위한 방법을 다룬다.단순한 JPA 기본 조회 방식만 사용하면, 밸런스 게임 조회 시 댓글 작성자 정보와 사용자 선택 정보를 각각 조회하면서 N+1 문제가 발생할 수 있다. 이를 해결하기 위해 다음의 2가지 최적화 전략을 적용했다.@EntityGraph를 사용해 댓글과 작성자 정보를 한 번의 쿼리로 조회댓글 작성자의 선택 정보를 사전에 조회하여 Map을 사용한 임시 저장 방식으로 반복 쿼리 방지 1. 최적화 내용@EntityGraph로 댓글 .. 2025. 4. 30.
[java-mid1] 10. 예외 처리2 - 실습 "김영한의 실전 자바 - 중급편" 내용을 참고하여 정리함.목차 1. 예외 처리 도입1 - 시작 반환 값을 이용한 예외 처리의 문제점기존 프로그램에서는 반환 값을 사용하여 예외를 처리했다. 하지만 이 방식에는 다음과 같은 문제가 있다.정상 흐름과 예외 흐름이 섞여 있어 코드 가독성이 떨어진다.정상 흐름보다 예외 흐름의 코드 분량이 더 많아지기도 한다.실무에서는 예외 처리 로직이 더 복잡하다.이를 해결하기 위해 자바의 예외 처리 기능을 도입한다. 점진적으로 진행한다. 예외 클래스 정의public class NetworkClientExceptionV2 extends Exception { private String errorCode; public NetworkClientExceptionV2(Strin.. 2025. 4. 12.
[java-mid1] 9. 예외 처리1 - 이론 "김영한의 실전 자바 - 중급편" 내용을 참고하여 정리함.목차 1. 예외 처리가 필요한 이유1 - 시작예외 처리가 왜 필요한지를 이해하기 위해 간단한 프로그램을 만들어 살펴본다.이 프로그램은 사용자의 입력을 받아 외부 서버에 전송하는 역할을 한다.실제 네트워크 통신을 하지는 않지만, 예외 처리가 필요한 상황을 시뮬레이션하는 데에는 충분하다. 프로그램 구성도`NetworkClient` : 외부 서버와 연결하고, 데이터를 전송하고, 연결을 종료하는 기능을 제공한다.`NetworkService` : `NetworkClient` 를 사용해서 데이터를 전송한다. `NetworkClient` 를 사용하려면 연결, 전송, 연결 종료와 같은 복잡한 흐름을 제어해야 하는데, 이런 부분을 `NetworkService` 가.. 2025. 4. 6.
[청하] TimeFormatter 클래스 리팩터링 (feat. @UtilityClass) 게시글 관련 기능에서 날짜를 "yyyy/MM/dd HH:mm:ss" 형식으로 반환하기 위해 TimeFormatter 클래스를 작성했었다.하지만 코드 점검 과정에서 몇 가지 개선할 점을 발견하여 리팩토링을 진행했다. 1. 기존 코드TimeFormatterpackage com.example.withpeace.util;import org.springframework.stereotype.Component;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;@Componentpublic class TimeFormatter { public static String timeFormat(LocalDateTime time) { .. 2025. 4. 4.
반응형