본문 바로가기
728x90

백엔드/Spring(Boot)87

JPA 엔티티 생성시 테이블 명 및 칼럼 명 변경 @Table 어노테이션(테이블 명 변경) @Column 어노테이션(컬럼명 변경) 2021. 8. 25.
Maven 프로젝트에서 JPA 사용 main -> resources -> META_INF (폴더 생성) -> persistence.xml 생상 XML 설정 실행 시켰을때 이렇게 나오면 정상 # Persistence.createEntityManagerFactory("hello"); 여기서 "hello"는 persistence.xml 에서 의 name 값이다 2021. 8. 24.
JPA 엔티티 설계시 주의점 1. 엔티티에는 가급적 Setter를 사용하지 말자 2. 모든 연관관계는 지연로딩으로 설정! 3. 컬렉션은 필드에서 초기화 하자. 2021. 8. 22.
JPA 테이블 컬럼명 생성 전략 테이블, 컬럼명 생성 전략 스프링 부트에서 하이버네이트 기본 매핑 전략을 변경해서 실제 테이블 필드명은 다름 https://docs.spring.io/spring-boot/docs/2.1.3.RELEASE/reference/htmlsingle/#howtoconfigure-hibernate-naming-strategy http://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#naming 하이버네이트 기존 구현: 엔티티의 필드명을 그대로 테이블의 컬럼명으로 사용 ( SpringPhysicalNamingStrategy ) 스프링 부트 신규 설정 (엔티티(필드) 테이블(컬럼)) 1. 카멜 케이스 언더스코어(mem.. 2021. 8. 22.
JPA 쿼리 및 로그 확인 .yml 파일 또는 .properties 파일에 로깅 추가 테스트 확인 쿼리 파라미터 로그 남기기(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-d.. 2021. 8. 21.
spring devtools 설치 의존성 추가 스프링 재시작하면 restartedMain 표시 확인 이제 작업도중 파일 수정시 스프링 재시작 하지 않고 recompile하면 수정 적용 가능 2021. 8. 21.
Gradle sync 에러 스프링 부트 2.5.4 버전 자바 11로 설정하고 인텔리제이로 실행시키면 Sync 에러 난다. 이유는 모름 버전을 2.4.11 자바 11로 하면 에러 안남 2021. 8. 20.
gradle cache 삭제 얼마전 회사에서 build를 해도 계속 예전의 에러를 출력해내었다. 알아본 결과 gradle에 남아있는 cache 문제였다. C:\\Users\\사용자\\.gradle\\cache 내부의 폴더 삭제 ./gradlew build --refresh-dependencies 혹은 재빌드 참고 https://bgpark.tistory.com/31 gradle cache 삭제 얼마전 회사에서 build를 해도 계속 예전의 에러를 출력해내었다. 알아본 결과 gradle에 남아있는 cache 문제였다. C:\\Users\\사용자\\.gradle\\cache 내부의 폴더 삭제 ./gradlew build --refresh-dependencies.. bgpark.tistory.com 2021. 8. 20.
스프링 부트 웹 프로젝트 생성시 기본 설정파일 2021. 8. 20.
스프링 웹 설정 1. build.gradle 추가 dependencies { // web 라이브러리 추가 implementation 'org.springframework.boot:spring-boot-starter-web' } 2. CoreApplication.java 실행 3. 실행 확인 에러페이지 뜨면 잘 적용된것 2021. 8. 16.
빈 스코프 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 뜻한다. 스프링은 당양한 스코프를 지원한다. 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관리하고 더는 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 웹 관련 스코프 * request : 웹 요청이 들어오고 나갈때 까지 유지되는 스코프이다. * session : 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프이다. * application : 웹의 서블릿 컨텍스와 같은 범위로 유지되는 스코프이다. 2021. 8. 16.
Spring 클래스 초기화, 종료 1. 어노테이션 사용 import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; public class NetworkClient { private String url; / ** 대충 코드 **/ @PostConstruct public void init(){ System.out.println("NetworkClient.afterPropertiesSet"); connect(); call("초기화 연결 메시지"); } @PreDestroy public void close(){ System.out.println("NetworkClient.destroy"); disconnect(); } } // 다른 .java에서 NetworkClient.. 2021. 8. 16.
@Autowired 옵션 해당 옵션 적용시 해당 빈 객체 없어도 오류 안남 static class TestBean { @Autowired(required = false) public void setNoBean(Member noBean1) { System.out.println("noBean1 = " + noBean1); } @Autowired public void setNoBean2(@Nullable Member noBean1) { System.out.println("noBean1 = " + noBean1); } @Autowired public void setNoBean3(Optional noBean3) { System.out.println("noBean3 = " + noBean3); } } 2021. 8. 13.
컴포넌트 스캔 필터 (@ComponentScan) includeFilters : 컴포넌트 대상에 포함 excludeFilters : 컴포넌트 대상에 제외 컴포넌트 스캔 테스트 public class ComponentFilterAppConfigTest { @Test void filterScan() { ApplicationContext ac = new AnnotationConfigApplicationContext(ComponentFilterAppConfig.class); BeanA beanA = ac.getBean("beanA", BeanA.class); Assertions.assertThat(beanA).isNotNull(); org.junit.jupiter.api.Assertions.assertThrows( NoSuchBeanDefinitionExcep.. 2021. 8. 12.
@ComponentScan @ComponentScan 은 @Component가 붙은 모든 클래스를 스프링 빈으로 등록한다 이때 스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용한다. * 빈 이름 기본 전략 : MemberServiceImpl 클래스 -> memberServiceImpl * 빈 이름 직접 지정 : 만약 스프링 빈의 이름을 직접 지정하고 싶으면 @Component("지정할 이름") @Component 어노테이션 붙은 클래스 스캔 @Configuration @ComponentScan public class AutoAppConfig { } @Component public class MemberServiceImpl implements MemberService { private final MemberRe.. 2021. 8. 12.
ApplicationContext란 1. BeanFactory 기능을 모두 상속받아서 제공한다 2. 애플리케이션을 개발할 때는 빈은 관리하고 조회하는 기능은 물론이고, 수많은 부가기능이 필요하다. * 부가기능 1. 메세지소스를 활용한 국제화 기능 - 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력 2. 환경변수 - 로컬, 개발, 운영등을 구분해서 처리 3. 애플리케이션 이벤트 - 이벤트를 발행하고 구독하는 모델을 편리하게 지원 4. 편리한 리소스 조회 - 파일, 클래스패스, 외부 등에서 리소스를 편하게 조회 2021. 8. 10.
Bean 조회 2021. 8. 10.
스프링 빈 확인 및 출력 2021. 8. 10.
스프링 컨테이너 @Configuration, @Bean IoC를 적용할 java 파일 생성 후 클래스에는 @Configuration, 함수에는 @Bean 어노테이션 작성한다 스프링 컨테이너 생성 및 스프링 빈 사용 AppConfig.class 에서 가져올수 있는 getBean 첫 파라미터 name 종류 2021. 8. 9.
SOLID SRP : 단일 책임 원칙 * 한 클래스는 하나의 책임만 가져야 한다 * 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른것 예) UI 변경, 객체의 생성과 사용을 분리 OCP : 개방 - 폐쇄 원칙 * 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. * 다형성을 활용해보자 * 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현 * 지금까지 배운 역할과 구현의 분리를 생각해보자 LSP : 리스코프 치환 원칙 * 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀수 있어야 한다. * 다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 한다는 것, 다형성을 지원하기 위한 원칙, 구현한 구현체는 믿고 .. 2021. 8. 7.
Spring Boot Model을 사용하여 데이터 전송 model.addAttribute를 사용하여 데이터 전송 타임리프를 사용하여 members 가져오기(id, name은 Member클래스에서 Getter로 가져옴) 2021. 8. 4.
SpringBoot @PostMapping 해당 URL(/members/new)의 form 태그에서 Post가 발생하면 @PostMapping 어노테이션을 가지고 있는 컨트롤러에서 처리해준다 html에서 form태그 안에 요소중 name 속성을 가지고 MemberForm 클래스에 넣어준다 2021. 8. 4.
스프링 부트 테스트 같은 test폴더에 같은 패키지 경로로 테스트할 java파일 생성(MemoryMemberRepositoryTest.java) 테스트 코드 작성후 테스트할 함수에 @Test 어노테이션 작성 테스트 결과 올바르면 아무것도 표시 안되며 틀리면 에러가 표시된다. @AfterEach 에노테이션 2021. 8. 3.
스프링 AOP AOP 주요 용어 용어 의미 Joinpoint Advic를 적용 가능한 지점을 의미, 메소드 호출 필드 값 변경등이 Joinpoin에 해당 PointCut Joinpoint의 부분집합, 실제로 Advice가 적용되는 Joinpoint를 나타낸다. 스프링에서는 정규 표현식이자 AspectJ의 문접을 이용하여 Pointcut을 정의 Advice 언제 공통 관심 기능을 핵심 로직에 적용할 지를 정의. 메서드를 호출하기 전에 트랜잭션 시작(공통 기능) 지능을 적용한다는것을 정의하고 있다. Weaving Adivce를 핵심 로직 코드에 적용한다는 것을 Weaving이라고 한다. Aspect 여러 객체에 공통으로 적용되는 기능. 트랜잭션이나 보안등이 Aspect의 좋은 예이다. 세 가지 Weaving 방식 1. 컴.. 2021. 8. 3.
@ResponseBody 설명 @ResponseBody 를 사용 * HTTP의 BODY에 문자 내용을 직접 반환 * viewResolver 대신에 HttpMessageConverter가 동작 * 기본 문자처리 : StringHttpMessageConverter * 기본 객체처리 : MappingJackson2HttpMessageConverter * byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음 @GetMapping("hello-api") @ResponseBody // 해당 에노테이션이 있으면 리턴값으로 html로 전송, 또는 객체를 전송시 json으로 전송 public Hello helloApi(@RequestParam("name") String name) { Hello hello = n.. 2021. 8. 3.
gradlew.bat build 오류 IntelliJ에서 스프링부트로 개발할 때(빌드툴은 Gradle) 이전 프로젝트는 JDK 8버전을 쓰다가 새로운 프로젝트에서 JDK 11버전으로 올려서 Gradle Build를 수행하니 CompileJava 명령어 수행 중 처음보는 에러가 발생했다. 에러문구 : Execution failed for task ':compileJava'. > Could not target platform: 'Java SE 11' using tool chain: 'JDK 8 (1.8)'. 생전 처음보는 에러 문구에 JDK 설정이 잘못되었나 이곳저곳 찾아보았지만 설정은 JDK 11로 정상적으로 되어 있었다. File -> Project Settings -> Project File -> Project Settings -> Mod.. 2021. 8. 3.
String Boot 기본 Controller 1. GetMapping 어노테이션으로 URL 매칭한다. 2. html에 "data"라는 변수로 "hello!!" 값을 전송 3. hello.html로 전송(return 값) * 기본 템플릿 경로(src/main/resources/templates/(hello).html import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HelloController { @GetMapping("hello") // URL 매칭 public String hello(Model .. 2021. 8. 3.
728x90