전체 글 123

Swift 둘러보기

변수와 상수 var name = "Donguk Lee" let birthyear = 1992 `var`는 변수(variable), `let`은 상수(constant)를 의미한다. 자바스크립트 개념과 같다고 보면된다. Swift는 정적 타이핑 언어이다. 따라서 타입을 명시해주어야 하는데 다음과 같이 타입을 명시한다. var name: String = "Donguk Lee" let birthyear: Int = 1992 var height: Float = 179.5 콜론(:)을 붙이고 타입명을 명시하면 된다(타입 어노테이션). 일반적으로 다른 타입간의 연산은 불가능하다. 다만, String의 경우 다음과 같이 문자열을 만들어 사용할 수 있다. String(birthyear) + "년에 태어난 " + name..

App 2023.07.10

[Spring Data JPA] 나머지

Specifications (명세) 도메인 주도 설계(Domain Driven Design - 책)에는 Specification(명세)라는 개념을 소개한다. 스프링 데이터 JPA는 JPA Criteria를 활용해서 이 개념을 사용할 수 있도록 지원해준다. Criteria는 JPQL 작성을 쉽게 도와주는 빌더 클래스다. 자바 코드 기반이므로 컴파일 시점에서 문법 오류를 체크 가능하다. 단, 사용이 복잡하여 실무에서 직관적으로 사용하기 힘들다. 명세를 이해하기 위한 키워드는 술어(predicate)이다. 술어 - 사전 1. (언어학) 서술어 2. (논리학) 논리의 판단·명제에 있어서 주사(主辭)에 대하여 긍정 또는 부정의 입언(立言)을 하는 개념. JPA에서 술어란 다음과 같다. 참 또는 거짓으로 평가 A..

[Spring Data JPA] 확장

사용자 정의 레포지토리 Spring Data JPA만을 사용해 Repository interface를 만들어 사용하게 되면 구현체는 Spring이 생성하므로 편리하지만 몇 가지 기능을 직접 구현하고 싶을 때는 개발자가 interface에 상속받는 `JpaRepository`의 모든 기능을 구현해주어야 하는 애로사항이 생긴다. JPA를 직접 사용하고 싶거나, 스프링 JDBC Temlate을 직접 사용하고 싶거나 MyBatis를 사용하거나 데이터베이스 커넥션을 직접 사용하는 등의 상황에서 구현체를 직접 만들고 싶을 때 사용자 정의 레포지토리를 사용할 수 있다. 사용자 정의 레포지토리 작성 사용자 정의 레포지토리를 만들기 위해서는 다음과 같은 구조로 작성해야한다. 먼저, 사용자 정의 메서드 작성을 위한 int..

[Spring Data JPA] 쿼리

쿼리 메서드 Spring Data JPA에서 지원하는 강력한 기능이다. 개발자가 작성하는 간단한 쿼리들은 단순히 interface에 메서드 이름만 규칙에 맞게 명명하면 사용할 수 있다. public interface MemberRepository extends JpaRepository { public List findByUsernameAndAgeGreaterThan(String username, int age); public List findTop3SomethingBy(); } 실제 구현은 스프링이 해주게 되고 실행 시점에서 오타 혹은 실제 property가 없는 등의 이슈들을 미리 확인해서 안전한 개발을 할 수 있다. 인자가 많아짐에 따라 메서드 명이 길어진다는 단점은 있지만 인자가 적은 경우에는 쿼리..

[Spring Data JPA] 개요

Spring Data JPA Spring Data JPA는 data commons와 data jpa로 이루어져 있다. ORM이므로 DB 종류에 따라 특화된 구현체가 따로 있고 Spring Data JPA는 즉 JPA에 관련된 인터페이스들을 모아놓은 것이다. JPA이외에도 Redis, mongoDB 등의 패키지가 있다. 공통 인터페이스 상속 구조 Spring Data JPA에서는 JpaRepository를 extends하여 공통 인터페이스를 작성할 수 있도록 하는데 이는 org.springframework.data.jpa 패키지에 소속된 인터페이스이다. 또한, JpaRepository가 상속 받는 인터페이스들은 org.springframework.data:spring-data-commons에 소속된 인터페..

[Issue] Gradle implementation 작성시 주의할 점

📌 개요 p6spy 로그 사용해보기 위해서 설정 중 SpringBoot가 메이저 버전 3.0.x이 배포됨에 따라 지원 여부 및 호환 방법을 찾다가 groovy 문법 법을 잘못 작성하면서 발생된 이슈를 정리하였다. Spring Boot 3 지원 이슈 글에서 확인할 수 있듯 정상적으로 마이그레이션이 되어 Spring Boot DataSource Decorator를 스프링 부트 3에서도 사용할 수 있다. Spring Boot 3 Support · Issue #77 · gavlyukovskiy/spring-boot-data-source-decorator It seems like the library is no longer working out of the box with Spring Boot 3. I read..

Troubleshooting 2023.04.21

[JAVA] Map.Entry

Map.Entry 정리 코테 귤 고르기 풀이 도중 각 귤 별 크기에 따른 갯수를 저장할 컬렉션이 필요했고, key-value 쌍으로 저장할 필요성에 따라 HashMap을 사용했다. 하지만 hashMap은 순서가 없으므로 List에 넣어 정렬을 해보려고 했다. 정렬의 기준은 map의 value(귤의 갯수)이었고, Map을 사용한지 오래되어 기억이 안났고, 풀이 후 포스팅에 정리하게 되었다. 정확히는 풀이를 위해 Map을 사용한 것이 아니라 Map을 구성하는 Entry를 순서 정렬이 가능한 리스트에 담아 풀었다. Map.Entry 란 Map.Entry 인터페이스는 Map 인터페이스의 내부 인터페이스(inner interface)를 말한다. Entry는 Key-Value 쌍의 데이터를 정리하여 다루기 위해 내..

Language/Java 2023.04.21

[View] React 공부해보기

React를 실행해보면서 느끼고 이해한 점을 주저리 나열하여 정리해보았습니다. JSX에서 만드는 함수는 return 문에서 HTML 태그처럼 사용되어 위치가 반환된다. JSX는 HTML 태그를 바로 사용할 수 있으며 {} 내부에 javascript 변수를 넣어 사용할 수 있다. react는 state의 변화가 일어나면 전체적으로 렌더링이 다시 된다. 이와 달리 JQuery와 같은 라이브러리는 화면의 어떤 값을 변경할 때 DOM의 정보를 바꾸는 식으로 처리된다. const [변수, 함수] = useState(초기값); 함수를 통해 변수를 변경하며 변수는 `const` 상수이므로 `++`, `--`와 같은 증감연산자를 사용할 수 없다. 이를 통해 react는 실제 값이 변경되는 것이 아니라 화면단에서만 값..

Web Dev/View 2023.04.14