κ°λ°μ μ΄λκ³Ό κ°λ€. λΆλͺ
곡λΆκ° λ§μ΄ νμνμ§λ§ 곡λΆλ§ λ§μ΄ νλκ² λ³΄λ€ μ€μ λ‘ ν΄λ³΄λκ²μ΄ μ’λ€. λν νλ²μ λ§μ΄ νλ€κ³ ν΄μ κΎΈμ€ν¨μ΄ μλ€λ©΄ μ€λ ₯μ΄ λ¨λ²μ λμ§ μλλ€. κ·Έλ λ€κ³ μ€μ λ‘ ν΄λ³΄λκ²λ§ νλ€λ©΄ ν¨μ¨μ μ΄μ§ λͺ»νκ³ , μ’μ§ λͺ»ν μ΅κ΄μ΄ μκΈΈ μ μλ€. κ·Έλ¬λ―λ‘ κ³΅λΆνλκ²κ³Ό μ§μ κ°λ°νλ κ²μ μ μ ν λ³ννλκ²μ΄ μ’λ€. νλ μμν¬λ₯Ό μμ΄λ€ μ λ³Έμ§μ μ΄ν΄νλκ²μ λ€λ₯΄λ€. κ°λ°μ€λ ₯μ λλ¦¬κ³ μνκΈ° μν΄μλ λꡬμ μλ ¨λμ λ³Έμ§μ λν μ΄ν΄λ₯Ό λ³νν΄μΌ νλ€. μ»΄ν¨ν
μ¬κ³ νκΈ° μꡬμ¬νμ μ¬μ©μμ μꡬμ¬νμ νλ‘κ·Έλλ° μΈμ΄λ‘ μ»΄ν¨ν°μκ² μ λ¬νλ κ²μ΄λ€. λ°λΌμ μꡬμ¬νμ λ°μ΄ν°μ κ΄μ μΌλ‘ μκ°ν΄μΌλ§ μ»΄ν¨ν
μ¬κ³ μ μΆλ°μ μ΄λΌκ³ ν μ μλ€. λ°μ΄ν° κ΄μ μΌλ‘ μΈμνλ κ³Όμ μ λ³΄ν΅ μ§κ΄μ μΌλ‘ μ΄ν΄νκ³ λμ΄κ°..
μ 체 κΈ
jwt ν ν° μ μΆκ°νλ λμ€ μ΄λ―Έ μ¬μ©μ€μΈ μλΉμ€κ° μ¬μ©νκ³ μλκ±Έ μΆμννλ μμ
μ€μ μ λ€λ¦μ μ¬μ©ν νκΈ°μ΄λ€. μλΉμ€ λ§λ€ λ€λ₯Έ ν ν°μ μ§ μκ°, νμ΄λ‘λλ₯Ό κ°κ³ μλλ° μ€λ²λΌμ΄λ©μ μ¬μ©νμλλ° μ½λ리뷰 λ κ°μ κΈ°λ₯μ νλ©΄μ μ½κ°μ νλμΆκ°λ§ λλκ²μ΄λΌμ μ λ€λ¦μ μ¬μ©ν΄λ³΄λκ² μ΄λ»λλ νΌλλ°±μ λ°μλ€. λ¬Όλ‘ μ²μ μ¨λ³΄λκ±°λΌμ μκ°μ΄ μ€λ κ±Έλ Έλ€. μ¬λ―Έμμκ³ μ μΈκ³μλ€ (μ λλ‘ μ΄κ²λ μλμ§λ§) μλμ κ°μ΄ μ λ€λ¦ ν΄λμ€λ₯Ό μμ±νκ³ issue (ν ν°λ°ν) μ μ€ννμ λ μ λ€λ¦ νμ
μΌλ‘ μμ± νμλ€ @Data @AllArgsConstructor public class TokenPayload { private T tokenPayload; public T getTokenPayload() { return ..
κ°λ¨ν κΈ°λ³Έ λ±λ‘ νμ΄μ§λΌμ λ€λ₯Έμ½λμ λκ°μ΄ νλ€κ° μ½κ° λ³νλ₯Ό μ£Όμλ€. html μμ ajaxλ‘ μλ²μκ² μμ²ν λ success μ¦ ν΅μ μ μ±κ³΅νκ³ java μμ return μΌλ‘ ok (boolean) μ λ΄λ €μ£Όλ©΄ message λ₯Ό λμ΄μ€λ€. const updateDriver = function () { if (confirm("λ±λ‘νμκ² μ΅λκΉ?")) { $.ajax({ type: "POST", url: "/create", data: $("#createForm").serialize(), dataType: 'json', success: function (r) { alert(r.message); if (r.OK) { location.href = '/list'; } }, error: function (xh..
μ½νλ¦° 곡λΆλ₯Ό μμνλ €κ³ SpringBoot - kotlin νλ‘μ νΈλ₯Ό μΈν
νλ κ³Όμ μ
λλ€ κ³΅μλ¬Έμ μ°Έκ³ νμλ©΄ λμμ΄ λ κ² κ°μ΅λλ€ https://spring.io/guides/tutorials/spring-boot-kotlin/ 1. νλ‘μ νΈ μμ± μμ κ°μ΄ μΈν
νλλ° μ€νλ§λΆνΈ λ²μ μ΄ λ§μμ κ±Έλ Έλ€. μΈν
리μ μ΄μμ μ¬μ©κ°λ₯ν λ²μ μΌλ‘ μλ μΈν
ν΄μ€κ² κ°μ§λ§ μμ¬μ€λ¬μ΄ λ§μμ 곡μννμ΄μ§μ λ€μ΄κ° νμΈνλ€. https://spring.io/projects/spring-boot#support μλλ‘ μ€ν¬λ‘€μ λ΄λ¦¬λ©΄ μκΉμ μλ―Έλ₯Ό νμΈν μ μλ€. μ°μ νΉλ³ν μ΄λ€ νλ¬κ·ΈμΈμ μ¬μ©ν μ§ μκ°ν΄λκ² μκΈ° λλ¬Έμ νλ‘μ νΈ μμ±μ μ€μ λμ΄μλ 3.0.4 λ‘ νλ‘μ νΈλ₯Ό μΈν
νλ€. Incompatible beca..
μΆκ°λλκ²λ μμ ν κ²λ λ§μ λλμ§ μμκ² κ°λ νλ‘μ νΈκ° λ§λ¬΄λ¦¬λμ΄ κ°λ€. μ€κ°μ€κ° κ°μ΄ κ°λ°νλ κ°λ°μλΆμ΄ λ€λ₯Έ νλ‘μ νΈμ λμμ΄ νμν΄ νΌμ κ°λ°μ ν΄μΌ νλ κΈ°κ°μ΄ μμλ€. κΈ°κ°μμ λλ΄μ§ λͺ»ν κΉλ΄ λ무 λΆμνλ€. (κ·Έλ§νΌ λ무 μμ§νλ €κ³ νμλ€λκ±Έ κΉ¨λ¬μλ€ π) μ΄λλ―Ό νμ΄μ§μΈλ§νΌ λ³΄ν΅ API κ°λ°λ³΄λ€ ν¨μ¬ 볡μ‘νκ³ μ€λκ±Έλ Έλλ° μ€μν΄μ λ€μ μ볡νλ λΆλΆλ€λ λ§μλ€.(κΈ°νμ μΌλ‘) 맀λμ λκ»μ μ€κ°μ€κ° νΌλλ°±κ³Ό νμΈμ ν΄μ£Όμ
μ λ무 ν° λμμ΄ λμ΄μ λ€νμ΄μ§λ§(λ νΌμνμΌλ©΄ μ λ§ μ’μ νμκ² κ°λ€...) μνλ³νμ λν μ ν¨μ± κ²μ¬ νκΈ° state machine μ μλ €μ£Όμ
μ κ²μνμ¬ μμ΄ν¨λλ‘ λΉμ·νκ² μμ±νλ€. μ£Όλ¬Έμνμ λ°λ₯Έ λ³νκ° λ³΅μ‘νκ² λμ΄μμ΄μ μ΄ν΄νλλ° λ§μ μκ°μ΄ κ±Έλ Έλ€. μ΄λ―Έ μ‘΄..
ν λ΄ μκ°.... No property xxxx found for type xxx κΈ°μ‘΄μ μλ repository μμ μΆκ°μ μΌλ‘ querydsl μ μ¬μ©νλ €κ³ custom interface μ impl class λ₯Ό μμ±νλ€ κ³μν΄μ μ€νλ§μ΄ λΉμ λͺ»μ°Ύμμ ꡬκΈλ§ ν΄λ³΄κ³ λ©μλ μ΄λ¦λ λ°κΎΈλ©° μ¬λ¬κ°μ§ μλνλ€κ° λ€μ λΈλ‘κ·ΈκΈμ λ°κ²¬νλ€. https://www.skyer9.pe.kr/wordpress/?p=6507 QueryDSL No property λ©μλλͺ
found for type μν°ν°λͺ
! – μꡬ리μ κΈ°μ λΈλ‘κ·Έ QueryDSL No property λ©μλλͺ
found for type μν°ν°λͺ
! ν΄λμ€λͺ
xxxRepository xxxRepositoryCustom xxxRepositoryImp..
κ°λ°μλ‘ μ·¨μ
νμ¬ 2λ
μ΄λΌλ μκ°μ΄ μ§λ¬λ€. μ΄λ€ νλ‘μ νΈλ₯Ό νκ³ λ νκ³ λ₯Ό μ°μ§λ λͺ»ν κ² κ°λ€. λ΄κ° λ ν μ μκ³ νλμ§ κΈ°μ΅μ΄ μλλ€... μμΌλ‘ κΎΈμ€νκ² κΈ°λ‘μ΄λ νκ³ λ₯Ό ν΄μΌ ν κ² κ°μ λ¬λ§λ€ νκ³ λ₯Ό μ°κΈ°λ‘ νλ€. κ°λ°μλ‘μμ μ±μ₯ κ°μ ν΄μΌν μ μ‘°κΈν¨: κ°λ°μ μμνμ λμ λΉκ΅νμ λ λ§μ΄ μ±μ₯νμ§λ§ μμ μΈμμλ μμ²λ μ¬λμ΄ λ무 λ§λ€ μ‘°κΈν΄νμ§ μλλ‘ λ
Έλ ₯νμ ν΄μ: ν΄μν λλ μΌ μκ°μ νμ§ λ§μ λΉκ΅: μλκ° λλ¦°κ±°μ§ λ©μΆ°μλ€κ³ μκ°ν μ μ μμΌλκΉ λΉκ΅νμ§ μλλ‘ λ
Έλ ₯νμ μ½μ: μΌμ μ λ§μΆκΈ°κ° λ무 μ΄λ ΅λ€ 곡λΆ: μκΎΈ νκ³λλ©΄μ μνκ² λλ€. μ§κΈ νλ κ±° λΌλ λ§λ¬΄λ¦¬ν΄λ³΄μ μνλ μ μμ§ ν¬κΈ°νμ§ μμλ€ μ¬μ€ λ΄κ° κ°λ°μ μ 리ν μ±κ²©μ μλλ€. λ
Όλ¦¬μ μΈ λΆλΆμμ μ½νκ³ μ½..
Hibernate κ° λμ§? νμ΄λ²λ€μ΄νΈ ORMμ μλ° μΈμ΄λ₯Ό μν κ°μ²΄ κ΄κ³ 맀ν νλ μμν¬μ΄λ€. κ°μ²΄ μ§ν₯ λλ©μΈ λͺ¨λΈμ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ‘ 맀ννκΈ° μν νλ μμν¬λ₯Ό μ 곡νλ€. JPAμ ꡬν체μ ν μ’
λ₯λ‘, JPA μΈν°νμ΄μ€λ₯Ό ꡬννλ©° λ΄λΆμ μΌλ‘ JDBC API λ₯Ό μ¬μ©νλ€. Hibernate λ SQL μ μ§μ μ¬μ©νμ§ μκ³ λ©μλ νΈμΆλ§μΌλ‘ 쿼리λ₯Ό μνν©λλ€. ( SQL λ°λ³΅μμ
μ νμ§ μμλ λλ€ ) 컬λΌμ΄ λ³κ²½λμμ λ, ν
μ΄λΈκ³Ό κ΄λ ¨λ DAO μ νλΌλ―Έν°, 쿼리 ,SQL λ±μ λμ μνν΄μ£ΌκΈ° λλ¬Έμ νΉμ λ²€λμ¬μ μ’
μμ μ΄μ§ μμ΅λλ€. μ΄λ¬ν νΉμ§μ μ μ§λ³΄μ μΈ‘λ©΄μμλ ν° μ₯μ μ
λλ€. μλ₯Ό λ€μ΄ Mysql μ μ¬μ©νλ€κ° ORCLE λ‘ λ³κ²½νλλΌλ Hibernate λ λ³κ²½ν ORCLE λ‘ ..
κ°λ° νλ©΄μ λΉμ°ν λΆλΆμ΄μμ§λ§ λμκ² μλ‘κ² λ€κ°μλ μμΈμ²λ¦¬ ... γ
리뷰 ν΄μ£Όμλ 맀λμ λμ΄ λ무 μ μλ €μ£Όμ
μ μ 리 ν΄λ΄
λλ€ ( 격ν κ°μ¬ π₯Ή ) μμ λͺ©μ΄ μ°κ΄λμ΄ μ΄μ΄μ§μ§λ μκ³ μν©λ§λ€ μμΈμ²λ¦¬ νλ λΆλΆμ λ©λͺ¨νμ΅λλ€. μμΈ λ°μ μ μ‘°μΉλ₯Ό λͺ»νλ κ²½μ° & κ΄λ¦¬νμ§ λͺ»νλ κ²½μ° 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: μ΄λ νκ²½μμ..