작업일지에 들어가며 이전 기능 구현에 이어 이번에는 사용자 정보를 입력받아 검증 후 비밀번호를 재설정하여 사용자 메일에 전송해주는 기능을 구현해보겠다. 🙏 Spring Boot + React 프로젝트 / 이메일 전송 기능 (비밀번호 찾기, 임시비밀번호 부여) 내가 원하는 기능을 아주 상세하게 작성해주셔서 해당 포스팅을 상당히 많은 참고를 하며 해봐야겠다.구글 이메일 세팅 앱 비밀번호를 꼭 기억해두자!백엔드 코드1. application.properties# GMailspring.mail.host=smtp.gmail.comspring.mail.port=587spring.mail.properties.mail.deug=truespring.mail.properties.mail.smtp.auth=truespri..
작업일지에 들어가며이번에는 사용자 아이디 찾기 기능을 구현해보겠다. 아이디(이메일)찾기 버튼을 누르면 모달로 사용자 정보 중 휴대전화번호가 중복이 되지 않기 때문에 사용자 이름과 휴대전화 번호를 입력받고 서버에서 검증하여 검증이 완료되면 해당 유저의 이메일을 모달에 바로 띄우는 방향으로 진행해보겠다.백엔드 코드1. Respositorypublic interface MembersRepository extends JpaRepository { Members findByEmail(String email); // 이메일 중복 검사 boolean existsByEmail(String email); // 휴대전화 중복 검사 boolean existsByPhone(String phone); // 이메일 찾기 Opti..
작업일지에 들어가며이전 프로젝트에서는 다른 참고 자료들의 코드들을 보고 따라하는 수준으로 스프링 시큐리티와 JWT를 적용했다면 이번에는 시큐리티와 JWT에 대해 알고있던 얕은 지식과 학원 수업을 더해 진행해보겠다. 학원에서는 리프레쉬 토큰까지 배우지는 않았지만 이번 작업에서는 리프레쉬 토큰까지 구현해보도록 하겠다. 무난히 개발을 완료했으면 좋겠지만 오히려 많은 에러를 만나보는 것이 더 좋을 것 같다는 생각이 든다.JWT 개발 과정1. bulid.gradle JWT 의존성 추가dependencies { ... 생략 // JWT implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5' runtimeOnly group: ..
작업일지에 들어가며지난 글에서는 기본적인 회원가입 로직을 구현했다. 이번에는 회원가입 기능 중 이메일 중복 검사 기능을 만들어보겠다. 사용자가 입력한 필드의 값을 서버로 보내 중복되는 이메일이 있는 지 검사하고 응답을 받아 모달 내부에 사용 가능 및 사용 불가를 표시해주면 될 것 같다. 바로 시작해보자!프론트 코드1. Chakra UI | Dialog응답 메세지를 띄울 모달로 차크라UI의 Dialog 컴포넌트를 사용import { Button } from "../components/ui/button"import { DialogActionTrigger, DialogBody, DialogCloseTrigger, DialogContent, DialogFooter, DialogHeader, Dial..
작업일지에 들어가며이전 프로젝트의 경우 멤버 테이블을 하나만 운영해서 프론트에서 데이터를 받아오고 DB에 저장하는데 크게 어려움이 없었다. 이번에는 멤버 테이블은 회원의 중요 정보를 담는 Main과 세부 정보를 담는 Detail로 나눠서 일대일 관계 설정이 되어있고, 또 Main 테이블은 회원 주소에 따라 위치 정보를 담는 location_roads 테이블과 다시 일대일 관계로 설정되어있다. 시작도 전에 난항이 생길 것 같은 기분이다. 아무튼 최선을 다해보자!회원가입 로직 구현 과정1. 테이블 구조 확인members_mainmembers_detaillocation_roads members_main을 기준으로 detail과 roads가 일대일 관계로 설정 되어있는 모습이다. 2. Entity데이터베이..
JPA 연관관계 매핑이 글에서 Spring Data JPA에서 두 개의 테이블을 조인하는 방법을 기술하겠으며, 먼저 연관관계의 주체에 대해 간략히 설명을 진행하고 예제를 통해 JPA를 통한 연관관계 매핑하는 방법을 설명해보겠다.예제에서는 먼저 조인할 데이터베이스의 테이블의 구조를 확인 후 1:N 관계를 설정하는 @OneToMany 과 N:1 관계를 설정하는 @ManyToOne 어노테이션을 사용하여 두 개의 테이블을 조인하여 데이터를 읽어 보겠다.참고로 @OneToMany, @ManyToOne 어노테이션 외에 1:1 연관관계를 설정하는 @OneToOne, N:M 연관관계를 설정하는 @ManyToMany도 있지만 이번에는 이 두 개의 연관관계를 제외한 1:N, N:1 연관관계에 있는 테이블만 조인하는 방법..
Entity와 DTO 역할 분리현재 실무에서도 Entity와 DTO 분리 없이 Entity 하나로만 운영하는 사람들도 많다고 한다.하지만 Entity 하나로만 운영하게되면 큰 문제점들이 존재한다.나 역시도 이전 글에서 Entity를 view에 그대로 반환하는 방법으로 계층간의 데이터 전송의 역할로 직접 활용했었다.그래서 나는 이 글에서 Entity와 DTO의 개념, 역할 분리의 필요성을 기술하고Entity를 DTO 변환하는 방법, 반대로 DTO를 Entity로 변환하는 방법을 기록해볼 것이다. EntityEntity는 실제 데이터베이스의 테이블에 매핑되며 테이블에 존재하는 컬럼들을 필드로 가지는 객체이다.데이터베이스의 테이블과 1:1로 매핑되며, 테이블이 가지지 않는 컬럼을 필드로 가져서는 안된다.즉, ..
JPA(Java Persistence API)ORM(Object-relational mapping) 자바 기술 표준으로, ORM 프레임워크를 쉽게 사용하기 위한 자바 인터페이스의 모음이다.데이터베이스 연동에 사용되는 기술들은 JDBC를 비롯하여 MyBatis, Hibernate 등 다양하다. 이 중에서 Hibernate와 같은 ORM 프레임워크는 SQL까지 프레임워크에서 제공하여 개발자들의 업무가 상당히 감소하였다.과거 DB 연동을 위해 SQL문을 직접 작성하여 영속 데이터를 가져오는 경우 문제점으로 데이터베이스의 테이블이 변경되더라도 SQL 쿼리는 String 형식으로 되어있어서 컴파일 에러가 나오지 않는다. 또한 쿼리문을 잘못 작성하더라도 컴파일 시 확인할 수 없어 런타임에서 에러를 발생시켜 개발 시..
MyBatis 란?MyBatis는 Java와 SQL 사이에 자동 매핑 기능을 지원하여 개발자의 관계형 데이터베이스 작업을 더 쉽게 할 수 있도록 도와주는 ORM(Object-Relational Mapping) 프레임워크이다.Java에서는 JDBC API를 제공해주지만 해당 JDBC를 이용하면 1개 클래스에 반복된 코드가 존재할 수 있고, 한 파일에 java 언어와 SQL 언어가 함께 존재하여 재사용성이 떨어지는 단점이 있다.MyBatis는 JDBC 모든 기능을 제공하면서도 단점들을 개선했다. MyBatis 사용 시 SQL을 직접 작성하면서도 객체 지향 방식으로 데이터베이스에 접근할 수 있게 해준다.💡 MyBatis란?"MyBatis는 개발자의 관계형 데이터베이스 작업을 더 쉽게 도와주는 ORM(Obje..
관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)우선 AOP는 기존의 OOP(Object-Oriented Programming, 객체 지향 프로그래밍)를 보완하는 개념으로, OOP에서는 해결하기 어려운 문제들을 보다 쉽게 해결할 수 있게 도와주는 개념이다.AOP는 관점을 기준으로 묶어 개발하는 방식을 의미하며, 여기서 관점(aspect)이란 어떤 기능을 구현할 때 ‘핵심 기능’과 ‘부가 기능’으로 구분해 각각을 하나의 관점으로 보는 것을 의미한다.’핵심 기능’은 우리가 적용하고자 하는 핵심 비즈니스 로직이다.‘부가 기능’은 횡단적 관심사항 (Cross-Cutting Concerns)이라고도 하며 핵심 기능을 수행하기 위해서 행해지는 로깅, 트랜잭션 관리, 보안, DB연결..