본문 바로가기

분류 전체보기

(121)
자바 원격서버 파일 다운로드 (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..
MyBatis vs JPA 차이, 사용후기, 장단점 MyBatis SQL 중심 개발 장점 겁내 쉬워요. SQL의 강점과 특징을 그대로 쉽게 활용할 수 있음 어떤 시스템이든 무난하게 평균 효율을 낼 수 있음 단점 SQL을 직접 작성하여 반복되는 작업이 존재 SQL로 모든 문제의 해결을 쉽게 할 수 있어서 테이블 설계에 소홀해지는 경우가 많음 JPA Object 중심 개발 장점 DBMS 벤더에 종속되지 않도록 개발 가능 기본적인 CRUD 쿼리를 반복적으로 작성하지 않아도 됨 수정사항이 발생하였을 때 수정해야 할 코드가 적음 빌드 과정에서 오류 발생 Type-Safe 단점 겁내 어려워요. 복잡한 쿼리를 사용해야 할 때에 불리, 복잡한 쿼리를 지양하며 꼭 필요한 경우 Querydsl이나 jOOQ와 같은 라이브러리 사용을 권장 JPA 사용하면 불리한 경우 이미 설..
Docker Redis 설치, 접속 Docker로 Redis를 설치하고 실행해볼게요. 1. Redis 이미지 가져오기 docker pull redis 2. 신규 Container 생성, 실행 docker run --name redis-container -p 6379:6379 redis Redis는 기본적으로 포트만 열려있으면 무조건으로 접근이 가능합니다. 기본 설정으로 설치한 Redis 보안에 상당히 취약하기 때문에 최소한 반드시 비밀번호라도 설정해줍시다. 아래 예제보다 1억 배는 매우 어려운 문자로 해줍시다. 실제 클라우드에 6379 포트 열어두고 있으면 무조건 해킹 시도가 와요. 포트만 바꿔줘도 해킹 시도 당하는 횟수가 거의 줄어드니 포트 변경도 권장 드립니다. docker run --name redis-container -p 6379..
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"); ..
Spring Boot 파일 다운로드 (Controller) 스프링부트에서 컨트롤러를 만들어서 이미지를 다운로드하는 코드에요. 부트 환경이 아니여도 스프링 프레임워크를 사용하고 있다면 어디에나 적용 가능합니다. 코드를 간단하게 설명드리자면 파일 데이터에서 직접 Content-Type을 조사하여 Response Header에 세팅하고 InputStream으로 Resource를 생성하고 body에 세팅하여 전송합니다. Content-Disposition 값을 inline으로 하거나 헤더를 설정하지 않으면 웹 브라우저 내에서 이미지 확인이 가능합니다. (default가 inline) @GetMapping("download") public ResponseEntity download() throws IOException { Path path = Paths.get("C:/U..