25-03-10
๐ Daily Reportโ
๐ ํ๋ก์ ํธ ์ํฉโ
2์๊ฐ ๋ฐ ์ค๋ค. ๋ ์ด์์ ์ค๋ช
์ ์๋ตํ๋ค.
ํผ๊ณคํจ๊ณผ ๋ณ๊ฐ๋ก, ์ง๊ธ ์ฝ๋ ์์ง๋ฉด ์ง์ง ๋งํ ์๋ ์๋ค๋ ์๊ฐ์ด ๋๋๊น ์ด์ธ์ ์ธ ์ง์ค๋ ฅ์ด ๋์ค๊ณ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ํฌ์ธํธ๋ก ๋๋ฆด ์ ์๋๊ฑด ๋ค ๋๋ ค์, ์นดํ์นด / ์ ๋ ์นด ์ ๋ถ ํด๋ผ์ฐ๋ ์๋ฒ๋ก ๋๋ฆฌ๊ณ ๋ก์ปฌ์ ์ต๋ํ ์์์ ์๋ผ๋ ค ํ๊ณ ์๋ค.
Java๋ก ๊ฐ๋ฐ๋ IDE์์ Java๋ก ๊ฐ๋ฐ๋ ํ๋ ์์ํฌ๋ฅผ ๋๋ฆฌ๊ณ ๊ฑฐ๊ธฐ์ ํฌ๋กฌ๊น์ง ํญ ๋ญ๋ญํ๊ฒ ๋์๋จ๋ค?
8GB๊ฐ ๊ณ ์ ์ข ๋ฒ๋ฒ ๊ฑฐ๋ฆฌ๋ ๊ฒ์ผ๋ก ๋๋จ์ ๊ฐ์ฌํด์ผ ํ๋ค;
์ ๋ฐ ์ฌํด๋ ๋ ธํธ๋ถ RAM ํ์ฅ์ ํ์.
๐ @Value
์ Constructor ์ฃผ์
โ
CoolSMS๋ก ๋ฌธ์ ๋ฐ์ก ๊ธฐ๋ฅ ๊ตฌํํ๋ค๊ฐ ๋ค์ ํ๋ฒ ์๊ธฐํ๊ฒ ๋ ๋ถ๋ถ์ธ๋ฐ,
๋ค์๊ณผ ๊ฐ์ด ์์ฑ์ ์ฃผ์
์ ํ๋ฉด @Value
๋ก ์ฃผ์
ํ๋ ค๋ ๊ฐ๋ค์ ์์ฑ์ ์ฃผ์
์์ ์ null์ด๋ค.
๊ทธ ์ด์ ๋, ์ด ๋ ํผ๋ฐ์ค์์ ๋ต์ ์ฐพ์ ์ ์๋ค.
Spring won't inject the properties' values until the object is fully instantiated.
์ ๋ฆฌํ๋ฉด, ์์ฑ์ ํธ์ถ -> ์ธ์คํด์คํ -> property ๊ฐ ์ฃผ์ ์์ผ๋ก ์ผ์ด๋๊ธฐ ๋๋ฌธ์ด๋ค.
@Component
public class SmsUtil {
@Value("${coolsms.apiKey}")
private String SMS_API_KEY;
@Value("${coolsms.secret}")
private String SMS_SECRET;
@Value("${coolsms.sender}")
private String SMS_SENDER; // ๋ฐ์ ๋ฒํธ
@Value("${coolsms.enable}")
private boolean SMS_ENABLED; // false๋ฉด ๋ก๊ทธ๋ง ์ฐํ๊ณ ์ค์ ๋ฌธ์ ์ ์ก์ ์คํต๋จ
// ...
// CoolSMS API ์ค์
private final DefaultMessageService messageService;
public SmsUtil() {
this.messageService = NurigoApp.INSTANCE.initialize(SMS_API_KEY, SMS_SECRET, "https://api.coolsms.co.kr");
}
// ...
}
๋ฐ๋ผ์ ์๋จ์ ์ฝ๋์์๋ ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๋ฅผ ๋ง๊ฒ ๋๋ค.
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.ssginc.commonservice.util.SmsUtil]: Constructor threw exception
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:222)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:122)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1337)
... 50 common frames omitted
Caused by: java.lang.NullPointerException: Parameter specified as non-null is null: method net.nurigo.sdk.NurigoApp.initialize, parameter apiKey
๊ทธ๋ฌ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ์์ฑ์๋ฅผ ์์ ํด์ผ ํ๋ค.
@Autowired
public SmsUtil(@Value("${coolsms.apiKey}") String SMS_API_KEY, @Value("${coolsms.secret}") String SMS_SECRET) {
this.messageService = NurigoApp.INSTANCE.initialize(SMS_API_KEY, SMS_SECRET, "https://api.coolsms.co.kr");
}
๐ ๋ฌธ์ ๋ฐ์ก ๊ธฐ๋ฅ ๊ตฌํ์ ์ฃผ์์ฌํญโ
๋ฒํธ๋์ฉ ๋ฌธ์์ฐจ๋จ์๋น์ค์ ๊ฐ์ ๋์ด ์์ ์ ์์.........
ํด์ง ์ ์ฒญ ๋ฃ์ด๋ ๋ฐ์๊น์ง ์ต์ 1~2์ผ ๊ฑธ๋ฆฐ๋ค๊ณ ํ๋ ์ง์ ์ ๊ธํ๊ฒ ๊ตฌํํ์ง ๋ง ๊ฒ.
๐ ์ธ์ฆ ์ฑ๊ณตํ๋ฉด, ๊ทธ ๋ค์์?โ
๋ณด์์ ์ธ ์ธก๋ฉด์ ์๊ฐํด๋ณด๋ฉด, ์ฌ์ฉ์๊ฐ ์ด๋ฉ์ผ ์ธ์ฆ ๋ฒํธ ์ธ์ฆ๊น์ง ๋ง์ณค๋๋ฐ
๊ทธ ์ํ์์ ํ์ด๋ก๋๋ฅผ ์กฐ์ํด์ ํ์๊ฐ์ REST ์์ฒญ์ ๋ณด๋ผ ์๋ ์๋ค.
๋ฌด์จ ์๋ฆฌ๋๋ฉด, ์ด๋ฉ์ผ ์ธ์ฆ ์ฑ๊ณต -> ํด๋ํฐ ์ธ์ฆ ์ฑ๊ณต -> ๊ฐ์ ๋ฒํผ ํ์ฑํ๋จ -> ๊ฐ์ ํ์ด๋ก๋ ์กฐ์ํ์ฌ API request
์ด๋ด ์๋ ์๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ์ง์ง ๊ฒฌ๊ณ ํ ์์คํ ์ ๊ตฌ์ํด๋ณธ๋ค๋ฉด,
ํ์๊ฐ์
ํ์ด์ง ์ง์
-> ๊ณ ์ ์ฝ๋์ JWT ๋ฐ๊ธํด์ Set-Cookie (30๋ถ ํ ๋ง๋ฃ)
์ด๋ฉ์ผ ์ธ์ฆ ์ฑ๊ณต -> JWT์ ํด๋น ์ด๋ฉ์ผ ๊ธฐ๋กํด์ Set-Cookie
ํด๋ํฐ ๋ฒํธ ์ธ์ฆ ์ฑ๊ณต -> JWT์ ํด๋น ํด๋ํฐ ๋ฒํธ ๊ธฐ๋กํด์ Set-Cookie
์ด๋ฐ ์์ผ๋ก ๊ฐ์ผ ํด๋ผ์ด์ธํธ ์ธก์ ๋ณ์กฐ ์ํ์ฑ์ ์์ฒ ์ฐจ๋จํ ์ ์์ง ์์๊น ์ถ๋ค.
๐ JPA ๋ฉ์๋๋ก ์ค๊ณํ ์ด๋ธ์ id ์ ๊ทผํ๊ธฐโ
์นดํ ๊ณ ๋ฆฌ ํํฐ ๋ชฉ๋ก ์กฐํ ๊ตฌํํ๋ค๊ฐ ํน์๋ ์ถ์ด ์๋ํด๋ดค๋๋ฐ, ๋๋๊ฒ๋ ์๋ํ๋๋ผ.
์๋ FK ๊ด๊ณ๋ underscore์ Pascal case๋ก ๋ํ๋ด๋ ๋ฉ์๋ ๋ค์ด๋ฐ ์ปจ๋ฒค์ ์ด ์๋๋ฐ, ์ค๊ณ ํ ์ด๋ธ์ด ์์ด๋ ์ด๊ฑธ ๊ทธ๋๋ก ๋ฐ๋ฅด๋ ๊ฒ ๊ฐ๋ค.
์ฐธ๊ณ ๋ก, Store์๋ storeCategoryList
๋ผ๋ ์ค๊ณํ
์ด๋ธ๊ณผ์ @OnetoMany
๋งคํ๊ด๊ณ๊ฐ ์๊ณ ,
์ค๊ณํ
์ด๋ธ์ธ StoreCategory
์๋ category
๋ผ๋ @ManyToOne
๋งคํ๊ด๊ณ๊ฐ ์๋ค.
๊ทธ๋ฆฌ๊ณ Category
์ PK ํ๋๋ช
์ categoryId
์ด๋ค.
๋ฐ๋ผ์ ๋ค์์ ๋ค์ด๋ฐ์ Store์ categoryList์ category์ categoryId๋ฅผ WHERE์ ๋ก ์ก์ ๋งค์นญํ๊ณ , LIMIT์ผ๋ก ํ์ด์งํ๋ ์ฟผ๋ฆฌ๊ฐ ๋๋ค(!)
public interface StoreRepository extends JpaRepository<Store, Long> {
Page<Store> findAllByStoreCategoryList_Category_CategoryId(Long categoryId, PageRequest pageRequest);
}
๐ ์ด์ฉ๋ค๋ณด๋ SPAโ
ํ์ ์คํ ์ด ์นดํ ๊ณ ๋ฆฌ ๋ชฉ๋ก ์กฐํ๋ฅผ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋๋ฐ
๊ทธ๋ฌ๋ค๋ณด๋ ์ ์ฒด ๋ชฉ๋ก ์กฐํ ๋ฐฉ์์ด๋ ๋ฌ๋ผ์ history๊ฐ ์ข ๊ผฌ์ด๋ ๊ฒ ๊ฐ๋ค.
demo์๋ ๋ฌธ์ ์์ง๋ง ๋ง์์ ์๋ค์ด์ ์ถํ์ ๋ณด์๋ฅผ ์ข ํด์ผ๊ฒ ์...
DOM์ JS ๊ฐ์ฒด๋ก ๋ค๋ฃจ๋๊ฒ ์์ ์ ์ธ ๊ฒ ๊ฐ์๋ฐ ์๋ ํ๊ทธ๋ ๋ง๊ณ ํด์, ํ ์์ ์์ ๊นก ๋ฌธ์์ด ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐํผ ํด๋ณด์ธ๋ค.
ํนํ ํ ์ด๋ธ ๋ค๋ฃฐ ๋ ์ข๋๋ผ~(?)