Spring-Day06

JUNHO YEOM·2023년 2월 27일
0

Spring

목록 보기
12/14

Lombok

다이어트 라이브러리라고 합니다
코드의 양을 줄여주는 라이브러리
VO만들때 반복되는 코드를 줄여줘요!


사용 방법

클래스위 혹은 필드 위에 쓸 수 있어요

@Getter // 클래스 레벨에서의 사용
@NoArgsConstructor
@AllArgsConstructor
public class Member {
	
	private String memberName;
	@Setter // 필드 레벨에서의 사용
	private int memberAge;
	private String memberAddr;
	
}

@Getter: Getter
@Setter: Setter
@NoArgsConstructor : 기본 생성자
@AllArgsConstructor : 모든 필드를 포함하는 생성자
@RequiredArgsConstructor: 특정 인자만 가지고 생성자 만들기

@RequiredArgsConstructor
public class Member {
	
	@NonNull
	private String memberName;
	private int memberAge;
	@NonNull
	private String memberAddr;
}

@ToString: 자동으로 toString 오버라이딩 해주기

@ToString
public class Member {
	
	private String memberName;
	@ToString.Exclude // ToString에 제외할 필드에 적용
	private int memberAge;
	private String memberAddr;
	
}

@EqualsAndHashCode: Equals method를 오버라이딩 해줘요, 객체를 비교하기 위한 Equals 오버라이딩

@Data : @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode 4가지가 자동으로 포함 됩니다. 디폴트와 전체생정자는 따로 추가 해줘야 해요


JSTL

Tag Library
원래 <% %> if, for문을 JSP에서 이용했어요.
JSP의 기본으로 들어가 있기 때문에 사용은 간편하지만, 유지보수가 힘들어 져요.
이제는 JSTL을 이용할 꺼에요
JSTL을 사용하기 위해서는 taglib라는 directive를 사용해야 해요
앞으로는 JSP구현을 JSTL + EL로 구현할 거에요

// taglib를 이용하기 위한 설정
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

사용 예시

<!-- 변수를 만들고 값을 할당할 수 있어요 -->
	<%
		int k = 100;
	%>
	<!-- 태그를 이용한 변수만들기 -->
	<c:set var="num1" value="100" />

	<!--제어문 중 대표적인 제어문.. if test는 정해져있는 단어에요-->
	<c:if test="${ num1 + myNum > 100 }">
		비교하는 값이 100보다 커요!
	</c:if>

	<br>
	<!--조건이 여러개인 경우는 c:if 대신 다른것을 써요! -->
	<c:choose>
		<c:when test="${ num1 + myNum == 50 }">
		50보다 커요~
		</c:when>

		<c:when test="${ num1 + myNum > 100 }">
		100보다 커요!
		</c:when>

		<c:when test="${ num1 + myNum > 300 }">
		300보다 커요?!
		</c:when>
		<c:otherwise>
			아무것에도 해당되지 않아요!
		</c:otherwise>
	</c:choose>

	<!-- 반복문! -->
	<!-- 기본적인 형태 - 반복횟수를 알려줘서 반복하는 경우 -->
	<ul>
		<c:forEach var="tmp" begin="0" end="5" step="1">
			<li>${ tmp }</li>
		</c:forEach>
	</ul>

	<ul>
		<!-- 일반적으로 집합 자료구조를 이용한 반복처리를 많이 해요! -->
		<c:forEach var="name" items="${ myList }">
			<li>${ name }</li>
		</c:forEach>
	</ul>

	<!-- formatter를 사용하기 위해 변수를 하나 선언해 보아요! -->
	<c:set var="number" value="123456789" />
	<c:set var="number1" value="0.783" />
	<br>
	<br>

	<!-- 숫자표현할 때 3자리마다 콤마 표시하기 -->
	<fmt:formatNumber value="${ number }" />
	<br>

	<fmt:formatNumber value="${ number }" type="currency" /><br>

	<fmt:formatNumber value="${ number1 }" type="percent" />

@RequestParam
@ModelAttributes

HTTP Request 방식
POST 방식은

protocol, method, url

Header

requestBody 여기에 data가 들어가요

그래서 POST 방식은 requestBody안에 data가 들어가기 때문에 많은 양의 data를 전송할 수 있어요

GET 방식은

protocol, method, url 여기에 queryString으로 들어가요

Header

requestBody 여기에 data가 들어가요

그래서 GET 방식은 url의 길이제한(256자)때문에 많은 양의 data를 전송할 수 없어요!
간단하고, 빠르고, 쉬워요


Log4J2
현재는 version 1.x 버전과 2.x 버전이 함께 있는 상태

log4j 설정 코드

 <!-- Log4j 설정 -->
      <context-param>
          <param-name>log4jConfiguration</param-name>
          <param-value>classpath:/log4j2.xml</param-value>
      </context-param>
        
      <listener>
          <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener
          </listener-class>
      </listener>
<Configuration>
  
    <Appenders>
        <File name="File_1" fileName="c:/log_test/myLog_1.log"
            append="true">
            <PatternLayout pattern="%t %-5p %c{2} - %m%n" />
        </File>
        <File name="File_2" fileName="c:/log_test/myLog_2.log"
            append="true">
            <PatternLayout pattern="%d - %m%n" />
        </File>
        <Console name="stdout_1" target="SYSTEM_OUT">
            <PatternLayout pattern="%p == %m == %d%n" />
        </Console>
        <Console name="stdout_2" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd:HH:mm} >> %m%n" />
        </Console>
    </Appenders>
  
    <Loggers>
  
        <Logger name="case1" level="warn">
            <AppenderRef ref="File_1" />
        </Logger>
  
        <!-- additivity="false" 상위 appender를 상속받지 않습니다. 즉, 여기서는 Root를 제외시키는 역할을 
            합니다. 로그가 중복으로 출력되는것을 제어할 목적으로 사용됩니다. -->
        <Logger name="case2" level="info" additivity="false">
            <AppenderRef ref="File_2" />
            <AppenderRef ref="stdout_1" />
        </Logger>
  
        <Logger name="case3" level="debug" additivity="false">
            <AppenderRef ref="stdout_1" />
        </Logger>
  
  
        <Root level="INFO">
            <AppenderRef ref="stdout_2" />
        </Root>
    </Loggers>
  
</Configuration>

캐시 데이터 때문에 오작동 할때 캐시 클린 하기

Maven: Run AS => maven clean
Tomcat: clean
project: project-> clean


@ModelAttributes

parameter Vo로 받을 때
method에 사용할 때
sessionAttributes와 같이 사용할 때

method에 @modelAttributes의 지정

// 메서드에 붙여서 사용했어요!, 이름을 줘야 해요!
	// 이 method는 handler가 호출되기 이전에 자동으로 호출되어요!
	// 그리고 해당 메섣의 리턴 값이 Model에 자동으로 등록되어요
	@ModelAttribute("v1")
	public String creaetString() {
		log.debug("log={}", "문자열 객체 생성");
		return "문자열 객체 생성";
	}
	
	@ModelAttribute("v2")
	public User creaetUser() {
		log.debug("log={}", "VO 객체 생성!");
		
		User user = new User(20, "카즈하", "르세라핌");
		
		return user;
	}
	
	@ModelAttribute("data1")
	public int creaetNumber1() {
		log.debug("log={}", "1번째 숫자 생성");
		
		return 100;
	}
	
	@ModelAttribute("data2")
	public int creaetNumber2() {
		log.debug("log={}", "2번째 숫자 생성");
		
		return 200;
	}
	
	@RequestMapping(value ="/modelAttributes1")
	public String myMethod1(
			@ModelAttribute("data1") int num1, // 밑에서 파라미터로 받아서 사용할 수 도 있어요!
			@ModelAttribute("data2") int num2, // VO를 만들 수 도 있고, ModelAttribute로 만들어진 결과를 가져올 수 도 있어요
			Model model
			) {
		log.debug("log={}", "handler method호출!");
		
		model.addAttribute("sum", num1+num2);
		return "sample05/modelResult";
	}

String, Number, VO등으로 모두 넣어서 사용 가능합니다.


@Autowired -> 자동 주입
기본적으로 type을 기반으로 주입할 Bean을 찾아요
만약 못찾으면 이름 가지고 찾아요!

@Resource => @Autowired기능을 해요!(자동주입)
이름으로 Bean을 기반으로 주입할 Bean을 찾아요
만약 못찾으면 Type을 가지고 찾아요


@Service
@Repository
두개 모두 @Component의 하위 annotation이에요


0개의 댓글