본문 바로가기
관리자

Programming-[Backend]/Java

(39)
비동기 작업: @Async 어노테이션, 스레드 관리 배경서버에서 polling을 해야하는 상황이 생겼다. 아키텍처상 여러 서버들이 통신을 주고 받는데, 일렬로 구성된 3가지 서버에서 중간 서버의 코드를 작성해야하는 상황이였다. 구체적으로는 keycloak과 중간서버가 사용자의 인증을 기다려야하는 상태였다(아래 그림에서 External Auth Server).  External Auth Server는 Keycloak으로부터 인증 요청이 오면, 일단 201로 응답을 한 뒤 AD에 요청을 보내고 polling을 통해 AD의 승인 여부를 기다린다. polling하는 코드는 대략 아래와 같다.@Async protected CompletableFuture> pollingAuthResult(String authReqId, String realmId, String c..
[TIL] Docker image JVM Heap 크기 및 옵션 설정, buildpack-gradle bootBuildImage, Packeto buildpack 1. buildpack 개념과 bootBuildImage 원래 애플리케이션을 이미지로 만들어내기 위해서 Dockerfile을 작성하였다. 이 과정은 보통 애플리케이션의 파일들을 COPY 명령어(레이어)로 도커 환경 내로 모두 복사하고, ENV, CMD, ENTRYPOINT와 같은 명령어들을 모두 작성하는 방식으로 진행한다. buildpack은 Dockerfile을 직접 작성하는 과정을 한 번 더 캡슐화하여 이미지를 편리하게 만들 수 있게 만든 라이브러리다. 유명한 Cloud Native Computing Foundation(CNCF)의 프로젝트의 일환이며, 2018년 Heroku에서 Cloud Native Buildpacks 프로젝트를 시작하였다. 이후 open-source 형태로 Packeto buil..
자바 기초 강의 정리 - 8. 클래스 패스, JAR 인프런 얄코의 제대로 파는 자바 강의를 듣고 정리한 내용이다. 중요하거나 실무를 하면서 놓치고 있었던 부분들 위주로만 요약 정리한다.자세한 내용은 강의를 직접 수강하는 것이 좋다.https://www.inflearn.com/course/%EC%A0%9C%EB%8C%80%EB%A1%9C-%ED%8C%8C%EB%8A%94-%EC%9E%90%EB%B0%94/dashboard    1. 소스패스, 클래스 패스 현재 위치, 패키지 위치 정보 등을 나타낸다. 컴파일 시: -sourcepath 옵션을 주어 소스패스를 사용한다.실행 시: -classpath 또는 -cp 옵션을 주어 클래스패스를 사용한다. 소스 패스 예제소스 패스와 관련한 예제를 살펴본다. 아래 명령어를 실행하면 java의 compiler가 Main.j..
자바 기초 강의 정리 - 7. 리플렉션, 어노테이션, 클래스 로더 인프런 얄코의 제대로 파는 자바 강의를 듣고 정리한 내용이다. 중요하거나 실무를 하면서 놓치고 있었던 부분들 위주로만 요약 정리한다.자세한 내용은 강의를 직접 수강하는 것이 좋다.https://www.inflearn.com/course/%EC%A0%9C%EB%8C%80%EB%A1%9C-%ED%8C%8C%EB%8A%94-%EC%9E%90%EB%B0%94/dashboard    1. 리플렉션 런타임에 클래스, 인터페이스, 메소드, 필드 등을 분석하고 조작할 수 있는 기능이다. 적절히 사용하지 않으면 성능, 보안 등에 문제가 발생할 수 있다.  1.1 Class 자료형reflection을 이용하면 class 자료형을 통해 특정 클래스의 정보들을 불러올 수 있다.public class reflection { ..
[TIL] Test Coverage Report - Jacoco, Codecov, Test Reporter 1.  JacocoJacoco를 사용하면 build시 Test Coverage Report를 생성해준다. 코드 라인별로 테스트 코드에서 참조되어 사용되었는지 점검하고, if 분기문 등 모든 케이스에 대해 점검하기 때문에 혹시 빠뜨린 테스트가 없는지 살펴보는데도 도움이 된다. gradle로 build를 하고나면 build/reports/tests/test/ 디렉토리에 index.html 이라는 coverage report를 만들어준다. 아래 사진 처럼 각 패키지별, 클래스별로 테스트 수, 성공/실패 여부, 성공률 및 자세한 내용을 알려준다. 세부 내용으로 들어가면 앞서 말한 바와 같이 내가 어떤 부분을 놓쳤는지 알 수 있기 때문에 견고한 소프트웨어를 만드는데 있어 필수라고 할 수 있다.  ref) http..
자바 기초 강의 정리 - 6. 직렬화, URL 및 소켓 프로그래밍 인프런 얄코의 제대로 파는 자바 강의를 듣고 정리한 내용이다. 중요하거나 실무를 하면서 놓치고 있었던 부분들 위주로만 요약 정리한다.자세한 내용은 강의를 직접 수강하는 것이 좋다.https://www.inflearn.com/course/%EC%A0%9C%EB%8C%80%EB%A1%9C-%ED%8C%8C%EB%8A%94-%EC%9E%90%EB%B0%94/dashboard    1. 직렬화(Serialization)자바 클래스를 Serializable 클래스를 구현하여 직렬화할 수 있다. 직렬화 시 클래스의 인스턴스를 바이트 스트림으로 변환하여 다른 곳으로 보낼 수 있다. public class Person implements Serializable { private static long serialV..
자바 기초 강의 정리 - 5. 데이터 입출력(Stream, Reader, Writer) 인프런 얄코의 제대로 파는 자바 강의를 듣고 정리한 내용이다. 중요하거나 실무를 하면서 놓치고 있었던 부분들 위주로만 요약 정리한다.자세한 내용은 강의를 직접 수강하는 것이 좋다.https://www.inflearn.com/course/%EC%A0%9C%EB%8C%80%EB%A1%9C-%ED%8C%8C%EB%8A%94-%EC%9E%90%EB%B0%94/dashboard   1. 파일 다루기 기존 java.io.File 클래스는 멀티쓰레드 문제, 기능 한정, OS간 이식성 문제 등으로 사용하지 않고, java.nio.file 패키지의 기능들로 대체되었다. 1.1 Pathsnio 패키지 내의 클래스이다. 이전 버전의 File과는 다르게 Path를 String뿐만 아니라 Path라는 객체 자체로 다루면서 더 ..
자바 기초 강의 정리 - 4. CompletableFuture, Thread-safe, Concurrent, Atomic 인프런 얄코의 제대로 파는 자바 강의를 듣고 정리한 내용이다. 중요하거나 실무를 하면서 놓치고 있었던 부분들 위주로만 요약 정리한다.자세한 내용은 강의를 직접 수강하는 것이 좋다.https://www.inflearn.com/course/%EC%A0%9C%EB%8C%80%EB%A1%9C-%ED%8C%8C%EB%8A%94-%EC%9E%90%EB%B0%94/dashboard   1. CompletableFuture completableFuture도 Future와 마찬가지로 비동기처리의 결과를 담고 있는 클래스이다. Future와 동일하게 .get() 메서드를 호출하면 main 쓰레드의 흐름에 관여한다. CompletableFuture.supplyAsync() 메서드로 사용하여 인자없이 결과를 반환하는 Supp..