Posts
Q&A
(์๋ฃจ์ ์์ )'tsyringe' Error: TypeInfo not known for "ํด๋์ค๋ช "
์๋ฃจ์ ์์ ๋ณธโ ๊ธฐ์กด ๋๊ธ์ ์ ๋ฆฌ๋ ๋ด์ฉ์ด ์ ์ ์น ์์ ์ญ์ ํ, ์ค์ ๋์ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค์ ์ ๋ฆฌํฉ๋๋ค.๋ค์์ ์๋ ค์ง OOP ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ํจํด(ISP)์ TS๊ธฐ๋ฐ tsyringe ์์ ์ถ์ํด๋์ค๋ฅผ InjectionToken ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. updates: 24-09-19: InjectionToken ํ ๋ณํ ์, as InjectionToken ์์ `as InjectionToken ๋๋ as unknown as InjectionToken ์ผ๋ก ๋ณ๊ฒฝ 1. extends AbstractClass: ์ถ์ํด๋์ค๋ฅผ ์์,ํ์ฅํฉ๋๋ค.abstract class Super {} class Impl extends Super {} 2. ๊ตฌํ์ฒด ํด๋์ค์ @registry([..]) ์ถ๊ฐ@singleton() // โ @registry ์ ์ง์ ์ฐ๊ด๋ ๋ถ๋ชจํด๋์ค(์ถ์์ฒด)๋ฅผ ์ง์ ํด์ผ @inject ๋ฅผ ํตํด ์ฃผ์ ์ด ๊ฐ๋ฅํด์ง๋๋ค. @registry([ { // ๐ก tsyringe ๋ ์ถ์ํด๋์ค ๋ฑ๋ก์ ์ง์ํ์ง ์์ ํ์ ๋ฏธ์ค๋งค์น ์ ๋ฌ ๋ฐ์. // ํด๊ฒฐ์ unknown as InjectionToken ์ผ๋ก ๊ฐ์ ์ผ์คํ ํ ๋ฑ๋ก์ด ๊ฐ๋ฅํจ. // 1์ token: Super as InjectionToken, // ๋๋ 2์ token: Super as unknown as InjectionToken, useClass: Impl, }, ]) class Impl extends Super {} 3. ์ฌ์ฉexport class ConstructorInjectionWithTsyringe { constructor( @inject(Impl) readonly sup: Super, ) {} } ๋์ํ์ธ์๋๋ ์ง๋ฌธ์ ์์ค์ฝ๋ ๋๋ฒ๊น ์ํฉ์์ ์บก์ณ๋ ์ด๋ฏธ์ง์ ๋๋ค. ์ถ์ํด๋์ค HttpClient ํ์ ๋งด๋ฒ๋ณ์์, ๊ตฌํ์ฒด AxiosHttpClient ์ธ์คํด์ค๊ฐ ์ ์ ์ฃผ์ ๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค.(์ฌ์ง)
- 0
- 2
- 629
Q&A
ValidationPipe DTO ๋ณํ ๋์ JS Object ๋ก ๋ณํ๋๋ ์ด์
NestJS ๊นํ ์ด์ ๊ฐ์คํด์ ํ์ฐธ ์์ค์ฝ๋ ๊ณ ์น๋ค๋ณด๋, ์ด์ด์์ด ํด๊ฒฐ๋์๋๋ฐ์,๋ฌธ์ ๊ฐ ํ์ ์คํฌ๋ฆฝํธ ์ ์๊ณ , ์์ธ์ ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ ์์ ์ import/export ํ์ผ๊ด๊ณ๊ฐ ๊ผฌ์๋ค ๋ผ๊ณ ๋ณผ์๋ฐ์ ์๊ฒ ์ต๋๋ค.DTO ํด๋์ค ํ์ผ ์์น๋ฅผ ์ฎ๊ธฐ๋ค๋ณด๋ index.ts ๋ฅผ ์์ ํ๊ฒ ๋์๋๋ฐ, ์ด๊ฒ ๋๋ฌธ์ด๋ผ๊ณ ์ถ์ธก๋์๊ณ ,ํ์คํ ๊ฒ์ ํด๋น Request ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๊ณณ์์ tsconfig.json ์ path alias ๋ก ๋ช ์๋ ๊ฒฝ๋ก๋ฅผ ์ง์ ์๋๊ฒฝ๋ก๋ก ๋ฐ๊ฟ์ฃผ๋, ์ ์ ์๋ํ๊ธฐ ์์ํ์ต๋๋ค.
- 0
- 2
- 404
Q&A
์บ๋ฆญํฐ ์ด๊ธฐ์์น ์ ์ด๋์ `style.left` ๋์ `translateX` ๋ก ํด๋ณด๋ ค๋๋ฐ ์ด๋ ต๋ค์..
ใ ใ ์ง๋ฌธํ๊ธฐ ๋ช์ผ ์ ๋ถํฐ ์ญ ๊ณ ๋ฏผํ๋ค ๋ด๋ฆฐ๊ฒฐ๋ก ์ธ๋ฐ์,transform ์์ฒด๊ฐ 2D ๊ธฐ๋ฐ API ๋ผ์ ๊ทธ๋ฐ์ง ์์ 3D ๊ณต๊ฐ ๊ตฌ์ฑ์ ์ํ ํํ์์ฒด๊ฐ ํ๊ณ๊ฐ ๋ง์๊ฒ ๊ฐ์ต๋๋ค. ์ ๊ฐ ๊ทผ ๋ช์ผ๊ฐ ๊ฐ์ฅ ํผ๋์ค๋ฌ์ ๋ ๋ถ๋ถ์..์ฒซ๋ฒ์งธ- rotate ์ ์ขํ์ถ๊น์ง ํ์ ๋จ๊ทธ๋ํฝ์นด๋ ๊ฐ์๋ ฅ ์ง์์ ๋ฐ๊ธฐ์ํด left top right bottom ์์ด translate ๋ง ๊ฐ์ง๊ณ ์ ์ฉ์ ํด๋ณด๋ค ์์๋๋ฐ์,rotate -90 deg ๋ฅผ ์ ์ฉํ๋ฉด, ์ขํ์ถ ๊น์ง ๋์๊ฐ๋ฒ๋ ค์translateX( ? ) ๋ฅผ ์ ์ฉํ๋ ค๋ฉด๋์๊ฐ๋ฒ๋ฆฐ ์ถ๋๋ฌธ์, ๋์์ด Z ์ถ์ผ๋ก ์ด๋์ ํ๋๊ตฐ์.. ๋์๊ฐ ์ถ์ ๋ฐ๋ผ ์ด๊ฒ์ ๋ค์ if ๋ถ๊ธฐ๋ก ๋๋ ์ translateXYZ ๋ก ๊ฐ๊ฐ ๊ฐ์ ์ฉ์ ํ๋ ค๊ณ ํ์ผ๋,์ด๋ฐฉ๋ฒ ๋ํ ์ ์ ํ ๋ฐฉ๋ฒ์ธ์ง ๊ณ ๋ฏผ์ด ๋์์ต๋๋ค. ๋๋ฒ์งธ- translateXYZ ๋ก ์ด๋ ํ, rotate ๋๋ฉด, ๊ทธ์๋ฆฌ์์ rotate ๋์ง์๊ณ , translate3D(0, 0, 0) ์ ๊ธฐ์ค์ผ๋ก ํ์ ์ ํด์ ๋์์ด ํ๋ฉด์์ ์ฌ๋ผ์ง๋๋ค.์ฆ, left ๋ top ๊ฐ์ ์์ฑ์ผ๋ก๋ง ์ขํ์ด๋์ด ๊ฐ๋ฅํ๋จ ๊ฒ์ ๋๋ค.๋ํ z ์ถ์ผ๋ก ์ด๋ํ๋ ค๋ฉด ์์ "์ฒซ๋ฒ์งธ" ์ฒ๋ผ rotate ๊ฐ ๋ ์ํ๋ก x ์ถ์ ์ด๋ํ๋ฉด ๋๋,๊ธฐ์ค์ถ์ด ์ด๋ํ๋๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์, left ๋ top ์ ์ด์ฉํด์ผ ํฉ๋๋ค.๋๋ฌธ์, ์ด๋ฐฉ๋ฒ ๋ํ 3D ๊ฐ์์ ์ง์๋ฐ์ง ๋ชปํด ์ ์ ํ์ง ์์ต๋๋ค.Canvas ๊ธฐ๋ฐ์ด ์๋์ํ์์ 3D ๊ณต๊ฐ๊ตฌํ์ ์ ๋๋ก ํ๋ ค๋ฉด3D Matrix 4x4 ํ๋ ฌ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐํ์ฌ ์ ์ฉ์ด ๋์ด์ผ ํ๋ ๊ฒฐ๋ก ์ ๋ค๋ฌ์์ต๋๋ค.์ด๊ฒ์ ํ๋ ค๋ ์๊ฐ์ ์ธ ์์๊ฐ ๋๋ฌด ์ฌํด ๋จ์ํ ๋๋ด๋ ค๊ณ ์์ ์ ๊ฐ์ left ์์ฑ์ผ๋ก ์ด๋๊ฐ์ ์ ์ฉํ ๋ง๋ฌด๋ฆฌ ์ง์์ต๋๋ค. ํน์ ํ๋ฆฐ ๋ถ๋ถ์ด ์๋ค๋ฉด, ์กฐ์ธ ๋ถํ๋๋ ค๋ ๋ ๊น์?๊ทธ๋ฆฌ๊ณ ํน์ ์ฒซ ์ง๋ฌธ์ ํด๊ฒฐ ํํธ๋ฅผ ์ป์ ์ ์์์ผ๋ฉด ์ข์๊ฒ๊ฐ์์.
- 0
- 1
- 521
Q&A
package.json ์ธ์ ์ฌ๋ฌ *.config.* ํ์ผ์ ํน์ (๋ด/์ธ) ํด๋์์ ๊ด๋ฆฌํ๋๋ก ๊ฒฝ๋ก ์ค์ ์ด ๊ฐ๋ฅํ ๊น์?
๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค. ์ฃผ์ ๋ต๋ณ์ ์ ๋ฆฌํด ๋ณด์์ต๋๋ค.package.json ์ ์ ์ธํ์ฃผ๋ณ *.config.* ํ์ผ ๋ค์ Lib ๊ฐ xxx.config.* ์ ๋ํ `๊ฒฝ๋ก ์ค์ ์ต์ `์ด ์ ๊ณต๋๋ค๋ฉด ๊ฐ๋ฅ.( Lib ๋ง๋ค ์บ๋ฐ์บ )2. ๊ฒฝ๋ก ์ค์ ์ ๋ณดํต ์ค์ ํ์ผ ์์ ์์นํ๋, `Config1`๊ฒฝ๋ก->> `Config2`๊ฒฝ๋ก->> `Config3`์ ์ฐ๊ด๋ ๊ฒฝ๋ก์ค์ ์ ํํ๋ก๋ ๊ฒฝ๋ก์ค์ ์ ํ ์๋ ์๋ค.(์ถ์ธก) package.json ์๋ ์ค์ ํ ๋ฐฉ๋ฒ์ด ์๋ค.๊ฒฐ๋ก : root ์์์ config ๋ค์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ด๋ก์.์ ๊ฐ ์ ์ดํดํ๊ฑด์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค..ใ
- 0
- 2
- 638
Q&A
์๋ ํ์ธ์? ์ง๋ฌธ ํ๋ ๋๋ฆด๊ฒ์.
`์น ๊ณ์ธต ์ปดํฌ๋ํธ` ๋๋, ์ด์ ์ฐ๊ด๋`Library ๋ชจ๋` ๋ชจ๋๋ฅผ ์์ฐ๋ฅด๋ ํํ์ด `์น(Spring Web ๋ชจ๋) ๊ด๋ จ` ์ด๋ผ๋ ํํ์ด๋ผ๊ณ ์ดํดํ์ต๋๋ค. ์ ๋ฐฐ์ฐ๊ณ ๊ฐ๋๋ค.
- 0
- 3
- 399
Q&A
jpa๋ก ์ค๊ณ ์
์ง๋๊ฐ๋ ์ฐจ์ ํ์ ๊ตฌ๋ถ์ ๋ํด ์งง์๊ฒฌํด๋ฅผ ์ ๊น ์ ์ด๋ด ๋๋ค.attachFile ๊ณผ imageFile ์ด๋ ์ด๋ฆ์ ๋ชจ๋ File ๋ฒ์ฃผ์ ์ํ๋ฏ๋ก, File ์ํฐํฐ ๋ผ๋ ํฐ ๋ฒ์ฃผ์์ Type ์์ฑ์ผ๋ก ๊ตฌ๋ถํ๋ฉด ์ด๋จ์ง ์๊ฐํฉ๋๋ค.image ๋ File ์ ์ข ๋ฅ ๋ฅผ ๋ํ๋ด๊ณ , attach ๋ ์ฉ๋๋ฅผ ๋ํ๋ด๋ฏ๋ก, `ํ์`์์ฑ๊ณผ, `์ข ๋ฅ`์์ฑ์ผ๋ก ๋๋์ด ๊ตฌ๋ถ์ง์ด ๋์ผ๋ฉด ์ด๋จ๊น ์๊ฐํฉ๋๋ค.๋์์ด ๋์ จ์ผ๋ฉด ์ข๊ฒ ๋ค์
- 0
- 2
- 364
Q&A
์ด๋ฒ ์์ ์์ Config ํด๋์ค์ @Configuration ์ ์ ์ฉํ๋, Proxy ๋ํ/๋ฑ๋ก์ด ์๋๋๊ฒ ๊ฐ์ต๋๋ค.
@SpringBootTest ๋ด์ innerClass @Configuration, AOP์ค์ - ์ ๋ฆฌ ์ ๊ฐ ์๋ ๋ฒ์๋ด์์ ๊ฐ์ฌ๋ ๋ต๋ณ์ ํ ๋๋ก ์ ๋ฆฌํ์ต๋๋ค. @SpringBootTest ์, @Configuration ์ค์ ์ฃผ์์ฌํญ @SpringBootTest ์์ฑ์, ๋ด๋ถ ํด๋์ค์ @Configuration ์ ์ ์ธ ํ๋ค๋ฉด, ๊ธฐ์กด์ ์์ฑ๋ ์ด๋๊ฐ์ ์์กด์ฑ์ ์ฐพ์์ ์๋ค๊ฑฐ๋, ์ ์๋ํ๋ ๊ธฐ๋ฅ์ด ๊ฐ์๊ธฐ ์๋์ ์ํ๋ ๊ฒ์ ๊ฒฝํํ ๊ฒ์ด๋ค. ์ด ์ค์ ์ผ๋ก ์๊ธฐ๋ ๋ถ์ํจ๊ณผ๋ Spring ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์ ๋ฐ, `src/main`๋ชจ๋์ ์ค์ ์ ์ฒด๊ฐ ๋ฌด์๋๋ค. ์ด์ ๋, ๋ด๋ถ ํด๋์ค์ ์ ์ธ๋ @Configuration ํด๋์ค ๊ฒฝ๋ก๊ฐ ์๋์ผ๋ก ์ปดํฌ๋ํธ์ค์ผ ๊ธฐ๋ณธํจํค์ง๋ก ์ง์ ๋๊ธฐ ๋๋ฌธ. ๋ง์ฝ `src/main`๋ชจ๋์ AOP ์ค์ ์ ํด๋์ ์ํ๋ผ ๊ฐ์ ํ๋ฉด, @Configuration ์ค์ ๋๋ฌธ์, ์คํ๋ง ๋ถํธ๋ฅผ ํตํ AOP๊ด๋ จ ์ค์ ํด๋์ค ๋ค ๋ง์ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋์ง ์๊ฒ ๋๋ค.๊ฒฐ๊ตญ, AOP ์์ฒด๊ฐ ๋์ํ์ง ์๊ฒ ๋๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด @SpringBootTest ์์ ์์๊ธฐ๋ณธ Spring-boot ์ค์ ์ ์ ์งํ๋ฉฐ( AOP ์ค์ ํฌํจ) ์ถ๊ฐ์ ์ผ๋ก ํ ์คํธ์ฉ @Configuration ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์? ๋ด๋ถ ์ค์ ํด๋์ค์ @EnableAspectJAutoProxy ์ ์ธ ๋ฐ, ๊ธฐ์กด๋ชจ๋์ basePackage ์ค์ ๋ฐฉ์: ์ด ๋ฐฉ์์, ๊ธฐ์กด`src/main`๋ชจ๋์ค์ ๋ฐ๋ก, AOP ์ค์ ๋ฐ๋ก, ๊ฐ๊ฐ ํด์ฃผ์ด์ผ ํ๋ฏ๋ก ๋ฒ๊ฑฐ๋กญ๋ค. `์ถ์ฒ!` - @Configuration โถ @TestConfiguration ๋ณ๊ฒฝ(์นํ)๋ด๋ถ ์ค์ ํด๋์ค์ @TestConfiguration ์ ์ธ์ ํตํด, ๊ธฐ์กด `src/main`๋ชจ๋์ Spring-boot ์ค์ ์ ํ์ฑํํ๋ ๋ฐฉ์.: @SpringBootTest `src/main`์ ์ฒด๋ชจ๋์ค์ + ํ ์คํธ Config ํํ๋ก, ๊ธฐ์กด์ค์ ๊ธฐ๋ฐ + ์ถ๊ฐ์ค์ ์ด ๊ฐ๋ฅํ๋ค. ์์ ํ ๋ถ๋ถ์ ๋ํด ๋ต๊ธ ๋จ๊ฒจ์ฃผ์๋ฉด ๊ฒํ ํ, ๋ฐ์ํ๊ฒ ์ต๋๋ค.
- 0
- 4
- 1K
Q&A
์ด๋ฒ ์์ ์์ Config ํด๋์ค์ @Configuration ์ ์ ์ฉํ๋, Proxy ๋ํ/๋ฑ๋ก์ด ์๋๋๊ฒ ๊ฐ์ต๋๋ค.
๊ณ ๋ง์ต๋๋ค ๊ฐ์ฌ๋! 1. ์คํ๋ฐฉ๋ฒ ํ๋ก์ ํธ ๋ชจ๋ ํด๋๊ตฌ์กฐ 03-Spring-core-principles-advanced advanced aop proxy 2. ๋ฌธ์ ํ์ธ ๋ฐฉ๋ฒ ํ ์คํธ ํ์ผ ์ ๋๋ค. : ํ ์คํธํ์ผ์ ์คํํด๋์ ์ํ๋ก ๋ณด๋ด๋๋ ธ์ง๋ง์๋ณด์ด์๋ฉด, ์๋ ๊ฒฝ๋ก๋ฅผ ํตํด Test ๋ฅผ ์คํํ ์ ์์ต๋๋ค. src/test/java/hello.aop.pointcut_expression.AtTarget_AtWithin_Test.java ์๋๋ ํด๋น ํ ์คํธ ํ์ผ ๊ฒฝ๋ก ์บก์ณ์ ๋๋ค.(์ฌ์ง)
- 0
- 4
- 1K
Q&A
Bean ์ ํน์ Application...Event ๋ฐ์ ํ, ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ด ๊ถ๊ธํฉ๋๋ค
๊ฐ์ฌ๋.์ ํ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐ์ ๋ดค์ด์..@Bean ์ด๋, Data INSERT ์์ ์ ๋ณ๊ฒฝํ๋ ๊ฒ์๋ฌด๋ชจํ์ง๋ง, ํ์ตํจ๊ณผ๋ ๋๋จํ์ต๋๋ค ใ ใ ใ Data ๋ฅผ reload ํ๋ ๋ฉ์๋๋ฅผ Filter ๋ด๋ถ์ ์์ฑํ๊ณ / App..ReadyEvent ํธ๋ค๋ฌ์์ ํธ์ถ ํ๋ ๊ฒ์ผ๋ก ํด๊ฒฐ๋์์ต๋๋ค. ์ง๋ฌธ๊ณผ ์๋ฌธ์๋ต์ผ๋ก, ์ค๋ง๋ฆฌ๋ฅผ ์ฐพ์๊ฑฐ ๊ฐ์ ์ฐธ ๋คํ์ธ๊ฒ๊ฐ์ต๋๋ค.๊ด์ฌ๊ฐ์ ธ์ฃผ์ ์ ๊ฐ์ฌ๋๋ ค์.. ๊ณ ๋ง์ต๋๋ค.
- 0
- 3
- 553
Q&A
์๋ฒ ๊ธฐ๋ ํ ๋ฃจํธ ์ ๊ทผ ์ `/` AccessDeniedException ์ง๋ฌธ์ ๋๋ค
๊ฐ์ฌ๋. ํด๊ฒฐ๋์์ต๋๋ค. MetadataSource ์์ reload ๋ฉ์๋ ๋ก DB ๋ฐ์ดํฐ ๋ก๋ฉ ๊ธฐ๋ฅ ๊ตฌํ ํ, SecurityConfig.java ์์ @ApplicationReadyEvent ๋ฆฌ์ค๋ ์์ event.getApplicationContext() .getBean() ์ผ๋ก UrlFilter...MetadataSource ๊ฐ์ ธ์จ ํ .reload() ๋ฅผ ์คํ ์ด๋ฐ ๊ณผ์ ์ผ๋ก, java/resources/data.sql ๊ณผ DummyDataLoader ์ ๋ฐ์ดํฐ ์ฝ์ ๊ณผ์ ์ด ๋๋๊ณ ,ApplicationReadyEvent ์์ ์ UrlFilter...MetadataSource ์์๋ฆฌ์์ค ๋ฆฌ๋ก๋ฉ ํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐ์ ๋ดค์ต๋๋ค. Bean ์ ๋ฑ๋กํ๋ ๋ถ๋ถ ๋ณ๊ฒฝ์ด๋, DataSource ์ ๋ฐ์ดํฐ ์ ๋ ฅ ์์ ์ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์์๋ฌด๋ฆฌ ์ฐพ์๋ ๋ฐฉ๋ฒ์ด ์๋๊ฒ์ผ๋ก ๋ณด์, ์ ๊ฐ ์ด๋ ค์ด ๋ฐฉ๋ฒ์ ํํ๊ฒ ์๋๊ฐ ์ถ์ต๋๋ค. ๋ฌธ์ ํด๊ฒฐ์ ์ํด ๋ต๊ธ ๋จ๊ฒจ์ฃผ์ ์ ๋ง์ ๋์์ด ๋์์ต๋๋ค. ์ ๋ง ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
- 0
- 5
- 683