오티스의개발일기

[SPRING BOOT + REACT NATIVE] 인스타그램 클론 만들기 (5) spring boot 유저 도메인과 컨트롤러 만들기 -git 참조- 본문

개발/spring boot

[SPRING BOOT + REACT NATIVE] 인스타그램 클론 만들기 (5) spring boot 유저 도메인과 컨트롤러 만들기 -git 참조-

안되면 될때까지.. 2022. 12. 27. 22:01
728x90

 

 

 


< 이전글

2022.12.27 - [개발/spring boot] - [SPRING BOOT + REACT NATIVE] 인스타그램 클론 만들기 (4) 풀스택 spring boot로 api 만들기 프로잭트 시작

 

[SPRING BOOT + REACT NATIVE] 인스타그램 클론 만들기 (4) 풀스택 spring boot로 api 만들기 프로잭트 시작

< 이전글 2022.12.26 - [개발/react-native] - [REACT NATIVE] 리엑트 네이티브 인스타그램 클론 코딩 (3) 구글 로그인구현 및 급 react-native-cli 로 급 우회.... google-signin 2022-12-26 기준 동작함 [REACT NATIVE] 리엑트

otis.tistory.com


 

 


다음글 >

2022.12.29 - [분류 전체보기] - [SPRING BOOT + REACT NATIVE] 인스타그램 클론 코딩 (6) aop 와 customException 설정하기 -git 참조-

 

[SPRING BOOT + REACT NATIVE] 인스타그램 클론 코딩 (6) aop 와 customException 설정하기 -git 참조-

< 이전글 2022.12.27 - [개발/spring boot] - [SPRING BOOT + REACT NATIVE] 인스타그램 클론 만들기 (5) spring boot 유저 도메인과 컨트롤러 만들기 [SPRING BOOT + REACT NATIVE] 인스타그램 클론 만들기 (5) spring boot 유저

otis.tistory.com


오늘은 api의 컨트롤러 부분을 만들것이다

만들 파일을 밑에 나열해보겠다

 

1.User : 엔티티

2.CMRespDTO : api 통신시 사용할 response 용 dto

3.RequestUserRegisterDto : 요청받은 데이터 dto

4. UserController.java : 컨트롤러

5. swagger2 (밑 포스팅 참조해놓음) : spring boot api 문서 라이브러리

 

 

할것들이 많다

시작해보자

 

폴더 구조

 

 

 

# 0.  User.java 파일 생성

 

 

 

 

 

 

# 0.  User 엔티티 생성

user.java

package com.example.backend.domain;

import lombok.*;

import javax.persistence.*;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Data
@Builder
@Table(name = "user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "userNo")
    private Long no; // pk

}

 

 

어노테이션에대해 간략하게 설명하겠다

 

@Entity = 말그대로 엔티티이다 이걸 적어줘야 JPA가 인식을하고 DB파일을 만들어준다

 

@NoArgsConstructor(access = AccessLevel.PROTECTED) = 파라미터가 없는 생성자를 자동으로 만들어준다

또한 JAVA를 한사람은 알겠지만 PROTECTED를 사용하면 다른 패키지에서 사용이 불가능하지만 자식클래스에는 접근이 가능하다

 

@AllArgsConstrutor = @NoArgsConstructor 와반대로 이건 모든값을 생성자로 받는다 

 

@Data = Lombok 어노테이션으로 Getter Setter 를 자동으로 생성해준다

 

@Builder = 변수 하나하나 setter 로 넣을 필요없이 .no(no) 이런식으로 set 해준후 User를 반환한다 dto에서 쓰일예정이다

 

@Table(name= "user")  = 기본적으로 JPA가 클래스명에따라 테이블명을 알아서 만들어준다 Table어노테이션을 쓰면 테이블명을 미리 지정할수있다.

 

 

나머지를 작성해보자

 

일단 저번시간에 만들었던 google login 에서 받는 변수들을 채워넣을것이다.

그때 받았던 값들이

id 

name

email

profilePicture 

 

정도됬다 .

 

일단 profilePicture은 제외하고 나머지를 적어주겠다

그이유는 후반에 파일업로드를 aws s3를 이용할지 아직 안정했기때문이다.

 

user.java

package com.example.backend.domain;

import com.sun.istack.NotNull;
import lombok.*;

import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Data
@Builder
@Table(name = "user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "userNo")
    private Long no; // pk

    private String userName; // 이름

    private String nickName;

    private String email; // 이메일

    private String provider; // 로그인한 sns 브랜드명 예) google

    private String providerId; // 로그인한 sns의 회원 고유번호 예)asdAKSDJjwndjicIAI2314

    private String phone;

    private LocalDateTime regDate;


    @PrePersist
    public void regDate() {
        this.regDate = LocalDateTime.now();
        this.nickName = this.userName;
    }
}

 

 

 

 

# 1.  CMRespDto.java

CMRespDto axios 요청이 들어왔을때 반환할때 좋은 dto 이다.

이걸 만들어주는 이유는 매우 단순하다.

바로 통일화이다.

그래야 클라이언트에서 받을때 매번 바뀌지않고 일정하기때문이다.

너무 당연해서 할말이없다... 그냥 만들자..

 

CMRespDto.java

package com.example.backend.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@NoArgsConstructor
@AllArgsConstructor
@Getter @Setter
public class CMRespDto<T> {
    private int code;
    private String message;
    private T data;

}

 

#2. RequestUserRegisterDto.java 생성

RequestUserRegisterDto.java

package com.example.backend.dto.user.request;

import com.example.backend.domain.User;
import lombok.Data;
import org.springframework.lang.Nullable;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;

@Data
public class RequestUserRegisterDto {

    @NotBlank(message = "이름을 입력해주세요")
    private String userName; // 이름

    @NotBlank(message = "이메일을 입력해주세요.")
    @Email(message = "정확한 이메일을 입력해주세요")
    private String email; // 이메일

    @Nullable
    private String provider; // 로그인한 sns 브랜드명 예) google

    @Nullable
    private String providerId; // 로그인한 sns의 회원 고유번호 예)asdAKSDJjwndjicIAI2314

    @Nullable
    private String phone;

    public User toEntity () {
        return User.builder()
                .userName(userName)
                .email(email)
                .provider(provider)
                .providerId(providerId)
                .phone(phone)
                .build();
    }
}

 

 

#3. UserController 생성

 

UserController.java

package com.example.backend.controller;

import com.example.backend.common.exception.CustomApiException;
import com.example.backend.dto.CMRespDto;
import com.example.backend.dto.user.request.RequestUserRegisterDto;
import com.example.backend.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@RestController
@RequiredArgsConstructor
@CrossOrigin(origins = {"*"})
@RequestMapping("/api/user")
public class UserController {

    private final UserService userService;
    @PostMapping("/register")
    public CMRespDto<?> register (@Valid @RequestBody RequestUserRegisterDto requestUserRegisterDto) {
        return new CMRespDto<>(200, "회원 가입", requestUserRegisterDto);
    }
}

 

일단 response 는 받은 데이터를 그대로 돌려주도록 하겠다.

 

 

 

swagger 를 통하여 잘 동작하는지 확인해보자

 

swagger 관련 포스팅은 밑에 올려놓겠다.

 

2022.12.29 - [개발/spring boot] - [SPRING BOOT] SWAGGER2 사용하여 api 테스터 만들기 postman 보다 편리한 swagger2

 

[SPRING BOOT] SWAGGER2 사용하여 api 테스터 만들기 postman 보다 편리한 swagger2

오늘은 post man 대신 swagger2 를 사용해보겠다. 일단 swagger 에대해 알아보자 swagger 란? 위키백과에 있는스웨거(Swagger)는 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형

otis.tistory.com

 

 

 

 

정상대로 동작하는걸 확인할수있다.

 

혹시모르니 정규식도 확인해보도록하겠다.

 

2가지 방식을 실행해보도록 하겠다.

 

1. 유저 이름이 없을때

 

2. 이메일형식이 올바르지않을때

 

 

 

 

둘다 정확히 의도한대로 동작한걸 볼수있다.

 

이것으로 포스팅을 마치도록 하겠다

 

다음시간에는 

aopcustomException 에 대해 포스팅해보도록 하겠다.

 

 

 

깃 참조

 

https://github.com/1domybest/react-native-ig-clone.git

 

GitHub - 1domybest/react-native-ig-clone

Contribute to 1domybest/react-native-ig-clone development by creating an account on GitHub.

github.com


다음글 >

 

2022.12.29 - [개발/spring boot] - [SPRING BOOT + REACT NATIVE] 인스타그램 클론 코딩 (6) aop 와 customException 설정하기 -git 참조-


 

728x90
Comments