본문 바로가기

springboot29

Springboot - 테스트코드 @SpringBootTest @SpringBootTest 는 @SpringBootApplication 가 붙은 클래스를 참조하여 (주로 메인클래스) 그 밑의 모든 빈들을 찾아 테스트 빈으로 등록한다. 즉 @SpringBootTest 는 통합테스트용이다. 일부분만 테스트하는 슬라이스 테스트를 위해서는 아래 @WebMvcTest 를 참조한다. webEnvironment @SpringBootTest 의 webEnvironment 는 기본적으로 SpringBootTest.WebEnvironment.MOCK 으로 설정되어 있다. 내장 톰캣 구동을 하지 않고 가짜 빈을 만들어 테스트를 한다. 반면, RANDOM_PORT, DEFINED_PORT 는 내장 톰캣을 사용한다. 마지막으로 NONE은 서블릿 환경을 제공하지.. 2021. 1. 17.
Springboot - 로깅 Logging Facade vs Logger 로깅 퍼사드를 사용하면 그 안에서 다양한 로거들을 사용할 수 있다. Commons Logging, SLF4J (Simple Logging Facade for Java) 등이 있다. 스프링부트는 Commons Logging을 사용한다. Common Logging 은 Spirng-JCL을 통해서 slf4j 또는 log4j2로 바꿀 수 있다. 로거는 JUL, Log4J2, Logback 등이 있고 스프링부트는 기본적으로 Logback 을 사용한다. 어떤 로깅 퍼사드, 로거를 사용하든 결국 기본설정에서는 최종적으로 Logback 을 사용한다. (jul, log4j2 로거는 모두 slf4j 로 처리되어 결국 logback 을 사용하게 된다.) application.pr.. 2021. 1. 16.
Springboot - 외부설정, 프로파일 외부설정 스프링부트 외부에서 변수설정을 할 수 있다. 예를 들면 application.properties 에 변수를 등록하면, @Value 어노테이션으로 값을 가져와 사용할 수 있었다. 또한 YAML 파일, 환경변수 등록, 커맨드라인 아규먼트 (--var) 로 외부 변수를 등록할 수 있다. 예를 들어보자. application.properties blue.name = river blue.age=${random.int} # 랜덤 변수를 사용할 수도 있다. blue.nameage = ${blue.name} ${blue.age} # 프로퍼티 안의 변수들을 다시 사용할 수도 있다. 애플리케이션 러너로 테스트를 해보자. @Value 어노테이션으로 프로퍼티 변수값을 가져올 수도 있다. @Component publi.. 2021. 1. 16.
Springboot - SpringApplication SpringApplication 로깅 스프링 부트를 실행하면 출력물들이 뜬다. 이 때 출력된 로그들은 INFO 레벨이다. DEBUG 레벨로 하려면 다음과 같이 설정한다. Intellij > Edig Configuration > VM Options 에 -Ddebug라고 입력해준다. DEBUG 레벨에서는 좀 더 구체적인 로그정보가 나온다. 자동설정이 적용이 된 이유, 안 된 이유도 출력해준다. 배너 앞에 스프링부트라고 예쁘게 배너가 뜨는데, 이 또한 수정할 수 있다. resources 에 banner.txt 를 만들어서 표현하면 된다. gif, jpg, png 도 지원한다. application.properties 에서 이 banner.txt 의 경로도 변경할 수 있다. 기본 제공 변수도 사용할 수 있다. .. 2021. 1. 15.
Springboot - 내장 웹 서버, HTTPS, HTTP2 스프링부트는 내장 웹 서버로 톰캣이 자동 설정되어있다. spring-boot-starter-web이 톰캣을 가져온다. 톰캣은 아래와 같이 직접 구현하여 실행시킬 수도 있다. (대부분은 스프링부트로 바로 실행시킬 것이다..) public class Application { public static void main(String[] args) throws LifecycleException { // SpringApplication.run(Application.class, args); // 1 Tomcat 객체 생성 Tomcat tomcat = new Tomcat(); // 2 포트 설정, 커넥터 연결 tomcat.setPort(8080); tomcat.getConnector(); // 3 컨텍스트 추가 Con.. 2021. 1. 14.
Springboot 자동설정(AutoConfiguration) 자동 설정 @SpringBootApplication 안에 여러 어노테이션이 있다. 조금 살펴보면, @SpringBootConfiuration 은 기존 @Configuration 을 사용하며, 기능도 비슷하다. 빈 설정을 제공한다. @ComponentScan 는 어노테이션이 붙은 클래스의 같은 패키지 내(히위 패키지 포함)에서 컴포넌트들을 스캔하여 빈을 등록한다. 컴포넌트라 함은 @Component 애노테이션을 말하고, 이는 @Configuration, @Repository, @Service, @Controller, @RestController 를 포함한다. @EnableAutoConfiguration 은 추가적으로 빈을 한 번더 읽어 등록한다. 기본적으로 @Configuration 가 들어있고, 스프링부.. 2021. 1. 14.
Springboot 프로젝트 생성, 이니셜라이져 Springboot 001 스프링부트 목표 빠르고 폭넓은 사용성 컨벤션으로 정해져있는 설정 사용, 여기에 사용자 설정 추가 쉽게 가능 비즈니스 로직에 추가로 다양한 기능 제공 코드 생성하지 않고, xml 설정 필요없다. 스프링부트 프로젝트 생성 Intellij > File > New > Project Gradle > Name(ArtifactId) 및 GroupId 작성 > Finish gradle.build plugins { id 'java' id 'org.springframework.boot' version '2.4.1' id 'io.spring.dependency-management' version "1.0.10.RELEASE" } group 'me.wordbe' version '1.0-SNAPSHO.. 2021. 1. 14.
Spring IoC - @Autowired @Autowired 의존성을 주입할 때 사용한다. 필드, 세터, 생성자 위에 붙여 의존성을 주입할 수 있다. A클래스에 B클래스를 연결지어 보자(의존성을 주입해보자) 이 때, A는 빈에 등록되었고, B는 빈에 등록되어있지 않다. A클래스의 생성자에 @Autowired를 붙일 경우, 주입하려는 B클래스가 빈에 등록되어 있지않으므로 바로 에러가 난다. 파라미터로 받는 B클래스가 빈 공장에서 찾을 수 없으므로 생성자가 생성되지 않아 A클래스가 만들어지지 않기 때문이다. A의 필드나 세터 위에 붙일 경우도 에러가 난다. 하지만 이 때는 required 옵션으로 에러발생은 방지할 수 있다. @Autowired(required = false) required 기본값은 true 이다. 생성자에는 이 옵션을 넣어봐도 .. 2021. 1. 10.
[springboot] mysql database - java (JPA) 연동 [springboot] mysql - java (JPA) 연동 자바에서는 데이터베이스와 자바를 연동하는 방법을 만들어낸다. jdbc(java database connectivity) 를 사용하면 된다. 이 글에서는 java springboot jpa를 사용할 때 mysql을 jdbc를 통해 연결하는 방법을 알아본다. 먼저, 빌드도구로 여기서는 gradle을 사용한다. (maven 은 maven 홈페이지 - spring boot) 를 참고하면 좋다. mysql 우선, mysql 이 사용자 환경에 설치되어 있어야 한다. 본인은 맥os에서 rdijin 이라는 유저환경에 mysql을 설치했다. 설치는 brew를 통해 간단히 설치했다. % brew install mysql mysql을 처음에 root 계정으로 접.. 2020. 10. 3.
728x90