πνλ‘κ·Έλλ°/Next.js
ν΄κ²°λ°©λ² νλ‘μ νΈ ν΄λμμ .next νμΌμ μμ νκ³ npm run dev μν μμΈμ€λͺ
next.jsμ μ²μ μ
λ¬Ένκ³ intellijλ₯Ό ν΅ν΄μ μν νλ‘μ νΈλ₯Ό devλ‘ μ€ννκ³ μ νλ€. κ·Έλ°λ° λλ http://localhost:3000μμ μλ²κ° μ€νλμλ€λ λ©μμ§λ§ νμΈνκ³ μ λμλ 보λ€λΌκ³ νκ³ μ€ννλ€. κ·Έλ¬λ μ μμ΄ λΆκ°νμλ€. μλνλ©΄ μ μμ μΌλ‘ μλ²κ° μ¬λΌμ€λ €λ©΄ μμ μ¬μ§κ³Ό κ°μ΄ λ€ λμμΌνλ κ²μ΄λ€. μ΄μ©λ€ 보λ powershell λλ μλ‘μ΄ νλ‘μ νΈμμ μ λλ κ²μ 보μ λ무 μμν΄ νλ€ κ·Έλ¬λ μμ€μ ν΄κ²° λ²μ μ°Ύμλ€. λ°λ‘ νλ‘μ νΈ ν΄λμμ .next νμΌμ μμ νκ³ npm run dev μννλ©΄ λλ κ²μ΄λ€. https://stackoverflow.com/questions/7..
πνλ‘κ·Έλλ°
λμ νλ‘κ·Έλλ° μ€ν¬ μ€ν λ³ν 4νλ
: Eclipse JSP/Servlet λ© λͺ¨λ₯΄κ³ μμν μΉ νλ‘κ·Έλλ° μ¬νμν 3λ
μ°¨ : Eclipse, JSP/Servlet νμ¬μ
무 ν΄μ λ§λ€κ² λλ€ μ¬νμν 4λ
μ°¨ : Intellij, Mustache/Spring Boot λ¬΄λ£ ν
νλ¦ΏμΌλ‘ ννμ΄μ§λ₯Ό λ§λ€λ€. JPAλ₯Ό μ΅νλ€ μ¬νμν 5λ
μ°¨ : Intellij, Thymeleaf/Spring Boot ν
νλ¦Ώμ λμ μ£Όκ³ κ΅¬μ
νλ€. λ€ μμ μλΉμ€λ₯Ό λ°μΉνλ€. μ¬νμν 5λ
μ°¨ : Intellij, Next.js(react), Spring Boot(Java) SPAμ λνμ¬ μ νλ€. μ§μμ μΈ Spring Boot λΉλμ νΌλ‘κ°μ ννΌνμ¬ νλ‘ νΈμνΈ κ°λ°μ μ΄μ μ λλ €λ³΄κ³ μ νλ€.
πνλ‘κ·Έλλ°
@Getmapping μμ modelλ‘ μ΄λ€ λ°μ΄ν°μΈμ§ λ·°μ μ λ¬ν΄μΌμ§ μΈμμ΄ κ°λ₯νλ€. κ·Έ νμ μνλ λ‘μ§μ μ§ννλ©΄ λλ€.
πνλ‘κ·Έλλ°
μ£Όμμ¬ν μΊμ±μ€μΈ λ°μ΄ν°μ save λ± λ°μ΄ν°λ₯Ό μ μ₯νκ³ μ ν λ λΉκ΅κ΅¬λ¬Έμ΄ μμΌλ©΄ λ°λμ @CacheEvict μ΄λ
Έν
μ΄μ
μΌλ‘ μΊμλ₯Ό Purgeνκ³ ν΄μΌ κ°μ μ€λ³΅μ½μ
μ λ°©μ§ν μμλ€. μ€μ λ°©λ² Spring Bootμμ μΊμ± κΈ°λ₯μ μ¬μ©νλ €λ©΄, λ¨Όμ @EnableCaching μ΄λ
Έν
μ΄μ
μ ν΅ν΄ μΊμ±μ νμ±νν΄μΌ ν©λλ€. μλ₯Ό λ€μ΄, μν°ν΄ μ 보λ₯Ό μ μ₯νλ μ ν리μΌμ΄μ
μμ μΊμ±μ μ¬μ©νκ³ μ νλ€λ©΄ λ€μκ³Ό κ°μ΄ μ€μ ν©λλ€. 1.μΊμ±μ νμ±ννλ €λ©΄, λ©μΈ λ©μλμ μλ ν΄λμ€μ @EnableCaching μ΄λ
Έν
μ΄μ
μ μΆκ°ν©λλ€. @SpringBootApplication @EnableCaching public class Application { public static void main(String[] args..
πνλ‘κ·Έλλ°
Spring Bootμμ JPAμ ν¨κ» μ¬μ©λλ Entity ID μμ± μ λ΅μ μ£Όλ‘ λ°μ΄ν°λ² μ΄μ€μ κΈ°λ³Έ ν€(primary key)λ₯Ό μλ μμ±νλ λ°©μμ μ¬μ©ν©λλ€. μ΄λ₯Ό μν΄ λ€μν μ λ΅μ΄ μ¬μ©λλ©°, μ£Όμ μ λ΅μ λ€μκ³Ό κ°μ΅λλ€. GenerationType.AUTO (κΈ°λ³Έ μ λ΅) μ΄ μ λ΅μ JPAκ° λ°μ΄ν°λ² μ΄μ€μ λ°λΌ μλμΌλ‘ μ ννλ ID μμ± μ λ΅μ
λλ€. λ°μ΄ν°λ² μ΄μ€μ λ°λΌ GenerationType.SEQUENCE, GenerationType.IDENTITY, GenerationType.TABLE μ€ νλλ₯Ό μ¬μ©νκ² λ©λλ€. @Entity public class MyEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long ..
πνλ‘κ·Έλλ°
λ§μ½ λΉ μ리λ₯Ό ν μΉΈμ© λΉκΈ°λ κ³Όμ μμ λ λ€λ₯Έ λΉ μλ¦¬κ° λ°μνλ€λ©΄, μ΄λ₯Ό μ²λ¦¬νκΈ° μν΄μλ λ°λ³΅μ μΌλ‘ λΉ μ리λ₯Ό κ²μ¬νκ³ νμν κ²½μ° λΉ μ리λ₯Ό μ±μμ£Όλ μμ
μ μνν΄μΌ ν©λλ€. λ€μμ λΉ μ리λ₯Ό κ²μ¬νκ³ νμν κ²½μ° λΉ μ리λ₯Ό μ±μμ£Όλ μμ μ½λμ
λλ€. SET @current_no = 0; UPDATE ν
μ΄λΈμ΄λ¦ SET no = (@current_no := @current_no + 1) WHERE no IS NOT NULL ORDER BY no ASC; μ μ½λλ λ¨Όμ λ³μ @current_noλ₯Ό 0λ‘ μ΄κΈ°νν ν, no κ°μ΄ NULLμ΄ μλ λͺ¨λ νμ λ²νΈ μμλλ‘ μ
λ°μ΄νΈ ν©λλ€. μ΄λ, μ
λ°μ΄νΈν λλ§λ€ @current_no λ³μλ₯Ό 1μ© μ¦κ°μμΌμ λ²νΈλ₯Ό λΆμ¬ν©λλ€. μ΄λ κ² νλ©΄ λΉ μλ¦¬κ° ..
πνλ‘κ·Έλλ°
μλ μ½λλ νμ κ°μ
μ μ΄λ©μΌ μ£Όμμ μ€λ³΅μ νμΈνκΈ° μν JPA Repository ν¨μμ
λλ€. @Query μ΄λ
Έν
μ΄μ
μ μ¬μ©νμ¬ λ¬Έμμ΄ emailμ 맀κ°λ³μλ‘ λ°μ΅λλ€. μ΄ λ μ£Όμν΄μΌ ν μ μ v.email = :email λΆλΆμ
λλ€. String emailμ 맀ννκΈ° μν΄μλ μ½λ‘ (:)μ emailμ λ°λ‘ λΆμ¬μ μμ±ν΄μΌ ν©λλ€. μ΄λ₯Ό μ§ν€μ§ μμΌλ©΄ null Exceptionμ΄ λ°μν μ μμ΅λλ€. λ€μμ μ΄λ©μΌ μΈμ¦μ ν΅ν νμμ μ‘΄μ¬ λ° μνλ₯Ό νμΈνκ³ κ°μ
μ μΈμ¦μ μ²λ¦¬νλ λ‘μ§μΌλ‘ μλ₯Ό λ λ€. @Repository public interface SignUpRepository extends JpaRepository { /** * μ£Όμ΄μ§ μ΄λ©μΌ μ£Όμκ° λ°μ΄ν°λ² μ΄μ€μ μ‘΄μ¬νλμ§ νμΈν©λλ€. ..
πνλ‘κ·Έλλ°
Gradle dependencies { implementation 'com.warrenstrange:googleauth:1.4.0' } μμ€μ½λ public String generateOtp2() { // Google Authenticator μ±μμ μμ±λ 16μ리μ λΉλ°ν€ String secretKey = "FCJ2I4M76ZOGE5NG52LK236HKRRCK6P4"; // GoogleAuthenticator μΈμ€ν΄μ€ μμ± GoogleAuthenticator gAuth = new GoogleAuthenticator(); // νμ¬ μκ°μ ν΄λΉνλ OTP μμ± return "XXX Service : " + gAuth.getTotpPassword(secretKey); } RestControllerλ‘ API..
πνλ‘κ·Έλλ°
νμ΄μ¬μμλ try-catch λ¬Έμ μ¬μ©νμ¬ μμΈ μ²λ¦¬λ₯Ό ν μ μμ΅λλ€. λ€μμ try-catch λ¬Έμ μ¬μ©νμ¬ μ¬λ¬λ² μμΈλ₯Ό μ²λ¦¬νλ μ½λμ
λλ€. try: # μμΈ λ°μ κ°λ₯ν μ½λ result = some_function() except ValueError: # ValueError μμΈ μ²λ¦¬ print("ValueError occurred") except IndexError: # IndexError μμΈ μ²λ¦¬ print("IndexError occurred") except Exception as e: # κ·Έ μΈ λͺ¨λ μμΈ μ²λ¦¬ print("An error occurred:", e) finally: # μμΈ λ°μ μ¬λΆμ μκ΄μμ΄ μ€νλλ μ½λ print("Execution complete") μ μ½λ..