๋ฐฑ์—”๋“œ(Back-End) ๊ฐœ๋ฐœ 52

[TOMCAT] ์„œ๋ฒ„ ํฌํŠธ ์ถฉ๋Œ๋กœ ์ธํ•ด ์„œ๋ฒ„ ์‹œ์ž‘์ด ์•ˆ๋  ๊ฒฝ์šฐ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๊ฐ€ ์ดํด๋ฆฝ์Šค์— ํ‘œ์‹œ๋จ(์˜ค๋ฅ˜์ฐฝ์œผ๋กœ ๋ณ„๋„๋กœ ํ‘œ์‹œ)Port 8080 required by Tomcat v9.0 Server at localhost is already in use. The server may already be running in another process, or a system process may be using the port. To start this server you will need to stop the other process or change the port number(s). Several ports (8009, 8080) required by Tomcat v9.0 Server at localhost are already in use. The serv..

์ •๊ทœํ‘œํ˜„์‹(Regex)

์ •๊ทœ ํ‘œํ˜„์‹์ด๋ž€?- ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ„ด ๊ธฐ๋ฐ˜ ๋ฌธ์ž์—ด(์‹) - ์ •๊ทœํ‘œํ˜„์‹์„ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•  ๋ฌธ์ž์—ด ํŒจํ„ด์„ ์ง€์ •ํ•˜๊ณ    ํŠน์ • ํด๋ž˜์Šค ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •๊ทœํ‘œํ˜„์‹์— ํ•ด๋‹นํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌ - ex) ํŒจ์Šค์›Œ๋“œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋‚˜ ์ „ํ™”๋ฒˆํ˜ธor์ด๋ฉ”์ผ ์–‘์‹ ๊ฒ€์‚ฌ ๋“ฑ(Validation Check ๋ผ๊ณ  ํ•จ) - ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋„คํŠธ์›Œํฌ, ์›น ๋“ฑ์—์„œ ๊ณต์šฉ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ‘œ์ค€ ํ‘œํ˜„ ๋ฐฉ๋ฒ•   (ํ”„๋กœ๊ทธ๋žจ ์–ธ์–ด๋„ ์ž๋ฐ” ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋“ฑ ๋‹ค์–‘ํ•œ ์–ธ์–ด์—์„œ ํ™œ์šฉ ๊ฐ€๋Šฅ) ์ •๊ทœํ‘œํ˜„์‹์— ์‚ฌ์šฉ๋˜๋Š” ํŒจํ„ด ๋ฌธ์ž = ๋ฉ”ํƒ€ ๋ฌธ์ž(Meta Character)=> x ๋˜๋Š” y ๋ผ๋Š” ๋ฌธ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์•ž ๋˜๋Š” ๋’ค์— ๊ธฐํ˜ธ๋ฅผ ๋ถ™์—ฌ ํŒจํ„ด ์ง€์ • [ ์ผ๋ฐ˜์ ์ธ ๊ธฐํ˜ธ ] 1. ^x : x๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฌธ์ž์—ด    ex) "x", "xa", "xxx..

[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..