반응형 Programing/JAVA112 IntelliJ Spring boot 2.x project Java 설정 방법 IntelliJ 를 설치하고 Spring boot 2.x 를 오픈하면 Java 설정을 해줘야 합니다. 물론 JAVA HOME 과 같은 컴파일러를 사용한다면 자동 설정이 되지만 실행 했을 때 문제가 있다면 2군데 혹은 3군데를 수정해 주어야 합니다. 1. Project Struecture 단축키는 ctrl + alt + shift + s 입니다. Project 메뉴에서 SDK를 원하는 버전으로 선택합니다. 2. settings -> gradle gradle project의 경우 Gradle JVM 버전을 변경해 줍니다. settings의 단축키는 ctrl + alt + s 입니다. settings에서 gradle을 검색하여 하단에 Gradle JVM 을 원하는 버전으로 선택합니다. 1,2 번을 수정해도 실.. Programing/JAVA 2023. 7. 31. swagger 응답 타입이 Void 일 때 참조 에러 해결 방법 응답타입에 Void가 있을 때 swagger에서는 아래와 같은 에러를 발생시킵니다. Could not resolve reference: Could not resolve pointer: /definitions/Error-ModelName{namespace='java.lang', name='Void'} does not exist in document 이유는 Swagger에서 Void 를 Model로 인식하지 않기 때문인데요, 이런 에러를 보기 싫다면, 특정 객체를 생성해, Void 대신 사용하면 됩니다. 오류가 나는 코드 public ResponseEntity getCctvList(@RequestBody SearchDTO param) { . . . } 빈 응답 객체로 사용할 클래스 생성 @ApiModel(v.. Programing/JAVA 2023. 7. 20. swagger Could not resolve reference: Could not resolve pointer 오류 수정 방법 swagger 구현 후 특정 Operation을 클릭 했을 때 사용되는 DTO 객체를 참조할 수 없다는 오류가 발생하곤 합니다. Could not resolve reference: Could not resolve pointer: /definitions/TestDTO - 테스트 DTO does not exist in document swagger에서 등록을 할 때 참조를 할 수 없어서 발생하는 오류인데, 대부분 @ApiModel 이나 @ApiModelProperty 의 value 속성에 특수문자를 입력했기 때문에 발생합니다. 예를들어 '' '/' 와 같은 HTML 태그에 사용되는 특수문자나 '[', ']', '{', '}' 와 같은 JSON 형식에서 사용되는 특수문자를 사용했을 때 발생하게 됩니다. 문제가.. Programing/JAVA 2023. 7. 20. Java Refrection API 알짜만 빼먹기 Java의 Refrection API에 대해 알아보도록 하겠습니다. 1. Refrection 이란? 리플렉션의 사전적 의미는 '반사' 이며, Runtime 시점에 동적으로 객체의 정보를 추출하거나 실행할 수 있는 기능을 말합니다. 성능, 디버깅등 많은 단점도 있지만, Spring을 비롯한 여러 유명 라이브러리들에서 사용하는 만큼 강력한 기능이니 사용법을 익혀두도록 합시다. 2. Refrection의 단점 2.1 성능 오버헤드 위에서 말씀드린데로, Refrection은 Compile 시점이 아닌 Runtime 시점에 동적으로 객체에 접근하기 때문에 오버헤드가 발생 할 수 있습니다. 오버헤드란 프로그램의 실행시점에 동적으로 코드를 실행해야하는 경우 추가적인 시간, 메모리, 자원등이 사용되는 현상을 말합니다... Programing/JAVA 2023. 7. 10. static 메소드, 변수의 Thread safe, unsafe 1. static 자주, 반복적으로 사용하는 메소드를 개발할 때 고민해봐야 하는 것이 static의 사용입니다. static 의 경우 new 키워드로 생성하여 Heap 에 저장되는 일반 객체와 달리, GC의 대상이 되지 않는 Data 영역에 저장됩니다. 이는 어플리케이션이 종료될 때 까지 메모리에서 해제되지 않음을 의미 합니다. static 은 잘 사용하면 매우 유용하지만, 잘못 사용하거나 남발하게 되면 어플리케이션의 퍼포먼스에 악영양을 미치기 때문에 적절하게 사용해야 합니다. link : https://aljjabaegi.tistory.com/636 Java GC Gargabe Collection 알짜만 빼먹기 / 알고리즘 / 종류 / 모니터링 VisualVM Java GC Garbage Collect.. Programing/JAVA 2023. 6. 26. getReader() has already been called for this request 해결 방법 java.lang.IllegalStateException: getReader() has already been called for this request 의 원인과 해결방법을 알아보겠습니다. 원인 위의 Exception은 request.getReader()를 한번 이상 사용할 때 발생합니다. request.getReader() 를 사용하게 되면 request body 를 읽기위한 스트림을 반환하고, 읽는동안 내부적으로 포인트를 사용하여 읽은 위치를 기억하게 됩니다. 처음 다 읽은 후 두번째 읽을 때는 이미 포인터가 body의 마지막부분을 기억하고 있기 때문에 읽을 데이터가 없다고 판단하게 되는 것이죠. 예를들어 Interceptor에서 아래와 같은 코드로 body의 데이터를 조회한다고 할 때 이미 인터셉.. Programing/JAVA 2023. 5. 25. Firebase 환경 설정, 구축 및 구현 방법, 앱 푸시 메시지 보내기 Firebase는 Android 및 ios 에 구분 없이 알림을 전달할 수 있는 구글의 플랫폼 입니다. Firebase 환경을 구축하고 Java 서버를 구현하여 보겠습니다. 아래의 Link를 클릭하여 Firebase site로 이동합니다. 1. Firebase 환경 설정 Link : https://firebase.google.com/ Firebase Firebase는 고품질 앱을 빠르게 개발하고 비즈니스를 성장시키는 데 도움이 되는 Google의 모바일 플랫폼입니다. firebase.google.com 시작하기를 클릭합니다. 프로젝트 만들기를 클릭합니다. 프로젝트 이름을 지정하고, 약관동의 등을 체크 후 계속 버튼을 클릭합니다. 애널리틱스 사용설정을 하고 계속을 클릭합니다. 새로운 애널리틱스를 생성합니다.. Programing/JAVA 2023. 4. 21. Springboot Quartz clustering 적용방법, spring batch, shedlock quartz를 사용하여 schedulering을 하는 어플리케이션을 이중화 하게 되면, 복수 개의 scheduler가 동작하기 때문에 문제를 야기 할 수 있습니다. 그래서 Clustering을 적용하여 하나의 scheduler만 동작하게 처리해야 합니다. 그 방법중에 하나가 Quartz clustering이고 shedlock 등의 라이브러리도 DB를 사용한 Clustering을 제공합니다. Quartz clustering 적용방법 그럼 이제 quartz에 clustering을 적용하는 방법을 알아보도록 하겠습니다. org.quartz.simpl.RAMJobStore 는 default 로 메모리를 사용한 스케쥴링이고, org.quartz.impl.jdbcjobstore.JobStoreTX 가 DB를 활용한.. Programing/JAVA 2023. 4. 18. Firebase Proxy 등록 정보 및 라이브러리 수정 방법 특정 업체 협업을 하던 도중, 방화벽이 IP 주소만 허용이 되서, 프록시를 사용하여 도메인주소를 변경해야 했습니다. 일단 다운받은 firebase 설정 파일(json) 에는 아래 4개 값이 도메인 주소로 되어 있습니다. auth_uri, token_url, auth_provider_x509_cert_url, client_x509_cert_url 이 도메인 주소로 설정되어 있습니다. 해당 도메인을 IP 주소로 바꾸어 프록시를 타게 설정합니다. 그리고 메시지 전송을 위해서는 firebase라이브러리 내 com.google.firebase.messaging package의 FirebaseMessagingClientImpl class 에 설정된 2개의 final 변수를 수정해 주어야 하는데, FCM_URL 과 .. Programing/JAVA 2023. 4. 11. Swagger 잘~만들어보기 응답 Model 명확하게, 타입, 최대 최소값 표출하기 Swagger는 API를 구현할 때 Front-End와 의사소통에 있어 많은 편의를 줍니다. 하지만 적절한 정보 규격을 전달해주지 않으면 많은 오해가 생기게 됩니다. API 사용자와 보다 적절한 의사소통을 하기위해서 설정해줘야 하는 부분을 알아보도록 하겠습니다. swagger를 적용하는 방법은 아래의 Link를 확인하세요! Link : https://aljjabaegi.tistory.com/668 [API documentation 자동화] spring boot swagger UI 적용 방법 API의 Document를 자동으로 제공해주는 swagger UI 설정방법을 알아보겠습니다. springboot 2.7.7 springsecurity gradle 1. dependencies 를 추가 /*swagger.. Programing/JAVA 2023. 2. 27. java 카카오 간편 로그인 구현하기 처음부터 자세히! 여러 업체들에서 간편 로그인 기능을 제공하고 있습니다. 각 업체들마다 제공하는 정보는 조금씩 다르지만, 로직은 비슷합니다. 이번 포스팅은 그 중에서 카카오 간편 로그을 구현하는 방법을 알아보겠습니다. 간단하게 전체 과정을 알아보겠습니다. 1. 과정 요약 Kakao Developers 설정 카카오 디벨로퍼스에 애플리케이션 추가 -> 플랫폼 등록 -> Redirect URI 등록 -> 동의항목 추가 동작 순서 카카오 OAuth 주소로 Client Id, Redirect URI 전송(Front) -> 카카오는 Redirect URI 주소로 OAuth Code를 전달해줌.(Kakao) -> 서버는 받은 OAuth Code로 Token 정보 요청 -> ToKen 정보를 받아 유저 정보 요청 2. Kakao Dev.. Programing/JAVA 2023. 2. 24. Yaml 파일 객체화 yaml 파일 읽기 snakeyaml 이번 포스팅에서는 .yaml 파일을 읽어 활용하는 방법을 알아보겠습니다. snakeyaml 이라는 라이브러리를 사용할 것이고, 의존성 주입은 아래의 링크를 참고하세요! Link : https://mvnrepository.com/artifact/org.yaml/snakeyaml 1. gradle 의존성 주입 implementation group: 'org.yaml', name: 'snakeyaml', version: '1.33' 2. test.yml 파일 생성 [test.yml] user: name: aljjabaegi blog: aljjabaegi.tistory.com 3. yaml 파일을 구조체할 class 생성 [YamlTest.java] import lombok.Getter; import lombo.. Programing/JAVA 2023. 2. 17. Java List<?> 정렬, 다중조건정렬, 오름, 내림차순 Comparator java.util.Comparator 를 사용하여 List 를 정렬하는 방법을 알아보도록 하겠습니다. 아래와 같은 VO Class가 있습니다. import lombok.Getter; import lombok.Setter; import lombok.ToString; @Getter @Setter @ToString public class signalVO{ private String link_id; private String signal_id; private int dir; private String intersec_no; private String result; } 1. 단일조건 정렬 (오름차순) 위 VO를 link_id로 정렬한다고 하면 아래와 같이 활용합니다. ArrayList list = new Arra.. Programing/JAVA 2023. 1. 25. Custom Annotation 생성하기 @interface 알짜만 빼먹기 @Annotation을 생성하는 방법에 대해 알아보겠습니다. 1. annotation의 생성 annotation은 @interface로 생성할 수 있습니다. public @interface CustomAnotation{}; 이렇게 생성한 어노테이션은 어디에든 붙여서 사용할 수 있습니다. @CustomAnnotation @RequiredArgsConstructor public class TestController { @CustomAnnotation private final TestService service; @CustomAnnotation @GetMapping(value="hello") public String getPage(){ return "hello" } } 2. Meta Annotation의 종류.. Programing/JAVA 2022. 11. 15. Java Functional Interface 알짜만 빼먹기 Predicate/Spplier/Consumer/Function Java Functional Interface 알짜만 빼먹기 Predicate/Spplier/Consumer/Function Functional Interface 정의 Functional Interface 는 구현해야하는 abstract method가 한 개만 정의되어 있는 Interface를 말합니다. public interface TestInterface { public String getName(); } Java에서는 위와 같이 메소드가 하나만 있는 Interface를 Functional Interface 로 인식합니다. 하지만 여러 사람이 개발하다보면 실수로 메소드를 추가할 수 있기 때문에 @FunctionalInterface annotation을 붙여주는게 좋습니다. (물론 추가 시 컴파일 에러.. Programing/JAVA 2022. 10. 5. 이전 1 2 3 4 ··· 8 다음 💲 추천 글 반응형