κ°λ° νλ©΄μ λΉμ°ν λΆλΆμ΄μμ§λ§ λμκ² μλ‘κ² λ€κ°μλ μμΈμ²λ¦¬ ... γ
리뷰 ν΄μ£Όμλ 맀λμ λμ΄ λ무 μ μλ €μ£Όμ
μ μ 리 ν΄λ΄
λλ€ ( 격ν κ°μ¬ π₯Ή ) μμ λͺ©μ΄ μ°κ΄λμ΄ μ΄μ΄μ§μ§λ μκ³ μν©λ§λ€ μμΈμ²λ¦¬ νλ λΆλΆμ λ©λͺ¨νμ΅λλ€. μμΈ λ°μ μ μ‘°μΉλ₯Ό λͺ»νλ κ²½μ° & κ΄λ¦¬νμ§ λͺ»νλ κ²½μ° POINT * λ°μν λ§ κ³³ μμ catch ν λ©μμ§λ₯Ό μ λλ€. (μμΈμν©μ μ νν μμ νλ€) * μΈμ²΄ν¬μμΈλ‘ λ³κ²½νλ€. μμΈλ₯Ό μ‘μ§ λͺ»νλ©΄ μλ°μμλ ν΄λΉ μ 보λ₯Ό μλμΌλ‘ μΆλ ₯ν©λλ€. νμ§λ§ μ€ν¨μμΈμ λΆμν λ λ³Ό μ μλ μ 보λ μ€νμ λ³΄μΌ κ²½μ°κ° λ§κΈ° λλ¬Έμ log λ‘ μμΈλ₯Ό κ΄λ¦¬νκ³ μλ€λ©΄ μ€ν¨ μμΈμ κ΄ν μ 보λ₯Ό κ°λ₯ν λ§μ΄ λ΄μ λ°ννμ¬ μΆμ νκΈ° μ½λλ‘ νλκ² μ€μν©λλ€! 1. λ°μν μμΈμ λν λͺ¨λ κ°..
μ 체 κΈ
νμ¬ μ½λλ₯Ό λΆμνλ€κ° ν¨μνμΈν°νμ΄μ€λ₯Ό νμ©ν λΆλΆμ΄ μμ΄μ 곡λΆν΄λ³΄μλ€. μ¬μ©ν λͺ©μ μ ν΄λΉ EnumType μ μ¬μ©νλ©΄ κ·Έ Enumμ λ§κ² λ°°μ΄μ μ λ ¬νμ΅λλ€. μ μ ν 좩격μ λ°μμ΅λλ€ ..γ
.. κ·Έλμ μ λ κ°λ¨νκ² κ΅¬νν΄λ³΄κ³ 곡λΆν΄λ΄€μ΅λλ€! package com.example.demo; import java.util.function.Function; import lombok.Getter; import lombok.RequiredArgsConstructor; @Getter @RequiredArgsConstructor public enum ItemType { AA("μμ",CalRatio::getRatio), BB("μλ£",CalRatio::getRatio), CC("κ³Όμ",CalRatio::get..
λκΈ°λΆμ λμμΌλ‘ μ²μμΌλ‘ Interceptor λ₯Ό μ μ©ν΄λ³΄μμ λμ€μ μ¬μ©ν μΌμ΄ μμ λ μ°Ύμλ³΄λ €κ³ μ¨λ΄
λλ€! μλμ κ°μ Controller μ Header μμ μΈμ¦μ μν κ°μ λ°μμΌμ§λ§ μ κ·Όν μ μλλ‘ μ€μ νκ² μ΅λλ€! @RestController @RequestMapping("/orders") @RequiredArgsConstructor public class OrdersController { private final OrdersService ordersService; @Auth(type = ApiServiceType.HOMEPAGE) @GetMapping public ResponseEntity getOrders( @RequestParam(required = false) String sear..
TDD κ°λ° λ°©μ TDD λ ν
μ€νΈ μ½λλ₯Ό μμ±ν λ€μ μ€μ μ½λλ₯Ό μμ±νλ κ²μ΄λ€. ν
μ€νΈκ° ν΅κ³Όλ μ½λλ§μ μ€μ μ½λλ‘ μμ±νλ€ -> λ²κ·Έκ° μ€κ³ μμ€κ° κ°κ²°ν΄μ§λ©° μ€κ³κ° κ°μ λλ€. - μ€κ³ λ¨κ³μμ νλ‘κ·Έλλ° λͺ©μ μ 미리 μ μνλ€. - 무μμ ν
μ€νΈν΄μΌ ν μ§ λ―Έλ¦¬ μ μνλ€. - ν
μ€νΈ μ½λ μμ± λμ€ λ°μνλ μμΈ μ¬νμ ν
μ€νΈ μΌμ΄μ€μ μΆκ°νλ€. (μ€κ³ κ°μ ) TDD νλ‘μΈμ€ μ€ν¨νλ μμ λ¨μ ν
μ€νΈ μΆκ° -> ν
μ€νΈ ν΅κ³Ό, μ΅μνμ μ½λ© -> ꡬν μ€κ³ κ°μ , μ€λ³΅ μ κ±°, 리ν©ν λ§ , ν
μ€νΈ ν΅κ³Ό μ μ§ μ’μ ν
μ€νΈμ νΉμ§ Fast: ν
μ€νΈλ λΉ λ₯΄κ² λμνμ¬ μμ£Ό λ릴 μ μμ΄μΌ νλ€. Independent: κ°κ°μ ν
μ€νΈλ λ
립μ μ΄λ©° μλ‘ μμ‘΄ν΄μλ μλλ€. Repeatable: μ΄λ νκ²½μμ..
Java 8 μ΄νλ‘ interfaceμ λν μ μκ° λͺκ°μ§ λ³κ²½λμλ€. μν© μ΄λ―Έ λ§λ€μ΄μ Έ μλ Interface μ κΈ°λ₯μ μΆκ° νκ³ μΆλ€. νμ§λ§ μ΄ Interfaceλ₯Ό implemnets λ°κ³ μλ class λͺ¨λκ° μ΄ κΈ°λ₯μ ꡬν체λ₯Ό μμ±ν΄μΌλ§ νλ€. default λ©μλ μΈν°νμ΄μ€κ° default ν€μλλ‘ μ μΈλλ©΄ λ©μλλ₯Ό ꡬνν μ μκ² λλ€. -> ꡬν체λ€μ μ€λ²λΌμ΄λ©μ΄ κ°λ₯νλ€. package com.example.demo; public interface UserService { String getName(Long userId); int getAge(Long userId); /** * @implSpec μ΄ κ΅¬ν체λ μ£Όμλ₯Ό λ°ννλ€. * @param userId * @return */ // ..
πββοΈ κ³μν΄μ μ
λ°μ΄νΈ νκΈ° πββοΈ 1. 곡μλ¬Έμ 2. μ μ¬μ©ν κΉ? 3. λμλ°©μ 4. μμ‘΄μ± 5. Mapper Inteface μμ± 6. Mapper ꡬν체 μ΄ν΄λ³΄κΈ° 곡μλ¬Έμ https://mapstruct.org/documentation/stable/reference/pdf/mapstruct-reference-guide.pdf MapStruct μ μ¬μ©ν κΉ? λ³΄ν΅ DBμμ λ°μ΄ν°λ₯Ό μ‘°ννκ³ μλΉμ€λ¨μμ λ‘μ§μ μ€κ³ νκΈ° μν΄ Entity -> Dto , Dto -> Entity μμ
μ νκ² λλλ° μ΄λ¬ν Mapping μμ
μ ν΄μ£Όλ λΌμ΄λΈλ¬λ¦¬κ° λ§μ΄ μ‘΄μ¬νλ€ κ·Έμ€ μλμ λ§ν¬λ₯Ό νμΈν΄λ³΄λ©΄ MapStruct νΌν¬λ¨Όμ€κ° λΉ λ₯Έ κ²μ νμΈν μ μλ€. https://www.baeldung.com/j..
πββοΈ κ³μν΄μ μ
λ°μ΄νΈ νκΈ° πββοΈ λ§μ§λ§ μ
λ°μ΄νΈ 2022/03/29 1. Querydsl μ μ μ¬μ©ν κΉ? 2. μλλ°©μ? 3. μμ‘΄μ± 4. Repository ꡬ쑰 5. Projection μ λν κ³ μ°° ... 6. λμ 쿼리 (BooleanBuilder) 7. ExpressionUtils 8. μ λ ¬ νμ
μ λ°λ₯Έ μ λ ¬ μ²λ¦¬ Querydsl μ μ μ¬μ©ν κΉ? JPA λ₯Ό μ¬μ©νλ©΄μ (@Query ν¬ν¨) μ‘°ν κΈ°λ₯μ λν νκ³κ° μλ€. λμ μΈ μΏΌλ¦¬μΈ κ²½μ°μΈλ° μλ₯Ό λ€μ΄ μ£Όλ¬Έ νμ΄μ§λ₯Ό κ²μ νλ€κ³ νμ λ μΉ΄ν
κ³ λ¦¬ or μνλͺ
or κΈ°μ
λͺ
λ±λ±... μΌλ‘ κ²μ μ‘°κ±΄μ΄ λ¬λΌμ§λ λΆλΆμ΄λ€. κ·Έλμ μ¬μ©νκ² λ κ²μ΄ λ°λ‘ Querydsl νλ μμν¬ μ΄λ€. - νμ
체ν¬κ° λ°λ‘ κ°λ₯νλ€ - μλ° μ½λλ₯Ό κΈ°λ°μΌ..
μ»΄νμΌκ³Όμ μμ μμ±ν΄ μ£Όλ λ°©μμΌλ‘ λμνλ javaλΌμ΄λΈλ¬λ¦¬μ
λλ€. @Value κΈ°λ³Έμ μΌλ‘ λΆλ³κ°μ²΄λ‘ λ§λ€μ΄μ€λ€. classμ μ μΈνλ©΄ μλμ μ΄λ
Έν
μ΄μ
μ΄ κΈ°λ³Έμ μΌλ‘ ν¬ν¨λλ€. @Getter @AllArgsConstructor @ToString @EqualsAndHashCode @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) νμ§λ§ @Setter λ ν¬ν¨λμ§ μλλ€. μλνλ©΄ κΈ°λ³Έμ μΌλ‘ λΆλ³μ±μ 보μ₯νκΈ° λλ¬Έμ setterλ₯Ό μλ΅νλ κ²μ λΉμ°νλ€ @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) λ privateμ΄λ final μ μ¬μ©ν μ μκ² ν΄μ€λ€. μ΅μ’
μ μΌλ‘ @Value ..
HTTP / HTTPS - HTTP : μλ‘ λ€λ₯Έ μμ€ν
λ€ μ¬μ΄μμ ν΅μ μ μ£Όκ³ λ°κ² νλ κ°μ₯ κΈ°λ³Έμ μΈ νλ‘ν μ½(μλ²μμ λΈλΌμ°μ λ‘ λ°μ΄ν°λ₯Ό μ μ‘νλ μ©λλ‘ κ°μ₯ λ§μ΄ μ¬μ©ν¨) λ¬Έμ μ - μλ²μμ λΈλΌμ°μ λ‘ μ μ‘λλ μ λ³΄κ° μνΈνλμ§ μλλ€. - HTTPS : SSL(보μ μμΌ κ³μΈ΅) μ¬μ©, μλ²μ λΈλΌμ°μ μ¬μ΄μ μμ νκ² μνΈνλ μ°κ²°μ λ§λ€ μ μκ² λμμ€λ€. μλ²μ λΈλΌμ°μ κ° λ―Όκ°ν μ 보λ₯Ό μ£Όκ³ λ°μ λ ν΄λΉ μ λ³΄κ° λλλΉνλ κ²μ λ§μμ€. HTTP μ체λ₯Ό μνΈννλ κ²μ΄ μλ HTTP Message Bodyλ₯Ό μνΈννλ€. (μ¦, Headerλ μνΈνλμ§ μλλ€) HTTPS μ¬μ©ν΄μΌνλ μ΄μ 1. μ€κ°μ λ°μ΄ν°λ₯Ό κ°λ‘μ±λ μνΈνλμ΄ μκΈ° λλ¬Έμ μμ νλ€. 2. ꡬκΈμ HTTPS μΉ μ¬μ΄νΈμ κ°μ°μ μ ..
μ€λ λνμ μμ
μ²λ¦¬μ μ¬μ©λλ μ€λ λλ₯Ό μ νλ κ°μλ§νΌ μ ν΄ λκ³ μμ
νμ λ€μ΄μ€λ μμ
λ€μ νλμ© μ€λ λκ° λ§‘μ μ²λ¦¬νλ€. λ³λ ¬ μμ
μ²λ¦¬κ° λ§μμ§λ©΄ μ€λ λ κ°μκ° μ¦κ°λλλ° κ·Έμ λ°λ₯Έ μ€λ λ μμ±, μ€μΌμ€λ§μΌλ‘ μΈν΄ CPUκ° λ°λΉ μ Έ λ©λͺ¨λ¦¬ μ¬μ©λμ΄ λμ΄λλ€. λ°λΌμ μ ν리μΌμ΄μ
μ μ±λ₯μ΄ μ ν λλ―λ‘ μ€λ λ νμ μ¬μ©νμ¬ μ€λ λ μ 체 κ°μκ° λμ΄λμ§ μλλ‘ ν΄μΌνλ€. μ€λ λν μμ± public class ExecutorExample { public static void main(String[] args) { // 1κ°μ μ€λ λλ₯Ό μ¬μ©νλ μ€λ λν μμ± ExecutorService singleThread = Executors.newSingleThreadExecutor(); // μ€λ λλ₯Ό μ ν μμ΄ μ¬..
λ°λͺ¬ μ€λ λ μ£Ό μ€λ λμ μμ
μ λλ 보쑰μ μΈ μν μ μννλ μ€λ λμ
λλ€. κ·Έλ κΈ° λλ¬Έμ μ£Ό μ€λ λκ° μ’
λ£λλ©΄ λ°λͺ¬ μ€λ λλ κ°μ μ μΌλ‘ μλ μ’
λ£λ©λλ€. μ μ© μλ‘λ μλ μ μ₯, κ°λΉμ§ 컬λ ν° λ±μ΄ μλλ° μ΄ κΈ°λ₯λ€μ μ£Ό μ€λ λκ° μ’
λ£λλ©΄ κ°μ΄ μ’
λ£λ©λλ€. λ°λͺ¬ μ€λ λ λ΄μ©μ μμ±ν΄μ€ ν public class DaemonThread extends Thread{ public void save(){ // μλ μ μ₯ } public void run(){ save(); } } λ©μΈ μ€λ λμμ setDaemon μ ν΄μ£Όλ©΄ λλ€. public class mainThread(){ public static void main(String[] args){ DaemonThread daemonThread = new Dae..
μ€λ λλ μ€νλκΈ° μνμ μ€ν μνλ₯Ό λ²κ°μκ°λ©΄μ μμ μ run() λ©μλλ₯Ό μ‘°κΈμ© μ€νν©λλ€. κ·Έ ν λμ΄μ μ€νν μ½λκ° μμ λ μ’
λ£ μνκ° λ©λλ€. μ€λ λ κ°μ²΄ μμ± -> start() -> μ€νλκΈ°(μ€μΌμ€λ§μΌλ‘ μΈν΄) μ€ν -> μ’
λ£ - μ€λ λ μ€μΌμ€λ§μΌλ‘ μ νλ μ€λ λκ° cpuλ₯Ό μ μ νκ³ run() λ©μλλ₯Ό μ€ννλ€ (μ€ν μν) - μ€λ λ μ€μΌμ€λ§μ μν΄ λ€μ μ€νλκΈ° μνλ‘ λμκ° μ μλ€.(μ€νλκΈ° μν) μ΄λ»κ² μ μ΄ν κΉ? 1. μ£Όμ΄μ§ μκ°λμ μΌμ μ μ§ sleep() μ€ν μ€μΈ μ€λ λλ₯Ό μΌμ μκ° λ©μΆ μ μκ² νλ€. Thread ν΄λμ€μ μ μ λ©μλμΈ sleep() μ μ¬μ©νλ€. Thread.sleep(1000) // 1μ΄ -> λ°λ¦¬μΈμ»¨λ (1/1000) λ¨μ * μ£Όμ΄μ§ μκ°μ΄ λκΈ°μ ..