전체 글 120

코틀린 범위 지정 함수(apply, run, with, let, also)

정의 수신 객체 지정 람다함수 특정 객체에 대한 작업을 블록 안에 넣어 실행할 수 있도록 하는 함수 이름에 따라서 범위 지정이 달라진다. apply, run, with, let, also this: 수신 객체를 람다의 수신 객체로 전달하기 때문에 lt: 수신객체를 람다의 파라미터로 접근하기 때문에 명시하지 않거나 this로 접근 lt 로 접근 수신 객체 자체 apply also Block의 마지막 줄 run, with let apply apply는 수신 객체 내부 프로퍼티를 변경한 다음 수신 객체 자체를 반환 apply 블록 안에서는 오직 프로퍼티만 사용 public inline fun T.apply(block: T.() -> Unit): T class Customer(val name: String) {..

언어/코틀린 2022.07.18

2장 - 코틀린 기초(문법들 유용하게 사용하기)

2.1 코틀린 널 허용 타입 사용하기 String? val 변수의 널 허용성 검사 val p = Person("aa", null, "bb") if (p.middle != null) { // p.middle의 타입을 String? 대신 String으로 인식 -> 영리한 타입 변환 수행 val middleNameLength: Int = p.middle.length } p가 한번 설정되면 그 값을 바꿀 수 없는 val 키워드로 선언됐기 때문에 var p1 = Person("aa", null, "bb") if (p1.middle != null) { // val middleNameLength = p.middle.length val middleNameLength = p1.middle!!.length } var이기 ..

GC에 대해서 좀 더 살펴보자

자바의 메모리 관리 방법! 가비지 컬렉션 (Garbage Collection) [ 자바 기초 강의 ] 위의 유튜브를 참고했습니다. 가비지 컬렉션? 자바의 메모리 관리 기법으로 애플리케이션이 동적으로 할당했던 메모리 영역중 더이상 사용하지 않는 영역을 정리하는 기능 GC는 heap 메모리에서 활동하며 JVM에서 GC의 스케줄링을 담당하며 개발자가 직접 관여하지 않아도 사용하지 않는 메모리 제거해주는 역할 stop the world GC를 수행하기 위해 JVM이 멈추는 현상 GC 작동하는 동안 GC 관련 Thread를 제외한 모든 thread는 멈춤 일반적으로 ‘튜닝'이라는 것은 이 시간을 최소화하는 것을 의미 GC의 종류 serial , parallel, cms, g1, z GC등이 있다. GC의 원리 G..

언어/자바 2022.07.05

1장 - 코틀린 설치와 실행

명령줄에서 코틀린 코드를 컴파일 하고 실행 kotlinc-jvm kotlin 명령어가 있다. jvm용 코틀린 sdk에는 코틀린 컴파일 명령어 kotlinc-jvm과 코틀린 실행 명령어 kotlin이 포함되어 있음 kotlinc 는 kotlinc-jvm의 별칭이다. Kotlin 또한 Java와 같이 JVM이 필요하다. Java를 공부할 때 정리해놓은 글입니다. 좀 더 세부적으로 써보자. GC에 대해서? https://balldev.tistory.com/16 자바의 JVM메모리 구조 프로그램 메모리를 관리하고 최적화해준다. 자바 바이트코드(.class)를 운영체제에 맞는 시스템 명령어로 번역하여 실행 JVM은 자바 가상 머신으로 자바 프로그램을 실행시키기 위해 반드시 실행 balldev.tistory.com..

stub, mock, spy 비교

배경 솔직히 테스트 코드를 짜오면서 정확한 차이들을 모르고 있었다는 생각이 들어서 정리를 해보려고 합니다. 원문 https://martinfowler.com/articles/mocksArentStubs.html Mocks Aren't Stubs Explaining the difference between Mock Objects and Stubs (together with other forms of Test Double). Also the difference between classical and mockist styles of unit testing. martinfowler.com test double Meszaros는 테스트 목적으로 실제 개체 대신 사용되는 모든 종류의 가상 개체에 대한 일반 용어로 ..

converter를 만들지 않고 jpa mysql에서 json 사용하기

배경 컬럼에 json을 넣을일이 많지는 않지만 가끔 생길수도 있다. 근데 jpa에서 쓰려면 Jacson + 직렬화가 필요하다. 제네릭 converter를 사용해서 직렬화 / 역직렬화 하는 converter을 사용해도 되지만 더 간단한 방법이 있다. 일단 이거를 추가해줍니다. // json -> jpa implementation("com.vladmihalcea:hibernate-types-52:2.16.2") 엔티티 @Entity @AllArgsConstructor @NoArgsConstructor @Builder @Getter @TypeDef(name = "json", typeClass = JsonType.class). -> 이거를 추가해주고 public class Member extends BaseEn..

fetchJoin과 pagination을 같이 사용할 때

배경 페이징을 하려고 하는데 fetchJoin하고 같이 사용할 경우 정확히 말하면 fetchJoin하고 limit을 같이 사용할 경우 firstResult/maxResults specified with collection fetch; applying in memory 이러한 오류는 아니지만 경고 메세지를 보게 됩니다. - 즉 실행도 되고 데이터 양이 적을 때는 모르지만 나중에 문제 발생 저도 데이터를 가지고 테스트 할 때는 경고를 못보고 넘어갔는데 테스트 코드를 짜면서 계속 실패해서 찾게 되었습니다. (테스트 코드의 중요성) 문제 1개의 board에 여러개의 hashTag가 있음 이전에 작성한 코드 override fun findBySearchingPagination( pageable: Pageable,..

MultipleBagFetchException 발생시 - fetchJoin 여러개 썼을 때

JPA에서 N + 1 문제를 해결하려고 fetchJoin 을 사용하게 됩니다. 이 때 하나의 entity에서 1:N이 여러개 일때 fetchJoin을 여러번 사용했는데 MultipleBagFetchException이 발생하게 됩니다. 즉, 2개 이상의 OneToMany 자식 테이블에 Fetch Join을 선언했을때 발생 OneToOne, ManyToOne과 같이 단일 관계의 자식 테이블에는 Fetch Join을 써도 됩니다 @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter public class Record extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENT..

@Transactional의 정의, 같은 클래스에서 호출, 예외처리

트랜잭션이 무엇인가? 그리고 특징은? @Transaction을 같은 클래스에서 호출할 경우? @Transaction이 CheckedException, UnCheckedException에서 어떻게 동작하는지? 트랜잭션이란 무엇인가? 트랜잭션이란 데이터 베이스의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산들을 의미 상태변경 - insert, update, select, delete 트랜잭션의 특징(ACID) 원자성(Atomicity) 트랜잭션이 데이터베이스에 모두 반영되던가 전혀 반영이 되지 않아야한다. 일관성(Consistency) 트랜잭션 처리 결과가 항상 일관성 있어야한다. 독립성(Isolation) 둘 이상의 트랜잭션이 동시에 실행되고 있을 경우 다른 트랜잭션의 연산에 끼어들 수 없다. 지..

Spring Boot에서 GraphQl 적용해보기

블로그에 쓸 기능들 정리한 깃헙입니다 https://github.com/YuSunjo/spring-boot-example GitHub - YuSunjo/spring-boot-example: spring boot 간단한 예제 모음(블로그 용도) - s3이미지 업로드, nfs를 통 spring boot 간단한 예제 모음(블로그 용도) - s3이미지 업로드, nfs를 통한 이미지 업로드, FCM, Feign-Client, GraphQl - GitHub - YuSunjo/spring-boot-example: spring boot 간단한 예제 모음(블로그 용도) - s3이미지 업로 github.com 먼저 graphql을 사용하기에 앞서 무엇이고 왜 사용해야하는지 알아보겠습니다. GraphQl이란? GraphQL..