역시나 모든 언어들도 각자 자신들 만의 테스트 도구를 사용하여 개발을 하고 있는데 저만 모르고 살았었네요.. 자바 Junit & Jacoco 가장 널리 알려진 테스트 도구입니다. Jacoco의 경우 코드 커버리지를 측정하는 도구이며, 수많은 레퍼런스들이 넘쳐나고 있습니다. https://ko.wikipedia.org/wiki/JUnit JUnit - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. JUnit(제이유닛)은 자바 프로그래밍 언어용 유닛 테스트 프레임워크이다. JUnit은 테스트 주도 개발 면에서 중요하며 SUnit과 함께 시작된 XUnit이라는 이름의 유닛 ko.wikipedia.org https://namu.wiki/w/JaCoCo JaCoCo - 나무위키 이 저작물은 C..
스프링에서 사용하는 UserDetails서비스는 시큐리티가 유저 객체가 존재하는지 각각의 서비스 구현체(inMemory, DAO 등) 를 통해 검색하게 되고 검색된 유저정보를 UserDetails 객체로 변환해서 AuthenticationProvider로 리턴하는 기능을 담당하고 있다. 만약 등록된 사용자가 없는 경우 UsernameNotFoundException 을 리턴하게 된다. UserDetilasService는 인터페이스이며 하나의 메소드만을 가지고 있다. 이를 사용하는 우리는 각각의 시스템의 특성에 맞는 UserDetailsService를 커스터마이징 해서 구현을 하게 되며 기본 적인 규현은 다음과 같다. 간단하게 DB 검색을 통해 유저가 있는 지 확인 후 User 객체를 생성한다. @Overr..
스프링 시큐리티는 정적 파일에 대해서도 보안 검사를 하게 된다. 그렇기 때문에 굳이 보안 필터를 적용할 필요가 없는 리소스에 대해서는 보안 필터를 거치지 않고 바로 통과하도록 지원하는 설정이 WebIgnore 설정이다. 다만 spring security 버전이 올라가면서 해당 설정도 변경이 되었다. 기존 설정 @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { ... @Ovrride public void configure(WebSecurity web) throws Exception { web.ignoring() .requestMatchers(PathRequest.toStatic..
기존에 공부했던 시큐리티 형식이 변경되면서 많은 혼란이 오고 있네요. 특히 저같이 수박 걷핧기 하듯이 공부를 했던 사람들은 더 힘들 것 같습니다. 기본이 중요하다는 사실을 다시한번 알게 됩니다. Spring Security 5.7.0-M2 이후부터는 더이상 WebSecurityConfigurerAdapter 를 extends 해서 쓰지 않게 되면서 Configure 메서드를 오버라이딩 해서 사용했던 InMemory 방식의 유저추가는 다른 형태로 사용할 수 있습니다. //이렇게 사용했었습니다. @Ovrride protected void configure(AuthenticationManagerBuilder auth) throws Exception { String password = passwordEncode..
쿼츠 개발 시 다음과 같은 오류를 보게 되었다. org.quartz.SchedulerException: TriggerListener 'SimpleTriggerListener' threw exception: class me.myclude.quartz.info.TimerInfo cannot be cast to class me.myclude.quartz.info.TimerInfo (me.myclude.quartz.info.TimerInfo is in unnamed module of loader 'app'; me.myclude.quartz.info.TimerInfo is in unnamed module of loader org.springframework.boot.devtools.restart.classload..
프로그램이 처음 수행 시 이를 로컬에 설치 된 DB에 스키마와 데이터를 먼저 생성해 넣기 위해서 사용을 할 수 있다. 1. DB의 종류에 따라 다음과 같이 미리 SQL을 넣어둔다. 아래 내용은 Spring 데모 프로젝트인 spring-petclinic 에서 가져왔다. 출처 : github.com/spring-projects/spring-petclinic spring-projects/spring-petclinic A sample Spring-based application. Contribute to spring-projects/spring-petclinic development by creating an account on GitHub. github.com 2. application.properties 파..
매번 스터디 하면서 프로젝트 생성 시 junit5를 적용해서 테스트를 수행하는데 항상 이를 햇갈려서 이곳에 기록해 둔다.... 내 머리는 정말 안좋은 것 같다..ㅜㅜ dependencies { testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude module: 'junit' } testCompile group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.7.0' testImplementation 'org.junit.jupiter:junit-jupiter-api' //이클립스에서는 해당 주석을 푼다. (luncher 없다고 에러 발생..) /..
application.yml 에 대한 실행 환경을 분리하기 위한 방법은 여러가지가 있는 것 같습니다. 우선 몇가지 분리 방법에 대해서 끄적여 보도록 하겠습니다. 1. intellij 를 쓰면서 junit를 이용한 단위 테스트 시.. 단순히 test 디렉토리 밑에 resources를 만들고 안에 application.yml 파일을 넣어두면 작동합니다.... 이클립스 환경에서도 동일하게 될 줄 알고 해보았지면.. 몇일동안 해결 방법을 찾지 못했네요.. (스프링 부트 java 에 강제로 yml 디렉토리 설정해서는 되었지만.. 이는 제가 원하는 방법은 아니었네요..;) 2. 하나의 application.yml 파일에 spring.profiles.active 를 넣어 명시적으로 profile을 지정해 줍니다. s..
요새 JPA관련 공부를 열심히 하려고 하고 있는데.. 역시 메뉴얼 보다 디테일한 문서는 구할 수 없는 것 같습니다. spring.io 에 jpa 관련 메뉴얼을 보면 다음과 같이 Query Creation 이란 항목으로 메소드 이름으로 쿼리를 생성하는 규칙을 보여주고 있습니다. 그대로 복사하여 가져옴.. 메뉴얼을 한참동안 봐야 겠습니다. (언어의 압박으로 ㅜㅜ) 그런데.. 업무용으로 쓰기에는 간단한 조건을 제외하고는 쓰기 힘들겠네요. findByProductNameAndAddDateAndUpdateDateAndUserIdAndUserNameLikeDescAndActiveFalse... 메소드 명이 이따구라면.. 쓰기 힘들긴 하겠네요. ㅎㅎ; And findByLastnameAndFirstname … whe..
이번 경기도 + 성남시에서 지급하는 재난기본소득을 받아.. 이를 어떻게 사용할까 하다 초등학교 다니는 아들의 PC를 구매하고자 마음먹고 여기저기 알아봤습니다. 당연히 해당 자금은 성남시 내에서만 쓸 수 있기 때문에... 결국 성남의 조립 PC업체를 찾아 다니다가 한 곳을 방문하게 되었습니다. 결과만 놓고 보면 솔직히 좀 많이 거시기 하네요... ;; 이리저리 조립 PC부품을 선택하고.. 거기에 조립비 항목으로 몇만원이 추가되는 것 까진 이해가 되는데.. 그외에 별도의 튜닝비용 항목으로 5만원 이상의 비용이 더 발생한다고 합니다. 거기에 부품들을 주문하고 주문한 부품들에 대한 배송이 필요하기 때문에 택배비도 들어갑니다... 솔직히 잘 이해가 되지 않네요..... 조립비 말고 또 다른 비용이 들어 간다는건 ..