Back-End
-
[Spring Boot] bootstrap css 파일 경로 인식 못 함Back-End/Spring Boot 2023. 3. 30. 11:36
spring boot 프로젝트를 만드는데 css 파일이 적용이 안되는 경우가 있다. 대부분은 경로 문제일 것이다. 📑 1. css, js 파일이 /resources/static 경로에 위치해 있는지 확인한다. 📑 2. /css/bootstrap.min.css 스프링 부트의 설정에 static 폴더가 기본 경로로 지정되어 있기 때문에 static은 포함하지 않고 static 밑의 경로만 적어주면 된다. (x) (o) 아래와 같이 부트스트랩이 적용된 걸 확인할 수 있다.
-
[Spring Boot] 서버 재시작 없이 html 변경하기 (thymeleaf)Back-End/Spring Boot 2023. 3. 29. 10:48
프로젝트를 진행하다보면 front단의 수정이 여러번 발생한다. Spring Boot를 사용하면 정적 소스들을 수정해도 브라우저에 바로 적용되지 않는 걸 확인할 수 있다. 즉) 서버를 항상 재시작해야한다. 이는 여간 불편한 게 아니다. 그리하여 서버 재시작 없이 html, js 등 정적 파일 수정시 반영될 수 있도록 설정하고자한다. 📑 1. devtools dependency 추가 implementation 'org.springframework.boot:spring-boot-devtools' 📑 2. application.properties 파일 수정 # 정적 리소스에 변화가 있을 때 바로 반영한다. spring.devtools.livereload.enabled=true # thymeleaf 참조 경로 s..
-
[jsp] <%@ include%>와 jsp:include 차이Back-End/Spring Legacy 2022. 11. 30. 16:17
📑 jsp:include 서버측 include가 아닌 클라이언트의 include라고 생각하면 된다. 즉) 출력 결과만(html코드)을 include한다. include 되는 페이지와 변수를 같이 사용할 수 없다. 📌 속성 page - 포함시키고자 하는 문서의 위치를 명시한다. - 상대경로뿐만 아니라 절대 경로도 가능하다. - 서블릿 컨테이너에 따라 HTML 페이지는 안 될 수도 있다. - GET 방식으로 파라미터를 전달 할 수 없다. - 동적으로 페이지 할당이 가능하다. 가 가능하다. flush는 문서의 출력 결과를 항상 버퍼내에서 갱신 하라는 의미이다. a.jsp 코드 a.jsp 결과에 b.jsp가 실행된 결과가 include 된다. 즉 따로따로 실행된 후 그 결과만을 가지고 include 한다. 📑 ..
-
[Spring MyBatis] selectKey 사용하기Back-End/Spring Legacy 2022. 11. 17. 09:57
MyBatis에서 selectKey를 사용하면 사전 어떤 키 값을 가져와서 증가시켜 입력하거나 혹은 입력후에 증가된 키 값을 받아올 수 있다. 형식은 아래와 같은데 하나씩 기능들을 적어보려 한다. 📌 keyProperty : selectKey 구문의 결과가 셋팅될 대상 프로퍼티 📌 keyColumn : 리턴되는 결과셋의 칼럼명은 프로퍼티에 일치한다. 여러개의 칼럼을 사용한다면 칼럼명의 목록은 콤마를 사용해서 구분한다. 📌 resultType : 결과의 타입 📌 order : BEFORE, AFTER을 셋팅할 수 있다. BEFORE로 설정하면 키를 먼저 조회하고 그 값을 keyProperty에 세팅한 뒤 insert 구문을 실행한다. 만약 AFTER로 설정하면 insert 구문을 실행한 뒤 seleceKe..
-
[MyBatis] resultType 객체 별칭(alias) 관리Back-End/Spring Legacy 2022. 11. 16. 11:12
Mapper.xml에서 쿼리문을 통해 값을 받아올 때 resultType을 아래와 같이 패키지명 그대로 사용할 수 있고 따로 별칭을 정해 resultType="aa" 이런식으로 작성할 수 있다. 그럼 어디서 설정해야할까? 그 경로를 따라가보자. 📌 1. mybatis-config.xml과 같이 설정 파일을 하나 만든다. 위의 코드와 같이 태그 안에 aliase로 지정할 값들을 넣어주면 되는 형태이다. type은 패키지 명, 즉 클래스 경로를 입력하면 되고 alias에 지정하고 싶은 별칭을 입력한다. 📌 2. application.properties에 설정 경로를 적어준다. 위에서 중요한 코드는 바로 이 코드일 것이다. 우리가 alias를 설정해둔 mybatis-mysql-config.xml 경로를 에 p..
-
[Spring Boot] 필터와 인터셉터 차이, 로그인 인증 체크하기Back-End/Spring Boot 2022. 11. 2. 14:30
지난번 포스팅에서 간단히 Filter, Interceptor, APO의 차이점과 개념에 대하 알아봤다. 이번엔 필터와 인터셉터로 로그 남기기와 로그인한 사용자만 특정 화면에 접근할 수 있도록 인증 체크하는 예제를 통해 알아보려고 한다. https://wonisdaily.tistory.com/89 [Spring] Filter, Interceptor, AOP 차이점 자바 웹 개발을 하다보면 공통적으로 처리해야 할 업무들이 많다. 예를 들어 로그인 관련(세션체크)처리, 권한체크, PC와 모바일웹의 분기처리, 로그, 페이지 인코딩 변환 등등. 공통 관련된 코드 wonisdaily.tistory.com 📑 공통 관심사 로그인한 사용자만 상품 관리 페이지에 들어갈 수 있어야한다. 상품 관리 컨트롤러에서 로그인 여부..
-
[Spring Boot] Bean Validation , 한계와 객체 분리Back-End/Spring Boot 2022. 11. 1. 12:16
📑 Bean Validation이란? 이전 포스팅의 검증 로직을 살펴보면 아래와 같이 직접 코드로 작성해야했다. 특정 필드에 대한 검증 로직은 대부분 빈 값인지 아닌지, 특정 크기를 넘는지 아닌지와 같이 매우 일반적인 로직이다. public String addItemV4(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) { //검증에 실패하면 다시 입력 폼으로 if(bindingResult.hasErrors()){ log.info("errors ={}", bindingResult); return "validation/v2/addForm"; } log.info("o..
-
[Spring Boot] 검증 요구사항 ( fieldError, rejectValue() ..)Back-End/Spring Boot 2022. 10. 28. 10:46
웹 서비스는 폼 입력 시 오류가 발생하면, 고객이 입력한 데이터를 유지한 상태로 어떤 오류가 발생했는지 친절하게 알려줘야한다. 그러기 위해서 검증이 필요한 것! 컨트롤러의 중요한 역할 중 하나는 HTTP 요청이 정상인지 검증하는 것이다. 그리고 정상 로직보다 검증 로직을 잘 개발하는 것이 더 어려울 수 있다. 고객이 만약 상품 등록 폼에서 상품명을 입력하지 않거나, 가격 , 수량 등 검증 범위를 넘어서면 서버 검증 로직이 실패해야한다. 이렇게 검증이 실패한 경우 고객에게 다시 상품 등록 폼을 보여주고, 어떤 값을 잘못 입력했는지 친절하게 알려줘야한다. 스프 검증에서 사용하는 주요 인터페이스와 클래스 등 점진적으로 하나씩 살펴보며 점점 나은 선택지를 적어보려고 한다. 가장 많이 사용하고 편리한 방법은 마지..