์Šคํ”„๋ง ์ž…๋ฌธ - (12) ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •

2023. 1. 21. 22:03ยทSpring/Spring ์ž…๋ฌธ

ํ™”๋ฉด์— ๋„์šฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ทฐ ํƒฌํ”Œ๋ฆฟ์ด ํ•„์š”

-> ๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ ์ƒ์„ฑ 

๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฉค๋ฒ„ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด์„œ ํšŒ์›๊ฐ€์ž…ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ ( ์˜์กด๊ด€๊ณ„ )

( ๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฉค๋ฒ„ ์„œ๋น„์Šค๋ฅผ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค) 

 

 

์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„

 

์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •

์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋กํ•˜๊ธฐ

 

์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •

ํšŒ์› ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํšŒ์›์„œ๋น„์Šค์™€ ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ์˜์กด๊ด€๊ณ„๋ฅผ ์ค€๋น„ํ•˜์ž.

 

์ •ํ˜•ํ™”๋˜์–ด ์žˆ๋Š” ํŒจํ„ด 

์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด์„œ ์™ธ๋ถ€ ์š”์ฒญ์„ ๋ฐ›๊ณ  

์„œ๋น„์Šค์— ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋งŒ๋“ค๊ณ  

๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  

 

 

๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ ์ƒ์„ฑ 

package hello.hellospring.controller;

import org.springframework.stereotype.Controller;

@Controller
public class MemberController {
}

 

 

@Controller ์–ด๋…ธํ…Œ์ด์…˜์ด ์žˆ์œผ๋ฉด

MemberController ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋„ฃ์–ด๋‘์–ด ์Šคํ”„๋ง์ด ๊ด€๋ฆฌ

 

 

์–ด๋…ธํ…Œ์ด์…˜ (Annotation)

๋”๋ณด๊ธฐ

 ์ž๋ฐ” ์–ด๋…ธํ…Œ์ด์…˜(Annotation)์ž๋ฐ”์˜ ์–ด๋…ธํ…Œ์ด์…˜์€ ์†Œ์Šค์ฝ”๋“œ์— ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ์˜ ์ผ์ข…์ด๋‹ค.

๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ž€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ์ปดํŒŒ์ผ ๊ณผ์ •๊ณผ ์‹คํ–‰ ๊ณผ์ •์—์„œ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋‹ค

'๊ณจ๋ฑ…์ด(@)' ๊ธฐํ˜ธ๋ฅผ ์•ž์— ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•œ๋‹ค

 

 

 

 

Spring Bean

๋”๋ณด๊ธฐ

์Šคํ”„๋ง ๋นˆ์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ์ž๋ฐ” ๊ฐ์ฒด(POJO)๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ์•Œ๋˜ ๊ธฐ์กด์˜ Java Programming์—์„œ๋Š” Class๋ฅผ ์ƒ์„ฑํ•˜๊ณ  new๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•œ ํ›„์— ์‚ฌ์šฉํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Spring์—์„œ๋Š” ์ง์ ‘ new๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ, Spring์— ์˜ํ•˜์—ฌ ๊ด€๋ฆฌ๋‹นํ•˜๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ Spring์— ์˜ํ•˜์—ฌ ์ƒ์„ฑ๋˜๊ณ  ๊ด€๋ฆฌ๋˜๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ Bean์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Spring Framework ์—์„œ๋Š” Spring Bean์„ ์–ป๊ธฐ ์œ„ํ•˜์—ฌ ApplicationContext.getBean()์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Spring์—์„œ ์ง์ ‘ ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์–ป์–ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

Bean์„ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” @Component Annotation์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

@Component Annotation์ด ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” Spring์ด Annotation์„ ํ™•์ธํ•˜๊ณ  ์ž์ฒด์ ์œผ๋กœ Bean์œผ๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

 

์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์˜ˆ์‹œ๋ฅผ ๋ณผ๊นŒ์š”? ์‹ค์ œ Spring ํ”„๋กœ์ ํŠธ์—์„œ Controller๋ฅผ ๋“ฑ๋กํ•  ๋•Œ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ Annotation์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์˜ˆ์‹œ์—์„œ Controller ์ž„์„ Spring ์—๊ฒŒ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•˜์—ฌ @Controller Annotation์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

 

https://melonicedlatte.com/2021/07/11/232800.html

 

@Controller
public class MemberController {

    private final MemberService memberService = new MemberService();
}

Spring ์ด ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก์„ ํ•˜๊ณ  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์„œ ์“ฐ๋„๋ก ๋ฐ”๊พธ์–ด์•ผ ํ•œ๋‹ค 

 

new๋กœ ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ MemberController ๋ง๊ณ  ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์ด MemberService๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ธ ๋•Œ

(ex. ์ฃผ๋ฌธ์ปจํŠธ๋กค๋Ÿฌ, ํšŒ์›์€ ์—ฌ๋Ÿฌ ๊ตฐ๋ฐ์—์„œ ์“ฐ์ž„ )

๊ฐ์ฒด ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค ์ด์œ  ์—†์Œ , ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค๊ณ  ๊ณต์šฉ์œผ๋กœ ์‚ฌ์šฉํ•ด๋„ ๋จ

 

 

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋กํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ ( ํ•˜๋‚˜๋งŒ ๋“ฑ๋กํ•จ ) 

@Controller
public class MemberController {

    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }

@Controller ์–ด๋…ธํ…Œ์ด์…˜์ด ์žˆ์œผ๋ฉด MemberController ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ

์ด๋•Œ ์ƒ์„ฑ์ž๋„ ํ˜ธ์ถœ 

 

์ƒ์„ฑ์ž์— @Autowired ๊ฐ€ ์žˆ์œผ๋ฉด ์Šคํ”„๋ง์ด ์—ฐ๊ด€๋œ ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ฐพ์•„์„œ ๋„ฃ์–ด์ค€๋‹ค.

์ด๋ ‡๊ฒŒ ๊ฐ์ฒด ์˜์กด๊ด€๊ณ„๋ฅผ ์™ธ๋ถ€์—์„œ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์„ DI (Dependency Injection), ์˜์กด์„ฑ ์ฃผ์ž…์ด๋ผ ํ•œ๋‹ค.

์ด์ „ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ฃผ์ž…ํ–ˆ๊ณ , ์—ฌ๊ธฐ์„œ๋Š” @Autowired์— ์˜ํ•ด ์Šคํ”„๋ง์ด ์ฃผ์ž…ํ•ด ์ค€๋‹ค..

memberService๋Š” ์ˆœ์ˆ˜ํ•œ ์ž๋ฐ”์˜ class์ด๋‹ค.

์Šคํ”„๋ง์ด ์•Œ ๋ฐฉ๋ฒ•์ด ์—†๋‹ค

 

 

memberService๊ฐ€ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.

์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•

1) ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •

2) ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋กํ•˜๊ธฐ

 

 

1) ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •

Component Scan

์ปดํฌ๋„ŒํŠธ ์Šค์บ”์€ @Component๋ฅผ ๋ช…์‹œํ•˜์—ฌ ๋นˆ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

ํด๋ž˜์Šค ์œ„์— @Component๋ฅผ ๋ถ™์ด๋ฉด ์Šคํ”„๋ง์ด ์•Œ์•„์„œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋นˆ์„ ๋“ฑ๋กํ•œ๋‹ค.

@Controller, @Service, @Repository, @Configuration๋Š” @Component์˜ ์ƒ์†์„ ๋ฐ›๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋‘ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์˜ ๋Œ€์ƒ์ด๋‹ค.

 

 

@Service
public class MemberService {

@Service ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€ : ์Šคํ”„๋ง์ด ์ปจํ…Œ์ด๋„ˆ์— MemberService๋ฅผ ๋“ฑ๋ก ( ํšŒ์› ์„œ๋น„์Šค ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก )

 

@Repository
public class MemoryMemberRepository implements MemberRepository{

@ Repository : ์Šคํ”„๋ง์ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— MemoryMemberRepository ๋“ฑ๋ก ( ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก )

 

 

 

 ์˜์กด์„ฑ ์ฃผ์ž…๊ณผ ๋นˆ ๋“ฑ๋ก์€ ๋‹ค๋ฅธ ๊ฒƒ์ธ๋ฐ ์ผ๋‹จ IoC ์ปจํ…Œ์ด๋„ˆ์— ๋นˆ์œผ๋กœ ๋“ฑ๋ก์ด ๋˜์–ด์•ผ ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์ƒ์„ฑ์ž์— @Autowired๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ์ ์— ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ•ด๋‹น ์Šคํ”„๋ง ๋นˆ์„ ์ฐพ์•„์„œ ์ฃผ์ž…ํ•œ๋‹ค.

์ƒ์„ฑ์ž๊ฐ€ 1๊ฐœ๋งŒ ์žˆ์œผ๋ฉด @Autowired๋Š” ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

 

 

2) ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋กํ•˜๊ธฐ

 

ํšŒ์› ์„œ๋น„์Šค์™€ ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ @Service, @Repository, @Autowired ์• ๋…ธํ…Œ์ด์…˜์„ ์ œ๊ฑฐํ•˜๊ณ  ์ง„ํ–‰ํ•œ๋‹ค.

 

hello.hellospring.service.MemberService' that could not be found.

์–ด๋…ธํ…Œ์ด์…˜์„ ์ œ๊ฑฐ ( ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์ด ์•ˆ๋จ ) -> ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก์ด ์•ˆ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜ ๋ฐœ์ƒ

 

 

 

์ง์ ‘ ๋นˆ ๋“ฑ๋กํ•˜๊ธฐ 

 

SpringConfig class ์ƒ์„ฑ

 

package hello.hellospring;

import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration // ์Šคํ”„๋ง์ด ๋œฐ ๋•Œ configuration ์„ ์ฝ๊ณ  
public class SpringConfig {

    @Bean // ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ• ๊ฑฐ์•ผ ๋ผ๋Š” ์˜๋ฏธ 
    public MemberService memberService() {
        return new MemberService(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }
}

 

 

 

 

  • ์‹ค๋ฌด์—์„œ๋Š” ์ฃผ๋กœ ์ •ํ˜•ํ™”๋œ ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ •ํ˜•ํ™” ๋˜์ง€ ์•Š๊ฑฐ๋‚˜, ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋ฉด ์„ค์ •์„ ํ†ตํ•ด ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.
  • @Autowired ๋ฅผ ํ†ตํ•œ DI๋Š” helloController , memberService ๋“ฑ๊ณผ ๊ฐ™์ด ์Šคํ”„๋ง์ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด์—์„œ๋งŒ ๋™์ž‘ํ•œ๋‹ค. ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜์ง€ ์•Š๊ณ  ๋‚ด๊ฐ€ ์ง์ ‘ ์ƒ์„ฑํ•œ ๊ฐ์ฒด์—์„œ๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

 

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Spring > Spring ์ž…๋ฌธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์Šคํ”„๋ง ์ž…๋ฌธ - (14) ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  / ์ˆœ์ˆ˜ Jdbc  (0) 2023.01.26
์Šคํ”„๋ง ์ž…๋ฌธ - (13) ํšŒ์› ์›น ๊ธฐ๋Šฅ  (0) 2023.01.22
์Šคํ”„๋ง ์ž…๋ฌธ - (11) ํšŒ์› ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ  (0) 2023.01.20
์Šคํ”„๋ง ์ž…๋ฌธ - (10) ํšŒ์› ์„œ๋น„์Šค ๊ฐœ๋ฐœ  (0) 2023.01.20
์Šคํ”„๋ง ์ž…๋ฌธ - (9) ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ  (1) 2023.01.20
'Spring/Spring ์ž…๋ฌธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ์Šคํ”„๋ง ์ž…๋ฌธ - (14) ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  / ์ˆœ์ˆ˜ Jdbc
  • ์Šคํ”„๋ง ์ž…๋ฌธ - (13) ํšŒ์› ์›น ๊ธฐ๋Šฅ
  • ์Šคํ”„๋ง ์ž…๋ฌธ - (11) ํšŒ์› ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ
  • ์Šคํ”„๋ง ์ž…๋ฌธ - (10) ํšŒ์› ์„œ๋น„์Šค ๊ฐœ๋ฐœ
hello_u
hello_u
  • hello_u
    ๐Ÿ˜œ
    hello_u
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿ˜œ (345)
      • Hardware (2)
        • BMC (2)
      • Spring (109)
        • Spring ์ž…๋ฌธ (20)
        • Spring ๊ธฐ๋ณธ (27)
        • Spring MVC (18)
        • Spring DB (22)
        • Spring JPA ๊ธฐ๋ณธ (16)
        • Spring JPA ํ™œ์šฉ (6)
      • Develop (27)
        • DB (8)
        • JAVA (4)
        • Web (2)
        • Python (7)
        • OSS (2)
        • Git (2)
        • API (2)
      • Algorithm (155)
        • CodeUp ๊ธฐ์ดˆ (44)
        • ํŒŒ์ด์ฌ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (64)
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (4)
        • SWEA (30)
        • Softeer (10)
        • BOJ (2)
      • CS (9)
        • ์ปดํ“จํ„ฐ์ผ๋ฐ˜ (3)
        • ์šด์˜์ฒด์ œ (3)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (0)
        • ์ •๋ณดํ†ต์‹  (1)
        • ์ž๋ฃŒ๊ตฌ์กฐ (1)
        • ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ (1)
        • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (0)
        • ์ตœ์‹  ๋””์ง€ํ„ธ, ์ผ๋ฐ˜์ƒ์‹ (0)
      • ์ž๊ฒฉ์ฆ (41)
        • ์ •๋ณด๋ณด์•ˆ๊ธฐ์‚ฌ (9)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (22)
        • ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 1๊ธ‰ (3)
        • SQLD (7)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
hello_u
์Šคํ”„๋ง ์ž…๋ฌธ - (12) ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •
์ƒ๋‹จ์œผ๋กœ

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