본문 바로가기

Backend/Java

(17)
JVM 구조와 GC 종류 간단 정리 JVM Java byte code를 실행할 수 있는 주체 byte code를 OS에서 동작할 수 있도록 기계어로 변환하여 실행 JVM 언어 byte code는 다른 언어로도 만들 수 있음 - Java, Kotlin, Groovy, Scala, Clojure 특징 java byte code를 타켓 플랫폼에 상관없이 JVM 위에서 동작시켜 플랫폼 독립성 보장 스택 기반의 VM 가비지 컬렉션 (GC) 구조 Class Loader Runtime Data Area에 Java Class를 로드 로드(Loading) → 링크(Linking) → 초기화(Initialization) Runtime Data Area OS로부터 할당받는 메모리 영역 [JVM 메모리 구조] - Method Area: 클래스의 메타 정보, 모..
자바 썸네일 이미지 생성 (Thumbnail Image) 자바로 썸네일(thumbnail) 이미지를 만들어볼거에요. 원본 비율 유지 String oPath = "C:/Temp/40f0594a-b3f6-4c0f-a0b2-3cebbaf0d74e.jpg"; // 원본 경로 File oFile = new File(oPath); int index = oPath.lastIndexOf("."); String ext = oPath.substring(index + 1); // 파일 확장자 String tPath = oFile.getParent() + File.separator + "t-" + oFile.getName(); // 썸네일저장 경로 File tFile = new File(tPath); double ratio = 2; // 이미지 축소 비율 try { Buffered..
자바 원격서버 파일 다운로드 (Java, Spring) 원격 서버에 위와 같은 이미지가 있다고 가정해볼게요. 자바에서 원격 서버의 파일을 다운로드 받아서 저장하는 코드를 작성해보겠습니다. 자바 버전은 1.8 이상으로 사용해야 코드 사용 가능합니다. Java 별도 라이브러리를 사용하지 않았어요. import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.UUID; // 원격 파일 다운로드 URL String fileUrl = "https://k.kakaocdn.net/dn/crbxqN/btqAPdDwLQJ/..
자바 쿠폰 랜덤 생성 (Java) 자바로 쿠폰을 생성하는 소스에요. 여러 방법이 있지만 아래와 같이 쿠폰 문자 구성에 필요한 문자열들을 직접 배열에 넣어두고 랜덤으로 추출해내는 것이 확장성 측면에서 좋은 것 같습니다. 영문 대문자 + 숫자 static int n = 16; // n자리 쿠폰 static char[] chs = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; public String createCoupon() { Random rd = new Ran..
Java StringBuffer vs StringBuilder 차이 (간단 예제 코드) 자바에서 StringBuffer와 StringBuilder의 차이점에 대해서 알아볼게요. 문자열 조합을 할 때 프로그램 성능을 위해 String 대신에 사용하는 대표적인 두 클래스입니다. StringBuffer Thread-Safe 함 StringBuilder Thread-Safe 하지 않음 StringBuffer보다 성능이 좋음 그럼 멀티쓰레드 환경에서는 StringBuilder를 아예 쓰면 안되는 것일까요? 예제를 통해 알아볼게요. 멀티쓰레드 환경에서 StringBuilder를 쓰면 안되는 예 이렇게 전역변수로 StringBuilder를 선언하면 여러 쓰레드에서 동시에 접근하게되고 StringBuilder는 쓰레드에 안전하지 않기 때문에 자연스럽게 문제가 생깁니다. 이런 코드를 써야할 경우가 있다면 ..
자바 스택 (Java Stack) 기본 사용법 누구나 다 아는? 자료구조 스택이에요. 자바 유틸에서 제공하는 스택을 사용하는 방법에 대한 글입니다. 스택 생성 Stack stack = new Stack(); 비어있는지 검사 stack.empty(); top 추가 stack.push("item") top 조회 stack.peek(); top 꺼내면서 조회 stack.pop(); 요소 찾기 없으면 -1, 있으면 위치 리턴 (top부터 1) stack.search("item"); 스택의 모든 요소를 top부터 꺼내며 출력 Stack stack = new Stack(); stack.push("item1"); stack.push("item2"); stack.push("item3"); stack.push("item4"); stack.push("item5"); ..
자바 비밀번호 암호화 (SHA256,SHA512) + Salt SHA (Secure Hash Algorithm, 안전한 해시 알고리즘)은 해시 함수들의 모음이라고 보면 되요. 복호화가 불가능한 단방향 암호화 기법으로 데이터를 안전하게 저장할 수 있습니다. SHA256과 SHA512도 그 중 하나이며 가장 많이 쓰이는 함수이므로 구현해보도록 할게요. SHA256 String raw = "1111"; MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(raw.getBytes()); String hex = String.format("%064x", new BigInteger(1, md.digest())); SHA512 String raw = "1111"; MessageDigest md = MessageDi..
Java Stream 기초 설명 (코딩 테스트 예제로) 최근에 어떤 기업의 경력직 코딩테스트를 보면서 Stream 기초 문제가 나왔어요. 예전에는 자바 디자인 패턴을 강조하는데, 요새는 Optional이나 Stream을 얼마나 잘 활용할 수 있냐를 보는 것 같아요. 문제를 약간 수정해서 공유해드리자면 이런 식이였어요. String[] array = { "carrot", "apple", "banana", "egg", "meat", "apple" }; - 다음 배열 요소의 중복을 제거하고, 다섯 글자 이상의 단어만, 내림차순으로 정렬하여 출력하라. - 다음 배열 요소에서 사전 상에 가장 앞에 나오는 단어 하나를 출력하라. ※ Stream을 이용할 것 그전에 Stream의 기초 사용법을 알아볼게요. Stream 생성 String[] array = { "carrot..