AWS RDS ν™œμš©

YunesΒ·2023λ…„ 7μ›” 7일
0

Spring Boot

λͺ©λ‘ 보기
7/7

πŸ“š μ„œλ‘ 

spring boot ν”„λ‘œμ νŠΈλ₯Ό ec2 에 올렀 mysql 을 μ‚¬μš©ν•˜κ³ μž ν•œλ‹€. 그런데 λ‘œμ»¬μ—μ„  λ‹€ λŒμ•„κ°€λŠ”λ° ec2에 ν΄λ‘ ν•˜λ‹ˆ ν…ŒμŠ€νŠΈμ½”λ“œλ„ 말썽이고 λΉŒλ“œλ„ μ•ˆλœλ‹€. λŒ€μ²΄ 뭐가 λ¬Έμ œμΈμ§€ μ°Ύλ‹€ RDS λ₯Ό ν™œμš©ν•΄λ³΄λ €κ³  ν•œλ‹€.

ν˜„ 상황은 λ‘œμ»¬μ—μ„œ MySQL 을 μ‚¬μš©ν•˜κ³  μ‹ΆμœΌλ‚˜ 버전관리 λ“±μ˜ μš©μ΄ν•¨μœΌλ‘œ 인해 Docker mysql image λ₯Ό λ°›μ•„ μ‚¬μš©ν•˜κ³  μžˆλ‹€. 이λ₯Ό spring boot 에 μ—°λ™ν•˜μ—¬ ν”„λ‘œμ νŠΈλ₯Ό λ‘œμ»¬μƒμ—μ„œ MySQL 을 μ‚¬μš©ν•  수 μžˆλ„λ‘ ν–ˆλ‹€. 그런데 이걸 ec2 에 μ˜¬λ¦°λ‹€λ©΄?

ec2 에 ssh 둜 접속후 spring boot ν”„λ‘œμ νŠΈλ₯Ό ν΄λ‘ ν–ˆλ‹€.
그럼 ec2 μΈμŠ€ν„΄μŠ€μ—λŠ” MySQL 이 μžˆμ„κΉŒ? μ—†λ‹€. λ‘œμ»¬μ—μ„œλ„ docker compose λ₯Ό 톡해 MySQL 이 λŒμ•„κ°€κ³  μžˆμ–΄μ•Ό ν…ŒμŠ€νŠΈμ½”λ“œλ“  λΉŒλ“œλ“  λŒμ•„κ°„λ‹€.

κ·Έλ ‡λ‹€λ©΄ ec2 에 docker λ₯Ό μ„€μΉ˜ν•˜κ³  docker-compose νŒŒμΌμ„ μˆ˜μ •ν•΄μ„œ ec2 μƒμ—μ„œ docker-compose νŒŒμΌμ„ μ‹€ν–‰ν•˜μ—¬ MySQL image λ₯Ό λ°›κ³  database λ₯Ό μƒμ„±ν•˜μ—¬ μ‚¬μš©ν•΄μ•Ό ν•  것 같은데.. RDS λ₯Ό μ“°λ©΄ ꡳ이 이 과정이 ν•„μš”μ—†μ„κ²ƒ κ°™μ•„μ„œ 써보렀고 ν•œλ‹€.

πŸ“˜ RDS

πŸ“— RDS 생성

  1. 엔진 μ˜΅μ…˜μ—μ„œ MySQL 선택

  2. ν…œν”Œλ¦Ώμ—μ„œ 프리티어 선택 (이건 ν”„λ‘œλ•μ…˜μœΌλ‘œ 해도 될것같은데 일단 λ™μž‘ν•˜λŠ” 것을 ν™•μΈν•˜λŠ”κ²Œ μ΅œμš°μ„ μ΄λ‹€.)

  3. μ„€μ •μ—μ„œ DB μΈμŠ€ν„΄μŠ€ μ‹λ³„μžμ™€ 자격증λͺ…을 μ„€μ •ν•œλ‹€.
    DB μΈμŠ€ν„΄μŠ€ μ‹λ³„μžλŠ” μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜μ—ˆμ„ λ•Œ λͺ©λ‘μ— ν‘œμ‹œλ  이름이닀.
    λ§ˆμŠ€ν„° μ‚¬μš©μž 이름은 DB μ ‘μ†μ‹œ ν•„μš”ν•œ username, λ§ˆμŠ€ν„° μ•”ν˜ΈλŠ” DB 접속에 ν•„μš”ν•œ λΉ„λ°€λ²ˆν˜Έλ₯Ό μ˜λ―Έν•˜λ©° ν”„λ‘œμ νŠΈμ—μ„œ MySQL μ‚¬μš©μ‹œ μ‚¬μš©ν•˜λ˜ 사항을 κ·ΈλŒ€λ‘œ μž…λ ₯ν–ˆλ‹€.

  4. μΈμŠ€ν„΄μŠ€ ꡬ성은 t2.micro (μ§€κΈˆ μ‚¬μš©μ€‘μΈ 계정은 프리티어가 μ•„λ‹ˆλ‹€.)

  5. μŠ€ν† λ¦¬μ§€λŠ” κ·ΈλŒ€λ‘œ μœ μ§€

  6. 연결은 κΈ°μ‘΄ EC2 μ»΄ν“¨νŒ… λ¦¬μ†ŒμŠ€μ— μ—°κ²°ν•˜κ³  ν•΄λ‹Ή EC2 μΈμŠ€ν„΄μŠ€λ₯Ό μ„ νƒν–ˆλ‹€.

    db μ„œλΈŒλ„· 그룹도 κΈ°μ‘΄ ν•­λͺ©μ„ μ„ νƒν–ˆλ‹€.

    rds 생성을 ν…ŒμŠ€νŠΈν•΄λ³Έλ‹€κ³  λ§Œλ“€μ—ˆλ‹€κ°€ μ‚­μ œν–ˆμ—ˆλŠ”λ° RDS λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ§Œλ“€λ•Œλ§ˆλ‹€ μƒˆ VPC λ³΄μ•ˆκ·Έλ£Ήμ΄ μƒμ„±λ˜λŠ” 것 κ°™λ‹€. μžλ™ λ°±μ—…κΈ°κ°„λ•Œλ¬Έμ— DB μΈμŠ€ν„΄μŠ€ κ°€ μ‚­μ œκ°€ μ•ˆλ˜κ³  μžˆμ–΄μ„œ κΈ°μ‘΄ λ³΄μ•ˆκ·Έλ£Ή μ—­μ‹œ μ‚­μ œκ°€ μ•ˆλ˜κ³  μžˆλ‹€. 일주일둜 κΈ°ν•œμ„ μ„€μ •ν–ˆμ—ˆμœΌλ‹ˆ λ‹€μŒμ£Ό 쀑에 μ‚­μ œλ₯Ό λ‹€μ‹œ μ‹œλ„ν•΄λ΄μ•Όκ² λ‹€.

  1. λ°μ΄ν„°λ² μ΄μŠ€ 인증은 μ•”ν˜Έ 인증으둜

  2. μΆ”κ°€κ΅¬μ„±μ—μ„œ λ°±μ—… 보쑴 기간은 1일둜 μ„€μ •ν–ˆμœΌλ‚˜ 자유둜이 섀정해도 λ˜λŠ” 것 κ°™λ‹€.

  3. 월별 μΆ”μ • μš”κΈˆ
    이정도 사양이 μ›” μ•½ 27000원 정도

무슨 νŒμ—…μ΄ λœ¨λŠ”λ° κ·ΈλŒ€λ‘œ 닫아쀬닀.

μ–΄λŠμ •λ„ μƒμ„±ν•˜λŠ”λ° μ‹œκ°„μ΄ μ†Œμš”λ˜μ—ˆλ‹€.

RDS μƒμ„±μ™„λ£Œ

πŸ“— RDS 접속

TMI인데 사싀 μ–΄λŠμ •λ„κΉŒμ§€ λ³΄μ•ˆμ— μžˆμ–΄ 감좰야 ν•˜λŠ”μ§€ λͺ°λΌμ„œ μ• λ§€ν•œκ±΄ λ‹€ 가리고 μžˆλ‹€.

μƒμ„±λœ RDS λ₯Ό ν΄λ¦­ν•΄μ„œ μ—°κ²° & λ³΄μ•ˆμ„ 보면 μ—”λ“œν¬μΈνŠΈλ₯Ό 확인할 수 μžˆλŠ”λ° 이게 DB 접속 경둜이고 ν¬νŠΈκ°€ DB 접속 ν¬νŠΈκ°€ λœλ‹€.

기쑴에 λ‘œμ»¬μ—μ„œ localhost:3306 으둜 μ ‘μ†ν–ˆλ‹€λ©΄ 이제 μ—”λ“œν¬μΈνŠΈκ°’:3306 으둜 RDS 에 접속할 수 μžˆλ‹€.

.. κ·ΈλŸ¬λ‚˜ 접속할 수 μ—†μ—ˆλ‹€.

μ–΄μ§Έμ„œμΈκ°€ ν•˜κ³  ec2 에 직접 μ ‘μ†ν•΄μ„œ

sudo yum install mysql

mysql 을 μ„€μΉ˜ν•˜κ³ 

mysql -u 계정 -p -h hostμ£Όμ†Œ

직접 μ ‘μ†ν•΄λ΄€λŠ”λ° 이건 κ°€λŠ₯ν–ˆλ‹€.

μƒκ°ν•΄λ³΄λ‹ˆ 퍼블릭 μ—‘μ„ΈμŠ€ λΆˆκ°€λŠ₯으둜 ν•΄μ„œ 접속이 λΆˆκ°€λŠ₯ν•œκ°€ μ‹Άμ–΄μ„œ μ„€μ •μ—μ„œ 퍼블릭 μ—‘μ„ΈμŠ€ κ°€λŠ₯으둜 μˆ˜μ •ν›„ λ‹€μ‹œ RDS 접속을 μ‹œλ„ν–ˆλ‹€.

μ—¬μ „νžˆ μΈν…”λ¦¬μ œμ΄μ—μ„œ db 접속 μ‹œλ„μ‹œ dbms: mysql (no ver.) case sensitivity: plain=mixed, delimited=exact%0d%0a operation timed out. 였λ₯˜κ°€ λ– μ„œ ν”Όλˆˆλ¬Όμ„ 흘리던 도쀑 rds 의 λ³΄μ•ˆκ·Έλ£Ή 2κ°œμ€‘ ν•˜λ‹¨μ˜ λ³΄μ•ˆκ·Έλ£Ήμ—μ„œ

λ³΄μ•ˆκ·Έλ£Ή 이름이 ec2-rds-2 둜 λ˜μ–΄ μžˆλŠ” λ³΄μ•ˆκ·Έλ£Ήμ— μΈλ°”μš΄λ“œ κ·œμΉ™μ΄ ν•˜λ‚˜λ„ μ„€μ •λ˜μ–΄ μžˆμ§€ μ•Šμ•˜κ³  λ‚˜λ¨Έμ§€ rds-ec2-2 의 λ³΄μ•ˆκ·Έλ£Ή ID λ₯Ό λ³΅μ‚¬ν•΄μ„œ

μΈλ°”μš΄λ“œ κ·œμΉ™ νŽΈμ§‘μ— λ“€μ–΄κ°€ μœ ν˜•μ€ MySQL 둜, ν•˜λ‚˜λŠ” λ‚΄ IP, ν•˜λ‚˜λŠ” λ³΅μ‚¬ν•œ rds-ec2-2 의 λ³΄μ•ˆκ·Έλ£Ή ID λ₯Ό μ„ νƒν•΄μ„œ μΆ”κ°€ν–ˆλ‹€.

IntelliJ μ—μ„œ RDS 의 MySQL κ³Ό μ—°κ²°ν•˜κΈ° 성곡

μ°Έκ³ ν•˜κ³  μžˆλŠ” μ„œμ  [μŠ€ν”„λ§ λΆ€νŠΈμ™€ AWS둜 혼자 κ΅¬ν˜„ν•˜λŠ” μ›Ή μ„œλΉ„μŠ€] μ—μ„œ λ³Όλ•Œ RDS λ₯Ό μƒμ„±μ‹œ 이미 λ°μ΄ν„°λ² μ΄μŠ€λͺ…을 μ§€μ •ν–ˆμ—ˆλ‹€κ³  ν•œλ‹€. (MariaDB)

λ‹€λ₯Έ λΈ”λ‘œκ·Έμ—μ„œλ„ MariaDB μ„ νƒμ‹œ μΆ”κ°€ κ΅¬μ„±μ—μ„œ 초기 λ°μ΄ν„°λ² μ΄μŠ€ 이름을 μ„ νƒν•˜λŠ” 창이 있던 것 κ°™λ‹€.

λ‚˜μ˜ 경우 MySQL 을 μ„ νƒν–ˆλŠ”λ° λ°μ΄ν„°λ² μ΄μŠ€ 이름 μ§€μ •ν•˜λŠ”κ±΄ μ—†μ—ˆλ‹€. 즉, λ°μ΄ν„°λ² μ΄μŠ€κ°€ μƒμ„±λ˜μ–΄ μžˆμ§€ μ•Šλ˜ ν˜„ 상황이 μ˜¬λ°”λ₯Έ μƒν™©μž„μ„ μΈμ§€ν–ˆλ‹€.

πŸ“— EC2 ν”„λ‘œμ νŠΈ 배포 ν…ŒμŠ€νŠΈ

πŸ“• [error] 8080 port was already in use

자주 λ°œμƒν•˜κΈΈλž˜ μ •λ¦¬ν•œλ‹€.

lsof -i tcp:8080

lsof : list open files, ν˜„μž¬ μ‹œμŠ€ν…œμ—μ„œ μ—΄λ¦° 파일 및 λ„€νŠΈμ›Œν¬ 연결에 λŒ€ν•œ 정보λ₯Ό ν‘œμ‹œν•˜λŠ” λͺ…λ Ήμ–΄
-i : λ„€νŠΈμ›Œν¬ 연결을 ν•„ν„°λ§ν•˜λŠ” μ˜΅μ…˜
=> tcp ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜λŠ” 포트 8080에 λŒ€ν•œ 연결을 ν•„ν„°λ§ν•΄λ‹¬λΌλŠ” λͺ…령어이닀.

sudo kill -9 23768

-9 : kill λͺ…령어에 μ „λ‹¬λ˜λŠ” μ˜΅μ…˜μœΌλ‘œ ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°•μ œλ‘œ μ’…λ£Œν•˜λŠ” μ‹œκ·Έλ„μ„ μ§€μ •ν•œλ‹€. 9 λŠ” SIGKILL μ‹œκ·Έλ„μ„ λ‚˜νƒ€λ‚΄λ©° 이 μ‹œκ·Έλ„μ€ ν”„λ‘œμ„ΈμŠ€λ₯Ό 무쑰건적으둜 μ’…λ£Œμ‹œν‚€λŠ” κ°€μž₯ κ°•λ ₯ν•œ μ‹œκ·Έλ„μ΄λ‹€.

πŸ“• plain jar 생성 방지

  • plain archive
    -plain 이 뢙은 jar 파일
    λͺ¨λ“  μ˜μ‘΄μ„±μ„ ν¬ν•¨ν•˜μ§€ μ•Šκ³  μž‘μ„±λœ μ†ŒμŠ€μ½”λ“œμ˜ 클래슀 파일과 λ¦¬μ†ŒμŠ€ 파일만 포함
    ν”„λ‘œμ νŠΈμ™€ κ΄€λ ¨λœ(μ˜μ‘΄ν•˜λŠ”) 라이브러리λ₯Ό ν¬ν•¨ν•˜μ§€ μ•ŠλŠ”λ‹€.
    java -jar *.jar λͺ…령을 ν–ˆμ„λ•Œ μ–΄λ–€ jar νŒŒμΌμ„ μ‹€ν–‰μ‹œμΌœμ•Ό ν•  지 ν—·κ°ˆλ¦΄ 수 μžˆλ‹€.

    -jar : jar νŒŒμΌμ„ μ‹€ν–‰ν•˜κ³ μž ν•  λ•Œ μ‚¬μš©, ν•΄λ‹Ή jar νŒŒμΌμ„ μ§€μ •ν•˜μ—¬ μ‹€ν–‰
    *.jar : ν˜„μž¬ 디렉토리에 μžˆλŠ” ν™•μž₯μžκ°€ .jar 인 λͺ¨λ“  파일

μ„œλ²„ μ‹€ν–‰ λͺ…λ Ήμ–΄

java -jar *.jar
  • executable archive
    -plain ν‚€μ›Œλ“œκ°€ μ—†λŠ” jar 파일
    μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ 싀행에 ν•„μš”ν•œ λͺ¨λ“  μ˜μ‘΄μƒμ„ ν•¨κ»˜ λΉŒλ“œ

이제 -plain.jar 파일이 μƒμ„±λ˜μ§€ μ•ŠλŠ”λ‹€.

μ—¬μ „νžˆ ec2 μ—μ„œ λΉŒλ“œμ‹œ ν…ŒμŠ€νŠΈμ½”λ“œ μ‹€ν–‰μ—μ„œ λ§‰νžŒλ‹€. λ˜ν•œ ν…ŒμŠ€νŠΈμ½”λ“œκ°€ μ‹€νŒ¨ν–ˆλ‹€κ³  떠도 build - libs 디렉토리에 jar 파일이 μƒμ„±λ˜μ–΄ 이λ₯Ό μ‹€ν–‰ν•˜λ € ν–ˆλŠ”λ° 이것도 μ‹€νŒ¨κ°€ λœ¬λ‹€. μ•„λ§ˆλ„ application.yml νŒŒμΌμ—μ„œ mysql μ„€μ •μ˜ url μ—μ„œ localhost 둜 λ˜μ–΄ μžˆλŠ”λ° 이 host λ₯Ό ec2 의 μ—”λ“œν¬μΈνŠΈλ‘œ λ°”κΏ”μ€˜μ•Ό 싀행이 λ˜μ§€ μ•Šμ„κΉŒ μ‹Άλ‹€.

πŸ“• μš΄μ˜ν™˜κ²½μ— λ”°λ₯Έ λ‹€λ₯Έ application.yml 파일 μ μš©ν•˜κΈ° (μˆ˜μ •μ€‘)

local 에 μžˆμ„λ•Œ, ec2 에 μžˆμ„λ•Œ μš΄μ˜ν™˜κ²½μ„ ν™•μΈν•˜κ³  μ•Œμ•„μ„œ 그에 λ”°λ₯Έ yml νŒŒμΌμ„ μ‹€ν–‰μ‹œν‚¬ 수 μžˆλ„λ‘ ν•˜λŠ” 방법을 찾아보고 μžˆλ‹€.

ν…ŒμŠ€νŠΈμ½”λ“œλŠ” μ•ˆλŒμ•„κ°€λŠ”λ° μ„œλ²„λŠ” λŒμ•„κ°€κ²Œ λ˜μ—ˆλ‹€.

spring boot 2.4 이후 profile μ΄λž€ 것에 변경사항이 μžˆμ—ˆλ‹€.

profile?
profile μ΄λž€ μŠ€ν”„λ§μ˜ 각 μ»΄ν¬λ„ŒνŠΈλ“€μ˜ 섀정에 ν•„μš”ν•œ ν™˜κ²½ λ³€μˆ˜ 값듀을 λͺ¨μ•„놓은 νŒŒμΌμ΄λ‹€.

edit configuration μ—μ„œ κΈ°λ³Έ profile 을 dev 둜 μ„€μ •ν•œλ‹€.

πŸ“• ν…ŒμŠ€νŠΈ μ½”λ“œκ°€ ec2μ—μ„œ λŒμ•„κ°€μ§€ μ•ŠλŠ” 문제 ν•΄κ²°

ν™•μΈν•΄λ³΄λ‹ˆ test - resources - application.yml 이 μˆ˜μ •λ˜μ§ˆ μ•Šμ•„μ„œ application.yml μ•ˆμ— database url 도 localhost 둜 λ‚˜νƒ€λ‚˜μ§€ μ•Šκ³  rds 의 μ—”λ“œν¬μΈνŠΈλ‘œ μˆ˜μ •ν•΄μ€˜μ•Ό ν–ˆλ‹€.

μˆ˜μ •μ‚¬ν•­ :

κ²°κ³Ό
이전에 ν…ŒμŠ€νŠΈκ°€ λͺ¨λ‘ μ‹€νŒ¨ν•˜λ˜κ²Œ λ‹€μ‹œ Ec2 에 λ°°ν¬ν•˜λ‹ˆ

배포가 μ„±κ³΅ν•˜λŠ” 것을 μ•Œ 수 μžˆλ‹€. πŸ‘

πŸ““ κ²°λ‘ 

AWS μ—μ„œ RDS λ₯Ό μ‚¬μš©ν•˜κΈ°κΉŒμ§€μ˜ 과정을 돌이켜보면 λ‹€μŒκ³Ό 같은 과정을 걸쳐 μ§„ν–‰ν–ˆλ‹€.

VPC 생성 - EC2 생성 - λ³΄μ•ˆκ·Έλ£Ή, 탄λ ₯적IP μ„€μ • - springboot ν”„λ‘œμ νŠΈ 생성 - RDS μƒμ„±μ‹œ EC2 μΈμŠ€ν„΄μŠ€μ™€ 연동 - RDS μ—”λ“œν¬μΈνŠΈ, 탄λ ₯적 IP 확보 - EC2 ssh μ ‘κ·Ό - EC2 내뢀에 springboot ν”„λ‘œμ νŠΈμ™€ λ§žλŠ” java μ„€μΉ˜, timezone μ„€μ •, hostname μ„€μ • - EC2 내뢀에 github / gitlab ν”„λ‘œμ νŠΈ 클둠 (μ…ΈμŠ€ν¬λ¦½νŠΈ μ μš©μ˜ˆμ •) - EC2 내뢀에 MySQL μ„€μΉ˜ 및 μ ‘μ†ν•˜μ—¬(탄λ ₯적 IP, EC2 μ—μ„œ ν‚€ νŽ˜μ–΄ 생성, RDS 의 μ—”λ“œν¬μΈνŠΈ ν•„μš”) λ°μ΄ν„°λ² μ΄μŠ€ 생성 - RDS 퍼블릭 μ„€μ • - μ™ΈλΆ€μ—μ„œ RDS μ—”λ“œν¬μΈνŠΈ 및 username, pw λ₯Ό 톡해 RDS 의 MySQL DB μ ‘κ·Ό (IntelliJ database, MySQL workbench database 연동)

μš΄μ˜ν™˜κ²½μ— 따라 application.yml 이 λ‹€λ₯΄κ²Œ λ™μž‘ν•˜λŠ”κ²ƒκ³Ό λ‘œμ»¬μ—μ„œμ²˜λŸΌ EC2 λ‚΄μ—μ„œ λΉŒλ“œμ‹œ ν…ŒμŠ€νŠΈμ½”λ“œκ°€ μ„±κ³΅ν•˜λ„λ‘ ν•˜λŠ” κ²ƒκΉŒμ§€ ν™•μΈλ˜λ©΄ λ°°ν¬κΉŒμ§€μ˜ μ…Έ 슀크립트 μžλ™ν™” μž‘μ—…μ„ ν•˜κ³  μΆ”ν›„ GitLAB 에 pipline 섀정을 톡해 ν”„λ‘œμ νŠΈμ—μ„œ push 만 ν•˜λ©΄ ν…ŒμŠ€νŠΈ 점검, λΉŒλ“œ 및 λ°°ν¬κΉŒμ§€ 일련의 κ³Όμ • CI/CD μž‘μ—…κΉŒμ§€ ν•˜λŠ” 것이 λͺ©ν‘œλ‹€.

이전 λ¦¬λˆ…μŠ€ λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν• λ•Œ μ–΄λ–€ λ™μž‘μ„ν•˜λ €λ©΄ μ–΄λ–€ λͺ…λ Ήμ–΄κ°€ ν•„μš”ν•œμ§€ 찾아보고 κ·ΈλŒ€λ‘œ μž…λ ₯만 ν–ˆλ‹€λ©΄ μ΅œκ·Όμ—” λͺ…λ Ήμ–΄μ˜ μ–΄λ–€ μ˜΅μ…˜μ΄ μ–΄λ–€ λ™μž‘μ„ ν•˜λŠ”μ§€κΉŒμ§€ ν™•μΈν•΄λ³΄λ‹ˆ 더 이해가 잘 되고 μžˆλ‹€. κ°‘μž‘μŠ€λŸ½μ§€λ§Œ 전에 μΌν•˜λ˜ κ³³μ—μ„œ λ©˜ν† λ‘œ λ§Žμ€ 쑰언을 ν•΄μ£Όμ…¨λ˜ λΆ„λ“€κ»˜ 정말 κ°μ‚¬ν•œ 마음이 λ“ λ‹€. ν•˜λ‚˜λΌλ„ λͺ¨λ₯Έ 채 κ·Έλƒ₯ λ„˜μ–΄κ°€μ§€ 말고 ν™•μ‹€νžˆ μ•Œμ•„κ°€λŠ” μŠ΅κ΄€μ„ λ“€μ΄κ³ μž λ…Έλ ₯ 쀑이닀.

profile
미래의 λ‚˜λ₯Ό λ§Œλ“€μ–΄λ‚˜κ°€λŠ” ν•œ 개발자의 λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보