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

 

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ์ €๋ฒˆ ํฌ์ŠคํŒ…์—์„œ ์ง„ํ–‰ํ–ˆ๋˜ ์œ ์ € ๊ด€๋ฆฌ ๋กœ์ง์„ ํ”„๋ก ํŠธ์—”๋“œ์™€ ๊ฐ™์ด ์—ฎ์–ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์ด๋•Œ, ํ•„์š”ํ•œ๊ฒƒ์€ ์œ ์ € ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ทฐ ํ…œํ”Œ๋ฆฟ์ด๋‹ค. ๊ทธ๋Ÿด๋ ค๋ฉด, ๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ฉค๋ฒ„ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ํšŒ์›๊ฐ€์ž…์„ ํ•˜๊ณ , ๋ฉค๋ฒ„ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ "์˜์กด๊ด€๊ณ„"์— ๋†“์—ฌ ์žˆ๋‹ค๊ณ  ๋งํ•œ๋‹ค. ์ด์ œ, ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์ฐจ๊ทผ์ฐจ๊ทผ ํ•ด ๋ณด์ž!

 

๋จผ์ €, ๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. 

 

์ด์ฒ˜๋Ÿผ controller๊ฐ€ ๋‹ด๊ธด ํŒจํ‚ค์ง€ ์•ˆ์— ๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค. ์—ฌ๊ธฐ์„œ ํ•œ๊ฐ€์ง€ ์•Œ๊ณ  ๋„˜์–ด๊ฐ€์•ผ ํ•  ์ ์€, @Controller๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์œผ๋ฉด, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด ์–ด๋…ธํ…Œ์ด์…˜์„ ์ฐพ์•„ ํ•ด๋‹น๋˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋“ค๊ณ  ์ง์ ‘ ๊ด€๋ฆฌ๋ฅผ ํ•œ๋‹ค. ์•„๋ž˜ ์ปจํŠธ๋กค๋Ÿฌ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ปจํŠธ๋กค๋Ÿฌ ๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด ์ฐธ์กฐ๋˜์–ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

 

package Jihoo.hello_spring.controller;

import org.springframework.stereotype.Controller;

@Controller
public class MemberController {
    
}

 

์ด์ œ, ์ด ๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฉค๋ฒ„ ์„œ๋น„์Šค์™€ ์—ฐ๋™ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์•ˆ์— 

private final MemberService ms = new MemberService();

 

์™€ ๊ฐ™์ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

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

import Jihoo.hello_spring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
public class MemberController {

    private final MemberService memberService;

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

    }


}

 

์ด๋Ÿฐ ์‹์œผ๋กœ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค๊ณ , @Autowired ๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•œ๋‹ค. ์•„๊นŒ ์–ธ๊ธ‰ํ–ˆ๋“ฏ, ์œ„์— ์ปจํŠธ๋กค๋Ÿฌ ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ MemberController๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋œฐ๋•Œ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค. ์ƒ์„ฑ์ด ๋˜๊ณ , ์œ„์—์„œ ๋ณด๋Š” ์ƒ์„ฑ์ž ํ˜ธ์ถœm ํ•˜๋Š”๋ฐ, ์ด๋•Œ ์ƒ์„ฑ์ž์—  @Autowired ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์–ด ์žˆ์œผ๋ฉด, ์ƒ์„ฑ์ž์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์žˆ๋Š” memberService์— ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ž๋™์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” MmberService๋ฅผ ์—ฐ๊ฒฐ ์‹œ์ผœ์ค€๋‹ค.

 

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜ ๋” ๋ฐœ์ƒํ•œ๋‹ค. ๋ฉ”์ธ ์•ฑ์„ ์‹คํ–‰ ํ•ด๋ณด๋‹ˆ ์ฝ˜์†”์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ฐํ˜”๋‹ค.

 

์ด์œ ๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด MemberService ํด๋ž˜์Šค๋ฅผ ์‚ดํŽด๋ณด์ž.

package Jihoo.hello_spring.service;

import Jihoo.hello_spring.domain.Member;
import Jihoo.hello_spring.repository.MemberRepository;
import Jihoo.hello_spring.repository.MemoryMemberRepository;

import java.util.List;
import java.util.Optional;

public class MemberService {

    private final MemberRepository memberRepository = new MemoryMemberRepository();

    /**
     * ํšŒ์› ๊ฐ€์ž…
     */
    public Long join(Member member) {
        //๊ฐ™์€ ์ด๋ฆ„์ด ์žˆ๋Š” ์ค‘๋ณต ํšŒ์› x
        Optional<Member> result = memberRepository.findByName(member.getName());
        result.ifPresent(m -> {
            throw new IllegalStateException("์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํšŒ์›์ž…๋‹ˆ๋‹ค.");
        });

        memberRepository.save(member);
        return member.getId();
    }

    public List<Member> findMembers() {
        return memberRepository.findAll();
    }

    public Optional<Member> findOne(Long memberId) {
        return memberRepository.findById(memberId);
    }
}

 

์‚ฌ์‹ค ์ด ํด๋ž˜์Šค๋Š” ์ˆœ์ˆ˜ํ•œ ์ž๋ฐ” ์ฝ”๋“œ์ด๋‹ค. ์Šคํ”„๋ง์ด ์ด raw ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์ด๊ฒŒ ์Šคํ”„๋ง์ธ์ง€ ์•„๋‹Œ์ง€๋Š” ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— MemberSerivce๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋•Œ, ์ƒˆ๋กœ์šด ์–ด๋…ธํ…Œ์ด์…˜์ด ๋˜ ๋“ฑ์žฅํ•˜๋Š”๋ฐ, MemberService ํด๋ž˜์Šค ๋งจ ์œ„์— @Service ๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ์„œ๋น„์Šค ์–ด๋…ธํ…Œ์ด์…˜์„ ๋‹ฌ์•„์ฃผ๋ฉด ์Šคํ”„๋ง์ด ๋œฐ๋•Œ, @Service ์–ด๋…ธํ…Œ์ด์…˜์„ ์ฐธ์กฐํ•˜์—ฌ ์„œ๋น„์Šค ํด๋ž˜์Šค์ธ๊ฒƒ์„ ์ธ์ง€ํ•˜๊ณ , ์Šคํ”„๋ง์ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋ฉค๋ฒ„ ์„œ๋น„์Šค๋ฅผ ์ž๋™์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.

 

๋˜ํ•œ, ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ๋งŒ๋“ค์—ˆ๋˜ MemberRepository ํด๋ž˜์Šค์˜ ์ƒ๋‹จ์—๋„ @Repository ๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ๋‹ฌ์•„ ์ฃผ์–ด์•ผ ํ•œ๋‹ค. 

 

๋‹ค์‹œ ์ปจํŠธ๋กค๋Ÿฌ ์–˜๊ธฐ๋ฅผ ํ•ด ๋ณด์ž๋ฉด, MemberController๊ฐ€ ์ƒ์„ฑ์ด ๋ ๋•Œ, ์Šคํ”„๋ง ๋นˆ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” MemberService ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์ž๋™์œผ๋กœ ๋„ฃ์–ด์ค€๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ DI(Dependency Injection) ์ด๋‹ค.

์œ„ ์ด๋ฏธ์ง€๋ฅผ ๋ณด๋ฉด, memberService๋Š” ๋˜ memberRepository๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด, memberService๋ฅผ ์Šคํ”„๋ง์ด ์ƒ์„ฑํ• ๋•Œ memberRepository์™€ ์—ฐ๊ฒฐ์„ ๋˜ ์‹œ์ผœ ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด MemberService ํด๋ž˜์Šค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ƒ์„ฑ์ž ์œ„์— @AutoWired ๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ๋‹ฌ์•„ ์ค˜์•ผ ํ•œ๋‹ค. 

 

์—ฌ๊ธฐ๊นŒ์ง€ ํ–ˆ์œผ๋ฉด ์œ„ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด ์„ธ๊ฐœ๊ฐ€ ๋ชจ๋‘ ์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ ๋œ ์ƒํƒœ ์ผ๊ฒƒ์ด๋‹ค.

 

๐Ÿ–‡๏ธ ์ •๋ฆฌ

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

  • ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •
  • ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋กํ•˜๊ธฐ


์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋ฐฉ์‹์€ ์œ„์—์„œ ์–ด๋…ธํ…Œ์ด์…˜์„ ๋‹ฌ์•„ ์—ฐ๊ฒฐํ•œ ๋ฐฉ์‹์ด๋‹ค. ์ฆ‰, ์Šคํ”„๋ง์„ ์ฒ˜์Œ ์‹œ์ž‘ํ• ๋•Œ ์–ด๋…ธํ…Œ์ด์…˜์„ ์Šคํ”„๋ง์ด ์•Œ์•„์„œ ์ฐพ์•„ ์Šค์บ”ํ•œ ํ›„,  ์–ด๋…ธํ…Œ์ด์…˜์ด ๋‹ฌ๋ ค์žˆ์œผ๋ฉด ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๋…์ž์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ ์ฃผ์˜ํ•  ์ ์€

 

package Jihoo.hello_spring;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloSpringApplication {

	public static void main(String[] args) {
		SpringApplication.run(HelloSpringApplication.class, args);
	}

}

 

 

์œ„ ์ฝ”๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ง„์ž…์ ์ด๋‹ค. ์ด์ œ ์Šคํ”„๋ง์ด ์ง„์ž…์„ ํ• ๋•Œ ๋ชจ๋“  ํƒœ๊ทธ๋“ค์„ ์Šค์บ” ํ•œ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ๋Š”๋ฐ, ๋งจ ์œ„์— 

package Jihoo.hello_spring์˜ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ๋งŒ ์Šค์บ”์„ ํ•˜๊ณ  ๊ทธ ์ด์™ธ์˜ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์Šค์บ”ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ˜„์žฌ๋Š” 

 

src/main/java/Jihoo.hello_spring/HelloSpringApplication ์ด์ง€๋งŒ, ์˜ˆ๋ฅผ๋“ค์–ด src/main/java ์•„๋ž˜์— 'temp'๋ผ๋Š” ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑ ํ›„ ๊ทธ ํŒจํ‚ค์ง€ ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— Demo.java๋ฅผ ๋งŒ๋“  ํ›„ @Service ํƒœ๊ทธ๋ฅผ ๋‹ฌ์•„ ์ฃผ์–ด๋„ HelloSpringApplication์˜ main ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด๋„ ์ด temp์— ์žˆ๋Š” @Service ์–ด๋…ธํ…Œ์ด์…˜์€ ๋ฌด์‹œ๋œ๋‹ค.

+ Recent posts