의역/오역이 있을 수 있고 잘못된 부분이 다수 존재할 수 있습니다 요약 1. JSON을 파싱함 2. 기본 생성자를 이용해 반환할 객체(Object)를 생성한다 3. 키값을 기준으로 반복문을 돈다 3-1. 객체에서 getter 또는 setter를 통해 얻은 프로퍼티들 중 키값의 이름이랑 같은거를 찾음 3-2. 리플렉션을 이용해 빈 객체에 값을 채워넣는다 3-3. 반복 4. 결과(Object) 리턴 # Jackson - the Java Json Library / the best JSON parser for Java - 스프링 부트에서 기본적으로 내장하고 있음 # ObjectMapper - com.fasterxml.jackson.databind - POJO JSON 변환하는 역할 수행 MyValue value..
의역/오역이 있을 수 있고 잘못된 부분이 존재할 수 있습니다 요약 1. @RequestBody는 HttpMessageConverter가 HTTP Request Body 내의 데이터를 객체로 변환(역직렬화)하도록 시키는 애노테이션이다. 2. @Valid를 붙이면 검증을 할 수 있고, 실패 시 MethodArgumentNotValidException을 던진다. 3. application/json 타입의 경우 MappingJackson2HttpMessageConverter가 데이터를 객체로 역직렬화 해준다. 4. MappingJackson2HttpMessageConverter는 ObjectMapper를 사용하는데, 프로퍼티를 이용하기 때문에 getter / setter 둘 중 하나만 있으면 된다 @Reques..
의역/오역이 있을 수 있고 잘못된 부분이 존재할 수 있습니다 핵심 요약 1. @ModelAttribute는 "가장 적절한" 생성자를 찾아 객체를 생성 및 초기화한다 2. 객체 생성 및 초기화 -> Data Binding -> Validation 순서로 진행된다 3. Data Binding은 getter / setter가 존재하는 변수에 한해서 이루어진다 @ModelAttribute - Annotation that binds a method parameter or method return value to a named model attribute, exposed to a web view. (메서드 파라미터를 Bind 해주거나, 웹 뷰에 노출되는 모델을 지정된 name 속성으로 담아 리턴해주는 애노테이션) ..
요약 401 Unauthorized -> @WithMockUser, @WithMockUserDetails 사용 403 Forbidden -> with(csrf()) 추가 @WebMvcTest Annotation that can be used for a Spring MVC test that focuses only on Spring MVC components. Using this annotation will disable full auto-configuration and instead apply only configuration relevant to MVC tests (i.e. @Controller, @ControllerAdvice, @JsonComponent, Converter/GenericConverte..
작은 게시판 프로젝트를 진행하고 있다. 그 중에서 소소하게 비밀글 기능을 추가해서 맞는 비밀번호를 입력했을 때만 게시글 조회가 가능하도록 하는 기능을 추가하려고 했는데, 내 처음 계획으로는 대충 게시글 엔티티에 비밀번호 컬럼 하나 추가하고 대충 비교만 하면 되겠지? 싶은 생각으로 한두시간 정도면 끝낼 수 있는 작업으로 생각했었는데,,, 생각보다 훨씬 더 어려웠던 작업이었기에 기록으로 남겨본다. 사실 1인 프로젝트라 백엔드 + 프론트엔드를 동시에 다 만지려다보니 까다로웠던 것 같다. 풀스택 개발자여 아주 중요하지 않은 부분은 빠르게 넘어가고 핵심 작업만 다룬다! 작업 1. 게시글 생성 시 비밀글 유무 선택 / 암호화 저장 @Getter @Builder @NoArgsConstructor(access = Ac..
1. DTO를 왜 사용하는지? DTO(Data Transfer Object)는 말 그대로 데이터를 전송하는 객체이다. 벨덩에서는 "They are flat data structures that contain no business logic." 이라고 정의해뒀다. 1. @RequestParam으로 데이터를 일일히 받을 필요 없이 객체 하나로 한꺼번에 받을 수 있다 2. Bean Validation, Contoller에서 검증 기능을 분리할 수 있다. 3. 엔티티 내부를 캡슐화 할 수 있다 (뜬금없는 곳에서 엔티티의 값이 변경되지 않도록 한다) 1. 넘겨줄 필요가 없는 데이터를 보내지 않을 수 있다. (화면에 꼭 필요한 데이터만 보내줄 수 있다) 2. 순환참조를 예방할 수 있다 3. 엔티티 내부를 캡슐화 할..
@Valid는 자바 표준 진영에서 지원하는 검증 애노테이션이다. 단계별로 검증을 추가하는 식으로 진행해보자 # 검증 1단계 userId = 공백 X, 최대 30자 userPassword = 공백 X, 최대 30자 닉네임 = 공백 X, 최대 15자 이메일 = 공백 X 전화번호 = 공백 X, 최대 15자 @ToString @Getter @Setter @NoArgsConstructor @AllArgsConstructor public class UserSignUpRequestDto { @Size(max = 30) @NotBlank private String userId; @Size(max=30) @NotBlank private String userPassword; @Size(max = 15) @NotBlank ..
보통 실무에서 개발은 혼자 하는 것이 아니라 팀을 이루어서 협업으로 진행되게 된다. 백엔드가 만들어 놓은 API를 프론트엔드가 알아야 하는데 API를 만들고 수정할때마다 카톡으로 공유할 수는 없는 노릇이다. 이런 문제를 해결하기 위해 등장한 것이 Swagger 되겠다. 아이콘부터 뭔가 있어보이게 생겼다. Swagger 공식 홈페이지를 들어가니까 SwaggerHub 으로 연결되길래 Swagger가 없어지고 또 SwaggerHub로 바뀐건가? 싶었는데 그런건 아니었다. 근데 Swagger 홈페이지에 들어가서 공식 API 문서를 찾아보려고 하는데 한참 봐도 Getting Started 항목이 안보이는 것이었다. 검색창에 gradle 쳐보니까 그제서야 자바와 관련된 뭐가 떠서 찾아보니 Swagger API를 지..