본문 바로가기

Backend/Spring

(39)
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를 사용할 수 있도록 허용해야 해요. 브라우저에서 메일 발송자가 될 구글 계정에 접속하시고 아래..
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..
자바 파일 복사 (+ Spring) Java에서 파일을 복사하는 코드에요. Java 기존 java.io File in = new File("C:\\Temp\\abc.txt"); File out = new File("C:\\Temp\\def.txt"); try (InputStream fis = new FileInputStream(in); OutputStream fos = new FileOutputStream(out)) { int bytesRead = 0; while ((bytesRead = fis.read()) != -1) { fos.write(bytesRead); } fos.flush(); } catch (Exception e) { e.printStackTrace(); } java.nio Path in = Paths.get("C:\\Tem..
Spring Boot JUnit 5 MockMvc Test 스프링 부트에서 테스트 코드를 작성해볼거에요. 굉장히 많은 방법들이 있어요. 그 중에 가장 기본적인 방법으로 알려져있는 JUnit Framework를 사용해보겠습니다. 아마 대부분 스프링 부트로 개발을 하고 있다면 개발한 Controller를 테스트하고 싶을거에요. Controller를 테스트하는 방법 역시 여러가지가 있지만 그 중에 기본으로 알려진 MockMvc를 사용하겠습니다. AbstractControllerTest src/test/java 소스 폴더 밑에 패키지를 만들어서 넣어주면 됩니다. 테스트할 때 필요한 공통 설정 파일이구요. 설정하는 방법은 대표적으로 두 가지에요. AutoConfiguration Customizing AutoConfiguration 아주 간단하게 테스트할 때는 아래와 같이..
Spring Boot 내장 WAS 종류와 특징 스프링 부트 내장 WAS의 종류와 특징입니다. 최대한 쉽게 적어봤어요. Tomcat ~7버전까지 대규모 트래픽에서 불안정하다 vs 아니다 등의 의견이 분분했고, 8버전은 폭망했지만, 8.5버전으로 대응하여 안정화시켰고, 9버전이 나와 안정화되었고 이후로도 꾸준히 업데이트 중입니다. 강력한 커뮤니티, 다양한 성공 사례 등... Java 진영에서 실제로 가장 널리 사용되는 WAS에요. Spring Boot에서도 기본 내장 WAS는 Tomcat이구요. 저 역시도 아직까지는 기본 WAS를 사용하고 있습니다. org.springframework.boot spring-boot-starter-web implementation('org.springframework.boot:spring-boot-starter-web')..
Spring Boot Validation Custom (ConstraintValidator) 스프링 부트에서 Validation 체크할 때 커스텀한 어노테이션을 만들어서 사용해볼게요. 자주 사용할만한 체크를 미리 만들어두면 좋아요. 예제에서는 성별을 Validation 체크하는 어노테이션을 만들어볼거에요. pom.xml org.springframework.boot spring-boot-starter-validation build.gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter-validation' } Gender @interface GenderValidator 클래스를 추가하고 ContraintValidator의 구현 로직을 작성해주면 됩니다. gender라는 필드에 @Gender 어노테이션만 추..
Spring Boot Querydsl (Maven, Gradle 5) 항상 JPA를 사용하면서 JpaRepository와 EntityManager만 사용했었는데 항상 먼가 제한적이다는 느낌을 많이 받았어요. 그래서 Native Query를 어떻게 하면 깔끔하게 코딩할 수 있을까 고민하다가 답을 찾지 못했고 결국 Querydsl이나 jooq로 눈을 돌리게 되었어요. 쿼리의 도움을 받아야 하는 레거시 시스템 환경은 확실히 JPA가 많이 불리한 것 같아요. 개발 환경은 JDK 11 + Spring boot 2.1.9 버전이구요. 예제를 통해 간단히 Querydsl을 설정하고 사용해볼게요. for Maven 더보기 pom.xml 아래 코드 추가 후에 Update Project 4.0.0 com.querydsl querydsl-apt com.querydsl querydsl-jpa ..
JPA 작성자, 수정자 자동 세팅 Auditor JPA를 활용할 때 게시글의 작성자,수정자 아이디를 자동적으로 세팅해주고 싶은 경우가 있어요. 비즈니스 로직단에서 일일이 세팅하는 수고를 덜어주죠. 이 예제에서는 알아보기 쉽도록 아주 기본만 작성하였습니다. AuditorAwareConfig 소스 설명 드릴게요. UserInfo는 세션 아이디를 담아둔 객체입니다. 테이블에 넣어줄 로그인 사용자 ID를 Optional 클래스에 세팅하여 리턴하면 끝입니다. AuditorAware를 구현할 때 대부분의 예제에서는 별도의 클래스를 만들어서 임포트 받지만 여기서는 최대한 간단해보이도록 한 소스 파일에 직접 구현했습니다. @Resource private UserInfo userInfo; Long userId = userInfo.getIdIsLogin(); 로그인 체..