[๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ปTA9 ์ธํ„ด 5์ผ์ฐจ]MVCํŒจํ„ด

Goofiยท2023๋…„ 7์›” 21์ผ
0

MVCํŒจํ„ด

๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜์ธ MVCํŒจํ„ด์€ Model, View, Controller์˜ ์ค„์ž„๋ง๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•  ๋•Œ ๊ทธ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์„ธ๊ฐ€์ง€์˜ ์—ญํ• ๋กœ ๊ตฌ๋ถ„ํ•œ ํŒจํ„ด์„ ์˜๋ฏธ

  • MVCํŒจํ„ด์€ ํšจ์œจ์ ์ธ ์œ ์ง€ ๋ณด์ˆ˜๋ฅผ ์œ„ํ•ด ๋ทฐ์™€ ๋ชจ๋ธ(๋„๋ฉ”์ธ)์˜ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋””์ž์ธํŒจํ„ด์ด๋‹ค.
  • ์ •ํ•ด์ง„ ๊ทœ์น™์ด๋‚˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์€ ์—†๋‹ค.
  • ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋ถ€ํ„ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์„œ๋กœ ์˜ํ–ฅ ์—†์ด ์‰ฝ๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ๋Š” ์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅ

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด

MVC ํŒจํ„ด์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ์ •๋‹ต์„ ์ฐพ์œผ๋ ค๊ธฐ๋ณด๋‹ค, ๊ทธ ์ž์ฒด๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

Spring Boot์˜ MVCํŒจํ„ด

1. Model(๋„๋ฉ”์ธ)

  • ๋„๋ฉ”์ธ ๋ชจ๋ธ ๊ฐ์ฒด(Entity, POJO)๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ์ด ํŒจํ‚ค์ง€๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉ, ๋น„์ฆˆ๋‹ˆ์Šค ๋…ผ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ๊ฒ€์ƒ‰ ๋ฐ ์กฐ์ž‘ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ํฌํ•จํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๋™์„ ์œ„ํ•œ DAOํŒจํ‚ค์ง€์™€ ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” DOํŒจํ‚ค์ง€๋กœ ๊ตฌ์„ฑ๋จ
    โ—๏ธ๋‹จ, ๊ผญ ํฌํ•จ์‹œ์ผœ์•ผ ํ•˜๋Š”๊ฒŒ ์ •๋‹ต์€ ์•„๋‹ˆ๋‹ค. ์ •ํ•ด์ ธ ์žˆ๋Š”๊ฑด ์—†๋‹ค.

ex) ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ํ‚ค์›Œ๋“œ๊ฐ€ ๋„˜์–ด์˜ค๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ด€๋ จ๋œ ์ƒํ’ˆ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ๋ทฐ์— ์ „๋‹ฌ

model ๋˜๋Š” domain ํŒจํ‚ค์ง€์— ์œ„์น˜

2. View

  • ๋ทฐ๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค (UI)๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ์ด ๋””๋ ‰ํ† ๋ฆฌ๋Š” HTML, Thymeleaf, JSP ๋“ฑ๊ณผ ๊ฐ™์€ ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์„ ํฌํ•จํ•˜๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์›น ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

ex) ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ์—์„œ ๊ฒฐ๊ณผ ์ƒํ’ˆ ๋ฆฌ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š”๋‹ค.

view ๋˜๋Š” templates ํŒจํ‚ค์ง€์— ์œ„์น˜

3. Controller

  • ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • ์ด ํŒจํ‚ค์ง€์—๋Š” ์š”์ฒญ ๋งคํ•‘, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ํ˜ธ์ถœ ๋ฐ ๋ทฐ ํ…œํ”Œ๋ฆฟ ์„ ํƒ์„ ๋‹ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค.

ex) ์‡ผํ•‘๋ชฐ์—์„œ ์ƒํ’ˆ์„ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๊ทธ ํ‚ค์›Œ๋“œ๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฐ›์•„ ๋ชจ๋ธ๊ณผ ๋ทฐ์— ์ ์ ˆํ•˜๊ฒŒ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ „๋‹ฌํ•œ๋‹ค.

controller ํŒจํ‚ค์ง€์— ์œ„์น˜

4. DTO (Data Transfer Object)

  • DTO๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์œ„ํ•œ ๊ฐ์ฒด๋กœ, ์ฃผ๋กœ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
  • DTO๋Š” ๋ชจ๋ธ๊ณผ ์ปจํŠธ๋กค๋Ÿฌ ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

dto ํŒจํ‚ค์ง€์— ์œ„์น˜

5. DAO (Data Access Object)

  • DAO๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉ์„ ์ถ”์ƒํ™”ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
    Spring Boot์—์„œ๋Š” JPA (Java Persistence API) ๋˜๋Š” Spring Data๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

repository ๋˜๋Š” dao ํŒจํ‚ค์ง€์— ์œ„์น˜

Model๊ณผ DTO๋Š” ๊ฐ™์€๊ฐ€?

์ •๋‹ต์€ ์—†๋‹ค.
๋‘ ๊ฐœ๋…์€ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๊ณ , ํŠนํžˆ ๋ฐ์ดํ„ฐ ์ „์†ก์— ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋ธ ํด๋ž˜์Šค๊ฐ€ DTO๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ DTO๋Š” ์ฃผ๋กœ ๋ฐ์ดํ„ฐ์˜ ์ „์†ก ๋ฐ ๊ตํ™˜์„ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ ์ „์†ก๊ณผ ๊ด€๋ จ๋œ ์—ญํ• ์„ ์ค‘์ ์œผ๋กœ ํ•œ๋‹ค. ๋ชจ๋ธ์€ ๋” ๋„“์€ ์˜๋ฏธ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‚˜ํƒ€๋‚ด๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

Model ์˜ˆ์‹œ ์ฝ”๋“œ

public class User {
    private Long id;
    private String username;
    private String email;

    // ์ƒ์„ฑ์ž, getter, setter ์ƒ๋žต

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

DTO ์˜ˆ์‹œ ์ฝ”๋“œ

public class UserDTO {
    private String username;
    private String email;

    // ์ƒ์„ฑ์ž, getter, setter ์ƒ๋žต

    @Override
    public String toString() {
        return "UserDTO{" +
                "username='" + username + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

์œ„์˜ ์ฝ”๋“œ๋Š” UserDTO(Data Transfer Object)๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. UserDTO ํด๋ž˜์Šค๋Š” ์‚ฌ์šฉ์ž์˜ ์‚ฌ์šฉ์ž๋ช…(username)๊ณผ ์ด๋ฉ”์ผ(email)์„ ์ €์žฅํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ํ•„๋“œ์™€ ํ•ด๋‹น ํ•„๋“œ์— ์ ‘๊ทผํ•˜๋Š” getter์™€ setter ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. UserDTO๋Š” ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ทฐ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

User ๋ชจ๋ธ์€ ์ฃผ๋กœ ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UserDTO๋Š” ์ฃผ๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์„ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด Model๊ณผ DTO์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜์‹ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

์–ด๋–ค ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ์ปจํ…์ŠคํŠธ์™€ ๊ด€ํ–‰์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋ธ์€ ๋” ๋„“์€ ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, DTO๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก๊ณผ ๊ด€๋ จ๋œ ์—ญํ• ์„ ๊ฐ•์กฐํ•˜๋Š” ์šฉ์–ด์ž…๋‹ˆ๋‹ค.

DTO์™€ DO๋Š” ๊ฐ™์€๊ฐ€?

DTO์™€ DO ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ํ•˜์ง€๋งŒ...

  • DTO๋Š” ์ฃผ๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์„ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  • DO๋Š” ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉ์„ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์šฉ์–ด์ด๋‹ค.

๊ฒฐ๋ก 

ํ”„๋กœ์ ํŠธ ๋ฐ ํŒ€์˜ ๋ฌธ๋งฅ์— ๋”ฐ๋ผ ์ •ํ™•ํ•œ ์˜๋ฏธ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๊ด€ํ–‰ ๋ฐ ๋ฌธ์„œ์—์„œ ๋ช…ํ™•ํ•œ ์ •์˜๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

profile
์˜ค๋Š˜๋ณด๋‹จ ๋‚ด์ผ์ด ๊ฐ•ํ•œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค!!๐Ÿง‘๐Ÿปโ€๐Ÿ’ป

0๊ฐœ์˜ ๋Œ“๊ธ€