✨ 경험·생각·독서 7

텔레그램 봇 만들기

전체적인 흐름 1. BotFather에서 봇을 만든다. 2. 채널 or 그룹을 생성해서 내가 만든 봇을 관리자로 추가한다. 3. 메시지를 보내 chat_id값을 알아내면 이것을 이용해 다른 곳에서도 메시지를 보낼 수 있다. 텔래그램 검색에 BotFather을 입력해서 공식 계정을 클릭한다. 시작 버튼을 누른다. 시작 버튼을 누르면 자동으로 /start 명령어가 쳐지면서 매뉴얼이 나온다. /newbot -> 사용 할 봇 이름 -> 봇 이름 뒤에 _bot 붙여서 한 번 더 입력하면 내가 만든 봇의 고유 token을 준다. ★이 token은 아래에서 사용한다.★ 텔레그램 검색으로 가서 '@봇 이름'을 검색하면 방금 만든 봇이 나온다. 내가 만든 봇을 사용하기 위해 그룹 혹은 채널을 생성한다. 그룹과 채널의 차..

mysql 파티션 연장 이슈

디비에 무슨 일이 생겼다면 가장 먼저 확인하러 달려가는 나는 업무 중에 여러 테이블의 파티션 기간이 2021년까지인 것을 확인했고 앞으로 한동안은 추가할 일 없도록 넉넉하게 파티션 기간을 늘리기 위해 한 달 텀으로 기존에 있던 파티션에 새로운 기간을 추가를 하려고 했다. 2021 파티션 기간 뒤에 2022 파티션을 연결하는 연장 방식으로. 그래서 파티션 추가를 검색하니 주로 파티션이 하나도 없는 퓨어한 테이블에 파티션 추가하는 쿼리가 나왔는데 그 방법은 MAXVALUE 가 있는 테이블에는 적용할 수 없는 쿼리였다. 어떻게 할까 고민하다가 MAXVALUE 파티션을 삭제해봤는데 (MAXVALUE 파티션에는 아무 데이터도 없었다.) 삭제가 매우 간단히 되었고, 그 뒤에 연장하니까 가능했다. MAXVALUE 가..

자바 코드 ? cannot be converted to boolean 에러

여느 때와 다르지 않게 풀리퀘스트 머지 후 젠킨스로 파일이 생성되는 중 생각지 못한 에러에 당황했다. 주요 에러 내용은 이러했다. Compilation failure incompatible types: capture#1 of ? cannot be converted to boolean 나는 테스트코드부터 만들고 이상이 없어서 본 개발까지 완료했고, 데이터까지 나왔는데 왜 에러가 떴을까? 개발하는 과정에서 json을 map으로 받는 곳을 개발할 때 와일드카드를 사용해서 개발했는데 이부분에서 ?는 boolean으로 바로 받는 부분에서 컴파일 실패가 뜬것 같다. if 문을 통해서 받아온 값이 true이면 실행시키려고 Map map = (Map) exampleData; ... if ((boolean) data.g..

나를 위한, 내가 사용할 코드를 만들고 싶다.

벌써 개발자라는 타이틀을 걸고 일한 지 2년이나 되었다. 그동안의 시간을 되돌아보면 회사에서 배운 것이 참 많다. 자바 개발만 하게 될 줄 알았던 내가 html select도 하고, 한 번도 써 본 적 없는 Node.js로 크롤링 서비스도 개발하고 클라우드에 배포한 엔진 메모리 튜닝도 하고 있다. 하지만 뭔가 개발자라고 말하기엔 마음 한구석이 찜찜한 게 있었다. 생각해보니 회사에 기여하기 위해 배우고 부딪혀본 일들은 많지만 나를 위한 개발은 한번도 하지 못했다. 왜 이런 생각이 갑자기 들었다면 요즘 즐겨하는 게임인 로스트아크에서 본인이 지금까지 얼마나 캐시 충전을 했는지 알 수 있는 코드가 공유되고 있다는 것을 친구를 통해 알게 되었다. 보면서 코드 작성자는 개발자임과 동시에 본인이 원하는 코드도 작성할..

[이펙티브자바] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

*정적 유틸리티 클래스: 맞춤법 검사기가 '사전(dictionary )'에 의존하는 것 같이 하나에 의존하는 클래스 정적 유틸리티를 잘못 사용한 예 - 유연하지 않고 테스트하기 어렵다. public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() {} // 객체 생성 방지 public static boolean isValid(String word) { ... } public static List suggestions(String type) { ... } } 위 코드에선 사전을 하나만 사용하고 있다. 맞춤법 검사를 할 때 어떤 언어가 들어올지 모르는데 하나의 사전을 정해놓고 사용하는 것이 아쉽..

[오브젝트] 04 설계 품질과 트레이드오프 : 캡슐화

[오브젝트] 04 설계 품질과 트레이드오프 요약과 나의 생각 데이터 중심 설계와 책임 중심 설계의 장단점을 비교하기 위해 캡슐화, 응집도, 결합도를 사용. #캡슐화 상태와 행동을 하나의 객체 안에 모으는 이유는 객체의 내부 구현을 외부로부터 감추기 위해서. 변경될 가능성이 높은 부분을 구현이라 하고 상대적으로 안정적인 부분을 인터페이스라고 부른다. 객체를 설계하기 위한 가장 기본적인 아이디어는 변경의 정도에 따라 구현과 인터페이스를 분리하고 외부에서는 인터페이스에만 의존하도록 관계를 조절하는 것이다. 캡슐화는 외부에서 알 필요가 없는 부분을 감춤으로써 대상을 단순화 하는 추상화의 한 종류다. 캡슐화가 중요한 이유는 불안정한 부분과 안정적인 부분을 분리해서 변경의 영향을 통제할 수 있기 때문이다. 정리하면..