SayBridge 프로젝트를 진행하면서, 강좌별로 “내가 이미 리뷰를 작성했는가?”를 확인하여 리뷰 작성 버튼을 활성화하거나 비활성화하는 기능이 필요했다. 처음에는 로직을 처리하는 부분이라 서버에서 해당 코스에 리뷰가 있는 지를 확인하여 각 코스마다 리뷰 여부를 확인 요청을 보내려했는데 그럴 경우 요청이 코스 수만큼 늘어나 데이터가 많아지면 서버 부하가 심해질 것 같았다. 기존 MyPage 로드 시 유저가 수강중인 강좌, 작성한 리뷰를 불러오는데, 이때 저장한 강좌 및 리뷰 정보를 이용하여 프론트에서 해당 기능을 구현하기로 했다. 처음에는 단순하게 .some()를 사용해 각 코스마다 리뷰를 찾는 방식으로 구현하였다.const hasReview = reviews.some(review => review..
SayBridge 프로젝트 구현 중 신규 강좌 알림 구독 서비스 신청 시 신규 강좌가 등록되면 해당 강좌 정보를 구독한 사용자들에게 이메일로 전송해는 기능을 구현하였다.1. 기능 개요 처음 구현 시 수강생에게 메일을 보내려면 강좌를 생성하는 CourseService 안에서 메일 전송 로직을 넣으려고 하다가 “메일 전송”이라는 기능은 다른 서비스나 기능에서 응용할 수 있을 것 같다는 생각을 해서 MailService 코드를 따로 생성 하였다. MailService 코드@Servicepublic class EmailService { @Autowired private JavaMailSender mailSender; @Autowired private SubscriberRepository ..
예외(Exceptions)란? 개발을 하다 보면 예기치 않은 상황이 발생할 수 있다. 예를 들어, DB에 저장하고자 하는 데이터가 Null 값이거나, 네트워크 연결이 끊겨 호출이 실패하거나, 파일 입출력에 문제가 생기는 등 다양한 예외 상황이 존재한다. 예외는 프로그램의 정상적인 흐름을 깨뜨릴 수 있기 때문에, 이들을 체계적으로 처리(Handling)하는 방식이 필요하다. 종류Checked Exception: 컴파일 단계에서 체크되는 예외로, 반드시 처리해야 한다. 예를 들어, IOException, SQLException 등이 있다.Unchecked Exception(런타임 예외): 컴파일 단계에서 체크되지 않는 예외로, 개발자의 부주의로 발생하는 경우가 많다. 예를 들어, NullPointerExce..
Spring Data JPA에서는 객체와 데이터베이스 간의 관계를 매핑하기 위해 다양한 애노테이션을 제공한다. 이 애노테이션은 테이블 간의 관계(1:1, 1:N, N:1, N:N)를 엔티티 클래스를 통해 정의할 수 있도록 돕는다. 각각의 애노테이션과 함께 자주 사용되는 @GeneratedValue, @JoinColumn 등의 애노테이션도 설명한다.1. @ManyToOne @ManyToOne은 여러 엔티티가 하나의 엔티티와 연결될 때 사용한다. 예를 들어, 여러 개의 주문(Order)이 하나의 사용자(User)와 연결되는 경우이다. 데이터베이스에서는 외래 키(Foreign Key)를 통해 관계를 설정한다. 예시: 사용자와 주문@Entitypublic class Order { @Id @Genera..
Querydsl은 Java 기반의 타입 안전한 동적 쿼리 생성 도구로, SQL, JPA, MongoDB 등 다양한 데이터베이스와 연동할 수 있다. 특히 JPA와 함께 사용하면 JPA의 동적 쿼리 작성이 더욱 간단하고 효율적으로 바뀐다. JPQL(Java Persistence Query Language)의 단점을 극복하기 위해 등장한 Querydsl은 컴파일 타임에 오류를 감지할 수 있는 타입 안전성을 제공하며, 동적 쿼리를 작성하는 데 뛰어난 가독성과 간결함을 제공한다. build.gradle 설정dependencies { implementation 'com.querydsl:querydsl-jpa:5.0.0' annotationProcessor 'com.querydsl:querydsl-apt:..
Spring Data JPA는 데이터베이스와 객체 간의 매핑을 단순화하고, 데이터베이스 작업을 효율적으로 처리할 수 있도록 설계된 모듈이다. MySQL과 함께 사용하여 데이터베이스를 구성하려면 JPA의 핵심 개념과 자주 사용하는 애노테이션에 대해 깊이 이해하는 것이 중요하다. 먼저, JPA와 Spring Data JPA가 등장하기 전의 데이터베이스 접근 기술과 그 한계, 이를 해결하기 위해 등장한 ORM(Object-Relational Mapping)의 발전 과정을 알아보자. 1. JDBC (Java Database Connectivity) JDBC는 Java의 표준 데이터베이스 접근 API로, SQL을 직접 작성하고 데이터베이스와의 통신을 수동으로 관리한다. 초기에는 대부분의 애플리케이션이 이 방식을 ..