본문 바로가기

반응형

Programming/Spring

(16)
[Spring Boot] Log Level 설정을 통해 디버깅 하기 Spring 동작 방식을 간단하게 구현한 샘플 예제인 spring-petclinic을 기준으로 한다. 프로젝트의 세부 동작 과정을 파악하려면 Log를 살펴봐야 한다. Spring Boot의 기본 설정에 의한 Log 출력 내용은 아래와 같다. 출력된 Log 내용 구성은 다음과 같다.(왼쪽 -> 오른쪽 순서) 시간 및 날짜 로그 레벨 프로세스 아이디 구분자( --- )를 사용해 이후의 내용부터 로그 메시지임을 알림 스레드 이름: []를 이용해 구분 로거 이름: 일반적으로 소스 클래스 이름 표시 로그 메시지 Log Level 설정 src/main/resources/application.properties에서 Log Level 설정이 가능하다. 위 이미지는 원래 주석 처리되어 있던 DEBUG 레벨에 대한 주석을..
[Spring Boot] mvnw 파일의 역할 프로젝트를 직접 생성하던지, 아니면 다른 Repository에서 clone을 통해 가져오던지 Spring Boot 프로젝트를 생성 후 생성 폴더로 이동하면 mvnw 그리고 mvnw.cmd 파일을 확인할 수 있다. Maven Wrapper mvnw, mvnw.cmd 파일은 Maven Wrapper에서 나왔는데, Maven 프로젝트를 Maven 설치 없이 실행할 수 있도록 해준 다. mvnw 파일은 Linux 환경에서, mvnw.cmd 파일은 Windows 환경에서 실행된다. mvnw는 Maven Wrapper의 약자로, 사용자가 특정 프로젝트에서 요구하는 Maven 버전에 맞추어 빌드 및 사용할 수 있게 도와준다. 사용 일반적으로 Maven을 다음 명령어를 통해 사용한다. mvn clean install ..
[Spring Boot] @RequiredArgsConstructor 사용 시 final 키워드 사용하지 않아서 에러가 발생한 것 같은데.. 게시판 구현 연습 중 다음과 같은 에러와 마주했다. java.lang.NullPointerException: Cannot invoke "com.changon.springboot.domain.posts.PostsRepository.findAllDesc()" because "this.postsRepository" is null at com.changon.springboot.service.posts.PostsService.findAllDesc(PostsService.java:46) ~[classes/:na] at com.changon.springboot.web.IndexController.index(IndexController.java:17) ~[classes/:na] findAllDesc() 메소드는 게시판..
[Spring] @PathVariable, @RequestParam, @RequestBody, @ResponseBody @PathVariable URI 경로의 일부를 파라미터로 사용할 때 이용(URI 경로에서 값을 가져온다) 템플릿 변수의 값을 추출하고 그 값을 메소드 변수에 할당하는데 사용된다. @RequestMapping("/users/{userid}", method=RequestMethod.GET) public String getUser(@PathVariable String userId) { // implementation omitted... } 요청 결과 localhost:8080/users/charlie 와 같은 URI가 넘어왔다고 하자. 'charlie'는 URI 템플릿 변수의 값으로, getUser 메소드 매개변수 userId의 요청 값으로 바인딩된다. @RequestMapping("/owners/{owner..
[Spring] Spring 웹 계층 Web Layer 웹 어플리케이션의 최상위에 있다. Controller, JSP/Freemaker 등의 뷰 템플릿 영역이다. 사용자의 요청(input)을 받고 요청에 따른 정확한 응답(output)을 전달한다. 외부 요청을 처리하고, 올바른 응답을 사용자에게 반환하는 것에 대한 전반적인 영역을 말한다. Web Layer는 웹 어플리케이션의 최전방에 있기 때문에 다른 레이어에서 발생한 예외 처리, 인증 관리 및 권한 없는 사용자 인가 거부 등을 통해 해당 웹 어플리케이션에 대한 보안 위협을 방지할 수 있다. Service Layer @Service, @Transactional에 사용되는 서비스 영역. 트랜잭션과 도메인 간의 순서만 보장하는 역할 수행. 트랜잭션에 대한 경계(구분선) 역할을 하고 어플리케이션..
[Spring Boot] IntelliJ에서 lombok 사용하고 테스트 해보기 개발환경 IntelliJ Java8(JDK 1.8) Spring Boot 2.4.1 Gradle 7.1 build.gradle의 dependencies에 lombok 어노테이션 추가 compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.20' IntelliJ 버전 2020.03 버전 이하 환경에서 lombok 사용 시 어노테이션 추가 + lombok 플러그인 설치 이렇게 두 가지 작업을 해야 한다. 2020.03 버전 이하 환경에서 작업한다면 아래 이미지를 보고 lombok 플러드인을 설치하자. DTO 클래스 생성 HelloControllerDto.java import lombok.Getter; import lombok.Requir..
[Spring Boot] JUnit5로 Controller 테스트 코드 작성하기 개발환경 IntelliJ Java8(JDK 1.8) Spring Boot 2.4.1 Gradle 7.1 자신이 작성한 Controller의 메소드가 제대로 작동이 되는지 간편하게 테스트 해보자. test 디렉토리에 main 디렉토리와 동일한 패키지를 생성하여 테스트 컨트롤러 클래스를 생성한다. 본인은 HelloController를 생성했기에 HelloControllerTest 클래스를 생성했다. HelloController.java 클래스에 hello() 메소드가 정의되어 있다. HelloControllerTest.java hello() 메소드를 테스트하기 위한 테스트 코드 참고로 테스트 클래스의 테스팅 라이브러리는 JUnit5를 사용한다. 따라서 JUnit5 기준으로 코드가 작성되었다. JUnit4와는..
[Spring] Path with "WEB-INF" or "META-INF" Spring Boot Gradle 프로젝트 초기 세팅 후 간단한 테스트를 위해 controller 및 jsp 파일을 만들어 준비된 메서드를 호출했다. 하지만 결과는 404. Console에 찍히는 에러 메시지는 다음과 같다. ResourceHttpRequestHandler : Path with "WEB-INF" or "META-INF" Spring Boot에서 Tomcat을 사용할 때 JSP를 처리하는 서블릿을 추가하지 않아서 발생한 에러. Gradle의 경우 build.gradle에 다음 내용을 추가한다. implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' implementation 'javax.servlet:jstl' Maven의 경우 pom...

반응형