
@Controller vs @RestControllerSSR 방식이 아닌 이상 Spring MVC 패턴에서 Model과 View의 역할을
FE가 처리함에 따라 BE는 데이터만 내려주게 된다. - JSON 형식
@Controller : 전통적인 Spring MVC의 컨트롤러, View를 반환하기 위해 사용@RestController : @Controller + @ResponseBody@ResponeBody :✨[참고] @RequesetBody
@RequestBody :✨[참고] HttpMessageConverter와 Jackson라이브러리
Spring에서 JSON ↔ Java 실제 변환 작업은 내부의 HttpMessageConverter가 하고,
JSON 변환에는 기본적으로 Jackson 라이브러리가 사용된다
@RequestMapping 은 특정 URL 요청을 Controller의 클래스/메서드에 연결해준다.사용법1
@ResController
@RequestMapping("/users)
public class UserController{
@GetMapping
@PostMapping
@PutMapping
@PatchMapping
@DeleteMapping
}
사용법2
@RestController
public class UserController{
@RequestMapping(value = "/users", method = RequestMethod.GET)
public void getUser(){
...
}
}
| 데이터 전달 방식 | 어노테이션 | 주요 속성 / 특징 | 예시 |
|---|---|---|---|
| 쿼리 파라미터(쿼리 스트링) | @RequestParam | required: 필수 여부 지정defaultValue: 값이 없을 때 기본값 지정 | /users?name=kim |
| 경로 변수 | @PathVariable | URL 경로의 값을 변수로 받음 | /users/1 |
| 요청 본문 | @RequestBody | 요청 Body의 JSON 등을 Java 객체로 변환 | JSON Body |
| 폼 데이터 | @ModelAttribute | 폼 데이터를 Java 객체에 바인딩 | HTML Form 데이터 |
@RequestParam은 디폴트가 required=true 이므로 false 설정을 해주지 않으면 필수값✨[참고] 쿼리 파라미터 vs 경로 변수
@RequestParam) :? 뒤에 오는 조건값(선택적)/users?id=1@PathVariable) :users/1record 는 데이터 전달 목적의 객체를 간결하게 만들기 위한 문법으로 DTO의 성질과 부합한다.
또한 record는 내부 필드가 private final이기 때문에 불변을 보장한다.
public record UserRequest(
String name,
int age
) { }
위와 같이 record를 작성하면 자바가 자동으로 아래 기능을 만들어준다.
equals()hashCode()toString()| 구분 | class | record |
|---|---|---|
| 코드 길이 | 비교적 길음 | 매우 간결함 |
| 생성자 | 직접 작성 또는 Lombok 사용 | 자동 생성 |
| Getter | 직접 작성 또는 Lombok 사용 | 자동 생성 |
| Setter | 작성 가능 | 일반적으로 불가능 |
| 값 변경 | 가능 | 생성 후 변경 불가 |
| equals/hashCode | 직접 작성 또는 Lombok 사용 | 자동 생성 |
| 상속 | 가능 | 다른 클래스를 상속할 수 없음 |
| 주요 용도 | 일반적인 객체 | 데이터 전달용 객체 |
도커는 소프트웨어 개발과 배포를 도와주는 컨테이너 기술로
애플리케이션을 빌드, 배포, 실행하는 과정을 쉽게 관리하게 해준다.
Dockerfile 작성
↓
$ docker build
↓
Docker Image 생성
↓
$ docker run
↓
Docker Container 생성 및 실행
PK는 중복❌, NULL❌FK는 실제로 존재하는 PK값을 참조해야 한다.모든 데이터 클래스는 getter가 필수
스프링 내부적으로 객체를 조작할 때 getter를 사용
영속성 컨텍스트는 트랜잭션 내에서 동작
@Transactional 이 붙이면 그 내부 코드는 트랜잭션으로 관리 및 영속성 컨텍스트가 동작