[Spring] Servlet Container, Servlet
·
JVM/Spring
Servlet 역할 Http Request, Response 에 필요한 필수 기능을 제공하여 개발자가 비즈니스 로직에만 집중하게 해준다. TCP Socket connection 관리 HTTP Request URL, Header, Body 파싱 HTTP Response Header, Body 생성 Servlet 생명 주기 간단하게는 init -> service-> destroy 를 거친다. 1. init() WAS (e.g. Tomcat) 이 띄워질 때 최초로 미리 등록해둔 서블릿을 모두 '싱글톤'으로 생성해둔다. @WebServlet(name = "HelloServlet", urlPatterns = "Hello") public class HelloServlet extends HttpServlet { @O..
[Spring] logback-spring.xml
·
JVM/Spring
개요 @Sl4j 로 SpringBoot는 기본 로거를 내장하는데 요녀석으로 로깅 정책, 패턴, 저장 위치를 결정할 수 있다 logback-spring.xml main/resources 에 두면된다. 주석을 참고하자. 본 프로젝트에 갈기면된다. 로그 레벨에 따라 프로젝트 루트에 logs/error.log logs/info.log logs/warn.log 'RollingFileAppender' 클래스를 통해 최대 용량 혹은 보관기간이 지나면 새 파일을 저장한다. [%d{yyyy-MM-dd HH:mm:ss.SSS}:%-3relative][%thread] %-5level %logger{36} - %msg%n [%d{yyyy-MM-dd HH:mm:ss.SSS}:%-3relative][%thread] %-5leve..
[Spring] ConfigurationProperties + ConfigurationPropertiesScan
·
JVM/Spring
사전 조건 application.yaml 설정 dependency 설정 spring-boot-configuration-processor annotationProcessor 를 추가해줘야한다. Java 순서 1. ConfigurationProperties 등록 on ConfigClass @Getter @RequiredArgsConstructor @ConfigurationProperties(prefix = "server") public class ServerConfig { private final String port; private final String ip; private final String hostname; } 2. ConfigurationPropertiesScan 등록 on main @Sprin..
[SpringBoot] Naming methods in each layer
·
JVM/Spring
There's no strict stnadard naming convention in SpringBoot, Howevere there's some best practice. Controller Layer The methods in the controller should be named based on the HTTP method. getUser postUser deleteOrder Service Layer Methods in service layer should be descriptive and prefixed with a verb createUser() updateUser() deleteUser() Persistence Layer Methods in persistence layer named data ..
[Spring] java.lang.IllegalStateException: No primary or single unique constructor found for interface javax.servlet.http.HttpServletRequest
·
JVM/Error
문제 SpringBoot 를 사용한 프로젝트 중 HttpServletRequest 를 받아와 헤더 정보를 출력하는 코드에서 제목과 같은 에러를 만났다. import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @Slf4j @RestController public class LoggingController { @GetMapp..
[Java] Data Transfer Object (DTO)
·
JVM/Java
개요 데이터를 전달용 오브젝트 Why to use 서버 - 클라이언트간 객체를 전달할 때 메소드 콜(주로 데이터 가공)을 줄이기 위해 View 는 보통 변경이 잦은데, 이때 Entity 를 받아선 DB Schema 영향에 직격타다. 따라서 DTO를 별도로 정의해서 전달하는게 국룰이다. When to use 서로 다른 많은 오브젝트가 존재하고, 프레젠테이션 모델이 한번에 그 데이터를 전달하려 할 때 DTO를 통해 도메인으로부터 클라이언트가 필요한 데이터만 전달할 수 있게함. Where to place? 주로 서비스 레이어 -> 컨트롤러 객체로 DTO를 전달한다. 역방향(컨트롤러 -> 서비스)의 경우에는 VO (불변객체) 를 사용한다. 개발자마다 다르지만DTO는 서비스 패키지, VO는 컨트롤러 패키지에 담는..