IT 천국 (127) 썸네일형 리스트형 [Spring boot] Spring boot test H2 DB 사용하기 보통 Unittest용으로 사용하는 DB는 실제 DB가 아닌 메모리 DB를 사용하는게 좋다. DB 서버의 물리적인 연결 필요없이 소스만 내려받으면 테스팅이 가능해지기 때문이다. H2 DB로 Unittest 환경을 구축하려면 우선 라이브러리 다운로드를 받아야 한다. Pom.xml 파일에 아래와 같이 디펜던시를 추가해 준다. com.h2database h2 compile Unit test를 실행할 active property(yml)에는 다음과 같이 database 설정 정보를 적어준다. spring.datasource.driver-class-name=org.h2.driver spring.datasource.url=jdbc:h2:mem:test;MODE=PostgreSQL;INIT=RUNSCRIPT FROM.. [Spring Boot] swagger ui HTML문서로 출력하기 Back end rest api를 개발하면 api 스펙 문서를 어떻게 만들지 고민하게 된다. 그 대안중 하나로 널리 쓰이고 있는 swagger-ui 를 활용하는 방법이 있을 것이다. swagger 형식에 맞게 doc 를 작성하고 서버를 실행하면 swagger 페이지를 볼 수 있다. 깔끔하게 rest api 스펙을 정리해서 보여주고 직접 api 테스트 및 결과 출력도 볼 수 있다. 그러나 여러 부서와 일을 하게 되면 산출물 공유시 문서가 필요할 경우가 있다. 서버 주소를 알려줄수도 있지만 오프라인으로 api 스펙 문서를 검토해야 할때는 별도의 문서 파일을 원하는 부서가 있을수 있다. swagger 구현을 넘어서 swagger 공식 홈페이지에서는 swagger editor라는 tool을 제공해주고 있다. 온.. [Javascript] ES6 템플릿 문자열 ES6에서는 템플릿 문자열을 문자열 연결 대신 사용할 수 있다. 그러면 문자열 중간에 변수를 삽입할 수도 있다. 전통적인 문자열 연결은 더하기 (+)로 문자열과 변수를 서로 이어붙이는 방식을 사용한다. getTitleOldVersion() { return this.lastName + ", " + this.firstName + " " + this.middleName; }, 템플릿에서는 ${ } 를 사용해 문자열 안에 변수를 집어넣을 수 있기 때문에 문자열을 단 하나만 사용해도 된다. getTitleEs6() { return `${this.lastName}, ${this.firstName} ${this.middleName}`; }, 템플릿 문자열에서는 공백 뿐아니라 개행문제 등도 유지시킨다. 따라서 아래와 .. [Vue.js] component ... is, keep-alive 알아보기 component 이 컴포넌트는 Build-In Component로 동적 컴포넌트를 렌더링 하기 위한 '메타 컴포넌트'라고 한다. 렌더링 할 실제 컴포넌트는 is props에 의해 결정된다. is props is 속성에는 문자열이나 컴포넌트 이름을 넣는다. keep-alive를 사용하는 동적 컴포넌트 is 속성을 사용하는 경우 다시 돌아왔을 때 계속해서 재렌더링 되어 기존의 클릭값이나 기존 데이터가 유지되지 않는다. 그래서 처음 생성된 컴포넌트 인스턴스가 캐시되기를 원하는 경우에 엘리먼트로 감싼다. 동적 컴포넌트, Keep-alive 예제 Main.vue Home; Company Home.vue I'm Home Component Company.vue {{getTitle}} add company count.. [Vue.js] Mixin 알아보기 기본 믹스인(Mixins)은 여러 컴포넌트 간에 공통으로 사용하고 있는 로직, 기능들을 재사용하는 방법이다. 믹스인에 정의할 수 있는 재사용 로직은 data, methods, created 등과 같은 컴포넌트 옵션들이다. 예제 1) main.vue testmixin.vue 실행결과 Life cyle 훅의 경우 Mixin의 hook이 먼저 실행되고 컴포넌트의 hook이 이어서 실행됨을 볼 수 있다. (created 메소드 참조) 옵션 병합 main.vue export default { name: 'Main', mixins: [testMixin], data() { return { message: 'Hello Main!!', mainData: 'mainData' } }, created: function () .. [Javascript] axios로 rest api 호출시 cookie 값 전달 안되는문제 해결 Vue나 react로 frontend를 개발하고 spring으로 backend를 개발할 경우 보통은 frontend server와 backend server의 origin이 달라지게 된다. 즉 frontend 주소는 localhost:3000 backend의 주소는 localhost:8080 이런 식이다. backend side에서 CORS 설정을 해줌으로서 origin이 달라지는 경우에 교차 접근 허용을 설정하여 동작을 진행하게 된다. 하지만 origin이 달라지는 경우 분명 browser에서는 cookie값이 확인이 되는데 backend에서 api 호출을 잡아보면 request객체에 cookie값이 안실려오는 경우가 있다. 이럴 경우에는 axios 호출시 config에 withCredentials :.. [WebAPI] Rest Api 작성 가이드 URI 기본구조 /api/{version}/{module}/.../...?{query-string} API 버전을 URL에 포함시킨다. 명사만 사용한다. 행위는 Method로 표현한다. URI는 Spinal-case, 그 밖에는 CamelCase를 사용한다. Path에는 복수형 명사를 사용한다. 리소스 간에 관계가 있는 경우 하위 리소스로 표현한다. /api/v1/common/users /api/v1/common/codes/{code-id} /api/v1/person/person-classifications /api/v1/common/pages/{page-id}/page-services /api/v1/person/person-classifications/{person-classification-id}/s.. [Spring boot] Spring Security login 예제 (filter 없이 수동 Autentication) Spring Security 로 개발을 진행하다 보면 수많은 커스터마이징으로 진행하는 인증 시퀀스가 헷갈리는 경우가 많다. 간단한 설정으로 Spring Security 개념들을 파악해 보고자 한다. 소스 트리는 다음과 같다. 기본이 되는 Security config 모습이다. Username/password 인증 및 필터없이 login api에서 직접 authenticate를 함으로 써 최소한의 설정으로 인증 테스트를 해본다. src/main/java/com/kindlove/security/example/login/config/SecurityConfig.java @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter .. 이전 1 ··· 5 6 7 8 9 10 11 ··· 16 다음