back end 62

[JPA] deleteAll을 했는데 delete가 N개 발생하는 이유에 대하여

deleteAll을 했는데 delete가 N개 발생 JUNIT Test 진행 시, 깔끔하게 테스트하기 위해 deleteAll을 했는데 다음과 같이 deleteById가 N개가 발생하는 문제가 발생했습니다. 결과는 모두 삭제되어 결과는 동일했지만 모두 삭제되는데 엄청나게 많은 시간이 걸렸습니다. @BeforeEach public void setup() { this.mvc = MockMvcBuilders.webAppContextSetup(ctx) .addFilters(new CharacterEncodingFilter("UTF-8", true)) // 필터 추가 .alwaysDo(print()) .build(); // 데이터 초기화. 절대 Transactional을 해제하면 안됨. userGroupMember..

back end/java 2023.09.11

Java Optional에 대한 설명과 예제 코드

Java 8에서 도입된 Optional은 null-safe한 프로그래밍을 위한 도구로 많은 개발자들에게 사랑받고 있습니다. 이번 글에서는 Java Optional에 대해 자세히 알아보겠습니다. Optional은 값의 존재 여부를 표현하는 컨테이너 클래스입니다. 값이 있을 수도 있고 없을 수도 있는 상황에서 NullPointerException을 방지하고자 할 때 유용하게 사용됩니다. Optional 특징 값이 존재하지 않을 때를 대비한 안전한 처리: Optional은 값이 없을 때에 대한 처리를 안전하게 할 수 있습니다. 값이 존재하지 않을 때에는 null 대신 Optional.empty()로 표현됩니다. Null 체크를 간소화: Optional을 사용하면 명시적인 null 체크를 줄일 수 있습니다. 값..

back end/java 2023.07.09

HttpClient5에서 SSL(인증서) 무시하는 방법

HttpClient4에서 HttpClient5로 변경되면서 기존의 인증서 무시 코드가 동작하지 않습니다. 다음과 같이 변경해야 합니다. CloseableHttpClient httpclient = HttpClients.custom() .setConnectionManager(PoolingHttpClientConnectionManagerBuilder.create() .setSSLSocketFactory(SSLConnectionSocketFactoryBuilder.create() .setSslContext(SSLContextBuilder.create() .loadTrustMaterial(TrustAllStrategy.INSTANCE) .build()) .setHostnameVerifier(NoopHostname..

back end/java 2023.06.27

[Gradle] dependency 가 포함된 jar 만드는 방법

라이브러리를 개발하여 jar 파일로 만들어 프로젝트에 import 하는 경우가 있습니다. 이 경우 라이브러리를 사용하기 위해 외부 라이브러리를 사용하는 경우도 있는데, 이를 dependency라고 합니다. gradle에서 dependency가 포함된 jar를 만들기 위해서는 build.gradle 파일에 다음과 같은 코드를 추가하면 됩니다. jar { duplicatesStrategy = DuplicatesStrategy.EXCLUDE from { configurations.runtimeClasspath.findAll { it.name.endsWith('jar') }.collect { zipTree(it) } } } 참고 사이트 https://stackoverflow.com/questions/672653..

back end/java 2023.06.27

Spring Test MockMvc의 한글 깨짐 처리

Spring 또는 Spring boot에서 JUNIT을 사용하여 API(Controller) 테스트 코드를 작성할 때, 다음과 같이 MockMvc를 사용합니다. @SpringBootTest @AutoConfigureMockMvc @Transactional class SubjectsControllerTest { @Autowired MockMvc mvc; @Test public void 상품검색() throws Exception { String keyword = "스포츠"; MvcResult result = this.mockMvc .perform(get("/api/search/" + keyword)) .andExpect(status().isOk()) .andReturn(); } } } 이때, 검색 조건 및 ..

back end/java 2023.05.24

Spring Boot에서 log4j2 설정하는 방법

Spring Boot에서 로깅을 구성하는 방법 중 하나는 log4j2를 사용하는 것입니다. log4j2는 구성이 유연하고 높은 성능을 제공하므로 많은 개발자들이 선호합니다. 아래는 Spring Boot에서 log4j2를 구성하는 방법입니다. 1. log4j2를 추가합니다. 먼저, Maven 또는 Gradle을 사용하여 log4j2 의존성을 추가합니다. Maven의 경우 다음과 같이 추가할 수 있습니다. org.apache.logging.log4j log4j-slf4j-impl 2.14.1 2. log4j2 구성 파일을 작성합니다. log4j2.xml 또는 log4j2.yml과 같은 구성 파일을 작성합니다. 이 예제에서는 log4j2.xml 파일을 사용합니다. 이 예제에서는 콘솔에 로그를 출력하기 위해 C..

back end/java 2023.02.25

Spring Boot: 웹 애플리케이션을 빠르고 쉽게 구축하는 방법

Spring Boot는 Spring Framework를 기반으로 한 웹 애플리케이션을 빠르고 쉽게 구축할 수 있는 도구입니다. Spring Boot를 사용하면 웹 애플리케이션 개발을 위한 초기 설정과 기본 구조를 쉽게 설정할 수 있으며, 다양한 기능을 제공하는 라이브러리와 연동하여 개발을 빠르게 진행할 수 있습니다. 이번 글에서는 Spring Boot의 개념과 특징, 사용 방법에 대해 자세히 알아보겠습니다. Spring Boot란 무엇인가? Spring Boot는 Spring Framework를 기반으로 하며, 웹 애플리케이션을 빠르고 쉽게 구축할 수 있도록 도와주는 도구입니다. Spring Boot는 일반적인 Spring Framework 개발에 필요한 초기 설정과 기본 구조를 자동으로 설정하여, 개발..

back end/java 2023.02.17

Java Spring: 애플리케이션 개발의 가장 핫한 프레임워크

Java Spring은 많은 개발자들이 사용하고 있는 Java 애플리케이션 개발을 위한 오픈소스 프레임워크입니다. 이번 글에서는 Java Spring에 대해 자세히 알아보고, 개발자들이 Spring을 사용하는 이유에 대해 알아보겠습니다. Spring Framework란 무엇인가? Spring Framework는 Java EE 표준 기반으로 만들어진 웹 응용 프로그램을 구축하는 데 사용할 수 있는 모듈과 컴포넌트를 제공하는 프레임워크입니다. Spring Framework는 많은 기능을 제공하는데, 그 중에서도 Spring Core, Spring MVC, Spring AOP, Spring ORM 등이 가장 많이 사용됩니다. Spring Core: IoC와 DI 기능 제공 Spring Core는 Spring ..

back end/java 2023.02.17

[보안취약점] Cross-Domain Misconfiguration (CORS) in Spring Security

OWASP ZAP을 실행하면 다음과 같은 보안 취약점이 검출될 수 있습니다. OWASP ZAP 내용 1) 설명 Web browser data loading may be possible, due to a Cross Origin Resource Sharing (CORS) misconfiguration on the web server 2) 기타 정보 The CORS misconfiguration on the web server permits cross-domain read requests from arbitrary third party domains, using unauthenticated APIs on this domain. Web browser implementations do not permit arbi..

back end/java 2023.02.15
728x90
loading