2021. 8. 15. 08:00ใBack-End ์์ ์ค/Spring Framework
์๋ ํ์ธ์? ์ฃผ๋ํ๋ ์ ๋๋ค.
์ค๋์ ๊ธฐ์กด ์ฝ๋ ์ ์๋๊ณ , ์ค์ ์ผ๋ก ๊ตฌํ Class ๋ณ๊ฒฝ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถ ํด ๋ณด๋๋ก ํ ๊ฒ์ด์์.
๊ธฐ์กด์ ์ฃผ๋ํ๋์ DBMS๊ฐ ์ ํด์ง์ง ์์ ๊ฐ์์ ํ์ค ์ํฉ์ผ๋ก ์ธํด Repository๋ฅผ DBํ์ผ๋ก ๋ง๋ค์ง ์๊ณ , Memory์ ์ ์ฅ๋๋ ๋ฐฉ์์ผ๋ก ๋ง๋ ๊ฒ์ด์์. ์ค๋์ ์ด ๋ถ๋ถ์ MariaDB์ ์ ์ฅ๋ ์ ์๋๋ก ์์ ์ ํ์๊ณ , ๊ทธ ๊ตฌํ์ฒด๋ฅผ ๋ง๋ค๊ณ , ๊ธฐ์กด MemoryMemberRepository๊ฐ ์๋ JdbcMemberRepository๊ฐ ์ฌ์ฉ๋ ์ ์๊ฒ ์ค์ ํด ๋ณด๋ ค๊ณ ํ๋ ๊ฒ์ด์์.
์์ง MemoryMemberRepository ์ด์ผ๊ธฐ๋ฅผ ๋ณด์์ง ๋ชปํ์ จ๋์? '[Spring Boot] ํ์ ๊ด๋ฆฌ ์์ - Backend'์ ๊ด์ฌ์ ์ฃผ์ธ์!
์์ ํด ๋ณด๊ฒ ์ต๋๋ค!
์ฝ๋์ ๊ด๋ จํ ๋ด์ฉ์ ์ฃผ๋ํ๋์ Github์์ ํ์ธ ํ์ค ์ ์์ต๋๋ค!
๐ ๋ชฉ์ฐจ
01.[Spring Boot] thymeleaf์ Spring Boot
02.[Spring Boot] Spring Web ๊ฐ๋ฐ ๊ธฐ์ด
03.[Spring Boot] ํ์ ๊ด๋ฆฌ ์์ - Backend
04.[Spring Boot] Service ๊ฐ๋ฐ ๋ฐ Test Case ์์ฑ
05.[Spring Boot] Spring Bean๊ณผ ์์กด๊ด๊ณ
06.[Spring Boot] Java Code๋ก ์ง์ Spring Bean ๋ฑ๋ก
07.[Spring Boot] ๋ฑ๋ก, ๋ชฉ๋ก ๋ณด๊ธฐ ๊ตฌํํ๊ธฐ
08.[Spring Boot] ๊ธฐ์กด ์ฝ๋ ์ ์๋๊ณ , ์ค์ ์ผ๋ก ๊ตฌํ Class ๋ณ๊ฒฝ
09.[Spring Boot] ํตํฉ Test
10.[Spring Boot] JPA
11.[Spring Boot] Spring Data JPA
12.[Spring Boot] AOP
๐ Spring Config
SpringConfig.java
package hello.hellospring;
import hello.hellospring.repository.JdbcMemberRepository;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class SpringConfig {
private DataSource source;
@Autowired
public SpringConfig(DataSource source) {
this.source = source;
} // ์์ฑ์ ๋
// @Bean : Bean์ ๋ด๊ฐ ์ง์ ๋ง๋ค๊ฒ ๋ค๋ ์๋ฏธ; ์คํ๋ง์ ์ด๊ฒ์ ๋ณด๊ณ , Bean์ ๋ฑ๋กํ๋ผ๋ ๋ช
๋ น์ผ๋ก ์ธ์
@Bean
// ์๋ Method๋ฅผ ํธ์ถํ์ฌ Bean์ ๋ฑ๋ก
public MemberService memberService() {
// MeberService๋ฅผ ์์ฑํ๋ฉด์ memberRepository๋ฅผ Spring Bean์ ๋ฑ๋ก ๋ ์ฃผ์
ํ์ฌ ์ค๋ค.
return new MemberService(memberRepository());
} // memberService() ๋
@Bean
public MemberRepository memberRepository() {
// return new MemoryMemberRepository();
return new JdbcMemberRepository(source);
} // memberRepository() ๋
} // Class ๋
DataSource๋ DB Connection์ ํ๋ํ ๋, ์ฌ์ฉ๋๋ ๊ฐ์ฒด์ธ ๊ฒ์ด์์.
Spring Boot๋ Data Connection Information์ ํตํด DataSource๋ฅผ ๋ง๋ค๊ณ , Spring Bean์ผ๋ก ๋ง๋ค์ด ์ฃผ๋ ๊ฒ์ด์์.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ DI๋ฅผ ๋ฐ์ ์ ์๋ ๊ฒ์ด๋๋๋ค!
์์ memberRepository Method์ ๊ธฐ์กด MemoryMemberRepository๋ฅผ ์์ ๊ณ , ์๋ก ๋ง๋ Jdbc๊ด๋ จ Repository๋ฅผ ์ฐ๊ฒฐ
์ํค๋ฉด ๋ค๋ฅธ ์์ ์์ด ๊ตฌํ์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ด์์!
Implementation Class Image
Spring Config Image
- ๊ฐ๋ฐฉ - ํ์ ์์น (OCP; Open-Closed Principle)
- ํ์ฅ์๋ ์ด๋ ค์์ผ๋, ์์ / ๋ณ๊ฒฝ์๋ ๋ซํ์๋ค.
(๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ๊ฐ๋, ํ์ฅํ ์๋ ์์ผ๋, ๊ทธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ Code๋ ์์ ๋์ง ์๋๋ค.) - ํ์ฅ์ ๋ํด ์ด๋ ค ์๋ค.
- ์ด๋ ๋ชจ๋์ ํ์๊ฐ ํ์ฅ๋ ์ ์๋ค๋ ์๋ฏธ. Application์ ์๊ตฌ์ฌํญ์ด ๋ณ๊ฒฝ๋ ๋,
์ด ๋ณ๊ฒฝ์ ๋ง๊ฒ ์๋ก์ด ํ์๋ฅผ ์ถ๊ฐํ์ฌ ๋ชจ๋์ ํ์ฅํ ์ ์๋ค. ์ด๋ ๊ณง ๋ชจ๋์ด ํ๋ ์ผ์ ๋ณ๊ฒฝํ ์ ์๋ค๋ ์๋ฏธ
- ์ด๋ ๋ชจ๋์ ํ์๊ฐ ํ์ฅ๋ ์ ์๋ค๋ ์๋ฏธ. Application์ ์๊ตฌ์ฌํญ์ด ๋ณ๊ฒฝ๋ ๋,
- ์์ ์ ๋ํด ๋ซํ ์๋ค.
- ์ด๋ค ๋ชจ๋์ ํ์๋ฅผ ํ์ฅํ๋ ๊ฒ์ด ๊ทธ ๋ชจ๋์ Source Code, Binary Code์ ๋ณ๊ฒฝ์ ์ด๋ํ์ง ์์์ผ ํ๋ค.
ํด๋น ๋ชจ๋์ ์คํ ๊ฐ๋ฅํ Binary ํํ๊ฐ Linking ๊ฐ๋ฅํ Library, DLL, jar์๋ ๊ณ ์ค๋ํ ๋จ์ ์๋ค๋ ์๋ฏธ.
- ์ด๋ค ๋ชจ๋์ ํ์๋ฅผ ํ์ฅํ๋ ๊ฒ์ด ๊ทธ ๋ชจ๋์ Source Code, Binary Code์ ๋ณ๊ฒฝ์ ์ด๋ํ์ง ์์์ผ ํ๋ค.
- ๊ฐ๋ฐฉ ํ์ ์์น์ ์งํค๋ ๋ฐฉ๋ฒ
- ๊ฐ๋ฐฉ ํ์ ์์น์ ํต์ฌ์ ๋ณํํ๋ ๋ถ๋ถ์ ์ถ์ํํ๋ ๊ฒ
MemotyMemberRepository์ JdbcMemberRepository๊ฐ ํ๋ ์ผ์ ๊ฐ์ ์ ์์ผ๋, ๊ตฌ์ฒด์ ๋์๋ฉด์์๋ ๋ค๋ฅผ ์ ์๋ค. ์ด ๋ถ๋ถ์ ๋ํด ์ถ์ํํจ์ผ๋ก, ๊ธฐ๋ฅ์ ๊ณ ์ ์ํฌ ์ ์์ผ๋ฉฐ, ์ฃผ๋ก, Interface๋ฅผ ํตํด ๊ตฌํ
- ๊ฐ๋ฐฉ ํ์ ์์น์ ํต์ฌ์ ๋ณํํ๋ ๋ถ๋ถ์ ์ถ์ํํ๋ ๊ฒ
- ํ์ฅ์๋ ์ด๋ ค์์ผ๋, ์์ / ๋ณ๊ฒฝ์๋ ๋ซํ์๋ค.
- Spring DI(Dependencies Injection)์ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด Code๋ฅผ ์ ํ ์์ ํ์ง ์๊ณ , ์ค์ ๋ง์ผ๋ก ๊ตฌํ Class๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
์ฃผ๋ํ๋์ ๊ธ์ด ๋ง์์ ๋์ จ๋์? ๊ตฌ๋ ๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋๊ธ์ ์ฃผ๋ํ๋์๊ฒ ๋ง์ ํ์ด ๋ฉ๋๋ค
'Back-End ์์ ์ค > Spring Framework' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Boot] JPA (0) | 2021.08.18 |
---|---|
[Spring Boot] ํตํฉ Test (0) | 2021.08.17 |
[Spring Boot] ๋ฑ๋ก, ๋ชฉ๋ก ๋ณด๊ธฐ ๊ตฌํํ๊ธฐ (0) | 2021.08.14 |
[Spring Boot] Java Code๋ก ์ง์ Spring Bean ๋ฑ๋ก (0) | 2021.08.13 |
[Spring Boot] Spring Bean๊ณผ ์์กด๊ด๊ณ (0) | 2021.08.12 |