본문 바로가기
'다중 스킬' 검색 기능 구현 개발 시 요구사항은 간단하지만, 시스템 제약으로 구현이 복잡해지는 경우가 많다.최근 직원 목록 조회 API에 '다중 스킬' 검색 기능을 추가해야 했다. 요구사항 - 스킬 코드를 `/`로 구분된 하나의 문자열(예: "LANGU001/LANGU002/ LANGU003")로 전달한다. - 해당 스킬 중 하나라도 보유한 직원을 모두 검색해야 한다. 기존 쿼리는 `GROUP_CONCAT` 함수를 사용해 각 직원의 모든 스킬을 하나의 문자열로 가지고 있었다. 이 프로젝트를 해결하는 과정에서 마주친 제약과 그 해결책을 공유한다. 첫 번째 : `REGEXP`를 이용한 간단한 접근가장 먼저 떠오른 방법은 `GROUP_CONCAT`으로 생성된 문자열을 직접 검색하는 것이다. MySQL의 정규표현식 함수 `REGEX.. 2025. 9. 8.
@RequestBody의 유무에 따른 DTO 매핑 차이와 타임리프/React 컨트롤러 비교 Spring Boot로 웹 애플리케이션을 개발하다 보면, 컨트롤러에서 DTO(Data Transfer Object)에 데이터를 어떻게 매핑할지 고민이 된다. 특히, 프론트엔드가 React 등 SPA 방식인지, 아니면 타임리프(Thymeleaf) 같은 서버사이드 렌더링(SSR) 방식인지에 따라 컨트롤러 코드와 데이터 매핑 방식이 달라진다. @RequestBody 어노테이션의 유무에 따른 차이와, 실제 코드 예시를 통해 두 방식을 비교해보았다.1. React(REST API) vs. Thymeleaf(SSR) 컨트롤러 코드 비교REST API (React 화면)@RestController@RequestMapping("/qna")public class QnAController { @PostMapping(.. 2025. 7. 10.
[JAVA] Logger 사용하기 에러 발생시 디버깅을 항상 system.out.println()으로 진행해왔다.실무에서는 위처럼 찍지 않는다고한다.이유는 날짜, 시간, log level, thread 등등 나오지 않기 때문이다. 자세한 로그를 확인하기 위해 라이브러리를 사용하여 로그를 찍는다.SLF4J 인터페이스를 구현한 Logback을 사용해보았다. 로그 레벨로그 레벨에는 5단계가 있다.trace > debug > info > warn > error일반적으로 로컬 서버는 trace, 개발 서버는 debug, 운영 서버는 info로 한다.설정된 level 이하의 상태를 출력하지 않기 위해서는 properties에 아래 코드를 작성한다# 전체 로그 레벨 설정(default = info)logging.level.root=info# 패키지와.. 2024. 10. 28.