안녕하세요. 오늘은 얼마전 Flex 한 아이패드를 노트북 usb로 연결하였더니 나타났던 "충전 중이 아님" 메시지를 해결하는 방법에 대해서 포스팅하고자 합니다. 일단 저는 아애패드를 usb 단자로 연결하여 twomon se 라는 어플리케이션을 이용하여 듀얼모니터 형식으로 카페에서 Inflearn을 들으면서 아이패드는 충전중인 상황을 연출해보려고 하였습니다만 아래와 같은 메시지를 보았습니다. 이게 지금... 제가 원한 충전을 하지 못하는 상황이 되어버렸는데요. 이러한 문제는 제가 전기과가 아니라서 잘 모르겠지만 우리 전자기기는 대부분 220v를 사용하고 해외는 110v를 많이 사용하잖아요. 이와 비슷한 방식으로 충전단자의 mA 값이 다르다고 하더라구요. 그래서 찾아봤더니 ASUS AI CHARGER라는 소..
안녕하세요. 오늘은 그동안 사용해왔던 여러가지 Dependency Injection 방법들에 대해서 소개해보고자 합니다. 일단 Dependency Injection이 무엇인지부터 이야기가 선행되어야 할텐데요. 다들 아시겠지만 스프링에서의 가장 기본적인 개념이 되겠고, 특정 계층(컨트롤러, 서비스 등)에 선언된 local 변수들의 인스턴스를 스프링 컨테이너 내에서 Bean이라는 객체로 관리되게 됩니다.(관리하여 주입해줄 객체) 한글로는 의존객체라고하며 A라는 클래스에 B라는 객체가 로컬변수로 선언되어 B의 메소드가 사용되고 있을 때, B가 없으면 A 클래스의 인스턴스가 생성될 수 없기 때문에 A는 B에 의존한다라고 합니다. 따라서 스프링은 프레임워크이기 때문에 싱글톤으로 이러한 A, B라는 Bean 객체를..
안녕하세요. 오늘은 인텔리제이를 사용하시는 분들을 위해서 좋은 플러그인을 하나 발견해서 공유하고자 합니다. SonarLint 스프링 프레임워크를 사용하며 자연스럽게 Java를 이용해서 프로그래밍을 자주 하게 되는데요. 자바의 Exception 중에서 개발자들이 NullpointerException을 가장 많이 낸다고 합니다. 그 이유중 하나가 저도 많이 느끼지만 Nullable에 대한 처리를 제대로 하지 못했던 경우입니다. 그로인해 예기치못한 상황에서 API가 서버에러를 내고 클라이언트 개발자들에게 Exception을 전달받는 상황이 많았습니다. 그래서 IDE 컴파일러 단에서 이걸 좀 확인해줄 수 있는 강력한 Lint가 없을까 생각하면서 찾아보다가 SonarLint를 알게 되었습니다. 사용법 일단 플러그..
안녕하세요. 오늘은 커스텀 어노테이션을 생성할 때 주로 사용하는 어노테이션인 @Retention어노테이션에 대해서 다루어보겠습니다. 보통 어노테이션은 다음과 같이 선언됩니다. @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyAnnotation { } @Retention 어노테이션으로 어느 시점까지 어노테이션의 메모리를 가져갈 지 설정하고, @Target 어노테이션으로 필드, 메소드, 클래스, 파라미터 등 선언할 수 있는 타입을 설정하면 대부분 커스텀 어노테이션은 쉽게 생성할 수 있습니다. 여기서 속성부분만 설정해주면요!! 그럼이제 @Retention 어노테이션을 까보겠습니다!!! /** * Indicat..
@ConfigurationProperties @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ConfigurationProperties { @AliasFor("prefix") String value() default ""; @AliasFor("value") String prefix() default ""; boolean ignoreInvalidFields() default false; boolean ignoreUnknownFields() default true; } 기본적으로 소스는 다음과 같습니다. 안의 주석문을 뜯어보면 다음과 같습니다. 맨 위엣줄..
안녕하세요. 오늘은 서버사이드 렌더링 환경에서 사용되는 템플릿 엔진중 thymeleaf라는 템플릿 엔진을 예제로 스프링부트로 서버사이드 렌더링했을 때 서버를 직접 재시작하지 않고도 화면을 갱신하는 방법을 공유하고자 합니다. 먼저 필요한 컨트롤러를 작성합니다. 컨트롤러 @Controller public class HelloController { @GetMapping("/hello") public String hello(Model model) { model.addAttribute("data", "hello"); return "hello"; } } locahost:8080 를 기본으로 /hello로 접근했을 때, templates/hello.html 파일을 찾아내서 렌더링하게 될 것입니다. hello.html..
이번 포스팅에는 JUnit 테스트할 때 특정 시간동안 테스트가 끝나지 않으면 테스트를 실패시키는 메소드인 assertTimeout과 assertTimeoutPreemptively 메소드 두개를 알아보겠습니다. assertTimeout(Duration timeout, Executable executable) - timeout과 실행 인터페이스인 Executable 타입의 인자를 받는다. executable.execute() 메소드로 실행한 다음에 timeout과 실제 실행시간을 비교하여 테스트가 실패했는지 성공했는지 여부를 판단한다. JUnit 소스 까보기 단점 : 만약에 테스트 자체가 굉장히 오래걸리는 부분을 test 해야한다면 제한시간이 있는데도 모든 테스트가 끝날때 까지 기다려야하는 단점이 존재한다...
Http 프로토콜에는 여러가지 상태값이 존재합니다. 200은 대표적으로 성공적으로 http 통신에 성공했다는 의미이며, 404는 해당 주소를 찾지 못하여 http 통신을 할 수 없다는 의미이고, 500은 서버에서 에러가 발생하여 http 통신은 하였으나 원하는 결과를 얻지 못하였음을 의미할 것입니다. 그 중에서 401(Unauthorized)와 403(Forbidden)의 차이에 대해서는 모호한 점이 있어서 정리하는 겸 공유하고자 합니다. 스프링을 프로젝트를 생성해서 개발을 하다보면 스프링 시큐리티 프로젝트를 통해 인증과 허가에 대한 개념을 배울 것입니다. 로그인을 한 유저가 api를 호출했을 때, 인증 토큰 혹은 세션을 조회하여 허가받은 유저라면 원하는 결과를 얻어서 http 통신에 성공할 것입니다. ..