์ „์ฒด ๊ธ€ 269

SAGA ํŒจํ„ด์ด๋ž€?

Before go further ์‚ฌ์‹ค ์ œ๊ฐ€ ์–ผ๋งˆ ์ „์— ์ด์ง์„ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ”๋กœ ํ”„๋กœ์ ํŠธ์— ํˆฌ์ž…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ ˆ์ฐจ๋ฅผ ๋ฐŸ๊ณ  ์žˆ๋Š” ์ค‘์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๊ฐ€ msa๋กœ ์งœ์ ธ ์žˆ์–ด ๊ด€๋ จ ๊ณต๋ถ€๋ฅผ ํ•  ๊ฒธ ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ๋“ค๊ณผ ์ธ๊ฐ•๋“ค์„ ๋“ฃ๊ณ  ์žˆ๋Š” ์ค‘์ž…๋‹ˆ๋‹ค. ๊ทธ ์ค‘ SAGA ํŒจํ„ด์— ๋Œ€ํ•ด ์ž˜ ์ •๋ฆฌ๋˜์–ด ์žˆ๋Š” ๋ธ”๋กœ๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•˜์—ฌ ํ•ด๋‹น ๋ธ”๋กœ๊ทธ์—์„œ ๊ธ€์„ ๋ฐœ์ทŒํ•˜์—ฌ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ถœ์ฒ˜๋Š” ๋ณธ ๊ธ€์˜ ํ•˜๋‹จ์— ์ž‘์„ฑํ•ด ๋†“์•˜์Šต๋‹ˆ๋‹ค. SAGA ํŒจํ„ด์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋” ์ƒ์„ธํ•œ ๊ธ€์„ ์›ํ•˜์‹ ๋‹ค๋ฉด ์ง์ ‘ ๋ฐฉ๋ฌธํ•ด ๋ณด์‹œ๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๊ธฐ์กด์˜ Monolithic ํ™˜๊ฒฝ์—์„œ๋Š” DBMS๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ๋Š” ํŠธ๋žœ์žญ์…˜ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ commit์ด๋‚˜ rollback์„ ํ†ตํ•ด์„œ ์ผ๊ด€์„ฑ์žˆ๊ฒŒ ๊ด€๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค๋งŒ Application๊ณผ DB๊ฐ€ ๋ถ„์‚ฐ๋˜๋ฉด..

CS 2022.01.06

[JPA] ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ

์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ @mappedBy FK๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ…Œ์ด๋ธ” Table User @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; Team @OneToMany(mappedBy = "team") private List users = new ArrayList(); 1(Team): N(User)์˜ ๊ด€๊ณ„์ผ ๊ฒฝ์šฐ jpa ์„ค์ •์„ ์œ„์™€ ๊ฐ™์ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ User์™€ Team๊ณผ ๊ฐ™์€ ๊ฐ์ฒด์— ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„ ์„ค์ • ์‹œ ์–ด๋А ๊ฐ์ฒด์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด ์ฃผ์—ˆ์„ ๋•Œ ์‹ค์ œ DB์— ๋ฐ˜์˜์„ ํ•˜๋А๋ƒ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ๊ฒฝ์šฐ User๊ฐ€ ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด User ๊ฐ์ฒด์—์„œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด ์ฃผ์–ด์•ผ DB์— ๊ฐ’์ด ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค...

CS 2021.12.22

[JBoss] JBoss-AS, JBoss-EAP, WildFly๋ž€?

ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์˜ ๊ฐœ๋ฐœ ์„œ๋ฒ„๋Š” wildfly, ์šด์˜ ์„œ๋ฒ„๋Š” jBoss๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค. ์ด์— wildfly์™€ jboss์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ๊ถ๊ธˆ์ฆ์ด ์ƒ๊ฒจ ๊ฒ€์ƒ‰ ๋ฐ ์ •๋ฆฌํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋‹ค๋ฅด๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ์ •๋ณด๊ฐ€ ๊ธฐ์ž…๋˜์–ด ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“ ์ง€ ๊ธ€์„ ๋‚จ๊ฒจ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ฐœ์š” apache-tomcat๊ณผ ๊ฐ™์€ ์ž๋ฐ”๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด์˜ ์ด์นญ์ด๋ฉฐ JBoss์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Tomcat์ด ๋‚ด์žฅ๋˜์–ด ์žˆ๊ณ  EJB๋‚˜ JMS๋ฅผ ์‚ฌ์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 1999๋…„ Marc Fleury์— ์˜ํ•ด jBoss๋ผ๋Š” ์ด๋ฆ„์˜ ์ž‘์€ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋กœ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 2006๋…„ 4์›”์— RedHat์— ์ธ์ˆ˜๋˜๊ณ  jBoss๋Š” RedHat์ด ์ œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ๋ฏธ๋“ค์›จ์–ด ์ œํ’ˆ(jBoss datagrid, jBoss Fuse ๋“ฑ)๋“ค์— ๋Œ€ํ•œ ์ƒํ‘œ๊ฐ€..

CS 2021.12.17

[Maven] http repositories blocking ํ•ด๊ฒฐ

maven 3.8.1 ๋ฒ„์ „์ด ๋‚˜์˜ค๋ฉด์„œ http ์— ๋Œ€ํ•œ ์™ธ๋ถ€ ์—ฐ๊ฒฐ์„ ๋ง‰๋Š” ์„ค์ •์ด default๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. https://maven.apache.org/docs/3.8.1/release-notes.html ์ด๋กœ ์ธํ•ด ํ์‡„๋ง์—์„œ ํŠน์ • ๋ชจ๋“ˆ์„ nexus์— ๋ชจ์•„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ๋ฅผ ๋‹ค๋ค„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Problem ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด mvn clean package ๋ช…๋ น ์‹คํ–‰ ์‹œ maven์ด http uri๋ฅผ blockํ•˜๊ธฐ์— ๋‚ด๋ถ€๋ง์— ์กด์žฌํ•˜๋Š” http์— ์ ‘์†ํ•  ์ˆ˜ ์—†์–ด failed to collect dependencies ... [maven-default-http-blocker]... ๋ผ๋Š” error ๋ฑ‰์œผ๋ฉฐ build์— ์‹คํŒจํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น http repository์˜ ๋‚ด..

CS 2021.12.17

[JPA] ๊ธฐ๋ณธ ํ‚ค ๋งคํ•‘

@Id @GeneratedValue IDENTITY ์ „๋žต SEQUENCE ์ „๋žต TABLE ์ „๋žต ๋ฐฉ๋ฒ• ์ง์ ‘ ํ• ๋‹น : @Id ๋งŒ ์‚ฌ์šฉ ์ž๋™ ์ƒ์„ฑ : @GeneratedValue @Id @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private String id; User user = new User(); user.setId("Id_a") user.setUsername("A"); IDENTITY ์ „๋žต GenerationType.IDENTITY ๊ธฐ๋ณธ ํ‚ค ์ƒ์„ฑ์„ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์œ„์ž„ํ•ฉ๋‹ˆ๋‹ค. MYSQL, PostgreSQL, SQL Server, DB2์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ex) MySQL์˜ AUTO_ INCREMENT @Id @GeneratedValue(stra..

CS 2021.12.15

[HTTP] URI์™€ ์›น ๋ธŒ๋ผ์šฐ์ € ์š”์ฒญ ํ๋ฆ„

URI (Uniform Resource Idenfier) Unifor: ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•˜๋Š” ํ†ต์ผํ•œ ๋ฐ•์‹ Resource: ์ง€์›, URI๋กœ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ(์ œํ•œ ์—†์Œ) Identifier: ๋‹ค๋ฅธ ํ•ญ๋ชฉ๊ณผ ๊ตฌ๋ถ„ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ •๋ณด URL Locator: ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๋Š” ์œ„์น˜๋ฅผ ์ง€์ • foo :/ /xxx.xxx:8080 /over/there ? name=jason # nose ... scheme / authority / path / query / fragment scheme - ์ฃผ๋กœ ํ”„๋กœํ† ์ฝœ ์‚ฌ์šฉ. protocol - ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ž์›์— ์ ‘๊ทผํ•  ๊ฒƒ์ธ๊ฐ€ ํ•˜๋Š” ์•ฝ์† ๋ฐ ๊ทœ์น™ โ€‹ ex) http, https, ftp ๋“ฑ http๋Š” 80, https 443 ํฌํŠธ๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉ. scheme://[userInfo@]..

CS 2021.12.14

[HTTP] ์ธํ„ฐ๋„ท ๋„คํŠธ์›Œํฌ

IP(์ธํ„ฐ๋„ท ํ”„๋กœํ† ์ฝœ) ์ง€์ •ํ•œ IP ์ฃผ์†Œ(IP Address)์— ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ํŒจํ‚ท(Packet)์ด๋ผ๋Š” ํ†ต์‹  ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ IP ํŒจํ‚ท ์ •๋ณด ์ถœ๋ฐœ์ง€ ip ๋ชฉ์ ์ง€ ip ์ „์†ก ๋ฐ์ดํ„ฐ IP ํ”„๋กœํ† ์ฝœ์˜ ํ•œ๊ณ„ ๋น„์—ฐ๊ฒฐ์„ฑ ํŒจํ‚ท์„ ๋ฐ›์„ ๋Œ€์ƒ์ด ์—†๊ฑฐ๋‚˜ ์„œ๋น„์Šค ๋ถˆ๋Šฅ ์ƒํƒœ์—ฌ๋„ ํŒจํ‚ท ์ „์†ก ๋น„์‹ ๋ขฐ์„ฑ ์ค‘๊ฐ„์— ํŒจํ‚ท์ด ์‚ฌ๋ผ์ง€๋ฉด ์–ด๋–ป๊ฒŒ ๋  ๊ฒƒ์ธ๊ฐ€? ํŒจํ‚ท์ด ์ˆœ์„œ๋Œ€๋กœ ์˜ค์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋  ๊ฒƒ์ธ๊ฐ€? ํ”„๋กœ๊ทธ๋žจ ๊ตฌ๋ถ„ ๊ฐ™์€ IP๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ฒ„์—์„œ ํ†ต์‹ ํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‘˜ ์ด์ƒ์ด๋ฉด ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„ํ•  ๊ฒƒ์ธ๊ฐ€? ์œ„์˜ ๋ฌธ์ œ๋กœ ์ธํ•ด TCP UDP ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค TCP, UDP TCP์˜ ํŠน์ง• ์—ฐ๊ฒฐ์ง€ํ–ฅ - TCP 3 way handshake(๊ฐ€์ƒ์—ฐ๊ฒฐ) ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ณด์ฆ(๋ฐ์ดํ„ฐ ์ „์†ก์ด ์ž˜ ๋˜์—ˆ๋‹ค๊ณ  ์‘๋‹ต์ด ์˜ต๋‹ˆ๋‹ค.) ์ˆœ์„œ ๋ณด์žฅ(์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅผ ์‹œ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅธ๊ฒƒ..

CS 2021.12.13

[JPA] ํ•„๋“œ์™€ ์ปฌ๋ฆผ๋งคํ•‘

๋งคํ•‘ ์–ด๋…ธํ…Œ์ด์…˜ @Column : ์ปฌ๋Ÿผ ๋งคํ•‘ ```@Temporal`` : ๋‚ ์งœ ํƒ€์ž… ๋งคํ•‘ @Enumerated : Enum ํƒ€์ž… ๋งคํ•‘ @Lob : BLOB, CLOB ๋งคํ•‘ @Transient : ํŠน์ • ํ•„๋“œ๋ฅผ ์ปฌ๋Ÿผ์— ๋งคํ•‘ํ•˜์ง€ ์•Š์„ ์‹œ(๋งคํ•‘ ๋ฌด์‹œ) @Enumerated ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ํ•  ์  EnumType.ORDINAL: enum ์ˆœ์„œ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ EnumType.STRING: enum ์ด๋ฆ„์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ Enum์˜ ๊ธฐ๋ณธ ์„ค์ •์€ EnumType.ORDINAL ์ž…๋‹ˆ๋‹ค. ์œ„์˜ ์„ค๋ช…์ฒ˜๋Ÿผ ORDINAL์€ DB์— ์ˆœ์„œ๋งŒ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ enum์— ๋‹ค๋ฅธ ๊ฐ’์„ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ ORDINAL์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ enumType์„ ORDINAL์ด ์•„๋‹Œ STRING์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ..

CS 2021.12.10

[JPA] ์—”ํ‹ฐํ‹ฐ๋งคํ•‘

์—”ํ‹ฐํ‹ฐ๋งคํ•‘ ๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ” ๋งคํ•‘: @Entity, @Table ํ•„๋“œ์™€ ์ปฌ๋Ÿผ ๋งคํ•‘: @Column ๊ธฐ๋ณธ ํ‚ค ๋งคํ•‘: @id ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘: @ManyToOne, @JoinColumn @Entity @Entity๊ฐ€ ๋ถ™์€ ํด๋ž˜์Šค๋Š” JPA๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” Entity๋ผ ์ง€์นญํ•ฉ๋‹ˆ๋‹ค. JPA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘ํ•  ํด๋ž˜์Šค๋Š” @Entity๊ฐ€ ํ•„์ˆ˜์ ์œผ๋กœ ๋ถ™์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ƒ์„ฑ์ž ํ•„์ˆ˜ ์ ์œผ๋กœ ์ƒ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. final, enum, interface, inner ํด๋ž˜์Šค๋Š” @Entity๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Table name catalog schema uniqueConstrains(DDL) ... @Entity // @Entity ์‚ฌ์šฉ๋ฐฉ๋ฒ• @Table(name = "USER") // @Table(name) ์‚ฌ์šฉ๋ฐฉ๋ฒ• public..

CS 2021.12.09

[JPA] ์ค€์˜์† ์ƒํƒœ

์ค€์˜์† ์ƒํƒœ EntityManager(์˜์†์„ฑ ์ปจํ…์ŠคํŠธ)์— ์˜ฌ๋ ค์ ธ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ ๋”์ด์ƒ JPA๊ฐ€ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ฒ ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. Method EntityManager.detach() EntityManager.clear() EntityManager.close() Code EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { User user = em.find(User.class, 1L); user.setName("AAAA"); em..

CS 2021.12.08
728x90
๋ฐ˜์‘ํ˜•