전체 글(76)
-
docker를 이용한 mysql Replication 서버 구축
DB Replication이란? DB 서버를 복제하는 기술이다. 일반적인 애플리케이션은 읽기 작업 비중이 쓰기 작업 보다 월등히 많다. DB Replication을 사용하면 쓰기 전용 소스 서버를 하나 두고 읽기 전용 레플리카 서버를 여러대 두어서 서버의 부하를 줄일 수 있다. 보통 쓰기 전용 DB 서버를 master 서버라고 부르고 읽기 전용 서버를 slave 서버라고 부른다. Replication Flow Master 서버에서 변경 사항을 Binary Log에 기록한다. Slave 서버에 변경이 발생함을 통지한다. Slave 서버는 I/O Thread를 이용해서 Binary Log를 읽는다. 변경 사항을 Relay Log에 기록한다. SQL Thread를 이용해서 변경 사항을 반영한다. Master ..
2023.03.28 -
Selenium 라이브러리로 웹 크롤러 제작하기
이번 포스팅에선 Selenium 라이브러리를 이용해서 웹 크롤러를 제작한 과정을 공유해보려고 한다. Selenium이란? 서버에서 브라우저의 환경을 구현할 수 있는 오픈소스 라이브러리이다. 주로 브라우저 기반 End Test에 사용되지만 크롤링 같은 다양한 목적을 위해 사용할 수 있다. Selenium을 사용한 이유? 크롤러를 개발할 때 처음에는 jsoup 라이브러리를 사용했다. 하지만 jsoup는 치명적인 단점이 있다. jsoup 라이브러리는 uri 접속시 최초 로딩되는 페이지만 읽어 들일 수 있다. 요즘의 웹 페이지는 SPA 방식으로 최초에 index 페이지를 로딩하고나서 유저의 동적인 action에 의해 동적으로 페이지를 랜더링하는 방식을 사용한다. HTML, CSS, JavaScript를 사용하는..
2023.03.14 -
[Design Pattern] 과도한 if 절 타입 분기 코드 개선하기
이번 포스팅에선 if 절이 과도하게 사용되어 오염된 비즈니스 레이어 결합도를 객체지향 패턴을 통해 낮추는 방법에 대해서 다뤄보려고 한다. 문제 분석 아래 코드는 이전 포스팅에서 다루었던 코드이다. https://steadycode.tistory.com/89 카카오 챗봇 응답 템플릿 작성하기 이번 포스팅에선 ‘채용공고 크롤러’ 사이드 프로젝트를 진행하면서 카카오 챗봇을 구현한 내용을 상세히 기록하고자 한다. 카카오 챗봇 카카오 봇 시스템은 유저로부터 스킬 요청을 받고 스 steadycode.tistory.com @RestController public class RecruitController { private final RecruitService recruitService; private final Ma..
2023.02.16 -
카카오 챗봇 응답 템플릿 작성하기
이번 포스팅에선 ‘채용공고 크롤러’ 사이드 프로젝트를 진행하면서 카카오 챗봇을 구현한 내용을 상세히 기록하고자 한다. 카카오 챗봇 카카오 봇 시스템은 유저로부터 스킬 요청을 받고 스킬 서버와 통신하여 알맞은 데이터를 응답해준다. 여기서 스킬이란 카카오 챗봇 시스템내에서 사용하는 동적 데이터 요청 기능 단위를 말한다. 스킬은 스킬 서버 API와 1대1 매핑된다. 다음의 순서로 개발해보도록 하겠다. API 생성 스킬 등록 블록에 매핑 테스트 1. API 생성 스킬 타입으로 ListCard와 SimpleText를 선택했다. ListCard는 한번의 요청으로 데이터를 간략한 블록 리스트 형태로 제공할 수 있다. 한번의 요청으로 여러 데이터를 응답해야하므로 ListCard 타입을 선택했다. 만약 반환할 데이터가 ..
2023.02.14 -
[Jenkins] 원격 Jenkins 서버로 CI/CD 환경 구현하기
이번 포스팅에선 jenkins pipeline 생성 방법과 jenkinsfile script를 작성하여 애플리케이션을 배포하는 방법에 대해서 다뤄보고자 한다. CI/CD Flow github로부터 소스코드 pull build & test 빌드된 jar 파일 배포 서버로 전송 애플리케이션 서버에 접속 전송된 jar 파일 실행하여 애플리케이션 배포 Jenkins Global Configuration 설정 JDK, Git, Gradle 등의 설정을 미리 생성해놓고 여러 Jenkins Project에서 참조하여 사용할 수 있도록 한다. JDK 설정 JAVA_HOME 값을 출력하여 jenkins console에 등록한다. $ echo $JAVA_HOME Git 설정 git 커멘드 경로도 등록해준다. $ which..
2023.02.09 -
[Jenkins] Jenkins Github 연동하기
이번 포스팅에선 Jenkins와 Github간 SSH 연동 방법에 대해서 다뤄 보겠다. SSH란? Secure SHell은 네트워크 상의 원격 컴퓨터에 접속하여 명령을 실행할 수 있도록 해주는 프로토콜이다. 기존에는 Telnet 방식을 사용했는데 암호화를 제공하지 않기 때문에 보안상 취약하다는 단점을 보완한 방법이 SSH이다. 암호화 방식에는 대칭키 방식과 비대칭키 방식 두가지를 사용한다. 비대칭키 방식은 클라이언트와 서버간 인증시 사용한다. 대칭키 방식은 클라이언트와 서버간 데이터를 주고받을 때 사용한다. 비대칭키 방식 비대칭 키 방식은 두 호스트 간에 공개키와 개인키 쌍으로 인증하는 방식이다. 공개키는 .pub, 개인키는 .pem의 형식을 띈다. 공개키는 유출되어도 크게 문제가 되지 않는 키이며 공개..
2023.02.09