λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
λ°˜μ‘ν˜•

Spring45

[Spring] - λ‘œκΉ…: Log4j, Log4j2, Slf4j, Logback πŸ“Ž Logging - Log4j, Log4j2, Slf4j, Logback 둜그(Log) λŠ” 기둝을 λ‚¨κΈ°λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 둜그λ₯Ό 톡해 μ†Œν”„νŠΈμ›¨μ–΄μ˜ κ°œλ°œμ΄λ‚˜ 운영 μ‹œ λ°œμƒν•˜λŠ” λ¬Έμ œμ μ„ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 였λ₯˜κ°€ λ°œμƒν–ˆμ„λ•Œ κ°€μž₯ λ¨Όμ € ν™•μΈν•˜λŠ” 것이 둜그λ₯Ό λ³΄λŠ” κ²ƒμ΄λ―€λ‘œ, 둜그λ₯Ό λ‚¨κΈ°λŠ” 것은 ꡉμž₯히 μ€‘μš”ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ‹€μ œ μ†Œν”„νŠΈμ›¨μ–΄μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν–ˆμ„λ•Œ, μ μž¬μ μ†Œμ— λ‘œκ·Έκ°€ 좜λ ₯이 λ˜κ³ μžˆλ‹€λ©΄ 문제의 원인에 λŒ€ν•΄ μ •ν™•ν•œ νŒŒμ•…μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€. Javaμ—μ„œλŠ” Log4j, Log4j2, Slf4j, Logback λ“± λ‹€μ–‘ν•œ λ‘œκΉ… ν”„λ ˆμž„μ›Œν¬κ°€ μ‘΄μž¬ν•˜λŠ”λ°μš”, 이에 λŒ€ν•΄ κ°„λž΅νžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. πŸ’» Log4j Apache Log4j λŠ” λ‹€λ₯Έ λ‘œκΉ… ν”„λ ˆμž„μ›Œν¬μ— λΉ„ν•΄ μ•„νŒŒμΉ˜ μž¬λ‹¨μ˜ κ°€μž₯ 였래된 ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€. μ½˜μ†” 및.. 2021. 9. 15.
Spring Validation - @NotNull, @NotEmpty, @NotBlank πŸ“Ž Spring Validation - @NotNull, @NotEmpty, @NotBlank μ•ˆλ…•ν•˜μ„Έμš”, 이번 μ‹œκ°„μ— 정리할 λ‚΄μš©μ€ spring-boot-starter-validation의 @NotNull, @NotEmpty, @NotBlank μ–΄λ…Έν…Œμ΄μ…˜ μž…λ‹ˆλ‹€. ν‰μ†Œ 도메인 ν΄λž˜μŠ€μ— μ œμ•½ 쑰건으둜 Validation을 μ‚¬μš©ν•˜λŠ”λ°, μœ„ μ–΄λ…Έν…Œμ΄μ…˜λ“€μ€ μ΄λ¦„λ§Œ λ΄μ„œλŠ” λΉ„μŠ·ν•œ 역할을 ν•  것 같은데 μ •ν™•νžˆ 무엇이 λ‹€λ₯Έμ§€ κΆκΈˆν•΄μ„œ ν¬μŠ€νŒ…μ„ ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. πŸ€” μ•„λž˜ 예제의 μ½”λ“œλŠ” κΉƒν—ˆλΈŒμ—μ„œ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€ :) μ˜μ‘΄μ„± μΆ”κ°€ - Maven org.springframework.boot spring-boot-starter-validation 2.5.4 μ˜μ‘΄μ„± μΆ”κ°€ - Gradle implementation 'o.. 2021. 9. 9.
Spring Boot + MockMvc ν…ŒμŠ€νŠΈ(feat. Kotlin) πŸ“Ž Spring Boot + MockMvc ν…ŒμŠ€νŠΈ μ•ˆλ…•ν•˜μ„Έμš”, 이번 μ‹œκ°„μ— 정리할 λ‚΄μš©μ€ μŠ€ν”„λ§ λΆ€νŠΈμ™€ MockMvcλ₯Ό ν†΅ν•œ GET, POST λ“±μ˜ APIλ₯Ό ν…ŒμŠ€νŠΈν•˜λŠ” 법에 λŒ€ν•΄ 정리해보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€. 전체 μ½”λ“œλŠ” κΉƒν—ˆλΈŒμ—μ„œ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€ :) β€» ν¬μŠ€νŒ…μ— ν‹€λ¦° λ‚΄μš©μ΄ μ‘΄μž¬ν•˜λ©΄ 지적 λΆ€νƒλ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€! β˜… MockMvcλž€? MockMvcλŠ” Spring MVC의 ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬λ‘œ, κ°€μ§œ 객체λ₯Ό λ§Œλ“€μ–΄ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ„œλ²„μ— λ°°ν¬ν•˜μ§€ μ•Šκ³ λ„ Spring MVC의 λ™μž‘μ„ μž¬ν˜„ν•  수 μžˆλŠ” ν΄λž˜μŠ€μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 κ°€μ§œμ˜ HTTP μš”μ²­μ„ μ»¨νŠΈλ‘€λŸ¬μ— 보내고 μ„œλ²„ λ‚΄μ—μ„œ 컨트둀러λ₯Ό μ‹€ν–‰ν•˜μ§€ μ•Šκ³  컨트둀러의 λ™μž‘μ„ ν…ŒμŠ€νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€. MockMvcλ₯Ό μ‚¬μš©ν•¨μœΌλ‘œμ„œ μ‹€μ œ μ„œλ²„ ν™˜κ²½κ³Ό λ™μΌν•œ @SpringBoot.. 2021. 9. 7.
[Spring] - @JsonProperty, @JsonNaming πŸ“Ž Spring - @JsonProperty, @JsonNaming μ•ˆλ…•ν•˜μ„Έμš”, μ΄λ²ˆμ— 정리할 λ‚΄μš©μ€ μŠ€ν”„λ§μ—μ„œ @JsonProperty, @JsonNaming μ–΄λ…Έν…Œμ΄μ…˜ μž…λ‹ˆλ‹€. REST API λ°©μ‹μœΌλ‘œ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈκ°€ 데이터λ₯Ό 톡신을 ν•  λ•Œ JSON ν˜•μ‹μ„ 주둜 μ‚¬μš©ν•©λ‹ˆλ‹€. μ„œλ²„λ‹¨μ—μ„œλŠ” 카멜 μΌ€μ΄μŠ€(Camel Case) 방식을, ν΄λΌμ΄μ–ΈνŠΈλ‹¨μ—μ„œλŠ” μŠ€λ„€μ΄ν¬ μΌ€μ΄μŠ€(Snake Case) 방식을 μ‚¬μš©ν•©λ‹ˆλ‹€. 카멜 μΌ€μ΄μŠ€(Camel Case) - 첫 κΈ€μžλŠ” μ†Œλ¬Έμžλ‘œ, 쀑간 κΈ€μžλ“€μ€ λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•˜λŠ” ν‘œκΈ°λ²• - ex) phoneNumber, postMapping μŠ€λ„€μ΄ν¬ μΌ€μ΄μŠ€(Snake Case) - 언더바(_)κ°€ ν¬ν•¨λœ ν‘œν˜„ 방식 - ex) phone_number, post_mapping 보톡 μžλ°”λŠ” .. 2021. 9. 2.
Spring AOP - (1) ν”„λ‘μ‹œ νŒ¨ν„΄, λ°μ½”λ ˆμ΄ν„° νŒ¨ν„΄ πŸ“Ž κΈ€λ˜ 6κΈ° ν¬μŠ€νŒ… 1. λ―ΈμΉ˜λ„λ‘ λ”μ› λ˜ 7μ›”μ˜ 회고 2. μ‚¬μš©μžκ°€ κ²Œμ‹œλ¬Όμ„ μž‘μ„±ν•  λ•Œμ˜ νŠΈλžœμž­μ…˜ 처리 3. Spring AOP - (1) ν”„λ‘μ‹œ νŒ¨ν„΄, λ°μ½”λ ˆμ΄ν„° νŒ¨ν„΄ 4. [MySQL] - νŠΈλžœμž­μ…˜μ˜ 격리 μˆ˜μ€€(Isolation level) 5. Spring AOP - (2) AOP κ°œλ… 및 μ‹€μŠ΅ 6. μΈν…”λ¦¬μ œμ΄(IntelliJ) - 디버깅(Debugging) ν•˜κΈ° 7. [Java, λ””μžμΈνŒ¨ν„΄] - μ‹±κΈ€ν„΄ νŒ¨ν„΄(Singleton Pattern) 8. μ›”κ°„ μ½”λ“œλ¦¬λ·° Ver_0.1: 컀리어 μ„±μž₯ CODE μ„Έλ―Έλ‚˜ 정리 9. 포슀트맨(API ν…ŒμŠ€νŠΈ) ν™œμš©ν•˜κΈ° 10. λœ»κΉŠμ€ 2021λ…„ 회고 πŸ“Ž Spring AOP(Aspect Oriented Programming) ν¬μŠ€νŒ…μ— μž‘μ„±ν•œ 예제 μ½”λ“œλŠ” κΉƒν—ˆλΈŒμ—μ„œ 확인.. 2021. 8. 27.
JPQL @Query μ—λŸ¬: For queries with named parameters you need to use provide names for method parameters πŸ“Ž For queries with named parameters you need to use provide names for method parameters Spring Data JPAμ—μ„œ μ•„λž˜ Entityλ₯Ό 톡해 쑰회λ₯Ό ν•˜λ €λŠ”λ° 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. (email에 λŒ€ν•œ λ°μ΄ν„°λŠ” DB에 μ‘΄μž¬ν•©λ‹ˆλ‹€.) import ... @Entity @Builder @NoArgsConstructor @AllArgsConstructor @Getter @ToString public class ClubMember extends BaseEntity { @Id private String email; @Column private String password; @Column private String name; @Column pri.. 2021. 7. 6.
JPA 연관관계 μ˜μ†μ„± 전이(CASCADE) - CascadeType πŸ“Ž JPA μ˜μ†μ„± 전이(CASCADE) μ•ˆλ…•ν•˜μ„Έμš”! μ΄λ²ˆμ— 정리할 λ‚΄μš©μ€ JPAμ—μ„œ μ˜μ†μ„± 전이(CASCADE)와 κ΄€λ ¨λœ λ‚΄μš©μž…λ‹ˆλ‹€. 졜근 κ°œλ°œμ„ μ§„ν–‰ν•˜λ©° 두 μ—°κ΄€λœ μ—”ν‹°ν‹°μ—μ„œ save()λ₯Ό ν•˜λŠ” κ³Όμ •μ—μ„œ 였λ₯˜κ°€ λ°œμƒν–ˆκ³ , 이λ₯Ό ν•΄κ²°ν•˜λŠ” κ³Όμ •μ—μ„œ μ˜μ†μ„± 전이(CASCADE)λΌλŠ” κ°œλ…μ— λŒ€ν•΄ μ•Œκ²Œ λ˜μ—ˆκ³ , 이λ₯Ό μ •λ¦¬ν•˜κ³ μž ν•©λ‹ˆλ‹€. 😊 (β€» 잘λͺ»λœ λ‚΄μš©μ΄ ν¬ν•¨λ˜μ–΄ μžˆμ„μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 잘λͺ»λœ 뢀뢄에 λŒ€ν•΄ μ§€μ ν•΄μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€ πŸ˜‚) 🎯 μ˜μ†μ„±μ „μ΄(CASCADE)λž€ ? λΆ€λͺ¨ μ—”ν‹°ν‹°κ°€ μ˜μ†ν™”λ  λ•Œ μžμ‹ 엔티티도 같이 μ˜μ†ν™”λ˜κ³ , λΆ€λͺ¨ μ—”ν‹°ν‹°κ°€ μ‚­μ œλ  λ•Œ μžμ‹ 엔티티도 μ‚­μ œλ˜λŠ” λ“± νŠΉμ • μ—”ν‹°ν‹°λ₯Ό μ˜μ† μƒνƒœλ‘œ λ§Œλ“€ λ•Œ μ—°κ΄€λœ 엔티티도 ν•¨κ»˜ μ˜μ† μƒνƒœλ‘œ μ „μ΄λ˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 즉, νŠΉμ • 엔티티에 λŒ€ν•΄ νŠΉμ •ν•œ μž‘.. 2021. 6. 21.
Spring Boot Maven profile 운영 & 개발 DB 뢄리(AWS EC2) πŸ“Ž Spring Boot(Maven) profile 운영 & 개발 DB 뢄리 (ν‹€λ¦° λ‚΄μš©μ΄ μžˆμ„μˆ˜λ„ μžˆμœΌλ‹ˆ λΉ„νŒμ μœΌλ‘œ λ΄μ£Όμ‹œλ©΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€..! πŸ˜‚) μ•ˆλ…•ν•˜μ„Έμš”! μ΄λ²ˆμ— 정리할 λ‚΄μš©μ€ μŠ€ν”„λ§ λΆ€νŠΈμ—μ„œ 운영 & 개발 뢄리 및 AWS EC2에 배포 μž…λ‹ˆλ‹€. μ‹€λ¬΄μ—μ„œλŠ” μ‹€μ œ μ„œλΉ„μŠ€λ˜λŠ” DB와 κ°œλ°œμ€‘μΈ DB의 μ •λ³΄λŠ” λ‹€λ₯΄κ²Œ 관리λ₯Ό ν•˜λŠ”λ° 이λ₯Ό μœ„ν•΄ μŠ€ν”„λ§ λΆ€νŠΈμ—μ„œ profile을 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 배포할 λ•Œ 운영과 κ°œλ°œμ„ λΆ„λ¦¬ν•΄μ„œ 배포할 수 μžˆλ„λ‘ μ§„ν–‰ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. λ˜ν•œ μ €λŠ” ν˜„μž¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ AWS EC2 ν™˜κ²½μ—μ„œ 운영, 배포λ₯Ό μ§„ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ‘œμ»¬μ—μ„œ 개발 ν›„ 배포λ₯Ό ν•˜κΈ° μœ„ν•΄ GitHub에 μ½”λ“œλ₯Ό pushν•œ λ’€ AWSμ—μ„œ pull을 ν•˜κ³  배포λ₯Ό μ§„ν–‰ν•˜κ²Œ λ˜λŠ”λ°μš”, μ΄λŸ¬ν•œ κ³Όμ •μ—μ„œ λ―Όκ°ν•œ 정보듀(.. 2021. 6. 18.
Spring Data JPA μ¦‰μ‹œ λ‘œλ”©(Eager Loading) & 지연 λ‘œλ”©(Lazy Loading) πŸ“Ž JPA - @ManyToOne μ¦‰μ‹œ λ‘œλ”©κ³Ό 지연 λ‘œλ”©(Eager Loading / Lazy Loading) Spring Data JPAμ—μ„œ @ManyToOne(N:1)으둜 연관관계가 μ„€μ •λ˜μ–΄ μžˆλŠ” 2개의 Entityκ°€ μ‘΄μž¬ν•  λ•Œ, λ°μ΄ν„°λ² μ΄μŠ€μ˜ μž…μž₯μ—μ„œ 보면 join이 ν•„μš”ν•©λ‹ˆλ‹€. μ‹€μ œ @ManyToOne의 경우 FKμͺ½μ˜ μ—”ν‹°ν‹°λ₯Ό κ°€μ Έμ˜¬ λ•Œ PKμͺ½μ˜ 엔티티도 같이 κ°€μ Έμ˜€κ²Œ λ˜λŠ”λ°μš”, μ΄λŸ¬ν•œ 과정이 κΌ­ ν•„μš”ν•œκ±΄μ§€, ν•„μš”ν•˜μ§€ μ•Šλ‹€λ©΄ μ–΄λ–»κ²Œ ν•΄κ²°ν•  수 μžˆλŠ”μ§€ μ¦‰μ‹œ λ‘œλ”©κ³Ό 지연 λ‘œλ”©μ— λŒ€ν•΄ 예제λ₯Ό 톡해 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€. ⌨️ Board, Member μ—”ν‹°ν‹° import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import .. 2021. 6. 17.
JUnit - @ParameterizedTest, @ValueSource, @CsvSource, @MethodSource μ–΄λ…Έν…Œμ΄μ…˜ β€’ μ•ˆλ…•ν•˜μ„Έμš”~ 이전에 μš΄μ˜ν•˜λ˜ λΈ”λ‘œκ·Έ 및 GitHub, 곡뢀 λ‚΄μš©μ„ μ •λ¦¬ν•˜λŠ” Study-GitHub κ°€ μžˆμŠ΅λ‹ˆλ‹€! β€’ 넀이버 λΈ”λ‘œκ·Έ β€’ GitHub β€’ Study-GitHub β€’ πŸ” πŸ“Ž JUnit5 - @ParameterizedTest, @ValueSource, @CsvSource, @MethodSource μ•ˆλ…•ν•˜μ„Έμš”! 이번 μ‹œκ°„μ— 정리할 λ‚΄μš©μ€ JUnitμ—μ„œ νŒŒλΌλ―Έν„°μ˜ ν…ŒμŠ€νŠΈμ™€ κ΄€λ ¨λœ λ‹€μ–‘ν•œ ν…ŒμŠ€νŠΈ λ°©λ²•μž…λ‹ˆλ‹€. μ΄λ²ˆμ— λ„₯μŠ€νŠΈμŠ€ν…μ—μ„œ μ§„ν–‰ν•˜λŠ” μžλ°” ν”Œλ ˆμ΄κ·ΈλΌμš΄λ“œ 과정을 λ“€μœΌλ©΄μ„œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  μžˆλŠ”λ°μš”, 이와 κ΄€λ ¨ν•΄ νŒŒλΌλ―Έν„°μ˜ 쀑볡 값에 λŒ€ν•œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μ œκ±°ν•˜κ±°λ‚˜, μž…λ ₯ 값에 따라 κ²°κ³Ό 값이 λ‹€λ₯Έ κ²½μš°λ„ ν…ŒμŠ€νŠΈκ°€ κ°€λŠ₯ν•˜λ„λ‘ κ΅¬ν˜„ν•˜λŠ” κ³Όμ •μ—μ„œ μœ„μ˜ μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜κ²Œ λ˜μ—ˆλŠ”λ°μš”, κ°„λž΅ν•˜κ²Œ μ •.. 2021. 6. 8.
λ°˜μ‘ν˜•