본문 바로가기

Projects26

[청하] 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.
[청하] 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.
[청하] 청년 정책 검색 기능 - (2) 구현 목차 청년 정책 서비스에서 검색 기능이 빠질 수 없다. 사용자들이 본인에게 필요한 정책을 빠르고 정확하게 찾을 수 있어야 한다. 고려 사항키워드 처리 로직사용자가 “청년 취업 지원” 처럼 공백으로 구분된 검색어를 입력했을 때, “쳥년 취업 지원 사업” 같은 전체 문구가 그대로 포함된 정책도 찾아야 하고, “청년을 위한 취업 교육 지원”처럼 각 키워드가 따로 포함된 정책도 검색되어야 한다.검색 대상 필드사용자가 찾으려는 정책을 최대한 포함하도록 검색 범위를 선정했다. 청년 정책 데이터에는 다양한 정보가 포함되어 있는데, 그중에서 제목(title), 정책 소개(introduce), 신청 상세내용(applicationDetails) 필드가 정책의 가장 핵심 필드라고 판단하여 선택했다.검색 결과 정렬검색 기능.. 2025. 4. 4.
[청하] Swagger UI 개선 - API 문서 가독성 향상 2024.12.12목차 기존에 Spring Boot 프로젝트에서 Swagger UI 사용하여 API 문서를 제공하고 있었다. 서버 이전 이후로 사용하지 않아서 인식하지 못하다가 최근에 Swagger가 제대로 작동하지 않는다는 문제를 발견했다. 그래서 오류도 고치고 Swagger UI의 가독성과 사용성을 높이기 위해 전체적으로 개선했다. 1. 기존 문제점기존 SwaggerConfig@Configurationpublic class SwaggerConfig { @Bean public OpenAPI openAPI() { SecurityScheme securityScheme = new SecurityScheme() .type(SecurityScheme.Type.A.. 2025. 4. 3.
[청하] 청년 정책 검색 기능 - (1) 설계 2024-11-141. 검색 방식자연어 & 키워드 검색 지원MySQL의 FULLTEXT 검색 기능의 NATURAL LANGUAGE MODE 사용자연어 검색: MySQL이 검색어에서 불용어(은/는/을/를 등)를 자동으로 제거하고 의미있는 단어를 추출하여 검색예시1) 자연어 검색: "청년을 위한 주택 지원 정책"→ MySQL이 자동으로 "청년", "주택", "지원", "정책" 추출하여 검색2) 키워드 검색: "청년주택"→ 입력한 키워드로 바로 검색 2. 검색 범위검색은 아래 세 개의 필드를 대상으로 수행한다.정책 제목 (title)정책 소개 (introduce)신청 상세내용 (applicationDetails) 3. 검색 결과정렬 방식: 최신순 정렬 (ID 기준 내림차순)페이징 처리: 페이지 단위로 조회 4.. 2025. 2. 4.
반응형