Spring Boot 기반의 애플리케이션에서 주로 사용되는 Java 패키지 구조
기능 기반 패키지 구조(package-by-feature)
계층 기반 패키지 구조(package-by-layer)
Client ↔ Controller ↔ Service ↔ Repository(DAO) ↔ DB
@Entity
: Entity 클래스임을 명시@Id
: DB테이블에서의 Primary Key지정 (id Column)@Column
: Column에 기능 추가 가능(Unique, Not Null 등)main()
메서드가 포함된 애플리케이션의 엔트리포인트(Entrypoint, 애플리케이션 시작점) 작성import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Section3Week1Application {
public static voic main(String[] args) {
SpringApplication.run(Section3Week1Application.class, args);
}
}
Spring Intializr를 통해 생성한 프로젝트에는 엔트리포인트가 이미 작성되어있음
@SpringBootADpplication
@Component
가 붙은 클래스 검색(scan), Spring Bean 등록 기능 활성화@Configuration
이 붙은 클래스 자동 검색, 추가적 Spring Bean 등록 기능 활성화SpringApplication.run(Section3Week1Application.class, args);
@RestController
@RequestMapping("/v1/members)
public class MemberController {
@PostMapping
public ResponseEntity postMember(@RequestParam("email") String email,
@RequestParam("name") String name,
@RequestParam("phone") String phone)
System.out.println("# email: " + email);
System.out.println("# name: " + name);
System.out.println("# phone: " + phone);
String response =
"{\"" +
"email\":\""+email+"\"," +
"\"name\":\""+name+"\",\"" +
"phone\":\""+phone+
"\"}";
return response;
}
@GetMapping("/{member-id}")
public String getMember(@PathVariable("member-id") long memberId) {
System.out.println("# memberId: " + memberId);
// not implementation
return null;
}
}
@RestController
@Controller
+ @ResponseBody
@Controller
: 주로 View를 반환하기 위해 사용@ResponseBody
: View 페이지가 아닌 반환값 그대로 클라이언트에게 반환@RequestMapping
@RequestMapping(value = "/v1/members", produces = {MediaType.APPLICATION_JSON_VALUE})
클라이언트 요청과 클라이언트 요청을 처리하는 핸들러 메서드(Handler Method)를 매핑해주는 역할
클래스 레벨에 추가하여 클래스 전체에 사용되는 공통 URL 설정
produces : 응답 데이터를 어떤 미디어 타입으로 클라이언트에게 전송할 지를 설정
MediaType.APPLICATION_JSON_VALUE
: JSON 형식의 데이터를 응답 데이터로 전송하겠다는 의미@____Mapping
____
부분에 지정@RequestParam
@PathVariable
@RequestBody
Method Arguments | 설명 |
---|---|
@RequestParam | 쿼리 파라미터, 폼 데이터 등의 서블렛 요청 파라미터를 바인딩할때 사용 |
@RequestHeader | Request Header를 바인딩하여 Header의 키/값에 접근 가능 |
@RequestBody | Request Body를 읽어 Java객체로 역직렬화 |
@RequestPart | multipart/form-data 형식의 요청 데이터를 part별 바인딩하는데 도움 |
@PathVariable | @RequestMapping에 패턴 형식으로 정의된 URL 변수에 바인딩 |
@MatrixVariable | URL 경로 세그먼트 부분에 키/값 쌍으로 된 데이터에 바인딩 |
HttpEntity | request header, body에 접근할 수 있는 컨테이너 객체 사용 가능 |
@RestController
@RequestMapping("/v1/members")
public class MemberController {
@PostMapping
public ResponseEntity postMember(@RequestParam("email") String email,
@RequestParam("name") String name,
@RequestParam("phone") String phone) {
Map<String, String> map = new HashMap<>();
map.put("email", email);
map.put("name", name);
map.put("phone", phone);
return new ResponseEntity<>(map, HttpStatus.CREATED);
}
}
@RequestMapping
의 produces 애트리뷰트 생략됨