Spring
μ€νλ§ νλ μμν¬λ μλ°μ κ°μ²΄μ§ν₯ κ΄μ μ μ€κ³λ₯Ό νλ μμν¬μ ννλ‘ κ΅¬νν΄ λμ κ²μ΄λ©°
κ·Έ ꡬν κ³Όμ μμ SOLID μ κ°μ κ°μ²΄ μ§ν₯ μ€κ³μ μμΉλ€μ κΈ°λ°μΌλ‘ νλ€.
μ€νλ§ νλ μμν¬μ μ λ°μ μΈ μ΄μΌκΈ°λ₯Ό λ€λ£¨λλ‘ νλ€.
μ€νλ§μ μ¬μ©νλ κ°μ₯ ν° μ΄μ λ μ€νλ§μ΄ μκ°νλ κ°λ λλ‘ λ°λΌ νλ‘κ·Έλ¨μ μμ±νκ² λλ©΄ Dependency Injection μ λ°λ₯΄κ² λμ΄ μλ€.
μ°Έκ³ μλ£
μν°ν©νΈ (Artifact)
μν°ν©νΈλ μννΈμ¨μ΄ κ°λ° νλ‘μ νΈλ₯Ό μ§ννλ©΄μ μμ±νλ λ€μν μ°μΆλ¬Ό μ μλ―Ένλ€.
ν΅μμ μΌλ‘λ λΌμ΄λΈλ¬λ¦¬μ λμΌν μλ―Έλ‘ ν΄μ λλ©° .jar
, .war
, .ear
λ±μ νμ₯μλ₯Ό κ°κ²λλ€.
μν°ν©νΈ μ μ₯μ (Artifact Repository)
μν°ν©νΈ μ μ₯μλ μν°ν©νΈμ λ©νλ°μ΄ν°λ₯Ό μ μ₯νκ³ κ΄λ¦¬νλ μ μ₯μλ₯Ό μλ―Ένλ€.
μ μ₯μλ κ³μΈ΅κ΅¬μ‘°λ‘ μ κ·Ό κ°λ₯νλ©° μ΄ κ³μΈ΅μ ꡬ쑰λ₯Ό GAV (Group, Artifact, Version) ꡬ쑰λΌκ³ νλ©° λ©μ΄λΈ (Maven) μμ μμ‘΄μ±μ μ°Ύμ λ μ°Έκ³ νλ ꡬ쑰μ΄κΈ°λ νλ€.
λ₯μμ€ (Nexus) κ° μ΄ μ μ₯μμ μ¬μ©λλ λνμ μΈ μ νμ΄λ€.
@Autowired
vs @Qualifier
μ μ°¨μ΄
@Autowired
λ μλ μ£Όμ
κΈ°λ₯μΌλ‘ μ€νλ§μ΄ μμμ μμ‘΄ κ°μ²΄λ₯Ό μ°Ύμμ λͺ
μν΄μ€λ€.
μ¦ μλ μ£Όμ
κΈ°λ₯μ μ¬μ©νλ©΄ λ³λμ μ€μ μ΄ μμ΄λ μμ‘΄ Bean κ°μ²΄λ₯Ό μ°Ύμμ μ£Όμ
ν΄μ€λ€.
νμ§λ§ κ°μ νμ
μ λΉμ΄ λκ° μ΄μ μ‘΄μ¬ν κ²½μ°μλ 컨ν
μ΄λ μ΄κΈ°ν νλ κ³Όμ μμ μλ¬κ° λ°μνκΈ° λλ¬Έμ μ£Όμ
ν κ°μ²΄λ₯Ό νΉμ μ§μ΄μ€μΌ νλ€.
μ΄λ @Qualifier
λ₯Ό μ¬μ©ν΄ μ€μΌ νλ€.
VO
vs DTO
vs DAO
μ μ°¨μ΄
VO (Value Object)
read only
μμ±μ κ°λλ€.- λμ²΄λ‘ λΆλ³ νΉμ±μ κ°μ§λ©°
equals()
λ‘ λΉκ΅ν λ λͺ¨λ κ°μ λΉκ΅ν΄μΌ νλ€. - κ°λ¨ν λ 립체 νΉμ κ°μ²΄ (Entity) λ₯Ό μλ―Ένλ€.
DTO (Data Transfer Object : λ°μ΄ν° μ μ‘ κ°μ²΄)
VO
μDTO
λ₯Ό λμΌ κ°λ μμ λλ κ²½μ° λλΆλΆμ΄λ€.- λ€νΈμν¬ ν΅μ (μλ²-μλ², ν΄λΌμ΄μΈνΈ-μλ²) μ ν λ μ£Όλ‘ μ¬μ©λλ λ°μ΄ν° κ°μ²΄μ΄λ€.
DAO
- λ°μ΄ν° μ κ·Όμ λͺ©μ μΌλ‘ νλ κ°μ²΄
- μ¬λ¬ μ¬μ©μκ°
DAO
μ μΈν°νμ΄μ€λ₯Ό μ¬μ©νμ¬ νμν μλ£μ μ κ·Ό νλλ‘ νλ κ²μ΄ κ°λ μ΄λ€. - DB μ λν
insert
update
delete
select
λ₯Ό μ²λ¦¬νλ€. - λ¨μΌ μ± μμ μμΉ κ°λ μ μ±κ²©μ κ°μ§λ©° λλΆλΆμ λ°μ΄ν°λ² μ΄μ€μ μ μ©μ΄ κ°λ₯νλ€.
PreparedStatement μ Statement μ°¨μ΄
κ°μ₯ ν° μ°¨μ΄μ μ μΊμ (Cache) μ¬μ©μ¬λΆμ΄λ€.
Statement μ€ν μμ
- Query Statement λΆμ
- Compile
- Excute
Statement λ₯Ό μ¬μ©νκ² λλ©΄ λ§€λ² Query λ₯Ό μνν λλ§λ€ 1 ~ 3 λ¨κ³λ₯Ό μννκ² λκ³ PreparedStatement λ μ²μ νλ²λ§ μΈ λ¨κ³λ₯Ό μννκ³ λλ¨Έμ§λ μΊμμ λ΄μ μ¬μ¬μ©μ νλ€.
Statement
String sqlStr = "SELECT name, memo FROM TABLE WHERE num = " + num;
Statement stmt = conn.createStatement();
ResultSet result = stmt.executeQuery(sqlStr);
Preparedstatement
String sqlStr = "SELECT name, memo FROM TABLE WHERE num = ?";
PreparedStatement stmt = conn.prepareStatement(sqlStr);
pstmt.setInt(1, num);
ResultSet result = pstmt.exceuteQuery();
λμΌν Query λ₯Ό λ°λ³΅μ μΌλ‘ μ¬μ©ν λλ PreparedStatement κ° DB μ ν¨μ¬ μ μ λΆλ΄μ μ£Όλ©° μ±λ₯λ μ°μνλ€.
λ§μ½ Dynamic SQL μ μ¬μ©ν κ²½μ° λ§€λ² μ‘°κ±΄μ μ΄ νλ €μ§κ² λ¨μΌλ‘ Statement κ° λ«λ€. (μΊμ±μ μ₯μ μ μμ΄λ²λ¦Ό)
μ°Έκ³ μλ£
ajax
μμ λκΈ΄ JSON.stringify
νλΌλ©ν° @RequestBody
λ‘ λ°κΈ°
$.ajax({
method: 'post',
url: '/api/encrypt',
data: JSON.stringify(data),
contentType:'application/json; charset=utf-8',
success: function (data) {
if (data && data.url) {
var returnUrl = (location.protocol + '//' + location.host + '/' + data.url);
$('.alert-success > p > span').html($('#encryptUrl').val());
$('.alert-success > p > a').html(returnUrl);
$('.alert-success > p > a').attr('href', returnUrl);
}
callback();
},
error: function (e) {
console.error(e);
callback();
}
});
@ResponseBody
@PostMapping(value = { "/encrypt" })
public Object getEncrypt(@RequestBody Shorten shorten) {
return new HashMap<String, String>() {{
put("url",ShortenCrypto.set(shorten.getUrl()));
}};
}
μ°Έκ³ μλ£
DI β