[๊ฐœ๋ฐœ] ๊ธˆ์œต ์ปค๋ฎค๋‹ˆํ‹ฐ - ๋ฆฌ์น˜์—์ด๋ธ” ๊ฐœ๋ฐœ์ผ์ง€ #5(๋‹ต๊ธ€๊ธฐ๋Šฅ) - v1.0

2024. 7. 6. 20:26ยทํ”„๋กœ์ ํŠธ/๐Ÿ ๊ธˆ์œต ์ปค๋ฎค๋‹ˆํ‹ฐ

ํ›„๊ธฐ

๋ฆฌ์น˜์—์ด๋ธ” v1.0์ด ์™„์„ฑ๋˜์—ˆ๋‹ค.

 

๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ๋ฐ ๋‹ต๊ธ€ ์ž‘์„ฑ ๊ทธ๋ฆฌ๊ณ  ํŒ”๋กœ์šฐ ๊ธฐ๋Šฅ ๊นŒ์ง€ ๋„ฃ์—ˆ๋‹ค.

 

๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์žก๋Š”๋ฐ๋งŒ ๊ฑฐ์˜ 3์ฃผ๊ฐ€ ๊ฑธ๋ฆฐ ๋“ฏ ํ•˜๋‹ค ์ด ๊ณผ์ •์—์„œ ์‚ฌ์šฉ์ž ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ๋ฐ์ด๋”๋ฒ ์ด์Šค ์„ค๊ณ„ ๋ฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ์žˆ์–ด์„œ ์ข‹์€ ๊ฒฝํ—˜์„ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ํŠนํžˆ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ํ…Œ์ด๋ธ” ๊ฐ„ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ์•„์ฃผ ์ค‘์š”ํ•œ ๊ฒƒ์„ ๋А๊ผˆ๋‹ค.

model Thread {
  id         String       @id @default(cuid())
  content    String
  User       User         @relation(fields: [userId], references: [id], onDelete: Cascade)
  createdAt  DateTime     @default(now())
  updatedAt  DateTime     @updatedAt
  userId     String
  ThreadLike ThreadLike[]

  Origin Reply[] @relation("origin")
  Reply  Reply[] @relation("reply")
}

model Reply {
  id        String   @id @default(cuid())
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt

  originThread String // The user who is following
  replyThread  String // The user being followed
  origin       Thread @relation("origin", fields: [originThread], references: [id], onDelete: Cascade)
  reply        Thread @relation("reply", fields: [replyThread], references: [id], onDelete: Cascade)

  @@index([originThread, replyThread], name: "idx_follower_following")
  @@unique([originThread, replyThread])
}

๊ทธ๋ฆฌ๊ณ  ํ”„๋ก ํŠธ์—”๋“œ ๋ถ€๋ถ„์—์„œ์˜ ๋ฐ์ดํ„ฐ API ๊ทœ๊ฒฉ ์„ค์ • ๋“ฑ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ž˜ ํ•˜์ง€ ์•Š์œผ๋ฉด ํ›„๋ฐ˜์—๋Š” ๊ผฌ์ด๋Š” ๊ฒƒ์„ ๋А๊ผˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ณตํ†ต์ ์œผ๋กœ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ๊ธฐ๋ณธ Type์— ์ œ๋„ค๋ฆญ์„ ํ†ตํ•˜์—ฌ ์ผ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์˜ค๋„๋ก ๊ตฌ์„ฑํ•˜์˜€๋‹ค.

export async function ResponseData<T>(data: T, result: boolean) {
  const response: BasicType<T> = {
    result: result,
    createdAt: new Date(),
    data: data,
  };

  return response;
}
export type BasicType<T> = {
  result: boolean;
  createdAt: Date;
  data?: T;
};
 

์ด์ œ๋Š” ๋‚˜์˜ ๋ณธ์—…์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.

 

์ด์Šˆ

zod๋กœ ๋„˜๊ธธ ๋•Œ ๊ตฌ๊ธ€๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์„ ํƒ์ ์œผ๋กœํ•˜๊ณ  "" ๋กœ ๋Œ€์ฒดํ•ด์„œ ๋„˜๊ฒจ์ค˜์„œ ๋™์ž‘์ด ๊ฐ€๋Šฅํ–ˆ๋‹ค. ๋ฌด๋ฐ˜์‘ ํ˜„์ƒ ์‹œ ์˜ต์…”๋„์— "" ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด๋ณด์ž

export const userUpdateSchema = z.object({
  email: z.optional(z.string().email()).or(z.literal("")),
  name: z.string().min(2).max(8, {
    message: "์ตœ๋Œ€ 8์ž ์ด๋‚ด๋กœ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.",
  }),
  password: z
    .optional(z.string().regex(passwordValidation).min(8).max(16))
    .or(z.literal("")),
  image: z.optional(z.string().url().nullable()),
  content: z.string().min(0).nullable(),
});

 

์‚ฌ์ดํŠธ

https://richable.cyber-luna.com

 

๋ฆฌ์น˜์—์ด๋ธ” - ๋กœ๊ทธ์ธ

๋” ๋†’์€ ์„ฑ์žฅ์„ ์œ„ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ

richable.cyber-luna.com

์†Œ์Šค์ฝ”๋“œ

https://github.com/TwoIceFIsh/richable-web-server

 

GitHub - TwoIceFIsh/richable-web-server: richable-web-server

richable-web-server. Contribute to TwoIceFIsh/richable-web-server development by creating an account on GitHub.

github.com

 

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'ํ”„๋กœ์ ํŠธ > ๐Ÿ ๊ธˆ์œต ์ปค๋ฎค๋‹ˆํ‹ฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๊ฐœ๋ฐœ] ๊ธˆ์œต ์ปค๋ฎค๋‹ˆํ‹ฐ - ๋ฆฌ์น˜์—์ด๋ธ” ๊ฐœ๋ฐœ์ผ์ง€ #4(์ข‹์•„์š”)  (0) 2024.07.04
[๊ฐœ๋ฐœ] ๊ธˆ์œต ์ปค๋ฎค๋‹ˆํ‹ฐ - ๋ฆฌ์น˜์—์ด๋ธ” ๊ฐœ๋ฐœ์ผ์ง€ #3(feat.์Šค๋ ˆ๋“œ)  (0) 2024.06.29
[๊ฐœ๋ฐœ] ๊ธˆ์œต ์ปค๋ฎค๋‹ˆํ‹ฐ - ๋ฆฌ์น˜์—์ด๋ธ” ๊ฐœ๋ฐœ์ผ์ง€ #2(feat.์Šค๋ ˆ๋“œ)  (0) 2024.06.27
[๊ฐœ๋ฐœ] ๊ธˆ์œต ์ปค๋ฎค๋‹ˆํ‹ฐ - ๋ฆฌ์น˜์—์ด๋ธ” ๊ฐœ๋ฐœ์ผ์ง€ #1  (0) 2024.06.18
'ํ”„๋กœ์ ํŠธ/๐Ÿ ๊ธˆ์œต ์ปค๋ฎค๋‹ˆํ‹ฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๊ฐœ๋ฐœ] ๊ธˆ์œต ์ปค๋ฎค๋‹ˆํ‹ฐ - ๋ฆฌ์น˜์—์ด๋ธ” ๊ฐœ๋ฐœ์ผ์ง€ #4(์ข‹์•„์š”)
  • [๊ฐœ๋ฐœ] ๊ธˆ์œต ์ปค๋ฎค๋‹ˆํ‹ฐ - ๋ฆฌ์น˜์—์ด๋ธ” ๊ฐœ๋ฐœ์ผ์ง€ #3(feat.์Šค๋ ˆ๋“œ)
  • [๊ฐœ๋ฐœ] ๊ธˆ์œต ์ปค๋ฎค๋‹ˆํ‹ฐ - ๋ฆฌ์น˜์—์ด๋ธ” ๊ฐœ๋ฐœ์ผ์ง€ #2(feat.์Šค๋ ˆ๋“œ)
  • [๊ฐœ๋ฐœ] ๊ธˆ์œต ์ปค๋ฎค๋‹ˆํ‹ฐ - ๋ฆฌ์น˜์—์ด๋ธ” ๊ฐœ๋ฐœ์ผ์ง€ #1
TwoIceFish
TwoIceFish
https://github.com/TwoIceFIsh
  • TwoIceFish
    Cyber-Luna
    TwoIceFish
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (593)
      • ๐Ÿค–์ •๋ณด๋ณด์•ˆ (77)
        • ๐Ÿ’™๋ธ”๋ฃจํŒ€ (24)
        • โค๏ธ๋ ˆ๋“œํŒ€ (21)
        • ๐Ÿ’œํผํ”ŒํŒ€ (1)
        • ๐Ÿ’ 1๋ถ„์ง€์‹ (30)
      • ํ”„๋กœ์ ํŠธ (14)
        • ๐Ÿ’Œ ์ •๋ณด๋ณด์•ˆ ๋ฉ”์ผ๋ง ์‹œ์Šคํ…œ (8)
        • ๐Ÿ” ์ธ์ฆ์„œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ (1)
        • ๐Ÿ ๊ธˆ์œต ์ปค๋ฎค๋‹ˆํ‹ฐ (5)
      • ๐Ÿžํ”„๋กœ๊ทธ๋ž˜๋ฐ (49)
        • Next.js (9)
      • ๊ธฐํƒ€์ •๋ณด (68)
        • ๐ŸŒ๊ทธ๋ฆฟ์š”๊ฑฐํŠธ (11)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ๋ฐฉ๋ช…๋ก
    • ๋กœ์ผ“ํŽ€์น˜
    • ๊นƒํ—ˆ๋ธŒ
    • ์ฝ”์ฝ”๋„ˆ์ธ 
    • ๊ทธ๋ฆฟ์š”๊ฑฐํŠธ
  • ๋งํฌ

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

    • ์•ˆ๋…•ํ•˜์„ธ์š”
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    SKํ•˜์ด๋‹‰์Šค
    vpn ์„ค์น˜
    vpn ์˜คํ”ˆ์†Œ์Šค
    jsp 200
    ์„œ๋ธŒ๋„๋ฉ”์ธ ์ธ์ฆ์„œ
    Visual Studio
    ์ˆ˜์ต๋ฅ  ๊ณ„์‚ฐ๊ธฐ
    eclipse
    ํ†ฐ์บฃ ์„œ๋ธ”๋ฆฟ
    ๋ฐฉ๋ฒ™
    ์•…์„ฑ๋ฉ”์ผ
    ์‚ผ์„ฑ์ „์ž์šฐ
    nmap
    ๋ชจ์˜ํ•ดํ‚น
    ์™€์ดํŒŒ์ด ๋น„๋ฐ€๋ฒˆํ˜ธ ํƒˆ์ทจ
    ์• ํ”ŒํŽ˜์ด ์„ค์ •๋ฐฉ๋ฒ•
    ISMS-P
    ๋ถ€๋™์‚ฐ ์ˆ˜์ต๋ฅ  ๊ณ„์‚ฐ๊ธฐ
    jsp
    ์ฝ”์ฝ”๋„›์ธ 
    ์œ ๋‹ˆํ‹ฐ
    ๋ถ€ํŠธ์ŠคํŠธ๋žฉ
    ์•…์„ฑ๋ฉ”์žƒ๋ถ„์„
    ์ง€๊ฐ‘ ์•ฑ์— ์นด๋“œ ์ถ”๊ฐ€
    ๋ฉ”์ผํ—ค๋”๋ถ„์„
    servlet 404
    ์‘๋‹ต์—†์Œ
    ์ธ์ฆ์„œ ์—ฌ๋Ÿฌ๊ฐœ
    tomcat servlet
    ๋‹จ์ผ ๋„๋ฉ”์ธ ์ธ์ฆ์„œ ์—ฌ๋Ÿฌ๊ฐœ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
TwoIceFish
[๊ฐœ๋ฐœ] ๊ธˆ์œต ์ปค๋ฎค๋‹ˆํ‹ฐ - ๋ฆฌ์น˜์—์ด๋ธ” ๊ฐœ๋ฐœ์ผ์ง€ #5(๋‹ต๊ธ€๊ธฐ๋Šฅ) - v1.0
์ƒ๋‹จ์œผ๋กœ

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