일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 로보어드바이저
- Algorithm
- 프로그래머스
- 자바스크립트
- React #Web #프런트엔드
- pyhton
- frontend
- 일임형
- 큐
- 백준
- algoritms
- 모던자바스크립트
- JavaScript
- 자료구조
- algorithms
- Ai
- RPA
- programmers
- BFS
- 알고리즘
- 파이썬
- 혁신금융서비스
- 자문형
- dfs
- Python
- 신한투자증권
- BAEKJOON
- JS
- SSAFY
- 스택
- Today
- Total
Step by Step
240513(@JsonNaming, @JsonProperty) 본문
FE - BE 협업
=> Jackson Library
- JSON <-> Java Object
- 부가적 : Snake <-> Camel
- 대표적인 어노테이션
@JsonNaming / @JsonProperty
: 어떨 때 사용할까? 예시 코드(Controller, Domain Object)
- 카멜 케이스(Camel Case)
- 첫 글자는 소문자로, 중간 글자들은 대문자로 시작하는 표기법
- ex) memberId, memberName, memberPhoneNumber
- 스네이크 케이스(Snake Case)
- 첫 글자는 소문자로, 중간 글자들은 언더바(_)가 포함되는 표기법
- ex) member_id, member_name, member_phone_number
userId 로 요청한 데이터는 user_id 파라미터로 저장이 되지 않는 것을 확인할 수 있습니다.
- 이유는 요청한 key 이름(user_id)와 응답 객체(userId)의 파라미터 명이 다르기 때문에 발생한 문제입니다.
🔔 @JsonProperty 사용 예시
package com.example.shoppingmall.Member;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
//@JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class)
public class Member {
@JsonProperty("user_id")
private String userId;
private String pw;
private String name;
private String email;
private String contact;
@Override
public String toString() {
return "Member{" +
"userId='" + userId + '\'' +
", pw='" + pw + '\'' +
", name='" + name + '\'' +
", email='" + email + '\'' +
", contact='" + contact + '\'' +
'}';
}
}
위 사진에서와 같이 이번에는 userId 까지 정상적으로 파싱 되어 전달된 것을 확인할 수 있습니다.
그러나, 1~2개 정도인 경우에는 해당 어노테이션을 사용하여 해결할 수 있겠지만
10~20개 이상이 된다면 필드 하나하나 추가하는 것은 코드도 길어지고 유지보수 면에서도 번거로운 작업이 됩니다.
이럴 때에 사용하는 것이 @JsonNaming 어노테이션입니다.
🔔 @JsonNaming 사용 예시
UserRequestDto에 있는 변수명들이 카멜케이스로 작성되어 있을 때 Request Body 값을 스네이크 케이스로 요청한다면
변수명이 일치하지 않아 값이 제대로 전달되지 않는다.
이럴 때 Jackson Library를 추가하여 @JsonNaming을 사용한다면...!
아래 예시처럼 카멜케이스로 작성되어있더라도 Postman에서 스네이크 케이스로 요청한다면
package com.example.shoppingmall.Member;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class)
public class Member {
private String userId;
private String pw;
private String name;
private String email;
private String contact;
@Override
public String toString() {
return "Member{" +
"userId='" + userId + '\'' +
", pw='" + pw + '\'' +
", name='" + name + '\'' +
", email='" + email + '\'' +
", contact='" + contact + '\'' +
'}';
}
}
값이 잘 전달된다...!
❓ ID 중복 검사
1) 중복 체크를 FE쪽에서 어떻게 할까? => ajax + jqueury : final 프로젝트
2) 회원가입 시킬 때 BE에서 중복체크를 해야 할까?
=> Client에서 중복 체크 요청 시와 실제 회원가입 시 db의 상태가 동일하지 않을 수 있으므로 중복 체크 시 해당 id에 대한 선점을 통해 db에 해당 id가 존재하지 않음을 보장할 수 있으나, 여러 id에 대한 중복 체크 요청등을 고려하면 실제 회원 가입 시점에서 다시 중복체크를 수행하는 것이 효율적이라고 생각한다.(김x우님의 의견 참조)
* 중복 체크 로직 구현
1) 중복 체크 API
2) 회원가입 요청 API가 오면 중복체크 로직 추가 구현(중복에 걸리면 if로 분기)
* FE & BE : 웹 취약점 악성 행위를 예방하는 방법.
- SQL injection
- XSS
- CSRF
❓ 비밀번호 암호화(로그인) FE vs BE
'Spring' 카테고리의 다른 글
240517 (0) | 2024.05.17 |
---|---|
240516 (0) | 2024.05.17 |
Log의 종류 & 리팩토링(?) (0) | 2024.05.09 |
240503(DAO, DTO) (1) | 2024.05.03 |
의존성 주입 및 Rest API (0) | 2024.05.02 |