@ManyToOne

์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ๊ธฐ๋ณธ - ๋‹ค๋Œ€์ผ ๊ด€๊ณ„

Reference

๊น€์˜ํ•œ - ์ฑ… : ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊น€์˜ํ•œ - ์ธํ”„๋Ÿฐ ๊ฐ•์˜ : ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์—ฐ๊ด€๊ด€๊ณ„์˜ ๊ธฐ์ดˆ

์ฒ˜์Œ๋ถ€ํ„ฐ ์งš๊ณ  ๊ธฐ์–ตํ•ด์•ผํ•  ๊ฐœ๋…์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ…Œ์ด๋ธ”๊ฐ„์˜ ๊ด€๊ณ„๋Š” ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„์ด์ง€๋งŒ ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋Š” ๋‹จ๋ฐฉํ–ฅ ๊ด€๊ณ„๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ์ฒด๋ผ๋ฆฌ ์„œ๋กœ ์˜์กด์„ฑ์„ ๊ฐ€์ ธ์„œ ๊ฐ์ฒด ๊ฐ„์˜ ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„๋„ ์กด์žฌํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ์—„๋ฐ€ํžˆ ๋”ฐ์ง€๋ฉด ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„์ด๊ธฐ ์ด์ „์— ๋‘ ๊ฐœ์˜ ๋‹จ๋ฐฉํ–ฅ ๊ด€๊ณ„๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

ํ…Œ์ด๋ธ”๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„์ธ ์ด์œ ๋Š” ์™ธ๋ž˜ํ‚ค ํ•˜๋‚˜๋งŒ ์žˆ์œผ๋ฉด ์กฐ์ธ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋‹จ๋ฐฉํ–ฅ ๋‹ค๋Œ€์ผ(N to 1) ๊ด€๊ณ„

์—ฌ๋Ÿฌ ๊ด€๊ณ„ ์ค‘์— ์ œ์ผ ๋จผ์ € ์•Œ์•„์•ผ ํ•  ๊ด€๊ณ„์ธ ๋‹ค๋Œ€์ผ ๊ด€๊ณ„๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋‹ค๋Œ€์ผ ๊ด€๊ณ„๋ฅผ ๋งํ•œ๋‹ค.

20210823relation1

์œ„๋Š” ํด๋ž˜์Šค ๋ ˆ๋ฒจ์˜ ๋‹จ๋ฐฉํ–ฅ ๊ด€๊ณ„๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

20210823relation2

์œ„๋Š” ์ธ์Šคํ„ด์Šค ๋ ˆ๋ฒจ์˜ ๋‹จ๋ฐฉํ–ฅ ๋‹ค๋Œ€์ผ ๊ด€๊ณ„๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ์—ฌ๋Ÿฌ ๋ฉค๋ฒ„๊ฐ€ ํ•˜๋‚˜์˜ ํŒ€์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

jpa๋ฅผ ์‚ฌ์šฉํ•œ Memberํด๋ž˜์Šค์™€ Teamํด๋ž˜์Šค ์ฝ”๋“œ๋ฅผ ์˜ˆ์‹œ๋กœ ๋ณด์ž.

@Entity
public class Member {
    @Id
    @Column(name="MEMBER_ID")
    private String id;

    private String username;

    // ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘
    @ManyToOne
    @JoinColumn(name="TEAM_ID")
    private Team team;

    // ์—ฐ๊ด€๊ด€๊ณ„ ์„ค์ •
    public void setTeam(Team team) {
      this.team = team;
    }
    //Getter, Setter ...
}

@Entity
public class Team {
    @Id
    @Column(name="TEAM_ID")
    private String id;

    private String name;

    //Getter, Setter ...
}

์ด ๋‹ค๋Œ€์ผ ๊ด€๊ณ„์—์„œ ์ฃผ๋ชฉํ•  ์ ์€ @ManyToOne, @JoinColumn(name="TEAM_ID") ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.

@ManyToOne์€ ๋‹ค๋Œ€์ผ ๊ด€๊ณ„๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋งคํ•‘ํ•  ๋•Œ ํ•„์ˆ˜์ ์œผ๋กœ ํ•„์š”ํ•œ ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘์ด๋ผ ํ•จ์€ RDBMS์˜ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ, ๊ฐ์ฒด ์ง€ํ–ฅ์  ์ฝ”๋“œ์— ๋งคํ•‘ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. (์•„๋ž˜ ๋‹ค์ด์–ด๊ทธ๋žจ ์ฐธ๊ณ ) ์ด๋กœ ์ธํ•ด, ํ…Œ์ด๋ธ”์€ ํ…Œ์ด๋ธ”๋Œ€๋กœ ๊ตฌ์„ฑ๊ฐ€๋Šฅํ•˜๊ณ , ๊ฐ์ฒด๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜ ์žˆ๋‹ค. @JoinColumn์€ ์™ธ๋ž˜ํ‚ค๋ฅผ ๋งคํ•‘ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” name="TEAM_ID"์ด๋ฏ€๋กœ Memberํ…Œ์ด๋ธ”์˜ TEAM_ID๊ฐ€ ์™ธ๋ž˜ํ‚ค๊ฐ€ ๋˜๊ฒ ๋‹ค.

20210824relation1

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ…Œ์ด๋ธ”์˜ ๊ฐ„์˜ ๊ด€๊ณ„์—์„œ, Memberํ…Œ์ด๋ธ”์˜ TEAM_ID์ปฌ๋Ÿผ์—๋Š” TEAMํ…Œ์ด๋ธ”์˜ TEAM_ID๋งŒ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜์ง€๋งŒ, ๊ฐ์ฒด ๊ด€๊ณ„์—์„œ Member์ธ์Šคํ„ด์Šค์—๋Š” Team์ธ์Šคํ„ด์Šค๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ Member์ธ์Šคํ„ด์Šค์—์„œ getTeam์„ ํ•ด์ฃผ๋ฉด ์—ฐ๊ด€๊ด€๊ณ„์— ์žˆ๋Š” team์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ์žฅ๋ฉด์—์„œ ์ฃผ๋ชฉํ•ด์•ผํ•  ์ ์€ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ์„ค๊ณ„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์—ฐ๊ด€๊ด€๊ณ„์— ์žˆ๋Š” ํ…Œ์ด๋ธ”์ด ํ•„์š”ํ•  ๋•Œ Member์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  Member์ธ์Šคํ„ด์Šค์˜ TEAM_ID(์™ธ๋ž˜ํ‚ค)๋ฅผ ์‚ฌ์šฉํ•ด์„œ 2์ฐจ์ ์œผ๋กœ sql์„ ์“ธ ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ƒฅ ๊ฐ์ฒด์—์„œ team์„ ์ฐธ์กฐํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

Team team1 = new Team("team1","ํŒ€1");
em.persist(team1);

Member member1 = new Member("member1", "ํšŒ์›1");
member1.setTeam(team1); // ์—ฐ๊ด€๊ด€๊ณ„ ์„ค์ • member1 -> team1
em.persist(member1);

Member member2 = new Member("member2", "ํšŒ์›2");
member2.setTeam(team1); // ์—ฐ๊ด€๊ด€๊ณ„ ์„ค์ • member2 -> team1
em.persist(member2);

Member member = em.find(Member.class, "member1");
Team team = member.getTeam();

em.persist()๋Š” ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์˜์†์„ฑ ์ฝ˜ํ…์ŠคํŠธ์— ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ค. ์œ„ ์ฝ”๋“œ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ member1์˜ ์—ฐ๊ด€๊ด€๊ณ„์— ์žˆ๋Š” team์„ ์ฐธ์กฐํ•˜๋Š” ๋ชจ์Šต์„ ๋ณด์—ฌ์ค€๋‹ค.

์ด ์‚ฌ์‹ค์ด ๋ณ„ ๊ฒƒ ์•„๋‹Œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ nodejs์—์„œ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ sql๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์กฐ์ธํ•˜๊ฑฐ๋‚˜, sql์„ ํ•œ ๋ฒˆ ์ž‘์„ฑํ•ด์„œ ๋ถˆ๋Ÿฌ์˜จ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค๋ฅธ ์—ฐ๊ด€๊ด€๊ณ„์— ์žˆ๋Š” ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด์„œ 2์ฐจ์ ์œผ๋กœ ๋‹ค์‹œ sql๋ฅผ ์จ์•ผ ํ–ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— sql๋ฌธ์ด ์ฝ”๋“œ ์ „์ฒด์— ๋งŒ์—ฐํ•  ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๋‹ค.

๋‹ค๋Œ€์ผ์€ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘์˜ ๊ธฐ์ดˆ๊ฐ€ ๋œ๋‹ค. ๋ฐ˜๋“œ์‹œ ์ˆ™์ง€ํ•ด์•ผํ•  ๊ฐœ๋…์ด๋‹ค.

์–‘๋ฐฉํ–ฅ ๋‹ค๋Œ€์ผ(N to 1) ๊ด€๊ณ„

๋‹จ๋ฐฉํ–ฅ ๋‹ค๋Œ€์ผ ๊ด€๊ณ„์—์„œ๋Š” ๊ฐ์ฒด ๊ด€์ ์œผ๋กœ ๋ฐ”๋ผ๋ดค์„ ๋•Œ '๋‹ค'์ชฝ์—์„œ '์ผ'์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  '์ผ'์ชฝ์—์„œ๋Š” '๋‹ค'๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–‘๋ฐฉํ–ฅ ๋‹ค๋Œ€์ผ ๊ด€๊ณ„์—์„œ๋Š” ๊ฐ์ฒด ๊ด€์ ์—์„œ '์ผ'์ชฝ์—์„œ '๋‹ค'๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ณ  ๊ทธ ๋ฐ˜๋Œ€๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ณด์ž.

@Entity
public class Member {
    @Id
    @Column(name="MEMBER_ID")
    private String id;

    private String username;

    // ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘
    @ManyToOne
    @JoinColumn(name="TEAM_ID")
    private Team team;

    // ์—ฐ๊ด€๊ด€๊ณ„ ์„ค์ •
    public void setTeam(Team team) {
      this.team = team;
    }
    //Getter, Setter ...
}

@Entity
public class Team {
    @Id
    @Column(name="TEAM_ID")
    private String id;

    private String name;

    @OneToMany(mappedBy="team")
    private List<Member> members = new ArrayList<Member>();

    //Getter, Setter ...
}

๋‹จ๋ฐฉํ–ฅ ๋‹ค๋Œ€์ผ ๊ด€๊ณ„์™€ ๋‹ฌ๋ผ์ง„ ์ฝ”๋“œ๋Š” Team์—”ํ‹ฐํ‹ฐ์— '๋‹ค'์ชฝ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ํ•„๋“œ๊ฐ€ ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ํ•จ๊ป˜ ์ถ”๊ฐ€๋œ ๊ฒƒ์ด๋‹ค.

๋‹น์—ฐํ•˜์ง€๋งŒ Member์—”ํ‹ฐํ‹ฐ์—์„œ ์ฐธ์กฐํ•  ๊ฐ์ฒด์— ๋Œ€ํ•ด @ManyToOne ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ–ˆ์œผ๋ฏ€๋กœ, Team์—”ํ‹ฐํ‹ฐ๋Š” ์ฐธ์กฐํ•  ๊ฐ์ฒด์— ๋Œ€ํ•ด @OneToMany๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. @OneToMany์˜ mappedBy๋Š” ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„์—์„œ ๋งคํ•‘์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๋ฐ˜๋Œ€์ชฝ ์—”ํ‹ฐํ‹ฐ์˜ ์ฐธ์กฐ ํ•„๋“œ ์ด๋ฆ„์„ ๊ฐ’์œผ๋กœ ์ฃผ๋ฉด ๋œ๋‹ค. mappedBy๋Š” ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์„ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์ด๋ž€ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ…Œ์ด๋ธ”์— ์™ธ๋ž˜ ํ‚ค๊ฐ€ ์žˆ๋Š” ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋งํ•œ๋‹ค.

์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์„ ์ •ํ•˜๋Š” ์ด์œ ๋Š”, ๊ฐ์ฒด๋ ˆ๋ฒจ์—์„œ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋Š” ๋‘˜์ด์–ด๋„, ์™ธ๋ž˜ ํ‚ค๋Š” ํ•˜๋‚˜์ด๊ธฐ ๋•Œ๋ฌธ์—, ์–ด๋–ค ๊ด€๊ณ„๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์™ธ๋ž˜ ํ‚ค๋ฅผ ๊ด€๋ฆฌํ•ด์•ผํ• ์ง€ ์•Œ๋ ค์ค„ ํ•„์š”๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. jpa์—์„œ๋Š” ์ด๋ฅผ ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์ด๋ผ๋Š” ๊ฐœ๋…์„ ๋งŒ๋“ค์–ด ํ•œ ์ชฝ ์—”ํ‹ฐํ‹ฐ์—์„œ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ํ‚ค๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

์˜ˆ์‹œ๋กœ ๋‹ค๋Œ€์ผ ๊ด€๊ณ„์—์„œ๋Š” ํ•ญ์ƒ '๋‹ค'์ชฝ์— ์™ธ๋ž˜ ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ '๋‹ค'๊ฐ€ ํ•ญ์ƒ ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์ด ๋  ๊ฒƒ์ด๋‹ค.

20210825relation1

์œ„๋Š” ๊ฐ์ฒด๋ ˆ๋ฒจ์˜ ๋‹ค๋Œ€์ผ ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„๋Š” ์ฃผ์˜ํ•ด์•ผํ•  ์ ์ด ์žˆ๋‹ค.

๊ฐ์ฒด์˜ ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„๋Š” ์–‘์ชฝ ๋ชจ๋‘ ๊ด€๊ณ„๋ฅผ ๋งบ๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค.

๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๋ฉด ์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋‹ค๋Œ€์ผ ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ๋ฉด @ManyToOne์„ '๋‹ค'์— @OneToMany๋ฅผ '์ผ'์— ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ค. ์ด ์–ด๋…ธํ…Œ์ด์…˜์„ ์–ด๋А ํ•œ ์ชฝ์—์„œ ์ƒ๋žตํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ด ๊ด€๊ณ„๋ฅผ ์œ„ํ•ด์„œ ์—ฐ๊ด€๊ด€๊ณ„ ํŽธ์˜ ๋ฉ”์†Œ๋“œ๋ผ๋Š” ๊ฒƒ์ด ์กด์žฌํ•œ๋‹ค.

public class Member {

    private Team team;

    public void setTeam(Team team) {
        this.team = team;
        team.getMembers().add(this);
    }

    //...
}

์œ„ ์ฝ”๋“œ๋Š” member์—์„œ team์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ setํ•  ๋•Œ team์—๋„ ์ฐธ์กฐ ๊ด€๊ณ„๋ฅผ ์ ์šฉํ•ด์ค€ ๊ฒƒ์ด๋‹ค. ์ฆ‰ ๋ฉ”์†Œ๋“œ ํ•˜๋‚˜๋กœ ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•ด์ค€ ๊ฒƒ์ด๋‹ค.

public class Member {

    private Team team;

    public void setTeam(Team team) {
        if(this.team != null){
            this.team.getMembers().remove(this);
        }
        this.team = team;
        team.getMembers().add(this);
    }

    //...
}
  

๋˜ํ•œ, ์œ„ ์ฝ”๋“œ๋Š” team์— ๋Œ€ํ•ด null์ฒดํฌ๋ฅผ ์ง„ํ–‰ํ•ด ํ˜„์žฌ ์ฐธ์กฐ๋œ team์ด ์—†๋‹ค๋ฉด ๊ธฐ์กด ๋กœ์ง๊ณผ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•˜์ง€๋งŒ, ์ฐธ์กฐ๋œ team์ด ์žˆ๋‹ค๋ฉด list์—์„œ remove๋ฅผ ํ•ด์„œ ๊ณผ๊ฑฐ์˜ ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„๋ฅผ ๋Š์–ด์ค€๋‹ค. ์–‘๋ฐฉํ–ฅ ๋‹ค๋Œ€์ผ ๊ด€๊ณ„์—์„œ '๋‹ค'์ชฝ์€ ๊ด€๊ณ„๊ฐ€ ๋ฐ”๋€Œ์—ˆ์–ด๋„ ๊ณผ๊ฑฐ์˜ '์ผ'์€ ๊ด€๊ณ„๊ฐ€ ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋˜ํ•œ ์—ฐ๊ด€๊ด€๊ณ„ ํŽธ์˜ ๋ฉ”์†Œ๋“œ๋Š” ๋‹ค๋Œ€์ผ์—์„œ '๋‹ค'์ชฝ์ด๋“  '์ผ'์ชฝ์ด๋“  ํ•œ ๊ณณ์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์„ค๊ณ„์ƒ ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค.

์ •๋ฆฌ

๋‹จ๋ฐฉํ–ฅ ๋งคํ•‘๋งŒ์œผ๋กœ ํ…Œ์ด๋ธ”๊ณผ ๊ฐ์ฒด์˜ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘์€ ์ด๋ฏธ ์™„๋ฃŒ๋˜์—ˆ๋‹ค!

๋‹จ๋ฐฉํ–ฅ์„ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋งŒ๋“ค๋ฉด ๋ฐ˜๋Œ€๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋œ๋‹ค!

์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ฐ์ฒด์˜ ์–‘์ชฝ ๋ฐฉํ–ฅ์„ ๋ชจ๋‘ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค!

๋”ฐ๋ผ์„œ ๋‹จ๋ฐฉํ–ฅ ๋งคํ•‘์„ ๋จผ์ € ์‚ฌ์šฉํ•ด๋ณด๊ณ , ๋ฐ˜๋Œ€๋ฐฉํ–ฅ์˜ ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์ด ํ•„์š”ํ•˜๋‹ค ์‹ถ์œผ๋ฉด ์–‘๋ฐฉํ–ฅ ๋งคํ•‘์„ ์‚ฌ์šฉํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

Last updated