목록Java (54)
오답노트
리팩터링 계기과제 전형을 진행하면서 나름 재밌었기 때문에 이 프로젝트에서 아쉬웠던 부분을 발전, 보완하고 싶다는 생각이 들었다. (결과는 탈락) 과제 전형 제출 후 여러 일정이 겹쳐서 바로 코드를 들여다 보지는 못했지만, 평소 생각하던 부분을 바꿔보고 싶다고 생각했고, 그 중 하나는 오늘 이야기 하려는 Controller에서 요청에 대한 Parameter 유효성 검증이다. 검증 로직 개선우선 가장 최근의 Controller의 유효성 검증 로직을 살펴보자 @PostMapping()public ResponseEntity saveAlarm(@RequestBody AlarmRequestDto alarmRequestDto) { AlarmResultResponseDto alarmResultResponseDto..
Json String -> 객체import com.fasterxml.jackson.databind.ObjectMapper;import java.util.List;import java.util.Arrays;// 리스트로 받는 법// resultList은 List 이다ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);List harmornyRoomDtos = Arrays.asList(mapper.readValue(resultList.toString(), HarmornyRoomDto[].class)); harmornyRoomListDto.setHarmornyroomL..
소스코드import org.junit.jupiter.api.Test;import org.junit.jupiter.api.extension.ExtendWith;import org.mockito.InjectMocks;import org.mockito.junit.jupiter.MockitoExtension;@ExtendWith(MockitoExtension.class)public class NaverSearchServiceImplTest { @InjectMocks private NaverSearchServiceImpl naverSearchService; @Test void testHarmornyroomSearch() { naverSearchService.getHarmornyR..

한글 깨짐 홈페이지 입니다 해결되지 않은 meta 태그 홈페이지 입니다 이건 왜 안되는걸까.. 해결 홈페이지 입니다

Maven 의존성 추가 ... org.apache.tomcat.embed tomcat-embed-jasper application.properties 설정 추가spring.mvc.view.prefix=/WEB-INF/views/spring.mvc.view.suffix=.jsp 경로 추가결과 확인

@Controller일반적인 API를 만드는 것 가능Model을 인자로 주게 되면 View를 호출 할 수 있음@ResponseBody를 활용하면 REST 방식으로 응답 가능@RestControllerRest API를 만드는 것에 용이하다.인터페이스를 보면 @Controller와 @ResponseBody를 사용하고있다.Model를 인자로 줘도 View를 호출 하지 못함package org.springframework.web.bind.annotation;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation..
OAuth2 다량의 사용자를 보유하고 있는 벤더에게서 사용자 정보를 위임을 받아 사용자를 가입하게 하는 방식이다. 개발 환경 구축 dependencies { implementation("$boot:spring-boot-starter-oauth2-client") } build.gradle에 위와 같은 의존성을 추가한다. spring: security: oauth2: client: registration: google: client-id: 532557492921-oanhrsrege0kqvb7q1v0v2o4lcu0ktlc.apps.googleusercontent.com client-secret: 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 application.yml 에 위와 같이 설정한다..
세션 관리 서버는 모든 요청에 아이디/패스워드를 요구 할 수 없다. 그래서 한 번 로그인 하면 토큰을 발급하고, 세션에는 토큰을 저장해 세션이 유지되는 동안, 혹은 remember-me 토큰이 있다면 해당 토큰이 살아있는 동안 해당 토큰만으로 사용자를 인증하고 요청을 처리한다. SessionManagementFilter SessionRegistry를 Bean으로 등록하여 SessionInformation(세션 사용자)를 모니터링 할 수 있다. 만료된 세션에 대한 요청은 세션 즉시 종료하고, 만료 판단은 SessionManagementFilter 의 ConcurrentSessionControlAuthenticationStrategy 에서 처리한다. @Bean SessionRegistry sessionReg..
영속성 전이 (Cascade) 영속성 전이는 포함하고 있는 속성에 대해 현재 속성이 받는 영향을 전달하는 것이다. 예를 들어 Book 과 Publisher 가 1:N 관계를 가지고 있고, Book을 제거 하면 Publisher도 같이 제거 해야하는데, 그렇게 하려면 쿼리를 두 번 날려야한다.(각각 삭제에 대한 쿼리) 하지만 영속성 전이를 통해 Book이 삭제 될 때, Publisher와 연결되는 Book이 삭제된다면 해당 Publisher도 삭제한다. @Entity @NoArgsConstructor @Data @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) @DynamicUpdate public class Book extends Base..
1:1 관계 Book 과 BookReviewInfo 의 1:1 관계를 나타내는 예시이다. 연결할 두 Entity에 상대방 멤버 변수를 만들고 OneToOne Annotation을 달아주면 연결된다. OneToOne Annotation에 mappedBy를 설정하게 되면 ToString이 순환 참조로 인해 에러가 발생한다. 둘 다 사용하고 싶다면 한쪽에는 @ToString.Exclude를 사용하자. OneToOne @Entity @NoArgsConstructor @Data @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class Book extends BaseEntity { @Id @GeneratedValue(strategy ..