개발 11

Spring에서 외부 API 호출하기(WebClient 사용)

이번에 클라이언트와 내부 서버들의 통신을 위한 중간 서버를 만들기 위해 Spring기반의 서버 내부에서 타 서버로의 API 호출이 필요했다. 가장 최근에 도입된 WebClient 활용 그거 말고는 아래 방식들이 있음 1. HttpURLConnection 스프링이나 외부 라이브러리가 아닌 Java 표준에서 제공하는 HTTP Connection 클래스이다. URLConnection을 상속받고있음 옛날옛적에 사용하던거 2. RestTemplate Spring 3.0부터 도입된 클래스로, 동기적인 HTTP 통신을 위해 쓰인다. 3. WebClient 비동기/논블로킹 방식을 지원 리액티브 프로그래밍이 가능하며 데이터 스트림을 효과적으로 처리할 수 있음 등등... 프로젝트 구조는 다음과 같이 잡아보았다 common..

개발/BE 2024.03.12

[Java] Heap Memory 누수 분석기4 : dump파일 분석(MAT)

이전 글에서 이어집니다 : [Java] Heap Memory 누수 분석기3 : 누수 원인을 분석해보자 - jmap, jhat 그래서 메모리 누수 원인은 뭐였을까? MAT를 통해 뜬 덤프 파일을 분석해보았다. .hprof 파일을 열면 다음과 같이 확인해볼 수 있다. 딱 봐도 저 파란 부분이 메모리를 왕 잡아먹고 있는 것으로 보인다. Leak Suspects라는 탭을 클릭하면 메모리 누수 원인을 MAT가 예측해준다. 역시나 Finalizer가 문제였던 것으로 보인다. 그래서 Finalizer는 뭐냐 ? 메모리 해제/GC를 담당하는 객체이다. (참고링크 : https://ivvve.github.io/2019/06/05/java/ETC/fileiostream-finalizers/) finalize() 메서드가 ..

개발/BE 2024.03.11

[Java] Heap Memory 누수 분석기3 : 누수 원인을 분석해보자 - jmap, jhat

이전 포스팅에서 이어집니다. : [Java] Heap Memory 누수 분석기2 : 모니터링 환경 구축하기 - VisualVM 그래서 VisualVM을 이용하면 로컬 환경에서는 테스트해볼 수 있었는데 사실 그것만으로는 상용 환경에서의 메모리 누수 원인을 확정하기에는 근거가 너무 부족했다. 그래서 jmap 명령어를 이용해서 Heap Dump파일을 생성해보기로 하였다. Heap Dump Heap Dump 뜨는 방법으로 jmap 과 jcmd 가 있음 jmap : GC를 동반하지 않고, 죽은 객체까지 포함하여 인스턴스의 점유율을 보여준다. jcmd 와 같이 full GC를 발생시키고싶으면 -live 옵션을 붙이면 된다 jcmd : Full GC를 발생시킨 후 살아있는 인스턴스의 점유율만 보여줌 처음에는 이 명령..

개발/BE 2024.03.01

[Java] Heap Memory 누수 분석기2 : 모니터링 환경 구축하기 - VisualVM

이전 글에서 이어집니다 : [Java] Heap Memory 누수 분석기1 : JVM이란 ? 그래서 JVM이 뭔지 대략적으로 알았으니 내 프로그램에서 이 JVM이라는 녀석이 어떻게 돌아가고 있는지 확인해보려고 한다. 일단 여러가지 모니터링 툴이 있다고 해서 써봤는데, 분석이 쉽지 않았다. (첨에는 InteliJ에 내장되어있는 Profiler를 통해서 보려고 했으나 서비스 프로세스에 부하 좀만 주면 프로세스 다운 전에 InteliJ 자체의 메모리가 터져서 죽어버렸다 ;;;) 가장 간편한 방법은 바로 힙 덤프를 떠서 확인해보는거였지만, 고객들에게 제공되고있는 서비스였기때문에 막 덤프 떠버리기는 좀 부담이 있었다. 특히 구글링 중 봤던 아래 문구때문에 힙덤프는 마지막 후순위로 미루고싶었음 ❗주의!! 힙 히스토..

개발/BE 2024.02.28

[Java] Heap Memory 누수 분석기1 : JVM이란 ?

구축해둔 모니터링 시스템 통해 간헐적으로 알림이 오기 시작했다. 서버 구동한지 한달정도 지나니 초기에 40%정도였던 힙메모리 사용률이 지속적으로 70%대를 돌파하고있었다. 왜 그런고 하니,,, 대충 이런 모양새였다 (마우스패드로 그려서 이상함) minorGC가 일어나면서 간헐적으로 메모리 영역이 줄어들지만 메모리가 제대로 해제되지 못한(=누수가 일어나는 부분의) 객체들이 차지하는 메모리가 지속적으로 쌓이면서 평균적인 메모리 사용률이 올라가게 된 것이다. 하지만 기존에 구축되어있던 모니터링 도구로는 어떤 객체가 메모리를 잡아먹는지나,, 상세한 시간대별 힙메모리 소모율 등등은 볼 수 없었다. 그래서 모니터링 환경을 추가적으로 구축하려고 했다. 대충 알아보니 다음과 같은 방법들이 있더라 VisualVM He..

개발/BE 2024.02.27

2-1. 다트 기본 문법1

깃허브에 같은 내용 있음. 이쪽이 더 보기 쉬울듯 https://github.com/rkarud1234/TIL/blob/main/dart/Dart%EA%B8%B0%EB%B3%B8%EB%AC%B8%EB%B2%9501.md Docs : https://dart.dev/language 웹 개발환경 : https://dartpad.dev/ Java에서와 같이 코드 실행을 위해서는 main() 함수 내부에 작성하면 된다. void main() { print("Hello World!"); } Hello World! 1. 주석 // 주석1 /** * 주석2 */ /// 이것은 문서 주석 /// 메서드나 클래스 위에 작성하면 dartdoc과 같은 문서 생성 도구를 통해 문서를 자동으로 생성해준다. 2. 문장을 써보자 /..

개발/Flutter 2023.10.07

VS Code 기반으로 Flutter 개발환경 셋팅

0. 플러터란? Dart 언어 기반의 크로스 플랫폼 앱 개발용 프레임워크 네이티브 방식 : AOS, iOS와 같은 플랫폼 자체에서 제공하는 개발 환경. OS에 최적회된 방식으로 성능은 보장하지만, 각각의 OS별로 따로 개발해야한다는 단점이 있음 하이브리드 방식 : 웹 기술로 앱 화면을 만든 후 네이티브 기술로 감싸서 포장. 웹 기술을 기반으로 앱으로 변환할 수 있기 때문에 빠른 앱개발이 가능하지만 네이티브 방식에 비해 성능이 떨어지며 UI도 별도로 만들어야함 크로스 플랫폼 방식 : 한 번 구현하여 AOS와 iOS 등 각 플랫폼용 앱을 만든다. 빌드 과정에서 네이티브 코드로 변환되기 때문에 네이티브 방식과 거의 비슷한 성능을 보장한다. ⇒ 성능이 크게 중요하지 않고, 혼자 개발하기 때문에 생산성 측면에서 ..

개발/Flutter 2023.10.04

React로 달력 만들기

달력을 만들어보겠습니다. 필요한 변수는 다음과 같습니다. - date: 달력에 표시해주기 위한 날짜 정보를 담은 변수 - first: 달력이 시작할 때 앞에 남는 부분 - last: 달력 끝날 때 뒤에 남는 부분 - month: first와 last를 제외한 달력의 날짜를 표시할 부분 코딩 시작! 1. 변수 설정 필요한 변수들을 초기화해줍니다. 달력이 켜질 때 오늘 날짜 기준으로 표시해줄 수 있도록 date는 new Date()를 초기값으로 설정해주었습니다. const dayOfWeek = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; const [date, setDate] = useState(new Date()); const [first, setFirst] ..

개발/FE 2022.08.19

웹 애플리케이션(Web Application)

1. 웹 애플리케이션이란? - 기존의 정적인 웹 애플리케이션 기능들은 그대로 사용하면서 추가로 서블릿, JSP, 자바 클래스 등을 사용하여 동적인 서비스를 제공하는 프로그램이다. 2. 웹 애플리케이션의 기본 구조 - 톰캣과 같은 웹 컨테이너에서 실행하는 웹 애플리케이션은 일정한 디렉터리 구조를 갖추고 있다. 그 외 디렉터리들의 기능 └ bin: 앱에서 사용되는 각종 실행파일들 저장 └ conf: 프레임워크에서 사용되는 각종 설치파일 저장 3. 컨테이너에서 웹 애플리케이션 실행하기 - 웹 애플리케이션은 자바 App 등과는 반대로 단독으로 실행될 수 없다. - 톰캣과 같은 웹 컨테이너에서 실행되는 구조 → 즉, 실행 전 톰캣에 등록부터 해야 한다. * 톰캣 등록 방법 1. %CATALINA_HOME%webA..

개발/JSP Servlet 2021.12.04

웹 프로그래밍과 JSP

웹 프로그래밍은 동적 웹 프로그래밍(JSP)과 정적 웹 프로그래밍(초기 웹 프로그래밍)으로 구분할 수 있다. 1. 정적 웹 프로그래밍 ( Static Web Programming) - 웹 서버(Apache)에 미리 보여줄 HTML, CSS, img, JavaScript 등의 파일을 정해놓고, 사용자가 요청할 경우 전달하는 방식 - 사용자는 페이지가 변경되지 않는 한 고정된 웹 페이지를 보게된다. - UI 구성이나 이벤트 처리 등에 사용 - 구성요소: 웹 서버, 클라이언트, HTTP, HTML, JavaScript, CSS * 문제점: 환율, 주가와 같은 실시간 정보를 처리하기 위해서는 관리자가 HTML 코드를 수시로 업데이트해줘야 한다. → 이와 같은 이유로 요새는 많이 사용하지는 않지만, 디자인이나 이..

개발/JSP Servlet 2021.12.04
728x90