0405 - 0411
# 0405 - 0411
# 0405 - JPA Auditing
์์ฑ์๊ฐ/์์ ์๊ฐ ์๋ํ
# @EnableJpaAuditing
- JPA Auditing ํ์ฑํ
@EnableJpaAuditing
@SpringBootApplication
public class Application {
...
}
# @MappedSuperclass
- JPA Entity ํด๋์ค๋ค์ด ํด๋น ์ถ์ ํด๋์ค๋ฅผ ์์ํ ๊ฒฝ์ฐ ์์ ์ปฌ๋ผ๋ค์ ์ธ์
# @EntityListeners(AuditingEntityListener.class)
- ํด๋น ํด๋์ค์ Auditing ๊ธฐ๋ฅ์ ํฌํจ
@Getter
@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
public abstract class BaseEntity {
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
@CreatedDate
@Column(name = "created_at", columnDefinition = "timestamp with time zone", updatable = false)
private LocalDateTime createdAt;
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
@LastModifiedDate
@Column(name = "updated_at", columnDefinition = "timestamp with time zone")
private LocalDateTime updatedAt;
}
# @CreatedDate
- Entity ์์ฑ ์ ์ฅ์ ์๊ฐ ์๋์ ์ฅ
# @LastModifiedDate
- Entity์ ๊ฐ ๋ณ๊ฒฝ์ ์๊ฐ ์๋์ ์ฅ
# 0406 - @RestController & @ExceptionHandler
# @ExceptonHandler
@ExceptionHandler(NullPointerException.class)
public String nullex(Exception e) {
return e.getMessage();
}
- ExceptionHandler์ ๋งค์น ๋ฒ์๋ฅผ ๊ฒฐ์ ํ ์ ์๋ค.
@ExceptionHandler(NullPointerException.class)
# @ControllerAdvice
@ExceptionHandler, @ModelAttribute, @InitBinder ๊ฐ ์ ์ฉ๋ ๋ฉ์๋๋ค์ AOP๋ฅผ ์ ์ํด ์ปจํธ๋กค๋ฌ ๋จ์ ์ ์ฉํ๊ธฐ ์ํด ๊ณ ์๋ ์ ๋ํ ์ด์
# @RestControllerAdvice
@ResponseBody + @ControllerAdvice : @RestControllerAdvice
- @RestControllerAdvice์ @ExceptonHandler๋ฅผ ์ฌ์ฉํด ์ปจํธ๋กค๋ฌ ์ ์ญ์ผ๋ก ์์ธ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
# 0407 - rc-local.service
Centos 7 ๋ถํ ์ ๋ช ๋ น์ด ์๋์คํ
# rc.local ํ์ผ
/etc/rc.d/rc.local
- rc.local ์คํ ๊ถํ ํ์ฉ
chmod +x /etc/rc.d/rc.local
# ์คํ ์คํฌ๋ฆฝํธ ์ถ๊ฐ
vi /etc/rc.d/rc.local
#!/bin/sh
touch /var/lock/subsys/local
su - user -c /home/app/run.sh
# ์๋น์ค์ค์
์ํํ์ธ
systemctl status rc-local.service
์คํ
systemctl start rc-local.service
์๋น์ค enable ์ฒ๋ฆฌ
vi /usr/lib/systemd/system/rc-local.service
์คํฌ๋ฆฝํธ ์ถ๊ฐ
[Install]
WantedBy=multi-user.target
# ํ์ธ
systemctl enable rc-local.service
systemctl status rc-local.service
systemctl list-unit-files | grep rc-local
# 0408 - Yaml
Yaml Ain't Markup Language
# vs Properties
- Properties
example.jdbc.url=127.0.0.1
example.jdbc.port=3306
example.jdbc.user=user
example.jdbc.password=password
- yaml
example:
jdbc:
url: 127.0.0.1
port: 3306
user: user
password: password
=> ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ ๋ํ๋
# vs JSON
- JSON
{
"json": [
"rigid",
"better for data interchange"
],
"yaml": [
"slim and flexible",
"better for configuration"
],
"object": {
"key": "value",
"array": [
{
"null_value": null
},
{
"boolean": true
},
{
"integer": 1
}
]
},
"paragraph": "Blank lines denote\nparagraph breaks\n",
"content": "Or we\ncan auto\nconvert line breaks\nto save space"
}
- yaml
---
# <- yaml supports comments, json does not
# did you know you can embed json in yaml?
# try uncommenting the next line
# { foo: 'bar' }
json:
- rigid
- better for data interchange
yaml:
- slim and flexible
- better for configuration
object:
key: value
array:
- null_value:
- boolean: true
- integer: 1
paragraph: >
Blank lines denote
paragraph breaks
content: |-
Or we
can auto
convert line breaks
to save space
# etc
servers:
- www.abc.test.com
- www.xyz.test.com
external: [www.abc.test.com, www.xyz.test.com]
boolean_flag: true
warrent:
ment: >
johnber is
very important
=> | ์ค๋ฐ๊ฟ, > ์ค๋ฐ๊ฟ ๋ฌด์
# 0409 - ๊ฐ๋ฐ์์ ํ์๊ณต๋ถ
- ์ง๊ธ ๋ค๋๊ณ ์๋ ํ์ฌ์์ ํ๋ ์ผ์ ์ํ๊ธฐ ์ํด์ ๋ ธ๋ ฅํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ๊ณต๋ถ๋ค.
- ํ์ฌ์์ ํ๋ ์ผ๊ณผ ๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถํ๋ ๋ด์ฉ์ ์ต๋ํ ๊ทผ์ ์ํค๊ธฐ ์ํด์ ๋ ธ๋ ฅํ๋ผ.
- ์๋ก์ด ๊ธฐ์ ์ ์ตํ๋ ์ต์ ์ ๋ฐฉ๋ฒ์ ์ค์ค๋ก ๋ฌธ์ ๋ฅผ ์ ์ํ ๋ค์, ์๋ก์ด ๊ธฐ์ ์ ์ด์ฉํด์ ๊ทธ ๋ฌธ์ ๋ฅผ ํ์ด ๋ณด๋ ๊ฒ์ด๋ค. ์ฑ ์ ์ฝ๊ฑฐ๋ ๋์์์ ๋ณด๋ ๊ฒ์ ๊ทธ๋ณด๋ค ํ์์์ค์ ๋ฐฉ๋ฒ์ด๋ค.
- ์ ๊ธฐ์ ์ ์ซ๋ ๋ฉ๋๊ธฐ๊ฐ ๋์ง ๋ง๋ผ.
- ๋ชจ๋ ๊ฒ์ ์์์ผ ํ๋ค๋ ๊ฐ๋ฐ์ ๋ฒ๋ ค๋ผ. ๋ฏธ๋ฆฌ ํ๋ํ๋ ์ง์์ 99%๋ ๋ฌด์ฉ์ง๋ฌผ์ด๋ค. ํ์ํ ๋ ํ์ํ ๊ธฐ์ ์ ์ตํ ์ ์๋ ๊ฒ์ด ๋ฅ๋ ฅ์ด๋ค. ๊ทธ ๋ฅ๋ ฅ์ ํค์๋ผ.
- ์ด์ํ ๋๋ผ์ ์๋ฆฌ์ค์ ๋์ค๋ ํ ๋ผ๊ตด์ ํผํด๋ผ. ์นดํ ๊ณ ๋ฆฌ์ด๋ก ์ ์์์ผ ํจ์ํ ์ธ์ด๋ฅผ ์ธ ์ ์๋๊ฒ ์๋๊ณ , ์ ํ๋์ํ์ ๊ณต๋ถํด์ผ ๋จธ์ ๋ ๋์ ํ ์ ์๋๊ฒ ์๋๋ค. ํ ๋ผ๊ตด์ ๋น ์ ธ์ ํ์์ด ๋ค์ด๊ฐ๋ค๋ณด๋ฉด ๋น๋ณธ์ง์ ์ธ ๊ณต๋ถ์ ์๊ฐ์ ํ๋นํ๊ฒ ๋๋ค.
- ๊ฒ๋ง ํฅ๋ ๊ฒ์ ๊ฒฝ๋ฐํ์ง๋ง ํ ๋ผ๊ตด์ ๋น ์ง๋ ๊ฒ์ ์ฐ๋งคํ๋ค. ๋ ์ฌ์ด์ ์ ๋นํ ์ง์ ์์ ๊ท ํ์ ์ก๋ ๊ฒ์ด ๊ฐ๋ฐ์์ ๋ฅ๋ ฅ์ด๋ค.
- ๋จธ๋ฆฌ์ ๋ค์ด์ค์ง ์๋ ์ด๋ ค์ด ๊ฐ๋ ์ด๋ ์ฉ์ด๋ ์ํฌ๋ฆฌ ์๊ฐ์ ์ด์ฉํด์ ๋ฐ๋ณต์ ์ผ๋ก ์ผ๊ณ ์๊ธฐํ๋ผ. ๋์ค์ ํฐ ๊ทธ๋ฆผ์ ๊ณต๋ถํ ๋ ๋์์ด ๋๋ค.
- ํญ์ ๊ฒธ์ํด์ผ ํ์ง๋ง ๋์์ ์๊ธ์ฌ์ ๊ฐ์ ธ๋ผ. ๊ทธ๋๊ฐ ์ง๊ธ ์์ฑํ ์ฝ๋, ์ง๊ธ ์ฝ์ ์ฑ , ์ง๊ธ ๊ณต๋ถํ ๋ด์ฉ์ ๊ทธ๋๋ณด๋ค ์ ์๋ ์ฌ๋์ ์ง๊ตฌ์์ ์๋ค. ๋ชจ๋ ๊ฑธ ์๊ณ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๋ค๋ฅธ ์ฌ๋๋ค๋ ๊ทธ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ถ์ํดํ๊ณ , ์์ถ๋๊ณ , ๋๋ ค์ํ๋ฉด์ ์ด์๊ฐ๊ณ ์๋ค. ์๊ธ์ฌ์ด๋ ๊ทธ๋ฐ ํ์ธ์ ๋๊ณ ์ ํ๋ ๋ง์๊ฐ์ง์ ๋ค๋ฅธ ์ด๋ฆ์ด๋ค.
์๊ธ:๊ฐ๋ฐ์์ ํ์๊ณต๋ถ (opens new window)
# 0410 - ๋ด ํฌํธ ํด๋ฆฌ์ค๊ฐ ์๋ฅํ๋ฝ์ธ ์ด์
# ํ๋ก์ ํธ ์๊ฐ์ง๋จ
์์ผ๋ก ๋ฐฉํฅ์ฑ์ ๋ํ ์ง๋จ
- ์ค์ ์๋น์ค๋ฅผ ๊ณต๊ฐ์ ์ผ๋ก ๋ฐฐํฌํ๊ณ ์ด์ํด๋ณด๋ ๊ฒฝํ
- ์ ์ ์ ํผ๋๋ฐฑ์ ๋ฐ๋ผ ์ฑ๋ฅ/์ฌ์ฉ์ฑ์ ๊ฐ์ ํ๊ณ ์ ๊ท ๊ธฐ๋ฅ์ ์ถ๊ฐ
- ๋ฐ๊ฒฌ๋๋ ๋ฒ๊ทธ์ ๊ฐ์ ์ฌํญ์ ์ ๋ฆฌํ๊ณ ์์ธ ์ด์๋ค์ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌ
- ์ฝ๋๋ฅผ ์ง์์ ์ผ๋ก ๋ฆฌํํ ๋งํ๊ณ ๋์์ธํจํด์ ์ ์ฉํ๊ธฐ
- ์์ ์๋์์ ๋ ์ข์ ์ค๊ณ์ ๋ ๋น ๋ฅธ ๊ฐ๋ฐ ์ฌ์ด์ ํธ๋ ์ด๋์คํ๋ฅผ ๊ณ ๋ฏผํด๋ณด๊ธฐ
- ๋ฐ๋ณต๋๋ ์์ ๊ณผ ๋ฐฐํฌ์ ์๋ฐ๋๋ ์์ ๋ค์ ์๋ํํด๋ณด๊ธฐ
- ์ธ์ด๋ ํ๋ ์์ํฌ์ ๊ธฐ๋ฅ๋ง์ผ๋ก ๊ตฌํ ํ ์ ์๋ ๊ฒ๋ค์ ์ง์ ๊ตฌํํด๋ณด๊ธฐ
- ๋ด๊ฐ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ ์์ํฌ์ ๋ฌธ์ ์ ์ด๋ ํ๊ณ๋ฅผ ๊ฐ์ ํด๋ณด๊ธฐ
- ์ฝ๋๋ ์ ํ์ ํ๋ฆฌํฐ๋ฅผ ์ ์งํ๊ธฐ ์ํ ๋ถ์ํด์ด๋ ํ ์คํธํด์ ๋์ ํด๋ณด๊ธฐ
- ํ์ธ๊ณผ์
# ๊ฒฐ๋ก
์ฌ๋ฌ ์ธ์ด์ ํ๋ ์์ํฌ๋ฅผ ๊ธํ๊ฒ ์ตํ์ ์ด๊ฑฐ์ ๊ฑฐ ํ ์ดํ๋ก์ ํธ๋ฅผ ์ฐ์ด๋ด๋ ๊ฒ๋ ์ข์ง๋ง, ํ๋ก์ ํธ๋ฅผ ์ค์ ๋ก ์ด์ํด๋ณด๊ณ ๊ณ ๋ํ ํ๊ณ ํ์ฅํด๋๊ฐ๋ ๊ฒฝํ๋ ์ค์ํ๋ค. ์ด๋ฅผ ์ํด ์๋ฐ๋์ด์ผ ํ ์์ ๋ค์ ์ง์ ์์๊ฐ๋ฉฐ ๋์ ํด๋ณด๋ ๊ฒฝํ๋ ํ์ํ๋ค.