0926 ~ 1002


# 0926 ~ 1002

# 0926 - HTTPS ๋™์ž‘ ๊ณผ์ •

# HTTPS๋ž€?

image HTTPS๋Š” HyperText Transfer Protocol Secure์˜ ์•ฝ์ž์ด๋ฉฐ HTTP์˜ ๋ณด์•ˆ ๋ฒ„์ „์ด๋‹ค.
HTTPS๋Š” TCP ์œ„์— SSL/TLS ์ธต์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์•”ํ˜ธํ™”, ์ธ์ฆ ๊ทธ๋ฆฌ๊ณ  ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ์„ ํ†ตํ•ด ๋” ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

# [ ๋Œ€์นญํ‚ค ]

์•”ํ˜ธํ™”์— ์“ฐ์ด๋Š” ํ‚ค์™€ ๋ณตํ˜ธํ™”์— ์“ฐ์ด๋Š” ํ‚ค๊ฐ€ ๋™์ผํ•œ ๊ธฐ๋ฒ•
image ๋งŒ์•ฝ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ๋Œ€์นญํ‚ค ๋ฐฉ์‹์œผ๋กœ ํ†ต์‹ ์„ ํ•œ๋‹ค๋ฉด ํด๋ผ์ด์–ธํŠธ๋„ ํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ํ‚ค๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ๋„ ์œ„ํ—˜ํ•˜๋ฉฐ ํด๋ผ์ด์–ธํŠธ์˜ ์†Œ์Šค์ฝ”๋“œ๋Š” ๋ˆ„๊ตฌ๋“ ์ง€ ์—ด์–ด๋ณผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ๋„ ๊ต‰์žฅํžˆ ์œ„ํ—˜ํ•˜๋‹ค.
์ฆ‰, ์›๊ฑฐ๋ฆฌ์—์„œ ๋Œ€์นญํ‚ค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์–ด๋ ต๋‹ค.

# [ ๊ณต๊ฐœํ‚ค(๋น„๋Œ€์นญํ‚ค) ]

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

# [ ์ธ์ฆ์„œ์™€ CA(Certificate authority) ]

SSL์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ธ์ฆ์„œ๋ผ๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค.
์ธ์ฆ์„œ์˜ ๋‚ด์šฉ์€ ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์„œ๋น„์Šค์˜ ์ •๋ณด (CA, ๋„๋ฉ”์ธ ๋“ฑ๋“ฑ)
  2. ์„œ๋ฒ„ ์ธก์˜ ๊ณต๊ฐœํ‚ค (๊ณต๊ฐœํ‚ค์˜ ๋‚ด์šฉ, ๊ณต๊ฐœํ‚ค์˜ ์•”ํ˜ธํ™” ๋ฐฉ์‹)
    ์ด ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•ด์ฃผ๋Š” ๊ธฐ์—…์„ CA๋ผ๊ณ  ํ•œ๋‹ค. ์ธ์ฆ์„œ๊ฐ€ ๋ณด์•ˆ์— ๊ด€๋ จ๋œ ๊ฒƒ์ธ ๋งŒํผ ์ด CA๋Š” ์˜ํ–ฅ๋ ฅ์žˆ๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์—…์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ์˜ ๋ธŒ๋ผ์šฐ์ €๋Š” CA๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. CA๋ชฉ๋ก์— ์žˆ๋Š” ๊ธฐ์—…์„ ๊ณต์ธ๋œ CA๋ผ๊ณ  ํ•˜๋ฉฐ ๋ชฉ๋ก์— ์—†๋Š” ๊ธฐ์—…์„ ์‚ฌ์„ค CA๋ผ๊ณ ํ•œ๋‹ค.

# HTTPS ํ†ต์‹ ๊ณผ์ • ๋ฐ ์›๋ฆฌ

๊ฐ„๋‹จํ•˜๊ฒŒ ๋“ค์—ฌ๋‹ค๋ณด๋ฉด ๋™์ž‘๋ฐฉ์‹์€ ๋Œ€์นญํ‚ค์™€ ๊ณต๊ฐœํ‚ค(๋น„๋Œ€์นญํ‚ค) ๋ฐฉ์‹์„ ์ „๋ถ€ ์‚ฌ์šฉํ•˜๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ฐฉ์‹์ด๋‹ค.
๋ฐ์ดํ„ฐ ์ „์†ก์„ ์œ„ํ•ด ๋Œ€์นญํ‚ค ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉฐ ๋Œ€์นญํ‚ค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๊ณต๊ฐœํ‚ค ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. image

# 1. Client Hello

๋ธŒ๋ผ์šฐ์ € ๋งˆ๋‹ค ์ง€์›ํ•˜๋Š” ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ TLS ๋ฒ„์ „์ด ๋‹ค๋ฅด๋ฏ€๋กœ ํ•ด๋‹น ์ •๋ณด๋ฅผ ์ „์†กํ•˜๋ฉฐ, ๋‚œ์ˆ˜ ๊ฐ’์„ ์ƒ์„ฑํ•˜์—ฌ ์ „์†กํ•œ๋‹ค.

# 2. Server Hello

์‚ฌ์šฉํ•  TSL ๋ฒ„์ „, ์‚ฌ์šฉํ•  ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๋‚œ์ˆ˜๊ฐ’์„ ์ „์†ก

# 3. Certificate

CA๋กœ ๋ถ€ํ„ฐ ๋ฐœ๊ธ‰๋ฐ›์€ ์ธ์ฆ์„œ๋ฅผ ์ „์†กํ•œ๋‹ค.

# 4. Server Key Exchange

ํ‚ค ๊ตํ™˜์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๋งŒ์•ฝ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉด ์ด ๊ณผ์ •์€ ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•œ๋ฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ํ‚ค๊ตํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ Diffie-Hellman์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์†Œ์ˆ˜, ์›์‹œ๊ทผ ๋“ฑ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์ด๊ฒƒ์„ ์ „์†กํ•œ๋‹ค.

# 5. Certificate Request

์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ธ์ฆํ•ด์•ผํ• ๋•Œ ์ธ์ฆ์„œ๋ฅผ ์š”๊ตฌํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค. ์š”์ฒญํ•˜์ง€ ์•Š์„ ์ˆ˜ ๋„ ์žˆ๋‹ค.

# 6. ServerHello Done

# 7. Client Key Exchange, Change Cipher Spec

pre-master-key ๋ผ๋Š” ๊ฒƒ์„ ์ „์†กํ•œ๋‹ค. ์ด ํ‚ค๋Š” 1,2 ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑํ•œ ๋‚œ์ˆ˜๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์ƒ์„ฑํ•˜๊ฒŒ๋˜๋ฉฐ ๋Œ€์นญํ‚ค๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ๋  ์˜ˆ์ •์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์•ˆ์ „ํ•œ ์ •์†ก์„ ์œ„ํ•ด์„œ ๊ณต๊ฐœํ‚ค ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ „์†กํ•œ๋‹ค.

# 8. Change Cipher Spec

ํด๋ผ์ด์–ธํŠธ๋กœ ๋ถ€ํ„ฐ ์ „์†ก๋ฐ›์€ Pre-master-key๋ฅผ ์ •์ƒ์ ์œผ๋กœ ๋ณตํ˜ธํ™” ํ›„ master-key(๋Œ€์นญํ‚ค)๋กœ ์Šน๊ฒฉ ํ›„ ๋ณด์•ˆ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ ์šฉํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋ ๋•Œ ๋ณด๋‚ด๋Š” ์•Œ๋žŒ์ด๋‹ค.


# 0927 - ์กฐํšŒ ๋นˆ(Bean)์ด 2๊ฐœ ์ด์ƒ์ผ๋•Œ ๋™์ ์œผ๋กœ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ๊ตฌํ˜„์ฒด
interface SampleInterface {  
   ...  
}

@Repository  
public class SampleInterfaceImpl implements SampleInterface {  
    ...  
}

@Repository  
public class SampleInterfaceOtherImpl implements SampleInterface {  
    ...  
}

# ๋ชจ๋“  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ ์–ธํ•ด๋†“๊ณ  ๋ถ„๊ธฐ์ฒ˜๋ฆฌ

@Controller  
public class SampleController {  
    @Autowired  
    private SampleInterfaceImpl basic;  
  
    @Autowired  
    private SampleInterfaceOtherImpl other;  
  
    @RequestMapping(path = "/path/Basic", method = RequestMethod.GET)  
    public void basic() {  
        basic.sampleMethod();  
    }  
  
    @RequestMapping(path = "/path/Other", method = RequestMethod.GET)  
    public void other() {  
        other.sampleMethod();  
    }  
}

# ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ Map์— ๋„ฃ์–ด๋‘๊ณ  ๊บผ๋‚ด์„œ ์‚ฌ์šฉ

@Controller  
public class SampleController {  
    @Autowired  
    private SampleInterfaceImpl basic;  
  
    @Autowired  
    private SampleInterfaceOtherImpl other;  
  
    Map<String, SampleInterface> services;  
  
    @PostConstruct  
    void init() {  
        services = new HashMap()<>;  
        services.put("Basic", basic);  
        services.put("Other", other);  
    }  
  
    @RequestMapping(path = "/path/{service}", method = RequestMethod.GET)  
    public void method(@PathVariable("service") String service){  
        SampleInterface sample = services.get(service);  
        // remember to handle the case where there's no corresponding service  
        sample.sampleMethod();  
    }  
}

# ApplicationContext๋ฅผ ํ™œ์šฉ

๊ตฌํ˜„์ฒด๋ฅผ bean์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ 

@Component  
public class SampleInterfaceImpl implements SampleInterface {  
    public void sampleMethod() {  
        // ...  
    }  
}  
  
@Component  
public class SampleInterfaceOtherImpl implements SampleInterface {  
    public void sampleMethod() {  
        // ...  
    }  
}

ApplicationContext์˜ getBean()์œผ๋กœ ๊ตฌํ˜„์ฒด๋ฅผ ๋กœ๋”ฉํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

@Controller  
public class SampleController {  
    @Autowired  
    private ApplicationContext appContext;  
  
    @RequestMapping(path = "/path/{service}", method = RequestMethod.GET)  
    public void method(@PathVariable("service") String service){  
        SampleInterface sample = appContext.getBean(service, SampleInterface.class);  
        sample.sampleMethod();  
    }  
}

# Spring์˜ DI ํ™œ์šฉ

set์ด๋‚˜ list, map์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.

@Autowired  
private List<SampleInterface> SampleInterfaces;

---

@Autowired  
private Map<String, SampleInterface> SampleInterfaceMap;

---

void excuteSampleMethod() {  
    String interfaceName = ""  
      
    //enum์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๊ฑฐ๋‚˜, ์กฐ๊ฑด์— ๋งž๊ฒŒ ์ˆ˜๋™์œผ๋กœ๋ถ„๊ธฐํ•˜๊ฑฐ๋‚˜ ์„œ๋น„์Šค์—๋งž๊ฒŒ ๊ณ ๋ฅธ๋‹ค.  
    if (isFirst()) {  
        interfaceName = "SampleInterfaceImpl"  
    } else {  
        interfaceName = "SampleInterfaceOtherImpl"  
    }  
  
    SampleInterface impl = SampleInterfaceMap.get(interfaceName);  
    impl.sampleMethod();
  • enum์œผ๋กœ ์ •์ฑ… ์ •ํ•˜๊ธฐ
public enum SampleType {  
    SAMPLE("SampleInterfaceImpl"),  
    OTHERS("SampleInterfaceOtherImpl")  
  
    SampleType(String implementation) {  
        this.implementation = implementation;  
    }  
  
    public String getImplementation() {  
        return this.implementation;  
    }  
}

--- 

void excuteSampleMethod(SampleType sampleType) {      
  
    SampleInterface impl = SampleInterfaceMap.get(sampleType.getImplementation);  
    impl.sampleMethod();  
}

--- 

@Component  
@RequiredArgsConstructor  
public class SampleInterfaceRouter {  
  
    private final List<SampleInterface> sampleInterfaces; //์˜์กด์„ฑ List๋กœ ์ฃผ์ž…  
  
    public SampleInterface getImplemetationByType(SampleType sampleType) {  
        return sampleInterfaces.stream()  
                            .filter(e -> e.isAvailableType(sampleType)) //๊ฐ ๊ตฌํ˜„์ฒด์—์„œ ํŒ๋‹จ  
                            .findFirst().orElseThrow(() -> new NotSupportedTypeException());  
    }  
}

# 0929 - Java HashMap

# Hash

Hash๋Š” ์ž๋ฃŒ๋ฅผ ์ผ์ •ํ•œ ํ˜•์‹์˜ ์‹๋ณ„ ๊ฐ’์ด๋‹ค.

  • Key : ๊ณ ์œ ํ•œ ๊ฐ’, Hash function์˜ input.
  • Hash function : Key๋ฅผ Hash๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • Hash Code(๋˜๋Š” Hash Value) : ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์–ป๋Š” ๊ฐ’์œผ๋กœ, ํ•ด์‹œ๋ฅผ ์ธ๋ฑ์Šค ๋˜๋Š” ์ฃผ์†Œ๋กœ ์‚ผ์•„ Value์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•œ๋‹ค.
  • Value : Key์™€ 1:1๋กœ ๋งคํ•‘๋˜์–ด ์žˆ๋Š” ๊ฐ’์œผ๋กœ Bucket์•ˆ์— ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ์‹ค์ œ ๊ฐ’์ด๋‹ค.
  • Bucket : ํ•ด์‹œ์™€ ๋งคํ•‘๋˜๋Š” ๊ฐ’(Value)์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ณต๊ฐ„์ด๋‹ค.

# HashMap

  • HashMap์€ Key-Value๊ฐ€ 1:1๋กœ Mapping ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฉฐ, Mapping์œผ๋กœ ์ธํ•ด ์‚ฝ์ž…, ์‚ญ์ œ, ๊ฒ€์ƒ‰์ด ํ‰๊ท ์ ์œผ๋กœ O(1)์ธ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. Key๋Š” ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ, Value๋Š” ์ค‘๋ณต์„ ํ—ˆ์šฉํ•œ๋‹ค.
  • Java HashMap์˜ Key๋Š” Object ํ˜•์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์™„์ „ํ•œ ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.
  • Java HashMap์˜ index๋Š” hashCode() % M(M = ํ•ด์‹œ ๋ฒ„ํ‚ท์˜ ๊ฐœ์ˆ˜)๋กœ ์‚ฐ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Java HashMap ํ•ด์‹œ ์ถฉ๋Œ์ด ์ผ์–ด๋‚  ๊ฒฝ์šฐ, ์ถฉ๋Œ ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ•์œผ๋กœ Worst Case๋ฐœ์ƒ ๋นˆ๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” Separate Chaining๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • Java8์ด์ƒ HashMap์—์„œ๋Š” ํ•˜๋‚˜์˜ ํ•ด์‹œ ๋ฒ„ํ‚ท์— 8๊ฐœ์˜ key-value ์Œ์ด ๋ชจ์ด๋ฉด ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ๋ฅผ ํŠธ๋ฆฌ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜์–ด 8๊ฐœ์— ์ด๋ฅด๋ฉด ๋‹ค์‹œ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
  • String ํด๋ž˜์Šค์˜ hashCode() ๋ฉ”์„œ๋“œ์—์„œ๋Š” ์„ฑ๋Šฅ ํ–ฅ์ƒ ๋„๋ชจ๋ฅผ ์œ„ํ•ด 31์„ ์Šน์ˆ˜๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

# 0930 - Maven package์™€ install์ฐจ์ด

# Maven ๋นŒ๋“œ ๋ผ์ดํ”„์‚ฌ์ดํด ๋‹จ๊ณ„

  • validate : ํ”„๋กœ์ ํŠธ๊ฐ€ ์ •ํ™•ํ•˜๊ณ  ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธ
  • compile : ํ”„๋กœ์ ํŠธ ์†Œ์Šค ์ฝ”๋“œ ์ปดํŒŒ์ผ
  • test : ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ๋œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธ
  • package : ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€ JAR์™€ ๊ฐ™์€ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ํŒจํ‚ค์ง•
  • verify : ํ’ˆ์งˆ ๊ธฐ์ค€์ด ์ถฉ์กฑ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ฒ€์‚ฌ ์‹คํ–‰
  • install : ๋กœ์ปฌ์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ ์ข…์†์„ฑ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํŒจํ‚ค์ง€๋ฅผ ๋กœ์ปฌ ์ €์žฅ์†Œ์— ์„ค์น˜
  • deploy : ๋นŒ๋“œ ํ™˜๊ฒฝ์—์„œ ์™„๋ฃŒ๋˜๋ฉด ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž ๋ฐ ํ”„๋กœ์ ํŠธ์™€ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์ข… ํŒจํ‚ค์ง€๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ์— ๋ณต์‚ฌ

# [ ์ฐจ์ด์  ]

package์™€ install์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ install์˜ ๊ฒฝ์šฐ package ํ›„ ๋งŒ๋“ค์–ด์ง„ ์‚ฐ์ถœ๋ฌผ์„ ๊ฐ™์€ ๋จธ์‹ ์˜ ๋กœ์ปฌ ์ €์žฅ์†Œ์— ๋ฐฐํฌํ•˜์—ฌ ์ข…์†์„ฑ์ด ์žˆ๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค๋Š” ์ 

Last update: October 3, 2022 23:27
Contributors: jaesungahn91