목록분류 전체보기 (170)
관심쟁이 영호
오늘은 Bean Validation에 대해서 기록을 해보자! 목차 Bean Validation 이란? Bean Validation Error 발생시키기 Bean Validation 실행 내용 이해하기 Bean Validation Object Error Bean Validation 이란? 웹 서버를 운영하면서, 사용자에게 여러 가지 입력을 받는다. 모든 사용자가 올바른 양식의 입력을 해주면 좋겠지만, 사용자도 사람인지라 올바르지 못한 입력을 할 가능성이 있다. 가령, 회원가입을 진행하면서 id를 공백으로 입력하는 경우를 말할 수 있다. 물론, Controller에서 if문을 이용하여 입력값을 검증할 수 있다. (고대 개발자들은 이렇게 했겠지..) 이렇게 할 경우에는 Controller가 너무 길어지고, 코..

JPA를 이용한 DB insert 이번에는 JPA를 이용하여 DB에 회원가입 정보를 insert 해보자. 다루게될 목차는 다음과 같다. Sign Up 프론트 구현 Sign Up 컨트롤러 구현 User Repository 구현 Sign Up 서비스 구현 Sign Up 프론트 구현 프론트 디자인은 신경쓰지 않고, 아주 간단하게 하였다. 먼저 구현된 화면은 다음과 같다. signup.html 다음은 코드이다. 회원가입입니다. 아이디 : 비밀번호: 코드 설명 thymeleaf를 사용할 것이기 때문에, template 디렉토리에 "signup.html"을 생성해주었다. PostMapping을 해주기 위해서, form태그를 사용했다. id, password를 입력받는다. 버튼은 총 2가지로 submit, clear..
오늘은 인터페이스에 관해서 공부를 할 예정이다. (출간된 "자바의 정석" 책을 참고했습니다.) 인터페이스란? - 추상 메서드의 집합이다. (추상 메서드 : 구현을 하지않은 메서드) - 모든 멤버가 public이다. - 구현된 내용이 하나도 없다. 이렇게 볼 수 있다. 그럼 추상클래스와 무엇이 다른가? 추상클래스는 구현된 메서드도 포함할 수 있다. (인터페이스도 JDK 1.8 version 부터는 구현된 상수, static 메서드와 같은 멤버변수를 가질 수 있다.) 인터페이스 선언방법 interface practice{ public static final FIRST = 1; public abstract abc(int num); } 위와 같이 인터페이스를 선언할 수 있다. 인터페이스의 구현 인터페이스를 구현..
오늘은 추상클래스와 추상메서드에 대해서 공부를 해볼 계획이다. 추상클래스? 추상클래스는 완성하지않은 메서드를 가지고 있는 클래스를 말한다! 한마디로, 몸통부분인 "{}"가 없는 것을 말한다. 클래스에는 "abstract"라는 키워드가 필요하다. 추상메서드? 추상메서드 또한 같다. 몸통부분 "{}"이 없는 메서드를 말한다. 메서드에는 "abstract"라는 키워드가 필요하다. 아래 코드를 통해서 살펴보자. abstract class MyClass{ abstract void go(int num); abstract void stop(int result); } 여기서 보았듯이, 몸통부분이 없는 것을 볼 수 있다. 왜 사용하는 걸까? 다른 클래스를 작성하는데 도움을 주기 위해서 사용한다! - 다음 코드를 살펴보자..

이번에는 UserState에 대해서 공부를 해보자! 먼저 아래의 코드를 보자. let number = 1; const add = () =>{ number++; console.log('add', number); } return ( 숫자 : {number} 더하기 ); local:3000 으로 접속해서 "더하기" 버튼을 클릭하면 console로 number 값을 확인할 수 있다. 하지만 숫자: {number}인데 number 값을 +1을 해주어도 "숫자 : 1" 에서 1이 바뀌지 않는다 왜그럴까? 상태 값이 변경되었다는 신호를 보내야 한다. 리액트는 아무 변수나 상태 값으로 생각하지않는다. 그래서 "이 변수를 상태 값으로 설정할게!" 라고 해주어야 한다. 그리고 값이 변하면 "상태 값이 변경되었어!" 라고 ..
이번 포스팅에서는 concat, filter, map, slice, 스프레드(전개) 연산자에 대해서 살펴볼 것이다. 스프레드 연산자 스프레드 연산자는 깊은 복사를 실시하는 연산자이다. 아래 코드를 보자. const a = [1,2,3] const b = [...a]; b.push(4); // a??? 이렇게 했을 때, a의 값은 어떻게 될까? 정답은 [1,2,3] 그대로다. 이것이 깊은 복사이다. a의 모든 값을 복사하여 새로운 메모리를 할당한 배열 b에 저장한다. 그래서 b에 새로운 값을 푸쉬해도 a에는 아무런 영향을 주지 않는다. concat concat 함수는 추가하는 함수라고 생각하면 된다. 아래 코드를 보자. const a = [1,2,3]; const b = a.concat(4); // b??..