μ€λ μ€νλ§ μλ ¨μ£Όμ°¨ μλ£ π μ€μ΅ μ§ννλ©΄μ λλ Entity λ₯Ό μμ±μλ₯Ό λ§λ€λ κ²μ λ³λ‘ μ νΈνμ§ μκ³ , @Builder ν¨ν΄μ μμ±νλ κ²μ κ°μ₯ μ’μν¨! π₯ κ·Έλ¦¬κ³ RequestDto μμ toEntity(), ResponseDto μμ of() λ‘ Entity -> dto, dto -> Entity λ₯Ό ν΄μ€λ€! public static ProductResponseDto of(Product product) { return ProductResponseDto.builder() .id(product.getId()) .title(product.getTitle()) .link(product.getLink()) .image(product.getImage()) .lprice(product.getLprice(..
TILπ₯
νλ‘μ νΈ S.A μμ±μ λν΄ νν°λμ΄ νΌλλ°±μ ν΄μ£Όμ
¨λ€ https://hyeyun.tistory.com/entry/231121-TIL 23.11.21 TIL μ€νλ§ ν νλ‘μ νΈ μμ μ€λμ μ£Όμ μ νκΈ°μ S.W μμ± νλ‘μ νΈ λͺ
: μΆλ° λΉλμ€ μ¬ν νλ‘μ νΈ μκ° : μν μκ° λ΄μ€νΌλ νμ μꡬ κΈ°λ₯μ λ¨Όμ ꡬνν ν, μΆκ° κΈ°λ₯μ ꡬννλ κ²μ λͺ©ν hyeyun.tistory.com μ΄μ TIL μλ μ¬λ Έλλ°, API λͺ
μΈμμμ μμ ν λΆλΆμ λ§μ΄ μλ €μ£Όμ
¨λ€. μμ±ν λΉμ Restful νκ² μμ±νλ€κ³ λλ¦ κ³ μ¬νλλ°, λ΄κ° μκ°νλ κ²μ΄ μ½κ° μλͺ»λ λ°©ν₯μ΄μλκ²! νλ‘ν μ‘°ν APIλ₯Ό GET /api/profile μ΄λ κ² μμ±νλλ°, νν°λκ»μ λ©μλμ URL λ§μΌλ‘λ κΈ°λ₯μ μκΈ° μ΄λ ΅λ€κ³ νμ
¨λ€...
μ€λμ λ§μ΄νμ΄μ§, νλ‘ν μμ , λΉλ°λ²νΈ μμ νμ΄μ§λ₯Ό λ§λ€μ΄λ° μμ ν λΉλ°λ²νΈ, νλ‘ν μμ² DTO @Data public class PasswordRequestDto { // TODO: 11/21/23 νμ κ°μ
κ³Ό λΉλ°λ²νΈ μ μ½μ‘°κ±΄ λμΌνκ² μ€μ ν΄μ£ΌκΈ° @NotBlank private String password; @NotBlank private String passwordConfirmation; }@Data public class ProfileRequestDto { @NotBlank @Pattern(regexp = "^[κ°-ν£]{2,5}", message = "νκΈλ§ μ¬μ©νμ¬ 2-5μλ‘ μμ±ν΄μ£ΌμΈμ.") private String name; @NotBlank private String introdu..
μ€νλ§ ν νλ‘μ νΈ μμ μ€λμ μ£Όμ μ νκΈ°μ S.W μμ± νλ‘μ νΈ λͺ
: μΆλ° λΉλμ€ μ¬ν νλ‘μ νΈ μκ° : μν μκ° λ΄μ€νΌλ νμ μꡬ κΈ°λ₯μ λ¨Όμ ꡬνν ν, μΆκ° κΈ°λ₯μ ꡬννλ κ²μ λͺ©νλ‘ μ‘μλ€! κΈ°λ³Έμ μΆ©μ€ν!!π₯ 1μ°¨λ‘ μ ν κΈ°λ₯μ νμκ°μ
/λ‘κ·ΈμΈ νλ‘ν μμ -> λΉλ°λ²νΈ, μκΈ°μκ° κ²μκΈ μμ±/μμ /μμ λ©μΈνμ΄μ§, νλ‘ν νμ΄μ§, κ²μκΈ μμΈ νμ΄μ§ API λͺ
μΈμ μμ΄μ΄νλ μ μ°λ¦¬ νμλ€μ λ€λ€ μ²μ λ°±μλ κ°λ°μ γ
π
ERD λ ν¬μ§ν 리λ μμ±νκ³ κΈ°λ³Έ νλ‘μ νΈ μμ±! Git Branch μ 리νκ³ , κΈ°λ³Έ Entity λ μΆκ°νλ€. https://github.com/kimhyeyun/movie-news-feed GitHub - kimhyeyun/movie-news-feed: ν2 μΆλ°..
μ€νλ§ μλ ¨ 3μ£Όμ°¨ μκ°! κ°μ μ§ν μ€ @EnableGlobalMethodSecurity(securedEnabled = true) μ΄λ
Έν
μ΄μ
μ¬μ©μ΄ μμλ€. κ·Έλ°λ° deprecated λλ€λ μλ¦Ό! μ΄ μ΄λ
Έν
μ΄μ
μ 컨νΈλ‘€λ¬ λ΄μ urlμ νΉμ κΆν μ€μ μ ν΄μ£Όλ @Secured(κΆν μ΄λ¦) μ΄λ
Έν
μ΄μ
μ μ¬μ©ν μ μλλ‘ ν΄μ£Όλ μν μ νλ€. λμ @EnableMethodSecurity(securedEnabled = true) μ μ¬μ©ν΄μ£Όλ©΄ λλ€! μ§ννλ©΄μ μ½λλ₯Ό λΆλͺ
μ μ
λ ₯νλλ°, λ‘κ·ΈμΈ μμ μΈμ¦νλ λΆλΆμμ μ±κ³΅ λ©μλλ‘ μλ€μ΄κ°λλ°, ν ν° κ²μ¦νλ λΆλΆμμ, μ ν¨νμ§ μμ JWT μλͺ
μ΄λΌλ©° μμΈμ²λ¦¬κ° λμλ°....... μ κ·Έλ¬μ§.... νλ€νλ€ ν ν° μ€νΈλ§μμ μ BEARER_PREFIXλ₯Ό ..
μ΄μ μκ³ λ¦¬μ¦ λ¬Έμ λ₯Ό νμ§λͺ»νλ€... ν루μ 2λ¬Έμ νΈλκ² κ³νμΈλ°γ
γ
γ
γ
γ
κ·Έλμ μ€λμ 4λ¬Έμ !!! νμ΄λ°~! μμ¦ λ¬Όμ£ΌκΈ° μνΈμ§ 보λ μ¬λ―Έμ νΉ~ κ½€λ μ±μ·¨κ°μ΄ λκ»΄μ§λ λ°©μ!!!! κ·Έλ¦¬κ³ μ€λλ λ©΄μ μ€λΉκ° κ±°μ λ€ μ°¨μ§...γ
κ²°κ΅ μ΄μ λ€μ§ μ€λ λͺ»μ§ν΄ μ΄μ ν λ€μ§ μ€λλ ! λ΄μΌμ μ λΆ λ€ νμ λ무 νλμλ§ λͺ°λνλ κ²λ μ’μ§ μλ€
μ€λμ 9μκΉμ§ μΌμ΄λκΈ° μ€ν¨νλ€... μ΄μ , μ€λ λ€ λ§€λμ λκ» μ νλ°μλ°... π΄ Spring security, JWTλ₯Ό μ΄μ©ν νμκ°μ
/λ‘κ·ΈμΈ, Validation μ λν΄ νμ΅νλ€. μ½λλ₯Ό μ§κ³ , κΈ°λ₯μ ꡬνν¨μ μμ΄μ ν° λ¬Έμ λ μμ§λ§, μμ§ μ΄λ‘ μ μ½νλ€λ κ²μ λ λκΌλ€.... λ΄μΌ 1μ£Όμ°¨ κ³Όμ λ₯Ό μ§ννκΈ° μ μ ν λ²λ λ£κ³ μ 리ν νμ κ³Όμ λ₯Ό μ§νν΄μΌκ² λΉ..... μ¬μ€ μμ¦ λ©΄μ μ€λΉλ₯Ό νλλΌ λ무 μ μ μ΄ μλ€..... κ·Έλμ λκ° λ΄λ°°μΊ μ λ무 μ κ²½μ λͺ»μ΄ λλ μ΄λμλ μλλ€. λ€μ μ΄μ¬μ μ°Ύκ³ ,!!!!!!!!!!! μκ°μ μ νν μ νκ³ ! λ΄ μ§νμ§ μκ³ ! κ³ν λΉ‘! μΈμμ λ λ§λ¦¬, μΈ λ§λ¦¬ ν λΌ λ€ λ¨Ήλλ€!!!π°π°π°π°π°π°π°π°π°
μ€νλ§ μλ ¨ μ£Όμ°¨ κ°μ μμ! λΉ μλ λ±λ‘ λ°©λ², λμΌν νμ
μ λΉμ΄ μ¬λ¬ κ°μΌ κ²½μ°, μΈμ¦κ³Ό μΈκ°λμ λν΄ κ°μλ₯Ό λ€μλ€. κ±°μ λΉμ @Component μ λ
Έν
μ΄μ
μ μ΄μ©ν΄μ μλ μ€μΊμ ν΅ν΄ μ¬μ©νκΈ° λλ¬Έμ , μλμΌλ‘ λ±λ‘νλ λ°©λ²μ λν΄ μ€μ΅μ ν΄λ³Έ κ²μ κ±°μ μ²μμ΄μλ€ 'νΈν μλ λ±λ‘μ΄ μλλ° μ μλμ μ¬μ©νμ§..?' νλλ° κ³΅ν΅ λ‘μ§μ΄λ μλ¬ μ μ°ΎκΈ° μ½λλ‘ μλ λ±λ‘μ νλ€λ κ²μ μμλ€. κ·Έλ¦¬κ³ λμΌν νμ
μ λΉμ λν΄ λ§λ€μ΄ λ³Έμ μ΄ μμ΄μ, @Qualifier, @Primary μ λν΄μλ λͺ°λλλ° @Qualifier("name")λ μ΄λ¦ μ€μ , @Primaryλ μ°μ κΆ λΆμ¬ μΈ κ²μΌλ‘ μ΄ν΄νλ€! μΈμ¦κ³Ό μΈκ°μ μ°¨μ΄μ μ΄ κ΅μ₯ν ν·κ°λ Έλλ°, μΈμ¦μ λ‘κ·ΈμΈ! μΈκ°λ νμ/..