일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코딩
- react native
- 리엑트 네이티브
- Redux
- 상태관리
- expo
- 비전공자
- 리엑트
- 인스타그램
- Java
- 풀스택 개발자
- 개발자
- 스타트업
- 스프링
- react-native
- 풀스택
- 백엔드
- 프론트엔드
- Spring
- 국비 지원
- spring boot
- ffmpeg
- 국비지원
- 클론코딩
- 자바
- 개발
- react
- 스프링 부트
- 프론트 엔드
- 비전공
- Today
- Total
오티스의개발일기
[SPRING BOOT + REACT NATIVE] 인스타그램 클론 만들기 (5) spring boot 유저 도메인과 컨트롤러 만들기 -git 참조- 본문
[SPRING BOOT + REACT NATIVE] 인스타그램 클론 만들기 (5) spring boot 유저 도메인과 컨트롤러 만들기 -git 참조-
안되면 될때까지.. 2022. 12. 27. 22:01
< 이전글
다음글 >
오늘은 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
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
정상대로 동작하는걸 확인할수있다.
혹시모르니 정규식도 확인해보도록하겠다.
2가지 방식을 실행해보도록 하겠다.
1. 유저 이름이 없을때
2. 이메일형식이 올바르지않을때
둘다 정확히 의도한대로 동작한걸 볼수있다.
이것으로 포스팅을 마치도록 하겠다
다음시간에는
aop 와 customException 에 대해 포스팅해보도록 하겠다.
깃 참조
https://github.com/1domybest/react-native-ig-clone.git
다음글 >