초난감 DAO @Getter @Setter public class User { String id; String name; String password; }JavaBean 규악을 따르고 사용자 정보를 저장하는 User 클래스를 생성한다. JavaBean 멤버 변수마다 별도의 getter/setter method 가 존재 getter method 는 매개변수가 존재하지 않는다 setter method 는 반드시 하나 이상의 매개변수가 존재한다 construct 는 매개변수가 존재하지 않는다 디폴트 생성자 javaBean 은 파라미터가 없는 default construct 를 갖고 있어야 한다. 프레임워크에서 리플렉션을 이용해 오브젝트를 생성하기 때문에 필요하다 Reflection API란? 마법처럼 클래스의..

디프만을 알게되다 디프만은 14주간 디자이너와 프로그래머가 서비스 기획부터 런칭까지 참여하는 IT동아리이다. 우연히 2월달부터 모집한다는 소식을 알게되었고, 매일매일 새로고침을 하며 지원 날짜를 기다렸다. 혹시 내가 모르는 사이에 지원이 마감 됐는지 궁금해서 인스타그램 DM 으로 문의까지 하였다. 우연히도 그 날 저녁 갑자기 디엠이 와서 확인을 해보니! 모집 일정 공지가 올라왔다는 소식을 알려주셨다. 지원서 작성 정말 열심히 작성한 기억이 있다. 혹시나 놓친 부분이 있지 않을까 마감일까지 지원서를 지속적으로 확인하며 문맥이 이상하지는 않은지, 주제에 맞지 않는 내용을 작성하였는지 검토하였다. 최대한 개발 경험을 표현하려고 노력하였고 과장되지 않은 솔직한 경험을 글로 적기란 쉽지 않았다. 서류 지원 결과 ..
사이드 프로젝트 기획은 어느정도 구색을 갖추었고, 기획을 토대로 기술적으로 구현이 가능한지 검토가 필요하다. 우선 필요한 기능을 먼저 나열해보았다. 기본 기능 (우선 순위) 인스타그램 데이터 수집 수집된 데이터를 기반으로 가공 가공된 정보를 사용자에게 전달 추가 기능 (후 순위) 회원가입 & 로그인 사용자마다 내가 응모 했던 매장을 체크할 수 있는 기능 커뮤니티 게시판 인스타그램 데이터 수집은 셀레니움 라이브러리를 사용할 생각이다. 한가지 문제점이 있다면 인스타그램에서 API를 제공해주지 않아 실시간으로 등록되는 게시글에 대한 수집 여부이다. 실시간 웹 애플리케이션 개발이 부족하여 조금 더 검토를 해야겠지만 리소스 낭비가 발생하더라도 정확한 정보를 사용자에게 전달해주는게 목적인만큼 주기적으로 업데이트 요..

프록시 프록시는 대리(행위)나 대리권, 대리 투표, 대리인 등을 뜻하는 단어입니다. 이 개념을 클라이언트와 서버 개념에 도입한다면 클라이언트가 요청한 결과를 서버에 직접 요청하는 것이 아니라 어떤 대리자를 통해서 간접적으로 서버에 요청할 수 있습니다. 예를 들어서 내가 직접 마트에서 장을 볼 수도 있지만, 누군가에게 대신 장을 봐달라고 부탁할 수도 있습니다. 여기서 대신 장을 보는 대리자를 영어로 Proxy 라고 합니다. 프록시의 역할 대체 가능 객체에서 프록시가 되려면, 클라이언트는 서버에게 요청을 한 것인지, 프록시에게 요청을 한 것인지 조차 몰라야 합니다. 쉽게 이야기하면 서버와 프록시는 같은 인터페이스를 사용해야 합니다. 그리고 클라이언트가 사용하는 서비스 객체를 프록시 객체로 변경해도 클라이언트..

Jenkins 를 이용하여 배포 자동화를 구축하였지만 매번 Build 에 성공하였는지 매번 상태를 확인해야하는 번거로움이 있습니다. 이번 포스팅에서는 Jenkins 와 Slack 을 연동하여 알람을 받는 방법을 구축해보겠습니다. Slack 채널 생성 Jenkins 의 Build 상태를 알림받을 채널을 추가합니다. 글쓴이는 jenkins 라는 채널을 추가하였습니다. Jenkins CI App 설치 Slack 하단의 Apps -> Add apps 탭에서 Jenkins CI 를 검색하고 Add 를 클릭합니다. Add to Slack 을 클릭합니다. Jenkins 의 알림을 수신받을 채널을 선택합니다. Step3 으로 이동하여 Team Subdomain 와 Integration Token Credential I..

Publish over SSH 플러그인이 2022년 1월 12일 부로 젠킨스 보안 정책으로 인해 배포가 중단되었습니다. https://www.jenkins.io/security/advisory/2022-01-12/ Publish Over SSH plugin 을 사용하면 원격 서버에 SSH를 통한 배포를 할 수 있습니다. SSH란? SSH란 Secure Shell Protocol 의 약자로 네트워크 상의 다른 컴퓨터에 로그인 하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용 프로그램 또는 그 프로토콜은 가리킵니다. 1. Publish Over SSH 설치 2022년 2월 현재 젠킨스 플러그인 관리를 통한 설치가 불가능 하기 때문에 직접 .hpi 확장자를 다운로드 ..

Jenkins와 Github 연동은 Github에서 제공하는 Github Webhook 을 이용하도록 하겠습니다. Github Webhook 이란? Github Webhook은 특정 이벤트가 발생했을 때 등록한 URL로 HTTP POST Payload를 보내 이슈 트래커를 업데이트하거나, CI Build를 트리거 할 수 있습니다. 또한 Github Webhook는 역방향 API라고 불리는데 일반적인 API는 요청을 하면 정보를 제공하지만, Github Webhook은 등록한 URL로 정보를 보내줍니다. 이번 포스팅에서는 Repository의 특정 Branch에 Push Event가 발생하면 Github Webhook을 통해 Jenkins Server에 빌드를 유발하도록 구축해보겠습니다. 1. GitHub..

기존 사내에서는 PuTTY 와 FileZilla 를 사용하여 수동 배포를 진행하고 있습니다. 요구사항의 변경과 충분한 테스트 검증이 되지 않은 기능이 반영되어 사이드 이펙트를 발생하는 일이 잦았고, 최근 테스트 서버까지 추가되면서 배포의 비용(시간)이 많이 소모되었습니다. 여러가지 CI 도구들이 있지만 무료 및 오픈소스이면서, 레퍼런스가 많은 Jenkins 를 채택하였습니다. 이 포스팅은 Jenkins 구축 환경에 Docker 가 설치되어 있다는 가정하에 작성되었습니다. 구축 환경 CentOS 7 Spring Boot Gradle Github Docker 로컬 환경에서 Jenkins를 구축하실 경우 로컬 네트워크 터널을 열기 위한 ngrok이 필요합니다 1. Jenkins 계정 생성 root 계정으로 접..

변하는 것과 변하지 않는 것을 분리 Template Method Pattern 은 이런 문제들을 해결하는 디자인 패턴입니다. 토비의 스프링에서는 템플릿 메소드 패턴을 다음과 같이 정의합니다. 상속을 통해 슈퍼 클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법. 변하지 않는 기능은 슈퍼 클래스에 만들어두고 자주 변경되며 확장할 기능은 서브 클래스에서 만들도록 한다. 템플릿 메소드 패턴 예제 템플릿 메소드 패턴를 쉽게 이해하기 위하여 간단한 예제로 살펴보겠습니다. 민수와 수민이는 등교와 하교를 같이 하는 대학교 동기입니다. 민수는 알고리즘 수업을 듣고 수민이는 자료구조 수업을 듣습니다.민수와 수민이의 하루 학교 일과를 나누어 보겠습니다. 민수 등교 알고리즘 수업 하교 수민 등교 자료구조 수업 하교 템플..
개요 최근 몇 년 동안 패션업계에서 가장 핫이슈를 선정한다면 스니커즈 씬 일 것이다. 국내 한정판 스니커즈 리셀 플랫폼에 대기업까지 뛰어들어 사용자 점유율을 위해 일 년 넘게 사용자들에게 수수료를 받지 않고 무료로 제공하고 있다. 글쓴이는 고등학교 때 처음 사고 싶었던 신발 나이키 루나 글라이드 를 시작으로 지금까지 푹 빠져있다. 사이드 프로젝트 주제를 선정하면서 여러 가지를 구현해보고 싶었지만, 누구보다 내가 많은 경험과 정보가 있으며 도메인 지식이 뛰어나다고 생각하는 신발 을 주제로 선정하였다. 신발 하면 떠오르는 단어 바로 한정판 신발이다. 위에서 언급했듯이 리셀 플랫폼은 남녀노소 할 것 없이 누구나 쉽게 한정판 신발을 접할 수 있으며 간편하게 구매할 수 있다. 한정판 신발을 얻기 위해서는 응모에 ..