๐Ÿ˜€
fistkim TECH BLOG
  • Intro
  • ๊ฐ•์˜
    • Reactive Programming in Modern Java using Project Reactor
      • Reactor execution model 1
      • Reactor execution model 2
      • Reactor execution model 3 - parallelism
      • Reactor execution model 4 - overview
      • Transform
      • Combine
      • Side Effect Methods
      • Exception/Error handling
      • retry, retryWhen, repeat
      • BackPressure
      • Cold & Hot Streams
    • NEXTSTEP ํด๋ฆฐ์ฝ”๋“œ with java 9๊ธฐ
      • ์ •๋ฆฌ๋…ธํŠธ
    • NEXTSTEP DDD ์„ธ๋ ˆ๋‚˜๋ฐ 2๊ธฐ
      • CH01 ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ ์ดํ•ด
      • CH02 ํฌ๊ฒŒ ์†Œ๋ฆฌ ๋‚ด์–ด ๋ชจ๋ธ๋ง ํ•˜๊ธฐ
      • CH03 ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ ๊ธฐ๋ณธ ์š”์†Œ
      • CH04 ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ ์•„ํ‚คํ…์ฒ˜
      • CH05 ๋„๋ฉ”์ธ ์ด๋ฒคํŠธ
    • NEXTSTEP ์ธํ”„๋ผ ๊ณต๋ฐฉ 1๊ธฐ
      • ๋ง ๋ถ„๋ฆฌํ•˜๊ธฐ
      • ํ†ต์‹  ํ™•์ธํ•˜๊ธฐ
      • ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์ดํ•ดํ•˜๊ธฐ
      • [๋ฏธ์…˜ 1] ์„œ๋น„์Šค ๊ตฌ์„ฑํ•˜๊ธฐ ์‹ค์Šต
      • [๋ฏธ์…˜ 2] ์„œ๋น„์Šค ๋ฐฐํฌํ•˜๊ธฐ ์‹ค์Šต
      • ์„œ๋ฒ„ ์ง„๋‹จํ•˜๊ธฐ
      • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ง„๋‹จํ•˜๊ธฐ
      • [๋ฏธ์…˜ 3] ์„œ๋น„์Šค ์šด์˜ํ•˜๊ธฐ
      • ์›น ์„ฑ๋Šฅ ์ง„๋‹จํ•˜๊ธฐ
      • ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ
      • k6
      • [๋ฏธ์…˜ 4] ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ
      • ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ๊ฐœ์„ ํ•˜๊ธฐ
      • ์บ์‹ฑ ํ™œ์šฉํ•˜๊ธฐ
      • [๋ฏธ์…˜ 5] ํ™”๋ฉด ์‘๋‹ต ๊ฐœ์„ ํ•˜๊ธฐ
      • Redis Annotation ๋ฐ ์„ค์ •
      • ์ธ๋ฑ์Šค ์ดํ•ดํ•˜๊ธฐ & DB ํŠœ๋‹
      • [๋ฏธ์…˜ 6-1] ์กฐํšŒ ์„ฑ๋Šฅ ๊ฐœ์„ ํ•˜๊ธฐ
      • [๋ฏธ์…˜ 6-2] DB ์ด์ค‘ํ™” ์ ์šฉ
    • NEXTSTEP ๋งŒ๋“ค๋ฉด์„œ ๋ฐฐ์šฐ๋Š” Spring 3๊ธฐ
      • CH01 ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ ๋ฐ”๋ผ๋ณด๊ธฐ
      • CH02 HTTP ์ดํ•ด - ์›น ์„œ๋ฒ„ ๊ตฌํ˜„
        • HTTP ํŒŒ์‹ฑ
        • HTTP ์›น ์„œ๋ฒ„ ๊ตฌํ˜„
      • CH03 MVC - @MVC ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌํ˜„
        • Servlet ๋‹ค์‹œ ์งš๊ธฐ
        • Cookie, Session ๋‹ค์‹œ ์งš๊ธฐ
        • MVC ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌํ˜„
      • CH04 ๋‚˜๋งŒ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌํ˜„
      • CH05 DI - DI ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌํ˜„
      • CH06 Aspect OP
    • ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ
      • ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ์•„ํ‚คํ…์ฒ˜
      • WebAsyncManagerIntegrationFilter
      • SecurityContextPersistenceFilter
      • HeaderWriterFilter
      • CsrfFilter
      • (+) ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ + JWT
      • (+) ๋งˆ์น˜๋ฉฐ
    • ๋” ์ž๋ฐ”, ์ฝ”๋“œ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•
      • CH01 JVM ์ดํ•ดํ•˜๊ธฐ
      • (+) ํด๋ž˜์Šค ๋กœ๋” ์ดํ•ดํ•˜๊ธฐ
      • CH02 ๋ฐ”์ดํŠธ ์ฝ”๋“œ ๋ถ„์„ ๋ฐ ์กฐ์ž‘
      • (+) jacoco
      • CH03 ๋ฆฌํ”Œ๋ ‰์…˜
      • CH04 ๋‹ค์ด๋‚˜๋ฏน ํ”„๋ก์‹œ
      • CH05 ์• ๋…ธํ…Œ์ด์…˜ ํ”„๋กœ์„ธ์„œ
    • ๋” ์ž๋ฐ”, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•
      • CH01 JUnit 5
      • CH02 Mockito
      • (+) Spy vs Mock
      • CH03 ๋„์ปค์™€ ํ…Œ์ŠคํŠธ
      • CH04 ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ
      • (+) VisualVM
      • (+) ํ…Œ์ŠคํŠธ ์ž๋™ํ™”
      • CH05 ์šด์˜ ์ด์Šˆ ํ…Œ์ŠคํŠธ
      • CH06 ์•„ํ‚คํ…์ฒ˜ ํ…Œ์ŠคํŠธ
    • ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹
      • CH01 ์ธํ„ฐ๋„ท ๋„คํŠธ์›Œํฌ
      • CH02 HTTP ๊ธฐ๋ณธ
      • CH03 HTTP ๋ฉ”์„œ๋“œ ์†์„ฑ
      • CH04 HTTP ๋ฉ”์„œ๋“œ ํ™œ์šฉ
      • CH05 HTTP ์ƒํƒœ์ฝ”๋“œ
      • CH06 HTTP ํ—ค๋”1 - ์ผ๋ฐ˜ ํ—ค๋”
      • CH07 HTTP ํ—ค๋”2 - ์บ์‹œ์™€ ์กฐ๊ฑด๋ถ€ ์š”์ฒญ
      • (+) HTTPS ์›๋ฆฌ
    • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ํ•ต์‹ฌ ๊ธฐ์ˆ 
      • CH01 IOC ์ปจํ…Œ์ด๋„ˆ
      • CH02 AOP
      • (+) ์Šคํ”„๋ง ์˜์กด์„ฑ ๊ด€๋ฆฌ
      • (+) ์ƒ์„ฑ์ž ์ฃผ์ž… ์žฅ์ 
    • ์ฝ”๋”ฉ์œผ๋กœ ํ•™์Šตํ•˜๋Š” GoF์˜ ๋””์ž์ธ ํŒจํ„ด
      • ๊ฐ์ฒด ์ƒ์„ฑ
        • ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด
        • ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ ํŒจํ„ด
        • ์ถ”์ƒ ํŒฉํ† ๋ฆฌ ํŒจํ„ด
        • ๋นŒ๋” ํŒจํ„ด
        • ํ”„๋กœํ† ํƒ€์ž… ํŒจํ„ด
      • ๊ตฌ์กฐ
        • ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด
        • ๋ธŒ๋ฆฟ์ง€ ํŒจํ„ด
        • ์ปดํฌ์ง“ ํŒจํ„ด
      • ํ–‰๋™
        • (์ž‘์„ฑ์ค‘)
    • ์‹ค์ „ Querydsl
      • CH01 ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ๊ตฌ์„ฑ
      • CH02 ์˜ˆ์ œ ๋„๋ฉ”์ธ ๋ชจ๋ธ
      • CH03 ๊ธฐ๋ณธ๋ฌธ๋ฒ•
      • CH04 ์ค‘๊ธ‰ ๋ฌธ๋ฒ•
      • CH05 ์‹ค๋ฌดํ™œ์šฉ (์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA์™€ Querydsl)
      • CH06 ์Šคํ”„๋ง๋ฐ์ดํ„ฐJPA ๊ฐ€ ์ œ๊ณตํ•˜๋Š” Querydsl ๊ธฐ๋Šฅ
      • (+) ๋ณ„์นญ(alias)
      • (+) Slice ์ฟผ๋ฆฌ
    • ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA
      • CH01 ํ•ต์‹ฌ๊ฐœ๋…์ดํ•ด 1
      • CH02 ํ•ต์‹ฌ๊ฐœ๋…์ดํ•ด 2
      • CH03 ํ•ต์‹ฌ๊ฐœ๋…์ดํ•ด 3
      • CH04 Spring Data Common
      • CH05 Spring Data JPA
    • ์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ2 - API ๊ฐœ๋ฐœ๊ณผ ์„ฑ๋Šฅ ์ตœ์ ํ™”
      • CH01 ์ง€์—ฐ ๋กœ๋”ฉ๊ณผ ์กฐํšŒ ์„ฑ๋Šฅ ์ตœ์ ํ™”
      • CH02 ์ปฌ๋ ‰์…˜ ์กฐํšŒ ์ตœ์ ํ™”
      • CH03 ์ „์ฒด ์ •๋ฆฌ
    • ์ดˆ๋ณด๋ฅผ ์œ„ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•ˆ๋‚ด์„œ
      • CH01 ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‹œ์ž‘ํ•˜๊ธฐ
      • CH02 ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•Œ์•„๋ณด๊ธฐ
      • CH03 ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‹ค์Šต ์ค€๋น„
      • CH04 ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ธฐ๋ณธ ์‹ค์Šต
    • Flutter Provider Essential
      • CH01 Introduction
      • CH02 Provider Overview
      • CH03 TODO App
      • CH04 Weather App
      • CH05 Firebase Authentication App
    • Flutter Bloc Essential
      • CH01 Introduction
      • CH02 Bloc Overview
      • CH03 TODO App
      • CH04 Weather App
      • CH05 Firebase Authentication App
    • Flutter Advanced Course - Clean Architecture With MVVM
      • CH01 Introduction
      • CH02 Clean Architecture 4 Layer
      • CH03 MVVM
      • CH04 Data Layer
      • (+) Data Layer - response to model
      • (+) Data Layer - Network
      • CH05 Domain Layer
      • CH06 Presentation Layer
      • CH07 Application Layer
      • (+) Application Layer - l10n
      • (+) Application Layer - DI
      • (+) Application Layer - environment
    • ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž…๋ฌธ
      • CH01 ๋ฌธ์ž์—ด
      • CH02 Array(1, 2 ์ฐจ์› ๋ฐฐ์—ด)
      • CH03 Two pointers, Sliding window[ํšจ์œจ์„ฑ: O(n^2)-->O(n)]
      • CH04 HashMap, TreeSet (ํ•ด์‰ฌ, ์ •๋ ฌ์ง€์› Set)
      • CH05 Stack, Queue(์ž๋ฃŒ๊ตฌ์กฐ)
      • CH06 Sorting and Searching(์ •๋ ฌ, ์ด๋ถ„๊ฒ€์ƒ‰๊ณผ ๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜)
      • CH07 Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ)
      • CH08 DFS, BFS ํ™œ์šฉ
      • CH09 Greedy Algorithm
      • CH10 dynamic programming(๋™์ ๊ณ„ํš๋ฒ•)
  • ๋„์„œ
    • ๋งŒ๋“ค๋ฉด์„œ ๋ฐฐ์šฐ๋Š” ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜
      • ํ•™์Šต๋ชฉํ‘œ
      • CH01 ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜์˜ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ผ๊นŒ?
      • CH02 ์˜์กด์„ฑ ์—ญ์ „ํ•˜๊ธฐ
      • CH03 ์ฝ”๋“œ ๊ตฌ์„ฑํ•˜๊ธฐ
      • CH04 ์œ ์Šค์ผ€์ด์Šค ๊ตฌํ˜„ํ•˜๊ธฐ
      • CH05 ์›น ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ
      • CH06 ์˜์†์„ฑ ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ
      • CH07 ์•„ํ‚คํ…์ฒ˜ ์š”์†Œ ํ…Œ์ŠคํŠธํ•˜๊ธฐ
      • CH08 ๊ฒฝ๊ณ„ ๊ฐ„ ๋งคํ•‘ํ•˜๊ธฐ
      • CH09 ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์กฐ๋ฆฝํ•˜๊ธฐ
      • CH10 ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„ ๊ฐ•์ œํ•˜๊ธฐ
      • CH11 ์˜์‹์ ์œผ๋กœ ์ง€๋ฆ„๊ธธ ์‚ฌ์šฉํ•˜๊ธฐ
      • CH12 ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ ๊ฒฐ์ •ํ•˜๊ธฐ
    • ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜
      • ๋“ค์–ด๊ฐ€๋ฉฐ
      • 1๋ถ€ ์†Œ๊ฐœ
        • 1์žฅ ์„ค๊ณ„์™€ ์•„ํ‚คํ…์ฒ˜๋ž€?
        • 2์žฅ ๋‘ ๊ฐ€์ง€ ๊ฐ€์น˜์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ
      • 2๋ถ€ ๋ฒฝ๋Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ: ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„
        • 3์žฅ ํŒจ๋Ÿฌ๋‹ค์ž„ ๊ฐœ์š”
        • 4์žฅ ๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ
        • 5์žฅ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
        • 6์žฅ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • 3๋ถ€ ์„ค๊ณ„ ์›์น™
        • 7์žฅ SRP: ๋‹จ์ผ ์ฑ…์ž„ ์›์น™
        • 8์žฅ OCP: ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™
        • 9์žฅ LSP: ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™
        • 10์žฅ ISP: ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™
        • 11์žฅ DIP: ์˜์กด์„ฑ ์—ญ์ „ ์›์น™
      • 4๋ถ€ ์ปดํฌ๋„ŒํŠธ ์›์น™
        • 12์žฅ ์ปดํฌ๋„ŒํŠธ
        • 13์žฅ ์ปดํฌ๋„ŒํŠธ ์‘์ง‘๋„
        • 14์žฅ ์ปดํฌ๋„ŒํŠธ ๊ฒฐํ•ฉ
      • 5๋ถ€
        • 15์žฅ ์•„ํ‚คํ…์ฒ˜๋ž€?
    • ์Šคํ”„๋ง ์ž…๋ฌธ์„ ์œ„ํ•œ ์ž๋ฐ” ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์›๋ฆฌ์™€ ์ดํ•ด
      • CH01 ์‚ฌ๋žŒ์„ ์‚ฌ๋ž‘ํ•œ ๊ธฐ์ˆ 
      • CH02 ์ž๋ฐ”์™€ ์ ˆ์ฐจ์ /๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • CH03 ์ž๋ฐ”์™€ ๊ฐ์ฒด ์ง€ํ–ฅ
      • (+) ์ž๋ฐ” ์ฝ”๋“œ ์‹คํ–‰์— ๋”ฐ๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์ ์žฌ๊ณผ์ •
      • CH04 ์ž๋ฐ”๊ฐ€ ํ™•์žฅํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ
      • CH05 ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ 5 ์›์น™ - SOLID
      • CH06 ์Šคํ”„๋ง์ด ์‚ฌ๋ž‘ํ•œ ๋””์ž์ธ ํŒจํ„ด
      • CH07 ์Šคํ”„๋ง ์‚ผ๊ฐํ˜•๊ณผ ์„ค์ • ์ •๋ณด
      • (๋ถ€๋ก) ๋žŒ๋‹ค(lambda)
    • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด
      • CH01 ํ˜‘๋ ฅํ•˜๋Š” ๊ฐ์ฒด๋“ค์˜ ๊ณต๋™์ฒด
      • CH02 ์ด์ƒํ•œ ๋‚˜๋ผ์˜ ๊ฐ์ฒด
      • CH03 ํƒ€์ž…๊ณผ ์ถ”์ƒํ™”
      • CH04 ์—ญํ• , ์ฑ…์ž„, ํ˜‘๋ ฅ
      • CH05 ์ฑ…์ž„๊ณผ ๋ฉ”์‹œ์ง€
      • CH06 ๊ฐ์ฒด ์ง€๋„
      • CH07 ํ•จ๊ป˜ ๋ชจ์œผ๊ธฐ
      • (+) ์ธํ„ฐํŽ˜์ด์Šค ๊ฐœ๋… ๋ฐ”๋กœ์žก๊ธฐ
    • ๋„๋ฉ”์ธ ์ฃผ๋„ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜๊ธฐ
      • CH01 ๋„๋ฉ”์ธ ๋ชจ๋ธ ์‹œ์ž‘ํ•˜๊ธฐ
      • CH02 ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”
      • CH03 ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ
      • CH04 ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ์™€ ๋ชจ๋ธ ๊ตฌํ˜„
      • CH05 ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋ฅผ ์ด์šฉํ•œ ์กฐํšŒ ๊ธฐ๋Šฅ
      • CH06 ์‘์šฉ ์„œ๋น„์Šค์™€ ํ‘œํ˜„ ์˜์—ญ
      • CH07 ๋„๋ฉ”์ธ ์„œ๋น„์Šค
      • CH08 ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ
      • CH09 ๋„๋ฉ”์ธ ๋ชจ๋ธ๊ณผ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ
      • CH10 ์ด๋ฒคํŠธ
      • CH11 CQRS
    • ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • CH01 JPA ์†Œ๊ฐœ
      • CH02 JPA ์‹œ์ž‘
      • CH03 ์˜์†์„ฑ ๊ด€๋ฆฌ
      • CH04 ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘
      • CH05 ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ๊ธฐ์ดˆ
      • CH06 ๋‹ค์–‘ํ•œ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘
      • CH07 ๊ณ ๊ธ‰ ๋งคํ•‘
      • CH08 ํ”„๋ก์‹œ์™€ ์—ฐ๊ด€๊ด€๊ณ„ ๊ด€๋ฆฌ
      • CH09 ๊ฐ’ ํƒ€์ž…
      • CH10 ๊ฐ์ฒด์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด
      • CH11 ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ œ์ž‘
      • CH12 ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA
      • CH13 ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์˜์†์„ฑ ๊ด€๋ฆฌ
      • CH14 ์ปฌ๋ ‰์…˜๊ณผ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ
      • CH15 ๊ณ ๊ธ‰ ์ฃผ์ œ์™€ ์„ฑ๋Šฅ ์ตœ์ ํ™”
      • CH16 ํŠธ๋žœ์žญ์…˜๊ณผ ๋ฝ, 2์ฐจ ์บ์‹œ
    • ์†Œํ”„ํŠธ์›จ์–ด ์„ธ์ƒ์„ ์—ฌ๋Š” ์ปดํ“จํ„ฐ๊ณผํ•™
      • CH01 ์ปดํ“จํ„ฐ ๊ณผํ•™ ์†Œ๊ฐœ
      • CH02 ๋ฐ์ดํ„ฐ ํ‘œํ˜„๊ณผ ๋””์ง€ํ„ธ ๋…ผ๋ฆฌ
    • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”
      • 1 ์žฅ ๋“ค์–ด๊ฐ€๊ธฐ
      • 2์žฅ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ํŒŒ๊ดด
        • [01] ์ƒ์„ฑ์ž ๋Œ€์‹  ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ๊ณ ๋ คํ•˜๋ผ
        • [02] ์ƒ์„ฑ์ž์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด ๋นŒ๋”๋ฅผ ๊ณ ๋ คํ•˜๋ผ
        • [03] private ์ƒ์„ฑ์ž๋‚˜ ์—ด๊ฑฐ ํƒ€์ž…์œผ๋กœ ์‹ฑ๊ธ€ํ„ด์ž„์„ ๋ณด์ฆํ•˜๋ผ
        • [04] ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ๋ง‰์œผ๋ ค๊ฑฐ๋“  private ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ผ
        • [05] ์ž์›์„ ์ง์ ‘ ๋ช…์‹œํ•˜์ง€ ๋ง๊ณ  ์˜์กด ๊ฐ์ฒด ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ผ
        • [06] ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ”ผํ•˜๋ผ
        • [07] ๋‹ค ์“ด ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํ•ด์ œํ•˜๋ผ
        • [08] finalizer ์™€ cleaner ์‚ฌ์šฉ์„ ํ”ผํ•˜๋ผ
        • [09] try-finally ๋ณด๋‹ค๋Š” try-with-resources ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ
      • 3์žฅ ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ
        • [10] equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ
        • [11] equals ๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ
        • [12] toString ์„ ํ•ญ์ƒ ์žฌ์ •์˜ํ•˜๋ผ
        • [13] clone ์žฌ์ •์˜๋Š” ์ฃผ์˜ํ•ด์„œ ์ง„ํ–‰ํ•˜๋ผ
        • [14] Comparable ์„ ๊ตฌํ˜„ํ• ์ง€ ๊ณ ๋ คํ•˜๋ผ
      • 4์žฅ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค
        • [15] ํด๋ž˜์Šค์™€ ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ตœ์†Œํ™”ํ•˜๋ผ
  • ํ† ํ”ฝ
    • ์„œ๋ฒ„ ๋ชจ๋‹ˆํ„ฐ๋ง
      • CPU ์‚ฌ์šฉ๋Ÿ‰
      • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰
      • ์Šค๋ ˆ๋“œ ํ’€
    • Spring Boot Monitoring
      • Spring actuator
      • Spring eureka
      • Prometheus
      • grafana
      • Spring actuator + Prometheus + grafana
    • JAVA ๋ฐ์ผ๋ฆฌ ํ† ํ”ฝ
      • ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(memory leak)
      • ๊ฐ์ฒด ์ฐธ์กฐ์˜ ์œ ํ˜•
      • ์ปค์Šคํ…€ ์Šค๋ ˆ๋“œ ํ’€
      • Mark And Compact
      • serialVersionUID ์ดํ•ดํ•˜๊ธฐ
      • ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค
      • ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ
      • equals()์™€ hashCode()๊ฐ€ ๋ฌด์—‡์ด๊ณ  ์—ญํ• ์ด ๋ฌด์—‡์ธ์ง€
      • StringBuffer vs StringBuilder
      • String vs StringBuilder, StringBuffer
      • String interning
    • JAVA GC
    • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ ํ’€๊ธฐ
      • ํ•ด์‹œ
      • ์Šคํƒ/ํ
      • ํž™(Heap)
      • ์ •๋ ฌ
      • ์™„์ „ํƒ์ƒ‰
      • DFS/BFS
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์„ฑ ๋ฐ ์ž‘๋™ ํ๋ฆ„
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค JOIN ์›๋ฆฌ
    • ๊ฐ์ฒด์ง€ํ–ฅ์ƒํ™œ์ฒด์กฐ ์›์น™
    • ์ƒํƒœ(state), ์ƒ์†(inheritance), ํ•ฉ์„ฑ(composition) ์˜ ์ƒ๊ด€๊ด€๊ณ„
    • java enum์€ ๋ฉ”๋ชจ๋ฆฌ์— ์–ธ์ œ, ์–ด๋–ป๊ฒŒ ํ• ๋‹น๋˜๋Š”๊ฐ€
    • Checked Exception vs UnChecked Exception
    • Reactive Streams ์›๋ฆฌํƒ๊ตฌ - ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ ์ง์ ‘ ์ž‘์„ฑํ•ด๋ณด๊ธฐ
    • Flutter Basic
    • Flutter StatefulWidget ์ƒ๋ช…์ฃผ๊ธฐ
    • Flutter ๊ฐ€ ์œ„์ ฏ์„ ๊ทธ๋ฆฌ๋Š” ์›๋ฆฌ
    • Flutter ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜
      • application layer
        • ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ฐ ๋ ˆ์ด์–ด ์„ค๋ช…
        • environment
        • dependency injection
        • go_router
        • foreground & background
        • ๋‹ค๊ตญ์–ด์ฒ˜๋ฆฌ (l10n, i18n)
        • Global ์ฒ˜๋ฆฌ(์‹œ์Šคํ…œ ์ ๊ฒ€, fore->back ๋“ฑ)
        • connection_manager
        • permission_manager
        • push_notification_manager
        • firebase ์—ฐ๋™
      • data layer
        • ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ฐ ๋ ˆ์ด์–ด ์„ค๋ช…
        • network
        • repository
      • domain layer
        • ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ฐ ๋ ˆ์ด์–ด ์„ค๋ช…
      • presentation layer
        • ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ฐ ๋ ˆ์ด์–ด ์„ค๋ช…
        • resources
    • ๊ธฐ์ˆ  ๊ด€๋ จ ํฌ์ŠคํŒ… ์ฝ๊ธฐ
  • ๊ธฐํƒ€
    • ์ž‘์—…์ผ์ง€
      • 2023. 10
      • 2023. 09
      • 2023. 08
      • 2023. 07
      • 2023. 06
      • 2023. 05
      • 2023. 04
      • 2023. 03
      • 2023. 02
      • 2023. 01
      • 2022. 12
    • Business Model
      • ์•„์ด๋””์–ด ๋ถˆํŒจ์˜ ๋ฒ•์น™
      • ๋ฆฐ ๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ
      • ๋ฆฐ ์Šคํƒ€ํŠธ์—…
      • ์ œ๋กœํˆฌ์›
      • MIT ์Šคํƒ€ํŠธ์—… ๋ฐ”์ด๋ธ”
      • ๋ฆฐ์น˜ํ•€
    • ๋ฐฑ๋กœ๊ทธ ์ข…ํ•ฉ
Powered by GitBook
On this page
  • ๊ฐ•์˜์—์„œ ๋‹ค๋ฃจ๋Š” 4 Layer ๋‚ด์šฉ
  • ๊ฐœ์ธ์ ์œผ๋กœ ์ฐพ์•„ ๋ณธ Flutter ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ Layer
  • ๊ฐ Layer(Presentation Layer, Domain Layer, Data Layer) ํƒ๊ตฌ ๋ฐ Layer ๊ตฌ์„ฑ ์—ญํ•  ์ดํ•ด
  • ๊ฐ Layer ๋ฅผ ํŒจํ‚ค์ง€๋กœ ์•Œ์•„๋ณด๊ธฐ
  • ๋‚ด๊ฐ€ ์ •๋ฆฌํ•œ Layer ๋ณ„ ์ƒ์„ธ ์ •๋ฆฌ
  1. ๊ฐ•์˜
  2. Flutter Advanced Course - Clean Architecture With MVVM

CH02 Clean Architecture 4 Layer

PreviousCH01 IntroductionNextCH03 MVVM

Last updated 1 year ago

๊ฐ•์˜์—์„œ ๋‹ค๋ฃจ๋Š” 4 Layer ๋‚ด์šฉ

๊ฐ•์˜์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๊ทผ๊ฐ„์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์„ค๊ณ„๊ตฌ์กฐ์ธ 4๊ฐœ์˜ ๊ณ„์ธต์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ•์˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์— ๋Œ€ํ•œ ์•ˆ๋‚ด์ด๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ์ฐพ์•„ ๋ณธ Flutter ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ Layer

๊ฐ•์˜์ž๋ฃŒ๋งŒ ๋ด์„œ๋Š” ์ •ํ™•ํžˆ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š์•„์„œ ์•„๋ž˜ ์„ธ ๊ฐ€์ง€ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ  ํ–ˆ๋‹ค.

์œ„์˜ ๊ฐ๊ฐ์˜ ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š” Layer ๊ตฌ๋ถ„๋“ค์„ ๋„์‹ํ™” ํ•œ ์ด๋ฏธ์ง€๋“ค์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

ํฌ์ŠคํŒ…๋งˆ๋‹ค ์•ฝ๊ฐ„์”ฉ ์‚ฌ์šฉ๋˜๋Š” ์šฉ์–ด๊ฐ€ ๋‹ค๋ฅธ ๋ถ€๋ถ„์ด ์žˆ๊ธด ํ–ˆ๋Š”๋ฐ ๊ณตํ†ต์ ์œผ๋กœ ๊ฒฐ๊ตญ ๊ฐ™์€ ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๊ณ  ์žˆ๋‹ค.

๊ฐ ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ๋‚˜์˜ ๋ง๋กœ ํ’€์–ด์„œ ๋‹ค์‹œ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด์ž.

Layer ์ •์˜

์ผ๋‹จ Layer ๋“ค์˜ ๊ตฌ๋ถ„์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ธฐ ์ „์— Layer ์ž์ฒด์— ๋Œ€ํ•œ ์ •์˜๋ฅผ ํ•ด์•ผํ•œ๋‹ค. ํฌ์ŠคํŒ…์— ์ด๋ฏธ ์ •๋ฆฌ๊ฐ€ ์ž˜ ๋˜์–ด ์žˆ๋Š”๋ฐ ๋‹จ์ˆœํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜์ž๋ฉด Layer ๋Š” Architecture ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค. ๋…๋ฆฝ๋˜์–ด ์žˆ์œผ๋ฉด์„œ Architecture ์˜ ๊ตฌ์„ฑ์— ํฌํ•จ๋˜๊ธฐ ์œ„ํ•ด์„œ ํŠน์ •ํ•œ ์ฑ…์ž„์„ ์ง€๋Š” ๊ฐœ๋…์ ์ธ ๊ตฌ๋ถ„ ๊ณ„์ธต์ด๋‹ค.

Architecture Letโ€™s start with the basics: what is app architecture? App architecture is the logical way we organize our projects and how the various components interact with each other to fulfill the business requirements. We want to follow standards and make it easy to identify the components that weโ€™ll need to develop features in our codebase. The way we establish the relationship and interactions between these components can reduce or add complexity to our projects, which has a significant impact on the teamโ€™s productivity.

Layers Now that we know what architecture is, letโ€™s define layers. Layers are the components that compose your architecture. We can define these by assigning a specific responsibility to them. We should keep these layers simple, yet isolated enough to achieve a maintainable codebase.

๊ฐ Layer(Presentation Layer, Domain Layer, Data Layer) ํƒ๊ตฌ ๋ฐ Layer ๊ตฌ์„ฑ ์—ญํ•  ์ดํ•ด

๊ฐ ๊ตฌ์„ฑ์— ๊ด€ํ•ด์„œ๊นŒ์ง€ ์„ธ์„ธํ•˜๊ฒŒ ๋„์‹ํ™”๊ฐ€ ๋œ ๊ฒƒ์€ ์•„๋ž˜ ๊ทธ๋ฆผ์ด ๊ฐ€์žฅ ์ข‹์•˜๋‹ค.

๊ฐ Layer ๋ฅผ ํŒจํ‚ค์ง€๋กœ ์•Œ์•„๋ณด๊ธฐ

๊ธฐ์กด์— ๋‹ค๋ฅธ ๋ ˆํผ๋Ÿฐ์Šค์—์„œ ์•Œ์•„๋ดค๋˜ ์ž๋ฃŒ๋“ค๊ณผ ๋น„๊ตํ–ˆ์„๋•Œ Application Layer ๋ถ€๋ถ„์ด ์กฐ๊ธˆ ๋‹ค๋ฅด๋‹ค. ์ผ๋‹จ ๊ฐ•์˜์—์„œ๋Š” ์ €๋ ‡๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ•์˜๋ฅผ ๋ชจ๋‘ ๋๋‚ด๋ฉด ๋‹ค ๋“ค์–ด๊ฐ€๋ณด์ง€ ์•Š์•„๋„ ๋ชจ๋‘ ํŒŒ์•…ํ•˜๊ณ  ์žˆ์–ด์•ผํ•  ๋‚ด์šฉ์ด๋‹ค

๋‚ด๊ฐ€ ์ •๋ฆฌํ•œ Layer ๋ณ„ ์ƒ์„ธ ์ •๋ฆฌ

ํ•™์Šตํ•œ ๊ฒƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ฐ ๊ตฌ์„ฑ๊ณผ ์„ธ๋ถ€ ํ•ญ๋ชฉ์„ ๋‚ด์žฌํ™” ํ•˜์ž. ์ฐธ๊ณ ๋กœ ๊ฐ•์˜์—์„œ ๊ทœ์ •ํ•œ Application Layer ๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ ์ƒ๋žตํ–ˆ๋‹ค.

Application Layer ๋Š” ๋‹ค๋ฅธ Layer ๋“ค๊ณผ ์ƒํ˜ธ์ž‘์šฉ ํ•œ๋‹ค๊ธฐ ๋ณด๋‹ค๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ์— ์ ์šฉ๋˜๋Š” ์ž์›์— ๋Œ€ํ•œ Layer ์ด๋‹ค. ๋ฐฑ์—”๋“œ์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ AppConfig ํŒจํ‚ค์ง€์™€ ์“ฐ์ž„๊ณผ ์—ญํ• ์ด ์™„์ „ํžˆ ์ผ์น˜ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ UI Widget ๊ณผ State Management ์‚ฌ์ด์˜ ์ƒํ˜ธ ์ž‘์šฉ์ด ๊ณง view ์™€ viewModel ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์ด๋ฉฐ ๋ณต์Šต์„ ์œ„ํ•ด ์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋‹ค์‹œ ๋ณด์ž.

๊ตฌํ˜„ ํ•˜๋‹ค๊ฐ€ ์ž ๊น์”ฉ ๋ง‰ํžˆ๋”๋ผ๋„ ํ•™์Šตํ–ˆ๋˜ ๊ฒƒ์„ ๋ณด๊ณ  ๊ตฌํ˜„์„ ํ•˜๋ฉด ๊ทธ๋งŒ์ด๋‹ค. ๋‹ฌ๋‹ฌ ์™ธ์šฐ๋Š”๊ฒŒ ์ค‘์š”ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ์ €๋ ‡๊ฒŒ ๊ณ„์ธต์„ ๋‚˜๋ˆ„๋Š” ์ด์œ ์— ๋Œ€ํ•ด์„œ ์•Œ๊ณ , ๊ณ„์ธต์„ ๋‚˜๋ˆ„๋Š” ๊ณผ์ •์—์„œ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ–ˆ๋Š”์ง€์™€ ๊ทธ ๊ณผ์ •์—์„œ ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ๋“ฑ์— ๋Œ€ํ•ด์„œ ์ธ์ง€ํ•˜์ž.

๊ฐ•์˜์—์„œ๋Š” ์—๋Ÿฌ ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ ๋” ์ž˜ ์ฒ˜๋ฆฌํ•ด ๋‘์—ˆ๋Š”๋ฐ, ๋‚˜์˜ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์ปค์„œ ์‹ค์Šต์—์„œ๋Š” ์ƒ๋žตํ–ˆ๋‹ค.

์ผ๋‹จ ๊ฐœ์ธ์ ์œผ๋กœ๋Š” ์„ธ ํฌ์ŠคํŒ… ์ค‘ ๊ฐ€ ๊ฐ€์žฅ ๋ณด๊ธฐ์—๋Š” ์ข‹์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ๋„ˆ๋ฌด ์ž์„ธํžˆ ๋˜๋Š” ๋„ˆ๋ฌด ๋‹จ์ˆœํžˆ ๋ฌ˜์‚ฌํ•˜์ง€ ์•Š์œผ๋ฉด์„œ๋„ ์ •ํ™•ํ•˜๊ฒŒ ๊ฐ Layer ์˜ ์—ญํ• ๊ณผ ๊ฐ Layer ์— ์†ํ•˜๋Š” ๊ฒƒ๋“ค์˜ ์—ญํ• ๋“ค์„ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์–ด์„œ๋‹ค.

์ด ํฌ์ŠคํŒ…์— ๋‚˜์˜จ ๊ทธ๋ฆผ์ธ๋ฐ ์•„์‰ฌ์šด ์ ์€ Layer ์ž์ฒด๋งŒ ์„ค๋ช…ํ–ˆ์œผ๋ฉด ์ข‹๊ฒ ๋Š”๋ฐ ์ผ๋ถ€ ๊ฐœ๋…์ด Bloc ์— ์˜์กด์ ์ด๋‹ค.

๊ฐ Layer ๊ฐ€ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ ํ•™์Šตํ–ˆ๋‹ค. ๋ฅผ ์ฒจ๋ถ€ํ•œ๋‹ค.

Very good layered architecture in Flutter
Flutter Clean Architecture Series โ€” Part 1 (UPDATED)
Flutter x Clean Architecture
Flutter x Clean Architecture
Flutter x Clean Architecture
์†Œ์Šค์ฝ”๋“œ