본문 바로가기

스프링 부트58

DTO vs VO vs Entity 비교 Entity란 고유 ID가 있고 mutable한 객체 DB 테이블과 매핑되는 클래스이다. 가변 객체로 활용할 수 있다. 로직을 포함할 수 있다. DTO(Data Transfer Object)란 DTO는 데이터를 전달하기 위한 객체 가변이나 불변으로 활용할 수 있다. Controller와 View 사이에 존재한다. 로직을 포함할 수 없다. VO(Value Object)란 VO는 값 자체를 표현하는 객체 Immutable하다. 말 그대로 값을 표현하기 때문에 상태 변경이 필요가 없다. 값 비교를 위해선 equals와 hashCode를 재정의해야 한다. 로직을 포함할 수 있다. Entity, DTO의 구분 이유 DB단에서의 데이터와 View 데이터의 역할의 분리를 위해 구분한다. Entity는 실제 중요한 데.. 2022. 4. 4.
[코틀린] redis cache 적용 시키기 설치법은 아래에 있어요 2022.02.03 - [맥북 M1] - 맥북으로 도커에 redis 설치하고 실행해보기 build.gradle에 추가 //redis 추가 implementation("org.springframework.boot:spring-boot-starter-data-redis") 메인 어플리케이션에 @EnableCaching을 추가해야 캐시를 쓸 수 있다. @SpringBootApplication @EnableJpaAuditing @EnableCaching class KotlinTestApplication fun main(args: Array) { runApplication(*args) } RedisConfig 추가 직렬화해서 저장할거기 때문에 StringRedisSeriablizer()을 .. 2022. 3. 11.
[코틀린] 생성시간, 수정시간 Auditing으로 자동 적용하기 메인쪽에 @EnableJpaAuditing 추가 @SpringBootApplication @EnableJpaAuditing class KotlinTestApplication fun main(args: Array) { runApplication(*args) } BaseEntity 생성 직렬화가 필요할땐 @Serializable을 적용시켜야 한다. @MappedSuperclass가 꼭 필요 @MappedSuperclass @EntityListeners(AuditingEntityListener::class) abstract class BaseEntity( @CreatedDate var createdDate: LocalDateTime?=null, @LastModifiedDate var modifiedDate: .. 2022. 3. 11.
[코틀린] QueryDSL 초기 설정법 build.gradle 설정은 이렇게 해주세요. 주석에 기본 설정이랑 추가 설정 QueryDsl정도만 보시면 될 거 같습니다. import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("org.springframework.boot") version "2.5.10" id("io.spring.dependency-management") version "1.0.11.RELEASE" kotlin("jvm") version "1.5.32" kotlin("plugin.spring") version "1.5.32" //기본 설정 추가 kotlin("plugin.allopen") version "1.5.32" kotlin("kapt") version "1... 2022. 3. 11.
[MSA] MSA란? Clound Native Architecture 확장 가능한 아키텍쳐 수평적 확장에 유연(스케일 아웃) 시스템의 부하 분산, 가용성 보장 서비스 단위 패키지(컨테이너 기반 패키지) 모니터링 탄력적 아키텍쳐 서비스 생성-통합-배포에 따른 환경 변화에 따른 대응 시간 단축 분할된 구조 Stateless 통신 프로토콜 서비스 변경 자동 감지 사용자 요청에 따른 동적 처리 장애 격리 특정 서비스에 오류가 발생해도 다른 서비스에 영향을 주지 않음 Cloud Native의 구성 요소는? CI/CD CI란: 지속적 통합 통합 서버, 소스 관리,빌드 도구, 테스트 도구 대표적인 CI 도구: 젠킨스, 트래비스 CD란: 지속적 배포 continuous depoloyment 실행되는 파일을 실행 환경에 자동 반영 카나리 배.. 2022. 3. 10.
[코틀린] 인터페이스 사용법 인터페이스 선언 interface MyInterface{ fun bar() fun foo(){ // optional body } } 인터페이스 구현하기 : 뒤에 interface 명만 넣어주면 됩니다. class Child : MyInterface{ override fun foo(){ // body } } 인터페이스 상속 interface Named { val name: String } interface Person : Named { val firstName: String val lastName: String override val name: String get() = "$firstName $lastName" } data class Employee( // implementing 'name' is not .. 2022. 3. 9.
[코틀린] 데이터 클래스 data class 기존 자바는 POJO라는 것이 코드를 많이 차지하고 있다. public class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } 코틀린은 데이터만을 다루는 클래스에 대해서 간편한 문법을 제공한다. data class Person(var name: String, var age: Int, var gender: String) 이렇게 선언만 해도 생성자, Getter,Setter, equals, hashcode,toString까지 알아서 생성한다. 그러나 Data class에는.. 2022. 3. 9.
[코틀린] for문, while문, Iterator 사용법 For문 사용법 일반적인 자바에서 for문을 사용할 수 있다. val cakes = listOf("carrot", "cheese", "chocolate") for (cake in cakes) { // 1 println("Yummy, it's a $cake cake!") } for(i in 0..3) { // 1 print(i) } print(" ") for(i in 0 until 3) { // 2 print(i) } print(" ") for(i in 2..8 step 2) { // 3 print(i) } print(" ") for (i in 3 downTo 0) { // 4 print(i) } print(" ") 결과 값 until은 b) a else b // 1 println(max(99, -42)) 2022. 3. 9.
[코틀린] 코틀린 기초 함수 변수 선언법 Hello World!! fun main(args: Array) { println("Hello, world!!!") } 함수 선언 시: fun을 사용 자바와 달리 이름 뒤에 파라미터 타입 사용 함수를 정의할 수 있다. 배열 처리를 위한 문법은 없다. System.out.println 대신 println으로 간결해졌다. 줄 끝에 ;(세미 콜론)을 붙이지 않아도 된다. 함수를 만들어 보자 fun max(a: Int, b: Int): Int { return if (a > b) a else b } 더 간결하게 만들어 보자 fun max(a: Int, b: Int): Int = if (a > b) a else b 인텔리J 인텔리제이에선 반환 타입을 생략해도 된다. 코틀린이 정적 타입 지정 언어지만 컴파일러가 본문.. 2022. 3. 9.
[코틀린] 코틀린이란 무엇일까? 코틀린이란 자바 플랫폼에서 돌아가는 프로그래밍 언어입니다. 자바와 완벽 호환되어 코틀린으로 많이 넘어간다고 해요. 맛보기 // 데이터 클래스 data class Person( val name: String, val age: Int? = null // 널이 될 수 있는 타입 지정, 디폴트 값 ) // 최상위 함수 fun main(args: Array) { val persons = listOf( Person("Alice"), Person("Bob", age = 29) // 이름 붙은 파라미터 ) val oldest = persons.maxBy { it.age ?: 0 } // 람다 식과 엘비스 연산자 println("The oldest is: $oldest") // 문자열 템플릿 } 코틀린의 특성 코틀린의 .. 2022. 3. 9.
[코틀린] 맥북에 설치하고 스프링 Rest API로 CRUD 해보기 설치 우선적으로 코틀린 설치가 되어 있어야 합니다. 설치는 Homebrew를 이용합니다. //코틀린 설치 brew install kotlin //설치 확인 kotlinc -version 프로젝트 만들기 https://start.spring.io/ 에서 쉽게 만들 수 있어요. postgresql을 사용했지만 다른 mysql이나 mongoDB를 사용하셔도 무방합니다 yml 설정 spring: jpa: hibernate: ddl-auto: create-drop datasource: password: '{password}' username: {username} url: jdbc:postgresql://localhost:5432/{database name} driverClassName: org.postgresql.. 2022. 3. 8.
[A-ger] @ExceptionAdvice로 에러 처리 API 호출하며 생기는 에러에 대한 공통 처리를 해주기 위해 ExceptionAadvice를 선언합니다. @RestControllerAdvice : Exception 발생 시 JSON으로 반환받기 위하여 생성합니다. @ExceptionHandler: Bean에서 발생하는 에러를 잡아 처리합니다. /** * @Class : ExceptionAdvice * @Description : 도메인에 대한 공통 에러 처리 **/ @RestControllerAdvice @RequiredArgsConstructor @Slf4j public class ExceptionAdvice { private final ResponseService responseService; @ExceptionHandler(ExpiredAccess.. 2022. 3. 2.