1.ํฐ์บฃ ์ธ์
์ ์ฌ์ฉํ๋ค. - ๊ธฐ๋ณธ ์ ํ๋๋ ๋ฐฉ์์ด๋ค. - WAS์ ์ ์ฅ๋๋๋ฐ 2๋์ด์์ WAS๋ก ๊ตฌ๋๋๋ ํ๊ฒฝ์์๋ ์ถ๊ฐ ์ค์ ์ด ํ์ํ๋ค. 2.MySQL๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ธ์
์ ์ฅ์๋ก ์ฌ์ฉํ๋ค. - ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ด๋ค. - ๋ก๊ทธ์ธ ์์ฒญ์ DB IO๊ฐ ๋ฐ์ํ ์ ์๋ค. 3.Redis ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ DB๋ฅผ ์ธ์
์ ์ฅ์๋ก ์ด์ฉํ๋ค. ์ฌ์ฉ๋ฃ๋ฅผ ์ง๋ถํด์ผํ๋ค! ์๋น์ค๊ฐ ์ปค์ง๋ ๊ณ ๋ ค! 'org.spirngframework.session:spring-session-jdbc' ๋ฅผ gradle์ ๋ฑ๋กํด์ฃผ๊ณ application.prorperties์ spring.session.store-type=jdbc ๋ง ๋ฑ๋กํ์ฃผ๋ฉด jpa๊ฐ ์ธ์
ํ
์ด๋ธ์ ์๋์ผ๋ก ์์ฑํ์ฌ ์ธ์
์ ์ฅ์๊ฐ ์ง์ ๋๋ค!
๐ WEB
Enum์ ํตํด ์ป๋ ๊ธฐ๋ณธ์ ์ธ ์ฅ์ ๋ฌธ์์ด๊ณผ ๋น๊ตํด, IDE์ ์ง์์ ๋ฐ์ ์ ์๋ค. ์๋์์ฑ, ์คํ๊ฒ์ฆ, ํ
์คํธ ๋ฆฌํฉํ ๋ง ๋ฑ ํ์ฉ ๊ฐ๋ฅํ ๊ฐ๋ค์ ์ ํํ ์ ์๋ค. ๋ฆฌํฉํ ๋ง์ ๋ณ๊ฒฝ ๋ฒ์๊ฐ ์ต์ํ ๋๋ค. ๋ด์ฉ์ ์ถ๊ฐ๊ฐ ํ์ํด๋, Enum์ฝ๋์ธ์ ์์ ํ ํ์๊ฐ ์๋ค. Java Enum์ธ ๊ฒฝ์ฐ int๊ฐ์ด ์๋๋ผ ์์ ํ ๊ธฐ๋ฅ์ ๊ฐ์ง ํด๋์ค์ด๋ค! ์ฐ์ enumํ์
์ผ๋ก ํด๋์ค๋ฅผ ์์ฑํด์ผํ๋ค ์ด์ ์์๋ฅผ ์ ์ธํ๋ฉด ๋๋๋ฐ, ๊ด๋ก์ ์ผ๋ก ๋ชจ๋ ๋๋ฌธ์๋ก ์์ฑํ๋ค. Entityํด๋์ค์ ์ ์ธํด์ฃผ๊ธฐ ์ํด์ String์ด ์๋ enum์ ์ ์ธํ๋ค. JPA๋ฅผ ์ฌ์ฉํ๋ฏ๋ก @Enumerated(EnumType.SPRING)์ ์ ์ธํ๋ฉด Enumํ๋๊ฐ ํ
์ด๋ธ์ ์ ์ฅ์ ์ซ์ํ์ด ์๋, Enum์ ์ด๋ฆ์ด ์ ์ฅ๋๋ค. ์ฌ๊ธฐ์๋ GUEST,USER..
์คํ๋ง ์ํ๋ฆฌํฐ๋ ๋ง๊ฐํ ์ธ์ฆ๊ณผ ์ธ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ์ง ์คํ๋ง ํ๋ ์์ํฌ์ด๋ค. ์ธ์ฆ์ด๋, ๋ณดํธ๋ ๋ฆฌ์์ค์ ์ ๊ทผํ ๋์์ ๋ํด ๋๊ตฌ์ธ์ง, ์์
์ ์ํํด๋ ๋๋์ง ํ์ธํ๋ ๊ณผ์ ์ด๋ค. ์ธ๊ฐ๋, ์ธ์ฆ ์ดํ์ ํด๋น ๋ฆฌ์์ค์ ๋ํด ์ ๊ทผ ๊ฐ๋ฅํ ๊ถํ์ ๊ฐ์ง๊ณ ์๋์ง ํ์ธํ๋ ๊ณผ์ ์ด๋ค. ๋ณด์๊ณผ ๊ด๋ จํด์ ์ฒด๊ณ์ ์ผ๋ก ๋ง์ ์ต์
์ ์ ๊ณตํด์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ์ผ์ผ์ด ๋ณด์ ๊ด๋ จ ๋ก์ง์ ์์ฑํ์ง ์์๋ ๋๋ค. ๊ตฌ๊ธ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํํด๋ณด์! https://console.cloud.google.com/ ๋ก ์ ์ํด์ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค. ํ๋ก์ ํธ๋ฅผ ์ ํํ ํ API ๋ฐ ์๋น์ค -> ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด OAuth ํด๋ผ์ด์ธํธ ID ํด๋ฆญ! ๋์ ํ๋ฉด ์ค ์ธ๋ถ/๋ด๋ถ๊ฐ ์๋๋ฐ ์ธ๋ถ๋ฅผ ํด๋ฆญํ๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฆ : ์ฌ์ฉ์์๊ฒ ๋
ธ์ถ๋ ์ ํ๋ฆฌ์ผ์ด..
์ง์ ๋ ํ
ํ๋ฆฟ ์์๊ณผ ๋ฐ์ดํฐ๊ฐ ํฉ์ณ์ ธ HTML๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ ์ํํธ์จ์ด ์๋ฒ ํ
ํ๋ฆฟ ์์ง - JSP(๋ช
ํํ๊ฒ๋ ์๋) ..๋ฑ ํด๋ผ์ด์ธํธ ํ
ํ๋ฆฟ ์์ง - React,Vue ...๋ฑ ์์ญ๊ณผ ์๋ํ๋ ๋ฐฉ์์ด ๋ค๋ฅด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ธ๋ผ์ฐ์ ์์์ ์๋ - ๋ธ๋ผ์ฐ์ ์์ ์๋๋ ๋๋ ์๋ฒ ํ
ํ๋ฆฟ ์์ง์ด ์ ์ดํ ์ ์๋ค. - ์๋ฒ์์๋ Jsonํน์ xmlํ์์ ํ
์ดํฐ๋ง ์ ๋ฌํ๊ณ ํด๋ผ์ด์ธํธ์์ ์กฐ๋ฆฝํ๋ค.
๊ต์ก๊ณผ์ ๋์ ์ธ์ ๋ง๋ค์ด์ก๋์ง, ์ธ์ ์์ ๋์๋์ง์ ๋ฐ๋ฅธ ์ ์ง๋ณด์ ์ค์์ฑ์ ๋ฐฐ์ฐ์ง ๋ชปํ๋ค. ์ด์ ๋ชจ๋ธ๋งํ ๋ ๊ณ ๋ คํด์ ์ง์ผ๊ฒ ๊ตฐ... ๊ฐ์ ๋ด์ฉ์ธ๋ฐ ๋งค๋ฒ DB์ insert/update์ ํ๊ธฐ์๋ ์ฝ๋๊ฐ ์ฌ๊ธฐ์ ๊ธฐ ๋ค์ด๊ฐ๊ฒ ๋๋๊น ์์ฑ๋ ๋ ๊ฐ์ด ์์ฑ๋๋ฉด ํธ๋ฆฌํ๋ค! domain ํด๋์ BaseTimeEntityํด๋์ค๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ ๋ชจ๋ Entity์ ์์ ํด๋์ค๊ฐ ๋๊ฒ ํ๋ฉด ๋๋ค. 1. @MappedSpuerclass ๋ฅผ ์ด์ฉํ๋ฉด JPA Entityํด๋์ค๋ค์ด BaseTimeEntity๋ฅผ ์์ํ ๊ฒฝ์ฐ ํ๋๋ค๋ ์ปฌ๋ผ์ผ๋ก ์ธ์ํ๋๋ก ํ๋ค. 2. @EntityListeners(AuditingEntityListener.class)๋ก ํด๋น ํด๋์ค์ Auditing๊ธฐ๋ฅ์ ํฌํจํ๋ค. 3. @CreatedDate priva..
//postRepository์์ ๋์ด์จ ๊ฒฐ๊ณผ๋ฅผ postsRepository.findAllDesc().stream() //Stream์ ํตํด map์ผ๋ก new PostsListResponseDto ์ ๋งคํ ํด์ค๋ค. //PostsListResponseDto์์๋ ํ๋ผ๋ฏธํฐ๋ก postRepository์์ ๋์ด์จ ๊ฒฐ๊ณผ Entity posts๋ฅผ ๋ฐ๊ณ ์์ผ๋ฏ๋ก //๊ฒฐ๊ณผ์ ์ผ๋ก .map(posts -> new PostsListResponseDto(posts)) .map(PostsListResponseDto::new) //collect๋ฅผ ์ฌ์ฉํด์ List๋ก ๋ณํํ๋ค. .collect(Collectors.toList()); stream์ด๋ผ๋ ๊ฒ ์๋ ๊ฒ ์กฐ์ฐจ ๋ชฐ๋ผ์ ๊ณต๋ถํ๋ฉด์ ํผ๋์ค๋ฌ์ ๋ค ๋๋ค์์ ๋ฐฐ์ด ์ ์ด ์์ผ๋. ใ
..
HTML์ ์์์๋ถํฐ ์ฝ๋๊ฐ ์คํ๋๊ธฐ ๋๋ฌธ์ head๊ฐ ์คํ๋๊ณ body๊ฐ ์คํ๋๋ค. js์ ์ฉ๋์ด ํฌ๋ฉด ํด์๋ก body๋ถ๋ถ์ ์คํ์ด ๋ฆ์ด์ง๊ธฐ ๋๋ฌธ์ bodyํ๋จ์ ๋๋๊ฒ ์ข๋ค css๋ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ์ญํ ์ด๋ฏ๋ก head์์ ๋ถ๋ฌ์ค๋ ๊ฒ์ด ์ข๋ค + ๋ถํธ์คํธ๋ฉ์ธ ๊ฒฝ์ฐ ์ ์ด์ฟผ๋ฆฌ์ ์์กด ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ ์ด์ฟผ๋ฆฌ๋ฅผ ๋จผ์ ํธ์ถํ๋๊ฒ ๋๋๋ก ์์ฑํด์ผ ํ๋ค. + Scriptlet,jstl,el์ ์๋ฒ๋จ์์ ์คํ ๋๋ฉฐ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ Javascript์์๋ ๋ณ์๋ฅผ ์ง์ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค. + JAVA>JSTL>HTML>Javscript + jsp์ธ๋ถ๋ก js๋ฅผ ๋นผ๋ฉด ์๋์ํ ๊ฒ๋๋ค. ์๋ฒ๋ jsp๋ฅผ ์ฒ๋ฆฌํ์ง ์ธ๋ถ์์ ์ํฌํธ๋๋ js๋ฅผ ์ฒ๋ฆฌํ์ง๋ ์๋๋ค.
JPA๊ฐ ๊ด๊ณํ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง๊ฒ SQL์ ๋์ ์์ฑํ์ฌ ์คํํ๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ์คํ๋ ์ฟผ๋ฆฌ์ ํํ๊ฐ ๊ถ๊ธํ ์ ์๋ค. application.properties๋ฅผ ๋ง๋ค์ด์ค ํ spring.jpa.show_sql = true ๋ฅผ ์์ฑํด์ค๋ค. ์ง๋!
bulid.gradle์ ์์กด์ฑ ๋ฑ๋กํ๊ธฐ Entity ํด๋์ค Entity๊ฐ not null์ผ ๊ฒฝ์ฐ Builder๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋๋ ํจํด์ผ๋ก ๋ง๋ค๋ Assert.notNull(title, "title must not be null"); Assert๋ฅผ ์ด์ฉํด ๊ฐ์ฒด๋ฅผ ์์ ํ๊ฒ ์์ฑํ๋ค Postsํด๋์ค๋ก Database๋ฅผ ์ ๊ทผํ๊ฒ ํด์ค PostsRepository ์ธํฐํ์ด์ค๋ฅผ Entityํด๋์ค์ ๊ฐ์ ์์น์ ๋ง๋ค์ด์ค๋ค(*) JpaReopository ๋ฅผ ์์ํ๋ฉด ๊ธฐ๋ณธ์ ์ธ CRUD๋ฉ์๋๊ฐ ์๋์ผ๋ก ์์ฑ๋๋ค. ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ํ์ธํ์!
@RunWith(SpringRunner.class) ํ
์คํธ๋ฅผ ์งํํ ๋ JUnit์ ๋ด์ฅ๋ ์คํ์ ์ธ ๋ค๋ฅธ ์คํ์๋ฅผ ์คํ ์คํ๋ง ๋ถํธ ํ
์คํธ - JUnit์ฌ์ด์ ์ฐ๊ฒฐ์ ์ญํ ์ ํจ @WebMvcTest Web์ ์ง์คํ ์ ์๋ ์ด๋
ธํ
์ด์
, @Controller,@ControllerAdvice๋ฑ Controller์์ ์ด์ฉ ๊ฐ๋ฅํ ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ ์ ์๋ค. @Autowired ๋น์ ์ฃผ์
MockMvc HTTP์ GET,POST๋ฑ์ ๋ํ ์นAPI๋ฅผ ํ
์คํธํ ๋ ์ฌ์ฉ ์ธ๋ถ์ ๊ฒฐ๊ณผ์ ํฌ๊ฒ ์์กดํ ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ ํน์ ๊ฐ์ ๋ฐ์ ๋, ํน์ ์๊ฐ์๋ง ์คํ๋๋ ๊ฒฝ์ฐ ๋ฑ perform() HTTP GET,POST ์์ฒญ, ์ฒด์ด๋ ์ง์ andExpect() ์ ์ด์ฉํด์ ๋ค์ํ๊ฒ ๊ฒ์ฆํ ์ ์๋ค. assertThat()
Controller @SpringBootApplication ์คํ๋ง๋ถํธ์ ์๋ ์ค์ , ์คํ๋ง Bean ์ฝ๊ธฐ์ ์์ฑ์ ๋ชจ๋ ์๋์ผ๋ก ์ค์ ํจ ํด๋น class์ ์๋ ์์น๋ถํฐ ์ค์ ์ ์ฝ์ด ๊ฐ๊ธฐ ๋๋ฌธ์ ํญ์ ํ๋ก์ ํธ์ ์ต์๋จ์ ์์นํด์ผ ํจ. SpringBootApplication.run() ์คํ๋ง๋ถํธ์ ๋ด์ฅ was์ด๋ค. ์ธ์ฅ was๋ฅผ ์ฌ์ฉํด๋ ๋์ง๋ง ๋ด์ฅ was ์ฌ์ฉ ๊ถ๊ณ (์ธ์ ์ด๋์๋ ๊ฐ์ ํ๊ฒฝ์์ ์คํ๋ง ๋ถํธ๋ฅผ ๋ฐฐํฌ) ์ฑ๋ฅ์ ์ด์ : ํฐ์บฃ ์ญ์ ์๋ธ๋ฆฟ์ผ๋ก ์ด๋ฃจ์ด์ง ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ด๋ค. ๋๊ฐ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก ํฌ๊ฒ ๊ณ ๋ คํ์ง ์์๋ ๋๋ค. @RestController ์ปจํธ๋กค๋ฌ๋ฅผ JSON์ ๋ฐํํ๋ ์ปจํธ๋กค๋ฌ๋ก ๋ง๋ค์ด ์ค ์์ ์๋ @ResposeBody๋ฅผ ๊ฐ ๋ฉ์๋๋ง๋ค ์ ์ธ ํ๋๊ฒ์ ํ๋ฒ์ ์ฌ์ฉํ ์ ..
JavaScript์์์ ๋ณ์ ์ ์ธ ๋ฐฉ์ ์ค var, const, let์ ์ฐจ์ด์ ๋จผ์ Hoisting๊ณผ Scope์ ๊ฐ๋
์ด ํ์ํ๋ค. Hoisting Hoist๋ ๋ณ์์ ์ ์๊ฐ ๋ฒ์์ ๋ฐ๋ผ ์ ์ธ, ์ด๊ธฐํ, ํ ๋น ๋ถ๋ฆฌ๋๋ ๊ฒ์ ์๋ฏธ (์ ์ญ๋ณ์์ ์ง์ญ๋ณ์) Scope - ์ ์ญ ์ค์ฝํ, ์ง์ญ ์ค์ฝํ 1. var ๋ณ์ ์ ์ธ์ ๊ฒฝ์ฐ ์ ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋ ์ ์๋ค. function scope 2. const ๋ณ์์ ์ฌ์ ์ธ, ์ฌํ ๋น ๋ถ๊ฐ block scope ์ง์ญ ์ค์ฝํ 3. let ๋ณ์์ ์ฌํ ๋น ๊ฐ๋ฅ block scope ES6์์๋ var๋ณด๋ค๋ const์ let์ ์ฌ์ฉํด์ ์ ํํ ๋ณ์ ์ฌ์ฉ์ ๊ถํ๋ค.