Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 코드로배우는스프링부트웹프로젝트
- 자료구조와함께배우는알고리즘입문
- 목록처리
- baeldung
- GIT
- 친절한SQL튜닝
- d
- network configuration
- iterator
- 네트워크 설정
- 스프링 시큐리티
- 리눅스
- 구멍가게코딩단
- 코드로배우는스프링웹프로젝트
- 페이징
- 티스토리 쿠키 삭제
- 스프링부트핵심가이드
- 자바편
- 알파회계
- 선형대수
- 처음 만나는 AI 수학 with Python
- /etc/network/interfaces
- 처음 만나는 AI수학 with Python
- 이터레이터
- ㅒ
- 자료구조와 함께 배우는 알고리즘 입문
- resttemplate
- 데비안
- 서버설정
- Kernighan의 C언어 프로그래밍
Archives
- Today
- Total
bright jazz music
blog38 : 회원가입과 비밀번호 암호화-1 본문
지난 포스팅에서는 jwt키를 application.yml에 넣어 놓고 불러와서 jwt암호화를 진행하는 과정을 다뤘다. 이번에는 회원 가입을 다룬다. 구체적으로는 아이디와 비밀번호를 입력 받고, 비밀번호를 암호화 해서 DB에 넣는 과정이다.
- application.yml 수정(data.sql 입력 되지 않도록)
현재 어플리케이션을 구동하면 data.sql이 자동으로 DB에 입력되도록 되어 있다. 빈 DB 에 테스트 할 수 있도록 application.yml에서 sql 설정을 never로 변경해준다. 사실 이 과정은 오늘 진행할 내용과 관련 없다.
이제 기본적인 회원가입 기능을 만든다.
1. AuthController.java에 회원가입 메서드 생성하기
//AuthController.java
//회원가입
@PostMapping("/auth/signup")
public void signup(@RequestBody Signup signup) {
authService.signup(signup); //사실 이렇게 바로 넘기는 것보다 레이어별로 dto를 변환해 주는 것이 좋다.
}
}
2. AuthService.java에 signup() 생성하기
//AuthService.java
//회원가입
public void signup(Signup signup) {
//엔티티로 변환
var user = User.builder()
.name(signup.getName())
.password(signup.getPassword())
.email(signup.getEmail())
.build();
userRepository.save(user);
}
}
3. test하기 (AuthServiceTest.java 생성)
//AuthServiceTest.java
package com.endofma.blog.service;
import com.endofma.blog.domain.User;
import com.endofma.blog.repository.UserRepository;
import com.endofma.blog.request.Signup;
import org.junit.jupiter.api.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
class AuthServiceTest {
@Autowired
private UserRepository userRepository;
@Autowired
private AuthService authService;
@AfterEach
void clean() { userRepository.deleteAll();}
@Test
@DisplayName("회원가입")
void test1(){
//given
Signup signup = Signup.builder()
.email("catnails@gmail.com")
.password("1234")
.name("catnails")
.build();
//when
authService.signup(signup);
//then
Assertions.assertEquals(1, userRepository.count());
User user = userRepository.findAll().iterator().next();
Assertions.assertEquals("catnails@gmail.com", user.getEmail());
Assertions.assertEquals("1234", user.getPassword());
Assertions.assertEquals("catnails", user.getName());
}
}
4. email 중복체크 로직 만들어주기
//AuthService.java
//회원가입
public void signup(Signup signup) {
//email 중복체크
Optional<User> userOptional = userRepository.findByEmail(signup.getEmail());
if(userOptional.isPresent()) {
throw new AlreadyExistsEmailException();
}
//엔티티로 변환
var user = User.builder()
.name(signup.getName())
.password(signup.getPassword())
.email(signup.getEmail())
.build();
userRepository.save(user);
}
}
//UserRepository.java
package com.endofma.blog.repository;
import com.endofma.blog.domain.User;
import org.springframework.data.repository.CrudRepository;
import java.util.Optional;
public interface UserRepository extends CrudRepository<User, Long> {
Optional<User> findByEmailAndPassword(String email, String password);
//회원가입시 email 중복 체크
Optional<User> findByEmail(String email);
}
//AlreadyExistsEmailException.java
package com.endofma.blog.exception;
public class AlreadyExistsEmailException extends BlogException{
private static final String MESSAGE = "이미 가입된 이메일입니다.";
public AlreadyExistsEmailException() {
super(MESSAGE);
}
@Override
public int getStatusCode() {
return 400;
}
}
//AuthServiceTest.java
@Test
@DisplayName("회원가입 시 중복된 이메일")
void test2(){
//given
User user = User.builder()
.name("catnails")
.email("catnails@gmail.com")
.password("1234")
.build();
userRepository.save(user);
Signup signup = Signup.builder()
.email("catnails@gmail.com")
.password("1234")
.name("catnails")
.build();
//when
authService.signup(signup);
//then
Assertions.assertEquals(1, userRepository.count());
}
}
//AuthServiceTest.java
@Test
@DisplayName("회원가입 시 중복된 이메일")
void test2(){
//given
User user = User.builder()
.name("catnails")
.email("catnails@gmail.com")
.password("1234")
.build();
userRepository.save(user);
Signup signup = Signup.builder()
.email("catnails@gmail.com")
.password("1234")
.name("catnails")
.build();
//expected
Assertions.assertThrows(AlreadyExistsEmailException.class, () -> authService.signup(signup));
}
}
5. AuthController.signin()에 대한 테스트 코드 작성
//AuthController.java
@Test
@DisplayName("회원가입")
void test6() throws Exception {
//given
Signup signup = Signup.builder()
.name("catnails")
.password("1234")
.email("catnails@gmail.com")
.build();
//expected
mockMvc.perform(post("/auth/signup")
.content(objectMapper.writeValueAsString(signup)) //signup을 json으로 변환
.contentType(APPLICATION_JSON))
.andExpect(status().isOk())
.andDo(print());
}
}
'Projects > blog' 카테고리의 다른 글
blog40 : 회원가입과 비밀번호 암호화-3 (0) | 2023.02.26 |
---|---|
blog39 : 회원가입과 비밀번호 암호화-2 (0) | 2023.02.26 |
blog37 : JWT를 이용한 인증 - 암호화 키 분리 및 개선 (0) | 2023.02.23 |
blog36 : JWT를 이용한 인증 - application.yml 커스텀 설정값 만들기 (0) | 2023.02.22 |
blog 35 : JWT를 이용한 인증 - 만들어보자 (0) | 2023.02.19 |
Comments