Spring Boot
메서드 체이닝과 빌더 패턴을 활용한 엔티티 클래스 구현
1. 개요스프링(Spring) 프레임워크에서 데이터베이스와 상호작용하는 엔티티(Entity) 클래스는 애플리케이션의 중요한 부분입니다. 메서드 체이닝(Method Chaining)과 빌더 패턴(Builder Pattern)을 활용하여 엔티티 클래스를 구현하면 가독성을 높이고 유지보수를 용이하게 할 수 있습니다. 하지만 이러한 내용을 다룬 포스팅이 많지 않아, 이 글을 통해 해당 주제를 다루고자 합니다. 이번 글에서는 ArticleEntity 클래스를 예로 들어 메서드 체이닝과 빌더 패턴을 적용하는 방법을 설명합니다.2. ArticleEntity 클래스 개요ArticleEntity 클래스는 게시물(Article)을 표현하는 엔티티로, 게시물의 ID, 작성자 이메일, 작성일, 제목, 내용 등 다양한 속성을 ..

댓글 시스템 데이터베이스(MySQL) 설계 및 MyBatis를 이용한 댓글 수 조회
데이터베이스 설계댓글 시스템을 위한 데이터베이스 테이블을 설계할 때, 다음과 같은 요구 사항을 고려할 수 있습니다:댓글은 특정 게시물에 속할 수 있습니다.댓글은 다른 댓글에 대한 대댓글일 수 있습니다.댓글 작성자 정보가 포함됩니다.댓글에는 좋아요 수, 삭제 여부, 깊이 등의 정보가 포함됩니다.아래는 댓글 테이블에 대한 SQL 생성 스크립트입니다.CREATE TABLE IF NOT EXISTS comment ( comment_id BIGINT AUTO_INCREMENT PRIMARY KEY, text_body VARCHAR(1000), parent_post_id BIGINT, parent_comment_id BIGINT, member_id BIGINT, likes BIGIN..
효율적인 데이터 로딩: Spring Boot과 MyBatis로 구현하는 페이징 처리
1. 서론페이징 처리란? 페이징 처리는 많은 양의 데이터를 한 번에 모두 가져오는 대신, 일부만 가져와서 화면에 보여주는 기법입니다. 이를 통해 성능을 개선하고 사용자의 경험을 향상시킬 수 있습니다.왜 페이징 처리가 필요한가? 대량의 데이터를 한 번에 처리하면 메모리와 성능에 큰 부담을 주게 됩니다. 페이징 처리를 통해 필요한 데이터만 가져와서 처리함으로써 이러한 문제를 해결할 수 있습니다.2. 페이징 처리의 기본 개념페이징의 기본 원리데이터를 일정한 크기로 나누어 각 페이지에 해당하는 부분만 가져오는 방식입니다.클라이언트에서 요청하는 페이지 번호와 한 페이지당 항목 수를 기준으로 데이터베이스에서 필요한 부분만 쿼리합니다.주요 용어페이지(Page): 데이터를 나누는 단위입니다.오프셋(Offset): 현재..

스프링 부트에서 @Transactional을 활용한 트랜잭션 관리
트랜잭션 관리는 데이터베이스 작업의 일관성을 보장하고 오류 발생 시 롤백할 수 있도록 하는 중요한 개념입니다. Spring Boot는 이러한 트랜잭션 관리를 쉽게 할 수 있도록 @Transactional 어노테이션을 제공합니다. 이번 포스트에서는 Spring Boot와 MyBatis를 사용하여 트랜잭션 관리를 어떻게 하는지 살펴보겠습니다.1. @Transactional 소개@Transactional 어노테이션은 Spring의 트랜잭션 관리 기능을 활성화하기 위해 사용됩니다. 이 어노테이션을 사용하면 지정된 메서드나 클래스 내의 모든 데이터베이스 작업이 하나의 트랜잭션 내에서 수행됩니다. 만약 트랜잭션 내에서 예외가 발생하면, 해당 트랜잭션은 롤백됩니다.2. Spring Boot 설정스프링 부트 프로젝트를..

미디어 관련 공부#3
컨트롤러 작성 복수의 값으로 json에 담아주기 위해서 ex) actors : 박은빈, 강기양 ~~ 이런 식으로 찍기 위해서 기존에는 name_plural이 아닌 그냥 attribute 값으로 actor로 찍었음. 근데 이렇게 하면 사실 배우들이 될 텐데 그냥 배우라는 명명이 되니깐 배우들로 바꿔주는 게 확실한 처리임. 미디어 관련 공부#2 에서 매퍼를 다시 작성한 부분이 있는데 여기서 그 값이 중복돼서 찍히게 됨. 따라서 매퍼를 변경했음. 여기도 마찬가지~ 등급의 경우는 일대일 매핑이니깐 복수의 이름을 지정안해도 됨. 타입도 마찬가지. 그러면 각각의 경우를 다 처리해줬으면 succes를 해줌. 그리고 json에다가 result와 관련된 값 들을 넣어서 js에서 처리해준다. js에서는 이제 까지 작성한 ..

미디어 관련 공부#2
이제부터는 백엔드를 구현해보겠다. 우선 컨트롤부터 해보자. 일단. 영상을 소개하는 즉, 테이블로 만들어 놓은 값들을 한 번에 다 소개할 수 있는 부분부터 작성해보자. 매핑 걸어주고 value의 값은 info로 걸어주고 메서드는 값을 넣어줘야 되기 때문에 PATCH로 걸어주자. 값을 넣어주는 것은 당연히 JSON을 이용하면 되겠지 그러면 String 타입과 @ResopnseBody는 당연히 적어줘야 되겠네. 받는 인자의 경우 media의 Index를 받으면 되겠네. 그리고 HttpServeletResponse타입을 이용해 Json의 값을 설정해주기 위해 response를 이용했다. 위에 작성한 PATCH 뒤에다가 produces를 적어 콘텐츠 타입을 제어해줘야 됨. 왜냐하면 맨 마지막 코드에 respons..

미디어 관련 공부#1(DB)
우리가 영상을 클릭할 때 해당 영상에 제목, 타이틀, 특징, 장르, 배우들이 나오는 상세보기 창이 있다. 이것 또한 백엔드에서 우리가 구현을 해줘야 되는데 우선 db부터 짜 보자. 우선 미디어라는 즉, 영상이라는 db에서 제목, 타이틀, 특징, 장르 , 배우 들은 영상 안에 포함되는 내용이다. 이런 식으로 틀을 짜고 여기서 일대일의 관계와 일대다의 관계를 찾아보자. 우선 배우는 당연히 일대다의 관계일 것이고. 특징과 장르 또한 일대다의 관계일 것이다. 그럼 등급과 종류는 어떤 관계인 것 인가? 예를 들어 19세 영화로 예를 들어보자. 여기서 19세가 media의 등급이고 영화가 media의 종류일 것이다. 그렇다면 19세랑 영화는 일대다의 관계가 되나? 당연히 안될 것이다. 19세라는 media는 하나씩..

프로필 생성관련 공부#2
이제 서버 요청 페이지 get페이지가 아닌 사용자가 직접 요청하는 choose 페이지를 만들어보자. 우선. 당연하게도 매핑 자체는 POST로 던져야겠지. 그다음 ajax 또한 요청할 거니 ModelAndView 타입이 아니라 String 타입으로 responseJson.toString()을 쓰기 위해 String 타입으로 postAdd를 만들어주고 매핑되는 곳은 add로 다가 던져주자. 어차피 ModelAndView에다가 값을 넣어주는 게 아니기 때문에 value의 값은 add로 지정해줘도 딱히 상관없을 듯하다. 그다음 ajax 처리를 하기 위해 String 타입으로 지정해주기 전 비동기 처리 시 사용하는 어노테이션 또한 생각해줘야겠지 그것이 바로 ResponseBody어노테이션이다. 즉, 응답하는 본문..