๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ฐฑ์—”๋“œ32

Spring Boot ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ ์„ค๊ณ„ ๐Ÿ’ก ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ ์„ค๊ณ„๋ž€?ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…๋ฆฝ์ ์ธ ๋ชจ๋“ˆ๋กœ ๋‚˜๋ˆ„์–ด ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๋Š” ๋ฐฉ์‹๊ณตํ†ต ๋ชจ๋“ˆ๊ณผ ๋„๋ฉ”์ธ๋ณ„ ๋ชจ๋“ˆ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌ โœ… ์‚ฌ์šฉ ์˜ˆ์‹œmy-multi-module-project โ”œโ”€โ”€ parent-project (Root) โ”‚ โ”œโ”€โ”€ pom.xml (Parent POM) โ”‚ โ”œโ”€โ”€ common-module โ”‚ โ”‚ โ”œโ”€โ”€ src/main/java/com/example/common โ”‚ โ”‚ โ””โ”€โ”€ pom.xml โ”‚ โ”œโ”€โ”€ service-user โ”‚ โ”‚ โ”œโ”€โ”€ src/main/java/com/example/user โ”‚ โ”‚ โ””โ”€โ”€ pom.xml โ”‚ โ”œโ”€โ”€ service-order โ”‚ โ”‚ โ”œโ”€โ”€ src/main/java/com.. 2025. 2. 25.
Docker๋ž€? ๐Ÿš€ Docker๋ž€?Docker๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆ(Container) ๋ผ๋Š” ๊ฐ€๋ฒผ์šด ๊ฐ€์ƒ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ๊ฐ€์ƒํ™” ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.โœ… 1. Docker์˜ ํ•ต์‹ฌ ๊ฐœ๋…๐Ÿ”น 1) ์ปจํ…Œ์ด๋„ˆ(Container)์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ํฌํ•จํ•˜๋Š” ๊ฐ€๋ฒผ์šด ํŒจํ‚ค์ง€๋™์ผํ•œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๋ฏ€๋กœ ๋ฐฐํฌ๊ฐ€ ํŽธ๋ฆฌํ•˜๊ณ , ์˜์กด์„ฑ ๋ฌธ์ œ ์—†์Œ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•˜๋‚˜์˜ ์„œ๋ฒ„์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅ → ๋ฆฌ์†Œ์Šค ํšจ์œจ์  ์‚ฌ์šฉ๐Ÿ”น 2) ์ด๋ฏธ์ง€(Image)์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ (Blueprint)ํŒŒ์ผ ์‹œ์Šคํ…œ๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํฌํ•จ๋จDockerfile์„ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ŒDocker Hub์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œ( docker pull ) ๊ฐ€๋Šฅ๐Ÿ”น 3) Dockerfile์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑ.. 2025. 2. 21.
JPA์—์„œ Enum ์ปฌ๋Ÿผ ์ œ๋Œ€๋กœ ์ €์žฅํ•˜๊ธฐ ์˜ค๋Š˜์€ Entity๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ ๊ฒช์€ ์ด์Šˆ์ธSpring Boot JPA์—์„œ Enum ์ปฌ๋Ÿผ ๋งคํ•‘ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ๋ฒ•์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.  โ›๏ธ ์ฒ˜์Œ ์ฝ”๋“œ์—์„œ ์—๋Ÿฌ ๋ฐœ์ƒ@Column(name = "status", nullable = false)private OrderStatusEnum status = OrderStatusEnum.PENDING; Hibernate๊ฐ€ Enum์„ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™˜ํ•ด์•ผ ํ• ์ง€ ๋ชฐ๋ผ IllegalArgumentException์ด ๋ฐœ์ƒํ–ˆ๋‹ค.๊ธฐ๋ณธ์ ์œผ๋กœ Hibernate๊ฐ€ ORDINAL(์ˆซ์ž)๋กœ ์ €์žฅํ•˜๋ คํ•ด์„œ DBํƒ€์ž…๊ณผ ์ถฉ๋Œํ•œ๋‹ค.  โ›๏ธ @Enumerated(EnumType.STRING) ์ถ”๊ฐ€  @Enumerated(EnumType.STRING) @Column(name = "stat.. 2025. 2. 21.
git branch ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์ผ๋•Œ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ์ถฉ๋Œ&ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์ •๋ฆฌ ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์—ฌ๋Ÿฌ branch๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด์„œ ๋กœ์ปฌ์—์„œ ์ˆ˜์ •ํ•œ ํŒŒ์ผ์ด ๋‚ ๋ผ๊ฐ€๋Š” ์ด์Šˆ๊ฐ€ ์ƒ๊ฒผ๋‹ค.๊ทธ๋ž˜์„œ ๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋ฉด์„œ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ์ถฉ๋Œ ์ด์Šˆ๋“ค๊ณผ ๊ทธ๊ฒƒ๋“ค์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค. ๐Ÿ› ๏ธ git pull ์‹œ ์ถฉ๋Œ (Merge Conflict)์ด์Šˆ๋กœ์ปฌ์—์„œ ์ˆ˜์ •ํ•œ ํŒŒ์ผ์ด ์›๊ฒฉ ์ €์žฅ์†Œ(๋ฆฌ๋ชจํŠธ)์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ์ถฉ๋Œํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒgit pull ์‹œ ์ž๋™ ๋ณ‘ํ•ฉ์ด ์‹คํŒจํ•˜๊ณ , ์ถฉ๋Œ ํ•ด๊ฒฐ์ด ํ•„์š”ํ•จํ•ด๊ฒฐ ๋ฐฉ๋ฒ•git status ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ํŒŒ์ผ ๋ชฉ๋ก์„ ํ™•์ธํ•ด๋‹น ํŒŒ์ผ์„ ์—ด์–ด >>>>>> branch_name ๋“ฑ์˜ ์ถฉ๋Œ ํ‘œ์‹œ๋ฅผ ๋ณด๊ณ  ์ง์ ‘ ์ˆ˜์ •git add "์ถฉ๋Œ ํ•ด๊ฒฐ ํŒŒ์ผ" ์ง„ํ–‰git commit -m "Resolve merge confilct"์ง„ํ–‰ ๐Ÿ› ๏ธ git pull .. 2025. 2. 18.
EC2์—์„œ PostgreSQL์„ Docker๋กœ ์šด์˜ํ•˜๋ฉฐ ๊ฒช์—ˆ๋˜ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ๊ณผ์ • ์ •๋ฆฌ ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ ํ™˜๊ฒฝ์…‹ํŒ…์„ ํ•˜๊ธฐ๋กœ ํ–ˆ๊ณ , ์šฐ๋ฆฌ๋Š” EC2ํ™˜๊ฒฝ์—์„œ Docker๋ฅผ ์ด์šฉํ•˜์—ฌ PostgreSQL์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์•„๋ž˜์—๋Š” ํ•ด๋‹น ๊ณผ์ •์„ ์™„๋ฃŒํ•˜๋ฉด์„œ ๊นŒ์ง€ ๊ฒช์—ˆ๋˜ ์ž‘์€ ์˜ค๋ฅ˜๋“ค์„ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค.  ๋ชฉ์ฐจ1๏ธโƒฃ Docker ๊ถŒํ•œ ์˜ค๋ฅ˜ (permission denied) ํ•ด๊ฒฐ → usermod -aG docker2๏ธโƒฃ init.sql ํŒŒ์ผ ์ „์†ก ์˜ค๋ฅ˜ (scp์—์„œ : ๋น ์ง) ํ•ด๊ฒฐ3๏ธโƒฃ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์ˆœ์„œ ์˜ค๋ฅ˜ (relation does not exist) ํ•ด๊ฒฐ4๏ธโƒฃ ํ•จ์ˆ˜ ์ค‘๋ณต ์˜ค๋ฅ˜ (function already exists) ํ•ด๊ฒฐ5๏ธโƒฃ PL/pgSQL ๋ณ€์ˆ˜ ์ถฉ๋Œ ์˜ค๋ฅ˜ (table_name is ambiguous) ํ•ด๊ฒฐ6๏ธโƒฃ ๋กœ์ปฌ์—์„œ EC2 PostgreSQL ์ ‘์† ์˜ค๋ฅ˜ (Connection time.. 2025. 2. 14.
Docker & CI/CD - 1 Docker &  CI/CD ๋ž€?DockerDocker๋Š” ์ปจํ…Œ์ด๋„ˆํ™” ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”Œ๋žซํผ์ด๋‹ค.Docker๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ทธ ํ™˜๊ฒฝ์„ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฌถ์–ด ์–ด๋””์„œ๋“  ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ™˜๊ฒฝ ์„ค์ • ๋“ฑ์„ ํ•จ๊ป˜ ํŒจํ‚ค์ง•ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ์ผ๊ด€๋˜๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.Docker๋Š” ํšจ์œจ์ ์ธ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๊ณผ ๋น ๋ฅธ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜์—ฌ ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. CI/CDCI (Continuous Integration)CI๋Š” ์ง€์†์ ์ธ ํ†ตํ•ฉ์„ ์˜๋ฏธํ•œ๋‹ค.๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜์—ฌ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ†ตํ•ฉํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.github Action๋Š” CI์˜ ์ผํ™˜์œผ๋กœ git Actions๋ฅผ ์ด์šฉํ•˜์—ฌ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ.. 2025. 2. 11.