π‘ EJB(Enterprise Java Bean)μ POJO νλ‘κ·Έλλ°
[ POJOμ λ±μ₯ ]
EJBλ μν°νλΌμ΄μ¦ κ°λ°μ λ¨μννκΈ° μν΄ μ¬ μ¬μμ λ§λ Java μ€νμ΄λ€. μ€νλ§μ΄ λ±μ₯νκΈ° μ΄μ μλ EJBκ° λ μ μ νκ³ μμκΈ° λλ¬Έμ μ½λλ€μ΄ EJB κΈ°μ μ μ§λμΉκ² μ’ μλμμλ€.
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
public class OrdersService implements SessionBean {
private SessionContext ctx;
public Orders placeOrder(String menuName) {
Orders orders = new Orders(menuName);
orders.init()
return orders;
}
@Override
public void setSessionContext(SessionContext ctx) throws EJBException {
this.ctx = ctx;
}
@Override
public void ejbRemove() throws EJBException {
}
@Override
public void ejbActivate() throws EJBException {
}
@Override
public void ejbPassivate() throws EJBException {
}
}
μΆμ²: https://mangkyu.tistory.com/281 [MangKyu's Diary:ν°μ€ν 리]
μ½λλ₯Ό μ΄ν΄λ³΄λ©΄ λ³μλΆν° μμΈμ²λ¦¬, μμκΉμ§ EJBμ μμ‘΄μ μ΄λ€.
β‘οΈ λΉμ λ§ν΄ νμΈλ¬λ μ΄λ¬ν λ¬Έμ μ μ ν΄κ²°νκΈ° μν΄ λ³΅μ‘νκ³ μ νμ μΈ κΈ°μ λ³΄λ€ μλ°μ λ¨μ μ€λΈμ νΈλ₯Ό μ΄μ©ν΄ λΉμ¦λμ€ λ‘μ§μ ꡬννλ νΈμ΄ λ«λ€κ³ μκ°νμ¬ POJO(Plain Old Java Object)λ₯Ό λ§λ€μλ€.
βοΈ POJO : κ°λ¨ν μ€λλ μλ° μ€λΈμ νΈ, μ¦ λ€λ₯Έ νκ²½μ μ’ μλμ§ μκ³ νμμ λ°λΌ μ¬μ¬μ©μ΄ κ°λ₯ν μλ° μ€λΈμ νΈ

PSA(Portable Service Abstraction) ν΄λμ© μλΉμ€ μΆμν
μλΉμ€ μΆμνλ μλΉμ€μ λ΄μ©μ λͺ¨λ₯΄λλΌλ ν΄λΉ μλΉμ€λ₯Ό μ΄μ©ν μ μλ€λ κ²μ μλ―Ένλ€. νλ§λλ‘ ν΄λμ© μλΉμ€ μΆμνλ κ°λ³κ³ μμ μ¦, κ΅μ²΄κ° μ½λ€λ λ§μΌ μ μκ² λ€.
ππ» λΉμ¦λμ€ λ‘μ§μ μμ μμ΄ μΈμ λ μ§ λ³κ²½ν μ μλ€λ λ§μ΄λ€.
π€ PSAλ₯Ό μ μ¬μ©ν κΉ?
- μλΉμ€λ₯Ό μΆμνν¨μΌλ‘μ¨ κ°λ°μκ° μ€μ ꡬνλΆλ₯Ό μμ§ λͺ»νλλΌλ ν΄λΉ κΈ°λ₯μ μ¬μ©ν μ μκ² λλ€. μΆμν κ³μΈ΅μΈ μΈν°νμ΄μ€ APIμ μ 보λ₯Ό νμ©ν΄ ν΄λΉ μλΉμ€μ λͺ¨λ κΈ°λ₯μ μ΄μ©νλ©΄ λλ€. λν μΈμ λ μ§ κ΅μ²΄ν μ μκ² ν΄μ€λ€.
- Spring WebFluxμ Spring MVCλ λͺ¨λ μ€νλ§μ μΉ κΈ°λ₯μ μ 곡νμ§λ§ λ΄λΆμ μΌλ‘λ λ€λ₯Έ λ°©μμΌλ‘ ꡬνλλ€. κ°λ°μλ μ΄λ¬ν λ΄λΆ ꡬνμ μ κ²½ μ°μ§ μκ³ μΌκ΄λ λ°©μμΌλ‘ μ€νλ§μ μΉ κΈ°λ₯μ μ¬μ©ν μ μλ€. μ΄λ ν°μΊ£μμ nettyλ‘μ μ νκ³Ό κ°μ λ³κ²½μ¬νμ μμ½κ² μ²λ¦¬ν μ μκ² ν΄μ€λ€.
μ€νλ§μμ μ 곡νλ PSA
Spring Web MVC
βοΈ μ€νλ§μμλ Servletμ ν΅ν΄ κ°λ°μ ν μ μκ² λ§μ κΈ°λ₯μ μ 곡νλ€. μλΈλ¦Ώμ ν΅ν΄ HttpServlet ν΄λμ€λ₯Ό μμλ°κ³ , doGet(), doPost() λ©μλλ₯Ό ꡬνν΄μΌ νλ€. νμ§λ§ @Controller, @GetMapping, @PostMapping λ±μ μ΄λ Έν μ΄μ μ μ¬μ©νμ¬ μμ² λ§€νμ ν μ μλ€. μ΄λ λ― κ°λ°μλ 볡μ‘ν μλΈλ¦Ώ λ‘μ§μ μμ±ν νμ μμ΄ λΉμ¦λμ€ λ‘μ§μ μ§μ€ν μ μλ€.
Spring Transaction
βοΈ Low Levelλ‘ νΈλμμ μ μ²λ¦¬νλ €λ©΄ setAuthCommit(), commit(), rollback()λ±μ μ§μ κ΄λ¦¬ν΄μΌ νλ€. νμ§λ§ @Transactional μ΄λ Έν μ΄μ μ λ©μλμ λΆμ¬μ€μΌλ‘μ¨ νΈλμμ μ²λ¦¬λ₯Ό μ½κ² ν μ μλ€. μ΄λ λ€μν νΈλμμ κ΄λ¦¬μ(JpaTransactionManager, HibernateTransactionManager)μ ν¨κ» μ¬μ©ν μ μμΌλ©°, κ°λ°μλ ꡬν μΈλΆμ¬νμ μ κ²½μ°μ§ μκ³ λ νΈλμμ μ μ½κ² κ΄λ¦¬ν μ μλ€.
Spring Cache
βοΈ Cacheλ Transactionκ³Ό λμΌνκ² JCacheManager, ConcurrentMapCacheMannager, EhCacheCacheManagerμ κ°μ ꡬνμ λ₯Ό μ¬μ©ν μ μλ€. κ°λ°μλ @Cacheable μ΄λ Έν μ΄μ μΌλ‘ ꡬν체λ₯Ό μ κ²½μ°μ§ μμλ νμμ λ°λΌ κ΅μ²΄ν μ μλ€.
IOC(Inversion Of Control)
μ μ΄μ μμ !! νλ‘κ·Έλλ°μμ κ°μ²΄μ μμ±κ³Ό μλͺ μ£ΌκΈ° κ΄λ¦¬λ₯Ό κ°λ°μκ° μλ νλ μμν¬μ μμνλ κ²μ΄λ€. μ΄λ₯Ό ν΅ν΄ κ°λ°μλ 볡μ‘νκ³ μ€μνκΈ° μ¬μ΄ λ‘μ°-λ 벨 μμ λμ ν΅μ¬ λΉμ¦λμ€ λ‘μ§μ μ§μ€ν μ μλ€.
public class A {
private B b;
public A() {
b = new B();
}
}
μ μ½λλ₯Ό λ³΄κ³ "Aκ°μ²΄λ Bκ°μ²΄μ μμ‘΄νκ³ μμ΄"λΌκ³ λ§ν μ μλ€.
public class A {
private final B b;
@Autowired
private B b;
}
μ€νλ§μμ μμ κ°μ μ½λλ‘ μμ‘΄μ±μ΄ μ£Όμ λλ€. μ΄κ²μ DI(Dependency Injection)μ΄λΌ νλ€.
β‘οΈ μ¦ μΈλΆμμ μμ‘΄μ μ£Όμ λ°μΌλ©΄ DI, κ·Έ μμ‘΄μ΄ κ°λ°μκ° μλ νλ μμν¬μμ κ΄λ¦¬λ₯Ό νμ¬ IOCλΌκ³ νλ€.
AOP(Aspect Oriented Programming)
- κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°(OOP)μ νκ³λ₯Ό 극볡νκΈ° μν΄ λ±μ₯ν νλ‘κ·Έλλ° ν¨λ¬λ€μμ΄λ€. κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ ν΅μ¬ μ₯μ μ€ νλλ λͺ¨λνμ μ¬μ¬μ©μ±μ ν΅ν μ€λ³΅ κ°μμ§λ§ νλ‘κ·Έλ¨μ΄ 볡μ‘ν΄μ§μ λ°λΌ λͺ¨λ λ΄μμλ μ½λ μ€λ³΅μ΄ λ°μνλ λ¬Έμ κ° μλ€.
- μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ AOPλ ν‘λ¨ κ΄μ¬μ¬(Crosscutting Concerns)λ₯Ό λ€λ£¬λ€. μλ₯Ό λ€λ©΄ λ‘κΉ , 보μ, νΈλμμ κ΄λ¦¬μ κ°μ κ²μ λ§νλ€. μ΄λ¬ν ν‘λ¨ κ΄μ¬μ¬λ₯Ό λ³λμ λͺ¨λ(Aspect)λ‘ λΆλ¦¬νκ³ νμν μ§μ μ μ½μ (Weaving)νλ λ°©μμΌλ‘ μ€λ³΅μ μ€μ΄κ³ κ° λͺ¨λμ ν΅μ¬ κΈ°λ₯μ μ§μ€ν μ μκ² ν΄μ€λ€.
μ°Έκ³ μλ£ : https://github.com/devSquad-study/2023-CS-Study/blob/main/Spring/spring_bean_scope.md
'Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [Java] JVM λ©λͺ¨λ¦¬ ꡬ쑰 (3) | 2024.01.04 |
|---|---|
| [μλ°μμ μ/7] κ°μ²΄μ§ν₯μ λνμ¬ (2) | 2023.12.04 |
| [μλ°μμ μ/6]κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ΄λ (2) | 2023.10.25 |
| [μλ°μμ μ/5]λ°°μ΄μ΄λ (1) | 2023.10.20 |
| [μλ°μμ μ/4]쑰건문과 λ°λ³΅λ¬Έμ΄λ (0) | 2023.10.19 |