본문 바로가기

Java

(9)
LinkedList 와 List 선언 차이 습관적으로 자바 Collection Framework의 자료구조를 사용할 때 public static void main(String[] args) { LinkedList linkedList = new LinkedList();}위와 같이 사용을 했었다. 자료구조를 직접 만들며 공부하던 중 한가지 의문이 생겼다.왜 List 으로 선언을 하면 안되는건가?대부분의 예제 설명에서 LinkedList로 선언을 하고 있고 List로는 선언을 하고 있지 않다. 과연 LinkedList 와 List 중 어떤걸 선언하는게 더 바람직한 사용법일까?결론 부터 말하자면 List로 선언하는게 더 바람직한 사용법이다. 왜냐하면 SOLID 원칙 중 D 의존 역전 원칙 - DIP (Dependency Inversion Princ..
Spring Cloud GateWay API 인가 서버 구현 https://github.com/Sihyun3/BoardAuthServer GitHub - Sihyun3/BoardAuthServerContribute to Sihyun3/BoardAuthServer development by creating an account on GitHub.github.com스프링 클라우드 게이트웨이 인가 서버입니다.비동기식으로 구현이 되어 있으며, db는 MySQL을 활용하여 구현 되어 있습니다.
Java Spring WebFlux + MySQL CRUD 예제 Spring WebFlux 와 MySQL을 활용하여 가장 기본적인 CRUD를 만들어 볼 예정입니다. Spring WebFlux란 Spring 진영의 비동기 프레임 워크 입니다.Reactive Streams 의 Publiser 인터페이스의 구현체인 Mono 와 Flux를 사용하여 구현을 하게 됩니다.여기서 Mono란 0 ~ 1의 데이터를 처리 할 수 있고, Flux는 0 ~ N 개의 데이터를 처리 할 수 있습니다. 의존성 추가implementation "com.github.jasync-sql:jasync-r2dbc-mysql:2.2.4"implementation 'org.springframework.boot:spring-boot-starter-data-r2dbc'implementation 'org.spri..
Spring Cloud Gateway 기본적인 사용 방법 Spring Cloud 는 기본적으로 Netty를 사용하는 비동기 방식의 웹서버를 지원합니다. Spring Cloud는 기본적으로 yml을 통한 설정과 자바 코드를 통해 설정하는 두 가지 방식을 지원합니다.이번에 알아볼 것은 yml을 통해 사용하는 방법입니다. application.ymlspring: application: name: apigateway-service cloud: gateway: default-filters: - name: AuthFilter args: preLogger: true postLogger: true routes: - id: test-server uri: http:..
자바 프로세스 메모리 증가 스프링 프로젝트를 진행하는데 서버 사양이 넉넉한 편이 아니었다. 그래서 메모리가 소중한 상황이었는데, 서버를 가동 시킨 후 메모리 사용량이 점점 늘어나는 상황이었다. 최초 실행시에는 약 150mb의 메모리를 점유 하고 있었는데 점점 시간이 지나면서 300mb이상 메모리를 점유하기 시작했던 것이다. 1. 메모리 사용량 분석 방법heapdump 파일 받는 방법확장자는 hprof를 사용합니다../jmap -dump:format=b,file={파일 명} {pid} PID같은 경우에는 ps -ef | grep java를 사용하면 쉽게 가져올 수 있습니다. 메모리 분석 툴 Eclipse Memory Analyzer를 활용하여 누수를 확인 해 보았습니다.설치 링크https://eclipse.dev/mat/downlo..
자바 멀티 스레드 프로그래밍 기본적으로 자주 사용하는 스프링도 멀티 스레드 프로그램이다. 멀티 스레드와 싱글 스레드의 성능의 차이를 테스트 해볼 예정입니다.자바에서 멀티 스레드 환경 프로그래밍을 하기 위해 Thread클래스와,  Runable 인터페이스가 존재합니다.Runable 인터페이스 같은 경우 다른 클래스를 상속받을 수 있기 때문에 상속이 필요한 경우 사용합니다. 테스트에 사용할 로직은 단순한 소수 개수를 구하는 로직입니다.싱글 스레드 환경 테스트 로직package Thread;public class SingleThread { public static void main(String[] args) { SingleThread main = new SingleThread(); long startTime = System.curr..
Java float와 double의 부동소수점 연산 차이 프로그래밍 세계에서 1.1 + 0.1 == 1.2 가 참이지 않고 거짓이다.부동소수점 연산 문제 때문에 거짓이 나오게 됩니다.여기까지는 기존에 알고있던 이야기 였는데 float 자료형일때는 부동소수점 문제가 해결? 된 것 처럼보였다.나는 false가 나올 것을 기대하고 연산을 해봤는데 true가 나왔고 부동 소수점 문제가 발생하지 않았다다른 부동 소수점 연산을 해봐도 동일한 현상을 보여줬다.float자료형보다 double 자료형이 더 큰 수를 표현 할 수 있어서 정확도가 더 높은 지 알고 있었는데 예상 외의 결과가 나타났다. 왜그런지 아시는 분 답글 달아주시면 감사하겠습니다!!이유를 알게되는대로 수정하도록 하겠습니다.
스프링은 신이고 나는 x신이다. 처음 스프링을 공부할때는 못 느껴봤던 것이었지만 다시 스프링을 보니 이해가 안되는 것이 있었다. "스프링은 어떻게 인터페이스를 객체처럼 사용하는 것인가?" 인터페이스를 활용해서 추상화된 Service 레이어를 사용하는데 어떻게 컨트롤러 단에서 서비스를 호출 할 수 있었던 것인가? 예시를 보자 Controller @RestController public class Controller { @Autowired private Service service; @GetMapping("/") public ResponseEntity Main() throws Exception { String data = service.main(); return ResponseEntity.status(HttpStatus.OK).body(d..