Spring
-
spring boot 1.X 와 2.X 차이점Spring/spring boot 및 기타 2021. 1. 8. 00:11
spring boot 2 와 이전 버젼의 차이점 1. Java 8 이 최소 버젼이다. java9 를 지원하는 최초의 버젼이다. 2. tomcat 8,5 가 최소버젼이다. 3. Hibernate 5.2 가 최소 버젼이다. 4. Gradle 3.4 가 최소 버젼이다. 5. Spring Security 구성이 더 쉬워지고 Spring Security Oauth2가 Spring Security에 합쳐졌다. 보안 자동 구성은 더 이상 옵션을 노출하지 않고 가능한 한 Spring Security 기본값을 사용한다. -Spring Security5 사용자가 한 곳에서 명시적으로 환경설정을 할 수 있다. 이런 게 WebSecurityConfigurerAdapter 의 순서 문제를 막을 수 있다. 예를 들어 Actuat..
-
[SPRING] kafka Error registering AppInfo mbean - 스프링부트 카프카Spring/spring boot 및 기타 2020. 11. 3. 22:19
스프링 부트에서 카프카 클라이언트 라이브러리를 추가하면, 이런오류가 생긴다. Error registering AppInfo mbean 해당오류는 카프카 컨슈머 측에서만 발생한다. javax.management.InstanceAlreadyExistsException: kafka.consumer:type=app-info,id=clientid-0 at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:437) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1898) at com.sun.jmx.in..
-
[SPRING] 몽고 DB @Field 없을때 오류 org.springframework.data.mapping.PropertyReferenceException: No property log found for typeSpring/spring boot 및 기타 2020. 10. 26. 22:49
스프링부트 2.3.3 을 쓰게되면서 부터 라이브러리 사용법들이 조금 많이 달라졌다. 예를 들어 몽고db 가 있다. spring-data-mongodb:3.0.0 이후의 버젼이다. 몽고 db 쿼리 사용 예시이다. Date dateLogStartDate = new Date(); // date 조건검색 시작 Date dateLogEndDate = new Date(); // date 조건검색 종료 Query query = new Query(); query.with(Sort.by(Sort.Direction.DESC, "log_date")); // date 내림차순 Criteria criteria = Criteria .where("log_date").gte(dateLogStartDate).lte(dateLogEnd..
-
[Spring Annotation] 스프링 RequestBody post 전송시 json 필드명 변경(파싱) @JsonPropertySpring/Annotation 2020. 10. 11. 22:03
프론트에서 post 로 데이터 객체를 보내게 되면 서버에서 RequestBody 로 객체를 받아야 하는 경우가 있다. 이때 받게 되는 데이터를 vo로 만들어서 받게 된다. 필드명을 프론트에서 보내는 객체명과 다르게 쓰고 싶은 경우 필드명을 어노테이션으로 받아야 한다. 같게 하려면 프론트필드명과 스프링객체 필드명을 같게만 하면 된다. 안되는 경우는 예를 들어 프론트 json 필드명에 . dot 가 들어간 경우는 아래 @JsonProperty 를 사용해야 한다. 프론트에서는 다음과 같이 post 로 데이터를 전송시 { "relationship.name": "someting" } 서버에서는 프론트 필드명과 서버받는 객체의 필드명을 달리 하려면 아래와 같이 @JsonProperty 를 추가하면 된다. publi..
-
[spring JPA] 스프링 jpa converter (empty string to null)Spring/JPA 2020. 10. 2. 22:40
JPA 를 사용하면서 DB 에 어떤 특정값이 들어오면 변환해줘야 할 떄가 있다. 예를 들어 empty string 을 null 로 넣어줘야 할떄다. (mysql) 빈스트링이 "" 가 들어올때 null 로 바꿔서 db 에 넣고 싶을때 @Convert 가 필요하다, 이 외에도 어떤 고정된 값들은 특정 값으로 변환해서 db 에 넣어줄떄 이 Convert 가 필요하다. 구현 방법은 변경하고자 하는 컬럼명 위에 @Convert 적고, 커스텀한 Class 명을 기입한다. @Table(name = "db1.test") public class Test { ... @Convert(converter = EmptyStringToNullConverter.class) @Column(name = "test_data") priva..
-
[Spring] 스프링 어플리케이션 kill 시키기Spring/spring framework 기본 및 이론 2020. 9. 27. 21:36
spring kill 시키기 SIGTERM 과 SIGKILL 주의해야할 것은 "정상(?) 종료" 되었을 때에 호출된다는 것이다. 무슨 말이냐면 애플리케이션이 종료될 때 일반적인 인터럽트는 SIGTERM 이라는 인터럽트다. 이 인터럽트(SIGTERM)가 발생하면 이벤트로 감지하고 수행하는 작업이라는 것이다. SIGTERM을 정상적인 종료라고 봤을 때, 비정상 종료는 SIGKILL 이다. 리눅스에서 kill -9 옵션과 같이 강제적으로 꺼버리는 것과 윈도우에서 작업관리자가 작업을 끝내버리는 등의 인터럽트가 SIGKILL이다. 위의 예제를 따라했는데 종료 이벤트에 대한 메서드가 호출되지 않았다면 SIGKILL을 이용해서 종료했을 가능성이 높다. 혹시나하고 윈도우 환경에서 커맨드창에 ctrl + c 로 종료해보..
-
[SPRING] 스프링 스케쥴링 추가 @ScheduledSpring/spring boot 및 기타 2020. 9. 27. 21:28
어플리케이션 내에서 스케쥴링 해야하는 일이 생긴다. 스프링부트에서 사용하려명 Main 클래스에 @EnableScheduling 을 추가해주면 된다. @Component public class Scheduler { @Scheduled(fixedDelay = 3000) public void excute() { System.out.println("스케쥴러"); } } 위의 코드는 3초마다 실행이 된다. fixedDelay 는 스케쥴러가 끝나고 3초이고, fixedRate 는 3초마다 주기적으로 실행을 한다는 의미이다. 끝나는 시점이 중요하면 fixedDelay 를 사용해야 한다. 그리고 크론탭과 같은 문법 사용이 가능하다. ex) @Scheduled(cron="*/30 * * * * *") 시간 설정 @sch..
-
[Spring JPA] Column으로 쓰지않는 변수에 대한 선언. @TransientSpring/JPA 2020. 9. 22. 17:20
엔티티 클래스로 등록한 클래스지만, DB 테이블과는 별도로 기능이(추가 필드나 메소드) 필요한 경우가 있다. 예를 들어 DB 테이블에는 존재하지 않지만, 엔티티 클래스에는 등록되어 같이 운용하는 경우가 있다. vo(엔티티) 에는 사용하지만 jpa 로 디비와 관련 없이 사용하고 싶을때!! 이럴 경우, DB 테이블에 간섭하지 않고, 엔티티 클래스 내부에서만 동작하게 하는 어노테이션을 사용한다. @Transient 어노테이션을 사용하는데, 이 어노테이션은 하이버네이트의 jpa 패키지에 위치하고 있다. @Transient 어노테이션을 사용한 필드나 메소드는 DB 테이블에 적용되지 않는다. @Entity public class Member { private Long memberId; private String p..