Java5์ ์ถ๊ฐ๋ ๋ฌธ๋ฒ ์์๋ก, ์๋ฐ ์ฝ๋์ @๋ฅผ ์ด์ฉํด ์ฃผ์์ฒ๋ผ ๋ฌ์ ํน์ํ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ ๊ฒ์
๋๋ค.
ํ๋ก๊ทธ๋จ ์ฝ๋์ ์ผ๋ถ๊ฐ ์๋ ํ๋ก๊ทธ๋จ์ ๊ดํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ณ , ์ฝ๋์ ์ ๋ณด๋ฅผ ์ถ๊ฐํ๋ ์ ํํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ๊น๋ํด์ง๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
- @ComponentScan: @Service, @Repository, @Controller, @Configuration์ด ๋ถ์ ํด๋์ค Bean๋ค์ ์ฐพ์์ Context์ bean๋ฑ๋ก์ ํด์ฃผ๋ Annotation
- @Component: ๊ฐ๋ฐ์๊ฐ ์ง์ ์์ฑํ Class๋ฅผ Bean์ผ๋ก ๋ฑ๋กํ๊ธฐ ์ํ Annotation
- @Bean: ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์ด๊ฐ ๋ถ๊ฐ๋ฅํ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฑ์ Bean์ผ๋ก ๋ง๋ค๋ คํ ๋ ์ฌ์ฉ๋๋ Annotation
- @Autowired: ์์ฑ(field), setter method, constructor(์์ฑ์)์์ ์ฌ์ฉํ๋ฉฐ Type์ ๋ฐ๋ผ ์์์ Bean์ ์ฃผ์ ํด์ฃผ๋ ๊ฒ์ ๋๋ค.
- @Inject: @Autowired ์ด๋ ธํ ์ด์ ๊ณผ ๋น์ทํ ์ญํ
- @Controller: Spring์ Controller๋ก Spring MVC์์ Controllerํด๋์ค์ ์ฐ์ ๋๋ค.
- @RestController: Spring์์ Controller ์ค View๋ก ์๋ตํ์ง ์๋, Controller๋ฅผ ์๋ฏธํฉ๋๋ค.
โ
@Controller ์ @RestController ์ ์ฐจ์ด
๐ก @Controller
API์ view๋ฅผ ๋์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํฉ๋๋ค.
๋์ API ์๋น์ค๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ @ResponseBody๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
view(ํ๋ฉด) return์ด ์ฃผ๋ชฉ์ ์
๋๋ค.
๐ก @RestController
view๊ฐ ํ์์๋ API๋ง ์ง์ํ๋ ์๋น์ค์์ ์ฌ์ฉํฉ๋๋ค.
Spring 4.0.1๋ถํฐ ์ ๊ณตํ๋ฉฐ, @RequestMapping ๋ฉ์๋๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก @ResponseBody ์๋ฏธ๋ฅผ ๊ฐ์ ํฉ๋๋ค.
data(json, xml ๋ฑ) return์ด ์ฃผ๋ชฉ์ ์
๋๋ค.
์ฆ, @RestController = @Controller + @ResponseBody ์ธ ๊ฒ์
๋๋ค.
- @Service: Service Class์์ ์ฐ์ด๋ ๊ฒ์ผ๋ก, ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๋ Class๋ผ๋ ๊ฒ์ ๋ํ๋ด๋ ์ฉ๋์ ๋๋ค.
- @Repository: DAO class์์ ์ฐ์ด๋ฉฐ, DataBase์ ์ ๊ทผํ๋ method๋ฅผ ๊ฐ์ง๊ณ ์๋ Class์์ ์ฐ์ ๋๋ค.
- @CrossOrigin: CORS ๋ณด์์์ ๋ฌธ์ ๋ก ๋ธ๋ผ์ฐ์ ์์ ๋ฆฌ์์ค๋ฅผ ํ์ฌ origin์์ ๋ค๋ฅธ ๊ณณ์ผ๋ก์ AJAX์์ฒญ์ ๋ฐฉ์งํ๋ ๊ฒ์ ๋๋ค.
- @RequestBody: ์์ฒญ์ด ์จ ๋ฐ์ดํฐ(JSON์ด๋ XMLํ์)๋ฅผ ๋ฐ๋ก Class๋ model๋ก ๋งคํํ๊ธฐ ์ํ Annotation์ ๋๋ค.
- @PathVariable: method parameter ์์ ์ฌ์ฉํ๋ฉด์ ํด๋น URL์์ {ํน์ ๊ฐ}์ ๋ณ์๋ก ๋ฐ์ ์ฌ ์ ์์ต๋๋ค.
- @NoArgsConstructor: ๊ธฐ๋ณธ์์ฑ์๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํฉ๋๋ค.
- @AllArgsConstructor: ๋ชจ๋ ํ๋ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ์์ฑ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- @RequiredArgsConstructor: final์ด๋ @NonNull์ธ ํ๋ ๊ฐ๋ง ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ์์ฑ์๋ฅผ ์ถ๊ฐํฉ๋๋ค. final ๊ฐ์ด ํ ๋น๋๋ฉด ๋ ์ด์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- @Getter: Class ๋ด ๋ชจ๋ ํ๋์ Getter method๋ฅผ ์๋ ์์ฑํฉ๋๋ค.
- @Setter: Class ๋ด ๋ชจ๋ ํ๋์ Setter method๋ฅผ ์๋ ์์ฑํฉ๋๋ค.
- @Builder: ์ด๋ ํ๋์ ์ด๋ค ๊ฐ์ ์ฑ์์ผ ํ ์ง ๋ช ํํ๊ฒ ์ ํ์ฌ ์์ฑ ์์ ์ ๊ฐ์ ์ฑ์์ค๋๋ค.
- @Data: @Getter @Setter @EqualsAndHashCode @AllArgsConstructor์ ํฌํจํ Lombok์์ ์ ๊ณตํ๋ ํ๋์ ๊ด๋ จ๋ ๋ชจ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ผ๋ก, ์ ์ฒด์ ์ธ ๋ชจ๋ ๊ธฐ๋ฅ ํ์ฉ์ผ๋ก ์ํ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ์ฌ์ฉํ์ง ์๋๊ฒ์ด ์ข์ต๋๋ค.
๐ก Constructor์ Builder์ ์ฐจ์ด
์์ฑ ์์ ์ ๊ฐ์ ์ฑ์์ฃผ๋ ์ญํ ์ ๋๊ฐ์ง๋ง, Builder๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ ํ๋์ ์ด๋ค ๊ฐ์ ์ฑ์์ผ ํ ์ง ๋ช
ํํ๊ฒ ์ธ์งํ ์ ์์ต๋๋ค.
ํด๋น Class์ Builder ํจํด Class๋ฅผ ์์ฑ ํ ์์ฑ์ ์๋จ์ ์ ์ธ ์ ์์ฑ์์ ํฌํจ๋ ํ๋๋ง ๋น๋์ ํฌํจ๋ฉ๋๋ค.
- @Entity: ์ค์ DB์ ํ ์ด๋ธ๊ณผ ๋งค์นญ๋ Class์์ ๋ช ์ํ๋ ๊ฒ์ผ๋ก ํ ์ด๋ธ๊ณผ ๋งํฌ๋ ํด๋์ค์์ ๋ํ๋ ๋๋ค.
- @Table: Entity Class์ ๋งคํํ ํ ์ด๋ธ ์ ๋ณด๋ฅผ ์๋ ค์ค๋๋ค. @Table(name = "USER")์ ๊ฐ์ ํํ๋ก ์ฌ์ฉ๋๋ฉฐ, Annotation์ ์๋ตํ๋ฉด Class ์ด๋ฆ์ ํ ์ด๋ธ ์ด๋ฆ ์ ๋ณด๋ก ๋งคํํฉ๋๋ค.
- @Id: ํด๋น ํ ์ด๋ธ์ PK ํ๋๋ฅผ ๋ํ๋ ๋๋ค.
- @GeneratedValue: PK์ ์์ฑ ๊ท์น์ ๋ํ๋ ๋๋ค. ๊ฐ๋ฅํ Entity์ PK๋ Long ํ์ ์ Auto_increment๋ฅผ ์ถ์ฒํ๋ฉฐ, ์คํ๋ง ๋ถํธ 2.0์์ ์ต์ ์ ์ถ๊ฐํด์ผ auto_increment์ด ๊ฐ๋ฅํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ AUTO๋ก, MySQL์ auto_increment์ ๊ฐ์ด ์๋ ์ฆ๊ฐํ๋ ์ ์ํ ๊ฐ์ด ๋ฉใด๋ใ .
- @Column: ํ ์ด๋ธ์ ์ปฌ๋ผ์ ๋ํ๋ด๋ฉฐ, ๊ตณ์ด ์ ์ธํ์ง ์๋๋ผ๋ ํด๋น Class์ ํ๋๋ ๋ชจ๋ ์ปฌ๋ผ์ด ๋ฉ๋๋ค. @Column์ ์๋ตํ๋ฉด ํ๋๋ช ์ ์ฌ์ฉํด์ ์ปฌ๋ผ๋ช ๊ณผ ๋งคํํฉ๋๋ค.