week 7 leekyunghee - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
JAVA
java์ non-static ๋ฉค๋ฒ์ static ๋ฉค๋ฒ์ ์ฐจ์ด
-
์ฐ์ ํผ๋์ ํผํ๊ธฐ ์ํด "์คํํฑ ๋ฉค๋ฒ"๋ณด๋ค๋ "์คํํฑ"์ผ๋ก ๋ถ๋ฅด๋ ๊ฒ์ด ๋ซ๋ค.
-
์ผ๋ฐ์ ์ผ๋ก ์คํํฑ ๋ณ์์ ๋๋น๋๋ ์๋ฏธ๋ก ํด๋์ค์ ๋น์คํํฑ ๋ณ์๋ฅผ "๋ฉค๋ฒ ๋ณ์"๋ผ๊ณ ๋ ๋ถ๋ฅด๊ธฐ ๋๋ฌธ์.
-
๋์ผํ ํด๋์ค์ ๋ชจ๋ ๊ฐ์ฒด๋ค์ ์ํด ๊ณต์ ๋๋ค๋ ๊ฑด ๋ค์ ๋ถ์ ํํ ๋ด์ฉ์.
-
์๋ฐ์์ ์ ์ ์ธ ๋ณ์๋ ๋ฉ์๋๋ ์ ๊ทผ ์ ์ด์๊ฐ ํ์ฉํ๋ ํ ๊ฐ์ ํด๋์ค ๋ฟ ์๋๋ผ ๋ค๋ฅธ ํด๋์ค์์๋ ์ ๊ทผํ ์ ์์.
๋ฐ๋ณต๋๋ ์ง๋ฌธ ์ค ํ๋์ง๋ง ์ด๋ ์คํํฑ ์์ฒด์ ๋ํ ์ดํด๋ณด๋ค๋ ์ธ์คํด์ค์ ํด๋์ค์ ๋ํ ๊ฐ๋ ์ด ์์ง ๋ช ํํ๊ฒ ์กํ์์ง ์์ ๊ฒฝ์ฐ ์ด๋ ต๊ฒ ๋๊ปด์ง๋ ๋ด์ฉ์.
์ธ์คํด์ค์ ํด๋์ค์ ๊ฐ๋ ์ ๋ช ํํ๊ฒ ์๊ณ ์๋ค๋ฉด, ๋ฉค๋ฒ๋ ์ธ์คํด์ค(๊ฐ์ฒด)์ ์ํ๋ ๊ฒ์ด๊ณ , ์คํํฑ์ ํด๋์ค ์์ฒด์ ์ํ๋ ๊ฒ์ผ๋ก ์ ์ํ๋ฉด ๊ทธ ๊ฒ์ผ๋ก ๋์.
- ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค๋ ์ ์ฝ์ ๊ตณ์ด ๋ฒ์น์ฒ๋ผ ์ธ์ธ ํ์๊ฐ ์๊ณ ์์ปจ๋ ํน์ ํ ์ฌ๋(์ธ์คํด์ค/๊ฐ์ฒด)์ ํ์ ํ์ง ์๊ณ ๊ทธ๋ฅ "์ธ๊ฐ(ํด๋์ค)์ ๋์ด(์ธ์คํด์ค ๋ณ์)๋ ์ผ๋ง์ธ๊ฐ" ๊ฐ์ ์ง๋ฌธ์ ํ๋ ๊ฒ ๋ง์ด ์๋๋ค๋ ๊ฒ์ ์ดํดํ๋๋ฐ๋ ์๊ธฐ๊ฐ ํ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ถ์ฒ: https://okky.kr/article/730788?note=2007538
-
๊ฐ์ฒด๋ช .static_๋ฉค๋ฒ๋ช
-
ํด๋์ค๋ช .static_๋ฉค๋ฒ๋ช
์ถ์ฒ: https://neos518.tistory.com/52 [As I've always been]
๋ฐ์ฑ๊ณผ ์ธ๋ฐ์ฑ์ ๋ํด ์ค๋ช
- Primitive Type์ ๊ฐ์ Wrapper class๋ก ๋ฐ๊พธ๋ ๊ฒ์ ๋งํ๋ค.
- ๊ธฐ๋ณธ ํ์ - ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์์๋ ๋จ
์ค๋ ๋ ๋ณ๋ก ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
- ์ฐธ์กฐ ํ์ - String, List
์ธ์คํด์ค๋ฅผ ์์ฑํด์ผ ํจ.
- ์ธ์คํด์ค ์ด๋ฏ๋ก ํ์ ์ ์ฅ๋๋ฏ๋ก ์ค๋ ๋๋ฅผ ๋์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ฏ๋ก ๋๊ธฐํ ์ด์๊ฐ ๋ง์ ์ฐธ์กฐ ํ์ .
int data = 512;
Integer value = new Integer(data); // @deprecated(since="9")
-
์คํ ๋ฐ์ฑ๊ณผ ์คํ ์ธ๋ฐ์ฑ ๋๋ถ์ ๊ธฐ๋ณธ ํ์ ๊ณผ ๋ฐ์ฑ๋ ๊ธฐ๋ณธ ํ์ ์ ํธํ๊ฒ ๊ตฌ๋ถ์์ด ์ฌ์ฉํ ์ ์๋ค.
-
๋ฐ์ฑ ํ์ ๋ณด๋ค๋ ๊ธฐ๋ณธ ํ์ ์ ์ฌ์ฉํ๋ผ
3๊ฐ์ง ์ฐจ์ด์ ์ด ์์
SPRING
JPA vs Mybatis
- SQL Mapper์ ORM์ ๋ํด ๋จผ์ ์์๋๋ฉด ์ข๋ค.
SQL Mapper
SQL Mapper๋ ์ง์ SQL๋ฌธ์ ์์ฑํด DB๋ฅผ ์ ๊ทผํ๋ ๊ฒ์ด๋ค. Mybatis๊ฐ SQL Mapper์ ํด๋นํ๋ค.
ORM (Object Relational Mapping)
DB์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ๋งคํ์์ผ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ ์ ์๋ ๊ฒ์ด๋ค. ORM์ ์ฌ์ฉํ๋ฉด SQL์ ์์ฑํ์ง ์๊ณ ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ ์ ์๋ค. JPA, Hibernate ๋ฑ์ด ํด๋นํ๋ค.
Mybatis
-
Java์์๋ DB์ ์ ๊ทผํ ์ ์๋๋ก JDBC๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ค.
-
JDBC๋ ํ์ต์ด ์ฌ์์ ์ฒ์ DB ์ ๊ทผ์ ๋ฐฐ์ธ ๋ ์์ฃผ ์ฌ์ฉ๋๋ค.
-
๊ทธ๋ ์ง๋ง ์ฌ์ฉํ ๋๋ง๋ค Connection์ ์์ฑํด์ค์ผ ํ๊ณ , ์ค๋ณต๋๋ ์ฝ๋๊ฐ ๋ง์ ์ค์ ๊ฐ๋ฐ์๋ ์ ์์ฐ์ด๋ ๋๋์ด๋ค.
-
์ด JDBC๋ฅผ ์ฌ์ฉํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ด Mybatis์ด๋ค.
-
SQL Mapper์ ํด๋นํ๋ค. JDBC๋ก ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์ ์ผ๋ถ๋ฅผ ์ฝ๋์ ํ๋ผ๋ฏธํฐ ์ค์ ์ผ๋ก ๋งคํ์ ๋์ ํด์ค๋ค.
์ฅ์
- ํ์ต์ด ์ฝ๋ค.
- ์์ค์ฝ๋์ sql์ ๋ถ๋ฆฌํ ์ ์๋ค.
๋จ์
- ๋ฐ๋ณต์ ์ธ ์์ ์ด ๋ฐ๋ณต๋๋ค.
JPA (Java Persistent API)
-
Java ORM ๊ธฐ์ ์ ๋ํ API ํ์ค ๋ช ์ธ๋ก, ์ด๊ฒ ๋ํ Java์์ ์ ๊ณตํ๋ API์ด๋ค.
-
์ฌ์ฉํ ๋ JPA, Spring Data JPA, Hibernate๋ฅผ ํผ๋ํ๊ธฐ ์ฝ๋ค.
-
JPA๋ ์๋ฐ ์ดํ๋ฆฌ์ผ์ด์ ์์ RDBMS๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ ์ํ ์ธํฐํ์ด์ค์ด๋ค.
-
๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋! -> ๊ตฌํ์ด ์๋ค.
-
Spring Data JPA๋ JPA๋ฅผ ์ฐ๊ธฐ ์ข๊ฒ ๋ง๋ค์ด๋์ ๋ชจ๋์ด๋ค.
-
JPA interface๋ฅผ ๊ตฌํํด Repository๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค.
-
Hibernate๋ JPA์ ๊ตฌํ์ฒด์ด๋ค.
์ฅ์
- CRUD ์ฟผ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์์ฑํด์ค๋ค.
- Entity์ ์์ฑ๋ง ์ถ๊ฐํด์ค๋ค๋ฉด ์ฟผ๋ฆฌ๋ฅผ ๊ฑด๋ค ํ์๊ฐ ์๋ค.
๋จ์
- ์๋์ ์ผ๋ก ํ์ต์ด ์ด๋ ต๋ค.
- ๋ณต์กํ ์ฟผ๋ฆฌ ์์ฑ์ด ์ด๋ ต๋ค๊ณ ํ๋ค.
Spring MVC vs WebFlux ๋น๊ต
- MVC๋ ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ์๋ธ๋ฆฟ์ ๊ธฐ๋ฐ์ผ๋ก ์น ์ถ์ํ ๊ณ์ธต์ ์ ๊ณต
- Webflux๋ ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ๋ฟ๋ง ์๋๋ผ, Netty, Undertow์ ๊ฐ์ ๋คํธ์ํฌ ์ดํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ๋ ์ง์ํ๋ฏ๋ก, HTTP์ Reactive Stream ๊ธฐ๋ฐ์ผ๋ก ์น ์ถ์ํ ๊ณ์ธต์ ์ ๊ณตํฉ๋๋ค.
WebFlux
WebFlux ๋ชจ๋์๋ HTTP abstractions, Reactive Stream apdater, Reactive codes ๊ทธ๋ฆฌ๊ณ non-blocking servlet api๋ฅผ ์ง์ํ๋ core web api๊ฐ ํฌํจ๋์ด ์์
server-side WebFlux ์์์ ์๋์ ๊ฐ์ด ๋ ๊ฐ์ง ํ๋ก๊ทธ๋จ ๋ชจ๋ธ๋ก ๊ตฌ์ฑ์ด ๊ฐ๋ฅํฉ๋๋ค.
- Annotated Controller : Spring MVC ๋ชจ๋ธ ๊ธฐ๋ฐ์ ๊ธฐ์กด spring-web ๋ชจ๋๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ผ๋ก, Spring MVC์์ ์ ๊ณตํ๋ ์ด๋ ธํ ์ด์ ๋ค์ ๊ทธ๋๋ก ์ฌ์ฉ๊ฐ๋ฅํฉ๋๋ค.
- Functional Endpoints : Java 8 lambda style routing๊ณผ handling ๋ฐฉ์์ ๋๋ค. ๊ฐ๋ฒผ์ด routing๊ธฐ๋ฅ๊ณผ request ์ฒ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๊ณ ์๊ฐํ๋ฉด ์ฝ๊ณ , callbackํํ๋ก์จ ์์ฒญ์ด ์์ ๋๋ง ํธ์ถ๋๋ค๋ ์ ์ด annotated controller๋ฐฉ์๊ณผ์ ์ฐจ์ด์ ์ ๋๋ค.
Infra/์ด์
Join์ ์ข ๋ฅ์ ๋ํด ์๋๋๋ก ๋ค ์ค๋ช
์ ๊ทํ, ์ญ์ ๊ทํ๋ ๋ฌด์์ธ์ง?
[์์์ผ ํ ๊ฐ๋ ]
- ์ฝ์ ์ด์ (Insertion Anomaly), ๊ฐฑ์ ์ด์ (Update Anomaly), ์ญ์ ์ด์ (Deletion Anomaly) ์ค๋ช
- ํจ์์ ์ข ์์ฑ (Functional Dependency)
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทํ๊ฐ ํ์ํ ์ด์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์๋ชป ์ค๊ณํ๋ฉด ๋ถํ์ํ ๋ฐ์ดํฐ ์ค๋ณต์ผ๋ก ์ธํ ๊ณต๊ฐ๋ญ๋น๋ฅผ ๋์ด ๋ถ์์ฉ์ ์ด๋ํ ์ ์๋ค.
- ์ด๋ฌํ ๋ถ์์ฉ์ ์ด์(Anomaly) ์ด๋ผ๊ณ ํ๋๋ฐ ์ด์ ํ์์ ์ข ๋ฅ๋ก ์ฝ์ ์ด์, ๊ฐฑ์ ์ด์, ์ญ์ ์ด์์ด ์๋ค.
์ ๊ทํ
-
์ ๊ทํ๋ ๋ฐ์ดํฐ๋ฅผ ์ค๋ณต๋๊ฒ ๊ด๋ฆฌํ์ง ์๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด๋ค. ๊ทธ๋ ๊ฒ ํจ์ผ๋ก์จ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ(Consistency)์ ๋์ผ ์ ์๋ค.
-
๋ชจ๋ธ์ ์์ง๋(Cohesion)์ ๋์ฌ ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ๋ ๊ฐ๊น์์ง๋ค.
์ญ์ ๊ทํ
- ์ญ์ ๊ทํ๋ ์ฑ๋ฅํฅ์์ ์ํด ์ผ๋ถ๋ก ๋ฐ์ดํฐ๋ฅผ ์ค๋ณต๋ ์ํ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ด๋ค.
JOIN ์ด๋?
-
2๊ฐ ์ด์์ ํ ์ด๋ธ์ ์ฐ๊ฒฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
-
๋ณดํต ๊ณตํต๋ ๊ฐ์ธ PK ๋ฐ FK ๊ฐ์ ์ฌ์ฉํ์ฌ ์กฐ์ธํ๋ค.
-
์กฐ์ธ์ ์กฐ์ธ ์ฐ์ฐ์์ ๋ฐ๋ผ, From ์ ์ ์กฐ์ธ ํํ์ ๋ฐ๋ผ์ ๊ตฌ๋ณํ๋ค.
-
JOIN์ ๊ตฌ๋ณ
โ ์ฐ์ฐ์์ ๋ฐ๋ฅธ ๋ถ๋ฅ
-
EQUI JOIN : ๋ ํ ์ด๋ธ ๊ฐ์ ์นผ๋ผ ๊ฐ๋ค์ด ์๋ก ์ผ์นํ๋ ๊ฒฝ์ฐ ( '=' ์ฐ์ฐ์ ์ฌ์ฉ)
-
NON EQUI JOIN : ๋ ํ ์ด๋ธ ๊ฐ์ ์นผ๋ผ ๊ฐ๋ค์ด ์๋ก ์ผ์นํ๋ ๊ฒฝ์ฐ (๋น๊ต ์ฐ์ฐ์ ์ฌ์ฉ)
โ FROM ์ ์ JOIN ํํ์ ๋ฐ๋ฅธ ๋ถ๋ฅ
-
INNER JOIN : JOIN ์กฐ๊ฑด์์ ๊ฐ์ด ์ผ์นํ๋ ํ๋ง ๋ฐํ
-
OUTER JOIN : JOIN ์กฐ๊ฑด์์ ํ์ชฝ ๊ฐ์ด ์๋๋ผ๋ ํ์ ๋ฐํ