반응형

웹 개발 273

spring에서 autowired 대신 생성자 주입을 사용해야 하는 이유

Spring에서 의존관계 주입을 받을 때는 당연하게 아래와 같이 인스턴스 변수에 @Autowired나 @Inject를 사용해 왔습니다. public class ExampleController { @Autowired private UserService userService; } 그러다가 Intellij로 프로젝트를 옮겨서 실행해 보니 Intellij에서 아래와 같은 경고 메시지가 발생했습니다. Field injection is not recommended 즉, Field 주입이 권장되지 않는다는 메시지가 발생했습니다. 의존관계 주입(Dependency Injection, DI) 이 메시지를 이해하기 위해서는 우선 주입이 무엇인지 알아야 합니다. 먼저 의존관계는 항상 방향성이 있습니다. 예를 들어, A가 B..

웹 개발 2021.05.12

java] file path에서 파일명만 가져오는 방법

프로그래밍을 하다 보면 아래와 같이 파일 경로에서 파일명만 추출해야 하는 경우가 생각보다 많습니다. 예를 들어 C:/Document/Temp/FileName.txt 에서 FileName.txt만 추출해야 할 경우 입니다. 방법 1. File.getName() 사용 java.io.File 클래스의 getName() 메서드를 이용한 방법이 있습니다. import java.io.File; public class Test { public static void main(String [] args) { File f = new File("C:\\Document\\Temp\\FileName.txt"); System.out.println(f.getName()); } } 방법 2. Path(java 7+) 를 사용 jav..

웹 개발 2021.05.02

Spring boot에서 JUnit 사용 시 Autowired가 동작하지 않는 현상

Spring boot 환경에서 Controller의 Test를 만드는 중, @Autowired된 클래스가 null이 되는 현상이 발생했습니다. 해결방법은 다음과 같습니다. 1. 개발 환경 1) OS : Windows 10 2) 개발 툴 : IntelliJ 3) 빌드 툴 : Maven 4) java version : openjdk 1.8 5) spring boot version : 2.3.1 5) JUnit version : 4 2. 테스트 코드 @AutoConfigureMockMvc @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK) public class MyTest { @Autowired MockMvc mockMvc; @Test ..

웹 개발 2021.03.08

Java - ArrayBlockingQueue 사용 방법

ArrayBlockingQueue는 Array로 구현된 BlockingQueue입니다. 특징은 아래와 같습니다. BlockingQueue 인터페이스를 구현 Queue를 생성할 때 크기를 설정(Queue의 크기가 정해져 있음) FIFO(First In First Out)로 동작 아이템을 가져올 때 비어있으면 null을 리턴하지 않고 아이템이 추가될 때까지 wait 아이템을 추가할 때 Queue가 가득 차 있으면 공간이 생길 때까지 wait 하거나 Exception이 발생하게 할 수도 있음 동시성에 안전하기 때문에 멀티 쓰레드 환경에서 synchronized 구문 없이 사용 가능 ArrayBlockingQueue 생성 아래와 같이 간단하게 객체를 생성할 수 있습니다. int capacity = 10; Arr..

웹 개발 2021.01.01

Spring 버전 확인하는 방법

Spring Boot를 사용하면 Spring 버전이 바로 눈에 보이지 않습니다. 이 경우 Spring Boot에서 사용하는 Spring의 버전을 알고 싶을 경우 다음과 같은 방법들이 있습니다. Spring 버전 확인하는 방법 1. getVersion() 메서드\ 사용 String version = org.springframework.core.SpringVersion.getVersion(); System.out.println("version : " + version); 현재 제가 테스트 한 Spring Boot 버전은 2.4.1인데요 아래와 같이 5.3.2로 표시됩니다. 2. Dependencies 확인 개발을 위해서 Maven 또는 Gradle을 사용하셨을 텐데요. Maven/Gradle의 Depende..

웹 개발 2021.01.01

Spring boot Profile 설정

maven 프로젝트에서는 태그를 이용하여 profile을 설정했습니다. 하지만 Spring Boot를 이용한다면 Spring Boot를 이용하면 application.properties 파일을 이용하여 손쉽게 profile을 설정할 수 있습니다. 1. application.properties 파일을 이용할 경우 아래와 같이 application-{profile}.properties 형식으로 여러 개의 파일을 생성하면 됩니다. application-default.properties application-dev.properties application-prod.properties 2. yaml 파일을 이용할 경우 한 파일에 profile 설정이 가능합니다. @PropertySource 애노테이션으로 값을 읽..

웹 개발 2021.01.01

java test plugin - Infinitest

Infinitest는 지속적인 테스트를 해주는 Eclipse와 IntelliJ 플러그인입니다. Infinitest는 소스 코드 변경을 감지해서 영향도가 있는 테스트를 수행합니다. github: http://infinitest.github.io user guide: http://infinitest.github.io/doc/user_guide.html Eclipse에 설치방법 Help > Eclipse Marketplace 열기 infinitest 검색 및 설치 설정 파일 infinitest.filters 파일을 프로젝트 루트 디렉터리(working directory)에 추가합니다. Test로 끝나는 테스트 파일 .*Test Inner Classes .*\$.* package 안에 있는 테스트 com\.my..

웹 개발 2020.12.26

Spring Boot에서 MySQL JDBC Timezone 설정

때때로 MySQL에 날짜를 저장할 때 Database의 날짜가 시스템이나 JVM과 다르다는 것을 알게 됩니다. 이런 경우에는 Timezone을 설정하면 됩니다. 방법 1. URL parameter로 Timezone 설정 MySQL은 기본적으로 useLegacyDatetimeCode=true를 사용합니다. Timezone을 변경하려면 이 옵션을 false로 변경해야 합니다. 또한 serverTimezone 옵션도 추가해야 합니다. 아래와 같이 application.properties에 적어줍니다. spring.datasource.url=jdbc:mysql://loalhost:3306/test ?serverTimezone=UTC &useLegacyDatetimeCode=false spring.datasour..

웹 개발 2020.12.26

Spring Boot - jar 안의 파일 읽을 때 FileNotFoundException

일반적으로 Spring Boot는 resources에 파일을 위치시킵니다. resources 하위에 text 파일을 Spring에서 제공하는 ResourceLoader를 이용하여 Read 하는 코드가 있습니다. import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.io.ResourceLoader; import org.springframework.stereotype.Component; import java...

웹 개발 2020.12.26
728x90
반응형
loading