회원 탈퇴를 구현하며 겪은 Soft Delete 설계와 Jackson의 LocalDateTime 직렬화 문제
·
Backend/Spring
⭐ 요구사항회원탈퇴 기능조건탈퇴 처리 시 비밀번호를 확인한 후 일치할 때 탈퇴 처리합니다.탈퇴한 사용자의 아이디는 재사용할 수 없고, 복구할 수 없습니다.⚠️ 예외처리사용자 아이디와 비밀번호가 일치하지 않는 경우이미 탈퇴한 사용자 아이디인 경우회원 탈퇴 방식을 어떻게 처리할지 고민해보세요.1️⃣ 문제 해결 : 회원 탈퇴 기능에 Soft Delete를 도입한 이유와 설계 방식🚨 직면한 문제이전에 탈퇴했던 사용자가 같은 이메일로 다시 가입할 수 있음탈퇴한 유저의 정보가 DB에서 사라지므로, 이메일 중복 체크에 걸리지 않음보안 및 운영 정책상, 탈퇴한 이메일은 재사용 불가 정책이 필요했음데이터 무결성과 연결성 손실유저와 연결된 게시글, 댓글, 좋아요, 친구 관계 등이 삭제될 경우 데이터 무결성이 깨질 위험통..
Helper Class
·
Backend/Spring
Helper Class란 ?객체 지향 프로그래밍 에서 헬퍼 클래스는 해당 애플리케이션이나 해당 클래스의 주요 목적이 아닌 일부 기능을 제공하는 데 사용한다. 위키피디아의 Helper Class 를 보면 다음과 같이 정의하고 있다. 게다가 단어의 의미에서도 알 수 있듯 도움을 주는 클래스다. 특정 작업을 수행하거나 여러 클래스에서 공통적으로 사용될 수 있는 보조적인 메서드나 기능을 제공하는 클래스다.일반적으로 특정 작업을 단순화하거나 반복적인 작업을 처리하는데 사용한다. 다양한 메서드를 제공하며, 상태를 유지하거나, 객체로서 다른 객체와 협력한다. 또한 서비스 클래스나 비즈니스 로직을 돕는 역할을 한다.Helper Class의 특징☑️ 보조적 역할 : 다른 클래스의 작업을 보조하는 역할을 하며, 복잡한 로..
ServiceHelper를 통한 Service 코드 책임 분리
·
Backend/Spring
Service를 작성하던 중 단일 책임의 원칙에 위반하는 코드를 작성했음을 알게 되었다. 따라서 어떻게 책임분리를 하는 것이 적절할것인가에 대한 고민을 하게 되었다.@Service@RequiredArgsConstructorpublic class UserService { private final UserRepository userRepository; @Transactional public void createUser(final UserCreateRequestDto userCreateRequestDto){ Users user = new Users( userCreateRequestDto.userName(), userCreateR..
BaseTimeEntity와 JPA Auditing: 왜 사용할까?
·
Backend/Spring
1. BaseTimeEntity란?BaseTimeEntity는 모든 엔티티에서 공통적으로 사용하는 생성일(createdAt)과 수정일(updatedAt) 필드를 자동으로 관리하는 추상 클래스다.@MappedSuperclass@EntityListeners(AuditingEntityListener.class)public abstract class BaseTimeEntity { @CreatedDate @Column(nullable = false, updatable = false) // 데이터 생성 이후에 생성일은 편집되지 않도록 설계 protected LocalDateTime createdAt; @LastModifiedDate @Column(nullable = false) pr..
JPA와 영속성 컨텍스트
·
Backend/Spring
JPA 등장배경객체지향적인 프로그래밍과 관계형 데이터베이스(RDB)는 달라도 너무 다르다.상속, 다형성, 캡슐화, 참조 구조가 객체 세계에서는 너무나 자연스럽고 당연하지만 SQL로는 표현할 수 없다.예시로, 객체는 필드에 다른 객체를 참조하지만, DB는 외래키로 연결한다. 즉, 객체 모델과 테이블 모델이 매핑이 안 맞아서 개발자의 부담이 증가하게 되었다.JPA가 등장하기 전, 우리는 JDBC 기반으로 SQL을 직접 작성했고, DB가 변경되면 코드를 수동으로 수정해야하고 매우 반복적인 수작업을 필요로 했다. 따라서 이에 대한 해결책으로 ORM이 등장했다. ✅ ORM(Object-Relational Mapping)이란 ?객체와 RDB 테이블 사이를 자동으로 매핑해주는 기술객체를 중심으로 개발하고, SQL은 ..
[Spring 기초] 일정 관리 앱 만들기
·
Backend/Spring
이번 프로젝트를 하기 전에, JDBC에 대해 알아보았고, JDBC Template 을 도입하여 프로젝트를 구현했으며 DB 관련 로직을 처리해야 하는 코드가 많았기 때문에 인터페이스와 구현체를 통해서 전반적인 과제를 진행하였다. JDBC → JDBC Template → 인터페이스와 구현체에 대해서 차례로 알아보았다.🗒️JDBCJDBC(Java Database Connectivity)는 Java에서 데이터베이스(DB)에 접속하고, SQL을 실행하고, 결과를 받아오는 표준 API이다.✅ JDBC의 구조드라이버 로드DB 연결 (Connection)SQL 작성 및 실행 (Statement or PreparedStatement)결과 조회 (ResultSet)자원 해제 (close)✅ JDBC의 단점반복되는 코드가..