λ°˜μ‘ν˜•

도컀(Docker) μ…€λ ˆλ‹ˆμ›€(Selenium) μ„œλΉ„μŠ€

ν˜„μž¬ κ·Όλ¬΄ν•˜κ³  μžˆλŠ” νšŒμ‚¬μ—λŠ” μ „μž 결재λ₯Ό μœ„ν•œ 이카운트 ERPλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이 μ„œλΉ„μŠ€λŠ” μ‹€μ‹œκ°„μœΌλ‘œ 자료 μž…λ ₯κ³Ό μ‘°νšŒκ°€ κ°€λŠ₯ν•˜κ³ , μ „μž λ¬Έμ„œ 결재 진행 상황을 확인할 수 있죠. κ²Œλ‹€κ°€ λͺ¨λ°”일 μ•±κ³Ό μ›Ή 기반 μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜κ³  μžˆμ–΄ μΈν„°λ„·λ§Œ λœλ‹€λ©΄ μ–Έμ œ μ–΄λ””μ„œλ“  μ‚¬μš©μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€. λ˜ν•œ, 개발자λ₯Ό μœ„ν•œ REST API도 μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

그런데 ν•œ 가지 μ•„μ£Ό μ•„μ‰¬μš΄ 뢀뢄이 μžˆμŠ΅λ‹ˆλ‹€. 업무 νŠΉμ„±μƒ νŠΉμ • κ²°κ³Όλ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ μ•ŒλžŒ λ°›κ³  싢은데, ν•˜ν•„ 이 λΆ€λΆ„λ§Œ API둜 μ œκ³΅ν•˜μ§€ μ•Šλ”κ΅°μš”. 고객센터에도 λ¬Έμ˜ν•΄λ΄€μ§€λ§Œ APIκ°€ μ—†λŠ” 것이 맞고, 아직 개발 κ³„νšλ„ μ—†λ‹€κ³  ν•˜λ”κ΅°μš”.

ν•˜μ§€λ§Œ 방법이 μ•„μ£Ό μ—†μ§€λŠ” μ•Šμ•˜μŠ΅λ‹ˆλ‹€. μ œκ°€ μƒκ°ν•œ ꡬ상은 μ‹œλ†€λ‘œμ§€ μ„œλ²„μ˜ λ„μ»€μ—μ„œ ERP μ›Ή νŽ˜μ΄μ§€μ˜ νŠΉμ • ν•­λͺ©μ„ μ…€λ ˆλ‹ˆμ›€μœΌλ‘œ ν™•μΈν•˜λŠ” κ²ƒμΈλ°μš”. λ‹Ήμ—°νžˆ 될거라 μƒκ°ν–ˆκ³ , κ²°κ΅­ μ›ν•˜λŠ” κ²°κ³Όλ₯Ό 얻을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 이번 λ³Έλ¬Έμ—μ„œλŠ” λ„μ»€μ—μ„œ μ…€λ ˆλ‹ˆμ›€ μ„œλΉ„μŠ€λ₯Ό λ™μž‘ν•˜κΈ° μœ„ν•œ μ€€λΉ„ κ³Όμ •κ³Ό λ™μž‘ κ²°κ³Όλ₯Ό μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.

μž‘μ—… ꡬ상

μ…€λ ˆλ‹ˆμ›€μœΌλ‘œ νŠΉμ • μ›Ήμ‚¬μ΄νŠΈμ— μ ‘μ†ν•œ ν›„ νŠΉμ • 데이터λ₯Ό μ·¨λ“ν•©λ‹ˆλ‹€. 그리고 쑰건이 μ„±λ¦½ν•˜λ©΄ μ‹œλ†€λ‘œμ§€ μ±—(Chat)의 μ±—λ΄‡μœΌλ‘œ λ©”μ‹œμ§€λ₯Ό μ „μ†‘ν•˜μ—¬ μ•Œλ¦Όμ„ 받도둝 ν•©λ‹ˆλ‹€. 이 λ™μž‘μ„ 도컀 μ„œλΉ„μŠ€λ‘œ μ œμž‘ν•©λ‹ˆλ‹€.

μ„œλΉ„μŠ€-ꡬ상도
μ„œλΉ„μŠ€-ꡬ상도

μ€€λΉ„ 단계

1. μ…€λ ˆλ‹ˆμ›€(Selenium) 읡히기

μ…€λ ˆλ‹ˆμ›€μ€ μ›Ή λΈŒλΌμš°μ € μžλ™ν™”λ₯Ό μœ„ν•œ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€. λ³Έλ¬Έμ—μ„œλŠ” νŠΉμ • μ›Ή νŽ˜μ΄μ§€μ—μ„œ νŠΉμ • 데이터듀을 ν™•μΈν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•  μ˜ˆμ •μž…λ‹ˆλ‹€. μ•„λž˜ 링크λ₯Ό μ°Έκ³ ν•˜μ—¬ μ…€λ ˆλ‹ˆμ›€μ„ μ–΄λ–»κ²Œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”μ§€ μ•Œμ•„λ³΄μ„Έμš”.

[μ…€λ ˆλ‹ˆμ›€/Selenium, C#] C#μ—μ„œ μ…€λ ˆλ‹ˆμ›€μ„ μ‚¬μš©ν•˜λŠ” 방법 총정리

 

[μ…€λ ˆλ‹ˆμ›€/Selenium, C#] C#μ—μ„œ μ…€λ ˆλ‹ˆμ›€μ„ μ‚¬μš©ν•˜λŠ” 방법 총정리

μ…€λ ˆλ‹ˆμ›€(Selenium)μ΄λž€? μ…€λ ˆλ‹ˆμ›€μ€ μ›Ή λΈŒλΌμš°μ € μžλ™ν™”λ₯Ό μœ„ν•œ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€. λˆˆμ— λ³΄μ΄λŠ” λͺ¨λ“  μ½˜ν…μΈ μ— μž…λ ₯, 클릭, κ°€μ Έμ˜€κΈ° 등이 κ°€λŠ₯ν•©λ‹ˆλ‹€. κ°„λ‹¨ν•œ μ›Ή μ‚¬μ΄νŠΈ 접속뢀터 둜그인, 검색,

luckygg.tistory.com

2. 챗봇 μ—°λ™ν•˜κΈ°

μ‹œλ†€λ‘œμ§€λŠ” μ±—(Chat)μ΄λΌλŠ” λ©”μ‹ μ €λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. μ…€λ ˆλ‹ˆμ›€μœΌλ‘œ 얻은 데이터λ₯Ό μ±—μ˜ 챗봇과 μ—°λ™ν•˜μ—¬ μ•Œλ¦Όμ„ 받을 κ²λ‹ˆλ‹€. μ•„λž˜ 링크λ₯Ό μ°Έκ³ ν•˜μ—¬ 챗봇을 μ–΄λ–»κ²Œ μ—°λ™ν•˜λŠ”μ§€ μ°Έκ³ ν•˜μ„Έμš”.

[챗봇/.NET] C#μ—μ„œ μ‹œλ†€λ‘œμ§€ Chat에 챗봇 λ©”μ‹œμ§€ 보내기(예제 포함)

 

[챗봇/.NET] C#μ—μ„œ μ‹œλ†€λ‘œμ§€ Chat에 챗봇 λ©”μ‹œμ§€ 보내기(예제 포함)

μ‹œλ†€λ‘œμ§€ Chat λ©”μ‹ μ € μ‹œλ†€λ‘œμ§€μ—λŠ” Chatμ΄λΌλŠ” λ©”μ‹ μ €λ₯Ό μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” νŒ¨ν‚€μ§€ μ„Όν„°μ—μ„œ μ„€μΉ˜κ°€ κ°€λŠ₯ν•œλ°μš”. μ£Όμš” νŠΉμ§•μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. 무료둜 μ‚¬μš© κ°€λŠ₯ λ©”μ‹œμ§€ κ³ μ •(곡지 사항),

luckygg.tistory.com

3. λ¦¬λˆ…μŠ€(Linux) μž‘μ—…μž μ„œλΉ„μŠ€ λ§Œλ“€κΈ°

μ‹œλ†€λ‘œμ§€ λ„μ»€μ—μ„œ μ„œλΉ„μŠ€λ₯Ό κ΅¬λ™ν•˜λ €λ©΄, λ¦¬λˆ…μŠ€ λ„μ»€μš© μž‘μ—…μž μ„œλΉ„μŠ€λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€. μ•„λž˜ 링크λ₯Ό μ°Έκ³ ν•˜μ„Έμš”.

[ASP.NET] C# μ‹œλ†€λ‘œμ§€ Linux Docker 용 μž‘μ—…μž μ„œλΉ„μŠ€ λ§Œλ“œλŠ” 방법

 

[ASP.NET] C# μ‹œλ†€λ‘œμ§€ Linux Docker 용 μž‘μ—…μž μ„œλΉ„μŠ€ λ§Œλ“œλŠ” 방법

Linux Docker μž‘μ—…μž μ„œλΉ„μŠ€ μ§€λ‚œ ν¬μŠ€νŒ…μ—μ„œ ASP.NET Core Worker Serviceλ₯Ό λΉŒλ“œν•˜μ—¬ Windows 용 Dockerμ—μ„œ μ„œλΉ„μŠ€λ₯Ό λ™μž‘ν•˜λŠ” 방법을 μ†Œκ°œν–ˆμ—ˆμŠ΅λ‹ˆλ‹€. μ΄λ²ˆμ—λŠ” Linux Dockerλ₯Ό μœ„ν•œ μž‘μ—…μž μ„œλΉ„μŠ€λ₯Ό μ œμž‘ν•˜λ €.

luckygg.tistory.com

4. μ‹œλ†€λ‘œμ§€ μž‘μ—… μŠ€μΌ€μ€„λŸ¬ μ μš©ν•˜κΈ°

μ΄μƒν•˜κ²Œλ„ Linux Dockerμ—μ„œ μ…€λ ˆλ‹ˆμ›€μ„ μ‚¬μš©ν•˜λ©΄ λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memeory leak)κ°€ λ°œμƒν•©λ‹ˆλ‹€. μ΄μƒν•œ 점은 객체λ₯Ό ν•œ 번만 μƒμ„±ν•˜κ³  μ‚¬μ΄νŠΈλ‘œ μ΄λ™ν•˜λŠ” ν•¨μˆ˜λ§Œ ν˜ΈμΆœν•˜λŠ”λ°λ„ λˆ„μˆ˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. λ„λŒ€μ²΄ μ™œ μƒκΈ°λŠ”μ§€ 이유λ₯Ό 아직도 찾지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ λ°œμƒν•˜μ—¬ μ‚¬μš© κ°€λŠ₯ν•œ λ©”λͺ¨λ¦¬κ°€ 뢀쑱해지면 μ‹œλ†€λ‘œμ§€ λ‚˜μŠ€κ°€ μ–΄λŠ μˆœκ°„ 응닡이 μ—†λŠ” μƒνƒœκ°€ λ©λ‹ˆλ‹€.

κ·Έλž˜μ„œ 업무 μ‹œκ°„μ—λ§Œ μ„œλΉ„μŠ€κ°€ λ™μž‘ν•˜κ³  λ©ˆμΆ”λ„λ‘ μŠ€μΌ€μ€„λŸ¬λ₯Ό μ μš©ν•˜μ—¬, μ„œλΉ„μŠ€κ°€ μ’…λ£Œλ˜λ©΄ λ©”λͺ¨λ¦¬λ₯Ό νšŒλ³΅ν•  수 μžˆλ„λ‘ νŽΈλ²•μ„ μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. μ‹œλ†€λ‘œμ§€ μž‘μ—… μŠ€μΌ€μ€„λŸ¬ μ‚¬μš© 방법은 μ•„λž˜ 링크λ₯Ό μ°Έκ³ ν•˜μ„Έμš”.

[Synology NAS] μž‘μ—… μŠ€μΌ€μ€„λŸ¬λ‘œ μž‘μ—… μ˜ˆμ•½ν•˜κΈ°(μ‚¬μš©μž μ •μ˜ 슀크립트)

 

[Synology NAS] μž‘μ—… μŠ€μΌ€μ€„λŸ¬λ‘œ μž‘μ—… μ˜ˆμ•½ν•˜κΈ°(μ‚¬μš©μž μ •μ˜ 슀크립트)

μž‘μ—… μŠ€μΌ€μ€„λŸ¬λž€? μ‹œλ†€λ‘œμ§€ λ‚˜μŠ€μ˜ μ œμ–΄νŒμ—λŠ” μž‘μ—… μŠ€μΌ€μ€„λŸ¬ 메뉴가 μžˆμŠ΅λ‹ˆλ‹€. 이 μž‘μ—… μŠ€μΌ€μ€„λŸ¬λ₯Ό μ‚¬μš©ν•˜μ—¬ νŠΉμ • μ‹œκ°„μ— νŠΉμ • μ„œλΉ„μŠ€λ‚˜ 슀크립트λ₯Ό μ˜ˆμ•½ν•˜κ³  μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄,

luckygg.tistory.com

핡심

Linux μž‘μ—…μž μ„œλΉ„μŠ€λ₯Ό λ§Œλ“œλŠ” μ „λ°˜μ μΈ 과정은 μ•„λž˜ 링크λ₯Ό μ°Έκ³ ν•©λ‹ˆλ‹€.

[ASP.NET] C# μ‹œλ†€λ‘œμ§€ Linux Docker 용 μž‘μ—…μž μ„œλΉ„μŠ€ λ§Œλ“œλŠ” 방법

 

[ASP.NET] C# μ‹œλ†€λ‘œμ§€ Linux Docker 용 μž‘μ—…μž μ„œλΉ„μŠ€ λ§Œλ“œλŠ” 방법

Linux Docker μž‘μ—…μž μ„œλΉ„μŠ€ μ§€λ‚œ ν¬μŠ€νŒ…μ—μ„œ ASP.NET Core Worker Serviceλ₯Ό λΉŒλ“œν•˜μ—¬ Windows 용 Dockerμ—μ„œ μ„œλΉ„μŠ€λ₯Ό λ™μž‘ν•˜λŠ” 방법을 μ†Œκ°œν–ˆμ—ˆμŠ΅λ‹ˆλ‹€. μ΄λ²ˆμ—λŠ” Linux Dockerλ₯Ό μœ„ν•œ μž‘μ—…μž μ„œλΉ„μŠ€λ₯Ό μ œμž‘ν•˜λ €.

luckygg.tistory.com

도컀 μž‘μ—…μž μ„œλΉ„μŠ€μ—μ„œ μ…€λ ˆλ‹ˆμ›€μ„ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같은 μ˜΅μ…˜ 섀정이 ν•„μš”ν•©λ‹ˆλ‹€. κ·Έ μ™Έ μ‚¬μš© 방법은 λ™μΌν•©λ‹ˆλ‹€.

ChromeDriverService _driverService = ChromeDriverService.CreateDefaultService();
_driverService.HideCommandPromptWindow = true;

ChromeOptions _options = new ChromeOptions();
_options.AddArgument("disable-gpu");
_options.AddArgument("headless");
_options.AddArgument("no-sandbox");
_options.AddArgument("disable-dev-shm-usage");

ChromeDriver _driver = new ChromeDriver(_driverService, _options);

μ„œλΉ„μŠ€ λΉŒλ“œλ₯Ό μœ„ν•œ Dockerfile은 λ‹€μŒκ³Ό 같이 μž‘μ„±ν•©λ‹ˆλ‹€. λ„μ»€μ—μ„œ ꡬ성 μš”μ†Œλ₯Ό μ„€μΉ˜ν•˜κ³ , 크둬 λ“œλΌμ΄λ²„λ₯Ό μ„€μΉ˜ν•˜λŠ” 과정을 μ˜λ―Έν•©λ‹ˆλ‹€.

FROM mcr.microsoft.com/dotnet/runtime:5.0 AS base

COPY . /app
WORKDIR /app
 
#포트 λ²ˆν˜ΈλŠ” μ˜ˆμ‹œλ‘œ 8888
ENV ASPNETCORE_URLS http://*:8888
EXPOSE 8888

# RUN apt-get update
RUN apt-get update && apt-get install -y gnupg2
RUN apt install -y wget

# CHROME
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/goodle.list'
RUN apt-get update
RUN apt-get install -y google-chrome-stable

# CHROME_DRIVER
RUN apt-get install -yqq unzip
RUN apt-get install -y curl
RUN wget -O /tmp/chromedriver.zip http://chromedriver.storage.googleapis.com/`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`/chromedriver_linux64.zip
RUN unzip /tmp/chromedriver.zip chromedriver -d /usr/local/bin/
ENV DISPLAY=:99
 
#ExamWorkerServiceλŠ” ν”„λ‘œμ νŠΈ 이름
ENTRYPOINT ["dotnet", "WorkerService.dll"]

μ•žμ—μ„œ μ–ΈκΈ‰ν•œ κ²ƒμ²˜λŸΌ, 도컀 μ„œλΉ„μŠ€μ—μ„œ μ…€λ ˆλ‹ˆμ›€μ„ λ™μž‘ν•˜λ©΄ λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. μž‘μ—…μž μŠ€μΌ€μ€„λŸ¬μ— μ‚¬μš©μž μ •μ˜ 슀크립트λ₯Ό μΆ”κ°€ν•˜μ—¬ νŠΉμ • μ‹œκ°„ λ™μ•ˆλ§Œ λ™μž‘ν•˜κ³  μ’…λ£Œλ˜λ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€.

docker container start [μ»¨ν…Œμ΄λ„ˆ 이름]
docker container stop [μ»¨ν…Œμ΄λ„ˆ 이름]

λ™μž‘ κ²°κ³Ό

μ…€λ ˆλ‹ˆμ›€μœΌλ‘œ 얻은 데이터 쀑 μ•Œλ¦Όμ΄ ν•„μš”ν•œ 정보λ₯Ό νŒŒμ‹±ν•˜μ—¬ μ±—λ΄‡μœΌλ‘œ λ©”μ‹œμ§€λ₯Ό μ „λ‹¬ν•˜λ©΄, μ•„λž˜ μ΄λ―Έμ§€μ²˜λŸΌ 챗봇 λ©”μ‹œμ§€λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. 이 λ©”μ‹œμ§€κ°€ PCλ‚˜ μŠ€λ§ˆνŠΈν°μ— μ•Œλ¦Όμ΄ λ˜μ–΄ μ‹€μ‹œκ°„μœΌλ‘œ 업무 확인이 κ°€λŠ₯ν•˜κ²Œ λμŠ΅λ‹ˆλ‹€.

λ™μž‘-κ²°κ³Ό
λ™μž‘-κ²°κ³Ό

λ°˜μ‘ν˜•