@PostMapping("/api/v1/members")
public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member){
Long id = memberService.join(member);
return new CreateMemberResponse(id);
}
문제점
엔티티에 프레젠테이션 계층을 위한 로직이 추가된다.
엔티티에 API 검증을 위한 로직이 들어간다(@NotEmpty 등)
실무에서는 회원 엔티티를 위한 API가 다양하게 만들어지는데, 한 엔티티에 각각의 API를 위한 모든 요청 요구사항을 담기는 어렵다.
엔티티가 변경되면 API 스펙이 변한다.
결론
API 요청 스펙에 맞춰 별도의 DTO를 파라미터로 받는다.
V2 엔티티 대신에 DTO를 RequestBody에 매핑
@PostMapping("/api/v2/members")
public CreateMemberResponse saveMemberV2(@RequestBody @Valid CreateMemberRequest request){
Member member = new Member();
member.setName((request.getName()));
Long id = memberService.join(member);
return new CreateMemberResponse(id);
}
CreateMemberRequest를 Member 엔티티 대신에 RequestBody와 매핑한다.
엔티티와 프레젠테이션 계층을 위한 로직을 분리할 수 있다.
엔티티와 API 스펙을 명확하게 분리할 수 있다.
엔티티가 변해도 API 스펙이 변하지 않는다.
참고 : 실무에서는 엔티티를 API 스펙에 노출하면 안된다
TIL
최근 진행했던 프로젝트에선 requestDto,resposeDto 사용하는 이유를 자세히 알지 못해서,
계속된 DTO 생성의 번거로움을 느끼고 어느 부분에선 Entity를 사용하여 프로젝트를 진행했다
그러니 나중에 Entity별로 꼬여서 해결방안을 찾다가 Dto를 사용했더니 문제가 해결되었던 기억이 있다.
최근 JPA 강의를 들으며 공부를 하면서 requestDto,responseDto의 중요성을 알게 되었다.
시나공 같은 경우, 가독성이 높아 비전공자가 읽기에도 좋은 책이여서 필기를 준비하기에 어려움이 없어 좋았지만 비슷한 문제로 구성되어져 있는 게 아쉬웠던 것 같다. 시나공 실기를 가지고 정보처리기사 실기를 준비하는 경우는 실기시험 내용자체가 개념에 대해 탄탄하게 물어보기때문에 개인적으론 시나공 실기책으로는 공부할 때마다 텅빈느낌이라 수제비 사이트를 참고하였지만, 시나공 책을 베이스로 공부하기엔 개념이 탄탄하게 다져지지 않은 느낌이였다.
수제비 같은 경우, 필기 공부할때 주변에서 사용하는 걸 봤을 떄 예상 문제 난이도도 높았으며, 말도 안되는 오탈자가 많다는 이야기때문에 필기에선 사용하진 않았지만 수제비 실기의 경우, 예상 문제 난이도도 시나공에 비해 높은 편이며, 개념을 더 탄탄하고 중요하지 않다고 생각하는 부분은 과감하게 분량이 적은 것이 마음에 들었다. 무엇보다 예상 문제 난이도가 높은 게 시험대비할 때 좋은 것 같다.
옛날 정보처리기사와 다르게 기출문제를 문제 은행형식으로 공부한다고해서 합격하기엔 어려워진 것 같다. 확실하게 개념에 대해 이해만 한다면 충분히 합격할 수 있지만 개념에서 조금 더 꼬아서 문제를 내는 느낌이라 final 실전 모의고사를 풀어보는 것을 추천한다.
실제 난이도는 시나공 < 수제비 << final 실전 모의고사 느낌이다.
내가 본 시험에선 1번 문제에서 final 실전 모의고사에서 나온 걸보니, 앞으로도 실전 모의고사가 도움이 될 것 같다. final 실전 모의고사 경우, 수제비보다 더 어려운 모의고사 문제집으로 생각하면 될 것 같다. 실제 문제 유행이 바뀐 20년도 이전 문제도 섞여 있어 1회차부터 어려움을 느꼈다. 시험 3일 남겨놓고 책 배송을 받아 3회까지만 풀었는데도 2회는 딱 60점 1회는 40점대로 불합격점수를 얻어 불안했지만 실전 모의고사 푸는 것보다 3일동안 개념을 익히는 것으로 푸는 게 더 유용했다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num[] = new int[9];
for(int i=0;i<num.length;i++) {
num[i]= scanner.nextInt();
}
int count = 0;
int max = 0;
for(int i=0;i<num.length;i++) {
if (num[i]>max) {
max = num[i];
count =i+1;
}
}
System.out.println(max);
System.out.println(count);
}
}
Arrays.binarysearch()
🙋 질문➜ 🙆
🙋: 어느 부분에서 오류가 나는지 이클립스에선 오류없이 잘 돌아가는데 백준에서 제출시 자꾸 실패로 뜬다.