๐ŸŒป JAVA/์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ

9-3) ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜

2020. 11. 25. 16:49
๋ชฉ์ฐจ
  1.  
  2. ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜ (์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋จ X, ์—”ํ‹ฐํ‹ฐ๋กœ ์Šน๊ฒฉ์‹œ์ผœ์„œ ์‚ฌ์šฉ O)
  3. ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์˜ ์ œ์•ฝ ์‚ฌํ•ญ
  4. ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์˜ ๋Œ€์•ˆ (์‹ค๋ฌด์—์„œ๋Š” ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.)
  5. ๊ทธ๋Ÿฌ๋ฉด ์–ธ์ œ ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?
๋ฐ˜์‘ํ˜•

 

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ

JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‹ค๋ฌด์—์„œ ์ž์‹ ์žˆ๊ฒŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธ‰ ์›น ๊ฐœ๋ฐœ ํ”„๋กœ๊ทธ๏ฟฝ

www.inflearn.com


 

๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜ (์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋จ X, ์—”ํ‹ฐํ‹ฐ๋กœ ์Šน๊ฒฉ์‹œ์ผœ์„œ ์‚ฌ์šฉ O)

@Entity
public class Member {
	..
    
    @ElementCollection
    @CollectionoTable(name = "FAVORITE_FOOD", joinColumn = 
    @JoinColumn(name = "MEMBER_ID"))
    private Set<String> favoriteFoods = new HashSet<>();

	@ElementCollection
    @CollectionTable(name = "ADDRESS", joinColumn =
    @JoinColumn(name = "MEMBER_ID"))
	private List<Address> addressList = new ArrayList<>();
    
    ..
}

 

  • ๊ฐ’ ํƒ€์ž…์„ ํ•˜๋‚˜ ์ด์ƒ ์ €์žฅํ•  ๋•Œ Set, List๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • PK๋ฅผ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ’ ํƒ€์ž…์ด ์•„๋‹ˆ๊ณ , ์—”ํ‹ฐํ‹ฐ ๊ฐœ๋…์ด ๋˜๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’ ํƒ€์ž…์„ ๋ฌถ์–ด์„œ PK๋กœ ์„ค์ •ํ•œ๋‹ค.
  • @ElementCollection (๊ฐ’ ํƒ€์ž…์ด ์ปฌ๋ ‰์…˜์ด๋ผ๊ณ  ๋ช…์‹œ), @CollectionTable(์ปฌ๋ ‰์…˜ ํ…Œ์ด๋ธ” ์ด๋ฆ„, ์กฐ์ธ ์„ค์ •) ์‚ฌ์šฉํ•œ๋‹ค.
    • ๊ฐ’ ํƒ€์ž…์ด ํ•˜๋‚˜์ผ ๋•, Memberํด๋ž˜์Šค์— ํ•„๋“œ ์†์„ฑ์œผ๋กœ ๋„ฃ์œผ๋ฉด ๋˜์ง€๋งŒ, DB ๋‚ด๋ถ€์— ์ปฌ๋ ‰์…˜์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ด์„œ ๋งคํ•‘(@CollectionTable) ์‹œ์ผœ์ค˜์•ผํ•œ๋‹ค.
  • ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์€ Member ํ…Œ์ด๋ธ”์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— Member์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๋”ฐ๋ผ๊ฐ„๋‹ค.
    • em.persist(member)๋ฅผ ํ•ด์ฃผ๋ฉด ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜๋“ค๋„ ํ•จ๊ป˜ persist๊ฐ€ ๋œ๋‹ค.
      • ์ด๊ฒƒ์€ cascadeType.ALL + orphanRemoval = true์™€ ๊ฐ™๋‹ค. (๊ฐ’ ํƒ€์ž…์€ ์ด ๊ธฐ๋Šฅ์„ ํ•ญ์ƒ ํ•„์ˆ˜๋กœ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.)
  • ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์—ฐ ์ „๋žต(fetch = FetchType.LAZY)์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์˜ ์ œ์•ฝ ์‚ฌํ•ญ

  • ๊ฐ’ ํƒ€์ž…์€ ์‹๋ณ„์ž ๊ฐœ๋…์ด ์—†๋‹ค. ( ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ์ ! )
  • ์‹๋ณ„์ž๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ๋•Œ ์ถ”์ ์„ ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.
  • ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๋ฉด , ์ฃผ์ธ ์—”ํ‹ฐํ‹ฐ์™€ ์—ฐ๊ด€๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ณ , ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์— ์žˆ๋Š” ํ˜„์žฌ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ €์žฅํ•œ๋‹ค.

 

๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์˜ ๋Œ€์•ˆ (์‹ค๋ฌด์—์„œ๋Š” ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.)

  • ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์„ ์—”ํ‹ฐํ‹ฐ๋กœ ์Šน๊ฒฉ ์‹œํ‚จ๋‹ค.
    • ๊ธฐ์กด์˜ ๊ฐ’ํƒ€์ž… ์ปฌ๋ ‰์…˜์€ ์–‘๋ฐฉํ–ฅ์„ ์„ค๊ณ„ ํ•  ์ˆ˜ ์—†์—ˆ๋Š”๋ฐ, ์—”ํ‹ฐํ‹ฐ๋กœ ์Šน๊ฒฉํ•จ์œผ๋กœ์จ ์–‘๋ฐฉํ–ฅ ๋งคํ•‘์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.
    • ์‹๋ณ„์ž ๊ฐœ๋…์ด ์ถ”๊ฐ€ ๋˜๋ฉด์„œ, ๊ฐ’์„ ์ถ”์  ํ•  ์ˆ˜ ์—†์—ˆ๋˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ์ด ๋˜์—ˆ๋‹ค.

 

๋จผ์ € ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์„ ์œ„ํ•œ ๋ณ„๋„์˜ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

/**
 * ๊ฐ’ ํƒ€์ž… -> ์—”ํ‹ฐํ‹ฐ๋กœ ์Šน๊ฒฉ
 *
 * ID๊ฐ€ ์žˆ์–ด์„œ ์‹๋ณ„์ž๊ฐ€ ์ƒ๊ฒจ์„œ ์ด์ œ ๋งˆ์Œ๊ป ์ˆ˜์ •ํ•˜๊ณ  ์‚ญ์ œํ•  ์ˆ˜์žˆ๋‹ค.
 * ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜ ๋Œ€์‹ ์— ์ผ๋Œ€๋‹ค ๊ด€๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ œ์ผ ๋ง˜ ํŽธํ•˜๋‹ค.
 * ์ผ๋Œ€๋‹ค ๊ด€๊ณ„๋ฅผ ์œ„ํ•œ ์—”ํ‹ฐํ‹ฐ -> AddressEntity ๋ฅผ ๋งŒ๋“ค๊ณ 
 * ์—ฌ๊ธฐ์„œ private Address address; -> ๊ฐ’ ํƒ€์ž…์„ ์‚ฌ์šฉํ•œ๋‹ค.
 * ์˜์†์„ฑ ์ „์ด(Cascade.ALL) + orphanRemoval ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’ํƒ€์ž… ์ปฌ๋ ‰์…˜ ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•ด๋ผ
 */
@Entity
@Table(name = "ADDRESS")
public class AddressEntity {

    @Id
    @GeneratedValue
    private Long id; // ID ์‹๋ณ„์ž ์ƒ๊น€!!!!

	@Embedded // ์‚ฌ์‹ค @Embeddable ๋‘˜ ์ค‘์— ํ•˜๋‚˜๋งŒ ์“ฐ๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ƒ๋žต ํ•ด๋„ ๋œ๋‹ค. (๊ทธ์น˜๋งŒ ๋‘˜ ๋‹ค ์“ฐ๋Š”๊ฑธ ๊ถŒ์žฅํ•จ)
    private Address address; // ์—ฌ๊ธฐ์„œ ๊ฐ’ ํƒ€์ž…์„ ์‚ฌ์šฉํ•œ๋‹ค.

    public AddressEntity() {
    }

    // ์ด๋Ÿฐ์‹์œผ๋กœ ๊ฐ’ ํƒ€์ž…์— ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•ด์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด ๋„ฃ์–ด์ค€๋‹ค.
    public AddressEntity(String city, String street, String zipcode) {
        this.address = new Address(city, street, zipcode);
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }
}

 

๊ทธ๋ฆฌ๊ณ  Member์—์„œ ๊ฐ’ ํƒ€์ž…์„ ๋งคํ•‘ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ์—”ํ‹ฐํ‹ฐ๋กœ ๋งคํ•‘์„ ํ•ด์ค€๋‹ค.

@Entity
public class Member {

	..
    
    //@ElementCollection
    //@CollectionTable(name = "ADDRESS", joinColumns =
    //@JoinColumn(name = "MEMBER_ID"))
    //private List<Address> addressHistory = new ArrayList<>();
    
    @OneToMany(cascade = CascadeType.ALL , orphanRemoval = true)
    @JoinColumn(name = "MEMBER_ID")
    private List<AddressEntity> addressHistory = new ArrayList<>();
    
}

 

Address ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์— ๊ฐ’์„ ๋„ฃ์„ ๋•Œ๋Š” ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋œ๋‹ค.

<< Main.java >>

Member member = new Member();
member.getAddressHistory().add(new AddressEntity("city", "street", "zipcode"));

--------------------------------------------------------------------------------
<< Member.java >>

@OneToMany(cascade = ALL, orphanRemoval = true)
@JoinColumn(name = "MEMBER_ID")
private List<AddressEntity> addressHistory = new ArrayList<>();

--------------------------------------------------------------------------------
<< AddressEntity >>

private Address address;

public AddressEntity(String city, String street, String zipcode){
	this.address = new Address(city, street, zipcode);
}

List์— ์ €์žฅํ•˜๋ฉด -> member List์— ์ €์žฅ๋˜๊ณ , AddressEntity์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ String๋“ค์„ Address์ƒ์„ฑ์ž์—๊ฒŒ ๋„˜๊ฒจ์ฃผ๊ณ  address ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒ ๋œ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์–ธ์ œ ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?

์ •๋ง~ ๋‹จ์ˆœํ•œ select Box์— [ ( ) ์น˜ํ‚จ ,  ( ) ํ”ผ์ž ] ์ด๋Ÿฐ์‹์œผ๋กœ ์ค‘๋ณตํ•ด์„œ ์„ ํƒ ํ•  ์ˆ˜ ์žˆ๋Š” ์ฒดํฌ ๋ฐ•์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ํ• ๋•Œ, ์ด๋Ÿด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฑฐ๋‹ค 

์ด๋ ‡๊ฒŒ ์ง„์งœ ๋‹จ์ˆœํ•œ ๊ฒฝ์šฐ, ๊ฐ’์„ ์ถ”์  ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ๋Š” ์›ฌ๋งŒํ•˜๋ฉด ์—”ํ‹ฐํ‹ฐ๋‹ค.

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
  1.  
  2. ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜ (์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋จ X, ์—”ํ‹ฐํ‹ฐ๋กœ ์Šน๊ฒฉ์‹œ์ผœ์„œ ์‚ฌ์šฉ O)
  3. ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์˜ ์ œ์•ฝ ์‚ฌํ•ญ
  4. ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์˜ ๋Œ€์•ˆ (์‹ค๋ฌด์—์„œ๋Š” ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.)
  5. ๊ทธ๋Ÿฌ๋ฉด ์–ธ์ œ ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?
'๐ŸŒป JAVA/์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • 10-3) JPQL - ์ค‘๊ธ‰ ๋ฌธ๋ฒ•
  • 10-2) JPQL - ๊ธฐ๋ณธ ๋ฌธ๋ฒ•๊ณผ ๊ธฐ๋Šฅ
  • 9-1) ๊ฐ’ ํƒ€์ž… - ์ž„๋ฒ ๋””๋“œ ํƒ€์ž…(Embedded Type)
  • 8-3) ํ”„๋ก์‹œ์™€ ์—ฐ๊ด€๊ด€๊ณ„ ๊ด€๋ฆฌ - ์˜์†์„ฑ ์ „์ด(CASCADE), orphanremoval(๊ณ ์•„)
iseunghan
iseunghan
๊พธ์ค€ํ•˜๊ฒŒ ์—ด์‹ฌํžˆ..
iseunghan
iseunghan

๊ณต์ง€์‚ฌํ•ญ

  • ์–ด์ œ๋ณด๋‹ค ๋‚˜์€ ์˜ค๋Š˜์ด ๋˜๊ธฐ ์œ„ํ•ด ๐Ÿ”ฅ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (261)
    • ๐Ÿ’ Spring (14)
      • ๊ฐœ๋… ๋ฐ ์ดํ•ด (2)
      • Spring ํ•ต์‹ฌ ๊ธฐ์ˆ  (24)
      • Spring REST API (8)
      • Spring MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  (7)
      • Spring Security (23)
      • Spring in Action (1)
    • ๐ŸŒป JAVA (84)
      • ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ (20)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ (13)
      • ๋””์ž์ธ ํŒจํ„ด (7)
      • ์ •๋ฆฌ์ •๋ฆฌ์ •๋ฆฌ (43)
      • JUnit (1)
    • ๐Ÿ”– Snippets (3)
      • Javascript (3)
    • โš™๏ธ Devops (22)
      • โ› Git (11)
      • ๐Ÿณ Docker (6)
      • ๐Ÿง Linux (3)
      • ๐ŸŒˆ Jenkins (1)
      • ๐Ÿ“ฌ Kafka (1)
    • ๐Ÿ’ฌ ETC.. (4)
      • ๐Ÿ’ป macOS (2)
    • ๐ŸŒง๏ธ ORM (2)
      • JPA (2)
    • ๐Ÿ Python (2)
    • ๐Ÿ“š Databases (15)
      • ์˜ค๋ผํด๋กœ ๋ฐฐ์šฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ๋ก ๊ณผ ์‹ค์Šต(2ํŒ) (3)
      • RealMySQL 8.0 (8)
    • ๐Ÿ”ฅ Computer Science (5)
      • ๐Ÿ“ก ๋„คํŠธ์›Œํฌ (5)
    • ๐Ÿท๏ธ ํ˜‘์—… (1)
    • ๐Ÿ“œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (38)
      • BAEKJOON\์ˆ˜ํ•™ 1, ์ˆ˜ํ•™ 2 (8)
      • BAEKJOON\์žฌ๊ท€ (5)
      • BAEKJOON\๋ธŒ๋ฃจํŠธ ํฌ์Šค (3)
      • BAEKJOON\์ •๋ ฌ (1)
      • BAEKJOON\๋ฐฑํŠธ๋ž˜ํ‚น (5)
      • BAEKJOON\BFS, DFS (6)
      • BAEKJOON\์ด๋ถ„ํƒ์ƒ‰ (1)
      • BAEKJOON\๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (9)
      • BAEKJOON\๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ (0)
    • โœจ ISEUNGHAN (1)

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
๋ฐ˜์‘ํ˜•
hELLO ยท Designed By ์ •์ƒ์šฐ.
iseunghan
9-3) ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.