본인이 공부하면서 심심할 때마다 업데이트하는 목록임.
🍣 Basic setup
@SpringBootAppliction - 클래스
- 자동 configuration & 컴포넌트 스캔
- @Configuration + @ComponentScan + @EnableAutoConfiguration 와 동일
@Configuration - 클래스
@ComponentScan - 클래스
- 개발한 클래스를 빈으로 등록
- argument 없이는 자동으로 현재 패키지를 스캔함
@EnableAutoConfiguration - 클래스
🍣 Request responses
@RequestMapping - 클래스/메서드
- HTTP 리퀘스트를 REST & MVC 컨트롤러 메서드들과 매핑
@ResponseBody
@RequestMapping("/example")
public String getExample() {
return "Example";
}
@RequestParam - 파라미터
- 컨트롤러가 데이터를 파라미터에 할당
- 쿼리 파라미터를 뽑아서 사용 가능케 함
- 데이터를 저장하는 이름으로 메서드의 변수를 설정해야 함
- url 상에서 데이터를 찾음 (form에 데이터 입력 후 제출 > 데이터가 url을 통해 전달됨)
- form 태그 사용하는 경우에 사용
@GetMapping("/example")
public String getExample(@RequestParam String name) {
return "example: " + name;
}
- 필수임 > 값이 존재하지 않으면 에러 뜸
- 필수가 아닐 경우 > required=false
@RequestBody - 파라미터
- 컨트롤러가 데이터를 파라미터에 할당
- 모든 데이터값이 string으로 전달됨
- 메서드명은 상관없음
- form 태그 사용 안할 때
@ModelAttribute - 메서드, 파라미터
- form과 요청 파라미터들을 constructor/setter로 바인딩
- 사용자가 요청하면 값을 오브젝트 형태로 바꿔줌
- model.addAttribute()으로 담지 않아도 model에 자동으로 담김
@GetMapping - 메서드
- @RequestMapping(method = RequestMethod.GET)와 동일
- 해당 url의 HTTP GET 리퀘스트
@GetMapping("/getExample")
public String getExample() {
return "example:;
}
@PostMapping - 메서드
- @RequestMapping(method = RequestMethod.POST)와 동일
- 해당 url의 HTTP POST 리퀘스트
@PostMapping("/postExample")
public String postExample(@RequestBody Param param) {
return "example";
}
🍣 Component types
@Component - 클래스
- 스프링이 자동으로 컴포넌트 클래스를 찾을 수 있게
- 스프링이 @Component가 있는 클래스를 스캔해서 initialize하고 필요한 의존관계를 주입함
@Controller - 클래스
- @Component의 버전
- 본 클래스는 컨트롤러다 라는 표시
- 핸들러 메서드 모음집
@Service - 클래스
- @Component의 버전
- 본 클래스는 서비스다 라는 표시
@Repository - 클래스
- @Component의 버전
- 본 클래스는 리포지토리(데이터 저장소)다 라는 표시
- 기능: 데이터 수정, 삭제, 찾기, 조회
@RestController - 클래스
- @Controller의 버전
- @Controller + @ResponseBody 포함
🍣 Testing
@SpringBootTest
- 스프링 컨테이너와 테스트를 함께 실행
- integration testing에 용이
🍣 Others
@Bean - 메서드
- 자바가 해당 메서드 이름의 빈을 생성 & 등록
@Autowired - 메서드 (생성자), 필드 등
- 필요한 의존 객체의 타입에 해당하는 빈을 찾아 자동 주입
- 생성자, setter에 주로 사용
@Around
🍣 JPA
@Entity
@Table(name = "example")
public class example {
@Id @GeneratedValue
private Long id;
@Column(name = "example_name")
private String name;
}
@Entity
- 디비의 테이블과 1:1 매핑
- 엔티티 인스턴스 하나 = 테이블 레코드 하나
@Table
@Column
- name attribute으로 매핑할 칼럼 설정
@Id
@GeneratedValue
@OrderBy
@OrderBy("name asc")
private List<String> names;
@Embeddable
- 해당 클래스는 다른 엔티티들에 의해 임베드될 수 있음
@Embedded
@Transactional - 클래스, 메서드
- 테스트 시작 전에 트랜잭션 시작 & 테스트 완료 후 항상 롤백
- 디비에 데이터를 남기지 않음 -> 다음 테스트에 영향 X
- 테스트가 아닌 클래스에 필요한 이유? JPA의 경우
- 디폴트: 롤백
@Rollback(boolean)
- @Rollback(true)가 디폴트이며, 실제 디비 저장이 안됨
- 디비 반영 원하면 > @Rollback(false)
@Commit
🍣 Hibernate
@ManyToOne
@ManyToMany
@JoinColumn
@JoinTable
@Inheritance
참고:
https://lightrun.com/spring-boot-annotations/
https://www.digitalocean.com/community/tutorials/jpa-hibernate-annotations