Q. 공부하는 건 어때요?
A. 할만합니다. 이름 짓는 것만 빼면요
오류의 종류 :
404 Not Found :: 내가 오타를 냈다. found인데 fond라고 썼을 때 같이... 오타가 나는 경우가 대부분이었다.
405 method not allowed :: POST를 해야 하는데 GET를 하고 있을 때 일어났다.
500번대 에러 :: 서비스 쪽의 에러
502 Bad Gateway :: 무언가 잘못된 응답을 받아서 생긴 에러
//model
@NotNull
@Length(min = 2, max = 30)
@Column(nullable = false , length = 30)
private String phoneNumber;
//이런 스타일로 구성되며,
//controller
public String setMember(@RequestBody @Valid MemberManageRequest request) {
memberManageService.setMemberManage(
request.getAge(), request.getHeight(),
request.getWeigh(), request.getName(),
request.getPhoneNumber(), request.getGender()
);
return "Thank YoooooooooooooU!";
}

이 @Valid를 통해 검증 작업이 진행되는데, 이 것을 사용하기 위해선.

build.gradle의 dependencies에
implementation 'org.springframework.boot:spring-boot-starter-validation'
아래 문구를 추가해야 한다.
이건 리스트로 이해했다.
서류 뭉치들이 복수 get이고, 그 뭉치 안에 있는 하나의 정보가 단수 get이다
** DB리스트에서 정보를 가져오게 될 때, Id값을 같이 가져와야한다 (그래야 구분이 쉽다)
대부분은 단수 get의 정보를 가져오는 과정에서 효율을 위해서라고 한다.
리스트의 등록과 출력, 이후 리스트에서 Id값에 해당하는 정보를 빼오는 기능을 구현해보는 것을 배웠다.

위의 컨트롤러를 이용하여 접근하도록 하며.
/////model - CustomerItem
@Getter
@Setter
public class CustomerItem {
private Long id;
private String name;
private LocalDate date;
private String phoneNum;
}
///// service
public List<CustomerItem> getItems() {
List<Optical> originList = opticalRepository.findAll();
//Optical 리스트에 있는 리포지토리를 전부 가져와 originList로 지정한 뒤,
List<CustomerItem> result = new LinkedList<>();
// 새로운 리스트를 담을 공간을 만들어 CustomerItem의 리스트의 결과값에 저장한다.
for( Optical item : originList) {
CustomerItem addItem = new CustomerItem();
addItem.setName(item.getName());
addItem.setPhoneNum(item.getPhoneNum());
addItem.setId(item.getId());
addItem.setDate(item.getDate());
result.add(addItem);
}
return result;
}
이렇게 하나의 서비스를 만들어서 첫 번째 @GetMapping에 구현하였다.
이후 나타나는 결과값은
[
{
"id": 1,
"name": "L1N451",
"date": "2023-01-17",
"phoneNum": "010-1111-2222"
},
{
"id": 2,
"name": "L1N451",
"date": "2023-01-17",
"phoneNum": "010-1111-2222"
}
]
이렇게 구현되었다.
이제 이 복수의 get에서 다시 하나의 값을 뽑아내어 출력해야 하는데, 이 때의 값이 단수 get이다.
/////model - CustomerResponse
@Getter
@Setter
public class CustomerResponse {
private Long id;
private String name;
private String phoneNum;
private String eyesight; //(좌, 우 )시력
private LocalDate date;
}
//////service
public CustomerResponse customerResponse(long id){
Optical originData = opticalRepository.findById(id).orElseThrow();
CustomerResponse result = new CustomerResponse();
result.setId(originData.getId());
result.setName(originData.getName());
result.setPhoneNum(originData.getPhoneNum());
result.setDate(originData.getDate());
result.setEyesight(originData.getEyeLeft()+"/"+ originData.getEyeRight());
return result;
}
서비스에서 CustomerRepository의 id값을 가져오고, Optical의 데이터에서 id값을 가져오고, 대응하는 id값이 없으면 프로그램을 종료하는방식으로 진행하였다.
CustomerResponse의 결과값에 새로운 CustomerResponse()의 저장 공간을 만들고,
그 안에 originData값을 넣고, 결과값을 리턴한다.
작성 후기
😂 이름 작성에 대한 스킬의 중요성...
- 이름을 잘 지어야 흐름이 파악된다고 했던 강사님의 말이 맞았다. 정확하게 짓고 나니 모든 것이 보이기 시작하다니..
