본문 바로가기

java

(16)
MySQL 스토리지 엔진 (InnoDB, MyISAM, 그외...) InnoDB vs MyISAM What's different? InnoDB MyISAM Locking Level Row Table Foreign Key Yes No Transaction Yes No Clustered Index Yes No Full-Text Index Yes (MySQL 5.6~) Yes Geospatial Index Yes (MySQL 5.7~) Yes Storage Limit 64TB 256TB InnoDB 높은 신뢰성과 고성능의 균형을 이루는 범용 스토리지 엔진입니다. 많은 기능을 제공하여 상대적으로 무겁습니다. Row level locking 지원으로 INSERT,UPDATE,DELETE에 유리합니다. write가 많은 서비스에서 유리합니다. 테이블과 인덱스를 테이블 스페이스에 저..
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는 쓰레드에 안전하지 않기 때문에 자연스럽게 문제가 생깁니다. 이런 코드를 써야할 경우가 있다면 ..
Spring Boot 메일 발송 (gmail, naver, daum, nate) 스프링 부트 환경에서 메일을 발송해볼게요. 관리자 계정으로 서버의 상태를 전송한다던가 이메일 인증 메일을 보낸다던가할 때 지금 포스팅한 내용대로 적용하실 수 있을 것 같네요. 준비사항으로는 본인의 gmail, naver, daum, nate 계정 중 하나 있어야 아래 과정을 따라하실 수 있어요. pom.xml org.springframework.boot spring-boot-starter-mail bulid.gradle implementation 'org.springframework.boot:spring-boot-starter-mail' GMAIL 더보기 메일 발송을 구현하기 전에 해야할 일이 있어요. SMTP를 사용할 수 있도록 허용해야 해요. 브라우저에서 메일 발송자가 될 구글 계정에 접속하시고 아래..
자바 스택 (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"); ..