๐Ÿ“…2024. 04. 12 84์ผ์ฐจ


์˜ค๋Š˜์˜ ๊ฐœ๋…

๐Ÿ“๋กœ๊ทธ๋ ˆ๋ฒจ(Log level)์ด๋ž€?

  • ๋กœ๊ทธ ๋ ˆ๋ฒจ(Log Level)์€ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€์˜ ์ค‘์š”๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜์ค€์„ ์˜๋ฏธํ•œ๋‹ค.
  • ๋กœ๊ทธ ๋ ˆ๋ฒจ์€ ๋กœ๊น… ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋กœ๊ทธ ๋ฉ”์‹œ์ง€์˜ ์ค‘์š”๋„์— ๋”ฐ๋ผ ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋กํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

๋กœ๊ทธ๋ ˆ๋ฒจ

1) TRACE

๊ฐ€์žฅ ์ƒ์„ธํ•œ ๋กœ๊ทธ ๋ ˆ๋ฒจ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰ ํ๋ฆ„๊ณผ ๋””๋ฒ„๊น… ์ •๋ณด๋ฅผ ์ƒ์„ธํžˆ ๊ธฐ๋กํ•œ๋‹ค. ์ฃผ๋กœ ๋””๋ฒ„๊น… ์‹œ์— ์‚ฌ์šฉ๋œ๋‹ค.
2) DEBUG

๋””๋ฒ„๊น… ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ ์ƒ์„ธํ•œ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‚ด๋ถ€ ๋™์ž‘์„ ์ดํ•ดํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค€๋‹ค.
3) INFO

์ •๋ณด์„ฑ ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฃผ์š” ์ด๋ฒคํŠธ๋‚˜ ์‹คํ–‰ ์ƒํƒœ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
4) WARN

๊ฒฝ๊ณ ์„ฑ ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.
์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ๋‚˜ ์ž ์žฌ์ ์ธ ์˜ค๋ฅ˜ ์ƒํ™ฉ์„ ์•Œ๋ฆฌ๋Š” ๋ฉ”์‹œ์ง€์ด๋‹ค.
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€๋งŒ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ์„ ์•Œ๋ ค์ค€๋‹ค.
5) ERROR

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.
์‹ฌ๊ฐํ•œ ๋ฌธ์ œ ๋˜๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ •์ƒ์ ์ธ ๋™์ž‘์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์•Œ๋ฆฐ๋‹ค.
6) FATAL

๊ฐ€์žฅ ์‹ฌ๊ฐํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋™์ž‘์„ ์ค‘๋‹จ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์น˜๋ช…์ ์ธ ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋Š” ๋ณต๊ตฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ๋งค์šฐ ์–ด๋ ค์šด ์ƒํ™ฉ์„ ์˜๋ฏธํ•œ๋‹ค.

๋กœ๊น… ์‹œ์Šคํ…œ ์„ค์ •

  • ๋กœ๊ทธ ๋ ˆ๋ฒจ์€ ๋กœ๊น… ์‹œ์Šคํ…œ์˜ ์„ค์ •์„ ํ†ตํ•ด ์ง€์ •ํ•˜๋ฉฐ, ์„ค์ •๋œ ๋กœ๊ทธ ๋ ˆ๋ฒจ ์ด์ƒ์˜ ์ค‘์š”๋„๋ฅผ ๊ฐ€์ง„ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋งŒ ๊ธฐ๋ก๋œ๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ 'DEBUG'๋กœ ์„ค์ •ํ•˜๋ฉด 'TRACE'๋ณด๋‹ค ์ค‘์š”ํ•œ 'DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL' ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ธฐ๋ก๋˜์ง€๋งŒ, 'TRACE' ์ˆ˜์ค€์˜ ๋กœ๊ทธ๋Š” ๊ธฐ๋ก๋˜์ง€ ์•Š๋Š”๋‹ค.

  • ์•„๋ž˜๋Š” log4j.xml์˜ ๋กœ๊น… ์‹œ์Šคํ…œ ์„ค์ • ์˜ˆ์ด๋‹ค.

<!-- Application Loggers -->
	<logger name="edu.test.comm">
	<!-- trace < debug < info < warn <error <tatal debug ์ด์ƒ์€ ๋ชจ๋‘ ์ฐํž˜ -->
		<level value="debug" />
		<appender-ref ref="dailyRollingFile"/>
	</logger>

๐Ÿ“Record

  • Java Record๋Š” bolierplate code๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ํŠน๋ณ„ํ•œ ํ˜•ํƒœ์˜ ํด๋ž˜์Šค ์„ ์–ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

sample code

public class SampleRecord {
   private final String name;
   private final Integer age;
   private final Address address;
 
   public SampleRecord(String name, Integer age, Address address) {
      this.name = name;
      this.age = age;
      this.address = address;
   }
 
   public String getName() {
      return name;
   }
 
   public Integer getAge() {
      return age;
   }
 
   public Address getAddress() {
      return address;
   }
}

์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ํ•ด๋‹น ํด๋ž˜์Šค๋Š” ๋ชจ๋“  ์ธ์Šคํ„ด์Šค ํ•„๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์žˆ๊ณ , ๋ชจ๋“  ํ•„๋“œ๋Š” final๋กœ ์ •์˜๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ๊ฐ ํ•„๋“œ์˜ getter๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ํด๋ž˜์Šค ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” record ํƒ€์ž…์˜ ํด๋ž˜์Šค๋กœ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

public record SampleRecord(
   String name,
   Integer age,
   Address address
) {}

์ž๋ฐ” ์ŠคํŠธ๋ฆผ(Stream)

ava 8๋ถ€ํ„ฐ ์ถ”๊ฐ€๋œ ๊ธฐ์ˆ ๋กœ ๋žŒ๋‹ค๋ฅผ ํ™œ์šฉํ•ด ๋ฐฐ์—ด๊ณผ ์ปฌ๋ ‰์…˜์„ ํ•จ์ˆ˜ํ˜•์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ์ด๋‹ค.
๊ธฐ์กด์˜ for๋ฌธ๊ณผ Iterator๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ ธ์„œ ๊ฐ€๋…์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋–จ์–ด์ง€๋ฉฐ ๋ฐ์ดํ„ฐ ํƒ€์ž…๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ค„์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ๋‹ค.
์ŠคํŠธ๋ฆผ์€ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์ถ”์ƒํ™”ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•ด ๋†“์•„์„œ ๋ฐ์ดํ„ฐ ์†Œ์Šค์— ์ƒ๊ด€์—†์ด ๋ชจ๋‘ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

์ŠคํŠธ๋ฆผ์˜ ํŠน์ง•

  • ์›๋ณธ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค: ์ฝ๊ธฐ๋งŒ ํ•œ๋‹ค.
  • ์ผํšŒ์šฉ์ด๋‹ค: ํ•œ๋ฒˆ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ซํ˜€์„œ ์žฌ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ตœ์ข… ์—ฐ์‚ฐ ์ „๊นŒ์ง€ ์ค‘๊ฐ„ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ž‘์—…์„ ๋‚ด๋ถ€ ๋ฐ˜๋ณต์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค: forEach()๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€์ž…๋œ ๋žŒ๋‹ค์‹์„ ๋ฐ์ดํ„ฐ ์†Œ์Šค์˜ ๋ชจ๋“  ์š”์†Œ์— ์ ์šฉํ•œ๋‹ค.
  • ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๊ฐ€ ์‰ฝ๋‹ค: ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ์‚ฌ์šฉ
  • ๊ธฐ๋ณธํ˜• ์ŠคํŠธ๋ฆผ์„ ์ œ๊ณตํ•œ๋‹ค: Stream<Integer> ๋Œ€์‹  IntStream์ด ์ œ๊ณต๋˜์–ด์„œ ์˜คํ† ๋ฐ•์‹ฑ๊ณผ ์–ธ๋ฐ•์‹ฑ ๋“ฑ์˜ ๋ถˆํ•„์š”ํ•œ ๊ณผ์ •์ด ์ƒ๋žต๋˜๊ณ  ์ˆซ์ž์˜ ๊ฒฝ์šฐ ์œ ์šฉํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€๋กœ ์ œ๊ณตํ•œ๋‹ค. (.sum(), .average() ๋“ฑ)

Stream ๊ตฌ์กฐ

  1. Stream ์ƒ์„ฑ
  2. ์ค‘๊ฐœ์—ฐ์‚ฐ
  3. ์ตœ์ข…์—ฐ์‚ฐ

Stream ์ƒ์„ฑ

์ค‘๊ฐœ์—ฐ์‚ฐ

์ตœ์ข…์—ฐ์‚ฐ

JSP vs Thymeleaf

0๊ฐœ์˜ ๋Œ“๊ธ€