๐ Annotation ์ด๋ ธํ ์ด์
: class์ method์ ์ถ๊ฐํ์ฌ ๋ค์ํ ๊ธฐ๋ฅ์ ๋ถ์ฌํจ
๊ฐ class์ ์ญํ ์ ์
Bean ์๋์ฃผ์
์๋์ผ๋ก Getter, Setter ์์ฑ
์ฝ๋๋ ๊ฐ์
์ ์ง๋ณด์ ์ฉ์ด
์์ฐ์ฑ ์ฆ๊ฐ
๊ฐ๋ฐ์๊ฐ ์์ฑํ class โ Spring Bean์ผ๋ก ๋ฑ๋กํ ๋ ์ฌ์ฉ
์ค์ ์ ๋ณด ์์ด ์๋์ผ๋ก ํด๋น ์ด๋ ธํ ์ด์ ์ด ๋ถ์ ๋ชจ๋ ํด๋์ค โ Spring Bean ๋ฑ๋ก
Spring์ โ @Component ์ด๋ ธํ ์ด์ ๋ณด๊ณ โ Spring์ Bean์ผ๋ก ๋ฑ๋กํจ
@Component(value="mallang")
public class Family {
public Mallang() {
System.out.println("hi");
}
}
@Component ์ค์บ ์, @ComponentScan์ด ๋ถ์ ํด๋์ค์ ํจํค์ง๊ฐ ์์์์น
Spring์๊ฒ ํด๋น class๊ฐ Controller ์ญํ ์ ํ๋ค๊ณ ๋ช ์ํจ
@Controller // ์ปจํธ๋กค๋ฌ ์ญํ ์ ํ๋ ํด๋์ค
@RequestMapping("/user") // ํด๋น URL๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ์ฒ๋ฆฌํจ
public class UserController {
@RequestMapping(method = RequestMethod.GET)
public String getUser(Model model) {
// GET method, /user ์์ฒญ์ ์ฒ๋ฆฌ
}
}
Requestํ URL๊ณผ ์ด๋ ธํ ์ด์ value ๊ฐ ์ผ์น โ ํด๋น class ๋ด method ์คํ
@RequestMapping(value = "")
Controller ๊ฐ์ฒด ์์ method ๋ฐ class์ ์ ์ฉ๊ฐ๋ฅ
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(method = RequestMethod.GET)
public String getUser(Model model) {
// GET method, /user ์์ฒญ์ ์ฒ๋ฆฌ
}
@RequestMapping(method = RequestMethod.POST)
public String addUser(Model model) {
// POST method, /user ์์ฒญ์ ์ฒ๋ฆฌ
}
@RequestMapping(value = "/info", method = RequestMethod.GET)
public String addUser(Model model) {
// GET method, /user/info ์์ฒญ์ ์ฒ๋ฆฌ
}
}
Request์ Header ๊ฐ์ ๊ฐ์ ธ์ด
Request Header : ์ถ๊ฐ๋ฐ์ดํฐ, ๋ฉํ๋ฐ์ดํฐ (์์ฌํํ์ ์ํ ๋ฐ์ดํฐ)
ํด๋น ์ด๋ ธํ ์ด์ ์ ์ด, ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ์ ์ฌ์ฉ
@RequestHeader(value = "")
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(method = RequestMethod.GET)
public String getUser(@RequestHeader(value="Accept-Language") String acceptLanguage) {
// GET method, /user ์์ฒญ์ ์ฒ๋ฆฌ
}
}
URL์ ํตํด ์ ๋ฌ๋ ๊ฐ โ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์ด
RESTful ๋ฐฉ์์ผ๋ก REST ํต์ ์ ์ฌ์ฉ
@RequestMapping
์ด๋
ธํ
์ด์
๊ฐ์ผ๋ก {ํ
ํ๋ฆฟ๋ณ์} ์ฌ์ฉ
@PathVariable
์ด๋
ธํ
์ด์
์ฌ์ฉ โ {ํ
ํ๋ฆฟ๋ณ์}์ ๋์ผํ ์ด๋ฆ์ ๊ฐ๋ ํ๋ผ๋ฏธํฐ ์ถ๊ฐ
๐ localhost:8080/userId๊ฐ/memo๊ฐ
@RestController
public class TestController() {
@RequestMapping("/{userId}/{memo})
public String test(@PathVariable("userId") String userId, @PathVariable("memo") String memo)
// ๋ณ์ userId, memo์ ํ๋ผ๋ฏธํฐ๊ฐ(=URL ์ ๋ฌ๊ฐ)์ด ํ ๋น๋จ
return "Test ์๋ฃ"
}
}
URL์ ์ ๋ฌ๋๋ ํ๋ผ๋ฏธํฐ โ ๋ฉ์๋ ์ธ์์ ๋งค์นญํ์ฌ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ ์ฒ๋ฆฌํ ์ ์๋ ์ด๋ ธํ ์ด์
์ฟผ๋ฆฌ์คํธ๋ง, GET๋ฐฉ์
JSON ํํ์ Body โ Message Converter๋ฅผ ํตํด Java ๊ฐ์ฒด๋ก ๋ณํ์ํด
localhost:8080/param?userId=์ ๋ ฅ๊ฐ&memo=์ ๋ ฅ๊ฐ
ํน์๋ฌธ์ ๋ฐ ๊ตฌ๋ถ์ ํฌํจ ๊ฐ์ด ์๋ฆฌ๊ฑฐ๋ ๋น์ ์์ ์ผ๋ก ๋ค์ด์ด
GET๋ฐฉ์
Request โ URL์ ๊ฐ ํ์ถ๋จ
POST๋ฐฉ์
Request โ URL์ ๊ฐ ํ์ถ โ
๐ https://naver.com?nickname=dog&old=10
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(method = RequestMethod.GET) // GET ๋ฐฉ์ ์ ์ธ
public String getUser(@RequestParam String nickname, @RequestParam(name="old") String age {
// GET method, /user ์์ฒญ์ ์ฒ๋ฆฌ
String sub = nickname + "_" + age;
...
}
}
Body์ ์ ๋ฌ๋๋ ๋ฐ์ดํฐ โ ๋ฉ์๋ ์ธ์์ ๋งค์นญํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ฒ๋ฆฌํ ์ ์๋ ์ด๋ ธํ ์ด์
Client๊ฐ ๋ณด๋ด๋ HTTP Request ๋ณธ๋ฌธ (JSON ๋ฑ) โ Java ๊ฐ์ฒด๋ก ๋ณํ
โ Client ์ ๋ ฅ๊ฐ โ HTTP Body์ JSON ํํ๋ก ๋์ด๊ฐ
โก ํ๋ผ๋ฏธํฐ์ @RequestBody
+ ๊ฐ์ ๋ฐ์์ฌ ๊ฐ์ฒด ์ง์ ํด์ค
๊ฐ์ฒด ํ๋๊ฐ - ํ๋ผ๋ฏธํฐ ํ๋๊ฐ ์ ํํ๊ฒ ์ผ์นํด์ผํจ
@Controller
@RequestMapping("/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;
}
}
Client๊ฐ ์ ์กํ๋ HTTP parameter, Body ๋ด์ฉ โ Setter ํจ์ โ 1 : 1๋ก ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํจ
@RequestParam
or @PathVariable
์ฒ๋ผ ํ๋ผ๋ฏธํฐ ๋ณ์ ํ๋๋น ํ๋์ฉ ์ ๊ธฐ ๋๋ฌด ๋ง์ ๋ โ ํ๋ฒ์ ๊ฐ์ ธ์ด
๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฅผ ๋ด์
๊ฐ์ฒด์ @Setter
์ฒจ๋ถ ํ์
ํ๋ผ๋ฏธํฐ์ @ModelAttribute
๋ ์๋ต๊ฐ๋ฅ
@RequestBody
๊ฐ Json์ ๋ฐ๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ, @ModelAttribute
๋ Json์ ๋ฐ์ ์ ์์
@PostMapping("/form/model")
@ResponseBody
public String helloRequestBodyForm(@ModelAttribute Star star) {
// ModelAttribute ์ฌ์ฉ -> ํ๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ค ๊ฐ์ ธ์ด
// ๊ฐ์ฒดํ์์ผ๋ก ๋ฐ์์ ๊ฐ์ ธ์ด
return String.format("Hello, @RequestBody.<br> (name = %s, age = %d) ", star.name, star.age);
}
๋ฉ์๋ ๋ฆฌํด ๊ฐ โ View๋ก ์ถ๋ ฅ โ
HTTP Response Body์ ์ง์ ์ฐ์ฌ์ง
return โ Json, xml ๋ฐ์ดํฐ๋ฅผ ๋ฐํํจ
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public String getUser(@RequestParam String nickname, @RequestParam(name="old") String age {
// GET method, /user ์์ฒญ์ ์ฒ๋ฆฌ
// https://naver.com?nickname=dog&old=10
User user = new User();
user.setName(nickname);
user.setAge(age);
return user;
}
}
Spring ํ๋ ์์ํฌ์์ Bean ๊ฐ์ฒด๋ฅผ ์ฃผ์ ๋ฐ๊ธฐ ์ํ ๋ฐฉ๋ฒ
Bean ๊ฐ์ฒด์ฃผ์ ๋ฐฉ๋ฒ | |
---|---|
1 | @Autowired ์ด๋ ธํ ์ด์ |
2 | @AllArgsConstructor ์์ฑ์ |
3 | setter |
RequestMapping(Method=RequestMethod.GET)์ ๊ฐ์ ์ญํ
@Controller
@RequestMapping("/user")
public class UserController {
@GetMapping("/")
public String getUser(Model model) {
// GET method, /user ์์ฒญ์ ์ฒ๋ฆฌ
}
////////////////////////////////////
// ์์ ์๋ ๋ฉ์๋๋ ๋์ผํ๊ฒ ๋์ํฉ๋๋ค. //
////////////////////////////////////
@RequestMapping(method = RequestMethod.GET)
public String getUser(Model model) {
// GET method, /user ์์ฒญ์ ์ฒ๋ฆฌ
}
}
RequestMapping(Method=RequestMethod.POST)์ ๊ฐ์ ์ญํ
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(method = RequestMethod.POST)
public String addUser(Model model) {
// POST method, /user ์์ฒญ์ ์ฒ๋ฆฌ
}
////////////////////////////////////
// ์์ ์๋ ๋ฉ์๋๋ ๋์ผํ๊ฒ ๋์ํฉ๋๋ค. //
////////////////////////////////////
@PostMapping('/')
public String addUser(Model model) {
// POST method, /user ์์ฒญ์ ์ฒ๋ฆฌ
}
}
final, @Notnull์ด ๋ถ์ ํ๋์ ์์ฑ์๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด์ค
์๋ ์์กด์ฑ ์ฃผ์ โ ์์ฑ์, Setter, Field ํ์ ์ ๋ฐฉ์์ฌ์ฉ
Lombok์ @RequiredArgsConstructor ์ด๋ ธํ ์ด์ ์ฌ์ฉ
@Service
@RequriedArgsConstructor // final ๋ถ์ ํ๋ -> ์์ฑ์ ์๋์ผ๋ก ๋ถ์ฌ์ค
public class TestService {
private final TestRepository1 testRepository1; // final -> ์์
private final TestRepository2 testRepository2;
}
Entity ๋ณํ๊ฐ์ง โ ํ ์ด๋ธ ๋ฐ์ดํฐ ์กฐ์
primary key (๊ธฐ๋ณธํค_๋ฐ์ดํฐ ์ค๋ณต์ ๋ง์) ๋ณ์ ์ ์ธ
@Id
์ด๋
ธํ
์ด์
๋ง์ผ๋ก Id๋ฅผ ์ง์ ํจ@Id
์ @GeneratedValue
๊ฐ์ด ์ฌ์ฉ
GenerationType ์ต์ ์ผ๋ก ์ ๋ต์ ์ง์ ํจ
๐ TABLE
- ํน์ ๋ฒค๋์ ์์กด์ ์ด์ง ์์
- ์ํ์ค ํ
์ด๋ธ โ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ์ค๋ฅผ ํ๋ด๋ผ Id ํ ๋น
๐ IDENTITY
- PK (๊ธฐ๋ณธํค) ์์ฑ์ DB์๊ฒ ์์ (MySQL = AUTO INCREMENT)
- ํน์ DB ๋ฒค๋์ ์์กด์ ์
๐ SEQUENCE
- DB์ sequence ๊ฐ์ฒด ์ด์ฉ โ ์ ์ผํ ๊ฐ์ ์์๋๋ก ์์ฑ
- ํน์ DB ๋ฒค๋์ ์์กด์ ์
๐ AUTO
- DB๋ฒค๋์ ๋ฐ๋ผ ์๋์ผ๋ก 3๊ฐ์ง ์ ๋ต ์ค ํ๋๋ฅผ ์ ํํจ
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
๊ฐ์ฒดํ๋(๋ณ์)์ DB column์ ๋งตํํจ
name
: ๋งตํํ ํ
์ด๋ธ์ ์ปฌ๋ผ์ด๋ฆ์ ์ง์
insertable
: ์ํฐํฐ ์ ์ฅ ์ ์ ์ธ๋ ํ๋๋ ๊ฐ์ด ์ ์ฅ
updateable
: ์ํฐํฐ ์์ ์ ์ด ํ๋๋ฅผ ํจ๊ป ์์
table
: ์ง์ ํ ํ๋๋ฅผ ๋ค๋ฅธ ํ
์ด๋ธ์ ๋งตํ
nullable
: null์ ํ์ฉํ ์ง, ํ์ฉํ์ง ์์์ง ๊ฒฐ์
@Column(nullable = false) // null ํ์ฉ ์ํจ
private String memberName;
unique
: ์ ์ฝ์กฐ๊ฑด์ ๊ฑธ ๋ ์ฌ์ฉ
length
: varchar์ ๊ธธ์ด๋ฅผ ์กฐ์ ํจ (๊ธฐ๋ณธ๊ฐ 255)
๐ Lombok
: ์ฝ๋๋ฅผ ํฌ๊ฒ ์ค์ฌ, ๊ฐ๋ ์ฑ์ ํฌ๊ฒ ๋์ฌ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
@Setter
: class ๋ชจ๋ ํ๋์ Setter method๋ฅผ ์์ฑ
@Getter
: class ๋ชจ๋ ํ๋์ Getter method๋ฅผ ์์ฑ
@AllArgsConstructor
: class ๋ชจ๋ ํ๋ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ์์ฑ์๋ฅผ ์ถ๊ฐํจ
@NoArgsConstructor
: class ๊ธฐ๋ณธ์์ฑ์๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํด์ค
@ToString
: class ๋ชจ๋ ํ๋์ toString method๋ฅผ ์์ฑํจ
์ ๋ง ์ ์ตํ ๊ธ์ด์์ต๋๋ค.