Intellij 생성자 자동 단축키 : Alt + Insert
메서드 자동생성하기 단축키 : Alt + Enter
최근 파일목록 : Ctrl + E
Annotation(@)은 사전적 의미로는 주석이라는 뜻이다.
자바에서 Annotation은 코드 사이에 주석처럼 쓰이며 '특별한 의미, 기능을 수행하도록 하는 기술'이다.
즉, 프로그램에게 추가적인 정보를 제공해주는 메타데이터라고 볼 수 있다.(meta data : 데이터를 위한 데이터)
Annotation을 사용하면 코드량이 감소하고 유지보수하기 쉬우며, 생산성이 증가한다.
호출하는 클라이언트의 정보를 가져다가 서버(controller)에 전달해주는 매핑
쉽게 말하자면 요청이 왔을 때 어떤 컨트롤러가 호출이 되어야 하는지 알려주는 지표 같은 것이다.
@RequestMapping(value = "/hello-basic")
이렇게 매핑을 하면 localhost:8080/hello-basic으로 url을 입력했을 경우에 이것에 해당하는 메서드가 실행된다.
@RequestMapping은 다중요청도 가능하다 다중 요청을 하려면 배열로 묶어야 한다.
@RequestMapping(value = {"/hello", "/hello-basic"})
이것처럼 다중 요청을 할 경우에는 둘 중 아무 url이나 입력해도 된다.
Body에 전달되는 데이터를 메소드의 인자와 매칭시켜, 데이터를 받아서 처리할 수 있는 Annotation으로 아래와 같이 사용합니다.
@Controller // 이 Class는 Controller 역할을 합니다
@RequestMapping("/user") // 이 Class는 /user로 들어오는 요청을 모두 처리합니다.
public class UserController {
@RequestMapping(method = RequestMethod.POST)
public String addUser(@RequestBody User user) {
// POST method, /user 요청을 처리
String sub_name = user.name;
String sub_old = user.old;
}
}
Spring MVC에서 Controller클래스에 쓰인다.
Spring에게 해당 Class가 Controller의 역할을 한다고 명시한다.
주로 View를 반환하기 위해 사용한다.
@Controller에 @ResponseBody가 결합된 어노테이션
주용도는 Json 형태로 객체 데이터를 반환하는 것이다.
Spring Framework에서 Bean 객체를 주입받기 위한 방법은 크게 아래의 3가지가 있습니다. Bean을 주입받기 위하여 @Autowired 를 사용합니다. Spring Framework가 Class를 보고 Type에 맞게(Type을 먼저 확인 후, 없으면 Name 확인) Bean을 주입합니다.
Lombok은 코드를 크게 줄여주어 가독성을 크게 높힐 수 있는 라이브러리입니다. 대표적인 Annotation은 아래와 같습니다.
메서드, 클래스, 인터페이스 위에 사용한다. 적용된 범위 내에서 프록시 객체가 생성되어 자동으로 commit과 rollback을 진행한다.
Component는 자바 클래스를 스프링 빈으로 등록하라고 알리는 용도이다. 이 어노테이션을 사용하면 컴포넌트 스캔의 대상이 되어 어플리케이션 컨텍스트에 스프링 빈으로 등록된다.
Service는 @Component를 상속한 어노테이션으로 ComponentScan의 대상이 되어 런타임 시에 스프링 빈으로 등록된다. 이외에 다른 특별한 기능은 없지만, 이 어노테이션을 본다면 이것이 서비스 레이어로 비즈니스 로직이 작성되어 있는 구간이라고 빠르게 알 수 있을 것이다.
해당 프로퍼티가 테이블의 주키(primary key) 역할을 한다는 것을 나타낸다.
JPA에서 Entity의 Primary Key를 생성하여 주는 기능이다.
strategy = GenerationType.IDENTITY
1) GenerationType.AUTO
MYSQL은 IDENTITY 선택
ORACLE은 SEQUENCE 선택
2) GenerationType.IDENTITY
각 엔티티 클래스마다 독립적으로 id가 auto_increment 되어짐
객체의 입장에서 공통 매핑 정보가 필요할 때 사용한다.
id, name은 객체의 입장에서 볼 때 계속 나온다.
이렇게 공통 매핑 정보가 필요할 때, 부모 클래스에 선언하고 속성만 상속 받아서 사용하고 싶을 때 @MappedSuperclass를 사용한다.
DB 테이블과는 상관없다. 아래에 보면 DB는 매핑 정보 다 따로 쓰고 있다. 객체의 입장이다.
엔티티가 수정됨을 감지하고 그 시점을 updatedAt 필드에 기록한다.
EnumType.ORDINAL : enum 순서 값을 DB에 저장
EnumType.STRING : enum 이름을 DB에 저장