본문 바로가기

JAVA

(11)
[Spring Boot] Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ... 12 more JDK 11 버전으로 스프링 부트 프로젝트를 진행을 하니 오류가 발생하며 실행이 되지 않았다. 원인은 JDK..
[Spring Boot] p6spy - 외부 라이브러리 사용하기 https://github.com/gavlyukovskiy/spring-boot-data-source-decorator GitHub - gavlyukovskiy/spring-boot-data-source-decorator: Spring Boot integration with p6spy, datasource-proxy, flexy-pool and s Spring Boot integration with p6spy, datasource-proxy, flexy-pool and spring-cloud-sleuth - GitHub - gavlyukovskiy/spring-boot-data-source-decorator: Spring Boot integration with p6spy, datasource-p... g..
[Spring boot] 라이브러리 Dependancies Spring Web : Spring MVC를 사용하여 RESTful을 포함한 웹 애플리케이션을 구축. Apache Tomcat을 기본 내장형 컨테이너로 사용. Thymeleaf : 웹 및 독립 실행형 환경 모두를 위한 최신 서버 측 Java 템플릿 엔진. HTML을 브라우저에서 정적 프로토타입으로 올바르게 표시할 수 있다. Spring Data JPA : Spring Data 및 Hibernate를 사용하여 Java Persistence API를 사용하여 SQL 저장소에 데이터를 유지. H2 Database : 작은 설치 공간(2MB)으로 JDBC API 및 R2DBC 액세스를 지원하는 빠른 메모리 내 데이터베이스를 제공. 내장형 및 서버 모드와 브라우저 기반 콘솔 응용 프로그램을..
[Spring] AOP AOP : Aspect Oriented Programming AOP가 필요한 상황 - 메소드의 호출 시간을 측정하고 싶을 때 - 회원가입 시간, 회원조회 시간을 측정하고 싶을 때 - 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) package hello.hellospring.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; @Component @Aspect public c..
[Spring] @SpringBootTest, @Transactional @SpringBootTest @Transactional class MemberServiceIntegrationTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; ... @SpringBootTest : Test 클래스에 @SpringBootTest 를 붙여주면 스프링 컨테이너와 테스트를 함께 실행한다. @Transactional : 테스트 시작 전에 트랜잭션을 시작하고 테스트 완료 후에 항상 롤백한다. @Transactional를 사용하면 @BeforeEach, @AfterEach 애노테이션을 사용하지 않아도 DB에 데이터가 남지 않아 다음 테스트에 영향을 주지 않는다. * 트랜잭션 (tran..
[Spring] jdbc.datasource.DataSourceUtils가 import 되지 않는 오류 리소스를 추가하지 않아 발생한 오류 build.gradle 파일의 dependencies 안에 하단 코드를 추가한다. implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'com.h2database:h2' gradle refresh를 해주면 리소스가 추가되어 정상적으로 import된다.
[Spring] 스프링 빈과 의존관계 DI (Dependency Injection) : 의존성 주입. 객체 의존관계를 외부에서 넣어주는 것. @Autowired : 생성자에 @Autowired가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다. 스프링 빈을 등록하는 방법 1. 컴포넌트 스캔과 자동 의존관계 설정 @Component : @Component 애노테이션이 있으면 스프링 빈으로 자동등록된다. @Controller, @Service, @Repository : @Component가 애노테이션 안에 포함되어 있기 때문에 스프링 빈으로 자동등록된다. 스프링 컨테이너에 스프링 빈을 등록할 때 기본적으로 싱글톤으로 등록한다. -> 같은 스프링 빈이면 모두 같은 인스턴스 * 싱글톤 : 유일하게 하나만 등록해서 공유 2. 자바 ..
[Spring] @AfterEach, @BeforeEach @AfterEach public void afterEach() { repository.clearStore(); } @AfterEach : 여러 테스트를 한번에 실행하면 직전 테스트의 결과가 DB에 남아 오류가 발생할 수 있다. @afterEach를 사용하면 각 테스트가 종료될 때마다 DB에 저장되어 있는 데이터를 삭제한다. @BeforeEach public void beforeEach() { memberRepository = new MemoryMemberRepository(); memberService = new MemberService(memberRepository); } @BeforeEach : 각 테스트 실행 전에 호출된다. 테스트 간에 영향이 가지 않도록 항상 새로운 객체를 생성하고 의존관계를 새..
[Spring] 스프링 웹 개발 기초 (MVC, @ResponseBody) MVC : Model, View, Controller @ResponseBody @Controller public class HelloController { @GetMapping("hello-string") @ResponseBody public String helloString(@RequestParam("name") String name) { return "hello " + name; } } @ResponseBody를 사용하면 viewResolver를 사용하지 않고 http의 body에 문자 내용을 그대로 반환한다. * viewResolver : 컨트롤러에서 리턴 값으로 문자를 반환하면 viewResolver가 화면을 찾아서 처리한다. {"name":"spring"} @ResponseBody를 사용하고 객..
[JAVA] 소수 판별법 boolean isPrime=true; for(int i=2; i