IT/SPRING BOOT (12) 썸네일형 리스트형 SpringBoot 2.7.5 To 3.0.1로 마이그레이션 하기 오늘은 저번에 SpringBoot 3.0에 대해 알아보고 실제 마이그레이션 하는 것을 한번 알아 보겠습니다. Java로 된 프로젝트는 Spring.io에 마이그레이션 가이드를 보면서 SBM방식대로 진행하면 되겠습니다만 저는 Kotlin이라 그렇게는 진행하지 못하고 그냥 수동으로 진행하겠습니다. 프로젝트 환경 스프링 2.7.5 Mysql 8.x Kotlin 1.7.22 Java11 1. buildgradle.kts 변경 build.gradle.kts파일 이전 plugins { id("org.springframework.boot") version "2.7.5" id("io.spring.dependency-management") version "1.1.0" kotlin("jvm") version "1.7.22.. Springboot 3.0에 변화에 대해 알아보자 오늘은 SpringBoot 3.x에 대해 알아보고 어떤 점이 바뀌었는지 살펴 보겠습니다. Spring 3.0.5까지 나와있는 시점에 3.x의 변경된 점이 어떤 것이 있나 알아보고자 합니다. 자세한 사항은 공식문서를 확인해 주세요 - Spring Boot 3.0 준비 Spring Boot 2.0은 2.x라인의 첫 번째 릴리즈였으며 2018년 2월 28일에 게시되었습니다. 최근에는 2.7버전대를 많이들 사용하고 있으실겁니다. 저도 2.7를 사용하고 있었습니다. 공식 홈에서 얘기하는 바로는 3.0이 나오면 2.7에서 마이그레이션하는 가이드를 제공할 거라고 말하고 있습니다. JAVA 17 및 Java 19지원 Spring Boot 3.0에는 최소java 17이 필요합니다. 현재 Java 8 또는 Java 11을.. Spring Component Scan에 대해 알아보자 오늘은 Spring Component Scan에 대해 알아보겠습니다. ComponentScan은 간단히 말하면 Spring프로젝트를 할때 클래스를 Spring Bean으로 만들때 특정 애노테이션이 달린 클래스를 검색할 위치를 Spring에 알리는 것입니다. - Spring Application에서 @ComponentScan 사용 @SpringBootApplication 애노테이션을 등록하고 정의를 따라가보면 @ComponentScan 애노테이션을 확인 하실 수 있습니다. ComponentScan 대상 @Component 애노테이션이 붙어 있으면 스캔 대상이 됩니다. @Controller, @Service, @Repository 모두 @Component가 설정되어 있으므로 스캔에 대상이 됩니다. @Conf.. Entity VO DTO에 대해 알아보자 이번 시간에는 Entity, VO, DTO의 개념에 대해 알아보겠습니다. 프로젝트를 진행함에 있어 몰라서는 안되는 개념인데 한번 정리하는 차원에서 글을 작성하게 되었습니다. 아는 것도 한번 정리하면 개념이 다시 잡히는 것 같습니다. - Entity ORM에서 Entity란 데이터베이스의 테이블과 1:1 매핑되는 클래스로 데이테베이스 테이블에 존재하는 컬럼을 가져야 합니다. 데이터베이스 객체를 담을때만 사용합니다. Persistent목적으로만 사용해야 합니다. Setter금지등 equal, hashcode를 오버라이드 함으로 객체의 동일성과, 객체의 일관성을 유지하도록 노력해야 합니다. @Entity class EntityTest( @Id @GeneratedValue(strategy = Generation.. Spring Security Authenticate에 대해 알아보자 이번 시간에는 Spring Authenticate Architecture에 대해 알아보고자 합니다. Spring Security는 대부분의 Spring 프로젝트를 함에 있어 필수적으로 사용한 경험이 있으실 겁니다. 이 글에서는 간단한 예제를 통해 Spring Security에 대한 이해를 높이고자 작성 하였습니다. 1. 프로젝트 생성 Spring Boot 웹 종속성만 추가합니다.. Gradle implementation("org.springframework.boot:spring-boot-starter-web") http://localhost:80 으로 접속하면 "곰이야"라는 텍스트를 출력해 보겠습니다. @SpringBootApplication class ToyProjectApplication fun ma.. Spring boot AOP에 대해 알아보자 이번 시간에는 스프링 AOP개념에 대해 알아보고자 합니다. AOP는 교차 절단 문제의 분리를 허용하여 모듈성을 높이는 것을 목표로 하는 프로그래밍 패러다임입니다. 코드 자체를 수정하지 않고 기존 코드에 추가 동작을 추가하여 이를 수행합니다. 대신 새 코드와 새 동작을 별도로 선언할 수 있습니다. Spring의 AOP 프레임워크는 이러한 교차 절단 문제를 구현하는 데 도움이 됩니다. - Gradle implementation("org.springframework.boot:spring-boot-starter-aop") - AOP 개념 및 용어 AOP에 특정한 개념과 용어를 간단히 알아 보겠습니다. AOP란 관점 지향프로그래밍이라고 합니다. 뭐 간단하게 말하자만 흩어져있는 관심사를 모아서 모듈화하는 정.. JPA 즉시로딩 지연로딩에 대해 알아보자 이번 시간에는 JPA ORM으로 작업할 때 데이터 로딩유형에 대해 알아보겠습니다. 데이터로딩에는 EAGER로딩과 LAZY로딩이 있습니다. EAGER Loading은 즉시 데이터 초기화가 발생하는 디자인 패턴입니다. LAZY Loading은 객체가 사용되는 지점에 초기화가 되는 디자인 패턴입니다. 뭐 다 설명했다. 위에 설명한 부분이 전부이다. 이제 간단한 예를 코드로 알아보겠다. 다른 글에서도 흔히 볼수 있는 Team과 Member Entity를 만들어 보겠습니다. - 즉시로딩 Member, Team N:1 단방향 매핑 // Member.kt class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long, val us.. Spring JPA 1+n 이슈에 대해 알아보기 Spring JPA 1+n 이슈에 대해 알아보기 오늘은 JPA 연관관계를 사용하면서 한번은 겪게 되는 1+N 이슈에 대해서 알아보고자 합니다. N+1 이슈가 무엇이고 왜 발생하는 걸까요? N+1이슈는 연관 관계에서 발생하는 이슈로 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수(n) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 조회하는 경우가 발생합니다. 이를 N+1 문제라고 합니다.먼저 연관관계를 만들어 보기 위해서 Team, Member Entity를 만들어 보겠습니다. NBA 농구에 시카고 불스 팀이 있습니다. 시카고 불스 팀에 포함된 멤버가 있습니다. 연관관계는 일대다, 다대일로 되어있습니다. // Team.kt @Entity class Team ( @Id @Generate.. SpringBoot, Kotlin, Mysql사용해서 Rest-Api 만들기 SpringBoot, Kotlin, Mysql사용해서 Rest-Api 만들기 이번에는 Spring boot, Kotlin언어와 데이터베이스는 Mysql을 사용해서 Rest-Api를 만들어 볼까합니다. DB설계는 간단하게 할꺼고, 목적은 Back-end Rest-Api구조를 만드는것이 목적입니다.프로젝트 환경 Springboot 3.0.4 (글 작성 현재 기준 최신) Kotlin 1.7.22 Mysql 8.0.31 Jvm17 프로젝트 생성 IntellijIdea 를 기준으로 하겠습니다. Dependency는 Spring Boot DevTools, Spring Web만 선택하고 Create를 눌러 줍니다. Mysql관련 설정은 수동으로 하도록 하겠습니다. 프로젝트 생성후 실행 생성된 프로젝트를 실행후 loc.. Spring boot WeSecurityConfigureAdapter deprecated처리 Spring boot WeSecurityConfigureAdapter deprecated처리 오늘은 Spring boot WebSecurityConfigureAdapter Deprecated된 부분을 처리하는 시간을 갖도록 하겠다. 기존 override fun configure(http: HttpSecurity) { http .csrf() .disable() .httpBasic() .disable() .formLogin() .disable() } 기존에는 위와 같이 override 형태로 되어 있다. 이 부분을 @Bean으로 등록 해 주면 된다. 변경 후 @Bean fun filterChain(http: HttpSecurity): SecurityFilterChain { return http .csrf().. JWT Springdoc-openapi 전역 설정 Springdoc-openapi 전역 설정 (기존 Swagger) 스프링에서 API문서를 작성할 때 Swagger사용시 스프링 2.6.x에서 에러가 발생해서 이 기회에 그냥 바꾸기로 함 기존 dependency implementation("io.springfox:springfox-boot-starter:3.0.0") implementation("io.springfox:springfox-swagger-ui:3.0.0") 변경 dependency implementation ("org.springdoc:springdoc-openapi-ui:1.6.8") dependency 하나만 주입하면 된다. OpenApiConfig 파일 설정 @Configuration class OpenApi30Config { @Be.. 스프링 프록시 패턴 및 데코레이터 패턴 스프링 프록시 패턴 및 데코레이터 패턴 최근에 인강으로 인프런 김영한님의 스프링 핵심원리 고급편을 보고 프록시패턴 및 데코레이터 패턴의 의도와 uml을 메모해 둔다 1. 프록시 패턴 프록시 패턴의 의도 : 다른 개체에 대한 접근을 제어하기 위해 대리자를 제공 2. 데코레이터 패턴 데코레이터 패턴의 의도 : 객체에 추가 책임(기능)을 동적으로 추가하고, 기능 확장을 위한 유연한 대안 제공 이전 1 다음