개요 광주소프트웨어마이스터고등학교의 MSG팀에서 진행한 GAuth라는 프로젝트에서 검색 api를 만들면서 querydsl를 적용한 사례를 오늘 작성해보려고 한다. 작성해보고 나서의 장점에 대해서도 얘기해보겠다. 요구사항 요구사항은 이랬다. 학년, 반, 키워드를 통해 유저를 검색한다. 만약 학년, 반에 0이 들어온다면 전체 검색의 기준을 달고 키워드는 "" 빈 문자열이 들어오면 전체 검색 기준을 단다. 예를 들어 학년 반 키워드에 2, 0, "김" 이 들어오면 2학년 김씨 모두를 검색한다. 첫 구현 처음에는 findAll을 통해서 모든 유저리스트를 가져오고 filter를 통해서 유저를 걸러내었다. class GetAcceptedUsersService( private val userRepository: Us..
전체 글
개발만 하기는 심심하니 기록 또 기록..org.springframework.boot.web.server.PortInUseException: Port 8080 is already in use 인텔리제이 스프링부트로 개발을 하면서 오류를 한번씩은 직면해 봤을 것이다. 원래 되던 애플리케이션이 갑자기 8080포트가 이미 사용중이라고 뜰 때가 있다. 대개 다른 프로세스가 8080 포트를 사용중이라 뜨는 것이다. 인텔리제이를 재 실행했을때 될 수도 있지만 재실행해도 되지 않을때 server.port = 8081 이런식으로 수정할 수도 있지만 그렇고싶지 않을때 8080을 사용중인 프로세스를 찾아 그 프로세스를 종료하는 것이다. lsof -i :8080 8080 포트를 실행중이인 프로세스를 찾고 kill -9 {PID} 그 프로세스의 PID로 프로세스를 ..
kapt kapt는 Kotlin언어를 사용해 annotaion processor를 실행하기 위한 Gradle 플러그인이다. annotation processor annotation processor는 컴파일 타임에 소스 코드에 있는 주석을 읽어들이고, 그에 따라 추가적인 코드를 생성하거나 변형할 수 있다. 이를 통해서 자동화된 코드 생성이나 런타임에서 퍼포먼스 향상 등 다양한 이점을 얻을 수 있다. kapt 플러그인은 kotlin-gradle-plugin 플러그인을 사용하는 코틀린 프로젝트에서만 사용할 수 있으며, kapt를 사용하기 위해서는 먼저 kotlin-kapt 라이브러리를 프로젝트 의존성이 추가해야한다. plugins { id("org.jetbrains.kotlin.jvm") version "1..
스코프 함수 스코프함수란 객체의 범위를 지정하는 데 사용되는 특수한 함수로, 객체 지향 프로그래밍에서 객체의 메서드와 유사하게 작동하지만, 스코프 함수는 객체의 범위를 한정하는 것이 목적이다. 코틀린에서는 다음 5가지의 스코프 함수를 제공한다. let, apply, run, als, with 이 그림을 참고하며 보도록 하자. let let 함수는 객체를 인자로 받아 람다식을 실행하고 결과를 반환한다. 예를 들어, 아래의 코드는 nullableVariable이 null이 아닌 경우 println을 실행한다. nullableVariable?.let { value -> println(value) } let 함수는 null 값 처리에 유용하며, 예를 들어, 아래의 코드는 nullableVariable이 null..
고차 함수 코틀린은 함수형 프로그래밍을 지원하기 위해서 고차 함수를 지원한다. 고차함수는 다른 함수를 매개변수로 받거나 함수를 반환하는 함수를 말한다. 이를 통해 코드의 재사용성과 추상화 수준을 높일 수 있다. 오늘은 고차 함수 중 map, filter, reduce, fold, forEach, any, all, groupBy, sortedBy, zip, flatmap, takeWhile, dropWhile까지 알아보겠다. map() map()은 컬렉션의 각 요소에 대해 주어진 함수를 적용하여 새로운 컬렉션을 반환한다. val numbers = listOf(1, 2, 3, 4, 5) val doubled = numbers.map { it * 2 } // [2, 4, 6, 8, 10] filter() fi..
개요 코틀린 인 액션 책 내용중 람다 파트에서 함수를 인자로 사용했을때, 무명객체를 사용했을때 차이와 여러 중요해보이는 지식들이 많아 글을 정리해보려고 한다. 람다 Lambda 람다는 함수형 프로그래밍에서 함수를 간결하게 표현하는 방법 중 하나다. 보통 함수를 정의하고 호출하는 과정을 생략하고, 함수의 내용만을 직접 표현한다. 람다는 함수형 인터페이스를 구현하는 익명 함수다. 즉, 람다는 함수형 인터페이스를 구현하기 위한 구현체로서, 람다 식을 사용해 구현된 함수형 인터페이스는 일반적인 인터페이스를 구현한 클래스와 같이 사용될 수 있다. 무명 객체 자바에서는 과거 클릭과 같은 이벤트 처리를 위해서는 인자로 무명객체를 생성해 받아야했다. button.setOnClickListener(new View.OnC..
개요 코틀린 인 액션을 읽으면서 sequences를 사용해 연산 성능을 향상시키는 것을 보고 백엔드 서버개발이나 알고리즘 문제를 풀 때 유용하게 사용되지 않을까하는 생각이 들어 개념을 더 잡기위해 공부를 해본다. 지연 계산 Lazy Evaluation 지연 계산은 값이 필요할 때까지 계산을 미루는 방식으로 코드에서 값이 필요한 시점에서 계산을 수행하며, 그 이전에는 계산을 수행하지 않는다. 이는 컴퓨팅 자원을 효율적으로 사용할 수 있도록 도와준다. 만약 모든 계산을 미리 수행한다면, 그 중 일부는 실제로 사용되지 않을 수 있다. 따라서 필요한 계산만 수행한다면 자원을 절약할 수 있다. 지연 계산은 대개 함수형 프로그래밍에서 사용되고, 함수형 프로그래밍에서는 값 자체보다는 값을 생성하는 함수를 중심으로 프..
개요 도메인 주도 설계 공부 3일차 오늘은 애그리거트에 대해서 알아보겠습니다. 애그리거트란? 애그리거트란 관련된 객체들을 모아 하나의 단위로 취급하는 개념으로, 객체지향 프로그래밍에서, 애그리거트는 객체 간의 관계를 정의하는 방법 중 하나로, 논리적으로 관련된 객체들을 그룹화하여 하나의 묶음으로 다룬다. 쉽게 말해 여러 개의 객체를 묶어 하나의 큰 객체로 다루는 것이다. 애그리거트는 일반적으로 Entity, Value로 구성되고, 애그리거트는 엔티티와 밸류의 관계를 나타내는 루트 root 엔티티를 포함하며 루트 엔티티는 애그리거트에 속한 다른 객체들과 관계를 정의한다. 애그리거트는 불변성을 유지하며, 내부 구현을 캡슐화한다. 애그리거트는 DDD 디자인 패턴에서 중요한 개념 중 하나로 애그리거트를 사용하여..
개요 나는 지금 DDD (도메인 주도 설계) 에 중요성을 느끼고 나서 개념들을 공부하기로 시작했고 DDD에 대해서 내가 공부한 내용들을 포스팅했다. 이번엔 바운디드 컨텍스트라는 용어를 공부해 볼 것이다. Bounded-Context 바운디드 컨텍스트는 도메인 주도 설계에서 처음 소개된 개념이다. 바운디드 컨텍스트는 큰 시스템을 여러 개의 작은 컨텍스트로 나누어 각 컨텍스트 내에서 특정한 비즈니스 규칙과 데이터 모델이 적용되는 것을 의미한다. 각 컨텍스트는 독립적으로 설계되고 구현되며, 서로 다른 컨텍스트 간에는 인터페이스를 통해 상호작용한다. 바운디드 컨텍스트는 도메인 안에서 특정한 비즈니스 문제 영역을 나타내며 그 영역 안에서 용어,개념,규칙등이 일관되게 적용된다. 바운디드 컨텍스트는 도메인 모델링을 ..