굿노트 맥앱 유니버셜화 (아이폰앱 구매자한테 무료화)
Goodnote5가 ipad용, iphone용은 universal이라 한 번 구입으로 모두 사용할 수 있었다. 그런데 맥 카탈리나 업데이트부터 나온 mac용 앱은 별도의 구입으로 이용할 수 있었다. 아이패드로 노트했던 걸 맥에서 볼 수 있는 연속성이 없어서 아쉬웠지만, 추가적인 비용을 지불하면서까지 구입할 건 아닌 것… 더 보기 »굿노트 맥앱 유니버셜화 (아이폰앱 구매자한테 무료화)
Goodnote5가 ipad용, iphone용은 universal이라 한 번 구입으로 모두 사용할 수 있었다. 그런데 맥 카탈리나 업데이트부터 나온 mac용 앱은 별도의 구입으로 이용할 수 있었다. 아이패드로 노트했던 걸 맥에서 볼 수 있는 연속성이 없어서 아쉬웠지만, 추가적인 비용을 지불하면서까지 구입할 건 아닌 것… 더 보기 »굿노트 맥앱 유니버셜화 (아이폰앱 구매자한테 무료화)
List 타입을 네이밍할 때 올드스타일은 아래처럼 했다.
1 2 3 4 5 6 7 8 9 10 |
List<Member> memberList = Lists.newArrayList(); for (int i=0; i < memberList.size(); i++) { ... } // 혹은 for (Member member : memberList) { ... } |
그런데 최근(엄밀히는 최근도 아니… 오래됐…)에는 복수형을 사용하는 추세이다.
1 2 3 4 5 |
List<Member> members = Lists.newArrayList(); for (Member member : members) { ... } |
그런데!! Dto는? 예를 들어, MemberDto가 있다고 하면 복수형은? Dtos일까, Dtoes일까? 실제로 현업을 하다보면 두 가지를 혼용해서 쓰게 된다. (그리고 intellij는 spell check로 둘… 더 보기 »Dtos vs Dtoes
객체지향을 처음 공부할 때 항상 나오는 것은 클래스와 객체가 어떤 차이가 있는지 설명하는 것이다. 흔히, 면접때에도 많이 묻는 질문이다. 클래스는 그릇을 만드는 틀이고, 그 틀에서 만들어 낸 것이 객체(인스턴스)이다. 아마 많은 사람들의 기억속에는 마치 How are you? Fine, thank you,… 더 보기 »Class와 Instance의 차이
집에 있는 WiFi 라우터에서 접속된 정보를 확인했더니, 뭔지 모르겠는 기기들이 붙어 있었다. Rockrobo 이거는 구글만 찾아봐도1 샤오미 로봇청소기임을 알 수 있었다. Qca-ioeboard 이거는 도통 알 수가 없… 그러다가 네이버 블로그2를 봤더니 해당 칩이 Qualcomm에서 나온 무선접속 칩셋이고, LG전자 건조기에서 사용하고… 더 보기 »집에서 뜨는 WiFi 분석
테스트를 작성하려고 했더니, 아래와 같은 오류가 발생했다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:108) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:118) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83) at org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener.prepareTestInstance(SpringBootDependencyInjectionTestExecutionListener.java:43) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246) at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:97) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$5(ClassBasedTestDescriptor.java:337) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:342) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$6(ClassBasedTestDescriptor.java:337) at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) at java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:313) Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'io.github.freeism.service.FooService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1662) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1221) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1175) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:857) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:760) ... 82 more |
처음에는 왜 Bean을 인식하지 못하는지, 해당 Bean의 선언과 Configuration에서 Bean Scan Scope를 확인했는데 모두 정상이었다. 나중에 알게된 사실1 인데, 같이 일하는 사람과 서로 테스트의 방식이 달랐던 것이다. 평상시에 내가 제일 즐겨하는 controller… 더 보기 »@SpringBootTest + mockMvc vs @WebMvcTest
최근에 가구를 살 일이 있어서 일룸 페이지에 자주 들락거렸는데, 원래는 잘 되던 링크가 오늘따라 이상했다. 혹시나 와이파이 공유기가 해킹됐나 싶어서 깜짝 놀랐는데, 다시 곰곰히 분석해보니 일룸 사이트에 문제가 있는 것 같다. 이벤트 페이지에서 이 조합 구매하러 가기를 클릭하면, 원래는… 더 보기 »일룸 홈페이지 링크가 이상하다
그동안에 테스트를 진행할 때, 테스트의 분기와는 관계가 없는 어쩌면 자연스럽게 처리되어야 하는 Stub에 대해서는 @BeforeEach문에 적는 경우가 많았다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
@ExtendWith(MockitoExtension.class) class FooServiceTest { @Mock private FooRepository fooRepository; @BeforeEach void beforeEach() { givenActionFooEntitySaved(); } private void givenActionFooEntitySaved() { when(fooRepository.save(ArgumentMatchers.any(FooEntity.class))).thenAnswer(invocation -> invocation.getArgument(0)); } } |
Spring Context를 사용하지 않는 이상, @Autowired된 Bean들은 모두 Mock으로 생성을 해야 되는데, 테스트의 흐름과 관계없이 그냥 자연스럽게 되는 경우 (위의 케이스의… 더 보기 »Mockito UnnecessaryStubbingException
최근 프로젝트에서 조금 커다란 멀티모듈을 구성했더니, gradle build가 너무 오래 걸리고 중간에 out of memory를 발생시켰다. 그래서 intellij의 settings > Compile 옵션에서 JVM Option에 -Xmx1024m으로 메모리를 잡아주었는데도 동일했다. 좀 검색을 했더니1 gradle.properties 파일에 org.gradle.jvmargs=-Xmx1024m로 설정해주니 빌드가 쾌적해졌다. https://fishpoint.tistory.com/1671 ↩
월급을 받고나면, 이유를 모르는 여러 가지 공제들이 들어간다. 예를 들어, 소득세, 지방소득세, 고용보험, 건강보험, 국민연금 등등. 그 중에 소득세가 어떻게 부과되고 있는지 찾아본 결과를 공유한다. 일단 국세청에서 배포한 근로소득 간이세액표1라는 것이 있다. 그 자료에서 맞는 월급여 기준의 소득세를 원천징수한다. 단위가… 더 보기 »월급여에서 소득세(갑근세)를 부과하는 방식
간만에 블로그를 썼는데 구글 검색을 해봤더니 SEO에 문제가 있는지 노출이 잘되지 않았다. 어차피 쓴 글, 구글 검색에나 잘 노출되었으면 하는 맘이었는데… 갑자기 떠오른 것이 미디엄이었다. 예전에 잠깐 미디엄 플러그인을 붙여서 연동해서 상호 포스팅되도록 했던 것 같은데… 라며 찾아봤더니 Medium WordPress… 더 보기 »워드프레스 to 미디엄 플러그인 없어짐