<if test="payIngYn == 'Y'">
</if>
또는
<if test="payIngYn.equals('Y')">
</if>
한글자를 IF 문에 넣었더니, 항상 에러가 났다.
Cause: java.lang.NumberFormatException: For input string: "Y"
항상 그냥 다른 방식으로 우회해서 가다가, 아무리 생각해도 이건 말이 안되고 뭔가 방법이 있을 것 같아 찾아보았다. (여기서 기억나는건, 전에 한번 MyBatis 에서 select문을 해왔을 때, 그 값이 Y 였을 때, JAVA에서 찍어보니 숫자 1 로 찍혀있던 기억이 난다. char를 숫자로 인식하나보다 라는 생각을 했던 기억이난다. 그런데 그 이유는 JAVA의 CHAR형태는 실제로 문자의 코드값을 저장하기 때문이라고 한다.)
이건, MyBatis 의 문제가 아니고, OGNL(Object Graph Navigation Language)의 문제라고 한다. MyBatis는 XML element 를 줄이고 다양한 조건을 처리하기 위해서 OGNL 표현 방식을 사용한다. (꿀팁! jsp 에서 주로 사용하는 JSTL 표현식이 OGNL 이기 때문에 이에 익숙한 사람은 MyBatis 조건문에 이를 적용하면 된다!)
반응형
싱클쿼테이션(') 으로 어떤 값을 감싼 경우, 이건 property 가 아니라고 명시해주는거지 '문자열'이라고 명시하는게 아니다. 그러면, 이를 자료형이 아니라 문자열 이라고 MyBatis에게 명시해주기 위해서는 더블쿼테이션(")으로 감싸주어 힌트를 주면된다.
그래서 결론! 해결책!
1. 싱클쿼테이션과 더블쿼테이션 위치를 변경 <if test='payIngYn=="Y"'>
2. 더블쿼테이션을 HTML 코드로 변경 <if test="payIngYn == "Y"">
3. toString() 함수를 이용해 String 형으로 변환 <if test="payIngYn == 'Y'.toString()">
File > New > Spring Starter Project프로젝트 기본 설정의존성 선택
-Spring Boot DevTools: 스프링 부트에서 제공하는 개발 편의를 위한 모듈 >> 변경된 코드를 서버 또는 화면에 신속하게 반영해 결과를 확인하기 위해서 사용 -MyBatis Framework: JDBC로 처리하는 상당 부분의 코드와 파라미터 설정, 결과 매핑을 대신해줌. -Spring Web: 웹개발에 필요한 종속된 의존성 디스크립터들의 집합 >> webmvc, tomcat, logging
spring 프로젝트 생성 완료
2. vue 프로젝트 생성
cmd 창에서 좀전에 생성한 spring project 경로로 들어가
여기서 알아둘 점은, 이 경로에 생성해도 괜찮지만 어차피 따로 build 를 해서 배포를 할 것이기 때문에 다른 경로에 생성해서 server로 연결해주면 그만이다!
vue creat 프로젝트명
명령어를 사용하여 프로젝트를 생성해준다. 나는 개인적으로 나중에 라이브러리를 깔기 싫어서 manually 를 선택하여 아래와 같은 옵션들을 넣었다.
프로젝트 생성 완료
반응형
3. vue.config.js 설정
이제, axios 를 이용해서 backend server로 접근하기위해서 vue.config.js 에 설정을 넣어주어야한다.
const { defineConfig } = require("@vue/cli-service");
module.exports = defineConfig({
transpileDependencies: true,
devServer: {
port: 8081, // 접속 포트 변경
proxy: {
"/api":{
target: "http://localhost:8080",
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
}, // devServer: back-end 내장 was의 주소를 작성하게 되면 된다.
}
});
여기서 backend 의 서버는 8080 포트로 돌릴꺼고 frontend의 서버는 8081로 돌릴꺼라는 설정을 이런식으로 넣어주면 된다. 그러면 axios 에서 url에 /api/원하는 url (backend 에서 지정할) 해주면 끄읏
은행사이트에 로그인하여 사이트를 이용하고 로그아웃을 안한 상태에서 다른 사이트에 접속했다고 가정하자. 그 다른 사이트에서 HTTP request를 통해서 우리 컴퓨터나 연동되어있는 은행의 cookies를 가져오는 form태그를 숨겨서 버튼 이벤트에 그 정보를 보내주는 걸어뒀을 수도 있다. 그걸 CSRF Attack 이라고 부른다.
그걸 막기위해 token 을 주어 그 사이트의 고유의 토큰을 가지고 있을 경우에만 form태그가 발동할 수 있게 지정해주는 작업을 넣어주는거다.
<!--보안 절차를 위해서는 모든 요청이 spring security 필터를 걸쳐가도록 함-->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--spring 폴더안에 context- 로 시작하는 xml을 읽을 수 있게 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:egovframework/spring/context-*.xml</param-value>
</context-param>
context-security.xml 파일 추가src/main/resources/egovframework/spring/context-security.xml
mybatis 를 사용할때 Mapper에 대한 정의들을 넣어두는 파일이다. 설명을 조금 붙이자면, 나는 VO를 따로 지정해서 하지않고 HashMap으로 데이터를 받아올 예정이라 propery name="configLocation"을 주석처리했다. 하지만 VO를 지정해서 사용하고 싶다면, sqlmap/config 폴더를 생성해서 아래와 같이 지정해 두면된다!
name="mapperLocations" 는 말그대로 실제로 실행될 쿼리들을 모아둔 xml파일들의 디렉토리를 지정해둔것이다. 맨 아래의 name="basePackage"는 위에 설명처럼 @Mapper 어노테이션을 가진 인터페이스의 자바 파일 디렉토리를 지정해둔것이다. mapperLocations 에 지정해 둔 것 처럼 sqlmap 폴더안에 mappers 폴더를 생성했다.
DB 생성
HeidiSQL (mariaDB) 에 데이터베이스 생성 (생성했다는 가정하에 진행하겠다. 참고는 아래 링크를 이용!):