Lang/JAVA(11)
-
[spring] Webclient(1) - 개요: 스트리밍 데이터 처리
회사에서 LLM관련 프로젝트를 진행하면서 스프링부트로 구축한 Was 서버에서 AI 관련 서버로 부터 받은 응답값을 스트리밍으로 클라이언트에 값을 던져줘서 한글자씩 데이터가 출력되도록 보이는 비동기 통신 기능을 개발해야할 일이 생겼었다. 이를 개발하기 위해 가장먼저 떠오른 방법은 Web Socket 이었다. 실시간 채팅 기능 개발을 할 때 사용해 본 적이 있어서 먼저 떠오르긴 했지만 이 방식은 서버의 리소스 소모가 굉장히 심하다란 단점을 가지고 있다.일단 서버 로그부터 서버와 커넥션 연결관련 로그를 계속 출력하게 되기 때문에 디버깅 관점에서도 물론이고 로그의 용량문제부터 리소스를 아낌없이 쓰게된다. 또한 웹소켓은 버전 관리에서도 어려움을 겪는다. 웹소켓 버전이 바뀌면 수많은 버그와 맞서야한다. (이건 팀장..
2024.08.19 -
[SpringBoot] 파일 다운로드 구현
File Download Method웹개발을 하면서 제일 자주 잊어먹고 개발 할때마다 reference를 찾아서 하는 것이 파일 다운로드였다.막상 개발해보면 로직이 어렵지 않지만 어떤 모듈을 써서 개발했는지 헷갈려서 매번 다시 찾아서 했었다. 그렇게 개발하다보니 몇가지 다운로드 구현 방식의 패턴이 보였고직접 사용해 보지 못한 방식까지 찾아서 같이 포스팅한다. 방법 1. HttpServletResponse ( return Type : Void ) 직접 구현해본 다운로드 기능 중 가장 많은 비중을 차지 한 방식이다.이 방식은 Spring Framwork를 사용해보기전 Pure Java로 처음 Java 개발할 때부터 사용한 방식이라 자주 사용한 것 같다. @Controllerpublic class FileC..
2024.07.30 -
JVM·JRE·JDK 개념 정리
현업에서 Java 프로젝트 세팅을 하면서 간간히 JVM,JRE를 볼때가 있다. 여기 저기 찾아가면서 세팅은 했지만 정확한 개념을 모르니 왜 이렇게 세팅을 해야하는 지 불분명해서 찾아봤다. JVM ( Java Virtual Machine ) JVM을 비유하자면 프로그램이라 할 수 있다. Java는 컴파일 언어이다.그리고 이 컴파일은 Java 코드를 바이너리의 기계어로 바꾸는 작업을 말하고 그 작업을 하는 대상이 컴파일러이다. 이 컴파일되어 바이너리 기계어로 바뀐 자바 코드를 OS등의 컴퓨터의 환경에 맞게 언어가 작동하도록 하는 프로그램인 것이다. 즉, 바이트 프로그램을 돌리기 위한 프로그램이다. JRE ( Java Runtime Environment ) JRE는 말 그대로 자바 런타임 환경이다 Ja..
2024.07.09 -
[AOP] 관점지향프로그래밍에 대해
AOP (Aspect Oriented Programming) 1. 개요 AOP는 OOP(객체지향프로그래밍)의 대체제가 아니라 보완하기 위한 개념이다. 클래스 단위로 나누기 애매한 로직을 처리하는 데 주로 사용된다. 그러한 로직을 횡단 관심사(cross-cutting concerns)라 한다. 횡단 관심사의 대표적 예는 로깅, 보안,트랜잭션 등이 있다. 2. 경험예전에 패스워드를 bcrypt로 암호화를 진행했었는데 이 때문에 복호화 작업이 필요했었다. 그것을 예시로 보자면 처음 ) 자주 쓸거라 생각못해서 필요할 때마다 로직 복붙했다. ( 객체지향X, 관점지향X ) 도중 ) 이 로직이 계속 쓸일이 생기자 class로 따로 생성해서 메소드로 관리했다. (객체지향O, 관점지향X )ㄴ> 문제점: 클래스화 하..
2024.02.27 -
[ Hikari CP ] Hikari CP 란 무엇인가?
예전에 JPA를 처음 사용해 볼때 queryDSL이 적용이 안되서 JPA 관련 라이브러리를 뒤저본적 있다. 그때 JPA 라이브러리 안에서 우연히 보게 된 것이 Hikari 였다. 이게 뭔지는 모르지만 JPA에 필요한 거구나 하고 넘겼지만 개발을 계속하면서 Hikari에 대한 이야기를 종종 듣게 되면서 이번 기회에 공부해봤다. Hikari CP란? 가볍고 빠른 JDBC 커넥션 풀링 프레임워크 예전에는 JDBC만으로 DB와 프로젝트를 연결하여 사용해 왔지만 매번 드라이버 로딩 - 연결 객체 생성 - 연결 - 종료 이 과정을 반복하다보니 서버의 리소스 소모가 심하고 다수의 DB 접속이 있을 경우 처리 속도도 떨어진다는 문제가 발생했다. 그래서 나온게 CP( Connection Pool )이다. (ㄴ> 자세한 ..
2024.02.25