Java 48

[공부/Spring] 구글 SMTP를 이용한 이메일 인증

운영체제 : MacOS M1 IDE : IntelliJ Spring Boot : 2.7.8 Java : 11 JDBC : MyBatis 계기 추후에 아이디나 비밀번호를 찾을 때 이메일을 이용하기 위해 회원가입시 이메일 인증 과정을 추가하고자 한다. 이메일 인증은 회원가입 뿐만 아니라 비밀번호 재설정시 본인임을 확인하기 위한 용도로도 사용할 예정이다. SMTP란? SMTP(Simple Mail Transfer Protocol)은 네트워크를 통해 전자우편(이메일)을 전송하는 기술 표준을 의미한다. 이메일 인증을 위해서 SMTP를 통해 원하는 계정으로 인증코드를 담은 이메일을 전송할 것이다. SMTP를 사용하기 위해 build.gradle에 아래 의존성을 추가해주자. implementation 'org.spr..

공부/Spring 2023.07.23

[공부/Spring] 유효성 검사를 위한 Validation 처리

운영체제 : MacOS M1 IDE : IntelliJ Spring Boot : 2.7.8 Java : 11 JDBC : MyBatis 계기 회원가입의 경우 아이디, 비밀번호, 이메일 등 그 값이 일정한 형식을 지켜야 한다. 이를 체크해주는 메소드를 하나 하나 생성해줄 수도 있겠지만 이전에 @NotNull, @Email 등 유효성 검사를 해주는 어노테이션을 본 적이 있어 해당 어노테이션들을 이용해 유효성을 검사하고자 한다.  @Valid란? @Valid는 JSR-303 표준 스펙으로써 빈 검증기(Bean Validator)를 이용해 객체의 제약 조건을 검증하도록 지시하는 어노테이션이다. 어노테이션으로 편리하게 검증을 해준다는 특징이 있다. Spring에서는 LocalValidationFactoryBea..

공부/Spring 2023.03.07

[공부/Spring] @ExceptionHandler 예외처리

운영체제 : MacOS M1 IDE : IntelliJ Spring Boot : 2.7.8 Java : 11 Persistence Framework : MyBatis 계기 회원가입을 구현하면서 성공을 제외하고 이메일 형식을 틀리거나, 이미 존재하는 아이디 등을 처리해줄 때 각 상황에 맞는 상태코드와 응답 Body에 넣어줄 메시지를 설정해주고 싶었다. 처음엔 서비스층에서 회원가입을 수행하다가 문제가 발생하면 그 문제를 컨트롤러에 전해주고, 컨트롤러에서는 문제가 무엇인지 판단하고 그에 맞는 상태코드와 응답 메시지를 만들려고 했다. 하지만 이 방법으로 구현하면 컨트롤러의 코드가 많이 지저분해지기도 하고, 서비스에서 어떤 문제인지를 판단을 한 상태이기 때문에 컨트롤러에서 또 그 문제에 맞는 상태코드와 응답 메시..

공부/Spring 2023.02.21

[도서/자바의 신] #33 Java 8에서 변경된 것들은?

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. Lambda 표현식(expression) Java8부터 추가된 람다 표현식은 익명클래스의 가독성이 떨어진다는 단점을 보완하기 위해 만들어졌다. 대신 람다 표현식은 인터페이스에 메소드가 "하나"인 것들에만 적용이 가능하다. 람다 표현식은 익명 클래스로 전환이 가능하며, 익명 클래스는 람다 표현식으로 전환이 가능하다. 메소드가 하나인 인터페이스에는 대표적으로 Runnable, Comparator, FileFilter 등이 있다. 사용자가 구현한 인터페이스에서도 람다 표현식을 사용할 수 있다. 람다 표현식 매개 변수 목록 화살표 토큰(Arrow Token) 처리 식 (int x, int y) -> x+y 예제 interface Cal..

[도서/자바의 신] #32 Java 8에 추가된 것들은?

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. Optional Optional은 null인 객체를 편리하게 처리하기 위해서 만든 클래스로 java.util 패키지에 속해있다. Optional 클래스 선언부 public final class Optional extends Object final로 선언되어 있어 추가적인 확장이 불가능하다. Optional 객체 생성 방법 Optional.empty() : 데이터가 없는 객체를 생성 Optional.ofNullable() : null이 추가될 수 있는 객체를 생성 Optional.of() : 반드시 데이터가 들어가는 객체를 생성 Optional 객체가 비어있는지 확인하는 메소드는 isEmpty()가 아닌 isPresent()다. ..

[도서/자바의 신] #31 Java 7에 추가된 것들에는?

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. Fork/Join은 CPU를 더 쉽게, 효율적으로 사용하기 위해서 만들어진 거에요 Java 7에서 추가된 클래스 중에는 Fork/Join과 관련된 클래스들이 존재한다. Fork/Join은 어떤 계산 작업을 할 때 여러 개로 나누어(Fork) 계산한 후 결과를 모으는 작업(Join)을 의미한다. Fork/Join에는 Work stealing이라는 개념이 있다. 여러개의 Dequeue가 있을 때 하나의 Dequeue는 바쁘고, 다른 Dequeue는 한가하다면 한가한 Dequeue가 바쁜 Dequeue의 일을 가져가서 해주는 것을 Working stealing이라 한다. Fork/Join을 사용하면 별도로 구현해주지 않아도 라이브러리..

[도서/자바의 신] #30 Java 7에서 달라진 것들에는?

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. Java 7에서는 ... JSR(Java Specification Requirement) 336 문서에 Java 7의 변화가 정리되어 있다. 대표적인 변경 사항에는 숫자 표시 방법 보완, switch문에서 String 사용, 제네릭을 쉽게 사용할 수 있는 Diamond, 예외 처리시 다중 처리 가능 등이 있다. 달라진 숫자 표현법!!! 자바에서 숫자를 표현할 때 아무 접두사가 없으면 10진수, 숫자 앞에 0을 넣어주면 8진수, 0x를 넣어주면 16진수로 인식한다. Java 7부터는 2진수 표현이 추가돼 2진수로 나타내려면 숫자 앞에 0b를 붙여 주면 된다. 또 긴 숫자를 표현할 때 가독성을 높이기 위해 _(언더바)를 이용해 숫자..

[도서/자바의 신] #28 다른 서버로 데이터를 보내려면 어떻게 하면 되나요?

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. 네트워크 프로그래밍이란? 바로 옆에 있는 장비와 데이터를 주고 받는 작업을 보통 네트워킹(Networking)이라 한다. 이런 네트워킹은 다음과 같이 레이어로 구분되어 있다. 자바에서 활용하는 대표적인 레이어에는 애플리케이션 레이어(HTTP, ftp, telnet...) 트랜스포트 레이어(TCP, UDP, ...) 네트워크 레이어(IP, ...) 링크 레이어(device driver, ...) 가 있다. 애플리케이션 레이어 중 가장 대표적인 HTTP(Hypertext Transfer Protocol), FTP(File Transfer Protocol), Telnet들은 모두 TCP(Transmission Control Proto..

[도서/자바의 신] #27 Serialiable과 NIO도 살펴봅시다

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. Serialiable에 대해서 좀 살펴보자 Serializable 인터페이스에는 선언된 변수나 메소드가 없다. 개발을 하다보면, 생성한 객체를 파일로 저장하거나, 저장한 객체를 읽거나, 객체를 다른 서버로 보내거나, 다른 서버에서 생성한 객체를 받는 일이 생길 수도 있다. 그럴 때 필요한 것이 Serializable이다. 내가 만든 클래스가 파일에 읽고 쓰거나, 다른 서버로 보내거나 받을 수 있도록 하기 위해선 Serializable 인터페이스를 구현해야만 한다. 그럼 JVM에서 해당 객체는 저장하거나 다른 서버로 전송할 수 있도록 해준다. Serializable을 구현한 후에는 다음 변수를 선언하는 것이 좋다. 선언해주지 않으..

[도서/자바의 신] #26 파일에 있는 것을 읽고 쓰려면 아이오를 알아야죠

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. I/O는... I/O는 프로그램에 있는 어떤 내용을 파일에 읽거나 저장할 일이 있을 때 다른 서버나 디바이스로 보낼 일이 있을 때 사용한다. JVM기준으로 I(Input)는 읽을 때, O(Output)는 파일로 쓰거나 외부로 전송할 때로 I/O는 입력과 출력을 통칭한다. 초기 단계의 자바에서는 I/O를 처리하기 위해 java.io 패키지의 바이트 기반 데이터 처리를 위한 스트림(Stream)클래스를 제공했다. 읽는 작업은 InputStream을 통해, 쓰는 작업은 OutputStream을 통해 작업하도록 되어있다. 바이트가 아닌, char 기반의 문자열로만 되어있는 파일은 Reader와 Writer라는 클래스로 처리한다. 스트림..

728x90