Programming Skills 1
πΏ BackEnd
μΌμ λ²μ
μ¬μ©μμκ² λ³΄μ΄λ μΉ μ΄ν리μΌμ΄μ κ°λ°λΏλ§ μλλΌ λ°μ΄ν° λΆμμ μν μμ§λμ΄λ§, λΆμ°μμ€ν μ΄λ DBMSμ κ°μ μ νμ λ§λλ κ°λ°μλ€λ λ°±μλμ μν¨
- κ·Έ λμμ΄λ νλ μΌμ΄ μλμ μΌλ‘ λͺ¨νΈ
- μλ²κ΄λ¦¬
- DBκ΄λ¦¬
- νλ°νΈμλ κ°λ°κΉμ§λ λ΄λΉ
- λ°±μλ κ°λ°μλ νλμ κΈ°μ μ μ ν μ μλ μν μ μν
- λμ©λ λ°μ΄ν° λΆμ
- λͺ¨λν°λ§, κ΄λ¦¬ λꡬ
- λ±λ±
보λκ³Ό κ³ μΆ©
- 보λ
- μμ μ ν¨μ¨μ μΈ μμ€ν κ°λ°
- νΈλν½ μ¦κ°μλ κ²¬κ³ ν μμ€ν
- μ±λ₯μ νκΈ°μ κ°μ
- λͺ¨λμ ꡬ쑰 κ°μ μ ν΅ν΄ μ½λλ₯Ό μ€μ
- κ³ μΆ©
- μλ²λ μ¬μ§ μλλ€.
- νμμλ λ ΈνΈλΆμ λ€κ³ λ€λ
- λΉλ²(oncall)μ μ ν΄ λμ
- μλ²λ μ¬μ§ μλλ€.
πΏ ν₯ν μ λ§
νμ₯μμ λκ»΄μ§λ λ°λ‘λ μ°λ¦¬κ° ν΄μΌν κ³Όμ κ° λμ΄κ°λ μλμ λΉνλ©΄ λꡬ λ±μ μν μμ°μ± μ¦κ° μλλ μ€λ¦¬ν λ리λ€κ³ λκ»΄μ§λλ€.
- μλ‘μ΄ μμ€ν μ λν μμμ μ μ§ λ³΄μν κΈ°μ‘΄μ μμ€ν λ μκΎΈ λμ΄λ§ κ°
- νμ μ ν¬μν μ μλ μ¬λ ₯μ κ°μ§ μ¬νλΌλ©΄ S/W κ°λ°μμ λν ν¬μλ κ³μ μ¦κ°ν κ²μ΄λΌκ³ μ λ§
- λ€λ§ λΆμΌμ λ°λΌ ν₯λ§μ±μκ° κ°λ¦΄ μ μμ
- μλ₯Ό λ€μ΄ Flash κΈ°λ°μ UI κ°λ°μ λν μμλ HTMLμ λ°μ μΌλ‘ λ§ν¨
- λͺ¨λ°μΌμμ Symbian OSλ₯Ό λ°νμΌλ‘ κ°λ°νλ λΆλ€μ κ°λ° νλ«νΌμ΄ μ λ¬Όμ΄κ°λ λͺ¨μ΅μ μ§μΌλ΄μΌ νμ΅λλ€.
- νμ§λ§ κ°λ° λΆμΌλ₯Ό λ°κΏ μ μλ κΈ°νλ λ§μ
- Flash -> μΉFE(ActionScriptλ₯Ό μ μΈ μ μκΈ° λλ¬Έ)
- κΈ°μ‘΄μ μλ κ°λ° λΆμΌλ€λ κΉκ² λ°μ νλ©΄μ μ΄μ μ μλ μ λ΄μκ° μκΈ°κ³ μμ
- μλ‘μ΄ κ°λ° λΆμΌμ μ μν μ μλ μλμ μ€μ
- μ΄λ¬ν κ΄μ μμ λ°±μλλ ν¬μ©νλ λΆμΌκ° λ§κ³ , μ΄λ‘ κ³Ό μ€λ¬΄κ²½νμ΄ μ μ‘°νλ μ μκΈ° λλ¬Έ
- RDB, TCP/IP, OS, ν΅κ³ λ±μ λ°νμ΄ λλ μ§μλ€μ νκ΅μμ μ€λΉλ₯Ό μ ν΄μΌ ν¨
λ¨Έμ λ¬λκ³Ό λΉ λ°μ΄ν°μ λ°±μλ
AIκ°μ λΆμΌλ νκ΅μμ μ΄λ‘ μ μΌλ‘ μ€λΉκ° λ λΆλ€μ΄ νμ¬μ λ€μ΄μ€λ κ²½μ°κ° λ§μ 보μ λλ€. κΈ°μ‘΄μ λ°±μλ κ°λ°μ νμλ λΆμ΄ ν΄λΉ μλΉμ€μ νμν΄ μν΄ ν΄λΉ λΆμΌμ μ λ¬Έκ°λ‘ μ±μ₯ν κ²½μ°λ μμ΅λλ€.
- λ°±μλ κ°λ°μ νλ€ λ°μ΄ν° λΆμ, λͺ¨λΈλ§ μ
무μ μ°Έμ¬νλ κ²½μ°λ λ λμ΄λ κ²μ
- λ€λ§ μ§μ μ μΌλ‘ λΆμ/λͺ¨λΈλ§μ μννμ§ μλλΌλ λ°±μλλ μ΄λ₯Ό λ·λ°μΉ¨νλ κ°λ°μ νκ² λ κ²μ
- μλ‘, Kafkaλ±μΌλ‘ λ°μ΄ν° Flowλ₯Ό ν¨μ¨μ μΌλ‘ μ μ΄νλ Tool
λ€λ₯Έ λΆμΌλ‘μ νμ₯
νλ‘μ νΈμ λ°λΌμλ μλΉμ€/μ νμ κΈ°ν λ¨κ³μμ κ°λ°μμ μκ²¬μ΄ λ§μ΄ λ°μλ¨
- κ°λ°μ
무λ₯Ό κ°μ νκΈ° μν΄ λ§λλ μλν λꡬλ€, λͺ¨λν°λ§ λꡬλ€λ ν° λ°©ν₯μ±μ μ‘λ μ¬λμ κ°λ°μμΌ μ λ°μ μμ
- λΉκ°λ°μλ€μ΄ μ¬μ©νλ μλΉμ€λ€λ μ΅κ·Ό λ€μ΄μλ κ°λ°μμ μκ²¬μ΄ λ§μ΄ λ°μλκ³ μμ
- νμ λ‘ κΈ°νμ, UXμ€κ³μ μν μ νμλ λΆλ€ μ€μμλ κ°λ°μ μΆμ μ΄ μκΈ°λ ν¨
- κ²½μμ μμμ κ΄μ¬νλ κ²μ κ°λ° μ‘°μ§μμ μ‘°μ§μ₯μ΄ νλ μν
- κ°λ°μ μ€ μΌλΆλ κ·Έλ° μν μ νλ μ¬λμ΄ λ μλ μμ
- μ‘°μ§μ₯μ κΈ°μ λΏλ§μλλΌ μ¬λ μ¬μ΄μ μΌμ κ΄μ¬μ κΉμ΄ κ°μ ΈμΌ μ ν μ μλ μΌ
λ°±μλ κ°λ°μ νμν μ§μ
- μΉ μνκ³μ μ€ν
- HTML, HTTP(1.1, HTTP/2)
- κΈ°λ³Έ SDK, λΌμ΄λΈλ¬λ¦¬/νλ μμν¬ μ΄ν΄μ νμ©
- ν΄λΌμ΄μΈνΈλ₯Ό μν API μ€κ³
- μλ²/μ»΄νΌλνΈ/κ°μ²΄ κ°μ μν λΆλ΄/μμ‘΄μ±/ν΅μ λ°©λ² μ€κ³
- μ μ₯μ νμ©
- DBMS μ€κ³
- Cache μ μ©
- Global/Local cahce μ μ©λ²μ, Life Cycle, μ루μ μ ν
- νμΌ μ μ₯ μ μ± /μ루μ μ ν νμ©
- κ²μ μμ§ μ°λ λ°©μ κ²°μ
- λΉλ λꡬ
- Maven/Gradle
- λ°°ν¬ μ λ΅
- μ±λ₯ ν
μ€νΈ/νλ‘νμΌλ§/νλ
- JVM λ 벨μ νλ(GC μ΅μ
λ±)
- μΉ μλ²(Nginx, Tomcat)λ±μ μ€μ /νλ
- OS μ€μ μ μ£Όμ κ° νμΈ
- JVM λ 벨μ νλ(GC μ΅μ
λ±)
- μΈμ κΈ°μ μ λν μ΄ν΄
- DBMS, Front Endλ±
- μλ² κ°λ°μμλ§ ν΄λΉνμ§λ μλ νλͺ©
- ν μ€νΈ μ½λ μμ±/리νν λ§ κΈ°λ²
- λ²μ κ΄λ¦¬ μ λ΅
- branch μ μ± λ±
πΏ DB
λ€μ΄λ²μ μλΉμ€μμλ MySQL, CUBRID, Redis, Memchaced, HBase, MonoDB, Elasticsearch λ± λ€μν μ μ₯μλ₯Ό νμ©
- λ€μν μ μ₯μκ° μ°μ΄λ μλμλ RDB(κ΄κ³ν)λ μ¬μ ν κ°μ₯ μ°μ μλλ μ μ₯μ
- RDBλ₯Ό μ λ€λ£¨λ λ₯λ ₯μ λ°±μλ κ°λ°μμ ν΅μ¬ μλ μ€ νλ
- 쿼리μ νΈμΆ νμλ μ€ν κ³νμ΄ λΉν¨μ¨μ μ΄μ§ μμμ§ νμΈνλ μ΅κ΄μ΄ μ€μ
- νμ¬λ μλ² κ°μ λ€νΈμν¬ νΈμΆ λΉμ©μ μ€μ΄κΈ° μν΄ κ΅μ₯ν λ§μ νλ²μ μ‘°μΈνλ κΈ΄ SQLμ λ§λλ κ²½μ°κ° λ§μμ§λ§ μμ¦μ 볡μ‘ν JOINμ κ°κΈμ νΌνλ κ²½ν₯
- SQLμ΄ λ¨μν μλ‘ λ€λ₯Έ μ μ₯μ(Redisλ±)μ μΊμνκ±°λ λΆμ°ν΄μ μ μ₯νκΈ° μ¬μμ§λλ€.
- λμ©λ UGC μλΉμ€μμλ RDB ν μ΄λΈ μ¬μ΄μ JOINμ μ΅λν μ μ½μ νκ³ App λ¨κ³μμ μ¬λ¬ μ μ₯μμ μ°κ΄λ λ°μ΄ν°λ₯Ό μ‘°ν©νκΈ°λ ν¨
- Stored prodecureλ μ μ¬μ©νμ§ μμ
- DBμμμ μ€νλλ μ΄κ²μ κΈνκ² κ°λ°λ μλΉμ€μμ λ§μ΄ μ¬μ©λ¨
- μ΄κ±΄ μμ νκΈ°λ νλ¬
- DB μλ²μ CPU μμμ μλͺ¨ν¨μΌλ‘μ DBμ λ³λͺ©μ΄ λ μ μλ κ°λ₯μ±μ΄ μμ
- DB νλλ‘ μ μ₯λμ΄ κ°λΉμ΄ μλ λ μ΄λ₯Ό μ΄λ»κ² λΆμ°ν κ²μΈκ°
- Local cache, Global cahceλ₯Ό λμνκΈ°λ ν¨
- μ΄λμ λ 볡μ μ§μ°μ΄ λ―Όκ°νμ§ μμ μλΉμ€μμλ μ°κΈ° μμ μ Master λ Έλλ‘ μ½κΈ° μμ μ 볡μ λλ Masterμ λ°μ΄ν°λ₯Ό 볡μ ν μ¬λ¬ λμ Slaveλ‘ DBλ₯Ό ꡬμ±νκΈ°λ ν¨
- μ©λμ΄ λ§λ€λ©΄ μ¬λ¬ κ°μ DBμΈμ€ν΄μ€μ μ΄λ₯Ό λλμ΄ μ μ₯νκΈ°λ ν¨(μ€λ©)
- λ€μ΄λ²μμλ Nbase-TλΌλ μ μ₯ νλ«νΌμ μ°κ³ μμ
πΏ κ°λ° ν΄
Jenkins, AWS λ± Backendμ λμμ΄ λλ λꡬλ₯Ό λ°°μ μ§λ§ λꡬλ₯Ό λ°°μ΄λ€? μ€λ ₯μΌκΉ?
- κ°λ° λꡬλ₯Ό μ νμ©νλ λ₯λ ₯μ μμ°μ±κ³Ό μ§κ²°λκΈ°μ μ€μ
- μ€μ€λ‘ μ΅νμ μκ³ μ μ ν λꡬλ₯Ό μ νν μ μλ κ°λ°μκ° νμ₯μμλ νμ
- μλ‘μ΄ λκ΅¬κ° λμμ λ μ μν μ μλ νμ΅λ ₯/μ μλ ₯/νλ¨λ ₯μ΄ λ³Έμ§μ΄κ³ μ΄κ²μ΄ λμ μ΄ λμ΄ μ€λ ₯μ΄ λ¨
- κ·Έλ₯ λ¨μν μΈ μ μλ€λ κ²μ μ€λ ₯μ΄ μλ
λΆλ₯
- λ 벨 0: μ΄λ―Έ μ°κ³ μλ κ°λ°λꡬμ μ¬μ©λ²μ μλ €μ£Όκ±°λ κ°μ΄λ λ¬Έμλ₯Ό μ€λ μ λͺ»μ΄
- λ 벨 1: μλ €μ£Όκ±°λ κ°μ νμμ λ§λ κ°μ΄λ λ¬Έμμ μλ λ§νΌλ§ μΈ μ μμ
- λ 벨 2: κ°λ°λꡬμ λ νΌλ°μ€λ₯Ό λ³΄κ³ μ¬μ©λ²μ μ΅ν μ μμ
- μμ μ΄ κ²½νν μ¬μ©λ²μ λ¬Έμνν΄μ ν λ΄μ μ νν μ μμ
- λ 벨 3: μ¬λ¬ κ°λ° λꡬλ₯Ό λΉκ΅ λΆμν΄μ μν©μ μ ν©ν λꡬλ₯Ό μ νν μ μμ
- 곡μ λ νΌλ°μ€ λ¬Έμμμ λΆμ‘±ν λΆλΆμ μμ ν΄μ κΈ°μ¬ν μ μμ
- λ 벨 4: κ°λ°λꡬμ λ¬Έμ λ₯Ό μμ€ μ½λλ₯Ό μμ ν΄μ Fork/ν¨μΉν΄μ μ¬μ©ν μ μμ
μ μ μ¬μμ΄λΌλ©΄ λ 벨 2 μ λλ κ°μ ΈμΌ ν¨
πΏ λ³λ ¬ μ²λ¦¬
Servlet κΈ°λ°μ JavaμΉμλ²λ€μ κΈ°λ³Έμ μΌλ‘ μ¬μ©μμ μμ²μ λ³λ ¬μ μΌλ‘ μ²λ¦¬. λ°λΌμ λ©ν°μ€λ λμμ 곡μ λλ κ²μΈμ§ μμνλ μΌμ μ€μ
- Local cacheλ₯Ό μ μ©ν λλ λ©ν°μ€λ λμμ 곡μ λ κ°μ²΄κ° μ½κ² λμ μ λ μλ μμ
- Cache λμ κ°μ²΄λ Immutableνκ² μ μ§νλ κ²μ΄ μμ
- μ¬μ©μ μμ² μ²λ¦¬μ μ€λ λ νλ‘ μ€νν΄μΌ ν μμ
μ΄ μ’
μ’
μκΈ°κΈ°λ ν¨
- μ¬μ©μ μλ΅μ μν₯μ μ£Όμ§ μμ§λ§ μ€νμκ°μ΄ κΈΈμ΄μ§ μλ μλ update ꡬ문μ DBμ μ€ννλ μμ κ°μ κ²
- μ΄λ°κ²μ Executors, ThreadPoolExecutorμ μλ μ΅μ λ€λ‘ μ κ΅ν μ μ΄
- new Thread()λ‘ μ§μ μ€λ λλ₯Ό μμ±νλ κ²μ κΆμ₯νμ§ μμ
πΏ 보μ
- XSS, CSRF, SQL Injection 곡격μ λμ²νλ λ°©λ²μ λͺ¨λ κ°λ°μκ° μκ³ μμ΄μΌ ν¨
- λΌμ΄λΈλ¬λ¦¬μμ λ°κ²¬λ 보μ μ·¨μΌμ μ λμ²ν κ²½μ°κ° λ§μ
- λ³΄ν΅ λ²μ μ μ νκ±°λ νμ¬λ΄μ μ체μ μΈ ν¨μΉ
πΏ ν μ€νΈ
FE κ°λ°μ΄ λΆμ ν λκ³ μλΉμ€κ°μ API νΈμΆμ΄ λ§μμ§λ©΄μ μ΅κ·Ό λ°±μλ κ°λ°μμ μ 무λ API μλ² κ°λ°μ λ μ§μ€λκ³ μμ
- λ°λΌμ μ΅μ’
μ μΌλ‘ UIμ ν΅ν©νκΈ° μ μ κ°λ°ν APIλ₯Ό μ€μ€λ‘ ν
μ€νΈν΄μΌ ν νμμ±μ΄ λ 컀μ‘μ
- μ€λ₯κ° μλ€λ μ 보λ₯Ό λ€λ₯Έ κ°λ°μλ‘λΆν° λ°μμ μμ ν μ¬λ°°ν¬νκ³ λ€μ μ리λ λΉμ©μ μ€μ€λ‘ μ€λ₯λ₯Ό λ°κ²¬νμ λ λ³΄λ€ ν¬κΈ° λλ¬Έ
- λΌμ΄λΈλ¬λ¦¬λ κ°λ° νλ«νΌμ κ°λ°νλ κ²½μ°μλ ν
μ€νΈ μ½λλ μ€μ
- λΌμ΄λΈλ¬λ¦¬ λ°°ν¬ ν μ΄λ₯Ό μ μ©ν μλ²μμ μ€λ₯κ° λ°μνμ λ μ¬λ°°ν¬ νλ κ³Όμ μ λΉμ©λ ν¬κ³ μ λ’°λ₯Ό μκ²λλ μμΈμ΄ λ¨
πΏ μλ£κ΅¬μ‘°/μκ³ λ¦¬μ¦
μ€λ¬΄μμ μκ³ λ¦¬μ¦μ μ§μ ꡬννμ§λ μμ§λ§ ꡬνλ μ루μ μ μ νμ©νκ³ νμ©νκΈ° μν΄μλ κ·Έ λ°νμ΄ λλ μ§μμ΄ μ€μ
- λμ©λ λ°μ΄ν°λ₯Ό μ΄λ»κ² μ μ₯νκ±°λ νμν μ§λ₯Ό κ²°μ ν λ
- LINE μμ λ€νΈμν¬ μλΉμ€μ μν€ν μ², SSDλ μννΈμ¨μ΄ μν€ν μ²λ₯Ό μ΄λ»κ² λ°κΎΈκ³ μλκ°? μ κΈ°μ¬μμ B-Tree, B+Treeλ₯Ό μ΄λ»κ² νμ©νλμ§λ μ°Έκ³
πΏ κ°λ° νλ μ μν¬
λ°±μλ κ°λ° νλ μμν¬ νΈλ λ
Spring/Netty κΈ°λ°μ νλ μμν¬λ€μ΄ κΎΈμ€ν λ°μ μ νκ³ μμ
- κ³ λΆν μ²λ¦¬λ₯Ό μν μλ²μλ Nettyλ₯Ό κΈ°λ°μΌλ‘ UI κ°λ°κ³Ό μ§μ νΈμΆλλ API μλ²λ HTMLκΉμ§ λ§μ κ³³μ μ°μ
- λΉλκΈ° I/Oλ₯Ό νμν μλ² κ°λ°μ΄ λ§μ κ΄μ¬μ λκ³ μλ€.
- λΉλκΈ° κ°λ° μμ²΄κ° κ°μ§λ μ§μ μ₯λ²½κ³Ό κΈ°μ μ μΈ λμ΄λκ° μμμ
- JDBC μ€νμ ꡬνμ²΄κ° κ³΅μμ μΌλ‘ λμ€μ§ μμ νλ μμ
- νμ§λ§ μ΅κ·Όμ Spring5 μμ λΉλκΈ° IO κ°λ°μ μ§μνλ Webflux λͺ¨λμ΄ λ±μ₯ν¨
- νΈλν½μ΄ λ§μμ λκΈ°/μ°λ λ κΈ°λ°μΌλ‘λ μμμ ν¨μ¨μ μΌλ‘ μΈ μ μλ μμ€ν μμλ μΈλ§ν μ νμ§
- . λ€μ΄λ²μμ κ³ λΆνλ₯Ό μ²λ¦¬νλ νλ«νΌμ μλ²λ Netty/Vert.x μμμ λΉλκΈ° λ°©μμΌλ‘ κ°λ°λ κ²μ΄ λ§μ΅λλ€. λμ©λ μΈμ μ μν λ‘λλ°Έλ°μ λ κ·Έ μ