반응형

spring 35

Hibernate 성능 튜닝 Tips

1. 개발 과정에서 성능 이슈 찾기Hibernate에는 각 세션별 내부 통계를 확인할 수 있도록 출력해주는 기능이 있습니다. Spring Data JPA를 사용한다면 아래와 같이 설정하면 됩니다. (문제점을 찾을 때만 사용)spring.jpa.properties.hibernate.generate_statistics=truelogging.level.org.hibernate.stat=DEBUG 추가적으로 다음과 같이 설정을 하면 느린 쿼리에 대한 정보를 얻을 수 있습니다.spring.jpa.properties.hibernate.session.events.log.LOG_QUERIES_SLOWER_THAN_MS=10   2. in_clause_parameter_padding 옵션 사용Hibernate 5.2.1..

back end/java 2025.03.10

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

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

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

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

Spring boot 오류 처리

오류처리는 애플리케이션 개발에 있어서 매우 큰 부분을 차지합니다. 오류 예측과 예방, 그리고 오류를 빨리 발견하고 고칠 수 있는 것은 개발자의 필수 조건입니다. ErrorController Spring boot에서 별 다른 설정 없이 웹 애플리케이션을 실행한 후 404 Not Found 가 발생하면 아래와 같이 응답합니다. 1. 브라우저에서 호출 2. json 응답 Content-Type: application/json { "timestamp": "2020-12-24T15:34:44.447+0000", "status": 404, "error": "Not Found", "message": "No message available", "path": "/" } Spring boot의 기본 오류 처리 proper..

웹 개발 2020.12.24

spring에서 CORS 설정하기

교차 출처 리소스 공유(CORS, Cross-origin resource sharing)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제입니다. 웹 애플리케이션은 리소스가 자신의 출처(도메인, 프로토콜, 포트)와 다를 때 교차 출처 HTTP 요청을 보냅니다. 별다른 설정을 하지 않을 경우 다른 도메인의 리소스를 접근하려고 하면 아래와 같은 에러 메시지가 브라우저에 표시됩니다. Access to fetch at ‘https://api.lubycon.com/me’ from origin ‘http://localhost:3000’ has been blocked by CORS policy: No ‘Ac..

웹 개발 2020.12.20

spring boot] URL에서 jsessionid 제거

jsessionid는 새 세션이 만들어지면 클라이언트가 쿠키를 지원하는지 여부를 서버가 알 수 없으므로, 쿠키와 URL에 모두 jsessionid를 만들어 주는 것을 의미하며 url에 붙이거나 헤더에 붙여서 나오게 됩니다. 클라이언트가 두 번째 요청부터 세션 쿠키를 보내오면 URL에 jsessionid를 붙이지 않고, 쿠키가 없으면 계속 URL에 jsessionid를 붙이게 됩니다. 그런데 문제는, jsessionid를 탈취당하면 사용자 ID, 비밀번호를 몰라도 접근이 가능하게 됩니다. 그래서 웹 보안취약점 점검에서는 jsessionid를 꼭 제거하게 되어있습니다. 방법 1. application.properties에 아래와 같은 옵션을 추가합니다. server.session.tracking-modes=..

웹 개발 2020.12.20
728x90
반응형
loading