본문 바로가기

전체 글18

[Linux] 서버 운영자/개발자를 위한 리눅스 명령어 모음집 1. 프로세스 관련✅ ps (process status)현재 실행 중인 프로세스를 화면에 출력, 주로 grep명령어와 섞어서 사용함#아래옵션 주로 사용함ps -ef # 전체 프로세스 (BSD 스타일)ps aux # 전체 프로세스 (System V 스타일)ps -ef | grep keyword # 특정 프로세스 검색✅ nohup세션 종료 후에도 프로세스가 계속 실행되도록함. (터미널 종료될 때 전달되는 Hang Up 시그널 무시)출력에 대한 리디렉션 처리가능#기본 사용법 - 표준 출력/에러가 nohup.out 파일로 리디렉션됨.nohup [명령어]#백그라운드 실행nohup [명령어] &##주요 리디렉션 명령어 > 파일 - 표준 출력을 파일로 저장 (덮어쓰기) >> 파.. 2025. 5. 15.
[OS] 환경변수란 무엇인가 (LD_LIBRARY_PATH, Djava.library.path) ✅ 환경변수(environment Variable) 란 무엇인가?운영체제에서 환경변수는 시스템이나 쉘(Shell)이 프로세스의 동작을 제어하기 위해 전역 설정 값이다.이 값들은 Key=Value 형태로 구성, 주로 경로 설정, 동작 제어, 참조영역, 기본값 설정 등의 용도로 사용된다.OS의 전반적인 동작에 영향을 주며, 개별 프로세스들이 어떤 경로에서 파일을 찾을지도 결정짓는다.✅ 대표적인 환경변수의 이름과 용도예시 환경변수용도설명PATH실행 파일 위치 지정명령어 입력 시 탐색할 디렉토리 지정운영체제별 상이동적 라이브러리 경로 지정(so, dll)확장자와 같은 동적 라이브러리 참조 경로LANG, TZ언어 / 시간대 설정로케일, 언어, 시간대 기본값 설정 👉 리눅스의 경우 주로 ~/.ba.. 2025. 5. 14.
동기/비동기, 블로킹/논블로킹 정리 ✅ 기본 개념구분의미대상동기 (Synchronous)요청한 작업의 결과를 기다렸다가 다음 작업 수행코드 흐름비동기 (Asynchronous)작업을 요청만 해두고, 결과는 나중에 처리코드 흐름블로킹 (Blocking)작업이 완료될 때까지 쓰레드가 멈춰있음쓰레드 리소스논블로킹 (Non-Blocking)작업이 완료되지 않아도 바로 제어권 반환쓰레드 리소스👉 요약동기 / 비동기 : 작업 흐름 관리 방식블로킹 / 논블로킹 : 쓰레드 리소스 제어 방식✅ 서버와 클라이언트 입장을 구분 하는 이유동기/비동기, 블로킹/논블로킹과 같은 통신 및 처리 방식은 서버와 클라이언트 각각의 역할, 목적, 처리 방식이 다르기 때문에입장별로 구분해서 이해해야 한다고 생각한다.👉 역할과 목적의 차이클라이언트목적서비스를 요청하는 주체.. 2025. 5. 14.
[Java] 이미지/파일을 읽는 대표적인 두 가지 방법 ✅ Binary (byte[]) 기반 처리파일 자체의 바이너리 데이터를 그대로 다루는 방식.주로 파일을 저장하거나 전송할 때 사용된다.👉 장점빠르고 용량 효율적파일 원본 그대로 처리 가능네트워크 전송 시에도 적합❌ 단점텍스트 기반 포멧과는 호환되지 않음사람이 내용을 직접 읽고 확인할 수 없음👉 주로 사용되는 곳서버 내부에서 파일 저장 또는 로드HTTP Multipart 업로드 / 다운로드Socket 통신 등 바이너리 기반 네트워크 처리✅ String기반 Base64 인코딩 처리파일을 byte[]로 읽은 뒤, Base64 방식으로 인코딩해서 문자열로 표현하는 방식.💯 Base64 인코딩?!바이너리 데이터를 ASCII 문자열 형식으로 인코딩하는 방식.텍스트 기반 시스템(예: JSON, XML, HTML.. 2025. 5. 14.
[Java] 함수형 인터페이스와 람다식 ✅ 함수형 프로그래밍이란?!함수형 프로그래밍은 말 그대로 "함수 중심으로 생각하는 방식" 이다.java에서는 원래 객체 지향(OOP) 중심으로 코드를 작성했지만,점점 코드를 더 간결하고 실수없이 동시에 처리하기 쉽게 만들고 싶어서 함수형 스타일이 도입됐다.그래서 Java 8부터는 람다식, 스트림, Optional 같은 기능을 넣어서 함수처럼 동작하는 코드를 사용한다.// 전통적인 방식for (String name : list) { if (name.startsWith("A")) { System.out.println(name); }}// 함수형 스타일list.stream() .filter(name -> name.startsWith("A")) .forEach(System.ou.. 2025. 5. 9.
[Java] Optional Class 1. Optional 이란 무엇인가??✅ 등장 배경Java는 오랫동안 null을 값의 부재를 나타내는 수단으로 사용했다. 하지만 null은 다음과 같은 문제점을 가지고 있다.NullPointerException(NPE) 발생 위험반복적인 null 체크로 코드의 가독성이 떨어짐그래서 Java 8버전 부터 Optional 클래스가 도입됐다!"값이 있을 수도 있고 없을 수도 있는 컨테이너" 라는 개념으로, 명시적으로 '비어있음'을 표현할 수 있도록 설계됨.즉, Optional은 null을 직접 쓰는 대신, 값이 존재할 수도 있고 존재하지 않을 수도 있다는 걸 타입으로 표현하게 해주는 도구!전통적인 null 사용 방식Optional값이 존재하지 않음을 표현 하는 방식이 명확하지 않음값이 존재함 / 존재하지 않음.. 2025. 5. 8.
[Java] IO vs NIO 📅 JDK별 정리 JDK 버전주요 변화1.0java.io 도입1.4java.nio 도입1.7NIO.2(java.nio.file, 비동기채널 등)1.8 ~Stream, Lambda와 함께 더 간결하게 I/O 처리 가능11 ~ Files Api 활용성 향상, 비동기 처리 개선 ✅ JAVA I/O개념Stream기반 : 데이터를 1바이트 또는 1 문자씩 연속적으로 읽고 씀.실제로는 보조스트림을 사용하여 버퍼단위로 주로 사용함.블로킹 방식 : read()나 write() 같은 호출은 데이터 처리가 끝날 때까지 쓰레드를 블로킹(대기) 시킴Thread-per-connection 구조 : 클라이언트가 많을 수록 쓰레드도 많이 생성되어 리소스 낭비가 큼주요 클래스 구분바이트 기반 스트림 (Binary Data)파일, .. 2025. 4. 30.
[Java] Stream 한방 정리 (👆JDK_1.8) 스트림(Stream) 개념 정리1. 스트림이란JDK 1.8 에서 등장한 개념데이터를 담고 있는 저장소가 아님데이터(컬렉션, 배열 등)를 흐르듯이 처리하는 방법함수형 프로그래밍 스타일로 데이터 변환/필터링/집계할 수 있음.데이터를 하나씩 꺼내서 가공하고, 필요하면 결과만 뽑아내는 흐름을 만드는것코드가 짧고 읽기 쉬워진다👇 요약배열이나 리스트를 for문 쓰지 않고 가볍게 가공하는 방식2. 스트림 특징특징설명데이터 소스 변경 X스트림은 원본 데이터를 변경하지 않음1회용스트림은 한 번만 탐색하고 끝남(재사용 불가)지연(lazy)연산중간 연산은 실행 안 하고 모아뒀다가, 최종 연산 할 때 한번에 처리자동 최적화내부적으로 최적화(병렬화, 합성작업) 해서 성능 좋게 처리함병렬 처리 가능.paralleStream().. 2025. 4. 29.
[WebLogic] 설치 및 기동 0. 참고 weblogic을 사용할 별도의 계정 생성해서 사용 # root 로그인 $ su - root # weblogic 계정 생성 [원하는 이름으로 만들면됨] $ adduser weblogic $ su - weblogic OpenJDK가 아닌 Oracle JDK를 이용해야만 설치가 가능하다. https://www.oracle.com/java/technologies/downloads/ 자바가 여러개 설치되어있다면 update-alternatives 명령어를 사용해서 OS레벨의 jdk를 변경해주거나 ~/.bash_profile에서 JAVA_HOME을 제대로 잡아주면된다. https://kimdia200.tistory.com/3 [Linux 명령어] update-alternatives 손쉬운 자바 버전 변.. 2023. 9. 19.
메모리 덤프(dump) 분석 [ jps, jmap, jhat ] JAVA 어플리케이션을 구동할때 메모리 사용량은 중요하다 static 메모리를 필요 이상으로 많이 사용하거나 힙메모리의 사용량이 이상하게 점점증가해서 메모리 초과가 발생하는 등 메모리 사용량의 이상 동작이 느껴질때는 메모리 덤프를 떠서 직접 확인해보는게 가장 좋다. 물론 더 유용한 도구들도 많겠지만 java-jdk가 깔려있다면 누구나 설치되어있는 가장 기본적인 툴을 사용 할 줄 알아야 추후 어떤 환경에서도 덤프 기능을 원활히 사용 할 수 있을것 같아 jps, jmap, jhat을 사용하려 한다. 1. jps 명령어 유닉스의 명령어중 'ps'는 현재 실행되고 있는 프로세스들을 표시하는 명령어인데 'jps'명령어는 현재 실행되고있는 JVM 프로세스를 표시해준다. kys@DESKTOP-7JHK5HR  ~ .. 2022. 5. 16.
[알고리즘] Sliding Window Sliding Window 일정범위(Window 창문)를 움직여서(Sliding) 원하는 값을 추출하는 알고리즘 투포인터 알고리즘과 동일하게 시간복잡도 O(n^2)의 알고리즘을 O(n)으로 바꾸는 알고리즘 예제 - 연속 최고 매출 찾기 사업자가 자신의 매출을 매일 n일 동안 기록하고 m일 연속 매출의 최댓값을 찾아보자 int n = 10 //10일간의 매출기록 int k = 3 // 연속 일자 3 //n=10 길이의 배열을 임의로 생성 int[] arr = {10, 9, 8 ,6, 4, 5, 10, 16, 9, 10}; int k = 3; int max = Integer.MIN_VALUE; int sum = 0; for(int i=0; i 2022. 3. 30.
[알고리즘] 투포인터 투포인터 알고리즘 1. 투포인터 알고리즘은 두개의 포인터를 기준으로 검색을 하며 원하는 값을 찾는 알고리즘이다. 2. 반드시 검색을 하는 목록은 정렬이 이뤄져 있어야 한다. 3. O(n^2) 의 시간복잡도를 O(n)으로 작업 할 수 있어서 소요 시간을 획기적으로 단축 할 수 있다. 예제 - 두배열의 공통된 값을 찾기 int[] arr1 = {1, 4, 6, 7, 8, 10} int[] arr2 = {2, 4, 5, 8, 9} 위와같은 순차정렬된 두개의 배열이 존재 할 때. 공통된 값을 추출하는 알고리즘을 작성해보자. 단순 중첩for문을 사용한 코드는 아래와 같다. int[] arr1 = {1, 4, 6, 7, 8, 10} int[] arr2 = {2, 4, 5, 8, 9} List list = new A.. 2022. 3. 30.