-
@Component ๋ด์ static method ์์ ์ฐ๋ member ๊ฐ์ฒด๊ฐ null ์ผ๋
@Component ๋ด์ static method์์ ์ฌ์ฉํ๋ static member
@Component @RequiredArgsConstructor public class SomeComponentClass { private final ObjectMapper objectMapper; private static void staticMethod() { objectMapper.convertValue() // objectMapper NullPointerException ๋ฐ์ } }-> ์ด๋ ๊ฒ ๋ฐ๊พธ์ธ์.
@Component @RequiredArgsConstructor public class SomeComponentClass { private static ObjectMapper objectMapper; // Autowired๋ก constructor ์์ฑ @Autowired public SomeComponentClass(ObjectMapper objectMapper) { SomeComponentClass.objectMapper = objectMapper; } private static void staticMethod() { objectMapper ~~~ } }CreatedSat, 25 Jan 2025 17:14:05 +0900 -
์๋ก
- GitHub์์ **ํ๊ทธ(Tag)**๋ฅผ ๊ธฐ๋ฐ์ผ๋ก **๋ฆด๋ฆฌ์ฆ(Release)**๋ฅผ ๋ง๋ค๋ฉด,
- ๋ฆด๋ฆฌ์ฆ ๋ ธํธ๋ฅผ ์์ฑํ๊ณ , ๋ฐ์ด๋๋ฆฌ ํ์ผ(zip, tar.gz ๋ฑ)์ ์ฒจ๋ถํ ์ ์์ด์ ๋ฐฐํฌ์ ์์ฃผ ์ ์ฉํฉ๋๋ค..
- ์๋์ GitHub ๋ฆด๋ฆฌ์ฆ ์์ฑ ๋ฐ ์ฐ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํฉ๋๋ค. ๐
๐ GitHub ๋ฆด๋ฆฌ์ฆ๋?
- ํน์ ํ๊ทธ์ ๋ํ ๋ฆด๋ฆฌ์ฆ ์ ๋ณด๋ฅผ ์๊ฐํํด์ ๋ณด์ฌ์ฃผ๋ GitHub์ ๊ธฐ๋ฅ
- ๋ฆด๋ฆฌ์ฆ ๋ ธํธ ์์ฑ ๊ฐ๋ฅ
- ์คํ ํ์ผ, ์ํฐํฉํธ(.zip, .jar ๋ฑ) ์ฒจ๋ถ ๊ฐ๋ฅ
- GitHub Actions ๊ฐ์ CI ๋๊ตฌ์ ์ฝ๊ฒ ์ฐ๋ ๊ฐ๋ฅ
๐ ๏ธ GitHub ๋ฆด๋ฆฌ์ฆ ๋ง๋๋ ๋ฐฉ๋ฒ
1. Git ํ๊ทธ ๋ง๋ค๊ธฐ (๋ก์ปฌ or GitHub์์)
# ๋ก์ปฌ์์ annotated tag ๋ง๋ค๊ธฐ git tag -a v1.0.0 -m "Release version 1.0.0" # ์๊ฒฉ ํธ์ git push origin v1.0.0๋๋ GitHub ์น UI์์ ์ ํ๊ทธ๋ฅผ ๋ง๋ค ์๋ ์์.
CreatedSat, 11 Jan 2025 16:11:03 +0900 -
git ์์ tag๋ ์ธ์ ์ฐ๊ณ ์ด๋ป๊ฒ ์ธ๊น?
- Git์์ **tag(ํ๊ทธ)**๋ ํน์ ์ปค๋ฐ์ ์ด๋ฆ์ ๋ถ์ฌ์ ์๋ณํ๊ธฐ ์ฝ๊ฒ ๋ง๋๋ ๊ธฐ๋ฅ์ ๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ๋ฆด๋ฆฌ์ฆ ๋ฒ์ ์ ํ์ํ ๋ ๋ง์ด ์ฌ์ฉ๋๋ฉฐ, ํน์ ์์ ์ ์ค๋ ์ท์ ์๋ฏธํฉ๋๋ค.
๐ฏ ํ๊ทธ์ ์ฃผ์ ์ญํ
-
๋ฆด๋ฆฌ์ฆ ๋งํน
- ์: v1.0.0, v2.1.3
- ๋ฐฐํฌํ ๋ฒ์ ์ด ์ด๋ค ์ปค๋ฐ์ธ์ง ๋ช ํํ๊ฒ ์ถ์ ํ ์ ์์ต๋๋ค.
-
์ค๋ ์ท ์ ์ฅ
- ํน์ ์ปค๋ฐ์ ์ค์ํ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๊ณ ์ถ์ ๋ (์: ์ฒซ ๋ฐฐํฌ, ํ ์คํธ ์๋ฃ ์ง์ ๋ฑ)
-
CI/CD ํธ๋ฆฌ๊ฑฐ์ฉ
- ํ๊ทธ๊ฐ push๋ ๋ ์๋ ๋ฐฐํฌ๋๋๋ก CI ํ์ดํ๋ผ์ธ ์ค์ ์ด ๊ฐ๋ฅ
๐ ๏ธ ํ๊ทธ์ ์ข ๋ฅ
- Lightweight Tag (๊ฐ๋ฒผ์ด ํ๊ทธ)
- ๋จ์ํ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
- Git ๋ด๋ถ์ ์ผ๋ก๋ ๋ธ๋์น์ ์ ์ฌํ ๊ตฌ์กฐ
git tag v1.0.0 - Annotated Tag (์ฃผ์์ด ์๋ ํ๊ทธ)
- ํ๊ทธ ์์ฑ์ ์ ๋ณด, ๋ ์ง, ๋ฉ์์ง ๋ฑ์ ํฌํจ
- ๋ฆด๋ฆฌ์ฆ์๋ ๋ณดํต ์ด๊ฑธ ์ฌ์ฉ
git tag -a v1.0.0 -m "Release version 1.0.0"
๐ค ํ๊ทธ ํธ์ ๋ฐ ๊ณต์
- ํ๊ทธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก git push๋ก ์๋ ํธ์๋์ง ์์. ๋ช
์์ ์ผ๋ก ํธ์ํด์ผ ํจ:
# ํน์ ํ๊ทธ ํธ์ git push origin v1.0.0 # ๋ชจ๋ ํ๊ทธ ํธ์ git push origin --tags
๐ ํ๊ทธ ํ์ธ
# ๋ก์ปฌ ํ๊ทธ ๋ชฉ๋ก git tag # ํน์ ํ๊ทธ๊ฐ ๊ฐ๋ฆฌํค๋ ์ปค๋ฐ ๋ณด๊ธฐ git show v1.0.0๐งฝ ํ๊ทธ ์ญ์
# ๋ก์ปฌ ํ๊ทธ ์ญ์ git tag -d v1.0.0 # ์๊ฒฉ ํ๊ทธ ์ญ์ git push origin --delete v1.0.0๐ฆ ํ์ฉ ์์ (๋ฆด๋ฆฌ์ฆ ๊ด๋ฆฌ)
# ์ฝ๋๊ฐ ์์ ํ๋ ์์ git checkout main git pull git tag -a v1.0.0 -m "First stable release" git push origin v1.0.0- CI/CD ๋๊ตฌ(GitHub Actions, Jenkins ๋ฑ)๋ ์ด ํ๊ทธ๋ฅผ ๊ฐ์งํด์ v1.0.0์ ์๋์ผ๋ก ๋ฐฐํฌํ๊ฒ ํ ์ ์์ต๋๋ค.
CreatedSat, 04 Jan 2025 13:18:03 +0900 -
Spring ์์ (boot ํฌํจ) component์ bean์ ์ฐจ์ด๋?
Spring Boot (์ ํํ๋ Spring Framework)์์
@Component์@Bean์ ๋ชจ๋ Spring ์ปจํ ์ด๋์ ๊ฐ์ฒด(๋น, Bean)๋ฅผ ๋ฑ๋กํ๋ ๋ฐ ์ฌ์ฉ๋์ง๋ง, ์ฌ์ฉํ๋ ๋ฐฉ์๊ณผ ๋ชฉ์ ์ด ์กฐ๊ธ ๋ค๋ฆ ๋๋ค.
๐น 1.
@Component- ํด๋์ค์ ๋ถ์ด๋ ์ด๋ ธํ ์ด์
- Spring์ด ์๋์ผ๋ก ํด๋น ํด๋์ค๋ฅผ ๋น์ผ๋ก ๋ฑ๋ก
@ComponentScan์ ์ํด ํ์ง๋์ด ๋ฑ๋ก๋จ
@Component public class MyComponent { public void doSomething() { System.out.println("Component is working"); } }โ ํน์ง
- ์๋ ๋ฑ๋ก
@Service,@Repository,@Controller๋ ์ฌ์ค@Component์ ํน์ํ ๋ฒ์ - ํจํค์ง ์ค์บ ๊ฒฝ๋ก ์์ ์์ด์ผ ํจ
๐น 2.
@Bean- ๋ฉ์๋์ ๋ถ์ด๋ ์ด๋ ธํ ์ด์
- ์ฃผ๋ก
@Configurationํด๋์ค ์์์ ์ฌ์ฉ - ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ Spring ์ปจํ ์ด๋์ ๋ฑ๋ก
@Configuration public class AppConfig { @Bean public MyComponent myComponent() { return new MyComponent(); // ์๋ ๋ฑ๋ก } }โ ํน์ง
- ์๋ ๋ฑ๋ก
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ฒด, ์ค์ ๊ฐ์ด ํ์ํ ๊ฒฝ์ฐ ๋ฑ ์ ์ฐํ ๊ฐ์ฒด ์์ฑ ๊ฐ๋ฅ
- ๋ฉ์๋ ์ด๋ฆ์ด ๋น ์ด๋ฆ์ด ๋จ (ํ์์
@Bean(name = "beanName")์ผ๋ก ์ง์ ๊ฐ๋ฅ)
๐ ์ ๋ฆฌ
ํญ๋ชฉ @Component@Bean๋ถ์ด๋ ์์น ํด๋์ค ๋ฉ์๋ ๋ฑ๋ก ๋ฐฉ์ ์๋ ๋ฑ๋ก (์ปดํฌ๋ํธ ์ค์บ) ์๋ ๋ฑ๋ก (๊ฐ๋ฐ์๊ฐ ๋ช ์์ ์ผ๋ก ์์ฑ) ์ฌ์ฉ ์ฉ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ด๋ถ ํด๋์ค ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋ณต์กํ ์ด๊ธฐํ ์ค์ ํด๋์ค ํ์ ์ฌ๋ถ ํ์ ์์ @Configurationํ์
๐ ์ธ์ ์จ์ผ ํ ๊น?
- ๋ด๊ฐ ๋ง๋ ํด๋์ค๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํ๊ณ ์ถ๋ค๋ฉด โ
@Component - ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ฒด๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ๊ฐ์ฒด ์์ฑ์ด ํ์ํ ๋ โ
@Bean
CreatedSat, 21 Dec 2024 17:14:05 +0900 -
@Value ์ ๊ฐ์ด ๋ฐ์ธ๋ฉ ๋์ง ์์ผ์ ๊ฐ์?
-
Spring Boot ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ์ํฌ ๋ @Value๋ก (org.springframework.beans.factory.annotation.Value) ๊ฐ์ ์ฃผ์ ํ๋ ค๊ณ ํ ๋ ์๊ฐ๊ณผ๋ ๋ค๋ฅด๊ฒ @Value๋ก ์ฃผ์ ํ ๊ฐ์ด ์ ๋๋ก ๋ฐ์ธ๋ฉ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
-
์ด๋ฌํ ํ์์ ์ ์๊ธฐ๋ฉฐ, ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
-
์ฐ์ Spring Boot๋ฅผ ์คํ์ํฌ๋ loading ์์๋ ์ด๋ป๊ฒ ๋๋์ง ๋จผ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
-
Spring Boot ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋ ๋์ ๋ก๋ฉ ์์๋ ํฌ๊ฒ ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ก ์ด๋ฃจ์ด์ง๋๋ค. ์ด ์์๋ Spring Framework์ ๋์ ์๋ฆฌ์ ๊ธฐ๋ฐํ๋ฉฐ, Spring Boot ํน์ ์ ๊ธฐ๋ฅ๋ค์ด ์ถ๊ฐ์ ์ผ๋ก ํฌํจ๋ฉ๋๋ค.
CreatedWed, 27 Nov 2024 17:14:05 +0900 -
-
Clean Code ์๋ก
Abstract
์ฃผ๋์ด ๊ฐ๋ฐ์์ผ์๋ก ์ผ๋จ ๊ธฐ๋ฅ ๊ตฌํ์ ์ฐ์ ์ผ๋ก ์๊ฐํ๋ค. ๋ค์ ๋งํด์ ๋์ฒด๋ก ์ฝ๋์ ํ๋ฆฌํฐ๋ ๋ท์ ์ด๊ณ ์๊ฐํ ๊ธฐ๋ฅ๋๋ก ๋์๊ฐ๋ ์ฝ๋๋ก ์์ฑํ๋ฉด ํ ์ผ์ ๋คํ๋ค๊ณ ์๊ฐํ๋ค. ์๋, ๋น๋จ ์ฃผ๋์ด ๊ฐ๋ฐ์๋ง์ ๋ฌธ์ ๋ ์๋ ์๋ ์๋ค. ์ ๊ณ์ ์์ผ๋ฉด์ ๋ณด์์จ ๋ง์ ๊ฐ๋ฐ์๋ค์ ๋์๋ดค์ ๋, ์ฝ๋ ํ์ง์ ์๊ฐํ๋ ๊ฐ๋ฐ์๋ ๊ทธ๋ฆฌ ๋ง์ง ์์๋ค. ์ฌ์ง์ด Clean Code๊ฐ ๋ญ์ง ๋ชจ๋ฅด๋ ์ฌ๋๋ ๋ง๋ค. ํ์ง๋ง ์ฝ๋์๋ ํ์ง์ด๋ผ๋ ๊ฒ์ ๋ถ๋ช ํ ์กด์ฌํ๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์ฝ๋๊ฐ ์ด๋ ์ ๋์ ํ์ง ์์ค์ ๊ฐ์ถ์๋๊ฐ๋ ๊ฐ๊ด์ ์ผ๋ก ํ๊ฐ๋๋ ๊ฒ์ด ์ข๋ค. ๋ชจ๋ ๊ฐ๋ฐ์๋ dirty ํ์ง ์์ cleanํ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ๊ณ์ ๋ ธ๋ ฅํด์ผ ํ๋ค.
CreatedWed, 27 Nov 2024 17:14:05 +0900