๐ ๋ฐฐ๊ฒฝ
ํ ์ด ํ๋ก์ ํธ์ ํ์ฌ ํ๋ก์ ํธ์์ Spring, IntelliJ, Maven์ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ ๋ถ๋ฆฌ๋ฅผ ํ๋ฉด์ ์๊ฒ๋ ๋ชจ๋ ๋ถ๋ฆฌ ๋ฐฉ๋ฒ๊ณผ ๋ชจ๋ ๋ถ๋ฆฌ ๊ณผ์ ์์ ๊ฒช์ ์ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ค์ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต์ ํ๊ณ ์ ํ๋ค.
๐ ๋ชจ๋ ๋ถ๋ฆฌ๋ฅผ ํด์ผ ํ๋ ์ด์ ?
- ์์กด์ฑ ์ต์ํ
์๋ฅผ ๋ค์ด, ๋์ผํ ๋ชจ๋์์ ๋ฐฐ์น ์๋น์ค๋ฅผ ๊ฐ๋ฐํ ๋๋ ์คํ๋ง ์ํ๋ฆฌํฐ๊ฐ ํ์ ์์ ์ ์๋๋ฐ, ์ด๋ ๋์ผํ ๋ชจ๋์ด๋ผ๋ ์ด์ ๋ก ๊ฐ์ ๋ก ์คํ๋ง ์ํ๋ฆฌํฐ ์์กด์ฑ์ ํฌํจํ๊ฒ ๋๋ฉด์ ๊ฐ๋ฐ/ํ ์คํธ ๊ณผ์ ์์ ์ํ๋ฆฌํฐ ๋๋ฌธ์ ์ํฅ์ ๋ฐ์ ์ ์๋ค.
๋ชจ๋์ ๋ถ๋ฆฌํ๋ฉด ํ์ํ ์ต์ ์์กด์ฑ๋ง ๊ด๋ฆฌํจ์ผ๋ก์จ ์ด๋ฌํ ์์กด์ฑ ๊ด๋ จ ๋ฌธ์ /์ํฅ์ ๊ณ ๋ คํ์ง ์์๋ ๋๋ค.
- ์ ์ง๋ณด์
ํน์ ๋ชจ๋์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ค๋ฉด ํด๋น ๋ชจ๋๋ง ํ์ธํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ฌ์์ง๋ค. ๋ํ, ์ฅ์ ๋ก ํด๋น ๋ชจ๋์ด ๊ฐ์์ค๋ฝ๊ฒ ์ข ๋ฃ๋๋ค๊ณ ํด๋ ๋ค๋ฅธ ์๋น์ค ๋ชจ๋๋ค์ ์ํฅ์ ๋ฐ์ง ์๊ธฐ ๋๋ฌธ์ ํผํด๋ฅผ ์ต์ํํ ์ ์๋ค๋ ์ฅ์ ๋ ์๋ค.
0. ์ค๋น
ํฌ์คํ ์ ์ฌ์ฉ๋ ํ๊ฒฝ์ ๋ค์๊ณผ ๊ฐ๋ค.
- JDK17
- IntelliJ
- Maven
- Spring Boot 3.1.3
๊ฐ์ฅ ํํ๊ณ ์์๋ก ์ ์ ํ๋ค๊ณ ์๊ฐํ๋ ์๋น์ค, ๊ณตํต, ๋ฐฐ์น ๋ชจ๋ 3๊ฐ๋ก ๋ถ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
1. ํ๋ก์ ํธ ์์ฑ
2. ๋ชจ๋ ์์ฑํ๊ธฐ
File > New > Module > New Module์ ์ ๊ทผํด์ service, batch, common์ ์์ฑํ๋ค.
๋ชจ๋์ ๋ชจ๋ ์์ฑํ๋ฉด ์๋์ ๊ฐ์ ๊ตฌ์กฐ๊ฐ ๋๋ค.
3. ๊ฐ ๋ชจ๋์ ์์กด์ฑ ์ถ๊ฐํ๊ธฐ
๊ฐ ๋ชจ๋์ ํ์ํ ์์กด์ฑ์ pom.xml์ ์ถ๊ฐํ๋ค.
์ด๋ฆ | ์ถ๊ฐํ ๋ชจ๋ |
service | web, security, security-test, common |
batch | batch, batch-test, common |
common | data-jpa, mariadb, h2 |
parent | lombok, starter-test |
lombok๊ณผ starter-test๋ ์ด๋์์๋ ์ธ ์ ์๊ธฐ ๋๋ฌธ์ parent ๋ชจ๋์ ์์กด์ฑ์ ์ถ๊ฐํ๋ค.
4. ํ๋ฌ๊ทธ์ธ ์ถ๊ฐํ๊ธฐ
spring-boot-maven-plugin ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํ๋ค.
(ํด๋น ํ๋ฌ๊ทธ์ธ์ ํจํค์ง ํ ๋ executable jar ํ์ผ๋ก ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํด ์ฃผ๋ ์ญํ ์ ํ๋ค.)
spring-boot-maven-plugin๋ ๋ฉ์ธ ํด๋์ค๊ฐ ํฌํจ๋ ๋ชจ๋์๋ง ์ถ๊ฐํด์ผ ํ๋ฏ๋ก, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ญํ ์ ํ๋ common ๋ชจ๋ ์ธ์ service, batch ๋ชจ๋์ ๋ณ๋๋ก ์ถ๊ฐํ๋ค.
(common์๋ ํฌํจํ๋ฉด main ํด๋์ค๋ฅผ ์ฐพ์ง ๋ชปํด ํจํค์ง์ ์คํจํ๊ฒ ๋๋ค.)
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
ํ๋ฌ๊ทธ์ธ๊น์ง ์ถ๊ฐ๊ฐ ์๋ฃ๋๋ฉด, ๊ธฐ๋ณธ์ ์ธ ๋ชจ๋ ๋ถ๋ฆฌ๋ ์ด๊ฑธ๋ก ๋์ด ๋๋ค.
ํ์ง๋ง ์ด๋๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ค๊ณ ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ ์๋ฐ์ ์๋ค.
์ด์ ์๋น์ค ๋ชจ๋์์ JPA์ common ๋ชจ๋์ ์ค์บํ๋ ์ค์ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด์.
5. ์ค์
service์์๋ common ๋ชจ๋์ ์๋ ํด๋์ค๋ค์ ํจ๊ป ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก ๋๋ฌธ์, common ๋ชจ๋ ํจํค์ง๊น์ง ํฌํจํด์ ์ปดํฌ๋ํธ ์ค์บ์ ํด์ผ ํ๋ค.
@SpringBootApplication(scanBasePackages = {"com.example"})
public class ServiceApplication {
public static void main(String[] args) {
SpringApplication.run(SpringApplication.class, args);
}
}
service ๋ชจ๋์ ํจํค์ง ๊ฒฝ๋ก๋ com.example.service์ด๊ณ , common ๋ชจ๋์ ํจํค์ง ๊ฒฝ๋ก๋ com.example.common ์ด๋ฏ๋ก ์์ ํจํค์ง ๊ฒฝ๋ก์ธ com.example ๊น์ง๋ง ์ ๋ ฅํ๋ฉด ๊ด๋ จ ๋ชจ๋ ์ค์ ์ ๊ฐ์ง๊ณ ์ฌ ์ ์๋ค. ๋ง์ฝ, ํจํค์ง ๊ฒฝ๋ก๊ฐ ๊ณตํต๋ ๋ถ๋ถ์ด ์๊ฑฐ๋ ๋ค๋ฅด๊ฒ ๋๋ ์ผ ํ๋ ๋ฑ ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ฉด ํ์์ ๋ฐ๋ผ ์ถ๊ฐ์ ์ผ๋ก ๊ฒฝ๋ก๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
ํ์ง๋ง ์ปดํฌ๋ํธ ์ค์บ์ ํ์์๋, JPA๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ๋ Repository ๋ถ๋ถ์์ ํด๋น Bean์ ์ฐพ์ง ๋ชปํ๋ค๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ณดํต JPA๋ฅผ ์ฌ์ฉํ๋ค๋ฉด common ๋ชจ๋์ Entity, Repository ๋ฑ JPA์ ๊ด๋ จ๋ ํด๋์ค๋ฅผ ์์ฑํ ํ ๋ฐ, ์ด๋ค์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ณ๋ ์ค์ ์ด ํ์ํ๋ค.
@Configuration
@EntityScan(basePackages = "com.example.common.entity")
@EnableJpaRepositories(basePackages = "com.example.common.repository")
@EnableJpaAuditing
public class JpaConfig {
}
Spring Data JPA์์ ์ง์ํ๋ @EntityScan, @EnableJpaRepositories ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ์ํฐํฐ ํจํค์ง์ Repository ํจํค์ง ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ก ์ค์ ํ์ผ์ ์์ฑํด์ผ service ๋ชจ๋์์ ์ฌ์ฉํ ์ ์๋ค.
๋ง์ฝ BaseEntity ๋ฑ์ ๊ณตํต ์ํฐํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด @EnableJpaAuditing๋ ํจ๊ป ์ฌ์ฉํ์ฌ JPA ๊ด๋ จ ์ค์ ์ ํ๋์ ํด๋์ค์ ์์ฑํ๋ฉด ๊ด๋ฆฌํ๊ธฐ ์ข๋ค.
REFERENCE
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ธ์ ์ ์์ฑํ๋ getSession()์ ๋ํด ์์๋ณด๊ธฐ (0) | 2023.10.22 |
---|---|
[Spring] ๋์ผํ ํจํค์ง ํด๋์ค ์์ฑ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์ ์์ ํ๊ธฐ (0) | 2023.10.07 |
์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด๋ถ sendRedirect() ์ฌ์ฉ ์ฐํ ๋ฐฉ๋ฒ (0) | 2023.08.26 |
nginx์์ ์๋ฒ๋ก ๋๋ฉ์ธ ์ ๋ฌํ๊ธฐ (0) | 2023.08.26 |
Spring message ChannelInterceptor ๋ฉ์๋ ํน์ง (0) | 2023.07.23 |
๋๊ธ