generated from peacepiece7/design-system-template
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(@app/punk-record): 포스트, metadata 추가
- Loading branch information
1 parent
ca336ec
commit f887343
Showing
22 changed files
with
434 additions
and
65 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
{ | ||
"Create MDX": { | ||
"prefix": "create-mdx", | ||
"body": [ | ||
"export const METADATA = {", | ||
" title: \"blog | ${TM_FILENAME_BASE}\"", | ||
" description: \"${TM_FILENAME_BASE}\",", | ||
" date: \"\",", | ||
" tags: [],", | ||
" authors: \"[email protected]\"" | ||
"}", | ||
"import { Detail } from \"@/components/mdx/detail\"", | ||
"import { MDXImage, MDXFlex } from \"@/components/mdx/image\"", | ||
"import { Kbd } from \"@repo/ui-shadcn/ui/typography/kdb\"" | ||
"\n", | ||
"# ${TM_FILENAME_BASE}", | ||
"$0" | ||
], | ||
}, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,15 @@ | ||
import { Kbd } from "@repo/ui-shadcn/ui/typography/kdb" | ||
export const METADATA = { | ||
title: "blog | 2. Spring boot 이슈 정리" | ||
description: "2. Spring boot 이슈 정리", | ||
date: "", | ||
tags: [], | ||
authors: "[email protected]" | ||
} | ||
import { Detail } from "@/components/mdx/detail" | ||
import { MDXImage, MDXFlex } from "@/components/mdx/image" | ||
import { Kbd } from "@repo/ui-shadcn/ui/typography/kdb" | ||
|
||
# Spring Boot 이슈 정리 | ||
# 2. Spring boot 이슈 정리 | ||
|
||
## IntelliJ에서 JVM 버전 변경이 안되는 이슈 | ||
|
||
|
@@ -53,12 +60,9 @@ gradlew -version | |
|
||
### 방법 1 | ||
|
||
UTF-8이 기본인데 ms는 ms949 포멧이라서 한글이 깨짐 | ||
|
||
UTF-8 3byte, ms949나 euc-kr은 2byte 로 한글을 표현해서 깨짐 | ||
|
||
ctrl + p -> 전체 -> file encoding 검색 | ||
|
||
UTF-8이 기본인데 ms는 ms949 포멧이라서 한글이 깨진다\ | ||
UTF-8 3byte, ms949나 euc-kr은 2byte 로 한글을 표현해서 깨진다.\ | ||
ctrl + p -> 전체 -> file encoding 검색\ | ||
global encoding, project encoding utf-8로 변경 | ||
|
||
### 방법 2 | ||
|
@@ -96,3 +100,43 @@ public class UserRequest { | |
private Boolean isKorean; // matched | ||
} | ||
``` | ||
|
||
## Using @EqualsAndHashCode for JPA entities is not recommended. It can cause severe performance and memory consumption issues. | ||
|
||
`@Data`, `@EqualsAndHashCode` 어노테이션 모두 메모리 소비 이슈로 추천하지 않는 경고가 출력된다.\ | ||
다음 코드처럼 변경하길 권한다. | ||
|
||
```java | ||
@Getter | ||
@Entity | ||
@NoArgsConstructor(access = PROTECTED) | ||
public class Users { | ||
|
||
/// ... 생략 | ||
|
||
@Override | ||
public boolean equals(Object o) { | ||
if (this == o) { | ||
return true; | ||
} | ||
if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) { | ||
return false; | ||
} | ||
Users that = (Users) o; | ||
return id != null && Objects.equals(id, that.id); | ||
} | ||
|
||
@Override | ||
public int hashCode() { | ||
return getClass().hashCode(); | ||
} | ||
|
||
} | ||
``` | ||
|
||
추가로 | ||
|
||
`@EqualsAndHashCode(callSuper = true)` 어노테이션은 Equal, HashCode 오버라이드해준다.\ | ||
callSuper = true 일 경우 부모 클래스의 속성도 포함한다. | ||
|
||
[Warnings when using @EqualsAndHashCode for JPA entities](https://youtrack.jetbrains.com/issue/IDEA-279243/Warnings-when-using-EqualsAndHashCode-for-JPA-entities) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,10 @@ | ||
import { Kbd } from "@repo/ui-shadcn/ui/typography/kdb" | ||
export const METADATA = { | ||
title: "blog | 3. 자바 퍼시스턴스와 jpa" | ||
description: "3. 자바 퍼시스턴스와 jpa", | ||
date: "", | ||
tags: [], | ||
authors: "[email protected]" | ||
} | ||
import { Detail } from "@/components/mdx/detail" | ||
import { MDXImage, MDXFlex } from "@/components/mdx/image" | ||
|
||
|
@@ -10,10 +16,8 @@ import { MDXImage, MDXFlex } from "@/components/mdx/image" | |
|
||
## 그리고 jpa | ||
|
||
jpa는 자바 퍼시스턴스의 구현체이다. | ||
|
||
spring boot에서 db와 연동할 때 `JpaRepository`를 확장하는 인터페이스를 정의하면 jpa가 자동으로 구현체를 생성해준다. | ||
|
||
jpa는 자바 퍼시스턴스의 구현체이다.\ | ||
spring boot에서 db와 연동할 때 `JpaRepository`를 확장하는 인터페이스를 정의하면 jpa가 자동으로 구현체를 생성해준다.\ | ||
이떄 구현체에는 기본적인 CRUD 메소드가 포함되어 있고, 규칙에 맞게 메소드를 작성하면 jpa가 알아서 쿼리를 생성해준다. | ||
|
||
```java | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,15 @@ | ||
import { Kbd } from "@repo/ui-shadcn/ui/typography/kdb" | ||
export const METADATA = { | ||
title: "blog | 4. 멀티 모듈 설정하기" | ||
description: "4. 멀티 모듈 설정하기", | ||
date: "", | ||
tags: [], | ||
authors: "[email protected]" | ||
} | ||
import { Detail } from "@/components/mdx/detail" | ||
import { MDXImage, MDXFlex } from "@/components/mdx/image" | ||
import { Kbd } from "@repo/ui-shadcn/ui/typography/kdb" | ||
|
||
# 멀티 모듈 설정 | ||
|
||
## 프로젝트 생성 | ||
# 멀티 모듈 설정하기 | ||
|
||
alt + f -> alt + n -> alt + j | ||
![img](/images/multi_module_1.png) | ||
|
@@ -45,24 +50,27 @@ allprojects { | |
|
||
api 모듈에 db를 의존성으로 추가 | ||
|
||
아래사진처럼 compileClasspath project.db 추가 된 것을 확인한다. | ||
아래사진처럼 compileClassPath project.db 추가 된 것을 확인한다. | ||
|
||
![img](/images/multi_module_4.png) | ||
|
||
## build.gradle의 boorJar, jar | ||
|
||
bootJar:\ | ||
spring boot 실행 파일을 만들어준다. | ||
|
||
```txt | ||
bootJar { | ||
enabled = true // default | ||
} | ||
``` | ||
|
||
빌드시 build/libs/<>-SNAPSHOT.jar 파일이 생성되는데, `java -jar <>-SNAPSHOT.jar` 로 실행해보면 intelliJ에서 ctrl + shift + f10으로 실행한 것과 동일하게 동작한다. | ||
|
||
jar:\ | ||
요것도 true로 하면 jar 파일을 만들어준다.\ | ||
boorJar랑 다른점은 실행 파일은 아니고 클래스를 묶어주는 역할이다. | ||
|
||
```txt | ||
jar { | ||
enabled = true // default | ||
|
@@ -83,3 +91,22 @@ gradle 아이콘을 열면 build 스크립트들이 있다. | |
다만 intelliJ에서 설정한 jdk 버전이 멀티 모듈이나, 로컬에 설치된 jdk와 버전이 다르면 cli로 해당 명령어를 입력하면 에러가 발생할 것이다. | ||
|
||
gradlew는 jdk 버전을 %JAVA_HOME% 변수에서 찾는데 gradlew을 수동으로 돌릴 떈 요거를 수정해줘야한다. | ||
|
||
## 멀티모듈 Bean 등록 문제 | ||
|
||
Spring Boot 는 `@SpringBootApplication` 이 있는 패키지와 그 하위 패키지를 기본으로 스캔하여 빈으로 등록한다. | ||
|
||
`@SpringBootApplication`의 스캔 규칙으로 패키지 명이 동일하면 멀티 모듈에서도 자동으로 스캔되는데\ | ||
그렇기에 org.delivery.db.~.java 파일과 org.delivery.api.~.java 파일은 동일한 컨테이너에 빈으로 등록 할 수 없다. | ||
|
||
해결 방법으로 패키지명을 동일하게 바꿔주거나\ | ||
다음과 같이 설정해줄 수 있다. | ||
|
||
```java | ||
@Configuration | ||
@EntityScan(basePackages = "org.delivery.db") | ||
@EnableJpaRepositories(basePackages = "org.delivery.db") | ||
public class JpaConfig { | ||
|
||
} | ||
``` |
46 changes: 46 additions & 0 deletions
46
.../posts/@contents/frameworks/spring_boot/[pageId]/5. ObjectMapper 자주 사용하는 옵션.mdx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
export const METADATA = { | ||
title: "blog | 5. ObjectMapper 자주 사용하는 옵션" | ||
description: "5. ObjectMapper 자주 사용하는 옵션", | ||
date: "", | ||
tags: [], | ||
authors: "[email protected]" | ||
} | ||
import { Detail } from "@/components/mdx/detail" | ||
import { MDXImage, MDXFlex } from "@/components/mdx/image" | ||
|
||
# ObjectMapper 자주 사용하는 옵션 | ||
|
||
```java | ||
// object mapper 를 안만들면 스프링에서 default 로 하나 만들어 줌 만들었으니까 내것으로 적용될 것 | ||
@Configuration | ||
public class ObjectMapperConfig { | ||
|
||
@Bean | ||
public ObjectMapper objectMapper() { | ||
// 존슨을 자바 객체로 변환하거나, 자바 객체를 존슨으로 변환하는 데 사용한다. | ||
var objectMapper = new ObjectMapper(); | ||
|
||
// jdk 8 버전 이후에 나온 클래스, 기능을 Jackson 이 처라할 수 있도록 해준다. | ||
objectMapper.registerModule(new Jdk8Module()); | ||
|
||
// Java 8의 java.time.LocalDate, java.time.LocalDateTime 등을 Jackson 이 처리할 수 있도록 해준다. | ||
objectMapper.registerModule(new JavaTimeModule()); | ||
|
||
// JSON 데이터에 포함된 예상하지 못한 필드를 처리하는 방식을 지정한다. | ||
// 정의되지 않은 필드를 만나면 Exception 발생이 default, false 시 이를 무시하고 de/serialization 수행 | ||
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); | ||
|
||
// Getter 가 없는 빈 클래스를 직렬화 시 예외 발생이 default, false 시 이를 무시하고 de/serialization 수행, 모든 필드가 null 일 경우 사용됨 | ||
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); // | ||
|
||
// Jackson 은 TimeStamp 로 직렬화 하는게 default, disable 시 ISO 8601 형식으로 직렬화 됨, LocalDate, LocalDateTime 을 가독성 좋게 변경할 떄 사용 | ||
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); | ||
|
||
// Java 객채 필드의 이름을 JSON 필드 이름으로 변환할 떄 Snake Case 스타일 지정 | ||
// 요거 있으면 @JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class) 안붙여도 됨 | ||
objectMapper.setPropertyNamingStrategy(new PropertyNamingStrategies.SnakeCaseStrategy()); | ||
|
||
return objectMapper; | ||
} | ||
} | ||
``` |
Oops, something went wrong.