Spring/Spring ์
๋ฌธ
AOP (Aspect Oriented Programming)๋? ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ด์ ์งํฅ์ ์ด๋ค ๋ก์ง์ ๊ธฐ์ค์ผ๋ก ํต์ฌ์ ์ธ ๊ด์ , ๋ถ๊ฐ์ ์ธ ๊ด์ ์ผ๋ก ๋๋์ด์ ๋ณด๊ณ ๊ทธ ๊ด์ ์ ๊ธฐ์ค์ผ๋ก ๋ชจ๋ํ ํ๊ฒ ๋ค๋ ๊ฒ *๋ชจ๋ํ : ์ด๋ค ๊ณตํต๋ ๋ก์ง์ด๋ ๊ธฐ๋ฅ์ ํ๋์ ๋จ์๋ก ๋ฌถ๋ ๊ฒ ์๋ฅผ ๋ค์ด ํต์ฌ์ ์ธ ๊ด์ ์ ๋น์ฆ๋์ค ๋ก์ง์ด ๋ ์ ์๊ณ , ๋ถ๊ฐ์ ์ธ ๊ด์ ์ ํต์ฌ ๋ก์ง์ ์คํํ๊ธฐ ์ํด ํํด์ง๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ, ๋ก๊น
, ํ์ผ ์
์ถ๋ ฅ ๋ฑ์ด ๋ ์ ์๋ค. AOP๋ ํฉ์ด์ง ๊ด์ฌ์ฌ(Crosscutting Concerns)๋ฅผ ๋ชจ๋ํ ํ ์ ์๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ด๋ค ๋ชจ๋ํ ์์ผ๋์ ๋ธ๋ญ์ Aspect๋ผ๊ณ ํ๋ค. AOP๊ฐ ํ์ํ ์ํฉ - ๋ชจ๋ ๋ฉ์๋์ ํธ์ถ ์๊ฐ์ ์ธก์ ํ๊ณ ์ถ๋ค๋ฉด? - ๊ณตํต ๊ด์ฌ ์ฌํญ(cross-cutting con..
Spring/Spring ์
๋ฌธ
๋๋ณด๊ธฐ ์คํ๋ง ๋ถํธ์ JPA๋ง ์ฌ์ฉํด๋ ๊ฐ๋ฐ ์์ฐ์ฑ์ด ์ ๋ง ๋ง์ด ์ฆ๊ฐํ๊ณ , ๊ฐ๋ฐํด์ผํ ์ฝ๋๋ ํ์ฐํ ์ค์ด๋ญ๋๋ค. ์ฌ๊ธฐ์ ์คํ๋ง ๋ฐ์ดํฐ JPA๋ฅผ ์ฌ์ฉํ๋ฉด, ๊ธฐ์กด์ ํ๊ณ๋ฅผ ๋์ด ๋ง์น ๋ง๋ฒ์ฒ๋ผ, ๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ตฌํ ํด๋์ค ์์ด ์ธํฐํ์ด์ค ๋ง์ผ๋ก ๊ฐ๋ฐ์ ์๋ฃํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ณต ๊ฐ๋ฐํด์จ ๊ธฐ๋ณธ CRUD ๊ธฐ๋ฅ๋ ์คํ๋ง ๋ฐ์ดํฐ JPA๊ฐ ๋ชจ๋ ์ ๊ณตํฉ๋๋ค. ์คํ๋ง ๋ถํธ์ JPA๋ผ๋ ๊ธฐ๋ฐ ์์, ์คํ๋ง ๋ฐ์ดํฐ JPA๋ผ๋ ํ์์ ์ธ ํ๋ ์์ํฌ๋ฅผ ๋ํ๋ฉด ๊ฐ๋ฐ์ด ์ ๋ง ์ฆ๊ฑฐ์์ง๋๋ค. ์ง๊ธ๊น์ง ์กฐ๊ธ์ด๋ผ๋ ๋จ์ํ๊ณ ๋ฐ๋ณต์ด๋ผ ์๊ฐํ๋ ๊ฐ๋ฐ ์ฝ๋๋ค์ด ํ์ฐํ๊ฒ ์ค์ด๋ญ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ๋ฐํ๋๋ฐ, ์ง์คํ ์ ์์ต๋๋ค. ์ค๋ฌด์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์คํ๋ง ๋ฐ์ดํฐ JPA๋ ์ด์ ์ ํ์ด ์๋๋ผ ํ์ ..
Spring/Spring ์
๋ฌธ
JPA๋ ์๋ฐ ์ง์์์ ORM(Object-Relational Mapping) ๊ธฐ์ ํ์ค์ผ๋ก ์ฌ์ฉ๋๋ ์ธํฐํ์ด์ค์ ๋ชจ์์ด๋ค ์ค์ ์ ์ผ๋ก ๊ตฌํ๋๊ฒ์ด ์๋๋ผ ๊ตฌํ๋ ํด๋์ค์ ๋งคํ์ ํด์ฃผ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํ๋ ์์ํฌ์ด๋ค. JPA๋ฅผ ๊ตฌํํ ๋ํ์ ์ธ ์คํ์์ค๋ก๋ Hibernate๊ฐ ์๋ค ( JPA๋ ์ธํฐํ์ด์ค / ๊ตฌํ hibernate ) ORM(Object-Relational Mapping) ๋๋ณด๊ธฐ ๊ฐ์ฒด-๊ด๊ณ ๋งคํ ๊ฐ์ฒด์งํฅ ์ธ์ด์ ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ ์ฌ์ด์์ ๋ํ๋๋ ๋ฏธ๋ฌํ ์ฐจ์ด์ ์ด๋ก ์ธํ ๋ฌธ์ ๋ค์ ๊ทน๋ณตํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ธฐ์ ์ด๋ค. ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ ์ ์ผ๋ก ์๊ณ ์๋ ์ ํ๋ฆฌ์ผ์ด์
Class์ RDB(Relational DataBase)์ ํ
์ด๋ธ์ ๋งคํ(์ฐ๊ฒฐ)ํ๋ค๋ ๋ป์ด๋ฉฐ, ๊ธฐ์ ์ ์ผ๋ก๋ ์ดํ๋ฆฌ์ผ์ด์
์ ๊ฐ์ฒด..
Spring/Spring ์
๋ฌธ
์์ Jdbc์ ๋์ผํ ํ๊ฒฝ์ค์ ์ ํ๋ฉด ๋๋ค. ์คํ๋ง JdbcTemplate๊ณผ MyBatis ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ JDBC API์์ ๋ณธ ๋ฐ๋ณต ์ฝ๋๋ฅผ ๋๋ถ๋ถ ์ ๊ฑฐํด์ค๋ค. ํ์ง๋ง SQL์ ์ง์ ์์ฑํด์ผ ํ๋ค. ์คํ๋ง JdbcTemplate ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ JdbcTemplateMemberRepository.class public class JdbcTemplateMemberRepository implements MemberRepository { private final JdbcTemplate jdbcTemplate; public JdbcTemplateMemberRepository(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); } Da..
Spring/Spring ์
๋ฌธ
์คํ๋ง ์ปจํ
์ด๋์ DB๊น์ง ์ฐ๊ฒฐํ ํตํฉ ํ
์คํธ๋ฅผ ์งํํด๋ณด์. MemberServiceTest : ์์ํ ์๋ฐ์ฝ๋๋ก test ( spring๊ณผ ๊ด๋ จ์์ ) Database connection ์ ๋ณด๋ ์คํ๋ง ๋ถํธ๊ฐ ๋ค๊ณ ์์ -> ํ
์คํธ๋ฅผ ์คํ๋ง์ด๋ ์ฎ์ด์ MemberSerivceIntegarionTest class ์์ฑ ( MemberServiceTest ๋ณต์ฌ ) @SpringBootTest @Transactional class MemberServiceIntegarionTest { @Autowired MemberService memberService; @Autowired MemoryMemberRepository memberRepository; @SpringBootTest : ์คํ๋ง ์ปจํ
์ด๋์ ํ
์คํธ๋ฅผ ํจ๊ป ..
Spring/Spring ์
๋ฌธ
์ด์ ์ ์ด์ฉํด์๋ ๋ฐ์ดํฐ๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ์๊ธฐ ๋๋ฌธ์ ์๋ฒ๋ฅผ ๋ค์ ๊ป๋ค ์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ์ง์์ง๋ค ๋ฐ์ดํฐ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํด์ ๊ด๋ฆฌํด๋ณด์ H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์น ๋ค์ด๋ก๋ ๋ฐ ์ค์น ๊ถํ ์ฃผ๊ธฐ: chmod 755 h2.sh ์คํ: ./h2.sh jdbc:h2:~/test (์ต์ด ํ๋ฒ) ~/test.mv.db ํ์ผ ์์ฑ ํ์ธ ์ดํ๋ถํฐ๋ jdbc:h2:tcp://localhost/~/test ์ด๋ ๊ฒ ์ ์ ํ
์ด๋ธ ์์ฑํ๊ธฐ ํ
์ด๋ธ ๊ด๋ฆฌ๋ฅผ ์ํด ํ๋ก์ ํธ ๋ฃจํธ์ sql/ddl.sql ํ์ผ์ ์์ฑ drop table if exists member CASCADE; create table member ( id bigint generated by default as identity, name varchar(255), prima..
Spring/Spring ์
๋ฌธ
(1) ํ ํ๋ฉด ์ถ๊ฐ ํ ์ปจํธ๋กค๋ฌ ์์ฑ package hello.hellospring.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } @GetMapping : / ( ์ฒซ ๋๋ฉ์ธ ์์ฒญ ) ์ปจํธ๋กค๋ฌ๊ฐ ์ฐ์ ์ ๊ฐ๊ธฐ ๋๋ฌธ์ ์ฐ์ปดํ์ด์ง ํธ์ถ X return : home.html ํธ์ถ home.html Hello Spring ํ์ ๊ธฐ๋ฅ ํ์ ๊ฐ์
ํ์ ๋ชฉ๋ก (2) ํ์ ๋ฑ..
Spring/Spring ์
๋ฌธ
ํ๋ฉด์ ๋์ฐ๊ธฐ ์ํด์๋ ์ปจํธ๋กค๋ฌ์ ๋ทฐ ํฌํ๋ฆฟ์ด ํ์ -> ๋ฉค๋ฒ ์ปจํธ๋กค๋ฌ ์์ฑ ๋ฉค๋ฒ ์ปจํธ๋กค๋ฌ๊ฐ ๋ฉค๋ฒ ์๋น์ค๋ฅผ ํตํด์ ํ์๊ฐ์
ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์์ด์ผ ํจ ( ์์กด๊ด๊ณ ) ( ๋ฉค๋ฒ ์ปจํธ๋กค๋ฌ๊ฐ ๋ฉค๋ฒ ์๋น์ค๋ฅผ ์์กดํ๊ณ ์๋ค) ์คํ๋ง ๋น๊ณผ ์์กด๊ด๊ณ ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด๊ด๊ณ ์ค์ ์๋ฐ ์ฝ๋๋ก ์ง์ ์คํ๋ง ๋น ๋ฑ๋กํ๊ธฐ ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด๊ด๊ณ ์ค์ ํ์ ์ปจํธ๋กค๋ฌ๊ฐ ํ์์๋น์ค์ ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ์์กด๊ด๊ณ๋ฅผ ์ค๋นํ์. ์ ํํ๋์ด ์๋ ํจํด ์ปจํธ๋กค๋ฌ๋ฅผ ํตํด์ ์ธ๋ถ ์์ฒญ์ ๋ฐ๊ณ ์๋น์ค์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ง๋ค๊ณ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๋ฉค๋ฒ ์ปจํธ๋กค๋ฌ ์์ฑ package hello.hellospring.controller; import org.springframework.stereotyp..