First Spring

마동찬·2023년 4월 14일
0
  • Intellij 생성자 자동 단축키 : Alt + Insert

  • 메서드 자동생성하기 단축키 : Alt + Enter

  • 최근 파일목록 : Ctrl + E

  • 포맷 자동만들기 단축키 : iter

Annotation 이란?

Annotation(@)은 사전적 의미로는 주석이라는 뜻이다.
자바에서 Annotation은 코드 사이에 주석처럼 쓰이며 '특별한 의미, 기능을 수행하도록 하는 기술'이다.
즉, 프로그램에게 추가적인 정보를 제공해주는 메타데이터라고 볼 수 있다.(meta data : 데이터를 위한 데이터)
Annotation을 사용하면 코드량이 감소하고 유지보수하기 쉬우며, 생산성이 증가한다.

@RequestMapping

호출하는 클라이언트의 정보를 가져다가 서버(controller)에 전달해주는 매핑
쉽게 말하자면 요청이 왔을 때 어떤 컨트롤러가 호출이 되어야 하는지 알려주는 지표 같은 것이다.

@RequestMapping(value = "/hello-basic")
이렇게 매핑을 하면 localhost:8080/hello-basic으로 url을 입력했을 경우에 이것에 해당하는 메서드가 실행된다.
@RequestMapping은 다중요청도 가능하다 다중 요청을 하려면 배열로 묶어야 한다.
@RequestMapping(value = {"/hello", "/hello-basic"})
이것처럼 다중 요청을 할 경우에는 둘 중 아무 url이나 입력해도 된다.

@RequestBody

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;
    }
}

@Controller

Spring MVC에서 Controller클래스에 쓰인다.
Spring에게 해당 Class가 Controller의 역할을 한다고 명시한다.
주로 View를 반환하기 위해 사용한다.

@RestController

@Controller에 @ResponseBody가 결합된 어노테이션
주용도는 Json 형태로 객체 데이터를 반환하는 것이다.

  • 근본적인 차이점은 @Controller의 역할은 Model 객체를 만들어 데이터를 담고 View를 찾는 것이지만, @RestController는 단순히 객체만을 반환하고 객체 데이터는 JSON 또는 XML 형식으로 HTTP 응답에 담아서 전송합니다. 물론 @Controller와 @ResponseBody를 사용하여 만들 수 있지만 이러한 방식은 RESTful 웹서비스의 기본 동작이기 때문에 Spring은 @Controller와 @ResponseBody의 동작을 조합한 @RestController을 도입했습니다.

@Autowired

Spring Framework에서 Bean 객체를 주입받기 위한 방법은 크게 아래의 3가지가 있습니다. Bean을 주입받기 위하여 @Autowired 를 사용합니다. Spring Framework가 Class를 보고 Type에 맞게(Type을 먼저 확인 후, 없으면 Name 확인) Bean을 주입합니다.

  • @Autowired
  • 생성자 (@AllArgsConstructor 사용)
  • setter

Lombok

Lombok은 코드를 크게 줄여주어 가독성을 크게 높힐 수 있는 라이브러리입니다. 대표적인 Annotation은 아래와 같습니다.

  • @Setter
    Class 모든 필드의 Setter method를 생성해줍니다.
  • @Getter
    Class 모든 필드의 Getter method를 생성해줍니다.
  • @AllArgsConstructor
    Class 모든 필드 값을 파라미터로 받는 생성자를 추가합니다.
  • @NoArgsConstructor
    Class 기본 생성자를 자동으로 추가해줍니다.
  • @ToString
    Class 모든 필드의 toString method를 생성한다.

@Transactional

메서드, 클래스, 인터페이스 위에 사용한다. 적용된 범위 내에서 프록시 객체가 생성되어 자동으로 commit과 rollback을 진행한다.

@Component

Component는 자바 클래스를 스프링 빈으로 등록하라고 알리는 용도이다. 이 어노테이션을 사용하면 컴포넌트 스캔의 대상이 되어 어플리케이션 컨텍스트에 스프링 빈으로 등록된다.

@Service

Service는 @Component를 상속한 어노테이션으로 ComponentScan의 대상이 되어 런타임 시에 스프링 빈으로 등록된다. 이외에 다른 특별한 기능은 없지만, 이 어노테이션을 본다면 이것이 서비스 레이어로 비즈니스 로직이 작성되어 있는 구간이라고 빠르게 알 수 있을 것이다.

@Id

해당 프로퍼티가 테이블의 주키(primary key) 역할을 한다는 것을 나타낸다.

@GeneratedValue

JPA에서 Entity의 Primary Key를 생성하여 주는 기능이다.

  • strategy
  • generator

strategy = GenerationType.IDENTITY

1) GenerationType.AUTO
MYSQL은 IDENTITY 선택
ORACLE은 SEQUENCE 선택

2) GenerationType.IDENTITY
각 엔티티 클래스마다 독립적으로 id가 auto_increment 되어짐

@MappedSuperclass

  • 객체의 입장에서 공통 매핑 정보가 필요할 때 사용한다.

  • id, name은 객체의 입장에서 볼 때 계속 나온다.

  • 이렇게 공통 매핑 정보가 필요할 때, 부모 클래스에 선언하고 속성만 상속 받아서 사용하고 싶을 때 @MappedSuperclass를 사용한다.

  • DB 테이블과는 상관없다. 아래에 보면 DB는 매핑 정보 다 따로 쓰고 있다. 객체의 입장이다.

@LastModifiedDate

엔티티가 수정됨을 감지하고 그 시점을 updatedAt 필드에 기록한다.

@Enumerated(value = )

EnumType.ORDINAL : enum 순서 값을 DB에 저장
EnumType.STRING : enum 이름을 DB에 저장

profile
새내기개발자 성장기록

0개의 댓글