๊ฐœ๋ฐœ์ž HOON
๐Ÿ› HOON DEVLog
๊ฐœ๋ฐœ์ž HOON
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๐Ÿ˜Ž ์ „์ฒด ์นดํ…Œ๊ณ ๋ฆฌ (137)
    • ๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„ (7)
    • ๐Ÿฆ” ์ทจ์—…์ค€๋น„ ๊ธฐ๋ก (7)
    • โ˜• ์ž๋ฐ” : JAVA (5)
    • ๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS (80)
    • ๐ŸŒฑ ๋ฐฑ์—”๋“œ : Backend (13)
    • ๐Ÿงช ์ปดํ“จํ„ฐ๊ณผํ•™ : CS (11)
    • ๐Ÿ—‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค : DB (1)
    • ๐Ÿƒ‍โ™‚๏ธ DEVLOG (8)
    • โš™๏ธ Trouble Shooting (5)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • GitHub
  • Resume

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
๊ฐœ๋ฐœ์ž HOON

๐Ÿ› HOON DEVLog

[DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (4) createdAt๊ณผ updatedAt, JPA AttributeConverter
๐Ÿƒ‍โ™‚๏ธ DEVLOG

[DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (4) createdAt๊ณผ updatedAt, JPA AttributeConverter

2022. 12. 27. 10:47

 

๐Ÿ˜Ž 0. ์ด์ „ ๊ธ€

 

[DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (3) DTO์— ๋”ฐ๋ฅธ ์‘๋‹ต ์ƒ์„ฑ ํด๋ž˜์Šค ๋งŒ

๐Ÿ˜Ž 0. ์ด์ „ ๊ธ€ [DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (1) ๋ณ€์ˆ˜ ์ž‘๋ช…, Optional, Enum ํ™œ์šฉ ๐Ÿ 0. ์„œ๋ก  ์กธ์—…์ž‘ํ’ˆ์œผ๋กœ ํƒˆ๋ชจ ์ง„๋‹จ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ธ '์ œ๋ฐœ๋ชจ๋ฐœ'์„ ๊ฐœ๋ฐœํ•˜๊ณ , 'ํ•ด๋‹น ํ”Œ

hoons-dev.tistory.com

 

 

 ๐Ÿค” 1. createdAt๊ณผ updatedAt

 

๋ชจ๋“  ์—”ํ‹ฐํ‹ฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ createdAt๊ณผ updatedAt์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ '์ƒ์„ฑ๋œ ์‹œ๊ฐ„ ์ •๋ณด'์™€ '์ˆ˜์ •๋œ ์‹œ๊ฐ„ ์ •๋ณด'๋Š” ์—ฌ๋Ÿฌ๋ชจ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ๋˜ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ @CreatedDate, @LastModifiedDate๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ ์‹œ๊ฐ„ ์ •๋ณด, ์ˆ˜์ •๋œ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ์ž๋™์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class JBMBCommonTimeEntity {

    @Column(name = "created_at")
    @CreatedDate
    private LocalDateTime createdAt;

    @Column(name = "updated_at")
    @LastModifiedDate
    private LocalDateTime updatedAt;
}

 

๋Œ€๋ถ€๋ถ„์˜ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ•„๋“œ๋“ค์ด๋ฏ€๋กœ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑํ•˜์—ฌ ์ด ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ์ƒ์†๋ฐ›๋Š” ํ˜•์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

abstract class : ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์‹œ๊ฐ„ ์ •๋ณด๋Š”, ์ž๊ธฐ ์ž์‹ ๋งŒ์œผ๋กœ๋Š” ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ค๋กœ์ง€ ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ์— ์ƒ์†ํ•˜๋Š” ๊ฒƒ์œผ๋กœ attribute๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋„๋ก ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

@MappedSuperclass : ๋‹ค๋ฅธ JPA Entity ํด๋ž˜์Šค๋“ค์ด ์ด ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์œผ๋ฉด, ํ•„๋“œ์ธ createdAt๊ณผ updatedAt์„ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค.

@EntityListeners(AuditingEntityLIstener.class) : JPA Entity ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ํŠน์ • ๋กœ์ง์„ ์‹คํ–‰ ๊ฐ€๋Šฅ

 

์ด๋ ‡๊ฒŒ ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํด๋ž˜์Šค์— @EnableJpaAuditing ์–ด๋…ธํ…Œ์ด์…˜๊นŒ์ง€ ๋‹ฌ์•„์ค˜์•ผ, JPA Auditing๊ธฐ๋Šฅ์ด ํ™œ์„ฑํ™”๋˜์–ด ์ž๋™์œผ๋กœ createdAt๊ณผ updatedAt์ด ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ž‘์„ฑํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. JBMBDiagnosisInfoEntity๋Š” JBMBCommonTimeEntity๋ฅผ ์ƒ์†๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

๋นŒ๋” ํŒจํ„ด์„ ํ†ตํ•ด JBMBDiagnosisInfoEntity๋ฅผ ์ƒ์„ฑํ•˜๊ณ , createdAt๊ณผ updatedAt์€ ์‚ฝ์ž…ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

repository๋ฅผ ํ†ตํ•ด save๋ฅผ ํ•œ ํ›„, createdAt๊ณผ updatedAt์˜ ๊ฐ’์ด notNull์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋กœ์ง์œผ๋กœ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ๋๋‚˜๊ณ  ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋‚จ์•„์žˆ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด @Transactional์„ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋Š” ์„ฑ๊ณต์ ์ž…๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ์š”์†Œ๋ฅผ ํ”„๋ฆฐํŠธ ํ–ˆ์„ ๋•Œ๋„ saveํ•˜๊ธฐ ์ „๊ณผ ํ›„๋กœ null -> not null ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

2022-12-27 10:40:38.303  INFO 2597 --- [    Test worker] o.m.j.i.logging.ProtocolLoggingProxy  : conn=4266(M) - 3.634 ms - Query: 
insert into jbmb_diagnosis_info (created_at, updated_at, diagnosis_state, diagnosis_type, user_num) 
values (?, ?, ?, ?, ?), parameters ['2022-12-27 10:40:38.285','2022-12-27 10:40:38.285','OPEN',false,0]

๋กœ๊ทธ์—์„œ๋„ insert๋ฌธ์ด ๋“ค์–ด๊ฐˆ ๋•Œ, createdAt๊ณผ updatedAt๊ฐ’์ด ์ƒ์„ฑ๋˜์–ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿค” 2. Enum๊ณผ JPA AttributeConverter

 

๊ธฐ์กด DB๋ฅผ ์šฐ์„  ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

-- jbmb.diagnosis_log definition

CREATE TABLE `diagnosis_log` (
  `diagnosis_id` int NOT NULL AUTO_INCREMENT,
  `active` tinyint NOT NULL,
  `created_at` datetime NOT NULL,
  `user_num` int NOT NULL,
  PRIMARY KEY (`diagnosis_id`)
);

 

'์ง„๋‹จ ์•„์ด๋””'๋ฅผ PK๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ง„๋‹จ ๊ธฐ๋ก ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค.

์ง€๋‚œ ๊ธ€์—์„œ, active์— ๋Œ€ํ•œ column์„ state๋กœ ๋ณ€๊ฒฝํ•˜๊ฒ ๋‹ค๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ, ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ์ˆ˜์ •ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ, ํ…Œ์ด๋ธ” ๋‚ด์— ์ƒ์„ฑ๋œ ์‹œ์ ์„ ํ‘œ์‹œํ•˜๋Š” 'created_at'์€ ์žˆ์ง€๋งŒ, ์ˆ˜์ •๋œ ์‹œ์ ์ธ 'updated_at'์€ ์—†์–ด ๋ฐฉ๊ธˆ ๋งŒ๋“  ๊ณตํ†ต ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์ถ”๊ฐ€ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

 

ํ…Œ์ด๋ธ” ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ , ์ƒˆ๋กœ์šด ํ…Œ์ด๋ธ”์„ ๊ตฌ์„ฑํ•œ ๋’ค ๋ฐฑ์—”๋“œ์—์„œ v1 ํ…Œ์ด๋ธ”๊ณผ v2 ํ…Œ์ด๋ธ” ๋ชจ๋‘ ๊ฐ’์ด ์ฑ„์›Œ์ง€๋„๋ก ์„ค๊ณ„ํ•ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ API ๊ต์ฒด ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋”๋ผ๋„ ๋ฌธ์ œ ์—†์ด ์ง„ํ–‰ํ•ด ๋ณผ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

 

๋˜ ์ง„๋‹จ ์œ ํ˜•์„ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ๋Š” '์—ดํ™”์ƒ' ์ง„๋‹จ์— ๋Œ€ํ•ด์„œ๋„ ๊ตฌ๋ถ„์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๋‹ˆ ๋ง์ด์ฃ .

๋ณ€๊ฒฝํ•  ์˜ˆ์ƒ ํ…Œ์ด๋ธ”์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

-- create new table : jbmb_diagnosis_info

create table jbmb_diagnosis_info(
	diagnosis_id long not null auto_increment,
	user_id long not null,
	diagnosis_type bit not null,
	diagnosis_state VARCHAR(50) not null,
	
	created_at timestamp not null default current_timestamp,
	updated_at timestamp not null default current_timestamp on update current_timestamp,
	
	primary key(diagnosis_id)
);

DB ์•ˆ์—๋Š” ์ง„๋‹จ ํƒ€์ž…๊ณผ ์ƒํƒœ๋Š” ํ…์ŠคํŠธ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€์•ผ ๊ตฌ๋ถ„ํ•˜๊ธฐ๊ฐ€ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, diagnosis_type์ด 1์ด๊ฑฐ๋‚˜ 0์ด๋ผ๋ฉด, ์ด๊ฒƒ์„ ์ •๋ฆฌํ•ด๋†“์€ ๋ฌธ์„œ๊ฐ€ ์—†๋‹ค๋ฉด 1์ด ๋ฌด์—‡์„ ๋œปํ•˜๋Š”์ง€, 0์„ ๋ฌด์—‡์„ ๋œปํ•˜๋Š”์ง€ ์•Œ ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

 

๋ฐฑ์—”๋“œ ์—”ํ‹ฐํ‹ฐ์—์„œ๋Š” ์กฐ๊ธˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. DB์—์„œ๋Š” ํ•ด๋‹น ํƒ€์ž… ํ˜น์€ ์ƒํƒœ๋ฅผ ํ…์ŠคํŠธ์˜ ํ˜•ํƒœ๋กœ ์ €์žฅํ–ˆ์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ Enum์œผ๋กœ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ DB์—์„œ ์—”ํ‹ฐํ‹ฐ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋‹ฌ๋  ๋•Œ๋Š” VARCHAR ๊ฐ’์ด Enum์œผ๋กœ, ์—”ํ‹ฐํ‹ฐ์—์„œ DB์— ์ €์žฅ๋  ๋•Œ์—๋Š” Enum์—์„œ VARCHAR๋กœ ๋ณ€ํ™˜์ด ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—ญํ• ์„ ๋„์™€์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ AttributeConverter์ž…๋‹ˆ๋‹ค.

 

@Enumerated์™€ AttributeConverter์˜ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜์˜ ๊ธ€์„ ์ฐธ์กฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

[Spring JPA] @Enumerated์™€ AttributeConverter

๐Ÿ 0. ์„œ๋ก  ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด, ๋ฐฑ์—”๋“œ์—์„œ๋Š” ์ƒ์„ธํ•œ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ํ•ต์‹ฌ์ ์œผ๋กœ ๋ถ„๋ณ„๊ฐ€๋Šฅํ•œ ํŒŒํŠธ๋งŒ ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋„ฃ

hoons-dev.tistory.com

 

/* JBMBDiagnosisStateIdentifierConverter.java */
public class JBMBDiagnosisStateIdentifierConverter implements AttributeConverter<JBMBDiagnosisStateIdentifier, String> {

    @Override
    public String convertToDatabaseColumn(JBMBDiagnosisStateIdentifier attribute) {
        return attribute.name();
    }

    @Override
    public JBMBDiagnosisStateIdentifier convertToEntityAttribute(String dbData) {
        return JBMBDiagnosisStateIdentifier.valueOf(dbData);
    }

}

/* JBMBDiagnosisTypeIdentifierConverter.java */
public class JBMBDiagnosisTypeIdentifierConverter implements AttributeConverter<JBMBDiagnosisTypeIdentifier, Boolean> {

    @Override
    public Boolean convertToDatabaseColumn(JBMBDiagnosisTypeIdentifier attribute) {
        return attribute.isThermal();
    }

    @Override
    public JBMBDiagnosisTypeIdentifier convertToEntityAttribute(Boolean dbData) {
        return JBMBDiagnosisTypeIdentifier.getJBMBDiagnosisTypeWhetherIsThermal(dbData);
    }
}

 

@Data
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Table(name = "jbmb_diagnosis_info")
public class JBMBDiagnosisInfoEntity extends JBMBCommonTimeEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "diagnosis_id")
    /* ์ง„๋‹จ ์•„์ด๋”” */
    private Long diagnosisID;

    @Column(name = "diagnosis_type", nullable = false)
    @Convert(converter = JBMBDiagnosisTypeIdentifierConverter.class)
    /* ์ง„๋‹จ ์œ ํ˜• (๊ธฐ๋ณธ / ์—ดํ™”์ƒ) */
    private JBMBDiagnosisTypeIdentifier diagnosisType;

    @Column(name = "diagnosis_state", nullable = false)
    @Convert(converter = JBMBDiagnosisStateIdentifierConverter.class)
    /* ์ง„๋‹จ ์ƒํƒœ (OPEN~CLOSE) */
    private JBMBDiagnosisStateIdentifier diagnosisState;

    @Column(name = "user_num", nullable = false)
    /* ์‚ฌ์šฉ์ž ์‹๋ณ„ ๋ฒˆํ˜ธ */
    private int userNum;

}

 

๋‹ค์Œ์€ ์‹คํ–‰๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

2022-12-26 20:09:06.121  INFO 30282 --- [  restartedMain] o.m.j.i.logging.ProtocolLoggingProxy     : conn=4057(M) - 160.911 ms - Query: 
    create table jbmb_diagnosis_info (
       diagnosis_id bigint not null auto_increment,
        created_at datetime(6),
        updated_at datetime(6),
        diagnosis_state varchar(255) not null,
        diagnosis_type bit not null,
        user_num integer not null,
        primary key (diagnosis_id)
    ) engine=InnoDB

diagnosis_state๋Š” ๋ฌธ์ž์—ด์ด ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— varchar๋กœ, diagnosis_type์€ db์—๋Š” boolean ๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— bit๋กœ ์ƒ์„ฑ๋œ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋™์ผ์กฐ๊ฑด (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿƒโ€โ™‚๏ธ DEVLOG' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[DEVLOG] JUnit5๋ฅผ ํ™œ์šฉํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ๊ณผ @DataJpaTest ์‚ฌ์šฉ์‹œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ  (1) 2023.04.12
[DEVLOG] if(kakao) dev 2022 ๊ฐœ๋ฐœ์ž ์ปจํผ๋Ÿฐ์Šค ํ›„๊ธฐ - 1. ISFP์˜ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ๊ฐœ์„  ๊ฒฝํ—˜  (1) 2023.01.01
[DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (3) DTO์— ๋”ฐ๋ฅธ ์‘๋‹ต ์ƒ์„ฑ ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ  (0) 2022.12.16
[DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (2) ๊ณตํ†ตํ•„๋“œ๊ฐ€ ๋งŽ์€ DTO ๋งŒ๋“ค๊ธฐ  (0) 2022.12.16
[DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (1) ๋ณ€์ˆ˜ ์ž‘๋ช…, Optional, Enum ํ™œ์šฉ  (0) 2022.12.15
    '๐Ÿƒ‍โ™‚๏ธ DEVLOG' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [DEVLOG] JUnit5๋ฅผ ํ™œ์šฉํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ๊ณผ @DataJpaTest ์‚ฌ์šฉ์‹œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ
    • [DEVLOG] if(kakao) dev 2022 ๊ฐœ๋ฐœ์ž ์ปจํผ๋Ÿฐ์Šค ํ›„๊ธฐ - 1. ISFP์˜ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ๊ฐœ์„  ๊ฒฝํ—˜
    • [DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (3) DTO์— ๋”ฐ๋ฅธ ์‘๋‹ต ์ƒ์„ฑ ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ
    • [DEVLOG] ์šฐ๋‹นํƒ•ํƒ• ์ œ๋ฐœ๋ชจ๋ฐœ v2 ๊ฐœ๋ฐœ๊ธฐ - ํƒˆ๋ชจ ์ง„๋‹จ API ์ˆ˜์ •ํ•˜๊ธฐ (2) ๊ณตํ†ตํ•„๋“œ๊ฐ€ ๋งŽ์€ DTO ๋งŒ๋“ค๊ธฐ
    ๊ฐœ๋ฐœ์ž HOON
    ๊ฐœ๋ฐœ์ž HOON
    ์ข‹์€ ๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ก์„ ๋ชจ์•˜์Šต๋‹ˆ๋‹ค. # ์ฃผ๋‹ˆ์–ด # ๋ฐฑ์—”๋“œ # ๊ฐœ๋ฐœ์ž

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”