728x90
λ°˜μ‘ν˜•
SMALL

 

 

Intro

 πŸŒ μš°λ¦¬λŠ” μ§€λ‚œ μ‹œκ°„μ—, μ†Œμœ„ μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ–΄λ– ν•œ μ›λ¦¬λ‘œ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€, κ·Έ 쀑에 μ›Ήμ„œλ²„(μ •ν™•νžˆλŠ” Web Application Server)λŠ” μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ μ•„μ£Ό κ°„λž΅ν•˜κ²Œ μ•Œμ•„λ΄€μŠ΅λ‹ˆλ‹€. 이번 μ‹œκ°„μ—λŠ” μ„œλ²„κ°€ ν•΄μ£ΌλŠ” 일을 쑰금 더 μžμ„Ένžˆ μ‚΄νŽ΄λ³΄κ³ , μŠ€ν”„λ§, μŠ€ν”„λ§λΆ€νŠΈμ— λŒ€ν•œ μ†Œκ°œλ₯Ό κ°–λŠ” μ‹œκ°„μ„ 가져보면 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.

 

 πŸ€” Issue : μ„œλΉ„μŠ€μ˜ 규λͺ¨κ°€ 컀지면 μš°λ¦¬κ°€ flask μ„œλ²„μ—μ„œ μž‘μ„±ν•˜λ˜ 것 κ³Ό 같이 ν”„λ‘œκ·Έλž˜λ°μ„ ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

 

μ„œλΉ„μŠ€ 둜직이 컀져갈수둝 μ—°κ΄€λœ λ°μ΄ν„°λŠ” 훨씬 더 λ§Žμ•„μ§€κ³ , μ²˜λ¦¬ν•΄μ•Ό ν•  λ‘œμ§μ€ 더 λ³΅μž‘ν•΄μ§€κ³ , μ‹¬μ§€μ–΄λŠ” 이것듀이 맞물렀 ν”„λ‘œκ·Έλž¨μ˜ λ³΅μž‘λ„λŠ” κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ μ˜¬λΌκ°‘λ‹ˆλ‹€. 특히 ν”„λ‘œκ·Έλž¨μ˜ 둜직이 μˆ˜μ •λ˜μ–΄μ•Ό ν•˜κ±°λ‚˜ 이미 λ™μž‘ν•˜λŠ” μ„œλ²„μœ„μ— μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•˜λŠ”κ±΄ 사싀상 λΆˆκ°€λŠ₯ν•΄μ§€λŠ” μ‹œμ μ— λ„λ‹¬ν•˜κ²Œλ˜κ³ , κ²°κ΅­ μ‹€νŒ¨λ₯Ό μΈμ •ν•˜κ³  μ•„μ˜ˆ μ„œλ²„λ‚˜ ν”„λ‘œκ·Έλž¨μ„ μƒˆλ‘œ λ§Œλ“œλŠ” 일도 μ‹¬μ‹¬μΉ˜ μ•Šκ²Œ μΌμ–΄λ‚©λ‹ˆλ‹€.

κ·Έλ‚˜λ§ˆ 닀행인 점은, 우리의 μ„ λ°° κ°œλ°œμžλ“€μ΄ 이와 같은 μ‹€νŒ¨λ‘œ 얻은 κ΅ν›ˆμ΄ ν—›λ˜μ§€ μ•Šκ²Œ λ§Žμ€ μžλ£Œμ™€ 사둀λ₯Ό λ‚¨κ²¨λ‘μ—ˆκ³ , μ§€κΈˆμ€ “~~νŒ¨ν„΄” λ˜λŠ” “~~μ•„ν‚€ν…μ³λ‘œ’ 뢈리우고 μžˆμŠ΅λ‹ˆλ‹€. μš°λ¦¬λŠ” μ΄λŸ¬ν•œ 것듀을 κ³΅λΆ€ν•˜λŠ” 것 λ§ŒμœΌλ‘œλ„ 그듀이 ν–ˆμ—ˆλ˜ μ‹€μˆ˜λ₯Ό λ°˜λ³΅ν•˜μ§€ μ•Šκ³  개인의 μˆ˜μ²œμ‹œκ°„, λ™λ£Œλ“€μ˜ μˆ˜λ§Œμ‹œκ°„μ„ μ•„λ‚„ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ†Œν”„νŠΈμ›¨μ–΄ λ””μžμΈ νŒ¨ν„΄(software design pattern)은 μ†Œν”„νŠΈμ›¨μ–΄ κ³΅ν•™μ˜ μ†Œν”„νŠΈμ›¨μ–΄ λ””μžμΈμ—μ„œ νŠΉμ • λ¬Έλ§₯μ—μ„œ κ³΅ν†΅μ μœΌλ‘œ λ°œμƒν•˜λŠ” λ¬Έμ œμ— λŒ€ν•΄ μž¬μ‚¬μš© κ°€λŠ₯ν•œ 해결책이닀. μ†ŒμŠ€λ‚˜ 기계 μ½”λ“œλ‘œ λ°”λ‘œ μ „ν™˜λ μˆ˜ μžˆλŠ” μ™„μ„±λœ λ””μžμΈμ€ μ•„λ‹ˆλ©°, λ‹€λ₯Έ 상황에 맞게 μ‚¬μš©λ  수 μžˆλŠ” λ¬Έμ œλ“€μ„ ν•΄κ²°ν•˜λŠ”λ°μ— μ“°μ΄λŠ” μ„œμˆ μ΄λ‚˜ ν…œν”Œλ¦Ώμ΄λ‹€. λ””μžμΈ νŒ¨ν„΄μ€ ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λ‚˜ μ‹œμŠ€ν…œμ„ λ””μžμΈν•  λ•Œ κ³΅ν†΅λœ λ¬Έμ œλ“€μ„ ν•΄κ²°ν•˜λŠ”λ°μ— μ“°μ΄λŠ” ν˜•μ‹ν™” 된 κ°€μž₯ 쒋은 관행이닀.

Software Architecture Patterns

μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄

 πŸ€” λ””μžμΈ νŒ¨ν„΄μ„ κ³΅λΆ€ν•˜λŠ” 것 μ—­μ‹œ 맀우 μ€‘μš”ν•œ μ£Όμ œμ΄μ§€λ§Œ, 자칫 λ„ˆλ¬΄ λ§Ήμ‹ ν•˜λ €κ³  λ“€λ©΄ 또 였히렀 맀우 큰 μ—­νš¨κ³Όλ₯Ό λ§ˆμ£Όν•œλ‹€κ³  ν•©λ‹ˆλ‹€. μ§€κΈˆ λ‹Ήμž₯은 더 μ€‘μš”ν•œ λ°°μšΈκ±°λ¦¬κ°€ λ§ŽκΈ°λ„ ν•˜κ³  νŠΉμ • νŒ¨ν„΄λ“±μ„ 마주 ν•  λ•Œ λ§ˆλ‹€ ν™•μ‹€νžˆ μ΄ν•΄ν•˜κ³  μΈμ§€ν•˜κ³  λ„˜μ–΄κ°€λŠ” μ •λ„μ˜ 곡뢀가 μ§€κΈˆμ€ κ°€μž₯ 쒋은 것 κ°™μŠ΅λ‹ˆλ‹€.

 

λ³΅μž‘ν•œ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법- 문제λ₯Ό λ‚˜λˆ„μž!

μ‹€μ œλ‘œ λ³΅μž‘ν•œ 문제λ₯Ό μ•„ν‚€ν…μ²˜ 적으둜 ν•΄κ²°ν•˜λŠ” 방법은 맀우 λ‹€μ–‘ν•˜μ§€λ§Œ 주둜 문제λ₯Ό λ‚˜λˆ„λŠ” 방식이 κ°€μž₯ μ• μš©λ©λ‹ˆλ‹€. μ§€λ‚œ μ‹œκ°„μ˜ 이야기듀과 μ›Ήκ°œλ°œ ν”ŒλŸ¬μŠ€ κ°•μ˜λ₯Ό 톡해 μ—¬λŸ¬λΆ„λ“€μ΄ κ΅¬ν˜„ν•΄λ‘” μ˜ˆμ‹œλ‘œ μ•Œκ²Œλœ λ‚΄μš©μ€ μ•„λž˜ κ·Έλ¦Όκ³Ό κ°™μŠ΅λ‹ˆλ‹€. 우리의 μ„œλ²„λŠ” “μƒˆλ‘œμš΄ 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” λΆ€λΆ„”, “μ„œλΉ„μŠ€ λ‘œμ§μ„ μ²˜λ¦¬ν•˜λŠ” λΆ€λΆ„”, **“기쑴의 데이터λ₯Ό μ΄μš©ν•˜λŠ” λΆ€λΆ„”**으둜 λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ‹€μ œλ‘œ 각 뢀뢄은 μŠ€ν”„λ§κ³Ό μŠ€ν”„λ§λΆ€νŠΈμ—μ„œ 각각의 λ ˆμ΄μ–΄λ‘œ λ‚˜λ‰˜μ–΄μ Έ μžˆμŠ΅λ‹ˆλ‹€.

λ ˆμ΄μ–΄λ“œ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄

좜처 : https://jojoldu.tistory.com/603


Presentation 계측

μ‚¬μš©μžμ™€ μƒν˜Έ μž‘μš© 처리 계측

CLI, HTTP μš”μ²­, HTML 처리 등을 λ‹΄λ‹Ήν•œλ‹€.

HTTP μš”μ²­ 처리 및 HTML λ Œλ”λ§μ— λŒ€ν•΄ μ•Œκ³  μžˆλŠ” μ›Ή 계측

ν”νžˆ λ§ν•˜λŠ” MVC (Model / View / Controller) 도 이 계측에 μ†ν•œλ‹€.

μš°λ¦¬κ°€ URL을 λ§€ν•‘ν•΄μ„œ νŠΉμ • λ©”μ„œλ“œκ°€ ν•΄λ‹Ή URL둜 μš”μ²­μ΄ 올 λ•Œλ§ˆλ‹€ 호좜되게 ν”„λ‘œκ·Έλž˜λ° ν–ˆμ—ˆμ£ ? κ·Έ 계측을 λ§ν•˜λŠ” 것이며, μŠ€ν”„λ§μ—μ„œλŠ” @Controller μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜μ—¬ ν‘œν˜„ν•©λ‹ˆλ‹€!


Domain(Business or Service) 계측

μ„œλΉ„μŠ€/μ‹œμŠ€ν…œμ˜ 핡심 둜직

μœ νš¨μ„± 검사 및 계산을 ν¬ν•¨ν•˜λŠ” Business 논리 계측

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μˆ˜ν–‰ν•΄μ•Όν•˜λŠ” λ„메인과 κ΄€λ ¨λœ μž‘μ—…λ“€μ„ λ‹΄λ‹Ήν•œλ‹€.

μž…λ ₯/μ €μž₯된 데이터λ₯Ό 기반으둜 계산

Presentation κ³„μΈ΅μ—μ„œ 받은 λ°μ΄ν„°μ˜ μœ νš¨μ„± (Validation) 검사

μ–΄λ–€ Data Access λ₯Ό 선택할지 κ²°μ •

우리의 μ„œλ²„ ν”„λ‘œκ·Έλž¨μ΄ λ³΅μž‘ν•΄μ§€λ©΄, λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ λ³„λ„μ˜ 계측(Layer)이 ν•„μš”ν•©λ‹ˆλ‹€. 사싀 더 μ΄μƒμ μœΌλ‘œλŠ” 유λŠ₯ν•œ μ„œλ²„ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ¨μ„œ Presentaion, Data Accessκ³„μΈ΅μ—λŠ” λ³„λ‘œ ν•  일이 μ—†κ³ , 도메인 계측이 λΉ„λŒ€ν•΄μ§€λŠ”κ²Œ κ°€μž₯ μ’‹μŠ΅λ‹ˆλ‹€. μŠ€ν”„λ§μ—μ„œλŠ” @Service μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•΄μ„œ ν‘œν˜„ν•©λ‹ˆλ‹€!


Data Access(Persistence) 계측

DAO 계측

Database / Message Queue / μ™ΈλΆ€ APIμ™€μ˜ 톡신 λ“± 처리

λ°μ΄ν„°λ² μ΄μŠ€ λ˜λŠ” 원격 μ„œλΉ„μŠ€μ—μ„œ 영ꡬ 데이터λ₯Ό κ΄€λ¦¬ν•˜λŠ” 방법을 λΆ„λ₯˜ν•˜λŠ” 데이터 μ ‘κ·Ό 계측

우리의 λ°μ΄ν„°λ² μ΄μŠ€, ν˜Ήμ€ 데이터λ₯Ό μ €μž₯ν•˜λŠ” 데이터 μ†ŒμŠ€λŠ” μ„œλ²„ 외뢀에 λ³„κ°œλ‘œ μ‘΄μž¬ν•˜λŠ” κ²½μš°κ°€ 맀우 많고, κ·ΈλŸ¬ν•œ 데이터 μ†ŒμŠ€μ™€μ˜ μ†Œν†΅μ„ ν•΄μ£ΌλŠ” 계측이라고 μƒκ°ν•˜μ‹œλ©΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€. μŠ€ν”„λ§μ—μ„œλŠ” @Repository μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•΄μ„œ ν‘œν˜„ν•©λ‹ˆλ‹€.

 πŸ™‚ μ•„λž˜ 그림은 μ„œλ²„λ₯Ό λ ˆμŠ€ν† λž‘μœΌλ‘œ λΉ„μœ ν•œ μ˜ˆμ‹œμ΄λ©°, 이 그림을 톡해 각각의 계측과 μŠ€ν”„λ§μ—μ„œμ˜ ν•΄λ‹Ή μ–΄λ…Έν…Œμ΄μ…˜μ΄ μ–΄λ– ν•œ 일을 ν•˜λŠ”μ§€ 감을 작으면 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.

 

Controller, Service, Respository μ‹€μ œ μ½”λ“œλ“€

 πŸ™‚ 각각의 λ ˆμ΄μ–΄μ™€ μ‹€μ œ μ½”λ“œλ“€μ€ ν•˜λ‚˜ν•˜λ‚˜ μžμ„Ένžˆ μ‚΄νŽ΄λ³Ό μ˜ˆμ •μž…λ‹ˆλ‹€! μ§€κΈˆμ€ 이런게 μžˆλ‹€λŠ” μƒκ°μœΌλ‘œ κ°€λ³κ²Œ λ΄μ£Όμ‹œκ³  μ‹€μ œ μ‹€μŠ΅μ—μ„œ μœ„μ™€ 같은 μ½”λ“œλ“€μ„ 직접 μ³λ³΄λ©΄μ„œ ν•™μŠ΅ ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.

 

Controller μ˜ˆμ‹œ μ½”λ“œ

@Controller // #1
public class ContentController {

    private final ContentService contentService; // #2

		@GetMapping("/content/{contentId}") // #3
		public Content getContent(@PathVariable Long contentId) { // #4
        Content content = contentService.getContent(requestDto); //#2-1
        return "/contentPage";
    }

    @PostMapping("/content") //#5
		@ResponseBody// #6
    public Content createContent(@RequestBody ContentRequestDto requestDto) {
        Content content = contentService.createContent(requestDto);
        return content;
    }
}

#1 : 이 μžλ°” 객체가 컨트둀러 역할을 ν•˜λŠ” κ°μ²΄λΌλŠ” 것을 μ•Œλ €μ£ΌλŠ” μ–΄λ…Έν…Œμ΄μ…˜ μž…λ‹ˆλ‹€!

#2 : 각각의 λ ˆμ΄μ–΄λŠ” “일반적으둜” μžκΈ°μ™€ μΈμ ‘ν•œ λ ˆμ΄μ–΄μ™€ 직접 μ†Œν†΅ν•©λ‹ˆλ‹€, 이 경우 ContentService객체λ₯Ό 가지고 μžˆμ–΄, 컨트둀러 λ‹¨μ—μ„œ μ„œλΉ„μŠ€ λ‹¨μœΌλ‘œ μƒˆλ‘œ λ°›μ•„μ˜¨ 데이터λ₯Ό μ „λ‹¬ν•˜κ±°λ‚˜ μ„œλΉ„μŠ€ λ‘œμ§μ„ 호좜 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Όλ“€μ–΄ #2-1 처럼 말이죠!

#3 : ν”ŒλΌμŠ€ν¬μ˜ @app.route(”/”)와 λΉ„μŠ·ν•΄μ„œ 이미 μ§μž‘ν•˜μ…¨κ² μ§€λ§Œ, νŠΉμ • μš”μ²­μ— 호좜될 λ©”μ„œλ“œλ₯Ό μ§€μ •ν•΄μ£ΌλŠ” μ–΄λ…Έν…Œμ΄μ…˜ μž…λ‹ˆλ‹€!

#4 : ν•΄λ‹Ή λ©”μ„œλ“œμ— λ„˜κΈ°λŠ” μΈμžκ°’μ„ μ†μ‰½κ²Œ λ„˜κΈ°λ„λ‘ μœ„μ™€ 같은 μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš© ν•  수 μžˆμŠ΅λ‹ˆλ‹€, μ΄λŸ¬ν•œ μ–΄λ…Έν…Œμ΄μ…˜μ΄ 있으면 μžλ™μœΌλ‘œ μΌμΉ˜ν•˜λŠ” λ³€μˆ˜κ°’μ„ λ©”μ„œλ“œ ν˜ΈμΆœλ˜λŠ” μ‹œμ μ— 같이 λ„˜κ²¨μ€λ‹ˆλ‹€. (쑰금 뒀에 μ΄ν•΄ν•˜μ…”λ„ μ’‹μŠ΅λ‹ˆλ‹€!)

#5 : #3κ³Ό #5κ°€ λ‹€λ₯Έ μ΄μœ λŠ” HttpMethod에 λ”°λΌμ„œ λ‹€λ₯Έ Controller λ©”μ„œλ“œλ₯Ό 연결해쀄 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€, 같은 μ£Όμ†Œλ‘œ 온 GET μš”μ²­κ³Ό POST을 λ‚˜λˆ μ„œ 각각 μ²˜λ¦¬ν•˜κΈ°μ— μš©μ΄ν•˜κ² μ£ ?

#6 : μœ„μ˜ λ©”μ„œλ“œμ™€ μ•„λž˜μ˜ λ©”μ„œλ“œλŠ” 이전에 λ°°μ› λ˜, λ·°κΉŒμ§€ 같이 λ°˜ν™˜ν•˜λŠλƒ, ν˜Ήμ€ JSON ν˜•μ‹μœΌλ‘œ λ°μ΄ν„°λ§Œ λ°˜ν™˜ν•˜λŠλƒμ˜ 차이가 μžˆμŠ΅λ‹ˆλ‹€. 이 뢀뢄도 λ‚˜μ€‘μ— μžμ„Ένžˆ ν•™μŠ΅ν•˜κ² μŠ΅λ‹ˆλ‹€.

Service μ˜ˆμ‹œ μ½”λ“œ

@Service // #1
public class ContentService {
    private final ContentRepository contentRepository; //#2

    public ReturnDto getContent(Long id) {
        ReturnDto returnDto = contentRepository.findById(id);
        return returnDto; //#3
    }
	
    public Content createContent(ContentRequestDto contentRequestDto) {
		    Content content = new Content(contentRequestDto);
		    contentRepository.save(content);
		    return content;
		}

}

#1 : λ§ˆμ°¬κ°€μ§€λ‘œ 이 μžλ°” 객체가 μ„œλΉ„μŠ€ 역할을 ν•˜λŠ” κ°μ²΄λΌλŠ” 것을 μ•Œλ €μ£ΌλŠ” μ–΄λ…Έν…Œμ΄μ…˜ μž…λ‹ˆλ‹€!

#2 : μΈμ ‘ν•œ 계측인 Repository 객체λ₯Ό 가지고 μžˆμ–΄μ•Ό κ² μ£ ?

#3 : 사싀 이 λΆ€λΆ„ μ—­μ‹œ μΈμ ‘ν•œ κ³„μΈ΅μœΌλ‘œ 데이터λ₯Ό μ „λ‹¬ν•˜λŠ” 쀑 μž…λ‹ˆλ‹€. 이해가 μ•ˆκ°€μ‹ λ‹€λ©΄ 이 νŽ˜μ΄μ§€μ˜ λ‚΄μš©μ„ λ‹€μ‹œ μ½μ–΄λ³΄μ‹œλ©΄ 쒋을 것 κ°™λ„€μš”!

Repository μ˜ˆμ‹œ μ½”λ“œ

@Repository
public interface ContentRepository extends JpaRepository<Content, Long> {

}

#1 : λ§ˆμ°¬κ°€μ§€λ‘œ 이 μžλ°” 객체가 μ„œλΉ„μŠ€ 역할을 ν•˜λŠ” κ°μ²΄λΌλŠ” 것을 μ•Œλ €μ£ΌλŠ” μ–΄λ…Έν…Œμ΄μ…˜ μž…λ‹ˆλ‹€!

#2 : 사싀 λ¦¬ν¬μ§€ν† λ¦¬λŠ” μƒλ‹Ήνžˆ λ‹€μ–‘ν•œ 기술과 μ–½ν˜€ 있고 λ‹€μ–‘ν•œ μΌ€μ΄μŠ€κ°€ μžˆμ–΄ μ˜ˆμ‹œ μ½”λ“œλ₯Ό λ³΄μ—¬λ“œλ¦¬κΈ°λŠ” 쑰금 μ–΄λ €μš΄ 것 같기도 ν•©λ‹ˆλ‹€. κ·Έλž˜λ„ μš°λ¦¬κ°€ 직접 μ‚¬μš©ν•˜κ²Œ 될 SpringDataJpa 의 JpaRepositoryλŠ” μ΄μ •λ„λ‘œ μƒκ²Όλ„€μš”

Outro

Outro 1. IOC? DI?

private final ContentService contentService; // #2
private final ContentRepository contentRepository; //#2

μžλ°”λ₯Ό 정말 μ—΄μ‹¬νžˆ κ³΅λΆ€ν•˜μ‹œκ³ , μŠ€ν”„λ§λ§Œ 처음이라면 μœ„μ™€ 같은 μ½”λ“œμ˜ μœ„ν™”κ°μ„ λŠλΌμ…¨μ„ κ²λ‹ˆλ‹€.

λΆ„λͺ… ν•΄λ‹Ή 객체의 λ©”μ„œλ“œλ„ ν˜ΈμΆœν•˜κ³  μžˆλŠ”λ°, ν•΄λ‹Ή κ°μ²΄λŠ” μ–΄λ””μ„œ μ–΄λ–»κ²Œ λ“€μ–΄μ™€μžˆμ„κΉŒμš”?

이외에도 μ•žμœΌλ‘œ 지엽적인 μ»¨νŠΈλ‘€λŸ¬λ‚˜ 리포지토리 μ„œλΉ„μŠ€μͺ½ μ½”λ“œλ₯Ό λ³΄κ²Œλ˜λ‹€ 보면

μžλ°” 문법과 λ¬˜ν•˜κ²Œ λ‹€λ₯Έ 뢀뢄듀이 보일 κ²λ‹ˆλ‹€.

λ•Œλ‘œ μ–΄λ– ν•œ 지식은 λ’€μ˜ λ‚΄μš©μ„ μ•Œμ•„μ•Ό 이해가 더 μ‰¬μš΄ κ²½μš°κ°€ μžˆμ–΄ μ§€κΈˆ μ„€λͺ…ν•˜μ§€λŠ” μ•Šκ² μŠ΅λ‹ˆλ‹€.

μœ„μ™€κ°™μ΄ κΈ°μ‘΄κΉŒμ§€ μ•Œκ³  κ³„μ‹œλ˜ μžλ°” 문법과 λ‹€λ₯Έ 뢀뢄은 κΌ­ λ©”λͺ¨λ₯Ό ν•˜μ‹œκ³  μ˜μ•„ν•΄ ν•˜μ‹œλŠ” μŠ΅κ΄€μ„ κ°€μ§€μ‹œλ©΄,

이후 IOC, DI λ“± 섀계 μ² ν•™ 등을 배우고 μ΄ν•΄ν•˜λŠ”λ° 큰 μžμ‚°μ΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€.

Outro 2. μŠ€ν”„λ§/μŠ€ν”„λ§λΆ€νŠΈλ₯Ό μ‚¬μš©ν•˜λŠ” 이유?

이 뢀뢄도 μ§€κΈˆμ€ 와닿기 μ–΄λ €μš΄ 이유일 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€λ§Œ 지겹고 곡뢀해야 ν•  λ§Žμ€ 뢀뢄듀이 μ „λΆ€ 곡뢀해야 ν•  μ΄μœ κ°€ μžˆμŠ΅λ‹ˆλ‹€.

κ²°λ‘ μ μœΌλ‘œλŠ” μ˜ˆμ „μ— λΆˆνŽΈν–ˆλ˜ 것듀을 정말 획기적으둜 νŽΈν•˜κ²Œ 해쀬기 λ•Œλ¬Έμ— μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜λŠ”λ°,

ꡬ체적인 μŠ€ν”„λ§μ— κ΄€λ ¨λœ λ‚΄μš©μ„ ν•™μŠ΅ν•˜λ‹€ 보면 μ™œ μŠ€ν”„λ§μ΄ νŽΈν•œμ§€λ₯Ό μ†Œκ°œμ‹œμΌœλ“œλ¦¬λŠ” 계기가 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.

 πŸ€” κ·Έλž˜λ„ 일반적으둜 κ°€μž₯ 많이 κΌ½λŠ” μ΄μœ λ‘œλŠ”, λ‹¨μˆœ λ°˜λ³΅μž‘μ—…λΆ€λΆ„μ΄ λ§Žμ•˜λ˜ Controller와 Repositoryμͺ½μ„ 개발 κ΄€μ μ—μ„œ 맀우 쉽고 νŽΈν•˜κ²Œ μ²˜λ¦¬ν•΄μ€˜ κ°€μž₯ μ€‘μš”ν•œ 핡심 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직인 Service λ ˆμ΄μ–΄μ— 더 집쀑 ν•  수 μžˆλ„λ‘ ν•˜κ²Œ ν•΄μ€€λ‹€λŠ” 이유λ₯Ό 꼽기도 ν•©λ‹ˆλ‹€.

 

 

 

728x90
λ°˜μ‘ν˜•
LIST

'개발 > Spring' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

spring μ„œλ²„ μ—°κ²° λ©”λͺ¨λ§Œλ“€κΈ°  (0) 2023.02.04
mvc  (0) 2023.02.04
JPA μ—°μŠ΅!  (0) 2023.02.04
SQL μ„€μ • 및 μ—°μŠ΅!  (0) 2023.02.03
μ›Ή λ™μž‘λ°©μ‹ μ΄ν•΄ν•˜κΈ°  (1) 2023.02.03

+ Recent posts