λ°˜μ‘ν˜•

λžŒλ‹€

μ„€λͺ…

읡λͺ…ν•¨μˆ˜λ‹€. 읡λͺ…ν•¨μˆ˜ 즉, μ½”λ“œ λΈ”λŸ­μ΄λ‹€.
μ½”λ“œ λΈ”λŸ­μ€ λ©”μ†Œλ“œ 내에 μ‘΄μž¬ν•΄μ•Ό ν•œλ‹€!

β€» 읡λͺ…ν•¨μˆ˜

μž¬μ‚¬μš© κ°€λŠ₯ν•œ κΈ°λŠ₯의 일뢀뢄을 μ „λ‹¬ν•˜κ³  μ‹Άμ„λ•Œ μ‚¬μš©ν•˜λŠ”κ²ƒ.
ν•¨μˆ˜λ“€μ— ν•¨μˆ˜λ₯Ό 인자둜 μ „λ‹¬ν•˜λŠ” 경우 (콜백?)

 

μ½”λ“œμ˜ˆμ‹œ
//κΈ°λ³Έ 문법 
(args) -> {
	//블라블라
}
/* 
ASIS: λžŒλ‹€λŠ” νƒ€μž… μ§€μ‹œμž(Integer)λ₯Ό μƒλž΅ν•  수 μžˆλ‹€ 

ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€κ°€ νƒ€μž…μ„ μ„€λͺ…ν•˜κ³  μžˆμ–΄, 
μ»΄νŒŒμΌλŸ¬κ°€ ν•„μš”ν•œ λͺ¨λ“  정보λ₯Ό μ œκ³΅ν•΄μ€„ 수 있기 λ•Œλ¬Έμ΄λ‹€.
*/
(Intefer x) -> x + 1; 

// TOBE: μ΄λ ‡κ²Œ!
(x) -> x + 1 


//ASIS: λ§€κ°œλ³€μˆ˜ ν•˜λ‚˜μΈ μΈν„°νŽ˜μ΄μŠ€ λ©”μ†Œλ“œ 을
(x) -> x + 1 

// TOBE: μ΄λ ‡κ²Œ ν‘œν˜„ κ°€λŠ₯
x -> x + 1
// ASIS: 읡λͺ…ν΄λž˜μŠ€ 일반적 μ‚¬μš©
void annoymousClass() {
	final Server server = new HttpServer();
	waitFor(new Condition() {
		
		@Override
		public Boolean isSatisfied() {
			return !server.isRunning();
		}
	});
}

// TOBE: λžŒλ‹€ μ‚¬μš© - ν΄λ‘œμ €μ§€λ§Œ λžŒλ‹€λ‹€.
void Closure() {
	Server server = new HttpServer();
	waitFor(() -> !server.isRunning());
}	


// (별도) WaitFor 클래슀 
class WaitFor {
	static void waitFor(Condition condition) throws
	InterruptedException {
		While (!condition.isSatisfied())
			Thread.sleep(250);
	}
}
public class LambdaStudy {
    private String firstName = "Jack";
    public void λžŒλ‹€κ°€_firstName_에_직접_μ ‘κ·Ό() {
        Function<String, String> addSurname = surname -> {
          
          // λžŒλ‹€κ°€ firstName λ³€μˆ˜μ— 직접 접근이 κ°€λŠ₯. (ν•„λ“œ,λ©”μ†Œλ“œ,μ§€μ—­λ³€μˆ˜μ— μ ‘κ·Ό κ°€λŠ₯)
          return this.firstName + " " + surname; 
        };
    }
}

 

λžŒλ‹€κ°€ λ„μž…λœ 이유

μ„€λͺ…

빅데이터λ₯Ό 닀루기 μœ„ν•΄ λ©€ν‹°μ½”μ–΄λ₯Ό ν™œμš©ν•œ λΆ„μ‚°μ²˜λ¦¬, 즉 병렬화 기술이 ν•„μš” ν•˜μ˜€μŒ.
κ·Έλž˜μ„œ java8 μ—μ„œλŠ” 병렬화λ₯Ό μœ„ν•΄ λ°°μ—΄, List, Set, Map을 κ°•ν™”ν•˜μ˜€κ³  μŠ€νŠΈλ¦Όμ„ κ°•ν™” ν•˜μ˜€λ‹€.
그리고 μŠ€νŠΈλ¦Όμ„ 효율적으둜 μ‚¬μš©ν•˜κΈ° μœ„ν•΄ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°, ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•΄ λžŒλ‹€,
λžŒλ‹€λ₯Ό μœ„ν•΄ μΈν„°νŽ˜μ΄μŠ€ λ³€ν™”κ°€ 수반 λ˜μ—ˆλ‹€.

빅데이터 지원 → 병렬화 κ°•ν™” → μ»¬λ ‰μ…˜ κ°•ν™” → 슀트림 κ°•ν™” → λžŒλ‹€ λ„μž… → μΈν„°νŽ˜μ΄μŠ€ λͺ…μ„Έ λ³€κ²½ → ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€ λ„μž…

 

λžŒλ‹€μ˜ μž₯/단점

μž₯점

μ½”λ“œκ°€ κ°„κ²°ν•˜λ‹€. 개발자의 μ˜λ„λ₯Ό μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆλ‹€.
병렬 μ²˜λ¦¬μ— μœ λ¦¬ν•¨.
ν•¨μˆ˜λ₯Ό λ§Œλ“œλŠ” μ‹œκ°„μ„ 덜 듀일 수 μžˆλ‹€.

단점

μ½”λ“œ λ‚¨μš©μ‹œ 디버깅이 νž˜λ“€ 수 μžˆλ‹€.
μž¬κ·€ 둜직 λ§Œλ“œλŠ”κ²ƒμ€ μ–΄λ ΅λ‹€.

 

λ©”μ†Œλ“œ μ°Έμ‘°

μ„€λͺ…

λ©”μ†Œλ“œ μ°Έμ‘°λ₯Ό λžŒλ‹€λ‘œμ„œ μ‚¬μš©ν•  λ•Œμ—” 이미 μ‘΄μž¬ν•˜λŠ” 이름을 가진 λ©”μ†Œλ“œλ₯Ό κ°€λ¦¬ν‚€λŠ” 것인데, 그것은 이미 λͺΈμ²΄λ₯Ό 가지고 μžˆλ‹€.
일반 λ©”μ†Œλ“œλ₯Ό ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λ‘œ μ „ν™˜ν•˜λŠ” 행동.

β€» ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€ (@FunctionalInterfate)

ν•¨μˆ˜ν˜• λ©”μ†Œλ“œ or SAM(단일 좔상 λ©”μ†Œλ“œ)
ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€μ— ν•˜λ‚˜μ˜ λ©”μ†Œλ“œλ§Œ κ°€μ§ˆ 수 있음.
λΆ€λͺ¨μ˜ ν•¨μˆ˜ν˜• λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ“œ κ°€λŠ₯
@FunctionalInterface
interface A {
	abstract void apply();
}

// κ°€λŠ₯
interface B extends A {
	
	@Override
	abstract void apply();
} 

// λΆˆκ°€λŠ₯
interface B extends A {
	
	@Override
	abstract void illegal();
} 

 

λ©”μ†Œλ“œ 참쑰의 νŠΉμ§•

쌍콜둠(::)의 μ•žλΆ€λΆ„μ€ λŒ€μƒμœΌλ‘œ ν•˜λŠ” 클래슀λͺ…, 뒷뢀뢄은 λ©”μ†Œλ“œλͺ…
method 뒀에 μ†Œκ΄„ν˜Έ()을 쓰지 μ•ŠλŠ”λ‹€.

λ©”μ†Œλ“œ 참쑰의 μœ ν˜•

μƒμ„±μž μ°Έμ‘° (String::new)
  쌍콜둠 뒀에 newκ°€ λΆ™μŒ

  String 클래슀의 μΈμžμ—†λŠ” μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” λžŒλ‹€λ₯Ό 생성
  () → new String() κ³Ό 같은 의미

정적 λ©”μ†Œλ“œ μ°Έμ‘° (String::valueOf)
  x → String.valueOf(x)

두 가지 μœ ν˜•μ΄ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ μ°Έμ‘° (x::toString)
  xλŠ” μ ‘κ·Ό κ°€λŠ₯ν•œ νŠΉμ • μΈμŠ€ν„΄μŠ€λΌ κ°€μ •

  () → x.toString()

 

 

λžŒλ‹€μ˜ μ˜ˆμ™Έ 처리

μ„€λͺ…

λžŒλ‹€λŠ” μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό μœ„ν•œ μƒˆλ‘œμš΄ 문법이 μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ.
λžŒλ‹€μ—μ„œ λ˜μ Έμ§„ μ˜ˆμ™Έλ“€μ€ 일반 λ©”μ†Œλ“œ 호좜과 λ™μΌν•˜κ²Œ ν˜ΈμΆœν•œ 곳으둜 μ „νŒŒ λœλ‹€.
즉, λžŒλ‹€λ₯Ό ν˜ΈμΆœν•˜λŠ” λ©”μ†Œλ“œμ—μ„œ μ–΄λ–»κ²Œ 싀행될지에 λŒ€ν•΄ μ±…μž„μ„ 지지 μ•ŠμŒ. λžŒλ‹€λŠ” 병렬 λ˜λŠ” 미래의 μ–΄λŠ μ‹œμ μ— 처리될 μˆ˜λ„ 있기 λ•Œλ¬Έ.
μ˜ˆμ™Έμ²˜λ¦¬κ°€ κ°€λŠ₯ν•˜λ„λ‘ λ‘œμ§μ„ λ§Œλ“€μˆ˜λŠ” μžˆμ§€λ§Œ μ½”λ“œκ°€ μž₯황해진닀.

λΉ„μ§€λ‹ˆμŠ€ 둜직 < μ—λŸ¬ 처리 μœ„ν•œ 보일러 ν”Œλ ˆμ΄νŠΈ μ½”λ“œ

 

 

ν•¨μˆ˜μ™€ 클래슀

μ„€λͺ…

ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€ν™”κ°€ λ˜μ–΄μ•Ό 함. ν•¨μˆ˜λŠ” 그렇지 μ•ŠμŒ.
ν΄λž˜μŠ€λŠ” μƒˆλ‘œ μƒμ„±λ˜λ©΄ 객체λ₯Ό μœ„ν•΄ λ©”λͺ¨λ¦¬κ°€ 할당됨.
ν•¨μˆ˜λ₯Ό μœ„ν•œ λ©”λͺ¨λ¦¬λŠ” λ”± ν•œλ²ˆ ν• λ‹Ή 됨. (μžλ°” νž™μ˜ νΌλ¨Έλ„ŒνŠΈ(permanent)μ˜μ—­μ— μ €μž₯ 됨.
κ°μ²΄λŠ” μžμ‹ λ§Œμ˜ 데이터λ₯Ό κ°€μ§€μ§€λ§Œ ν•¨μˆ˜λŠ” 데이터와 μ—°κ΄€ 관계가 μ—†λ‹€.
μžλ°” 클래슀의 정적 λ©”μ†Œλ“œλŠ” ν•¨μˆ˜μ™€ 거의 μœ μ‚¬ν•˜λ‹€.

 


μ°Έκ³ 

(μ±…) μžλ°” λžŒλ‹€ 배우기
(μ±…) μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체지ν–₯의 원리와 이해
https://coding-factory.tistory.com/265

λ°˜μ‘ν˜•
λ°˜μ‘ν˜•

ν”„λ‘œμ„ΈμŠ€

μ„€λͺ…

싀행쀑인 ν”„λ‘œκ·Έλž¨

β€» λ©€ν‹° ν”„λ‘œμ„ΈμŠ€

λ‹€μˆ˜μ˜ 데이터 μ €μž₯ μ˜μ—­μ„ 가짐 (λ‹€μˆ˜μ˜ Tλ©”λͺ¨λ¦¬λ₯Ό κ°€μ§€λŠ” ꡬ쑰)
ν”„λ‘œμ„ΈμŠ€ 끼리 μ„œλ‘œ μ°Έμ‘° λΆˆκ°€λŠ₯ (곡간 μ˜μ—­ μžμ²΄κ°€ 뢄리)

 

μŠ€λ ˆλ“œ

μ„€λͺ…

ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨ λ‚΄ μ—¬λŸ¬κ°œμ˜ μ‹€ν–‰ 흐름

β€» λ©€ν‹° μŠ€λ ˆλ“œ
Tλ©”λͺ¨λ¦¬ λͺ¨λΈ(μŠ€νƒœν‹±, μŠ€νƒ, νž™)의 μŠ€νƒ μ˜μ—­(λ©”μ†Œλ“œ μ˜μ—­)을 μŠ€λ ˆλ“œ 갯수 만큼 λΆ„ν• ν•΄μ„œ μ‚¬μš©ν•˜λŠ” 것.
μ„œλ‘œ λ‹€λ₯Έ μŠ€λ ˆλ“œμ˜ μŠ€νƒ μ˜μ—­μ€ μ ‘κ·Ό λͺ»ν•˜μ§€λ§Œ μŠ€νƒœν‹±μ˜μ—­, νž™ μ˜μ—­μ€ κ³΅μœ ν•΄μ„œ μ‚¬μš©ν•˜λŠ” ꡬ쑰.
λ©€ν‹° ν”„λ‘œμ„ΈμŠ€ λŒ€λΉ„ λ©”λͺ¨λ¦¬λ₯Ό 적게 μ‚¬μš©ν•˜λŠ” ꡬ쑰.!!
μ „μ—­ λ³€μˆ˜ μ‚¬μš©μ‹œ λ¬Έμ œκ°€ 될 κ°€λŠ₯μ„± 쑴재 ((λ³€μˆ˜μ°Έμ‘°)락을 κ±°λŠ” 방법이 μžˆλ‹€κ³  함 (?))

 

μŠ€λ ˆλ“œν’€

μŠ€λ ˆλ“œ 풀은 μž‘μ—…μ²˜λ¦¬μ— μ‚¬μš©λ˜λŠ” μŠ€λ ˆλ“œλ₯Ό μ œν•œλœ 개수만큼 정해놓고 μž‘μ—…ν (Queue)에 λ“€μ–΄μ˜€λŠ” μž‘μ—…λ“€μ„ ν•˜λ‚˜μ”© μŠ€λ ˆλ“œκ°€ 맑아 처리.
정해진 큐에 λ“€μ–΄μ˜¨ μž‘μ—…μ„ ν•˜λ‚˜μ”© μ²˜λ¦¬ν•˜κΈ°λ•Œλ¬Έμ—, μš”μ²­μ΄ λŠ˜μ–΄λ‚˜λ„ 전체 큐 κ°―μˆ˜λŠ” λŠ˜μ–΄λ‚˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ„±λŠ₯이 κΈ‰κ²©νžˆ μ €ν•˜λ˜μ§€ μ•ŠμŒ.

ExecutorService

ExecutorServiceλŠ” μŠ€λ ˆλ“œμ—μ„œ 비동기 적으둜 μž‘μ—…μ„ μ‹€ν–‰ν•  μˆ˜μžˆλŠ” μΈν„°νŽ˜μ΄μŠ€.
java.util.concurrent νŒ¨ν‚€μ§€μ— 있고, μŠ€λ ˆλ“œ 풀을 μœ μ§€ κ΄€λ¦¬ν•˜κ³  μž‘μ—…μ„ ν• λ‹Ήν•˜λŠ” 데 λ„μ›€μ΄λœλ‹€. 
λ˜ν•œ μž‘μ—… μˆ˜κ°€ μ‚¬μš© κ°€λŠ₯ν•œ μŠ€λ ˆλ“œλ³΄λ‹€ λ§Žμ„ 경우 μ‚¬μš© κ°€λŠ₯ν•œ μŠ€λ ˆλ“œκ°€μžˆμ„ λ•ŒκΉŒμ§€ μž‘μ—…μ„ λŒ€κΈ°μ—΄μ— λ„£λŠ” κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.

 

 

Fork Join Framework

병렬화 ν•  수 μžˆλŠ” μž‘μ—…μ„ μž¬κ·€μ μœΌλ‘œ μž‘μ€ μž‘μ—…μœΌλ‘œ λΆ„ν•  ν›„ μ„œλΈŒνƒœμŠ€ν¬μ— 각각의 κ²°κ³Όλ₯Ό 합쳐전체 κ²°κ³Όλ₯Ό λ§Œλ“¬

Fork: 데이터 반볡적으둜 뢄리
Join: μ„œλΈŒ κ²°κ³Όλ₯Ό κ²°ν•©ν•˜μ—¬ μ΅œμ’… κ²°κ³Όλ₯Ό λ§Œλ“¬

 

 

ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ˜ 차이

μ„€λͺ…

ν”„λ‘œμ„ΈμŠ€λŠ” λ©”λͺ¨λ¦¬ μ˜μ—­μ„ κ³΅μœ ν•˜λ©°, μŠ€λ ˆλ“œλŠ” μŠ€νƒμ˜μ—­μ„ 생성함

 


μ°Έκ³ 

https://wikibook.co.kr/java-oop-for-spring/ (μ±…: μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체지ν–₯의 원리와 이해)
https://3dmpengines.tistory.com/2003

https://www.javatpoint.com/java-executorservice

 

ν”„λ‘œμ„ΈμŠ€&μ“°λ ˆλ“œμ™€ λ©”λͺ¨λ¦¬(μŠ€νƒ, λ ˆμ§€μŠ€ν„°)

Threadλž€ ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨λ‚΄μ—μ„œ μ—¬λŸ¬ 개의 μ‹€ν–‰ 흐름을 두기 μœ„ν•œ λͺ¨λΈ ν•˜λ‚˜μ˜ ν”„λ‘œμ„Έμ„œ(μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨)μ—μ„œ 각 독립적인 일의 λ‹¨μœ„μΈ μŠ€λ ˆλ“œ(Thread)둜 μ—¬λŸ¬ μž‘μ—…μ„ μ²˜λ¦¬ν•  수 μžˆλ‹€. μ¦‰ ν•˜

3dmpengines.tistory.com

https://cheershennah.tistory.com/170

https://www.geeksforgeeks.org/thread-pools-java/

https://black9p.github.io/2018/01/20/병렬-데이터-μ²˜λ¦¬μ™€-μ„±λŠ₯/

λ°˜μ‘ν˜•

'개발 > java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

WebClient μ‚¬μš©μ‹œ μ£Όμ˜ν• μ !  (0) 2023.08.13
[RxJava] λ¦¬μ•‘ν‹°λΈŒ ν”„λ‘œκ·Έλž˜λ°  (0) 2022.05.02
java - call by value, call by reference  (0) 2021.07.11
μžλ°”-λžŒλ‹€(lambda)  (0) 2021.05.28
jdbc, mybatis, jpa  (0) 2018.12.31
λ°˜μ‘ν˜•
AOP (Aspect-Oriented Programming)
μ„€λͺ…

μ—¬λŸ¬ λ‘œμ§λ‹¨μ— μ μš©λ˜μ–΄μ•Ό ν•  νŠΉμ • 쀑볡 λ‘œμ§μ„ μ—¬λŸ¬ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³  μ μš©ν•˜λŠ” 것
흩어진 μ½”λ“œλ₯Ό ν•œκ³³μœΌλ‘œ λͺ¨μœΌμž!
νš‘λ‹¨ 관심에 따라 ν”„λ‘œκ·Έλž˜λ° ν•˜λŠ”κ²ƒ

β€» νš‘λ‹¨
λ™μ„œ λ°©ν–₯으둜 κ°€λ‘œμ§ˆλŸ¬ κ°€λŠ”κ²ƒ
β€» νš‘λ‹¨ 관심사 (Cross cutting concern)

λ‹€μˆ˜μ˜ λͺ¨λ“ˆμ— κ³΅ν†΅μ μœΌλ‘œ λ‚˜νƒ€λ‚˜λŠ” 뢀뢄이 쑴재
λͺ¨λ“ˆλ³„λ‘œ λ°˜λ³΅λ˜μ–΄ μ€‘λ³΅ν•΄μ„œ λ‚˜νƒ€λ‚˜λŠ” λΆ€λΆ„λ°˜λ³΅κ³Ό 쀑볡은 λΆ„λ¦¬ν•˜μ—¬ ν•œκ³³μ—μ„œ ν‘œν˜„ν•΄μ•Ό ν•œλ‹€λΌλŠ”κ²ƒμ„ 항상 인지해야 함.
νŠΉμ§•

Aspect 으둜 ν‘œν˜„
둜직(Code) μ£Όμž…
λ‘œκΉ…, λ³΄μ•ˆ, νŠΈλžœμž­μ…˜ κΈ°λŠ₯이 반볡적으둜 λ‚˜νƒ€λ‚¨
AOPλŠ” ν”„λ‘μ‹œ 기반, μΈν„°νŽ˜μ΄μŠ€ 기반, λŸ°νƒ€μž„ 기반 이닀.

 

λ©”μ†Œλ“œμ— μ£Όμž…ν•  수 μžˆλŠ” μ˜μ—­

@Before: λŒ€μƒ λ©”μ†Œλ“œ μ‹œμž‘ μ „
@After: λŒ€μƒ λ©”μ†Œλ“œ μ‹œμž‘ ν›„
    @AfterReturning: λŒ€μƒ λ©”μ†Œλ“œ 정상 μ’…λ£Œ ν›„ 
    @AfterThrowing: λŒ€μƒ λ©”μ†Œλ“œ μ˜ˆμ™Έ λ°œμƒ → μ’…λ£Œ ν›„

 

AOP μš©μ–΄
Aspect μ—¬λŸ¬κ°œμ˜ Advice, μ—¬λŸ¬κ°œμ˜ Pointcut의 결합체λ₯Ό μ˜λ―Έν•˜λŠ” μš©μ–΄
Advisor ν•œκ°œμ˜ Advice, ν•œκ°œμ˜ Pointcut
Advice pointcut에 μ μš©ν•  둜직, 즉 λ©”μ„œλ“œλ₯Ό 의미 

@Before("execution( * runSomething())") 
public void before(JoinPoint joinPoint) { ... }
JoinPoint 연결점. μ—°κ²° κ°€λŠ₯ν•œ 지점. Aspect 적용 κ°€λŠ₯ 지점. μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬κ°€ κ΄€λ¦¬ν•˜λŠ” 빈의 λͺ¨λ“  λ©”μ„œλ“œ

public void before(JoinPoint joinPoint) { ... }
Pointcut 자λ₯΄λŠ” 지점, Aspect 적용 μœ„μΉ˜ μ§€μ •μž. νš‘λ‹¨ 관심사λ₯Ό μ μš©ν•  타깃 λ©”μ„œλ“œλ₯Ό μ„ νƒν•˜λŠ” μ§€μ‹œμž.

@Before("execution( * runSomething())") → runSomething() μ‹€ν–‰ μ „ AOP을 μ‹€ν–‰ν•˜λΌλŠ” 뜻

 

Pointcut μ§€μ •μž κ΄€λ ¨

 
  execution

μΌμΉ˜ν•˜λŠ” λ©”μ„œλ“œ μ‹€ν–‰ 쑰인 ν¬μΈνŠΈμ— μ‚¬μš©λ©λ‹ˆλ‹€. 이것은 Spring AOP둜 μž‘μ—… ν•  λ•Œ μ‚¬μš©ν•˜λŠ” μ£Όμš” 포인트 μ»· μ§€μ •μžμž…λ‹ˆλ‹€.

  within
νŠΉμ • μœ ν˜• λ‚΄ κ²°ν•© 점에 λŒ€ν•œ 맀칭을 μ œν•œν•©λ‹ˆλ‹€ (Spring AOP μ‚¬μš©μ‹œ 맀칭 μœ ν˜• λ‚΄μ—μ„œ μ„ μ–Έ 된 λ©”μ†Œλ“œ μ‹€ν–‰).

  this
빈 μ°Έμ‘° (Spring AOP ν”„λ‘μ‹œ)κ°€ 주어진 μœ ν˜•μ˜ μΈμŠ€ν„΄μŠ€ 인 쑰인 포인트 (Spring AOP μ‚¬μš©μ‹œ λ©”μ†Œλ“œ μ‹€ν–‰)에 λŒ€ν•œ 맀칭을 μ œν•œν•©λ‹ˆλ‹€.

  target
λŒ€μƒ 객체 (ν”„λ‘μ‹œλ˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 객체)κ°€ 주어진 μœ ν˜•μ˜ μΈμŠ€ν„΄μŠ€ 인 쑰인 포인트 (Spring AOP μ‚¬μš©μ‹œ λ©”μ„œλ“œ μ‹€ν–‰)에 λŒ€ν•œ 맀칭을 μ œν•œν•©λ‹ˆλ‹€.

  args
μΈμˆ˜κ°€ 주어진 μœ ν˜•μ˜ μΈμŠ€ν„΄μŠ€ 인 쑰인 포인트 (Spring AOP μ‚¬μš©μ‹œ λ©”μ„œλ“œ μ‹€ν–‰)에 λŒ€ν•œ 맀칭을 μ œν•œν•©λ‹ˆλ‹€.

  @target
μ‹€ν–‰ 객체의 ν΄λž˜μŠ€κ°€ 주어진 νƒ€μž…μ˜ μ–΄λ…Έν…Œμ΄μ…˜μ„ κ°€μ§€κ³ μžˆλŠ” join point (Spring AOP μ‚¬μš©μ‹œ λ©”μ†Œλ“œ μ‹€ν–‰)둜 맀칭을 μ œν•œν•©λ‹ˆλ‹€.

  @args
전달 된 μ‹€μ œ 인수의 λŸ°νƒ€μž„ μœ ν˜•μ΄ 주어진 μœ ν˜•μ˜ μ–΄λ…Έν…Œμ΄μ…˜μ„ κ°–λŠ” κ²°ν•© 지점 (Spring AOP μ‚¬μš©μ‹œ λ©”μ†Œλ“œ μ‹€ν–‰)에 λŒ€ν•œ 일치λ₯Ό μ œν•œν•©λ‹ˆλ‹€.

  @within
주어진 μ–΄λ…Έν…Œμ΄μ…˜ (Spring AOPλ₯Ό μ‚¬μš©ν•  λ•Œ 주어진 μ–΄λ…Έν…Œμ΄μ…˜μ΄μžˆλŠ” νƒ€μž…μ—μ„œ μ„ μ–Έ 된 λ©”μ†Œλ“œμ˜ μ‹€ν–‰)μ΄μžˆλŠ” νƒ€μž… λ‚΄μ—μ„œ 쑰인 ν¬μΈνŠΈμ— λŒ€ν•œ 맀칭을 μ œν•œν•©λ‹ˆλ‹€.

  @annotation
Join point의 주제 (Spring AOPμ—μ„œ μ‹€ν–‰λ˜λŠ” λ©”μ†Œλ“œ)κ°€ 주어진 μ–΄λ…Έν…Œμ΄μ…˜μ„ κ°€μ§€κ³ μžˆλŠ” join point둜 맀칭을 μ œν•œν•©λ‹ˆλ‹€.

 

Pointcut ν‘œν˜„μ‹ 예제

 
  λͺ¨λ“  곡용 λ©”μ†Œλ“œ μ‹€ν–‰

execution(public * * (..))

  λ‹€μŒμœΌλ‘œ μ‹œμž‘ν•˜λŠ” 이름을 가진 λͺ¨λ“  λ©”μ†Œλ“œμ˜ μ‹€ν–‰ 
setexecution(* set * (..))

  AccountServiceμΈν„°νŽ˜μ΄μŠ€μ— μ˜ν•΄ μ •μ˜ 된 λͺ¨λ“  λ©”μ†Œλ“œμ˜ μ‹€ν–‰ 
execution(* com.xyz.service.AccountService. * (..))

  serviceνŒ¨ν‚€μ§€μ— μ •μ˜ 된 λͺ¨λ“  λ©”μ†Œλ“œ μ‹€ν–‰ 
execution(* com.xyz.service. *. * (..))

  μ„œλΉ„μŠ€ νŒ¨ν‚€μ§€ λ˜λŠ” ν•˜μœ„ νŒ¨ν‚€μ§€ 쀑 ν•˜λ‚˜μ— μ •μ˜ 된 λͺ¨λ“  λ©”μ„œλ“œ μ‹€ν–‰
execution(* com.xyz.service .. *. * (..))

  μ„œλΉ„μŠ€ νŒ¨ν‚€μ§€ λ‚΄μ˜ λͺ¨λ“  쑰인 포인트 (Spring AOPμ—μ„œλ§Œ λ©”μ„œλ“œ μ‹€ν–‰)
within(com.xyz.service. *)

 μ„œλΉ„μŠ€ νŒ¨ν‚€μ§€ λ˜λŠ” ν•˜μœ„ νŒ¨ν‚€μ§€ 쀑 ν•˜λ‚˜ λ‚΄μ˜ λͺ¨λ“  쑰인 지점 (Spring AOPμ—μ„œλ§Œ λ©”μ„œλ“œ μ‹€ν–‰)
within(com.xyz.service .. *)

  ν”„λ‘μ‹œκ°€ AccountServiceμΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” λͺ¨λ“  쑰인 포인트 (Spring AOPμ—μ„œλ§Œ λ©”μ„œλ“œ μ‹€ν–‰) 
this(com.xyz.service.AccountService)

 


 

μ°Έκ³ 


https://wikibook.co.kr/java-oop-for-spring/ (μ±…: μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체지ν–₯의 원리와 이해)
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop

 

λ°˜μ‘ν˜•

'개발 > spring' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

νŠΈλžœμž­μ…˜  (0) 2021.11.25
Spring - μŠ€ν”„λ§ MVC 간단 정리  (0) 2021.06.05
Spring - DI (Dependency Injection)  (0) 2021.06.01
IOC/DI, DIμ‘μš©  (0) 2017.11.20
spring μ‹œμž‘, maven μ„€μΉ˜  (0) 2017.11.12
λ°˜μ‘ν˜•
  • Blocking : λ‹€μŒ μˆœμ„œλ₯Ό κΈ°λ‹€λ¦Ό. κΈ°λ‹€λ¦¬λŠ” λ™μ•ˆ 아무것도 λͺ»ν•¨.
  • Non-blocking : λ‹€μŒ μˆœμ„œλ₯Ό 기닀리지 μ•Šκ³ (κ²°κ³Όλ°›μŒ) κ·Έ λ‹€μŒμ„ μ‹€ν–‰.
  • Synchronous : μš”μ²­μ— λŒ€ν•œ 결과값을 μš”μ²­ν•œ 주체가 인지함. (μš”μ²­μ— λŒ€ν•œ κ²°κ³Ό μ‹œκ°„κ³Ό λ‹€μŒ μš”μ²­μ‹œκ°„μ΄ 동일).
  • Asynchronous : μš”μ²­μ— λŒ€ν•œ 결과값을 μš”μ²­ν•œ 주체가 μΈμ§€ν•˜μ§€ μ•Šκ³ , κ²°κ³Όλ₯Ό μ£ΌλŠ” κ³³μ—μ„œ λ”°λ‘œ 확인

 

- μ°Έκ³ 

 

http://wiki.sys4u.co.kr/pages/viewpage.action?pageId=7767390

νŽ˜μ΄μ§€ PLATEER OPEN WIKI 기타등등 λ°°λ„ˆμ˜ 맨 끝으둜 λ°°λ„ˆμ˜ 맨 처음으둜 메타 λ°μ΄ν„°μ˜ 끝으둜 κ±΄λ„ˆλ›°κΈ° μ•Œ 수 μ—†λŠ” μ‚¬μš©μž (sonnsk87)λ‹˜μ΄ μž‘μ„±, 1μ›” 17, 2018에 μ΅œμ’… λ³€κ²½ 메타 λ°μ΄ν„°μ˜ μ‹œμž‘μœΌλ‘œ 이동

wiki.sys4u.co.kr

juneyr.dev/reactive-programming

λ°˜μ‘ν˜•
λ°˜μ‘ν˜•

ν”„λ‘ νŠΈμ—μ„œ 보내지 μ•Šμ€ νŒŒλΌλ―Έν„° 값을 μ„œλ²„μ—μ„œ λ°›μœΌλ €κ³  ν• λ•Œ λ°œμƒ.

 

@RequestParam의 required μ—¬λΆ€ 확인

ex. @RequestParam(value=“param”, required=false) MultipartFile param ....

둜 μ •μ˜ν•˜λ©΄ param 을 null둜 받을 수 μžˆλ‹€.

 

+ MultipartFile[]의 κ²½μš°λŠ” ν”„λ‘ νŠΈμ—μ„œ 값을 μ•ˆλ„˜κΈ°λ”λΌλ„

κΈ°λ³Έ μ£Όμ†Œ(null 이 μ•„λ‹Œ κΈ°λ³Έ 길이 0)κ°€ μ‘΄μž¬ν•˜μ—¬ 해당상황 λ°œμƒ μ•ˆν•¨!

λ°˜μ‘ν˜•
λ°˜μ‘ν˜•

μ‚¬μš©μ€‘μΈ 포트 ν™•μΈν•„μš” -> 포트λ₯Ό μ£½μ΄μ„Έμš”.

$ lost -I :포트번호
COMMAND   PID       USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
java    24496 xxx   6u  IPv6 xxxx     0t0  TCP *:http-alt (LISTEN)

$ kill -9 PID (PIDλŠ” 24496)

 

λ°˜μ‘ν˜•
λ°˜μ‘ν˜•

Lombokν”ŒλŸ¬κ·ΈμΈμ„ μ„€μΉ˜ ν•˜μ˜€λŠ”μ§€ ν™•μΈν•˜κΈ°!

(pom.xml으둜 λΆˆλŸ¬μ˜¨λ‹€κ³  끝이 μ•„λ‹ˆμ˜€λ‹€)

 

Help > Find Action > Plugins 검색 > Marketplaceλ‹¨μ—μ„œ Lombok κ²€μƒ‰ν•˜μ—¬ μ„€μΉ˜

 

λ°˜μ‘ν˜•
λ°˜μ‘ν˜•
  • jdbc(Java Database Connectivity)
μ†ŒμŠ€μ½”λ“œμ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Ό κ°€λŠ₯ν•˜λ„λ‘ ν•˜λŠ” API

  • Mybatis (μ˜μ†μ„± ν”„λ ˆμž„μ›Œν¬μ˜ 일쒅)
μ†ŒμŠ€μ½”λ“œ(μ •ν™•νžˆλŠ” μ–΄λ…Έν…Œμ΄μ…˜(μ†ŒμŠ€μ½”λ“œμ— λ°μ΄ν„°μ˜ 데이터λ₯Ό ν‘œν˜„:클래슀λ₯Ό μ£Όμž…ν•˜μ—¬ μ‚¬μš© κ°€λŠ₯) 으둜)μ—μ„œ 
sqlλ¬Έμž₯을 λΆ„λ¦¬ν•˜μ—¬ xml에 μ €μž₯ ν•˜λ©΄μ„œ 이 λ‘˜μ„ μ—°κ²°μ‹œμΌœμ£ΌλŠ” λ°©μ‹μœΌλ‘œ μž‘λ™ν•œλ‹€.
SQLmapper : jdbcTemplate

  • Ibatis->mybatis 이름바뀐 이유
apacheμ—μ„œ google둜 μ΄λ™ν•˜λ©΄μ„œ λͺ…칭이 변경됨.

--> 데이터 μ „λ‹¬λ§Œ ν•˜κ³  객체지ν–₯을 κ³ λ €ν•˜μ§€ μ•Šμ•˜λ‹€.

  • ORM(Object-Relationl Mapping)
객체와 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ κ°„μ˜ 차이λ₯Ό μ€‘κ°„μ—μ„œ ν•΄κ²°
RDBλ₯Ό 객체지ν–₯적으둜 μ‚¬μš©ν•˜κΈ° μœ„ν•œ 기술.

  • Hibernate
ORMκΈ°λŠ₯ 제곡. ν”„λ ˆμž„μ›Œν¬
쿼리 μž‘μ„± ν•„μš” μ—†κ³ , xml λ©”νƒ€λ°μ΄ν„°λ‘œ 객체관계 맀핑을 κ°„λ‹¨ν•˜κ²Œ μˆ˜ν–‰.

  • JPA
ORMν‘œμ€€ μ œμ‹œ
μžλ°”μ§„μ˜μ—μ„œ λ§Œλ“¬. ORMκΈ°μˆ ν‘œμ€€.
SQLμž‘μ„± 없이 객체λ₯Ό λ°μ΄ν„°λ² μ΄μŠ€μ— 직접 μ €μž₯ν•  수 μžˆκ²Œν•˜κ³  
객체와 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ˜ 차이도 μ€‘κ°„μ—μ„œ ν•΄κ²° ν•΄ 쀌

예λ₯Όλ“€λ©΄ 쿼리가 λ³€κ²½λ˜λ©΄, μ†ŒμŠ€μ½”λ“œλ„ λ³€κ²½ν•΄μ•Όν•˜λŠ” 상황이 생김

κ°œλ°œμžλŠ” SQL을 μž‘μ„±ν•˜μ§€ μ•ŠμŒ. μ–΄λ–»κ²Œ ν‘œν˜„λ μ§€ μ˜ˆμƒν•˜λ©΄λ¨.
쑰회된 κ²°κ³Όλ₯Ό 객체둜 λ§€ν•‘ν•˜λŠ” μž‘μ—…λ„ μžλ™μœΌλ‘œ 처리됨. 
데이터 μ €μž₯ 계측에 μž‘μ„±ν•΄μ•Ό ν•  μ½”λ“œκ°€ 1/3으둜 쀄어듬.

개발 생산성 & μœ μ§€λ³΄μˆ˜ 쒋아짐

λ‚¨λŠ”μ‹œκ°„μ— μ½”λ“œ ν’ˆμ§ˆκ³Ό ν…ŒμŠ€νŠΈμ— 더 λ§Žμ€ μ‹œκ°„μ„ μŸμ„ 수 있음. 
but, λ³΅μž‘ν•œ 쿼리λ₯Ό 닀룰땐 ν•œκ³„κ°€ 있긴 함..


λ°˜μ‘ν˜•
λ°˜μ‘ν˜•

1. HTTPκ°€ 무엇?

    • HTTPλŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ μ‚¬μ΄μ— μ΄λ£¨μ–΄μ§€λŠ” μš”μ²­/응닡(request/response) ν”„λ‘œν† μ½œμ΄λ‹€.  (?ν”„λ‘œν† μ½œ : ν†΅μ‹ κ·œμ•½)

예λ₯Ό λ“€λ©΄, 

ν΄λΌμ΄μ–ΈνŠΈμΈ μ›Ή λΈŒλΌμš°μ €κ°€ HTTPλ₯Ό ν†΅ν•˜μ—¬ μ„œλ²„λ‘œλΆ€ν„° μ›ΉνŽ˜μ΄μ§€λ‚˜ κ·Έλ¦Ό 정보λ₯Ό μš”μ²­ν•˜λ©΄, 

μ„œλ²„λŠ” 이 μš”μ²­μ— μ‘λ‹΅ν•˜μ—¬ ν•„μš”ν•œ 정보λ₯Ό ν•΄λ‹Ή μ‚¬μš©μžμ—κ²Œ μ „λ‹¬ν•˜κ²Œ λœλ‹€. 

 

이 정보가 λͺ¨λ‹ˆν„°μ™€ 같은 좜λ ₯ μž₯치λ₯Ό 톡해 μ‚¬μš©μžμ—κ²Œ λ‚˜νƒ€λ‚˜λŠ” 것이닀.

HTTPλ₯Ό 톡해 μ „λ‹¬λ˜λŠ” μžλ£ŒλŠ” http:둜 μ‹œμž‘ν•˜λŠ” URL(인터넷 μ£Όμ†Œ)둜 μ‘°νšŒν•  수 μžˆλ‹€.

 

ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„ 에닀가 μš”μ²­(request)을 ν•˜κ³  μ‘λ‹΅(response)을 λ°›κΈ° μœ„ν•΄μ„  λ‹€μŒκ³Ό 같은 과정을 κ±°μΉœλ‹€.

  • TCP/IPλŠ” 인터넷 ν”„λ‘œν† μ½œ κ΄€λ ¨ 집합을 μ΄μΉ­ν•œλ‹€. (TCP, IP, FTP, SFTP, HTTP..)
  • HTTPλŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°„μ˜ 톡신을 ν•œλ‹€.
  • HTTPλŠ” 버전이 μ‘΄μž¬ν•œλ‹€.
  • μš”μ²­(request)κ³Ό 응닡(response)을 κ΅ν™˜ν•˜μ—¬ μ„±λ¦½ν•œλ‹€.
- μš”μ²­λ©”μ„Έμ§€μ— λ©”μ†Œλ“œ(=λͺ…λ Ή),  URI,  ν”„λ‘œν† μ½œλ²„μ „(=http 버전),  μš”μ²­ν—€λ”ν•„λ“œ 등을 λ§Œλ“€μ–΄μ„œ 전달.
- μ‘λ‹΅λ©”μ„Έμ§€μ—λŠ” μš”μ²­κ²°κ³Όμ—λŒ€ν•œ μƒνƒœμ½”λ“œκ°’(=202, 404..),  ν”„λ‘œν† μ½œλ²„μ „(=http 버전),  λ°”λ””(=μ†ŒμŠ€λ³Έμ²΄ html..)..등을 λ§Œλ“€μ–΄μ„œ 전달.
 
  • HTTPλŠ” μƒνƒœλ₯Ό μœ μ§€ν•˜μ§€ μ•ŠλŠ”λ‹€.
    • ν”„λ‘œν† μ½œμ€ 과거기얡을 λͺ»ν•œλ‹€(=μš”μ²­ 응닡 처리 ν›„λ₯Ό κΈ°μ–΅ λͺ»ν•¨). κ·Έλž˜μ„œ λŒ€μ•ˆμœΌλ‘œ μΏ ν‚€λ₯Ό μ‚¬μš©ν•˜λŠ” 것이닀.
 
  • URI둜 λ¦¬μ†ŒμŠ€λ₯Ό 지정. 이λ₯Ό μ΄μš©ν•˜μ—¬ μΈν„°λ„·μƒμ˜ μ–΄λ–€ λ¦¬μ†ŒμŠ€λ₯Ό 호좜 κ°€λŠ₯.
  • λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•΄μ„œ μ§€μ‹œν•œλ‹€.
    • GET, POST, PUT, HEAD, DELETE, OPTION, TRACE, CONNECT, LINK, UNLINK...
  • 지속연결
    • TCPλ₯Ό μ’…λ£Œν•˜μ§€ μ•Šμ•„ ν•œλ²ˆμ— λ§Žμ€μ–‘μ˜ 데이터λ₯Ό 보낼 수 μžˆλ„λ‘ 함.
  • νŒŒμ΄ν”„λΌμΈν™”
    • ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ ν›„, 응닡 μ•ˆκΈ°λ‹€λ¦¬κ³  λ°”λ‘œ λ‹€λ₯Έ μš”μ²­μ„ 보낼 수 있음.
    • 이미지 10μž₯이 ν•œλ²ˆμ— λ‚˜μ˜€λŠ” 예
 
2. HTTP 단점
    • HTTPλ₯Ό μ‚¬μš©ν•œ μš”μ²­μ΄λ‚˜ 응닡은 μžκΈ°μžμ‹ μ„ μ•”ν˜Έν™”ν•˜μ§€ μ•ŠλŠ”λ‹€. (도청 λ‹Ήν•  κ°€λŠ₯μ„±)
    • 톡신 μƒλŒ€λ₯Ό ν™•μΈν•˜μ§€ μ•ŠλŠ”λ‹€. (λˆ„κ΅°κ°€κ°€ μœ„μž₯ ν•  수 μžˆλ‹€)
    • κ·Έλž˜μ„œ μ΄λŸ¬ν•œ 이유둜 HTTPS μ‚¬μš©ν•˜λŠ”κ²ƒ.
      • HTTPSλŠ” μƒˆλ‘œμš΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ‘œν† μ½œμ€ μ•„λ‹ˆλ©°,
      • HTTP 톡신 μ†ŒμΌ“λΆ€λΆ„μ„ SSL(Secure Socket Layer) or TLS(Transport Layer Security) ν”„λ‘œν† μ½œλ‘œ λŒ€μ²΄ν•˜κ³  있음.
      • HTTPSλŠ” http+ssl+tcp/ip μΈμ…ˆ
 
      • 병λͺ©ν˜„상이 있음
      • μ„œλ²„μ˜ 정보가 κ°±μ‹  λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄μ„œλŠ” 맀번 ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—κ²Œ ν™•μΈμš”μ²­μ„ 해야함. (톡신양이 λ§Žμ•„μ§ˆκ²ƒμž„)
      • 1개의 μ—°κ²°λ‘œ 1개의 μš”μ²­λ§Œ 보낼 수 있음
      • 무쑰건 ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—μ„œ μš”μ²­μ„ λ³΄λ‚Όμˆ˜ 있음. μ‘λ‹΅λ§Œ λ°›λŠ”κ²ƒμ€ μ•ˆλ¨.

 

3. WebSocket
    • μ–‘λ°©ν–₯ 톡신을 ν•œλ‹€.
    • ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„ 에닀가 μ›Ήμ†ŒμΌ“ μ—°κ²° μš”μ²­μ„ ν•˜μ—¬ 접속확립이 되면 μ—°κ²°μ„ λŠμ§€ μ•Šκ³ , μ–΄λŠμͺ½μ—μ„œλ“ μ§€ 솑신을 ν•  수 μžˆλŠ” 상황이 됨.
    • μ„œλ²„ ν‘Έμ‹œκΈ°λŠ₯이있음.
    • ν†΅μ‹ λŸ‰μ΄ 쀄어듬(ν•œλ²ˆ μ—°κ²°ν•˜λ©΄ 접속을 μœ μ§€ν•˜κΈ° λ•Œλ¬Έμ— μ˜€λ²„ν—€λ“œκ°€ 적어짐)
    • ν•Έλ“œμ‰μ΄ν¬

 

- μ°Έκ³  

 

λ°˜μ‘ν˜•

'개발 > etc' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

SSE (Server Sent Event)  (1) 2023.08.20
Vault  (1) 2023.02.07
ν—₯사고날 μ•„ν‚€ν…μ²˜ (Hexagonal Architecture)  (2) 2022.09.25
JWT (JSON WEB TOKEN)  (0) 2021.12.22
Rest API  (0) 2021.06.02
λ°˜μ‘ν˜•

HTTP Status 500 - Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:


μ—λŸ¬λ‚¨ (γ… γ… )

dbλͺ… 잘λͺ»λ˜μ–΄μžˆμ–΄μ„œ λ‚¬μ—ˆμŒ... dbλͺ… κ³ μ³μ£Όλ‹ˆ ν•΄κ²°!

...

root cause

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database '잘λͺ»λœDBλͺ…'
	sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)


λ°˜μ‘ν˜•

+ Recent posts