본문 바로가기

Java

(189)
H2 Database 사용법 최초 생성 주소를 아래와 같이 생성(파일생성)jdbc:h2:~/ 최초 생성 이후 접속 시 접근 주소jdbc:h2:tcp://localhost/~/
MAVEN 도서 읽으면서 정리한 내용 [자바 세상의 빌드를 이끄는 메이븐] 이라는 책을 읽으면서 알게된 내용을 정리하려고 함. 메이븐은 'mvn' 명령을 실행하면 기본적으로 pom.xml 파일을 읽어 빌드를 실행한다. pom.xml 파일이 아닌 다른 설정 파일을 사용하고자 한다면 '-f' 또는 '--file' 옵션을 사용하면 된다. ex) mvn -f mypom.xml test 아키타입 메이븐의 템플릿 프로젝트로 프로젝트를 생성하면 프로젝트의 뼈대를 자동으로 생성할 수 있다. 메이븐의 이 같은 기능을 아키타입 이라고 한다. 메이븐에서 제공하는 아키타입은 메이븐 중앙저장소에서 관리한다. 메이븐 아키타입을 통해 기본 디렉토리 구조를 자동으로 생성한다. (project이름/src/main/java/groupId값 으로 만들어지는 것) pom.xm..
View에 사용자 이름을 전달하는 Controller 중복 코드 제거 문제 현재 Header메뉴에 사용자 이름을 표시하고자 사용자 인증이 완료된 경우 GET요청을 처리하는 ViewController에서 Model에 사용자 이름을 담아 view에 전달하고 있는데, 이 코드가 로그인이 필요한 메서드에 모두 포함되고 있어서 filter를 활용하여 코드 중복을 제거하고자 함 상기 코드에서 Model.addAttribute(“username”,findUsername); 부분이 중복되고 있습니다. 해결 과정 OncePerRequestFilter Class 활용 Http Request의 한 번의 요청에 대해 한 번만 실행하는 Filter인 OncePerRequestFilter를 상속받아 UsernameFilter Class를 생성했습니다. 이를 활용하여 request에 data(사용자..
검색 이력 저장 시 시간 저장 문제 해결 Spring Boot v2.7.18, Mybatis, MariaDB 환경에서 개발하던 중 발생한 문제 검색 이력 저장 시 milliseconds 단위까지 저장되지 않음(24.03.14) 문제 검색 이력을 담는 테이블의 Mapper를 JUnit5로 테스트 하던 중 검색 이력 저장 시 milliseconds 단위까지 저장되지 않는다는 것을 발견했습니다. 현재 사용자의 login_id와 검색 시간인 search_date 두개의 컬럼을 PK로 사용하고 있고, search_date가 milliseconds 단위까지 포함해야 데이터 중복이 일어나지 않기 때문에, milliseconds 단위의 저장은 필수로 이루어져야 합니다. 해결 과정 알고보니 DB별로 TIMESTAMP 타입의 사용법이 달랐고, MariaDB의 T..
페이지네이션 구현 시 onClick 함수 호출 오류(24.03.14) 문제 도로명주소 검색 페이지인 search.html에서 도로명 주소 검색결과 리스트의 pagination을 JavaScript를 이용해서 동적으로 구현하고 있고, pagination 요소에 검색결과를 호출하는 함수인 roadAddrApi와 매개변수인 페이지번호,검색어를 OnClick Event로 전달하려고 했으나, 전달되지 않고 다음과 같은 오류가 발생하였음 “Uncaught ReferenceError: 강남대로 is not defined at HTMLAnchorElement.onclick ((index):1:15)” 해결 과정 Chrome의 개발자 도구로 확인했을 때, 검색어 글자는 제대로 들어가는 것을 확인하였습니다 이 오류에 대해 검색해보니 변수가 그대로 들어가는 문제임을 알게 되었습니다. 그래서 ..
Spring Security CSRF 적용하기(With Thymeleaf) Security Config의 @EnableWebSecurity 어노테이션을 통해 csrf 토큰처리가 자동으로 이루어진다. @Configuration @EnableWebSecurity @EnableMethodSecurity @RequiredArgsConstructor public class SecurityConfig { 현재 view 단을 Thymeleaf v3.0.15를 통해 처리중인데 Thymeleaf 를 사용하는 경우 손쉽게 csrf 처리를 할 수 있다. CSRF 적용 후 Logout 404 error 발생 문제 : csrf공격 처리를 위해 SecurityConfig에 csrf.disable()코드를 지우고 csrf설정을 활성화했더니, 기존의 a태그로 “/logout”경로로 요청을 보내서 처리하는 ..
도로명 주소 API 구현 { "common": { "totalCount": "75", "currentPage": "1" }, "juso": [ { "roadAddr": "서울특별시 서초구 강남대로12길 6 (양재동)", "jibunAddr": "서울특별시 서초구 양재동 326-1" }, { "roadAddr": "서울특별시 서초구 강남대로12길 8 (양재동)", "jibunAddr": "서울특별시 서초구 양재동 326-2 성경빌딩" }, {
Filter 와 interceptor, AOP 차이와 용도 이번 면접에서 아직 java에 대해서 정확하게 모르는 구나...! 라고 느꼈고java, spring 에 대해서 다시 공부해야겠다고, 생각했습니다 😭그래서 정리해보는 Filter와 interceptor 그리고 AOP종류실행시점FilterDispatcher Servlet에 요청이 전달되기 전/후 실행InterceptorServlet이 Controller mapping method를 호출하기 전/후 실행AOPtarget joinPoint(method)가 실행되기 전,후,자유롭게 호출Filter웹 어플리케이션에 전반적으로 사용되는 공통적인 기능을 구현할 때 적용할 수 있습니다.특히 공통적인 기능을 서블릿이 호출되지 전에 수행(전처리)하거나 서블릿이 호출되고 난 후에 수행(후처리)시 사용. 필터를 사용하면 클라..