본문 바로가기

전체 글24

[Spring][MyBatis] resultMap과 collection을 활용해 1:N관계 데이터 한 번에 가져오기 현재 사내 프로젝트에서 게시물 API를 구현하고 있다.게시물을 등록할 때, 여러 개의 첨부파일을 등록할 수 있도록 했다. 이처럼, 그 게시물의 상세정보를 불러올 때 1:N 관계의 데이터를 어떻게 하면 효율적으로 가져올 수 있을지 고민이었다. 찾아보니 이러한 1:N 관계의 데이터를 마이바티스에서 제공하는 과 을 활용하면한 번의 쿼리로 1:N 관계의 데이터를 객체 형태로 가져올 수 있었다. 우선 게시물과 첨부파일 테이블 구조를 알아보자. 게시물 정보 테이블 (BBS_INFO) 컬럼명 (Field)데이터 타입 (Type)제약 사항yEN">설명 (Comment)SQint(11)PK, auto_incrementyEN">시퀀스BBS_TYPEchar(1)default ‘N’yEN">게시글타입 (N,F)TITL.. 2025. 7. 18.
[Spring] ExceptionHandler를 활용한 자동 예외 처리 (w.RestControllerAdivce) 사내 인트라넷 API 개발을 계속해서 하고 있다. API를 작성하면서 INSERT나 UPDATE API 작성 시 반복되어 작성하는 Exception 처리가 있다. 등록 API // 게시물 등록@Overridepublic ResDTO insBbsInfo(BbsDTO bbsDTO) throws Exception { ResDTO res = new ResDTO(); try { configDao.insBbsInfo(bbsDTO); //TODO: 첨부파일 업로드 로직 // 첨부파일이 있는 경우, 첨부파일 정보(파일명, 파일path)를 저장하기 위해 게시글 SQ select. log.info("게시물 ID : " + bbsDTO.get_seq()); .. 2025. 7. 15.
[Spring][MyBatis] PageHelper로 페이징 처리하기 현재 사내 인트라넷 리뉴얼 작업을 하고 있다. 프로젝트 기술 스택으로 백엔드에 Spring Boot + Gradle + MyBatis, 그리고 프론트엔드는 회사 처음으로 React를 도입하여개발하고 있다. 개발 중 공지사항이안 자료실 목록에 필수적인 페이지네이션 기능 구현이 필요했다. 기존에 LIMIT와 OFFSET에 직접 페이지 번호(page)와 사이즈(size)를 파라미터로 넘겨 처리했지만,서칭을 해보니 Mybatis에서 PageHelper 플러그인을 알게 되어서 포스팅 해본다. 그래서 PageHelper가 무엇이고, 어떻게 동작하며, 그리고 Spring Boot 프로젝트에 어떻게 적용하는지 알아보자. PageHelper란 무엇이고 어떻게 동작할까? PgaeHelper는 MyBatis의 강력한 페.. 2025. 7. 11.
[MySQL][MariaDB] LPAD, RPAD 함수가 뭐야? 그룹 테이블에서 GROUP_ID가 PK에 해당한다. 이 GROUP_ID의 포맷이 GR00X (GR + 숫자3자리) 이렇게 정해져있다. 그룹 등록 시 다음 GROUP_ID를 쿼리해서 조회한 후 이를 그룹 정보와 같이 INSERT 한다. 다음 GRUOP_ID를 조회하는 쿼리를 한 번 보자. SELECT CONCAT('GR', LPAD(CAST(IFNULL(MAX(SUBSTR(GROUP_ID, 3)), 0) AS UNSIGNED) + 1, 3, 0)) group_idFROM GROUP_INFOWHERE GROUP_ID LIKE CONCAT( 'GR', '%') 쿼리를 괄호 제일 안쪽부터 보자. SUBSTR(GROUP_ID, 3) SUBSTR은 문자열 컬럼에서 원하는 길이로 문자열을 추출하는 함수이다... 2025. 7. 1.