๐Ÿ“š
TIL
  • README
  • Git
    • Basic
    • Remote Repository
    • Log & Diff
    • Rebase&Cherri-Pick
    • git-flow
  • DevOps
    • Monolithic vs MSA
    • Jenkins ์‹œ์ž‘ํ•˜๊ธฐ
    • Airflow ์‹œ์ž‘ํ•˜๊ธฐ
    • Airflow ์‹œ์ž‘ํ•˜๊ธฐ
    • Build Tools
      • maven
  • ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก 
    • TDD
  • Spring
    • IoC
    • Is Spring Bean Thread-Safe?
    • Spring Singleton
    • Component Scan
    • Spring Annotation
    • ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž…(DI)
    • Lombok ํ™œ์šฉํ•˜๊ธฐ
    • Bean ์ƒ๋ช…์ฃผ๊ธฐ์™€ ์ฝœ๋ฐฑ
    • Bean Scope
    • AOP(1) - AOP๋ž€
    • AOP(2) - Aop Proxy
    • AOP(3) - Dynamic Proxy
    • AOP(4) - AspectJ
    • POJO
    • Spring ์„œ๋น„์Šค ๊ตฌ์กฐ
    • Transaction
    • JPA๋ž€?
    • JPA Entity
    • Spring Data JPA
    • Spring Data Specification
    • Model Mapping
    • Cache
    • restTemplate
    • YAML ํŒŒ์ผ ์„ค์ •
    • Spring Boot
      • H2 DB ์„ค์ •
      • ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •
      • Mybatis ์—ฐ๋™ํ•˜๊ธฐ
    • Spring Batch
      • Batch ์‹œ์ž‘ํ•ด๋ณด๊ธฐ
      • Batch Job Flow
      • Job
      • Step
      • Batch Scope & Job Parameter
      • JobRepository์™€ ๋ฉ”ํƒ€ํ…Œ์ด๋ธ”
      • Chunk ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • ItemReader
      • ItemProcessor
      • ItemWriter
      • Batch Schedular
      • Job๋ณ„ Bean๋“ฑ๋กํ•˜๊ธฐ
      • Batch ๊ตฌํ˜„์‹œ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜ ์ •๋ฆฌ
      • Spring Batch Scaling
        • Multithread Job๊ตฌํ˜„์‹œ ์ด์Šˆ์‚ฌํ•ญ
    • Spring test
      • Junit5
        • ํ…Œ์ŠคํŠธ ์ด๋ฆ„ ํ‘œ๊ธฐ
        • ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน ์‚ฌ์ด์˜ ๊ด€๊ณ„
        • ํƒœ๊ทธ์™€ ํ•„ํ„ฐ๋ง
        • ๋™์  ํ…Œ์ŠคํŠธ
        • ํ…Œ์ŠคํŠธ LifeCycle
        • ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ
        • ํ…Œ์ŠคํŠธ ์ˆœ์„œ
        • AssertJ
        • ํ…Œ์ŠคํŠธ ๋ณ‘๋ ฌ ์‹คํ–‰
        • AssertJ
        • Mock
      • Spring Boot Test DB ๋ถ„๋ฆฌ
      • Spring Batch Test
  • Web Application
    • Web Server & WAS
    • ๊ด€๋ จ ๊ฐœ๋… - HTTP API, HTML, CSR, SSR
    • Servlet
    • JSP
    • Cookie And Session
    • ์˜ˆ์™ธํŽ˜์ด์ง€
    • Java Bean
    • JDBC
    • Connection Pool
    • ํŒŒ์ผ ์—…๋กœ๋“œ
    • Expression Language
    • JSTL
    • FrontControllerํŒจํ„ด Command ํŒจํ„ด
    • Forwarding
    • MVC
    • ํšŒ์›๊ฐ€์ž…์˜ˆ์ œ
    • ์ฐธ๊ณ 
      • ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ค์ •
  • Java+
    • SOAP/WSDL vs REST
    • WSDL์„ JAVA๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ
    • SOAP ํ†ต์‹  OPEN API๋กœ ๊ฐœ๋ฐœํ•ด๋ณด๊ธฐ
  • Java
    • Basic
      • ๋ณ€์ˆ˜์™€ ํƒ€์ž…
      • ์—ฐ์‚ฐ์ž
      • ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ˜๋ณต๋ฌธ
      • ์ฐธ์กฐ ํƒ€์ž…
      • ํด๋ž˜์Šค
      • ์ƒ์†(Inheritance)
      • ์ธํ„ฐํŽ˜์ด์Šค(Interface)
      • ์ค‘์ฒฉ ํด๋ž˜์Šค์™€ ์ค‘์ฒฉ ์ธํ„ฐํŽ˜์ด์Šค
      • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
      • API - Object, System, Class, Math, Wrapper
      • API - String, StringBuffer, StringBuilder
      • Thread
      • Generic
      • Lambda
      • Collection - List, Set
      • Collection - Map
      • Collection - Tree
      • Collection - Stack, Queue
      • Stream
      • Reflection
      • ์ •๊ทœํ‘œํ˜„์‹
      • GUI
      • UML
      • Serializable
    • Advanced
      • OutOfMemoryError
      • AutoValue
      • meta-annotation
        • @Retention
        • @Target
        • @Repeatable
    • Effective Java 3/E
      • ITEM 1: Static Factory Method(์ •์  ๋ฉ”์†Œ๋“œ)
      • ITEM 2: Builder Pattern
      • ITEM 3: Singleton
      • ITEM 4: Private Constructor
      • ITEM 5: Dependency Injection
      • ITEM 6: Avoid Unnecessary Object
      • ITEM 7: Eliminate Object Reference
      • ITEM 8: Avoid finalizer and cleaner
      • ITEM 9: try-with-resources
      • ITEM 10: The gerneral contract when overriding equlas
      • ITEM 11: Overriding hashCode
      • ITEM 12: overriding toString
      • ITEM 13: overriding clone judiciously
      • ITEM 14: Consider implementing comparable
      • ITEM 15: ํด๋ž˜์Šค์™€ ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ์„ ์ตœ์†Œํ™”ํ•ด๋ผ
      • ITEM 16: Use Accessor methods
      • ITEM 17: ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์„ ์ตœ์†Œํ™”ํ•ด๋ผ(๋ถˆ๋ณ€ ํด๋ž˜์Šค)
      • ITEM 18: ์ƒ์†๋ณด๋‹จ ์ปดํฌ์ง€์…˜์„ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 19: ์ƒ์†์„ ๊ณ ๋ คํ•ด ์„ค๊ณ„ํ•˜๊ณ  ๋ฌธ์„œํ™”ํ•ด๋ผ
      • ITEM 20: ์ถ”์ƒ ํด๋ž˜์Šค๋ณด๋‹ค ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์šฐ์„ ํ•˜๋ผ
      • ITEM 21: ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„ํ•˜๋Š” ์ชฝ์„ ์ƒ๊ฐํ•ด ์„ค๊ณ„ํ•ด๋ผ.
      • ITEM 22: ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํƒ€์ž…์„ ์ •์˜ํ•˜๋Š” ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 23: ํƒœ๊ทธ ๋‹ฌ๋ฆฐ ํด๋ž˜์Šค๋ณด๋‹ค ํด๋ž˜์Šค ๊ณ„์ธต๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•ด๋ผ
      • ITEM 24: ๋ฉค๋ฒ„ ํด๋ž˜์Šค๋Š” ๋˜๋„๋ก static์œผ๋กœ ๊ตฌํ˜„ํ•ด๋ผ
      • ITEM 25: ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค๋Š” ํ•œ ํŒŒ์ผ์— ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•ด๋ผ.
      • ITEM 26: Raw type์€ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ๋ผ
      • ITEM 27: ๋น„๊ฒ€์‚ฌ ๊ฒฝ๊ณ ๋ฅผ ์ œ๊ฑฐํ•ด๋ผ
      • ITEM 28: ๋ฐฐ์—ด๋ณด๋‹ค๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 29: ์ด์™•์ด๋ฉด ์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ ๋งŒ๋“ค์–ด๋ผ
      • ITEM 30: ์ด์™•์ด๋ฉด ์ œ๋„ค๋ฆญ ๋ฉ”์„œ๋“œ๋กœ ๋งŒ๋“ค์–ด๋ผ
      • ITEM 31 : ํ•œ์ •์  ์™€์ผ๋“œ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•ด API ์œ ์—ฐ์„ฑ์„ ๋†’์—ฌ๋ผ
      • ITEM 32: ์ œ๋„ค๋ฆญ๊ณผ ๊ฐ€๋ณ€์ธ์ˆ˜๋ฅผ ํ•จ๊ป˜ ์“ธ ๋•Œ๋Š” ์‹ ์ค‘ํ•ด๋ผ
      • ITEM 33: ํƒ€์ž… ์•ˆ์ „ ์ด์ข… ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ณ ๋ คํ•ด๋ผ
      • ITEM 34: int ์ƒ์ˆ˜ ๋Œ€์‹  ์—ด๊ฑฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 35: ordinal ๋ฉ”์„œ๋“œ ๋Œ€์‹  ์ธ์Šคํ„ด์Šค ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 36: ๋น„ํŠธ ํ•„๋“œ ๋Œ€์‹  EnumSet์„ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 37: ordinal ์ธ๋ฑ์‹ฑ ๋Œ€์‹  EnumMap์„ ์‚ฌ์šฉํ•ด๋ผ
      • TEM 38 : ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์—ด๊ฑฐํƒ€์ž…์ด ํ•„์š”ํ•˜๋ฉด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 39: ๋ช…๋ช… ํŒจํ„ด๋ณด๋‹ค ์• ๋„ˆํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 40: @Override ์–ด๋…ธํ…Œ์ด์…˜์„ ์ผ๊ด€๋˜๊ฒŒ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 41: ์ •์˜ํ•˜๋ ค๋Š” ๊ฒƒ์ด ํƒ€์ž…์ด๋ผ๋ฉด ๋งˆ์ปค ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 42: ์ต๋ช… ํด๋ž˜์Šค๋ณด๋‹ค๋Š” ๋žŒ๋‹ค๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 43: ๋žŒ๋‹ค๋ณด๋‹ค๋Š” ๋ฉ”์„œ๋“œ ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 44: ํ‘œ์ค€ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 45: ์ŠคํŠธ๋ฆผ์€ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 46: ์ŠคํŠธ๋ฆผ์—์„œ ๋ถ€์ž‘์šฉ ์—†๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 47: ๋ฐ˜ํ™˜ ํƒ€์ž…์œผ๋กœ๋Š” ์ŠคํŠธ๋ฆผ๋ณด๋‹ค ์ปฌ๋ ‰์…˜์ด ๋‚ซ๋‹ค.
      • ITEM 48: ์ŠคํŠธ๋ฆผ ๋ณ‘๋ ฌํ™”๋Š” ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 49: ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌํ•ด๋ผ
      • ITEM 50: ์ ์‹œ์— ๋ฐฉ์–ด์  ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค์–ด๋ผ
      • ITEM 51: ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ์‹ ์ค‘ํžˆ ์„ค๊ณ„ํ•ด๋ผ
      • ITEM 52: ๋‹ค์ค‘์ •์˜๋Š” ์‹ ์ค‘ํžˆ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 53: ๊ฐ€๋ณ€์ธ์ˆ˜๋Š” ์‹ ์ค‘ํžˆ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 54: null์ด ์•„๋‹Œ, ๋นˆ ์ปฌ๋ ‰์…˜์ด๋‚˜ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ด๋ผ
      • ITEM 55: Optional ๋ฐ˜ํ™˜์€ ์‹ ์ค‘ํ•˜๊ฒŒ ํ•ด๋ผ
      • ITEM 56: ๊ณต๊ฐœ๋œ API ์š”์†Œ์—๋Š” ํ•ญ์ƒ ์ฃผ์„์„ ์ž‘์„ฑํ•ด๋ผ
      • ITEM 57: ์ง€์—ญ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•ด๋ผ
      • ITEM 58: ์ „ํ†ต์ ์ธ for ๋ฌธ๋ณด๋‹ค๋Š” for-each๋ฌธ์„ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 59: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ตํžˆ๊ณ  ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 60: ์ •ํ™•ํ•œ ๋‹ต์ด ํ•„์š”ํ•˜๋‹ค๋ฉด float์™€ double์€ ํ”ผํ•ด๋ผ
      • ITEM 61: ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…๋ณด๋‹ค๋Š” ๊ธฐ๋ณธ ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 62: ๋‹ค๋ฅธ ํƒ€์ž…์ด ์ ์ ˆํ•˜๋‹ค๋ฉด ๋ฌธ์ž์—ด ์‚ฌ์šฉ์„ ํ”ผํ•ด๋ผ
      • ITEM 63: ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ์€ ๋А๋ฆฌ๋‹ˆ ์ฃผ์˜ํ•ด๋ผ
      • ITEM 64: ๊ฐ์ฒด๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด ์ฐธ์กฐํ•ด๋ผ
      • ITEM 65: ๋ฆฌํ”Œ๋ ‰์…˜๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 66: ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ๋Š” ์‹ ์ค‘ํžˆ ์‚ฌ์šฉํ•ด๋ผ
      • ITEM 67: ์ตœ์ ํ™”๋Š” ์‹ ์ค‘ํžˆ ํ•ด๋ผ
      • ITEM 68: ์ผ๋ฐ˜์ ์œผ๋กœ ํ†ต์šฉ๋˜๋Š” ๋ช…๋ช… ๊ทœ์น™์„ ๋”ฐ๋ผ๋ผ
    • ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™(SOLID)
    • ๋””์ž์ธํŒจํ„ด
      • Strategy Pattern
      • Template Method Pattern
      • Factory Method Pattern
      • Singleton
      • Delegation
      • Proxy
      • Adapter Pattern
    • ์‹ค์Šต
      • ์ธํ„ฐํŽ˜์ด์Šค ์‹ค์Šต - Vehicle
      • ์ธํ„ฐํŽ˜์ด์Šค ์‹ค์Šต - Remote
      • GUI ์‹ค์Šต - Calculator
      • GUI ์‹ค์Šต - button
      • GUI ์‹ค์Šต - lotto
      • Thread ์‹ค์Šต - ์ขŒ์„์˜ˆ์•ฝ, ๋ฉ”์„ธ์ง€๋ณด๋‚ด๊ธฐ
    • Jar vs War
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    • KEY
    • Index
    • Transaction
    • Trigger
    • Procedure / Function
    • Package
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฐ์›€ํ„ฐ
      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ
      • ๊ด€๊ณ„๋ฐ์ดํ„ฐ ๋ชจ๋ธ
      • ๊ด€๊ณ„๋Œ€์ˆ˜์™€ SQL
    • MySQL
      • Database๋ž€
      • MySQL ์‹œ์ž‘ํ•˜๊ธฐ
      • MySQL Database
      • MySQL Table
      • CRUD
      • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
      • Server์™€ Client
    • PostgreSQL
    • NoSQL
      • Install Cassandra on mac
      • Cassandra๋ž€?
      • NiFi๋ž€
  • Algorithm
    • String
    • Recursion
    • Dynamic Programming
    • Array, Struct, Pointer
    • Math
    • Sort
    • List
    • Stack
    • Queue
    • Graph
    • Tree
    • Maze
    • AVL
    • ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ(Binary Search Tree)
    • DFS์™€ BFS
    • ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Dijkstra's Algorithm)
    • Red-Black ํŠธ๋ฆฌ
    • A* ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • Heap
    • Huffman Coding
    • Priority Queue
    • Bellman-Ford ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • C++
      • Class
      • STL
        • STL pair
        • STL Container - Associate Container
        • STL Container - Sequence Container
        • STL Container - Container Adapter
  • JavaScript
    • JABASCRIPT BASIC
    • Shallow Copy vs Deep Copy
    • OBJECT MODEL
    • NODE
    • ๋™๊ธฐ ์ฒ˜๋ฆฌ vs ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ
    • AJAX
    • CALLBACK
    • PROMISE
    • DEFERRER
    • UNDERSCORE
    • WEBPACK
    • SCOPE
    • EXECUTION CONTEXT
    • Image Object
    • BFCache๋ž€?
    • history.scrollRestoration
    • Intersection Observer
    • JWT - JSON Web Token
    • HTML vs JSON
  • Vue.js
    • ํ™˜๊ฒฝ์„ค์ •
    • Vue.js๋ž€?
    • Vue Instance
    • Vue Component
    • Vue Router
    • HTTP ํ†ต์‹ 
    • Template
    • Single File Component
    • Vue Animation
    • Vuex
    • Djnago์™€ ์—ฐ๋™ํ•˜๊ธฐ
  • Backbone.js
    • Model
    • Collection
    • Sync
    • view
  • Node.js
    • Doit! - ๋…ธ๋“œ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ์„œ๋ฒ„์™€ ์šฉ๋„
    • Doit! - ๋…ธ๋“œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ  ๊ฐœ๋ฐœ ๋„๊ตฌ ์„ค์น˜ํ•˜๊ธฐ
    • Doit! - ๋…ธ๋“œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณด๊ธฐ
    • Doit! - ๋…ธ๋“œ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ์นœํ•ด์ง€๊ธฐ
    • Doit! - ๋…ธ๋“œ์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ์•Œ์•„๋ณด๊ธฐ
    • Doit! - ์›น ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ
    • Doit! - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉํ•˜๊ธฐ
    • Doit! - ์ต์Šคํ”„๋ ˆ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜๊ธฐ
    • Doit! - ๋ทฐ ํ…œํ”Œ๋ฆฟ ์ ์šฉํ•˜๊ธฐ
    • Doit! - ํŒจ์ŠคํฌํŠธ๋กœ ์‚ฌ์šฉ์ž ์ธ์ฆํ•˜๊ธฐ
    • Doit! - ์ฑ„ํŒ…์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ
    • Doit! - JSON-RPC ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ
  • Python
    • Warning-Could not import the lzma module
    • Pandas
      • Pandas ์ž๋ฃŒ๊ตฌ์กฐ
      • Pandas ๋ฐ์ดํ„ฐ ์ž…์ถœ๋ ฅ
      • DataFrame Data ์‚ดํŽด๋ณด๊ธฐ
      • ์‹œ๊ฐํ™” ๋„๊ตฌ - Matplotlib
  • ML
    • ์ถ”์ฒœ ์‹œ์Šคํ…œ
      • Collaborative Filtering
      • Matrix Factorization
  • Django
    • Basic
      • ํ™˜๊ฒฝ์„ค์ •
      • About Django
      • Start Django Project
      • Secret Key ๊ด€๋ฆฌํ•˜๊ธฐ
      • Settings ๋ถ„๋ฆฌํ•˜๊ธฐ
      • Django App
      • Django View & URL (1)
      • Django Model
        • MySQL ์—ฐ๋™
      • Django Admin
      • Django View & URL (2)
      • Django Template
      • Django Template & View & URL
      • Django Static
      • Django form
    • Advanced
      • Django Generic View
      • Django Automated Testing
      • Django Extenstion Template
      • Django Model Package
      • Django OpenSSL setting
    • REST framework
      • Rest API
      • Serializers
      • ViewSet
    • Error
      • ํ™˜๊ฒฝ์„ค์ • zlib ์˜ค๋ฅ˜๋ฐœ์ƒ
      • ModuleNotFoundError
    • ํŒจํ‚ค์ง€
      • django-debug-toolbar
    • Vue.js ์—ฐ๋™ํ•˜๊ธฐ
  • Ruby
    • variable & input/output
    • ์กฐ๊ฑด๋ฌธ
    • ๋ฐ˜๋ณต๋ฌธ
    • Array & Hash
    • Method
    • Proc&Lamda
    • Class
  • Ruby on Rails
    • Scaffolding
    • Controller
    • Model
    • Model-M:N relation
    • Model Validation
    • ๋ฉ‹์‚ฌ 10์ฃผ์ฐจ ์ˆ˜์—…(Tip)
  • HTML/CSS
    • Udacity - Intro to HTML/CSS
    • Udacity - Responsive Web Design
    • Udacity - Responsive Images
    • HTML Basic
    • CSS Basic
    • HTML5 Sementic Tag
    • HTML ํ…์ŠคํŠธ ๊ด€๋ จ ํƒœ๊ทธ๋“ค
    • HTML5 ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด
    • HTML ํผ ๊ด€๋ จ ํƒœ๊ทธ๋“ค
    • ํ…์ŠคํŠธ ๊ด€๋ จ ์Šคํƒ€์ผ
    • ์ƒ‰์ƒ๊ณผ ๋ฐฐ๊ฒฝ์„ ์œ„ํ•œ ์Šคํƒ€์ผ
    • ๋ ˆ์ด์•„์›ƒ์„ ์œ„ํ•œ ์Šคํƒ€์ผ
    • CSS ํฌ์ง€์…”๋‹
    • ๋‹ค์žฌ๋‹ค๋Šฅํ•œ CSS3 ์„ ํƒ์ž
    • CSS์™€ ์• ๋‹ˆ๋ฉ”์ด์…˜
    • ๋ฐ˜์‘ํ˜• ์›น์ด๋ž€?
  • OS(์šด์˜์ฒด์ œ)
    • Linux
      • Daemon
      • Cron
      • ํ”„๋กœ์„ธ์Šค ๊ด€๋ จ ๋ช…๋ น์–ด
      • ํ…์ŠคํŠธ ํŒŒ์ผ ๋ช…๋ น์–ด
  • Network
    • ๋„คํŠธ์›Œํฌ ๊ธฐ๋ณธ ๊ฐœ๋…
    • ๋„คํŠธ์›Œํฌ ๊ธฐ๋ณธ ๊ทœ์น™
    • ๋ฌผ๋ฆฌ ๊ณ„์ธต
    • ๋ฐ์ดํ„ฐ ๋งํฌ ๊ณ„์ธต
    • ๋„คํŠธ์›Œํฌ ๊ณ„์ธต
    • ์ „์†ก ๊ณ„์ธต
    • ์‘์šฉ ๊ณ„์ธต
    • ๋„คํŠธ์›Œํฌ ์ „์ฒด ํ๋ฆ„
    • ๋ฌด์„  ๋žœ
  • IT ๊ธฐํƒ€์ง€์‹
    • NAS๋ž€
Powered by GitBook
On this page
  • ์˜์กด์„ฑ๊ณผ ์ค‘๋ณต
  • ์ผ๋ฐ˜์ ์ธ TDD ์ฃผ๊ธฐ
  • 3A ํŒจํ„ด
  • ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ ํŒจํ„ด
  • ํ…Œ์ŠคํŠธ ์šฐ์„ 
  • ๋‹จ์–ธ(Assert) ์šฐ์„ 
  • ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ
  • ์•„๋Š” ๊ฒƒ์—์„œ ๋ชจ๋ฅด๋Š” ๊ฒƒ์œผ๋กœ
  • ๋ชจ์˜ ๊ฐ์ฒด
  • Code Coverage
  • ์ธก์ • ๊ธฐ์ค€
  • ์ฐธ๊ณ 

Was this helpful?

  1. ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก 

TDD

TDD๋ž€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋„์ค‘ ๋‚ด๋ฆฐ ๊ฒฐ์ •๊ณผ ๊ทธ ๊ฒฐ์ •์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ ์ธ์ง€ํ•˜๊ณ , ๋˜ํ•œ ์ด ๊ฐ„๊ฒฉ์„ ํ†ต์ œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ์ˆ ์„ ๋งํ•œ๋‹ค.

ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ์—์„œ๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๋‹จ์ˆœํ•œ ๊ทœ์น™๋งŒ ๋”ฐ๋ฅธ๋‹ค.

  • ์˜ค์ง ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ์—๋งŒ ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

  • ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ๋‹ค.

ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ์˜ ๊ฐ„๋žตํ•œ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์š”์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์žฌ๋นจ๋ฆฌ ํ…Œ์ŠคํŠธ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•œ๋‹ค.

  2. ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์ด ์‹คํŒจํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

  3. ์ฝ”๋“œ๋ฅผ ์กฐ๊ธˆ ๋ฐ”๊พผ๋‹ค.

  4. ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ „๋ถ€ ์„ฑ๊ณตํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

  5. ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•ด ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ๋‹ค.

์ด ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด์„œ ์•„๋ž˜ ๋‚ด์šฉ๋“ค์„ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

  • ๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ธฐ๋Šฅ์˜ ์ž‘์€ ์ฆ๊ฐ€๋ถ„์„ ์–ด๋–ป๊ฒŒ ์ปค๋ฒ„ํ•˜๋Š”์ง€

  • ์ƒˆ ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ์•„๊ฐ€๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์–ผ๋งˆ๋‚˜ ์ž‘๊ณ  ๋ชป์ƒ๊ธด ๋ณ€ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•œ์ง€

  • ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š”์ง€

  • ์–ผ๋งˆ๋‚˜ ์ˆ˜ ์—†์ด ์ž‘์€ ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ๋ฆฌํŒฉํ† ๋ง์ด ๋˜์–ด๊ฐ€๋Š”์ง€

์˜์กด์„ฑ๊ณผ ์ค‘๋ณต

์Šคํ‹ฐ๋ธŒ ํ”„๋ฆฌ๋งŒ(Steve Freeman)์€ ํ…Œ์ŠคํŠธ์™€ ์ฝ”๋“œ ๊ฐ„์˜ ๋ฌธ์ œ๋Š” ์ค‘๋ณต์ด ์•„๋‹ˆ๋ผ ํ…Œ์ŠคํŠธ์™€ ์ฝ”๋“œ ์‚ฌ์ด์— ์กด์žฌํ•˜๋Š” ์˜์กด์„ฑ์ด๋ผ๊ณ  ๋งํ–ˆ๋‹ค. ์ฆ‰, ์ฝ”๋“œ๋‚˜ ํ…Œ์ŠคํŠธ ์ค‘ ํ•œ์ชฝ์„ ์ˆ˜์ •ํ•˜๋ฉด ๋ฐ˜๋“œ์‹œ ๋‹ค๋ฅธ ํ•œ์ชฝ๋„ ์ˆ˜์ •ํ•ด์•ผ๋งŒ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์˜์กด์„ฑ์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ๋ชจ๋“  ๋ถ€๋ถ„์—์„œ ํ•ต์‹ฌ์ ์ธ ๋ฌธ์ œ์ด๋‹ค.

์˜์กด์„ฑ์ด ๋ฌธ์ œ ๊ทธ ์ž์ฒด๋ผ๋ฉด, ์ค‘๋ณต์€ ๋ฌธ์ œ์˜ ์ง•ํ›„์ด๋‹ค. ์ค‘๋ณต์˜ ๊ฐ€์žฅ ํ”ํ•œ ์˜ˆ๋Š” ๋กœ์ง ์ค‘๋ณต์ด๋ฉฐ, ์ค‘๋ณต๋œ ๋กœ์ง์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š”๋ฐ๋Š” ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์ œ์ผ ์ข‹๋‹ค.

๋ฌธ์ œ ์ž์ฒด๋Š” ๋‚จ๊ฒจ๋‘” ์ฑ„๋กœ ์ง•ํ›„๋งŒ์„ ์ œ๊ฑฐํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ์˜์กด์„ฑ๋„ ์ œ๊ฑฐ๋œ๋‹ค. ์ด๊ฒŒ ๋ฐ”๋กœ TDD์˜ "์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ๋‹ค." ๋‘๋ฒˆ์งธ ๊ทœ์น™์ด ์กด์žฌํ•˜๋Š” ์ด์œ ์ด๋ฉฐ, ๋‹ค์Œ ํ…Œ์ŠคํŠธ๋กœ ์ง„ํ–‰ํ•˜๊ธฐ์ „์— ์ค‘๋ณต์„ ์ œ๊ฑฐํ•จ์œผ๋กœ ์˜ค์ง ํ•œ๊ธฐ์ง€์˜ ์ฝ”๋“œ ์ˆ˜์ •์„ ํ†ตํ•ด ๋‹ค์Œ ํ…Œ์ŠคํŠธ๋„ ํ†ต๊ณผ๋˜๊ฒŒ ๋งŒ๋“ค ๊ฐ€๋Šฅ์„ฑ์„ ์ตœ๋Œ€ํ™” ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ผ๋ฐ˜์ ์ธ TDD ์ฃผ๊ธฐ

  1. ๋นจ๊ฐ• : ์‹คํŒจํ•˜๋Š” ์ž‘์€ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑ

    • ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ์ด๋•Œ ์˜ฌ๋ฐ”๋ฅธ ๋‹ต์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํฌํ•จ์‹œ์ผœ์•ผํ•œ๋‹ค.

  2. ์ดˆ๋ก: ๋นจ๋ฆฌ ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๊ฒŒ๋” ์ž‘์„ฑ. ์ด๋ฅผ ์œ„ํ•ด์„œ ๊ธฐ์กด์ฝ”๋“œ ๋ณต๋ถ™, ํ…Œ์ŠคํŠธ๋งŒ ํ†ต๊ณผํ•˜๋„๋ก ํŠน์ • ์ƒ์ˆ˜ ๋ฐ˜ํ™˜ ํ•จ์ˆ˜ ๊ตฌํ˜„ ๋“ฑ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„ํ•ด๋„ ๋œ๋‹ค.

    • ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. ์ตœ๋Œ€ํ•œ ์ดˆ๋ก ๋ง‰๋Œ€(ํ…Œ์ŠคํŠธ ํ†ต๊ณผ)๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค.

    • ์ ‘๊ทผ๋ฒ•

      1. ๊ฐ€์งœ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ : ์ƒ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์ง„์งœ ์ฝ”๋“œ๋ฅผ ์–ป์„ ๋•Œ๊นŒ์ง€ ๋‹จ๊ณ„์ ์œผ๋กœ ์ƒ์ˆ˜๋ฅผ ๋ณ€์ˆ˜๋กœ ๋ฐ”๊พผ๋‹ค.

      2. ์‚ผ๊ฐ์ธก๋Ÿ‰๋ฒ•(5 == 5, 5 != 6) : ์–ด๋–ป๊ฒŒ ํ…Œ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผํ• ์ง€ ๋ชจ๋ฅผ ๋•Œ ์ž‘์„ฑ

      3. ๋ช…๋ฐฑํ•œ ๊ตฌํ˜„ ์‚ฌ์šฉํ•˜๊ธฐ : ์‹ค์ œ ๊ตฌํ˜„์„ ์ž…๋ ฅํ•œ๋‹ค.

  3. ๋ฆฌํŒฉํ† ๋ง : ์ผ๋‹จ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๊ฒŒ๋งŒ ํ•˜๋Š” ์™€์ค‘์— ์ƒ๊ฒจ๋‚œ ๋ชจ๋“  ์ค‘๋ณต ์ œ๊ฑฐ

    • ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•œ๋‹ค. ์ด๋•Œ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ณ , ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๊ธฐ ์œ„ํ•ด ๋ง‰ ๊ฐœ๋ฐœํ–ˆ๋˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.

3A ํŒจํ„ด

ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์‹œ ๊ณตํ†ต๋œ ํŒจํ„ด์„ ๋ฐœ๊ฒฌํ•˜๊ฒŒ ๋œ๋‹ค.

  1. ์ค€๋น„(arrange) : ๊ฐ์ฒด ์ƒ์„ฑ

  2. ํ–‰๋™(act) : ์–ด๋–ค ์ž๊ทน์„ ์ค€๋‹ค.

  3. ํ™•์ธ(assert) : ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค.

ํ–‰๋™๊ณผ ํ™•์ธ ๋‹จ๊ณ„๋Š” ๋งค๋ฒˆ ๋‹ค๋ฅด์ง€๋งŒ ์ค€๋น„ ๋‹จ๊ณ„๋Š” ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ์ƒ์„ฑํ•ด์•ผ๋ ๊นŒ?

์ด๋•Œ ๋‘๊ฐ€์ง€ ์ œ์•ฝ์ด ์ƒ์ถฉํ•œ๋‹ค.

  • ์„ฑ๋Šฅ : ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ์—์„œ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ๊ฐ์ฒด ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•ด ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์ด ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•œ๋‹ค.

  • ๊ฒฉ๋ฆฌ : ํ•˜๋‚˜์˜ ํ…Œ์ŠคํŠธ์—์„œ ์„ฑ๊ณต/์‹คํŒจ๊ฐ€ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ธฐ๋ฅผ ์›ํ•œ๋‹ค. ํ…Œ์ŠคํŠธ ๊ฐ์ฒด๋ฅผ ๊ณต์œ ํ•˜๋Š” ์ƒํƒœ์—์„œ๋Š” ํ•œ๊ฐœ์˜ ํ…Œ์ŠคํŠธ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ์˜ ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ํ™•๋ฅ ์ด ๋†’๋‹ค.

ํ…Œ์ŠคํŠธ ์‚ฌ์ด์˜ ์ปคํ”Œ๋ง์€ ํ™•์‹คํžˆ ์ง€์ €๋ถ„ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค๋ฉฐ, ํ•œ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ…Œ์ŠคํŠธ ์ปคํ”Œ๋ง์€ ๋งŒ๋“ค๋ฉด ์•ˆ๋œ๋‹ค.

ํ…Œ์ŠคํŠธ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฒฐ๊ณผ์ ์œผ๋กœ ์‹œ์Šคํ…œ์ด ์‘์ง‘๋„๋Š” ๋†’๊ณ  ๊ฒฐํ•ฉ๋„๋Š” ๋‚ฎ์€ ๊ฐ์ฒด์˜ ๋ชจ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋˜๊ฒŒ ํ•ด์•ผํ•œ๋‹ค.

ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ ํŒจํ„ด

ํ…Œ์ŠคํŠธ ์šฐ์„ 

  • ํ…Œ์ŠคํŠธ๋Š” ํ…Œ์ŠคํŠธ๋ชฉ๋ก์„ ๋ชจ๋‘ ์ž‘์„ฑํ•œ ๋’ค ๊ตฌํ˜„ํ•˜์ž.

    1. ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ์˜คํผ๋ ˆ์ด์…˜์˜ ์‚ฌ์šฉ ์˜ˆ๋ฅผ ์ž‘์„ฑ

    2. ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์˜คํผ๋ ˆ์ด์…˜์— ๋Œ€ํ•ด์„œ๋Š” null๋ฒ„์ „์„ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€

    3. ๋ฆฌํŒฉํ† ๋ง ๋ชฉ๋ก์ถ”๊ฐ€

  • ํ…Œ์ŠคํŠธ๋Š” ํ…Œ์ŠคํŠธ ๋Œ€์ƒ์ด ๋˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์ง์ „์— ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๋‹จ์–ธ(Assert) ์šฐ์„ 

ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์‹œ ๋‹จ์–ธ์„ ์ œ์ผ ๋จผ์ € ์“ฐ๊ณ  ์‹œ์ž‘ํ•˜์ž.

  1. ์™„๋ฃŒ๋œ ์‹œ์Šคํ…œ์ด ์–ด๋–จ์ง€์— ๋Œ€ํ•œ ๋‚ด์šฉ๋ถ€ํ„ฐ ์ž‘์„ฑ

  2. ๊ธฐ๋Šฅ์ด ์™„๋ฃŒ๋˜๋ฉด ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๋Š” ํ…Œ์ŠคํŠธ ๋ถ€ํ„ฐ ์ž‘์„ฑ

  3. ์™„๋ฃŒ๋  ๋•Œ ํ†ต๊ณผํ•ด์•ผ ํ•  ๋‹จ์–ธ๋ถ€ํ„ฐ ์ž‘์„ฑ

ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ

ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ฝ์„ ๋•Œ ์‰ฝ๊ณ  ๋”ฐ๋ผ๊ฐ€๊ธฐ ์ข‹์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋Œ€์•ˆ์€ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ์‹ค์ œ ์‹คํ–‰์„ ํ†ตํ•ด ์™ธ๋ถ€ ์ด๋ฒคํŠธ ๊ฒฐ๊ณผ๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ์„ ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๊ฒฝ์šฐ

  • ์ด์ „ ์‹œ์Šคํ…œ์˜ ์ถœ๋ ฅ๊ณผ ํ˜„์žฌ ์‹œ์Šคํ…œ์˜ ์ถœ๋ ฅ์„ ๋น„๊ตํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ (๋ณ‘๋ ฌ)

  • ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ์„ ๋ฆฌํŒฉํ† ๋งํ•œ ํ›„ ๊ธฐ์กด๊ณผ ์ •ํ™•ํžˆ ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธํ•˜๊ณ ์ž ํ•  ๊ฒฝ์šฐ

์œ„์˜ ๊ฒฝ์šฐ์— ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์œ ์šฉํ•˜๋‹ค.

๋ช…๋ฐฑํ•œ ๋ฐ์ดํ„ฐ

ํ…Œ์ŠคํŠธ์˜ ์˜๋„๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ…Œ์ŠคํŠธ ์ž์ฒด์— ์˜ˆ์ƒ๋˜๋Š” ๊ฐ’๊ณผ ์‹ค์ œ ๊ฐ’์„ ํฌํ•จํ•˜๊ณ , ๋‘˜ ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด์•ผํ•œ๋‹ค.

๋‹ค๋ฅธ ํ†ตํ™”๋กœ ํ™˜์ „ํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ ์ˆ˜์ˆ˜๋ฃŒ๊ฐ€ 1.5%๊ฐ€ ๋ถ™๋Š”๋‹ค. USD์—์„œ GBP๋กœ ๊ตํ™˜ํ•˜๋Š” ํ™˜์œจ์ด 2:1์ด๋ผ๋ฉด $100๋‹ฌ๋Ÿฌ๋ฅผ ํ™˜์ „ํ•˜๋ ค๋ฉด 50GBP - 1.5% = 49.25GBP์—ฌ์•ผํ•œ๋‹ค.

Bank bank = new Bank();
bank.addRate("USD", "GBP", STANDARD_RATE);
bank.commission(STANDARD_COMMISSION);
Money result = bank.convert(new Note(100, "USD"), "GBP");
assertEquals(new Note(49.25, "GBP"), result);

๊ณ„์‚ฐ์„ ๋” ๋ช…ํ™•ํžˆ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์œ„์˜ ์˜ˆ์ œ ๋ณด๋‹ค๋„ ๊ณ„์‚ฐ์„ ๋” ๋ช…ํ™•ํžˆ ๊ธฐ์ž…ํ•˜๋ฉด ํ…Œ์ŠคํŠธ์—์„œ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉ๋œ ์ˆซ์ž์™€ ๊ฒฐ๊ณผ ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ์ฝ์–ด๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค์Œ์œผ๋กœ ํ•  ์ผ์„ ๋” ์‰ฝ๊ฒŒ ์•Œ ใ…… ใ…œ์žˆ๋‹ค.

Bank bank = new Bank();
bank.addRate("USD", "GBP", 2);
bank.commission(0.015);
Money result = bank.convert(new Note(100, "USD"), "GBP");
assertEquals(new Note(100/2*(1-0.015), "GBP"), result);

์•„๋Š” ๊ฒƒ์—์„œ ๋ชจ๋ฅด๋Š” ๊ฒƒ์œผ๋กœ

์ž‘์„ฑํ•œ ํ…Œ์ŠคํŠธ ๋ชฉ๋ก ์ค‘์—์„œ ์•„๋Š” ๊ฒƒ๋ถ€ํ„ฐ ๋ชจ๋ฅด๋Š” ๊ฒƒ์œผ๋กœ ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๋ญ˜ ๊ตฌํ˜„ํ•ด์•ผ๋ ์ง€ ์•Œ๋ฉด, ๋ช…๋ฐฑํ•œ ๊ตฌํ˜„์„ ํ•˜๊ณ , ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ๊ฐ€์งœ ๊ตฌํ˜„์„ ํ•˜๋ฉด ๋œ๋‹ค.

๋ชจ์˜ ๊ฐ์ฒด

๋ชจ์˜ ๊ฐ์ฒด(Mock Object)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ์‹œ ์‹ค์ œ ๊ฐ์ฒด์™€ ๋™์ผํ•œ ๋ชจ์˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ํ…Œ์ŠคํŠธ ํšจ์šฉ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

๋ชจ์˜ ๊ฐ์ฒด๋Š” ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ฐ€์‹œ์„ฑ์— ๋Œ€ํ•ด ๊ณ ๋ คํ•˜๋„๋ก ๋งŒ๋“ค์–ด, ์„ค๊ณ„์—์„œ ์ปคํ”Œ๋ง์ด ๊ฐ์†Œํ•˜๋„๋ก ํ•œ๋‹ค.

Code Coverage

์ธก์ • ๊ธฐ์ค€

์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ํ™”์ดํŠธ ๋ฐ•์Šค ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ธก์ •ํ•œ๋‹ค.

ํ™”์ดํŠธ ๋ฐ•์Šค ํ…Œ์ŠคํŠธ(White-box test)

  • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ์™€ ๋™์ž‘์„ ๊ฒ€์‚ฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ๋ฐฉ์‹

  • ์†Œํ”„ํŠธ์›จ์–ด ๋‚ด๋ถ€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ธฐ๋ฒ•

  • ๊ฐœ๋ฐœ์ž ๊ด€์ ์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•

๊ตฌ๋ฌธ(Statement)

๊ตฌ๋ฌธ ์ปค๋ฒ„๋ฆฌ์ง€๋Š” ๋ผ์ธ(Line) ์ปค๋ฒ„๋ฆฌ์ง€๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•˜๋ฉฐ, ์ฝ”๋“œ ํ•œ ์ค„์ด ํ•œ ๋ฒˆ ์ด์ƒ ์‹คํ–‰๋˜๋ฉด ์ถฉ์กฑํ•œ๋‹ค.

    void statement(int x) {
        System.out.println("start line"); // (1)
        if (x > 0) { // (2)
            System.out.println("middle line"); // (3)
        }
        System.out.println("last line"); // (4)
    }

์—ฌ๊ธฐ์„œ x = -1 ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด (3)์ฝ”๋“œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค. ์ด 4๊ฐœ์˜ ๋ผ์ธ ์ค‘ 1, 2, 4๋งŒ ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ 75%๊ฐ€ ๋œ๋‹ค.

๊ตฌ๋ฌธ ์ปค๋ฒ„๋ฆฌ์ง€๊ฐ€ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

์กฐ๊ฑด(Condition)

๋ชจ๋“  ์กฐ๊ฑด์‹์˜ ๋‚ด๋ถ€ ์กฐ๊ฑด์ด true/false๋ฅผ ๊ฐ€์ง€๋ฉด ์ถฉ์กฑํ•œ๋‹ค.

	void condition(int x, int y) {
        System.out.println("start line"); // (1)
        if (x > 0 && y < 0) { // (2)
            System.out.println("middle line"); // (3)
        }
        System.out.println("last line"); // (4)
    }

์กฐ๊ฑด ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ๋งŒ์กฑํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” x = 1, y = 1, x = -1, y = -1 ์ด ์žˆ๋‹ค.

  • x > 0 ์กฐ๊ฑด : true/false

  • y < 0 ์กฐ๊ฑด : false/true

์กฐ๊ฑด ์ปค๋ฒ„๋ฆฌ์ง€๋Š” ๋งŒ์กฑํ•˜์ง€๋งŒ if๋ฌธ ์กฐ๊ฑด์€ ํ•ญ์ƒ false์ด๋ฏ€๋กœ (3) ์ฝ”๋“œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

์กฐ๊ฑด ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ŠคํŠธํ•œ ๊ฒฝ์šฐ, ๊ตฌ๋ฌธ ์ปค๋ฒ„๋ฆฌ์ง€์™€ ๊ฒฐ์ • ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒฐ์ •(Decision)

๊ฒฐ์ • ์ปค๋ฒ„๋ฆฌ์ง€๋Š” ๋ธŒ๋žœ์น˜(Branch) ์ปค๋ฒ„๋ฆฌ์ง€๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ๋ชจ๋“  ์กฐ๊ฑด์‹์ด true/false๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฉด ์ถฉ์กฑํ•œ๋‹ค.

	void condition(int x, int y) {
        System.out.println("start line"); // (1)
        if (x > 0 && y < 0) { // (2)
            System.out.println("middle line"); // (3)
        }
        System.out.println("last line"); // (4)
    }

๊ฒฐ์ • ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ๋งŒ์กฑํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” x = 1, y = -1, x = -1, y = 1 ์ด ์žˆ๋‹ค.

  • x > 0, y < 0 ๋ชจ๋‘ ๋งŒ์กฑ : true

  • x > 0, y < 0 ๋ถˆ์ถฉ์กฑ : false

์กฐ๊ฑด/๊ฒฐ์ • ์ปค๋ฒ„๋ฆฌ์ง€๋Š” ์ฝ”๋“œ ์‹คํ–‰์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ณด๋‹ค ๋กœ์ง ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ์— ๋” ๊ฐ€๊น๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‘ ์ปค๋ฒ„๋ฆฌ์ง€๋Š” ์กฐ๊ฑด์— ๋Œ€ํ•ด ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋ฉด ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ๋งŒ์กฑํ•œ๋‹ค๊ณ  ๋ณธ๋‹ค. ๋˜ํ•œ ์กฐ๊ฑด๋ฌธ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ๋‘ ์ปค๋ฒ„๋ฆฌ์ง€ ๋Œ€์ƒ์—์„œ ์•„์˜ˆ ํ…Œ์ŠคํŠธ ๋Œ€์ƒ์—์„œ ์ œ์™ธ ๋œ๋‹ค.

์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ๋„๊ตฌ์™€ ์†Œ๋‚˜ํ๋ธŒ(SonarQube) ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€๊ฐ€ ๊ธฐ์กด๋ณด๋‹ค ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ ์ปค๋ฐ‹์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก ์ œํ•œํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

์ฐธ๊ณ 

Previous๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก NextSpring

Last updated 3 years ago

Was this helpful?

๋ชจ์˜ ๊ฐ์ฒด(Mock Object)๋ž€ ์ฃผ๋กœ ์œผ๋กœ ๊ฐœ๋ฐœํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ํ…Œ์ŠคํŠธ ํ•  ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋ชจ๋“ˆ๊ณผ ์—ฐ๊ฒฐ๋˜๋Š” ์™ธ๋ถ€์˜ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋‚˜ ๋ชจ๋“ˆ๋“ค์„ ์‹ค์ œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์‹ค์ œ์˜ ๋ชจ๋“ˆ์„ "ํ‰๋‚ด"๋‚ด๋Š” "๊ฐ€์งœ" ๋ชจ๋“ˆ์„ ์ž‘์„ฑํ•˜์—ฌ ํ…Œ์ŠคํŠธ์˜ ํšจ์šฉ์„ฑ์„ ๋†’์ด๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค.

์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€(Code Coverage)๋Š” ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ๋…ผํ•  ๋•Œ ์–ผ๋งˆ๋‚˜ ํ…Œ์ŠคํŠธ๊ฐ€ ์ถฉ๋ถ„ํ•œ๊ฐ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ง€ํ‘œ์ค‘ ํ•˜๋‚˜๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ปค๋ฒ„๋˜์—ˆ๋Š”๊ฐ€์ด๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ์„ ๋•Œ ์ฝ”๋“œ ์ž์ฒด๊ฐ€ ์–ผ๋งˆ๋‚˜ ์‹คํ–‰๋˜์—ˆ๋ƒ๋Š” ๊ฒƒ์ด๋‹ค.

์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๋Š” ๊ฒƒ์€ ํฌ๊ฒŒ ๊ตฌ๋ฌธ(Statement), ์กฐ๊ฑด(Condition), ๊ฒฐ์ •(Decision)์ด๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ ์–ผ๋งˆ๋‚˜ ์ปค๋ฒ„ํ–ˆ๋А๋ƒ์— ๋”ฐ๋ผ ์ฝ”๋“œ์ปค๋ฒ„๋ฆฌ์ง€์˜ ์ธก์ •๊ธฐ์ค€์€ ๋‚˜๋‰˜๊ฒŒ ๋œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์ปค๋ฒ„๋ฆฌ์ง€๋Š” ๊ตฌ๋ฌธ(Statement)์ปค๋ฒ„๋ฆฌ์ง€์ด๋ฉฐ, ์‹คํ–‰ ์ฝ”๋“œ๋ผ์ธ์ด ํ•œ๋ฒˆ ์ด์ƒ ์‹คํ–‰ ๋˜๋ฉด ์ถฉ์กฑ๋œ๋‹ค. ์กฐ๊ฑด(Condition)์ปค๋ฒ„๋ฆฌ์ง€๋Š” ๊ฐ ๋‚ด๋ถ€ ์กฐ๊ฑด์ด ์ฐธ ํ˜น์€ ๊ฑฐ์ง“์„ ๊ฐ€์ง€๋ฉด ์ถฉ์กฑ๋œ๋‹ค. ๊ฒฐ์ •(Decision) ์ปค๋ฒ„๋ฆฌ์ง€๋Š” ๊ฐ ๋ถ„๊ธฐ์˜ ๋‚ด๋ถ€ ์กฐ๊ฑด์ž์ฒด๊ฐ€ ์•„๋‹Œ ์ด๋Ÿฌํ•œ ์กฐ๊ฑด์œผ๋กœ ์ธํ•ด ์ „์ฒด ๊ฒฐ๊ณผ๊ฐ€ ์ฐธ ํ˜น์€ ๊ฑฐ์ง“์ด๋ฉด ์ถฉ์กฑ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์กฐ๊ฑด๊ณผ ๊ฒฐ์ •์„ ๋ณตํ•ฉ์ ์œผ๋กœ ๊ณ ๋ คํ•˜๋Š” MC/DC ์ปค๋ฒ„๋ฆฌ์ง€ ๋˜ํ•œ ์žˆ๋‹ค. -

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
์œ„ํ‚ค ๋ฐฑ๊ณผ-๋ชจ์˜ ๊ฐ์ฒด
์†Œํ”„ํŠธ์›จ์–ด
์œ„ํ‚ค๋ฐฑ๊ณผ ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€
ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ
lxxjn0.log