๐ŸŒ Backend/๐Ÿƒ Spring

๋‹จ๊ณ„๋ณ„๋กœ ์„ฑ์žฅํ•˜์ž!
2022.06.29 1. Spring์˜ ํƒ„์ƒ ์ž๋ฐ” ์ง„์˜์— EJB(Enterprise Java Beans)๋ผ๋Š” ๊ธฐ์ˆ ์ด ์žˆ์—ˆ๋‹ค. ์ง€๊ธˆ์œผ๋กœ ๋”ฐ์ง€๋ฉด Spring + Jpa๋ฅผ ๋‹ค ํ•ฉ์ณ ๋†“์€ ๊ธฐ์ˆ . ์ปจํ…Œ์ด๋„ˆ, ๋ถ„์‚ฐ ๋“ฑ์˜ ๊ธฐ์ˆ ์ด ํš๊ธฐ์ ์ด์—ˆ๋Š”๋ฐ ๊ฐ€๊ฒฉ์ด ์ˆ˜์ฒœ๋งŒ์›์œผ๋กœ ๋น„์ŒŒ๋‹ค.. ์ด๋ก ์ ์œผ๋กœ๋Š” ์ข‹์€๋ฐ EJB์— ์˜์กด์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•˜๊ณ  ๋Š๋ฆฐ๋ฐ๋‹ค๊ฐ€ ๋น„์‹ธ๊ธฐ๊นŒ์ง€ ํ•˜๋‹ˆ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŽ์ด ํž˜๋“ค์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋‹ˆ ๋‹ค์‹œ ์˜ค๋ž˜๋œ ๋ฐฉ์‹์˜ ๊ฐ„๋‹จํ•œ ์ž๋ฐ”๋กœ ๋Œ์•„๊ฐ€์ž ํ•ด์„œ ๋‚˜์˜จ ์šฉ์–ด๊ฐ€ POJO(Plain Old Java Object)๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ง์ ‘ ์Šคํ”„๋ง, hibernate๋“ฑ์˜ ์˜คํ”ˆ ์†Œ์Šค๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋‹ค. ์Šคํ”„๋ง์€ EJB ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋Œ€์ฒดํ•˜๊ณ  ๋‹จ์ˆœํ•˜์˜€๋‹ค. Hibernate๋Š” EJB์˜ ์—”ํ‹ฐํ‹ฐ๋นˆ ๊ธฐ์ˆ ์„ ๋Œ€์ฒดํ•˜์˜€๊ณ ,..
2022.06.29 SOLID ์›์น™ ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ์›์น™ SRP: ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(Single Responsibility principle) OCP: ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(Open/closed principle) LSP: ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™(Liskov Substitution principle) ISP: ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™(Interface Segregation principle) DIP: ์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™(Dependency Inversion Principle ) 1. SRP ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ ํ•œ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ง„๋‹ค. ํ•˜๋‚˜์˜ ์ฑ…์ž„์ด๋ผ๋Š” ๊ฒƒ์€ ๋ฌธ๋งฅ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ ํด ์ˆ˜๋„ ์žˆ๊ณ  ์ž‘์„ ์ˆ˜๋„ ์žˆ๊ธฐ์— ๋ชจํ˜ธํ•˜๋‹ค. ๋ณ€๊ฒฝ์ด ์ค‘์š”ํ•œ ๊ธฐ์ค€์ด๋‹ค. ๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ ํŒŒ๊ธ‰ํšจ๊ณผ๊ฐ€ ์ ๋‹ค๋ฉด SRP๋ฅผ ์ž˜ ๋”ฐ๋ฅธ ๊ฒƒ..
AOP(Aspect Oriented Programming) 1. AOP๊ฐ€ ํ•„์š”ํ•œ Example public Long join(Member member){ long start = System.currentTimeMillis(); try{ //๊ฐ™์€ ์ด๋ฆ„์ด ์žˆ๋Š” ์ค‘๋ณต ํšŒ์›X ๋ผ๊ณ  ๊ฐ€์ • validateDuplicateMember(member); //์ค‘๋ณต ํšŒ์› ๊ฒ€์ฆ memberRepository.save(member); return member.getId(); }finally { long finish = System.currentTimeMillis(); long timeMs = finish - start; System.out.println("join = " + timeMs + "ms"); } } ๋งŒ์•ฝ ์œ„์™€ ๊ฐ™์ด ..
2022.06.27 I. JPA 1. ํŠน์ง• (1) Connection, PreparedStatement, Resultset ๋“ฑ ๋ฐ˜๋ณต ์ฝ”๋“œ๋Š” ๋ฌผ๋ก ์ด๊ณ , ๊ธฐ๋ณธ์ ์ธ SQL๊นŒ์ง€ JPA๊ฐ€ ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ์‹คํ–‰ํ•ด์คŒ (2) SQL๊ณผ ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ์˜ ์„ค๊ณ„์—์„œ ๊ฐ์ฒด ์ค‘์‹ฌ์˜ ์„ค๊ณ„๋กœ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์ „ํ™˜ ํ•  ์ˆ˜ ์žˆ๋‹ค. (3) ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ๋œ๋‹ค. (4) JPA๋Š” ์ž๋ฐ” ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค์ด๊ณ , ๊ตฌํ˜„์ฒด๋Š” Hibernate๋“ฑ๋“ฑ์˜ vendor๋“ค์ด ์žˆ์Œ. (5) JPA๋ฅผ Spring์—์„œ ํ•œ๋ฒˆ ๊ฐ์‹ธ์„œ ์ œ๊ณตํ•˜๋Š”๊ฒŒ Spring Data JPA์ž„. 2. ์ดˆ๊ธฐ ์„ค์ • (1) build.gradle์— jpa์ถ”๊ฐ€ implementation 'org.springframework.boot:spring-boot-starter-data-jpa' (2) re..
2022-06-24 ํŒ€ ํ”„๋กœ์ ํŠธ 3๊ฐœ.. + ๊ธฐ๋ง๊ณ ์‚ฌ๋กœ ์ธํ•ด 20์ผ๋งŒ์— ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.. ์˜ค๋žœ๋งŒ์— ๋ณด๋Š” ๊ฒƒ์ด๋‹ˆ ๋งŒํผ ์•ž์— ์ •๋ฆฌํ•œ ๋‚ด์šฉ๋“ค์„ ์ฝ์–ด๋ณด๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•œ๋‹ค Spring JdbcTemplate 1. ํŠน์ง• Pure Jdbc์™€ ๋™์ผํ•œ ํ™˜๊ฒฝ์—์„œ ์ง„ํ–‰ Mybatis์™€ Spring JdbcTemplate์€ JDBC API์—์„œ ์ด์ „์— ๋ดค๋˜ Connection์—ฐ๊ฒฐํ•˜๊ณ  ๋“ฑ๋“ฑ์˜ ๊ณผ์ •์—์„œ ๋ฐ˜๋ณต๋œ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•ด์คŒ. SQL์€ ๊ทธ๋Œ€๋กœ ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผ ํ•จ. 2. Example public class JdbcTemplateMemberRepository implements MemberRepository{ private final JdbcTemplate jdbcTemplate; @Autowired public JdbcTemp..
2022.06.04 Spring์—์„œ JDBC๋กœ DB ์ ‘๊ทผ ํ•˜๋Š” ๋ฐฉ๋ฒ• 1. ์ดˆ๊ธฐ ์„ค์ • (1) build.gradle์— jdbc, h2 ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€ implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'com.h2database:h2' (2) resources/application.properties์— ์Šคํ”„๋ง ๋ถ€ํŠธ db ์—ฐ๊ฒฐ ์„ค์ • ์ถ”๊ฐ€ spring.datasource.url=jdbc:h2:tcp://localhost/~/test spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=khs 2. JdbcMemeberReposito..
DevPoong
'๐ŸŒ Backend/๐Ÿƒ Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (3 Page)