๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ 71

[Spring] Entity? DTO? VO?

์Šคํ”„๋ง์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ VO๋งŒ ์จ์™”๋Š”๋ฐ.. ๊ฐ‘์ž๊ธฐ DTO๋Š” ์–ธ์ œ ์ผ๋”๋ผ? ํ—ท๊ฐˆ๋ฆฌ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค..์ •ํ™•ํ•œ ๊ฐœ๋…์„ ์•Œ๊ณ  ๊ฐ€์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค๐Ÿ’ก Spring์˜ ๊ธฐ๋ณธ 3๊ฐ€์ง€ ๊ณ„์ธต(+๋„๋ฉ”์ธ ๋ชจ๋ธ ํด๋ž˜์Šค)ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต(@Controller) : ์›น ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ๋ฐ ์‘๋‹ต์„ ์ฒ˜๋ฆฌ, ์ตœ์ข… UI์—์„œ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์„œ๋น„์Šค ๊ณ„์ธต(@Service) : ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ, ๋น„์ฆˆ๋‹ˆ์Šค์™€ ๊ด€๋ จ๋œ ๋„๋ฉ”์ธ ๋ชจ๋ธ์˜ ์ ํ•ฉ์„ฑ ๊ฒ€์ฆ, ์–‘์ชฝ์˜ ๊ณ„์ธต๋“ค๊ณผ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต๋ฐ์ดํ„ฐ ์—‘์„ธ์Šค(=Persistence) ๊ณ„์ธต(@Repository, ORM, Mybatis ํ”„๋ ˆ์ž„์›Œํฌ..) : DB์™€ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• , ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ฅผ ์ ์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ, CRUD ์ˆ˜ํ–‰๋„๋ฉ”์ธ ๋ชจ๋ธ ํด๋ž˜์Šค(VO, DT..

[Spring] DI์™€ IOC ๋ž€?

ํ”ํžˆ๋“ค IoC์™€ DI(Dependency Injection: ์˜์กด์„ฑ ์ฃผ์ž…)์„ ํ—ท๊ฐˆ๋ คํ•˜๊ฑฐ๋‚˜, ๋™์ผ์‹œํ•˜๊ณ ๋Š” ํ•œ๋‹ค.ํ•˜์ง€๋งŒ ์‚ฌ์‹ค IoC์™€ DI๋Š” ๋‹ค๋ฅธ ๊ฐœ๋…์ด๋‹ค. ์ ˆ๋Œ€ IoC == DI๊ฐ€ ์•„๋‹ˆ๋‹ค! (DI โŠ‚ IoC ๋ผ๋ฉด ๋ชฐ๋ผ๋„)IoC๋Š” ํ”„๋กœ๊ทธ๋žจ ์ œ์–ด๊ถŒ์„ ์—ญ์ „์‹œํ‚ค๋Š” ๊ฐœ๋…์ด๊ณ , DI๋Š” ํ•ด๋‹น ๊ฐœ๋…์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ, ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๊ฐ์ฒด์˜ ์˜์กด๊ด€๊ณ„๋ฅผ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…์‹œํ‚ค๋Š” ํŒจํ„ด์„ ๋งํ•œ๋‹ค.IOC (Inversion of Control) : ์ œ์–ด์˜ ์—ญ์ „ * ํ• ๋ฆฌ์šฐ๋“œ ์›์น™์˜ "Don't call usd, We'll call you." : ๋ฐฐ์šฐ๋“ค(๊ฐ์ฒด)์—๊ฒŒ ์˜ํ™”์‚ฌ์—์„œ "ํ•„์š”ํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋จผ์ € ์—ฐ๋ฝํ• ํ…Œ๋‹ˆ, ๋จผ์ € ์—ฐ๋ฝํ•˜์ง€ ๋งˆ์„ธ์š”" ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ(๊ฐ์ฒด์˜ ์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ์†Œ๋ฉธ, ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋“ฑ..)๋ฅผ ํด๋ผ์ด์–ธ..

[SpringBoot] 7_AOP(๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)

AOP๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ- ๋ชจ๋“  ๋ฉ”์†Œ๋“œ์˜ ํ˜ธ์ถœ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? - '๊ณตํ†ต' ๊ด€์‹ฌ ์‚ฌํ•ญ vs 'ํ•ต์‹ฌ' ๊ด€์‹ฌ ์‚ฌํ•ญ- ํšŒ์› ๊ฐ€์ž… ์‹œ๊ฐ„, ํšŒ์› ์กฐํšŒ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด?package hello.hello_spring.service;import hello.hello_spring.domain.Member;import hello.hello_spring.repository.MemberRepository;import hello.hello_spring.repository.MemoryMemberRepository;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import..

[SpringBoot] 6.6_์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA

์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋ฅผ ์“ฐ๋ฉด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๊ตฌํ˜„ ํด๋ž˜์Šค ์—†์ด ์ธํ„ฐํŽ˜์ด์Šค๋งŒ์œผ๋กœ ๊ฐœ๋ฐœ์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋ณต ๊ฐœ๋ฐœํ•ด์˜จ ๊ธฐ๋ณธ CRUD ๊ธฐ๋Šฅ๋„ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๊ฐ€ ๋ชจ๋‘ ์ œ๊ณตํ•จ. ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (์„ค์ •์€ ์•ž์˜ JPA ์„ค์ •๊ณผ ๋™์ผ) ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA ์ œ๊ณต ๊ธฐ๋Šฅ- ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ๊ธฐ๋ณธ์ ์ธ CRUD - findByName() , findByEmail() ์ฒ˜๋Ÿผ ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ๋งŒ์œผ๋กœ ์กฐํšŒ ๊ธฐ๋Šฅ ์ œ๊ณต - ํŽ˜์ด์ง• ๊ธฐ๋Šฅ ์ž๋™ ์ œ๊ณต ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ (์ธํ„ฐํŽ˜์ด์Šค)package hello.hello_spring.repository;import hello.hello_spring.domain.Member;import org.springframewo..

[SpringBoot] 6.5_JPA

JPA(์ž๋ฐ” ํผ์‹œ์Šคํ„ด์Šค API) vs MyBatis JPA (์ž๋ฐ” ํผ์‹œ์Šคํ„ด์Šค API) MyBatis (๋งˆ์ด๋ฐ”ํ‹ฐ์Šค)๊ณตํ†ต์ Java ๊ธฐ๋ฐ˜์˜ Spring ๋˜๋Š” SpringBoot์—์„œ ์‚ฌ์šฉDB์—ฐ๋™ ๊ธฐ์ˆ DB๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฒˆ๊ฑฐ๋กœ์šด ๋ฐ˜๋ณต์ž‘์—…์„ ์—†์• ์คŒ์ฐจ์ด์ ORM(Object Relation Mapping) ๊ธฐ์ˆ : ๊ฐ์ฒด์™€ DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๋งคํ•‘SQL๋ฌธ๊นŒ์ง€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ,DB ๋ฐ์ดํ„ฐ์™€ Java ๊ฐ์ฒด๋ฅผ ๋งคํ•‘์‹œ์ผœ์คŒ์œผ๋กœ์จ MyBatis๋ณด๋‹ค ํŽธ๋ฆฌํ•˜์ง€๋งŒ ๋ฐฐ์šฐ๊ธฐ ์–ด๋ ค๊ฐ์ฒด ์ง€ํ–ฅ์  ๊ฐœ๋ฐœ์— ์ค‘์ ๊ฐ„๋‹จํ•œ ๋งคํ•‘ ๋ฐ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์ ‘๊ทผ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์„ ํƒSQL Mapper ๊ธฐ์ˆ : ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ SQL ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ฒด์— ๋งคํ•‘XML ํŒŒ์ผ๋กœ SQL๋ฌธ Java์™€ ๋ถ„๋ฆฌSQL๊ฐœ๋ฐœ๊ณผ ์œ ์ง€๋ณด์ˆ˜์— ์šฉ์ด๋™์  SQL ์ƒ์„ฑ ๊ธฐ๋Šฅ์ „์ž์ •๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์‚ฌ์šฉ๋ณต..

[SpringBoot] 6.4_์Šคํ”„๋ง JdbcTemplate

JdbcTemplate์€ ์ˆœ์ˆ˜ Jdbc์™€ ๋™์ผํ•œ ํ™˜๊ฒฝ์„ค์ •์„ ํ•˜๋ฉด ๋จ. ์Šคํ”„๋ง JdbcTemplate ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌpackage hello.hello_spring.repository;import hello.hello_spring.domain.Member;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;import org.springframework.jdbc.core.simple.SimpleJdbcInsert;import javax.sql.DataSource;..

[SpringBoot] 6.3_์Šคํ”„๋ง ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ (DB์—ฐ๊ฒฐ)

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ DB๊นŒ์ง€ ์—ฐ๊ฒฐํ•˜๋Š” ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ง„ํ–‰ํ•ด๋ณด๊ธฐ!package hello.hello_spring.service;import hello.hello_spring.domain.Member;import hello.hello_spring.repository.MemberRepository;import hello.hello_spring.repository.MemoryMemberRepository;import org.junit.jupiter.api.AfterEach;import org.junit.jupiter.api.BeforeEach;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;i..

[SpringBoot] 6.2_์ˆœ์ˆ˜ JDBC

ํ™˜๊ฒฝ ์„ค์ • * build.gradle ํŒŒ์ผ์— jdbc, h2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€ dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'com.h2database:h2' testImplementation 'org.springframework.boot:spring-boot-starter-test' test..

[SpringBoot] 6.1_์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ (H2)

H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์น˜ H2 DB : ๊ฐœ๋ฐœ์ด๋‚˜ ํ…Œ์ŠคํŠธ ์šฉ๋„๋กœ ๊ฐ€๋ณ๊ณ  ํŽธ๋ฆฌํ•œ DB, ์›น ํ™”๋ฉด ์ œ๊ณตhttps://www.h2database.com/html/main.html H2 Database EngineH2 Database Engine Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; in-memory databases Browser based Console application Small footprint: around 2.5 MB jar file size     Suppwww.h2database.com - ์„ค์น˜ ํ›„ h2.sh ..

[SpringBoot] 5_ํšŒ์›๊ด€๋ฆฌ-์›น MVC ๊ฐœ๋ฐœ

ํšŒ์› ์›น ๊ธฐ๋Šฅ - ํ™ˆ ํ™”๋ฉด ์ถ”๊ฐ€ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌpackage hello.hello_spring.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;@Controllerpublic class HomeController { @GetMapping("/") public String home() { return "home"; }} ํšŒ์› ๊ด€๋ฆฌ ํผ HTML Hello Spring ํšŒ์› ๊ธฐ๋Šฅ ํšŒ์›๊ฐ€์ž… ํšŒ์›์กฐํšŒ  ์ฐธ๊ณ ) ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ •์  ํŒŒ์ผ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์•„์„œ ๋จผ์ € ์ปจํŠธ๋กค๋Ÿฌ๋ถ€ํ„ฐ ์ฐพ๊ณ , ์—†์œผ๋ฉด..