๐์คํ๋ง ๋น๊ณผ ์์กด๊ด๊ณ
์ด๋ฒ ์๊ฐ์๋ ์ ๋ฒ ํฌ์คํ ์์ ์งํํ๋ ์ ์ ๊ด๋ฆฌ ๋ก์ง์ ํ๋ก ํธ์๋์ ๊ฐ์ด ์ฎ์ด ๋ณด๋ ค๊ณ ํ๋ค. ์ด๋, ํ์ํ๊ฒ์ ์ ์ ์ปจํธ๋กค๋ฌ์ ๋ทฐ ํ ํ๋ฆฟ์ด๋ค. ๊ทธ๋ด๋ ค๋ฉด, ๋ฉค๋ฒ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. ์ฌ๊ธฐ์ ๋ฉค๋ฒ ์ปจํธ๋กค๋ฌ๋ ๋ฉค๋ฒ ์๋น์ค๋ฅผ ํตํด ํ์๊ฐ์ ์ ํ๊ณ , ๋ฉค๋ฒ ์๋น์ค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์กฐํ ํ ์ ์์ด์ผ ํ๋ค. ์ด๋ฌํ ์ํฉ์ "์์กด๊ด๊ณ"์ ๋์ฌ ์๋ค๊ณ ๋งํ๋ค. ์ด์ , ์ด๋ฌํ ์์ ์ ์ฐจ๊ทผ์ฐจ๊ทผ ํด ๋ณด์!
๋จผ์ , ๋ฉค๋ฒ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
์ด์ฒ๋ผ 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 ์ด๋ ธํ ์ด์ ์ ๋ฌด์๋๋ค.
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] ์คํ๋ง๊ณผ ๋น์ ์์กด๊ด๊ณ - ์๋ฐ ์ฝ๋๋ก ์ง์ ์คํ๋ง ๋น ๋ฑ๋กํ๊ธฐ(2) (1) | 2024.07.17 |
---|---|
[Spring]ํ์ ๊ด๋ฆฌ - ๋ฐฑ์๋ ๊ฐ๋ฐ (0) | 2024.07.12 |
[Spring] ์ด๋ ธํ ์ด์ ์ด๋ ๋ฌด์์ผ๊น? (0) | 2024.07.11 |
[Spring]์น ๊ฐ๋ฐ ๊ธฐ์ด - ์ ์ ์ปจํ ์ธ , MVC, ํ ํ๋ฆฟ, API (0) | 2024.07.11 |
[Spring] ์ ์ ํ์ด์ง ๋์ฐ๊ธฐ, ํ ํ๋ฆฟ ์์ง ๋์๋ฒ (1) | 2024.07.10 |