@Enumerated(EnumType.STRING) @Column(nullable = false) private Role role; }
@NoArgsConstructor : Lombok 어노테이션으로 빈 생성자를 만들어줍니다. @Entity : 해당 클래스가 엔티티를 위한 클래스이며, 해당 클래스의 인스턴스들이 JPA로 관리되는 엔티티 객체라는 것을 의미합니다. 즉, 테이블을 의미합니다. 디폴트값으로 클래스의 카멜케이스 이름을 언더스코어 네이밍(_)으로 테이블 이름을 매칭합니다. @Id : 테이블의 Primary Key(PK) @GeneratedValue(strategy = GenerationType.IDENTITY) : PK를 자동으로 생성하고자 할 때 사용합니다. 즉, auto_increment를 말합니다. 여기서는 JPA의 넘버링 전략이 아닌 이 전략을 사용합니다. (전에 application.yml 설정에서 use-new-id-generate-mappings: false로 한 것이 있습니다.) @Column : 해당 필드가 컬럼이라는 것을 말하고, @Column에는 다양한 속성을 지정할 수 있습니다. (nullable = false: null값이 되면 안된다!, length = 50: 길이 제한 등등) @Enumerated(EnumType.STRING) : JPA로 DB에 저장할 때 Enum 값을 어떤 형태로 저장할지를 결정합니다. 기본적으로는 int로 저장하지만 int로 저장하면 무슨 의미인지 알 수가 없기 때문에 문자열로 저장될 수 있도록 설정합니다. User 클래스 Setter가 없는 이유는 이 setter를 무작정 생성하게 되면 해당 클래스의 인스턴스가 언제 어디서 변해야하는지 코드상으로는 명확하게 알 수가 없어 나중에는 변경시에 매우 복잡해집니다. Builder를 사용하는 이유는 어느 필드에 어떤 값을 채워야하는지 명확하게 알 수 있기 때문에 실수가 나지 않습니다.
enum? 보통 도메인을 설계할 때 사용하는 인스턴스의 수가 정해져 있고 관련된어 처리할 수 있는 상수값이 여러개 존재할 때 Enum을 사용합니다. 스프링 시큐리티에서는 권한 코드에 항상 ROLE_이 앞에 있어야 합니다. 따라서 키 값을 ROLE_USER, ROLE_ADMIN로 지정했습니다.
@GetMapping("/hello") public String hello(){ return"hello Spring Boot!"; }
@GetMapping("/hello/dto") public User helloResponseDto(@RequestParam("id") Long id, @RequestParam("name") String name, @RequestParam("nickname") String nickname , @RequestParam("pw") String pw, @RequestParam("email") String email, @RequestParam("role") Role role){ returnnew User(id ,name, nickname, pw, email, role); } }
@RequestParam : 외부에서 API로 넘긴 파라미터(@RequestParam(“name”), @RequestParam(“nickname”), , @RequestParam(“pw]”) … )를 가져와 String name, String nickname, String pw에 각각 저장 return new User(id ,name, nickname, pw, email, role); 파라미터로 가져온 변수 기준으로 User 생성자 return
server.address=127.0.0.1 server.port=8090 spring.datasource.url=jdbc:mysql://localhost:3306?allowPublicKeyRetrieval=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=1234 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # mysql 사용 spring.jpa.database = mysql spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect # 로깅 레벨 logging.level.org.hibernate=info # 하이버네이트가 실행한 모든 SQL문을 콘솔로 출력 spring.jpa.properties.hibernate.show_sql=true # SQL문을 가독성 있게 표현 spring.jpa.properties.hibernate.format_sql=true # 디버깅 정보 출력 spring.jpa.properties.hibernate.use_sql_comments=true
application.properties 이 파일은 스프링부트가 애플리케이션을 구동할 때 자동으로 로딩하는 파일입니다. key - value 형식으로 값을 정의하면 애플리케이션에서 참조하여 사용할 수 있습니다. 값을 참조할 때는 여러가지 방법이 있다. @Value 어노테이션으로 값을 받아올 수도 있습니다.
JPA(Java Persistence API)란 자바 진영의 ORM 기술 표준으로, 인터페이스의 모음입니다. 즉, 실제로 동작하는 것이 아닙니다. JPA 인터페이스를 구현한 대표적인 오픈소스가 Hibernate입니다. ORM(Object Relational Mapping)이란, 객체는 객체대로, 관계형 DB는 관계정 DB대로 설계하여 ORM 프레임워크가 중간에서 매핑시켜줍니다. 즉, ORM은 객체와 RDB 두 기둥 위에 있는 기술입니다.