โถ 3์ผ ๊ณํ
=> ๊ณต๋ถ ๊ด๋ จ
1) ์์ ๋ด์ฉ ๋ณต์ต
2) MVC ๊ฐ์ฒด์งํฅ ๋ฆฌํฉํ ๋ง ์๋ฃ
3) ๊ธฐ์ ์ง๋ฌธ ๋ต๋ณ ๋ ธ์ ์ ๋ฆฌ ๋ฐ SOLID ์์ ํ๋ก๊ทธ๋๋ฐ (OCP & DIP & ISP)
4) 8๊ฐ์ ๋์์ธ ํจํด ์ ๋ฆฌ
=> ํ์ด๋ ํ๋ก์ ํธ ๊ด๋ จ
1) ERD ๊ทธ๋ ค ๋๊ณ pdf๋ก ๋ง๋ค์ด๋๊ธฐ
2) ์ด๋ฏธ์ง ์์ง
๋ง์ฐ์ค ๊ฑด์ ์ง ๋ฐ๊ฟ๋ผ!! [์๋ฃ]
โถ ๋ฌธ์ ์ ๋ฆฌ
1. ์์ฑ์๋ฅผ ํตํด ์ฃผ์ ์ ๊ด์ฐฎ์. ํ์ง๋ง ์ธ์คํด์ค ์์ฑ์ผ๋ก ์์กดํ์ง ๋ง๊ฒ (ํ ์คํธ ์ฝ๋ ์์ฑ ์ด๋ ค์)
> ํ๋ ์ด์ด๋ก ์ปดํจํฐ๋ฅผ ์ฃผ์ง๋ง๊ณ ์ธ๋ถ์์ ๋น๊ต๊ฐ์ ์ป์ด๋ผ
public class Player {
private final Rsp playerRsp;
private final Computer computer = new Computer();
// setter ๋์ ์์ฑ์๋ก ์ฃผ์
์์ผ์ ํด๊ฒฐ
public Player(final Rsp playerRsp) {
this.playerRsp = playerRsp;
}
2. enum๋ ๋ชจ๋ธ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ก์ง์ ์ ์ฅํ๋ ๊ณณ์ด ์๋
> ์ธ๋ถ์์ ์ฃผ์ (์ปจํธ๋กค๋ฌ์์?)
public enum PrintGameResult {
WIN_RESULT("๋์ด ์ด๊ฒผ์ต๋๋ค."),
DRAW_RESULT("๋น๊ฒผ์ต๋๋ค."),
LOSE_RESULT("์ปดํจํฐ๊ฐ ์ด๊ฒผ์ต๋๋ค.");
private final String printGameResult;
private PrintGameResult(String printGameResult) {
this.printGameResult = printGameResult;
}
public String getValue() {
return printGameResult;
}
public static void resultOut(Result result) {
if (result == Result.WIN)
ViewOutput.singleGameResult(WIN_RESULT);
if (result == Result.DRAW)
ViewOutput.singleGameResult(DRAW_RESULT);
if (result == Result.LOSE)
ViewOutput.singleGameResult(LOSE_RESULT);
}
}
=> ๋ทฐ ์์กด ใดใด , ๊ณ ์ณ๋ณด์!
โถ ๊ฐ์ธ ๊ณต๋ถ
โ MVC ํจํด ์ ์ฉ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋จ ๋ฆฌํฉํ ๋ง
1. ์ปดํจํฐ ๋ณ์๋ ์ธ๋ถ์์ ์ฃผ์ ํ๋ผ
package Model;
public class ComputerNumber {
// ์ปดํจํฐ ๊ฐ์๋ฐ์๋ณด์ฉ ์๋ ์ซ์ ์์
private final int AUTO_NUMBER = (int)(Math.random() * 3) + 1;
// ๊ฐ์๋ฐ์๋ณด ๊ฐ ์ ์ํ ๋ฐํ
public int getComputerNumber() {
return AUTO_NUMBER;
}
}
=> ๋ค๋ฅธ ์์ฑ์ ๊ฐ์ง๋ฏ๋ก ๋ชจ๋ธ์์ ๋ถ๋ฆฌ์ํด ํ๋๋ ํ์ด๋ ์์๋ก ์ ์ธ
2. Setter ๋ฉ์๋๋ฅผ ์์ ๋ผ. ๋ถ๋ณ์ฑ์ ์์น
package Model;
import Enum.Rsp;
import Exception.RspException;
// ์ปดํจํฐ์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ํด๋์ค
public class Computer {
private int comRsp;
private ComputerNumber computerNumber = new ComputerNumber();
// setter ๋์ ์์ฑ์๋ก ๋์
์์ผ์ ํด๊ฒฐ
// ์ปดํจํฐ ์ธ์คํด์ค๋ฅด ์์ฑ ์ ์๋ ์ซ์(๊ฐ์๋ฐ์๋ณด) ์ ์ฅ
public Computer() {
this.comRsp = computerNumber.getComputerNumber();
}
public Rsp getComRsp() throws RspException {
return Rsp.of(comRsp);
}
}
=> ์ธ๋ถ์์ ์ปดํจํฐ ์ธ์คํด์ค๋ฅผ ์์ฑ ์ setter ๋์ ์์ฑ์์์ ์๋ ์์๋ฅผ ํ๋์ ์ฃผ์ ์ํจ๋ค.
3. ๋ถ๋ณ ๊ฐ์ฒด
package Model;
import Enum.Result;
import Enum.Rsp;
import Exception.RspException;
// ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ํด๋์ค
// ์ปดํจํฐ์ ์ฌ์ฉ์์ ๊ฐ์ ๋น๊ตํ ๊ฒ
public class Player {
private final Rsp playerRsp;
private Computer computer = new Computer();
// setter ๋์ ์์ฑ์๋ก ์ฃผ์
์์ผ์ ํด๊ฒฐ
public Player(final Rsp playerRsp) {
this.playerRsp = playerRsp;
}
// ์ฐธ๊ฐ์ ๊ฐ์๋ฐ์๋ณด ๋ฐํ
public Rsp getRsp() {
return playerRsp;
}
// ์ปดํจํฐ ์ธ์คํด์ค ๋ฐํ
public Computer getComputer() {
return computer;
}
// ๊ฒ์ ๊ฒฐ๊ณผ ๋ฐํ ๋ฉ์๋
public Result play() throws RspException {
return Result.getGameResult(playerRsp, computer.getComRsp());
}
}
=> ๋ถ๋ณ์ฑ์ ๋๋ ๊ฐ์ฒด์ ์ธ์คํด์ค ๋ณ์๋ ๋ณํ์ง ์๋ final๋ก ์ ์ธํ๋ ๊ฒ. ์์ฑ์์ ๋งค๊ฐ๋ณ์๋ final ํค์๋๋ก ์ ์ธ
์๋ํ์ ์ฅ์
- ⇒ ๊ตฌ์ฒดํ๋ ๋ํ ํด๋์ค์ ์์กดํ๊ธฐ๋ณด๋ค ๋ํ ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ ๊ตฌ์ฒดํ๋ ํด๋์ค(์ผ๊ฐํ, ์...)๋ฅผ ๋ง๋ค์ → ์ด๊ฒ์ด ๊ตฌ์ฒด์ ์ธ ํ์ ์๋
- ⇒ private์ ์ด์ฉํ์ฌ ์ธ๋ถ ๋ ธ์ถ์ ์ค์
- ⇒ ๋ฉ์๋์ private ์๋ํ → ํ ๋ฉ์๋๋ก๋ง private ๋ฉ์๋๋ค์ ํธ์ถ ๊ฐ๋ฅ → ์ธ๋ถ์์ ๋ฉ์๋๊ฐ ํ๋ ์ผ์ ์ ์ ์๋ค. ํด๋น ํด๋์ค ๊ฐ์ฒด ์ฌ์ฉ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ฒ ์์๋ ๋จ
- ⇒ ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๋ถ๋ฆฌํ ๊ฒฝ์ฐ → ์ธํฐํ์ด์ค๋ง์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ค๋ฃฐ ์ ์์ผ๋ฏ๋ก ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ๋ํด ๋ชฐ๋ผ๋ ๋์์ด ๊ฐ๋ฅํ๋ค.
- ์๋ฅผ ๋ค์ด ์์์ ๋ณดํต ๋ฉ์๋์ ๋ณ์๋ฅผ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ด๋ผ๊ณ ์ด์ผ๊ธฐํ๋๋ฐ ์ด๋ ํ๋ฆฐ ๋ง์ด๋ค. ์์์ ํตํด ๋ฐ์ ์ ์๋ ๊ฒ ์ค์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ํ์ ์ด๋ค. ์ด ํ์ ์ ๋ด๋ ค ๋ฐ์ ์ ์๊ธฐ ๋๋ฌธ์ ํ์ ๊ฐ์ฒด๊ฐ ์์ ํด๋์ค๋ก ์ง์นญ ๋ ์ ์๋ค. ์ด๊ฒ์ด ์ ๋ณด ์๋์ ๊ฐ์ ธ์ค๊ณ ๊ฐ์ฒด์งํฅ์ ๋ชจ๋ ์ด์ ๋ค์ ๊ฐ์ ธ ์จ๋ค.
ํด๋์ค ๊ฐ์ฒด ์ธ์คํด์ค ์ฐจ์ด์
- ํด๋์ค๋ ํ์ด๋ ํฉํฐ๋ฆฌ๊ฐ ์๋๋ค. ๋จ์ง ๋ถ๋ฅ์ ๋ํ ๊ฐ๋ ์ผ๋ฟ (์ถ์์ ์ด๋ฉด ํด๋์ค ๊ตฌ์ฒด์ ์ด๋ฉด ๊ฐ์ฒด์ด๋ค)
- ๊ฐ์ฒด : ์ํํธ์จ์ด ์ธ๊ณ์ ๊ตฌํํ ๋์์ด๋ฉฐ ํด๋์ค์ ์ ์ธ๋ ๋ชจ์ ๊ทธ๋๋ก ์์ฑ๋ ์ค์ฒด → ํด๋์ค์ ์ธ์คํด์ค
- ์ธ์คํด์ค : ํด๋์ค๋ฅผ ๋ฐํ์ผ๋ก ์ํํธ์จ์ด ์ธ๊ณ์ ๊ตฌํ๋ ๊ตฌ์ฒด์ ์ธ ์ค์ฒด
- ⇒ ๊ฐ์ฒด๋ฅผ ์ํํธ์จ์ด์ ์ค์ฒดํํ๋ฉด ๊ทธ๊ฒ์ ์ธ์คํด์ค๋ผ ๋ถ๋ฅด๊ณ ์ค์ฒดํ๋ ์ธ์คํด์ค๋ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๋ค. ์ธ์คํด์ค < ๊ฐ์ฒด
์ด๊ธฐํ๋ธ๋ญ ์ธ์คํด์ค ์์ญ (T๋ฉ๋ชจ๋ฆฌ)
- ํด๋์ค ๋ธ๋ญ์ ํด๋์ค๊ฐ ๋ก๋ฉ๋ ๋ ํ๋ฒ๋ง ์คํ๋๊ณ ์ธ์คํด์ค ๋ธ๋ญ์ ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋๋ง๋ค ์คํ
- T๋ฉ๋ชจ๋ฆฌ ์์ญ
final ์ ์ธ ์ ๊ธฐ๋ณธ, ์ฐธ์กฐ ํ์ ์ฐจ์ด
- ์์ ํ์ ์ ๊ฐ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅ
- ๊ฐ์ฒด๋ผ๋ฉด ์์ฑ์, static ๋ธ๋ญ์ผ๋ก ์ด๊ธฐํ ๊ฐ๋ฅ
- ⇒ ๊ธฐ๋ณธํ ๋ณ์๋ผ๋ฉด ๊ฐ์ ๋ณ๊ฒฝํ์ง ๋ชปํ๊ณ ์ฐธ์กฐํ ๋ณ์๋ผ๋ฉด ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด(์ฃผ์)๋ฅผ ๋ณ๊ฒฝํ์ง ๋ชปํ๋ค๋ ๊ฒ (์์ฑ๋ง ๋ณ๊ฒฝ ๊ฐ๋ฅ → ๋ด๋ถ์ ๊ฐ์ FINAL์ ์ํฅ ๋ฐ์ด๋ค)
์ธํฐํ์ด์ค์ ์ฅ์
- ๊ฐ๋ฐ ์๊ฐ์ ๋จ์ถ ์ํฌ ์ ์๋ค
- ํด๋์ค ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์๋ค - > ์ข ์์ฑ ์ ๊ฑฐ ๋ฐ ์ ์ง๋ณด์ ๋์
- ํ์คํ, ๊ท๊ฒฉํ๊ฐ ๊ฐ๋ฅํ๋ค
โถ ์์ ๋ด์ฉ
Spring AOP
JoinPoint
- ํ๊ฒ ๋ฉ์๋(ํต์ฌ ๊ด์ฌ ๋ชจ๋)์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๊ฐ์ฒด
- ⇒ Spring Container๊ฐ Advice ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ํ๊ฒ๋ฉ์๋์ ์ ๋ณด(JoinPoint ๊ฐ์ฒด)๋ฅผ ๋งค๊ฐ๋ณ์์ ์ ์ฅ
- ⇒ Advice ๋ฉ์๋ (ํก๋จ๊ด์ฌ๋ชจ๋)์์ ํ๊ฒ๋ฉ์๋์ ์ ๋ณด๊ฐ ํ์ํ ๊ฒฝ์ฐ JoinPoint ๋งค๊ฐ๋ณ์ ์์ฑ
- Around Advice ๋ฉ์๋๋ฅผ ์ ์ธํ ๋๋จธ์ง Advice ๋ฉ์๋๋ ๋ฐํํ์ void๋ก ์์ฑํ๋ฉฐ๋งค๊ฐ๋ณ์๋ฅผ ์์ฑํ์ง ์๊ฑฐ๋ JoinPoint ์ธํฐํ์ด์ค๋ฅผ ์๋ฃํ์ผ๋ก ํ๋ ๋งค๊ฐ๋ณ์ ์ ์ธ ๊ฐ๋ฅ
- => ํก๋จ๊ด์ฌ๋ชจ๋์ ๋งค๊ฐ๋ณ์๋ฅผ ๋น์ ์์ ์ผ๋ก ์ ์ธํ ๊ฒฝ์ฐ IllegalArgumentException ๋ฐ์
JoinPoint.getTarget()
- ํ๊ฒ๋ฉ์๋๋ฅผ ํธ์ถํ๋ Spring Bean ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ๋ฉ์๋
- ⇒ ํ๊ฒ๋ฉ์๋๊ฐ ์ ์ธ๋ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ Object ํ์ ์ผ๋ก ๋ฐํ
Object.getClass()
- ๊ฐ์ฒด์ ๋ํ ํด๋์ค ์ ๋ณด(Clazz)๋ฅผ ๋ฐํํ๋ ๋ฉ์๋
Class.getName()
- Class ๊ฐ์ฒด(Clazz)์ ํด๋์ค๋ช (ํจํค์ง ํฌํจ)์ ๋ฐํํ๋ ๋ฉ์๋
Class.getSimpleName()
- Class ๊ฐ์ฒด(Clazz)์ ํด๋์ค๋ช (ํจํค์ง ๋ฏธํฌํจ)์ ๋ฐํํ๋ ๋ฉ์๋
JoinPoint.getSignature()
- ํ๊ฒ๋ฉ์๋์ ์ ๋ณด์ธ (Signature ๊ฐ์ฒด)๋ฅผ ์ ๋ณด๋ฅผ ๋ฐํํ๋ ๋ฉ์๋
Signature.getName()
- ํ๊ฒ๋ฉ์๋์ ์ด๋ฆ์ ๋ฐํํ๋ ๋ฉ์๋
JoinPoint.getArgs()
- ํ๊ฒ๋ฉ์๋์ ๋งค๊ฐ๋ณ์์ ์ ์ฅ๋ ๋ชจ๋ ๊ฐ(๊ฐ์ฒด)์ Object ๋ฐฐ์ด๋ก ๋ฐํ
After Returning Advice ๋ฉ์๋์๋ JoinPoint ๋งค๊ฐ๋ณ์์ธ์ Object ๋งค๊ฐ๋ณ์ ์์ฑ ๊ฐ๋ฅ
⇒ Obejct ๋งค๊ฐ๋ณ์์๋ ํ๊ฒ๋ฉ์๋์ ๋ฐํ๊ฐ์ ์ ๋ฌ๋ฐ์ ์ ์ฅ
⇒ ํ๊ฒ๋ฉ์๋ ๋ฐํ๊ฐ์ ์๋ฃํ์ด ๊ณ ์ ๋์ด ์๋ ๊ฒฝ์ฐ Object ํ์ ๋์ ๋ฐํ๊ฐ์ ์๋ฃํ์ผ๋ก ๋งค๊ฐ๋ณ์ ์์ฑ
- Bean Configuration FIle์ AOP ์ค์ ์์ After-retuning ์๋ฆฌ๋จผํธ์ returning ์์ฑ์ ์์ฑ๊ฐ์ผ๋ก ๋ฐ๋์ ์ค์ ํด์ผ๋ง ํ์ผ๋ฉ์๋์ ๋ฐํ๊ฐ์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ฐ์ ์ ์ฅ ๊ฐ๋ฅ
Around Advice ๋ฉ์๋๋ ๋ฐํํ์ Void or Object ํ์ ์ผ๋ก ์์ฑํ๊ณ ProceedingJoinPoint ์ธํฐํ์ด์ค๋ฅผ ์๋ฃํ์ผ๋ก ์์ฑ๋ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๋์ ์ ์ธ
⇒ Aroing Advice ๋ฉ์๋๋ ํ๊ฒ๋ฉ์๋์ ๋ฐํ๊ฐ์ ์ ๊ณต๋ฐ์ ๋ฐํํ๊ธฐ ์ํด Object ํ์ ์ผ๋ก ์ ์ธ
ProceedingJoinPoint
- ํ๊ฒ๋ฉ์๋(ํต์ฌ๊ด์ฌ๋ชจ๋)์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๊ฐ์ฒด
- ⇒ JoinPoint ๊ฐ์ฒด์ ๋ค๋ฅธ ์ ์ ํ๊ฒ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๋ ๊ธฐ๋ฅ ์ ๊ณต
- proceed() : ํ๊ฒ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ฉ์๋ - ํต์ฌ๊ด์ฌ๋ชจ๋ ๋์
- ⇒ ํ๊ฒ๋ฉ์๋ ํธ์ถ ์ ๋ฐํ๋๋ ๊ฐ์ ์ ๊ณต๋ฐ์ ์ ์ฅ ๊ฐ๋ฅ
- ⇒ Throwable ๊ฐ์ฒด(ํ๋ก๊ทธ๋จ ์คํ ์ ๋ฐ์๋๋ ๋ชจ๋ ์ค๋ฅ ์ ๋ณด๋ฅผ ์ ์ฅํ ๊ฐ์ฒด) ๋ฐ์ - ์์ธ ์ฒ๋ฆฌ
StopWatch
- ์๊ฐ์ ์ธก์ ํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํด๋์ค
- StopWatch.start() : ์๊ฐ ์ธก์ ์ ์์ํ๋ ๋ฉ์๋
- ๊ฒ์๊ธ ๋จ๊ธธ ๋, ํ์๊ฐ์ , ๋ก๊ทธ์ธ ํ ์๊ฐ์ด ์ผ๋ง๋ ๊ธฐ๋กํ ๋ ์ฐ๋ฉด ๋ ๋ฏ
Spring Configuration File (XML)
returning ์์ฑ
- ํ๊ฒ๋ฉ์๋์ ๋ฐํ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ํก๋จ๊ด์ฌ๋ชจ๋์ ๋งค๊ฐ๋ณ์๋ช ์ ์์ฑ๊ฐ์ผ๋ก ์ค์
throwing ์์ฑ
- ํ๊ฒ๋ฉ์๋์์ ๋ฐ์๋ ์์ธ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ํก๋จ๊ด์ฌ๋ชจ๋์ ๋งค๊ฐ๋ณ์๋ช ์ ์์ฑ๊ฐ์ผ๋ก ์ค์
aop:aspectj-autoproxy
- Aop ์ด๋ ธํ ์ด์ ์ ์ด์ฉํ์ฌ ํต์ฌ๊ด์ฌ๋ชจ๋์ ํก๋จ๊ด์ฌ๋ชจ๋์ ์๋์ผ๋ก ์ฝ์ ๋์ด ๋์๋๊ธฐ ์ํ ํ๋ก์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ก ์ค์ ํ๋ ์๋ฆฌ๋จผํธ
pom.xml
https://mvnrepository.com/artifact/org.springframework/spring-context-support => Spring Context ํ์ฅ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
https://mvnrepository.com/artifact/com.sun.mail/javax.mail => Java Mail ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
MailSender
- ๋ฉ์ด๋ธ์์ api ๋ค์ด๋ก๋
- ํต์ฌ๊ด์ฌ๋ชจ๋
JavaMailSender.createMimeMessage()
- MimeMessage ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๋ฐํํ๋ ๋ฉ์๋
- MimeMessage : ๋ฉ์ผ ์ ์ก ๊ด๋ จ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๊ฐ์ฒด
MimeMessage.setSubject(String subject)
- MimeMessage ๊ฐ์ฒด์ ๋ฉ์ผ ์ ๋ชฉ์ ๋ณ๊ฒฝํ๋ ๋ฉ์๋
MimeMessage.setText(String content)
- MimeMessage ๊ฐ์ฒด์ ๋ฉ์ผ ๋ด์ฉ(ํ ์คํธ)์ ๋ณ๊ฒฝํ๋ ๋ฉ์๋
MimeMessage.setRecipients(RescipientType type, InternetAddress email)
- MimeMessage ๊ฐ์ฒด์ ๋ฉ์ผ์ ์์ ํ๋ ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฉ์๋
- ⇒ RecipientType : ๋ฉ์ผ ์์ ์ฌ์ฉ์ ๋์์ ํํํ๊ธฐ ์ํ ์์
- ⇒ InternetAddress : ์์ ์ฌ์ฉ์์ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์ ์ฅํ ๊ฐ์ฒด - InternetAddress ๋์ String ์ฌ์ฉ ๊ฐ๋ฅ
- InternetAddress.parse(String email) : ๋ฌธ์์ด์ ์ ๋ฌ๋ฐ์ InternetAddress ๊ฐ์ฒด ๋ฐํ
JavaMailSender.send(MimeMessage message) : SMTP ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์ผ์ ์ ์กํ๋ ๋ฉ์๋
‘
Annotation
@Aspect
- Spring Bean์ผ๋ก ๋ฑ๋ก๋ ํด๋์ค์ ๋ฉ์๋์ Aspect ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์
- ⇒ Bean Configuration File์ Aspect ์๋ฆฌ๋จผํธ์ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณต
@Pointcut
- ํต์ฌ๊ด์ฌ๋ชจ๋์ ํ๊ฒ๋ฉ์๋๋ก ์ค์ ํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์
- ⇒ Bean Configuration File์ pointcut ์๋ฆฌ๋จผํธ์ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณต
- ⇒ ํ๊ฒ๋ฉ์๋๋ฅผ ์ง์ ํ๊ธฐ ์ํ Pointcut์ ๋ํ ์ฌ์ฌ์ฉ์ ๋ชฉ์ ์ผ๋ก ์์ฑ
- ⇒ ๋ฉ์๋๋ช ๊ณผ ๋ฉ๊ฐ๋ณ์๊ฐ Pointcut ์๋ณ์๋ก ์ฌ์ฉ๋๋ฉฐ ๋ฉ์๋ ํธ์ถ ํ์์ผ๋ก ํํ๋ ์ ์๋ค
- value ์์ฑ : ํ๊ฒ๋ฉ์๋๋ฅผ ์ค์ ํ๊ธฐ ์ํ ์ ๋ณด(execution & within)๋ฅผ ์์ฑ๊ฐ์ผ๋ก ์ค์
- ⇒ ๋ค๋ฅธ ์์ฑ์ด ์๋ ๊ฒฝ์ฐ ์์ฑ๊ฐ๋ง ์ค์ ๊ฐ๋ฅ
@Before
@AfterReturning
- After Returning Advice ๋ฉ์๋๋ฅผ ์ค์ ํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์
- ⇒ Bean Configuration File์ after-returning ์๋ฆฌ๋จผํธ์ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณต
- returning ์์ฑ : ํ๊ฒ๋ฉ์๋์ ๋ฐํ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ๋งค๊ฐ๋ณ์์ ์ด๋ฆ์ ์์ฑ๊ฐ์ผ๋ก ์ค์
@AfterThrowing
- After Throwing Advice ๋ฉ์๋๋ฅผ ์ค์ ํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์
- ⇒ Bean Configuration File์ after-throwing ์๋ฆฌ๋จผํธ์ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณต
- throwing ์์ฑ : ํ๊ฒ๋ฉ์๋์์ ๋ฐ์๋ ์์ธ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋งค๊ฐ๋ณ์์ ์ด๋ฆ์ ์์ฑ๊ฐ์ผ๋ก ์ค์
@After
- After Advice ๋ฉ์๋๋ฅผ ์ค์ ํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์
- ⇒ Bean Configuration File์ after ์๋ฆฌ๋จผํธ์ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณต
@Around
- Around Advice ๋ฉ์๋๋ฅผ ์ค์ ํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์
- ⇒ Bean Configuration File์ around ์๋ฆฌ๋จผํธ์ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณต
'Legacy' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2022.03.15์ ๊ธฐ๋ก (0) | 2022.03.15 |
---|---|
2022.03.14์ ๊ธฐ๋ก (0) | 2022.03.14 |
2022.03.08~03.10 ์ ๊ธฐ๋ก (0) | 2022.03.09 |
2022.03.07 ์ ๊ธฐ๋ก (0) | 2022.03.07 |
2022.03.05~03.06 ์ ๊ธฐ๋ก (0) | 2022.03.05 |