Project
๋ธ๋ก๊ทธ
์์ฆ ์ทจ๋ฏธ๊ฐ ๋ง์ด ์๊ธด๊ฒ ๊ฐ๋ค.(๋ฑ์ฐ, ์บ ํ, ํํ ๋ฑ..) ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ๋ ์์์ ์ฐ์ด ์ฌ๋ฆด๊น ์๊ฐ์ค์ธ๋ฐ ๋ ์์ํ๋ ค๋ฉด ๊ฐ์ก๊ณ ... ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์๊ฐํ ์๊ฐ์ด ํ์ํ๋ค. ์๊ฐํ ์๊ฐ๋์ ์ฝํ๋ฆฐ ๊ณต๋ถ๋ฅผ ์์ํด๋ณด๋ ค๊ณ ์ฝํ๋ฆฐ + spring ์ผ๋ก ๋ธ๋ก๊ทธ๋ฅผ ๋ง๋ค ์๊ฐ์ด๋ค. ์ ๋ถ ์์ฐ๊ณ ๋ชป์ฐ๋ ๊ธฐ์ ์ ์ฐพ์์ ์ฝ์งํ ์์ . ์ฐ์ ํ์ฅ๋์ด ์ถ์ฒํด์ฃผ์ 1. CI/CD ์ ์ฉ + ํ ์คํธ ์ฝ๋ ์์ฑ 2. ECS ์๋ฒ (๋ฅผ ์ํด +Docker) 3. Spring Webflux ํ๋ ์์ํฌ (Coroutine) 4. ์บ์์๋ฒ (redis) ๋ธ๋ก๊ทธ์์ ์ฌ์ฉํ๊ธฐ์ ๊ณผํ๋ค๊ณ ์๊ฐํ ์ ์์ง๋ง ๊ณต๋ถ์ฉ์ผ๋ก...๋ชจ๋ ์ ์ฉํ ์์ ์ด๋ค ๊ธด ์ธ์์ด ์์๋๋ค ^^...
8. Service
@RequiredArgsConstructor @Service public class DiaryRegisterService { private final CoupleRepository coupleRepository; private final DiaryRepository diaryRepository; private final UserRepository userRepository; public DiaryRegisterResponse addDiary(DiaryRegisterRequest diaryRegisterRequest) { Couple couple = coupleRepository .findByCoupleToken(diaryRegisterRequest.getCoupleToken()) .orElseThrow(..
7. CI/CD ๊ณํ
๋ฆฌํฉํ ๋ง์ด 30%์ ๋ ๋จ์ ์์ ์์ ์๋ํ ๋ฐฐํฌ๋ฅผ ๊ณํํ๊ณ ์ํฉ๋๋ค! ์ฐ์ ์ฒ์ํด๋ด์ ๊ฒ์์ผ๋ก ์ฐพ์๋ธ ๋ฐฉ๋ฒ์ ์คํํ ํ ๋ฐฉ์์ ์ดํดํ๊ณ ๋ค๋ฅธ๊ฑธ๋ก ๋ฐ๊ฟ๋ณผ ์์ ์ ๋๋ค. ์ ์ผ ๋ง์ด ๋ค์ด๋ดค๋ Jenkins, Docker๋ฅผ ์ฌ์ฉํ ์์ ์ ๋๋ค. 1. GitHub Push. 2. GitHub์์ Jenkins์ Build ์ ๋ฐํ๋ค. 3. Jenkins์์ Gradle Buildํ์ฌ Jar ํ์ผ ์์ฑ ํ๋ค. 4. ์์ ๋ Jar ํ์ผ์ build ํ๋ค. 5. DocerHub์ Push ํ๋ค. 6. Jenkins ๊ฐ DockerHub์ ์๋ ํ์ผ์ pull ํ๋ค. 7. ์ด์ ์ปจํ ์ด๋ ์ญ์ ํ ์๋ก ๋ฐ์์จ ์ด๋ฏธ์ง๋ฅผ ์คํํ๋ค. https://velog.io/@haeny01/AWS-Jenkins%EB%A5%BC-%ED%99%9..
6. ๋ฌด์์ด ๋ฌธ์ ์ผ๊น ...
Test ๋์ค ์ด์ํ๊ฒ ResponseFileds๋ฅผ ๋ฐ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ์๋ค. ํน์๋ ํด์ postman์ผ๋ก ํ ์คํธ ํด๋ณด์๋๋ฐ ์๋์ ๊ฐ์ด ์๋์จ๋ค ... ํ ์คํธ๋ ์ฑ๊ณตํ์ง๋ง responseFields ๊ฐ ์๋ค๋ฉฐ ๊ณ์ํด์ ์ค๋ฅ๋ฅผ ๋ฑ๋๋ค ... ใ ใ ๋ฌด์์ด ๋ฌธ์ ์ผ๊น @Test void loginUser() throws Exception { final UserLoginRequest userLoginRequest = UserLoginRequest.builder().socialToken("Asd823daz").pushToken("Wesdf0898dfa").build(); final UserLoginResponse userLoginResponse = UserLoginResponse.builder().coupleT..
5. Spring REST Docs ์ฌ์ฉ
์๋น์ค ๊ตฌํ์ ์์ REST API ๋ฌธ์๋ฅผ ์๋ํ ํด์ฃผ๋ Spring REST Docs ๋ฅผ ์ฌ์ฉํด๋ณธ๋ค. Docs๋ฅผ ์ฌ์ฉํ ์ด์ ๋ Test์์ ์ฑ๊ณตํด์ผ๋ง ๋ฌธ์๋ฅผ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๊ฒ๋์์ต๋๋ค. ๊ฐ์ ๋ก TEST CODE๋ฅผ ์์ฑํ์ฌ API์ ๋ํ ์ ๋ขฐ์ฑ์ ๋์ผ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. Gradle 7์ ์ฌ์ฉํ๊ณ ์์๋๋ฐ ๋ฌธ์์์ฑ์ด ์๋์ ๊ฒ์ํด๋ดค๋ค. ์ฐํ๋ฐฉ๋ฒ์ด ์์ง๋ง ๋ณต์กํ๊ธฐ ๋๋ฌธ์ ๋ค์ด๊ทธ๋ ์ด๋๋ฅผ ์ ํํ๋ค. ๊ทธ๋ฆฌ๊ณ Gradle๊ณผ Maven ์์ ๋ค๋ฅด๊ฒ ์ค์ ๋๋ ๋ถ๋ถ์ด ์๊ธฐ ๋๋ฌธ์ ๋งจ์๋ ๋งํฌ๋ฅผ ํตํด ํ์ธํด๋ณด๋ ๊ฒ๋ ์ข๋ค! ํ๊ฒฝ์ค์ Springboot 2.6.1 Gradle 6.9.1 JUnit5 Asciidoctor 1.5.9.2 build.gradle ์ ์ถ๊ฐํ ์ค์ plugins { id "org.a..
4. ์ฐ๊ด๊ด๊ณ - OneToMany
DiaryEntity package so.ego.re_darling.domains.diary; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import so.ego.re_darling.domains.user.domain.Couple; import javax.persistence.*; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; @Gette..
3. ์ฐ๊ด๊ด๊ณ - ManyToOne
Coupon Entity package so.ego.re_darling.domains.coupon.domain; import lombok.*; import so.ego.re_darling.domains.user.domain.User; import javax.persistence.*; import java.time.LocalDateTime; @AllArgsConstructor(access = AccessLevel.PROTECTED) @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(name = "coupon") @Entity public class Coupon { @Id @GeneratedValue(strategy = GenerationType.IDEN..
2. Entity
package so.ego.re_darling.domains.coupon.domain; import lombok.*; import javax.persistence.*; import java.time.LocalDateTime; @AllArgsConstructor(access = AccessLevel.PROTECTED) @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(name = "coupon") @Entity public class Coupon { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @NonNull private String title; private Str..
NAWA ํ๋ก์ ํธ ์ค๋ช
1. ๋ฌธ์ ์์ ๋ฌธ์ ์์ ์ ์์๋งํผ์ด๋ ์ด๋ ต๊ณ ์๊ฐ์ด ๋ง์ด ๋ค์ด๊ฐ๋ค. ์ฒ์์ผ๋ก ๊ฐ๋ฐ ์์ ๋ณด๊ณ ์๋ก ์ญํ ๋ถ๋ด, ์ผ์ , ์์คํ ๊ตฌ์ฑ๋, ๊ตฌํ์ ์์ฑํ์๋ค. ํ์์์ ๊ฐ์ด ๋ฐฐ์ด ์ธ์ด์ ๊ฐ๋ฐ๋๊ตฌ๋ฅผ ์ฌ์ฉ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ ต์ง ์์๋ค. ์ญํ ๋ถ๋ด์์ ๊ฐ์ธ์ ์ญ๋ ์ฐจ์ด ๋๋ฌธ์ ์กฐ๊ธ ์๊ฐ์ด ์ง์ฒด๋์์ง๋ง, ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ์ถ๊ฐ, ์์ ๋์๋ค. ๊ทธ ํ ๊ธฐ๋ฅ์ ์์ (FBS)๋ฅผ ์์ํ๋ฉฐ ์ ๋ง ํ๋ค์๋ค... ๊ทธ ํ์ ๋ง๋ ๋ฌธ์์์ ์กฐ๊ธ์ด๋ผ๋ ๋ฐ๋๋ฉด FBS๋ ๋ฐ๊ฟ์ผ ํ๋ ์ํฉ์ด์ด์ ์ฒ์ ๊ณํํ ๋ ์ข ๋ ์ ์คํ์ด์ผ ํ๋ค๋ ๊ฑธ ๋ผ์ ๋ฆฌ๊ฒ ๋๊ผ๋ค... ๊ตฌํ๋์ด์ผ ํ ๊ธฐ๋ฅ์ด ํ๋ํ๋ ๋์ด๋์ด์๋ค. ๋๋ง์ ์๊ตฌ์ฌํญ ๋ช ์ธ์ , ๊ฐ์ฅ ์๊ฐ์ ๋ง์ด ์์๋ถ์๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋์ ๊ฐ๋ฐํ ๋ ๋ฌด์ฒ ๋์์ด ๋ง์ด ๋์๋ค. ํ ํ๋ก์ ํธ์ด๋ค ๋ณด๋ ์๋ก ..