๋ฐ˜์‘ํ˜•
์ƒํ™ฉ

H2 db ์‚ฌ์šฉ, entity class ์— ํ…Œ์ด๋ธ”๋ช…์„ ๋ช…์‹œํ•ด์ฃผ์ง€ ์•Š์Œ. 
๋ฐ์ดํ„ฐ ๋“ฑ๋ก ์ฒ˜๋ฆฌ ์ค‘ ํ•ด๋‹น ์—๋Ÿฌ ๋ฐœ์ƒ (ํ…Œ์ด๋ธ” ์‹œํ€€์Šค ๊ฐ’์ด ์—†๋‹ค๋Š” ์ƒํ™ฉ)

 

ํ•ด๊ฒฐ

entity class (@Entity ์„ค์ • ํด๋ž˜์Šค) ๋‚ด id ํ•„๋“œ(@Id ์„ค์ •๋œ ๊ฐ’)์˜
@GeneratedValue(strategy = GenerationType.AUTO) ์„ค์ • ๋ถ€๋ถ„์„
@GeneratedValue(strategy = GenerationType.IDENTITY) ์œผ๋กœ ๋ณ€๊ฒฝ
    --> ๊ธฐ๋ณธํ‚ค ์ƒ์„ฑ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์œ„์ž„ํ•ด์ฃผ๊ณ  id๊ฐ€ null ์ด๋ฉด ์•Œ์•„์„œ auto_increment ํ•ด์คŒ


์ฐธ๊ณ 

https://stackoverflow.com/questions/39807483/sequence-hibernate-sequence-not-found-sql-statement

 

Sequence "HIBERNATE_SEQUENCE" not found; SQL statement

In my spring mvc app, i have the following object. I am trying to make a visual of data using devtool in my app. @Entity @Data public class ConsultationRequest { @Id @GeneratedValue p...

stackoverflow.com

https://gmlwjd9405.github.io/2019/08/12/primary-key-mapping.html

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•

๋žŒ๋‹ค

์„ค๋ช…

์ต๋ช…ํ•จ์ˆ˜๋‹ค. ์ต๋ช…ํ•จ์ˆ˜ ์ฆ‰, ์ฝ”๋“œ ๋ธ”๋Ÿญ์ด๋‹ค.
์ฝ”๋“œ ๋ธ”๋Ÿญ์€ ๋ฉ”์†Œ๋“œ ๋‚ด์— ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค!

โ€ป ์ต๋ช…ํ•จ์ˆ˜

์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์˜ ์ผ๋ถ€๋ถ„์„ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ.
ํ•จ์ˆ˜๋“ค์— ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ (์ฝœ๋ฐฑ?)

 

์ฝ”๋“œ์˜ˆ์‹œ
//๊ธฐ๋ณธ ๋ฌธ๋ฒ• 
(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/๋ณ‘๋ ฌ-๋ฐ์ดํ„ฐ-์ฒ˜๋ฆฌ์™€-์„ฑ๋Šฅ/

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•
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

+ Recent posts