
vi /etc/sysconfig/jenkins λ‘ vi μλν°λ₯Ό μ° ν λΉ¨κ°μ λΆλΆμ μλμ κ°μ΄ μμ ν΄μ€λλ€. JENKINS_JAVA_OPTIONS="-Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Seoul"

μ ν¨μ€λ μννΈμ¨μ΄ κ°λ° μ μ§μμ μΌλ‘ ν΅ν© μλΉμ€λ₯Ό μ 곡νλ ν΄μ λλ€. CI(Continuous Integration) ν΄ μ΄λΌκ³ ννν©λλ€. μ ν¨μ€μ λν΄ μμ보기 μ μ μ°μ CI/CDμ λν΄ λ¨Όμ μμλ³΄κ² μ΅λλ€. CI/CDλ? CIλ Continuous Integration μ¦, μ§μμ μΈ ν΅ν©μ΄λΌλ μλ―Έμ λλ€. μ§μμ μΈ ν΅ν©μ΄λ, μ΄ν리μΌμ΄μ μ μλ‘μ΄ μ½λ λ³κ²½ μ¬νμ΄ μ κΈ°μ μΌλ‘ λΉλ λ° ν μ€νΈ λμ΄ κ³΅μ λ ν¬μ§ν 리μ ν΅ν©νλ κ²μ μλ―Έν©λλ€. (κ°λ₯νλ€λ©΄ ν루μ μ¬λ¬λ²κΉμ§) μ΄λ¬ν CIμ ν΅μ¬ λͺ©νλ λ²κ·Έλ₯Ό μ μνκ² μ°Ύμ ν΄κ²°νκ³ , μννΈμ¨μ΄μ νμ§μ κ°μ νκ³ , μλ‘μ΄ μ λ°μ΄νΈμ κ²μ¦ λ° λ¦΄λ¦¬μ¦μ μκ°μ λ¨μΆμν€λ κ²μ μμ΅λλ€. CDλ? ν΄μνμλ©΄, μ§μμ μΈ μλΉμ€ μ 곡 νΉμ μ§μμ μΈ λ°°ν¬ λΌλ..

/var/lib/jenkins/workspace/ λ‘ μ΄λ ν λΆμ§ μκ² νλ €λ νλ‘μ νΈλ‘ μ΄λν©λλ€. ν°μΊ£μ΄ μλ μ ν¨μ€ λ΄ workplaceμ λλ€. νλ‘μ νΈμ pom.xmlμ μλμ κ°μ΄ μΆκ°ν΄μ€λλ€. ..... ${project.name} .... κ·Έ ν λ€μ λΉλνκ² λλ©΄ λ€μ 1.0.0-BUILD-SNAPSHOTμ΄ λΆμ§ μμ΅λλ€.

ν μ€νΈ μλ² λ΄ μ ν¨μ€ μ€μΉνλ λ°©λ²μ λλ€. μλ²λ CentOS7 κΈ°μ€μ λλ€. [STEP1] μ ν¨μ€κ° μ€μΉλμ΄μλ νμΈνκΈ° $ yum list installed | grep jenkins [STEP2] μ ν¨μ€ μ€μΉνκΈ° [STEP2-1] urlμ ν΄λΉνλ νμΌμ /etc/yum.repos.d/jenkins.repo κ²½λ‘μ λ€μ΄ $ wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo [STEP2-2] key import $ rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key [STEP2-3] μ ν¨μ€ μ€μΉ $ yum install jenkin..

λ‘μ»¬μ΄ μλ ν μ€νΈ μλ²λ΄ tomcat8 μ€μΉνλ λ°©λ²μ λν΄ μμλ³΄κ² μ΅λλ€. μλ²λ CentOS κΈ°μ€μ λλ€. μμ£Ό κΈ°μ΄μ μΈ λ¦¬λ μ€ λͺ λ Ήμ΄λ μλ€κ³ κ°μ νμ¬ μ§νν©λλ€. [STEP1] Apach Tomcat μ¬μ΄νΈ μ μ Apach Tomcat μ λ€μ΄κ°λλ€. μ λ 8λ²μ μ μ¬μ©ν κ²μ΄κΈ°μ Tomcat8μ λλ¬μ€λλ€. μ€λ₯Έμͺ½ λ²νΌμ λλ¬ "λ§ν¬ μ£Όμ 볡μ¬"λ₯Ό λλ¬μ€λλ€. [STEP2] wget μ€μΉνκΈ° μλ²μ μ μ ν μλ λͺ λ Ήμ΄λ₯Ό μ λ ₯ν΄μ€λλ€. yum install -y wget * μ°Έκ³ : yumμ λ λν κ³μ΄μμ μ¬μ©νλ ν¨ν€μ§ λ§€λμ , wgetλ μΉ μλ²λ‘λΆν° 컨ν μΈ λ₯Ό κ°μ Έμ€λ νλ‘κ·Έλ¨ [STEP3] μλ§μ μμΉμ ν°μΊ£ μ€μΉ λ° μμΆ νκΈ° μ λ /var/lib/tomcat-feadmin μμΉμ ν°μΊ£..

μ΄ κΈμ Song Seunggeun λμ κΈμ λ³΄κ³ μμ±ν κΈμ΄λ©°, νλ½μ λ°μμ΅λλ€. λ Όλμ μ¬μ§κ° μμ μ μμ§λ§, μλ°μ€ν¬λ¦½νΈλ 2021λ νμ¬ μννΈμ¨μ΄ μ κ³μμ κ°μ₯ μ λͺ ν μΈμ΄λΌκ³ ν μ μμ΅λλ€. 2020λ Githubμ λΆμμ λ°λ₯΄λ©΄ μλ°μ€ν¬λ¦½νΈλ 2014λ μ΄λλ‘ νμ μν₯λ ₯ μλ μΈμ΄μκ³ , μλ°μ€ν¬λ¦½νΈμ μΉμ²μ΄λΌκ³ ν μ μλ νμ μ€ν¬λ¦½νΈ λν κ·Έ μμκ° 4μμ λ¬ν©λλ€. μλ°μ€ν¬λ¦½νΈλ μ΄λ»κ² μ΄λ κ² μ λͺ ν΄μ§ μ μμμκΉμ? νμ΄μ¬, μλ°, C λ±μ μ ν΅μ κ°μλ€, κ·Έλ¦¬κ³ Golang, Rust, Swift, Dart λ±μ μ ν₯ κ°μλ€κ³Όμ κ²½μμμ μλ°μ€ν¬λ¦½νΈλ μ΄λ»κ² μ°μλ₯Ό μ ν μ μμμκΉμ? μ΄λ² κΈμμλ ν΄λ μ΄νΌ ν¬λ¦¬μ€ν μ¨ κ΅μμ νκ΄΄μ νμ μ΄λ‘ μ μ΄μ©ν΄μ μλ°μ€ν¬λ¦½νΈκ° μ±μ₯ν ..

λ‘컬 μλ²κ° μλ ν μ€νΈ μλ²μμ μ ν¨μ€λ₯Ό μ΄μ©νμ¬ CI/CDλ₯Ό ν΄λ³΄κ² μ΅λλ€. μλ²λ CentOS7 κΈ°μ€μ λλ€. λ€μκ³Ό κ°μ μμλ‘ μ§νν©λλ€. KTCloudλ₯Ό μ΄μ©νμ¬ μλ² κ΅¬μΆ(μλ΅) ν μ€νΈ μλ² λ΄ ν°μΊ£(port80), JDK(1.8.x) μ€μΉ ν μ€νΈ μ ν¨μ€ μλ² κ΅¬μΆ ν μ€νΈ μλ² λ΄ μ ν¨μ€λ₯Ό ν΅ν΄ λΉλμ κ³Ό μλλ°°ν¬ μ§ν [Jenkins] CI/CDμ μ°λ¦¬μ μΉμ ν λΉμ Jenkins μ ν¨μ€λ μννΈμ¨μ΄ κ°λ° μ μ§μμ μΌλ‘ ν΅ν© μλΉμ€λ₯Ό μ 곡νλ ν΄μ λλ€. CI(Continuous Integration) ν΄ μ΄λΌκ³ ννν©λλ€. μ ν¨μ€μ λν΄ μμ보기 μ μ μ°μ CI/CDμ λν΄ λ¨Όμ μμλ³΄κ² μ΅λλ€. CI kingofbackend.tistory.com [STEP1] ν μ€νΈ μλ² λ΄ ν°μΊ£(port80)..
OS μ’ λ₯ OS λ ν¬κ² Windows, Linux, Unix, MacOS 4κ°μ§λ‘ λΆλ₯λ©λλ€. Linux μ’ λ₯ Linux λ ν¬κ² λ λν, λ°λΉμ, μ°λΆν¬ 3κ°μ§λ‘ λΆλ₯λλ©°, κ³μ΄μ λ°λ₯Έ ν¨ν€μ§ κ΄λ¦¬ λͺ λ Ήμ΄κ° λ€λ¦ λλ€ λ λν κ³μ΄μ yum μ μ¬μ©νκ³ λ λν μν°νλΌμ΄μ¦ νλλΌ CentOS λ°λΉμ, μ°λΆν¬ κ³μ΄μ apt-get μ μ¬μ©ν©λλ€.
wget vs curl wget κ³Ό curl μ λ λ€ μΉ μλ²λ‘λΆν° 컨ν μΈ λ₯Ό κ°μ Έμ€λ Linux 컀맨λμ λλ€. wget κ³Ό curl μ κ±°μ μ μ¬νμ§λ§ μ‘°κΈ λ€λ₯Έ λΆλΆμ΄ μμ΅λλ€. 곡ν΅μ HTTP, HTTPS, FTP νλ‘ν μ½μ ν΅ν΄ 컨ν μΈ λ₯Ό λ€μ΄λ‘λ νλ μ»€λ§¨νΈ λΌμΈ ν΄μ λλ€. HTTP POST request λ₯Ό μ§μν©λλ€. (μ¦, μΉμ¬μ΄νΈλ‘ λ°μ΄ν°λ₯Ό μ μ‘ν μ μμ΅λλ€.) HTTP μΏ ν€λ₯Ό μ§μν©λλ€. μ€ν¬λ¦½νΈμ²λΌ μ¬μ©μ μΈν°λ μ μμ΄ μνλ μ μλλ‘ μ€κ³λμμ΅λλ€. μ€νμμ€μ΄λ©° 무λ£μ λλ€. 90λ λμ μμν νλ‘μ νΈμ λλ€. (wget μ 1995λ , curl μ 1996λ μ μμνμ΅λλ€.) metalink λ₯Ό μ§μν©λλ€. μ°¨μ΄μ wget κ°λ¨νκ³ μ§κ΄μ μ λλ€. λ³λμ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ§μνμ§ μμ΅λλ€...

μ΄ κΈμ DevEric λμ κΈμ μ°Έκ³ νμμ΅λλ€. νΈλμμ μ propagation μ€μ μ΄λ Springμμ μ¬μ©νλ μ΄λ Έν μ΄μ '@Transactional'μ ν΄λΉ λ©μλλ₯Ό νλμ νΈλμμ μμμ μ§νν μ μλλ‘ λ§λ€μ΄μ£Όλ μν μ ν©λλ€. μ΄λ νΈλμμ λ΄λΆμμ νΈλμμ μ λ νΈμΆνλ€λ©΄ μ€νλ§μμλ μ΄λ»κ² μ²λ¦¬νκ³ μμκΉμ? μλ‘μ΄ νΈλμμ μ΄ μμ±λ μλ μκ³ , μ΄λ―Έ νΈλμμ μ΄ μλ€λ©΄ λΆλͺ¨ νΈλμμ μ ν©λ₯ν μλ μμ κ²μ λλ€. μ§νλκ³ μλ νΈλμμ μμ λ€λ₯Έ νΈλμμ μ΄ νΈμΆλ λ μ΄λ»κ² μ²λ¦¬ν μ§ μ νλ κ²μ 'νΈλμμ μ μ ν μ€μ 'μ΄λΌκ³ λΆλ¦ λλ€. μ ν μ€μ μ΅μ νΈλμμ μ μ ν μ€μ μ '@Transactional'μ μ΅μ 'propagation'μ ν΅ν΄ μ€μ ν μ μμ΅λλ€. κ° μ΅μ μ μλμ κ°μ΅λ..

Simsλμ κΈμ μ°Έκ³ νμμ΅λλ€. νλ‘κ·Έλλ°μ νλ€ λ³΄λ©΄ λ€μν μ€λ₯κ° λ°μνκΈ° μ½μ΅λλ€. κ°μ₯ λνμ μΈ μλ‘λ fileμ μ½μΌλ €κ³ νλλ° ν΄λΉ fileμ΄ μλ κ²½μ°, 0μΌλ‘ λλλ κ²½μ° λ±λ±.. μ½κ² μ ν μ μλ μ€λ₯λ€μ΄ λ§μ΄ μμ£ . μ΄λ¬ν μ€λ₯λ₯Ό μ²λ¦¬νλ κ²μ 'μμΈ μ²λ¦¬'λΌ λ³Ό μ μμ΅λλ€. κ·ΈλΌ μ΄λ»κ² μμΈ μ²λ¦¬λ₯Ό ν μ μλμ§ μ΄ν΄λ³΄λλ‘ ν©μλ€. μμΈμ²λ¦¬ != λ²κ·Έ μ, μΌλ¨ μ€λ₯λ₯Ό λΆλ₯ν΄ λ΄ μλ€. μμμ κ°λ¨νκ² 2κ°μ§ μ€λ₯λ₯Ό λ§μλλ Έμ΅λλ€. 첫 λ²μ§Έλ νμΌμ΄ μ‘΄μ¬νμ§ μλ κ²½μ°, λ λ²μ§Έλ 0μΌλ‘ λλμμ λ μ€λ₯μ λλ€. λ λ€ μ€λ₯μ§λ§ μμΈν μ΄ν΄λ³΄λ©΄ νΉμ§μ΄ μ‘°κΈ λ€λ¦ λλ€. 첫 λ²μ§Έ, νμΌμ΄ μ‘΄μ¬νμ§ μλ κ²½μ°μ μ€λ₯λ νλ‘κ·Έλλ¨Έκ° μμμ νκ³ μμΈ μ²λ¦¬λ₯Ό ν΄μ€μΌ νλ κ²½μ°μ λλ€. μ¦, ..

// λ°λ³΅ν΄μ νμν λ΄μ© νΉμ λ°λ³΅ν ꡬ문 μ΄ λ, μνμ© λ³μλ₯Ό statusλΌκ³ μ§μ νλ€λ©΄ μλμ κ°μ΄ νμ©ν μ μλ€. ${status.current} νμ¬ forλ¬Έμ ν΄λΉνλ λ²νΈ ${status.index} 0λΆν°μ μμ ${status.count} 1λΆν°μ μμ ${status.first} 첫 λ²μ§ΈμΈμ§ μ¬λΆ ${status.last} λ§μ§λ§μΈμ§ μ¬λΆ ${status.begin} forλ¬Έμ μμ λ²νΈ ${status.end} forλ¬Έμ λ λ²νΈ ${status.step} forλ¬Έμ μ¦κ°κ° νμ© μ / μ½μ΄μ£Όμ μ κ°μ¬ν©λλ€.

μ μ (Static)μ΄λ? μ μ (static)μ κ³ μ λμ΄λ μλ―Έλ₯Ό κ°μ§κ³ μμ΅λλ€. Staticμ΄λΌλ ν€μλλ₯Ό μ¬μ©νμ¬ Staticλ³μμ Staticλ©μλλ₯Ό λ§λ€ μ μλλ° λ€λ₯Έλ§λ‘ μ μ νλμ μ μ λ©μλλΌκ³ λ νλ©° μ΄ λμ ν©μ³ μ μ λ©€λ²λΌκ³ ν©λλ€. (ν΄λμ€ λ©€λ²λΌκ³ λ ν©λλ€.) μ μ νλμ μ μ λ©μλλ κ°μ²΄(μΈμ€ν΄μ€)μ μμλ λ©€λ²κ° μλλΌ ν΄λμ€μ κ³ μ λ λ©€λ²μ λλ€. κ·Έλ κΈ°μ ν΄λμ€ λ‘λκ° ν΄λμ€λ₯Ό λ‘λ©ν΄μ λ©μλ λ©λͺ¨λ¦¬ μμμ μ μ¬ν λ ν΄λμ€λ³λ‘ κ΄λ¦¬λ©λλ€. λ°λΌμ ν΄λμ€μ λ‘λ©μ΄ λλλ μ¦μ λ°λ‘ μ¬μ©ν μ μμ΅λλ€. μ μ (Static) λ©€λ² μμ± Static ν€μλλ₯Ό ν΅ν΄ μμ±λ μ μ λ©€λ²λ€μ Heapμμμ΄ μλ Staticμμμ ν λΉλ©λλ€. Static μμμ ν λΉλ λ©λͺ¨λ¦¬λ λͺ¨λ κ°μ²΄κ° 곡..

κ°λ° μ΄μκ° λλΆλΆ κ·Έλ μ§λ§, κΈ°μ μ μΈ μΈ‘λ©΄λ³΄λ€ μμΈλ‘ μμ¬μν΅ λ¬Έμ κ°μ μΈμ μμκ° μμΈμ΄ λ λκ° λ§μ΅λλ€. μΊλ¦¬ ν리첼μ "μ κ°λ°μλ μλͺ»λ κΈ°μ μ νμ λ°₯ λ¨Ήλ―μ΄ νλ?"λΌλ μ λͺ©μ λΈλ‘κ·Έ κ²μκΈμμ κ·Έ μμΈμ λ€μ― κ°μ§λ‘ λΆλ₯νμ΅λλ€. νλμ© μμλ³΄κ² μ΅λλ€. μ΄ κΈμ μ κ°λ°μλ μλͺ»λ κΈ°μ μ νμ λ°₯ λ¨Ήλ―μ΄ νλ? μ Optimizing Java λΌλ μμ μ μ°Έκ³ νμ¬ μμ±νμμ΅λλ€. μ§λ£¨ν¨ κ°λ°μλ λλΆλΆ μκΈ° μν μ μ§λ£¨ν¨μ λλΌκ³ λκ° μλ‘κ³ λμ μ μΈ μΌμ μ°Ύμ κ°μ νμ¬ λλ μμ λ€λ₯Έ κ³³μΌλ‘ λ λ κΆλ¦¬λ₯Ό νλ μ¬λλ μμ΅λλ€. νμ§λ§ μ¬λ΄μ λ±ν λ§λ ν κΈ°νκ° μκ±°λ λ€λ₯Έ νμ¬λ‘ μ΄μ§νλ κ² μ¬μμΉ μμ λλ μκ² μ£ . λ¬Όλ‘ , μ§λ£¨ν μΌμμ μ μ°Έκ³ κ²¬λ λΏλ§ μλλΌ μΈλ € λ μ½κ³ νΈ..

μΆμν΄λμ€λ abstarctλ₯Ό μ¬μ©νκ³ μΈν°νμ΄μ€λ interfaceλ₯Ό μ¬μ©νλ©΄ ꡬνν μ μμ΅λλ€. νμ§λ§ μΈμ μΆμν΄λμ€λ₯Ό μ¬μ©νκ³ μΈμ μΈν°νμ΄μ€λ₯Ό μ¬μ©ν΄μΌ ν κΉμ? μλ§ λ§μ μ£Όλμ΄ κ°λ°μλΆλ€μ΄ λͺ μΎν λ΅μ λ΄λμ§ λͺ»ν κ²μ΄λΌκ³ μκ°ν©λλ€. μ λν μΆμν΄λμ€μ μΈν°νμ΄μ€μ μ μ ν μ¬μ© μ©λλ₯Ό μΈμ§νμ§ λͺ»ν μ± κ°λ°μ ν΄μμ΅λλ€. κ·Έλμ μ΄λ²μ μΆμν΄λμ€μ μΈν°νμ΄μ€μ λν΄ μμ λ³΄κ³ μ ν©λλ€. μΆμν΄λμ€ μΆμν΄λμ€λ μΌλ°ν΄λμ€μ λ³λ° λ€λ₯Ό κ²μ΄ μμ΅λλ€. λ¨μ§, μΆμ λ©μλλ₯Ό μ μΈνμ¬ μμμ ν΅νμ¬ μμ ν΄λμ€μμ μμ±νλλ‘ μ λνλ ν΄λμ€μ λλ€. κ·Έλμ λ―Έμμ± μ€κ³λλΌκ³ λ ννν©λλ€. κΈ°λ³Έμ μΌλ‘ μλ μ½λμ κ°μ΄ μμ±νκ² λ©λλ€. public abstract class ν΄λμ€μ΄λ¦{ public..