@ToString(doNotUseGetters = true)
- toString() λ©μλ μλ μμ±
- getter λ©μλ μ¬μ©νμ§ μκ³ νλμ κ°μ μ§μ μ κ·Όνμ¬ toString() λ©μλ μμ±
@Version
- JPA/Hibernateμμ μν°ν°μ λ²μ κ΄λ¦¬ π @Versionμ΄ λΆμ νλλ μν°ν°μ λ²μ μ λνλ
- DB λμμ± λ¬Έμ λ°©μ§νλ λ° μ¬μ©
- λκ΄μ λ½(Optimistic lock) μ§μ
- μν°ν°κ° μμ λ λλ§λ€ μλμΌλ‘ μ¦κ°
- DBμμ μν°ν°λ₯Ό μ
λ°μ΄νΈν λ, ν΄λΉ μν°ν°μ λ²μ μ΄ μ΄μ μ λ‘λλ λ²μ κ³Ό μΌμΉνμ§ νμΈ
- λ§μ½ μΌμΉνμ§ μλλ€λ©΄, λ€λ₯Έ νΈλμμ μ΄ ν΄λΉ μν°ν°λ₯Ό λ¨Όμ μμ νμΌλ―λ‘ OptimisticLockException λ°μ
β³οΈ λκ΄μ λ½ (Optimistic Locking) μ΄λ ?
π λ°μ΄ν°λ² μ΄μ€μμ λμμ± λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μ¬μ©νλ λ°©λ² μ€ νλ
- λ°μ΄ν° μ½κΈ° : ν΄λΌμ΄μΈνΈλ DBμμ λ°μ΄ν°λ₯Ό μ½κ³ , νμ¬ λ²μ μ 보λ ν¨κ» κ°μ Έμ΄
- μμ μλ : ν΄λΌμ΄μΈνΈλ λ°μ΄ν°λ₯Ό μμ ν ν, μ λ°μ΄νΈ μμ²μ λ³΄λΌ λ κ°μ Έμ¨ λ²μ μ 보λ₯Ό ν¨κ» 보λ
- λ²μ νμΈ : DBμ μ μ₯λ νμ¬ λ²μ κ³Ό ν΄λΌμ΄μΈνΈκ° λ³΄λΈ λ²μ μ 보 λΉκ΅
μΌμΉνλ κ²½μ° → λ°μ΄ν°κ° μμ λμ§ μμμΌλ―λ‘ μ λ°μ΄νΈλ₯Ό μννκ³ λ²μ μ 보 μ¦κ°
λΆμΌμΉνλ κ²½μ° → λ°μ΄ν°κ° μ΄λ―Έ μμ λμμΌλ―λ‘ μ λ°μ΄νΈλ₯Ό μ€ν¨νκ³ μΆ©λ λ©μμ§ λ°ν
π λ€μμ μ¬μ©μκ° λμμ λ°μ΄ν°μ μ κ·Όνλ μΉ μ΄ν리μΌμ΄μ μμ μ μ©νκ² μ¬μ©λ¨
βοΈ λΉλκ΄μ λ½( Pessimistic Locking ) μ΄λ ?
π λ°μ΄ν°λ² μ΄μ€μμ λμμ± λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μ¬μ©νλ λ°©λ² μ€ νλλ‘, λ°μ΄ν°λ₯Ό μμ νκΈ° μ μ λ°μ΄ν°μ λν μ κΈμ μ€μ νμ¬ λ€λ₯Έ μ¬μ©μκ° ν΄λΉ λ°μ΄ν°λ₯Ό μμ νμ§ λͺ»νλλ‘ ν¨
- μ κΈ μ€μ : ν΄λΌμ΄μΈνΈκ° λ°μ΄ν°μ μ κ·ΌνκΈ° μ μ DBμμ ν΄λΉ λ μ½λ μ κΈ
- λ°μ΄ν° μμ : μ κΈμ΄ μ€μ λ μνμμ λ°μ΄ν° μμ
- μ κΈ ν΄μ : λ°μ΄ν° μμ μ΄ μλ£λλ©΄ DBλ μ κΈ ν΄μ
π λμμ λ§μ μ¬μ©μκ° λ°μ΄ν°μ μ κ·Όνλ κ²½μ° μ±λ₯ μ ν λ°μ
π μλͺ»λ μ κΈ κ΄λ¦¬λ‘ μΈν΄ κ΅μ°©μν(DeadLock) λ°μ
@ParameterObject
- SpringDocμμ μ 곡νλ μ΄λ Έν μ΄μ
- APIμ μ¬λ¬ νλΌλ―Έν°λ₯Ό νλμ κ°μ²΄λ‘ λ¬Άμ΄ μ²λ¦¬νλ©΄μ, κ·Έ κ°μ²΄λ₯Ό λ¬ΈμννκΈ° μν¨ π μλμΌλ‘ 쿼리 νλΌλ―Έν°λ κ²½λ‘ νλΌλ―Έν°λ‘ 맀ν
ν΄λμ€ νμ κ³Ό μΌλ° κ°μ²΄
β³οΈ ν΄λμ€ νμ Class<T>
- νΉμ ν΄λμ€μ λν λ©νλ°μ΄ν°λ₯Ό λ΄κ³ μλ κ°μ²΄
- ν΄λΉ ν΄λμ€κ° μ΄λ€ νλμ λ©μλλ₯Ό κ°μ§κ³ μλμ§
- μ΄λ€ λΆλͺ¨ ν΄λμ€λ₯Ό μμλ°μλμ§ λ±
- μλ°μ 리νλ μ κΈ°λ₯κ³Ό λ°μ νκ² μ°κ΄λ¨
βοΈ λ¦¬νλ μ μ΄λ..
π λ°νμμ ν΄λμ€μ λ©νλ°μ΄ν°(ν΄λμ€, λ©μλ, νλ)λ₯Ό μ‘°μ¬νκ³ μ‘°μν μ μλ κΈ°λ₯
μ»΄νμΌ μμ μ νμ μ΄ κ³ μ λλ κ²κ³Ό λ¬λ¦¬ νλ‘κ·Έλ¨ μ€ν μ€μ ν΄λμ€μ ꡬ쑰λ₯Ό νμΈνκ³ λμ μΌλ‘ κ°μ²΄λ₯Ό μμ±νκ±°λ λ©μλ νΈμΆ
public class Example {
public void doSomething() {
System.out.println("Doing something!");
}
}
public class Main {
public static void main(String[] args) {
// Example.classλ₯Ό ν΅ν΄ Example ν΄λμ€ νμ
μ μ»μ
Class<Example> clazz = Example.class;
try {
// 리νλ μ
μ μ¬μ©νμ¬ Example ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±
Example instance = clazz.newInstance();
// λ©μλ νΈμΆ
instance.doSomething();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
}
}
β³οΈ ν΄λμ€ νμ κ³Ό μΌλ° κ°μ²΄μ μ°¨μ΄
- μν
- ν΄λμ€ νμ : ν΄λμ€μ λν μ 보 μ 곡
- μΌλ° κ°μ²΄ : ν΄λμ€μ ꡬ체μ μΈ μΈμ€ν΄μ€
- μμ±μκΈ°
- ν΄λμ€ νμ : λ°νμ μμ ν΄λμ€ μ체λ₯Ό λ€λ£Έ
- μΌλ° κ°μ²΄ : new ν€μλλ‘ μμ± μμ λ©λͺ¨λ¦¬ ν λΉ
- μ¬μ© λͺ©μ
- ν΄λμ€ νμ : ν΄λμ€μ ꡬ쑰μ μ 보 μ κ·Ό
- μΌλ° κ°μ²΄ : μ€μ λ°μ΄ν°λ₯Ό λ΄λ κ°μ²΄
public <T, U> U convertToGeneric(T source, Class<U> targetClass) {
if (source == null) {
return null;
} else {
U target = BeanUtils.instantiateClass(targetClass);
BeanUtils.copyProperties(source, target);
return target;
}
}
- νμ 맀κ°λ³μλ μΈμ€ν΄μ€ μμ± λΆκ° π Class<U>λ‘ μ μνμ¬ μΈμ€ν΄μ€λ₯Ό μμ±νκ±°λ νμ μμ μ± λ³΄μ₯
βοΈ νμ 맀κ°λ³μλ...
π μ λ€λ¦ νμ μ μ μΈμμ μ¬μ©λλ μμ νμ μ΄λ¦μΌλ‘ μΌλ°μ μΌλ‘ T, E, K, V λ± μ¬μ©
WebFluxμμ Dirty Checkingμ΄ λμ§ μλ μ΄μ
βοΈ Dirty Checking μ΄λ..
π ORM(Object-Relational Mapping)μμ μ¬μ©λλ κΈ°λ²μΌλ‘, κ°μ²΄μ μνκ° λ³κ²½λμλμ§λ₯Ό μΆμ .
JPAμ κ°μ νλ μμν¬μμ μ¬μ©λλ©° μνκ° λ³κ²½λμλ€λ©΄ λ°μ΄ν°λ² μ΄μ€μ μ λ°μ΄νΈ μν
- WebFluxλ λΉλκΈ° λ ΌλΈλ‘νΉ νλ‘κ·Έλλ° λͺ¨λΈ κΈ°λ°μ΄λ―λ‘ μμ²κ³Ό μλ΅ μ¬μ΄μ νλ¦μ΄ λΈλ‘νΉλμ§ μμ
- κ°μ²΄μ μνλ₯Ό μ€μκ°μΌλ‘ μΆμ λΆκ°
Criteria ν΄λμ€
- Spring Dataμμ MongoDBμ κ°μ λ°μ΄ν°λ² μ΄μ€μ μνΈμμ©ν λ 쿼리 쑰건μ μ μνλ λ° μ¬μ©
- Query κ°μ²΄μ ν¨κ» μ¬μ©λμ΄ λ°μ΄ν°λ² μ΄μ€μμ νΉμ λ¬Έμλ₯Ό κ²μνκΈ° μν λ€μν 쑰건 μ€μ νκ² ν΄μ€
- 볡μ‘ν 쿼리λ₯Ό κ°νΈνκ² μμ±
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.beans.factory.annotation.Autowired;
public class MyService {
@Autowired
private MongoTemplate mongoTemplate;
public List<MyEntity> findEntities(String title, int minAge) {
Criteria criteria = Criteria.where("title").is(title)
.and("age").gt(minAge);
Query query = new Query(criteria);
return mongoTemplate.find(query, MyEntity.class);
}
}
@JsonInclude(JsonInclude.Include.NON_NULL)
- JSON μ§λ ¬ν μ νΉμ νλκ° nullμΈ κ²½μ° ν΄λΉ νλ ν¬ν¨ X
'π©βπ» μ λ¦¬κΈ > π WIL' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[π WIL] jwt.getClaimAsString() (0) | 2024.10.02 |
---|---|
[π WIL] DTO, Resource, Entity (0) | 2024.09.27 |