TIL : 230110

JINSEON YE·2023년 1월 10일

TIL

목록 보기
53/88

SQL

  • CREATE
CREATE TABLE 테이블_이름
  • INSERT
    열은 생략이 가능하지만 이 경우에는 테이블 정의할 때의 열 순서 및 개수와 동일해야 합니다.
INSERT INTO 테이블 [(1,2, ...)] VALUES (1,2, ...)
  • AUTO_INCREMENT
CREATE TABLE users (
	id INT AUTO_INCREMENT PRIMARY KEY,
	name CHAR(4),
	age INT);
  • INSERT INTO ~ SELECT
    다른 테이블의 데이터를 한번에 입력합니다.
SELECT 문의 열의 개수는 INSERT 할 테이블의 열 개수와 같아야 합니다.
INSERT INTO 테이블_이름 (열_이름1, 열_이름2, ...)
	SELECT;
  • UPDATE
UPDATE 테이블_이름
	SET1 =1,2 =2, ...
	WHERE 조건;
  • DELETE
    테이블의 행 데이터를 삭제합니다.
DELETE FROM 테이블_이름 WHERE 조건;
  • TRUNCATE
    테이블은 그대로고 내용만 없앰
TRUNCATE TABLE 테이블_이름;
  • DROP
    테이블 자체를 삭제
DROP TABLE 테이블_이름;
  • USE
    기존에 쓰던 거랑 다른 새로운 데이터베이스를 쓸 때

  • DESC
    테이블 구조 확인(DESCRIBE 명령)

DESC TABLE 테이블_이름;

SPRING

@Vaild

  • 빈 검증기(Bean Validator)를 이용해 객체의 제약 조건을 검증하도록 지시하는 어노테이션
    특징 : JSR 표준의 빈 검증 기술의 객체의 필드에 달린 어노테이션으로 편리하게 검증을 한다는 것.

사용 방법 : Spring에서는 일종의 어댑터인 LocalValidatorFactoryBean가 제약 조건 검증을 처리한다. 이를 이용하려면 LocalValidatorFactoryBean을 빈으로 등록해야 하는데, gradle에 SpringBoot에서는 아래의 의존성만 추가해주면 해당 기능들이 자동 설정된다.

implementation group: 'org.springframework.boot', name: 'spring-boot-starter-validation'

사용 방법 : 컨트롤러의 메소드에 @Valid를 붙여주면 유효성 검증이 진행된다.
컨트롤러에서만 동작하며, 기본적으로 다른 계층에서는 검증이 되지 않는다.
다른 계층에서 파라미터를 검증하기 위해서는 @Validated와 결합되어야 한다.

@Validated

  • AOP 기반으로 메소드의 요청을 가로채서 유효성 검증을 진행해준다.
    특징 : @Validated는 JSR 표준 기술이 아니며 Spring 프레임워크에서 제공하는 어노테이션 및 기능이다.

@Valid, @Validated 설명

DDL

  • 데이터 정의어(Data Defination Language, DDL)

데이터베이스의 테이블의 생성, 변경, 삭제를 담당하는 명령어입니다.
대표적으로 CREATE, ALTER, DROP, RENAME, TRUNCATE가 있습니다.

NPE(NullPointerException)

NPE를 피하려면 null 여부를 검사해야 하는데, null 검사를 해야하는 변수가 많은 경우 코드가 복잡해지고 번거롭다. 그래서 null 대신 초기값을 사용하길 권장하기도 한다.

Optional

Java8에서는 Optional<> 클래스를 사용해 NPE를 방지할 수 있도록 도와준다.
Optional<>는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다.

Optional은 null 또는 값을 감싸서 NPE(NullPointerException)로부터 부담을 줄이기 위해 등장한 Wrapper 클래스이다. Optional은 값을 Wrapping하고 다시 풀고, null 일 경우에는 대체하는 함수를 호출하는 등의 오버헤드가 있으므로 잘못 사용하면 시스템 성능이 저하된다. 그렇기 때문에 메소드의 반환 값이 절대 null이 아니라면 Optional을 사용하지 않는 것이 좋다.

Optional 설명

@RequiredArgsConstructor

  • final이 붙거나 @NotNull 이 붙은 필드의 생성자를 자동 생성해주는 롬복 어노테이션

@RequiredArgsConstructor 설명

@Transactional

  • 데이터베이스의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산들을 의미한다.

@Transactional

에러메세지

에러 : Non-static method 'save(S)' cannot be referenced from a static context

userRepository.save(user); 로 고치고 해결.

위에서 final로 선언해놓은 변수 userRepository가 아니라 UserRepository를 가져오라고 해서 생긴 오류.

static 은 이미 객체화되어 있어서 바로 사용할 수 있는 것,
non-static 은 아직 객체화되어 있지 않아서(아직 존재하지 않음), new 키워드를 통해서 객체화한 후(생성 후)에 사용할 수 있는 것.

2번째 에러 : NULL not allowed for column "USERNAME"; SQL statement:

해결 : postman 에서 body 이름을 user라고 한 오타 때문. username 이라고 고치고 해결.

profile
백엔드 개발자

0개의 댓글