분류 전체보기 7

[프로그램] 추천 lightshot - 원클릭 스크린샷

다운로드 https://app.prntscr.com/en/index.html Lightshot — screenshot tool for Mac & Win app.prntscr.com 설치 과정은 단순하니 생략. 설치가 완료되면 알아서 자동실행된다 사용법 사용법은 간단하다 Print Screen 단축키 누르면 바탕화면의 명도가 낮아지면서 실행 상태가 됨 그 상태로 영역을 지정(마우스 드래그)하고 Ctrl+C 하면 클립보드에 복사된다 그림판에 Ctrl+V 하고 마저 더 수정할 수도 있고 카톡에 바로 보낼 수도 있다 추가로 전체화면 캡처는 Print Screen -> Ctrl+A -> Ctrl+C 하면된다.

유틸(Util) 2022.10.06

메일발송 배치(Batch) 프로그램

모사이트 이용 고객을 대상으로 휴면 예정 회원이나 탈퇴 회원에게 단체로 메일을 발송하는 배치 프로그램을 만들어봤다 개발환경과 사용언어는 다음과 같다. 개발환경 사용 언어 및 도구 통합개발환경 인텔리제이 언어 및 라이브러리 자바, postgresql, mail, log4j 등 DBMS Postgresql 주 기능 소개 및 로직 설명 1. SQL을 이용하여 휴면되기 직전의 회원들을 1차로 거르고, 메일발송 대상자들을 limit 걸고 메일 발송하는 방식이다 한번에 많은 양을 보내면 과부하 걸릴 것으로 예상되기 때문에 limit을 걸었다 (오라클의 경우 limit 함수가 없어서 다른 대안으로 해야할거임) 2. 메일 발송이 완료된 회원들은 메일 대상에서 빼야한다 (DB 컬럼에 플래그 컬럼을 두고 대상자인지 아닌지..

N사 뉴스 스크래핑 - 유지보수(411 에러)

갑자기 스크랩이 안 되면서 HTTP 411 에러가 발생했다 스크랩은 잘 되다가도 어느날 실행해보면 4xx 에러가 자주 발생하는데, 이유는 보통 추가된 요청 데이터이다 무슨 말인지 싶겠지만 말 그대로 HTTP Request에 body부분 데이터가 추가된 것이다 우선 의심가는 부분에 중단점을 걸고 디버깅을 시도했다 200(정상)을 받아야 했으나 411 응답을 받은 것을 알 수 있다 보통 4xx번대 에러는 Client단에서의 요청 에러이기 때문에 요청에 문제가 있는지부터 확인하면 된다 그럼 상태코드 411이 무엇인지 알 필요가 있다 그렇다면 어떻게 알 수 있냐? 에러에 관련해서 검색하면 되죠 다 나오는데. 간단히 말하면 콘텐츠 길이(Content-Length) 헤더없이 요청을 보냈으니 서버는 수락하지 않는다는..

N사 뉴스 스크래핑

N사의 뉴스를 스크랩하여 원하는 결과를 추출해봤다 개발환경과 사용언어는 다음과 같다. 개발환경 사용 언어 및 도구 통합개발환경 인텔리제이 프레임워크 스프링부트 언어 및 라이브러리 자바, ojdbc8, json, selenium, thymeleaf, js, jquery 등 DBMS X 주 기능 소개 및 로직 설명 1. 입력 키워드를 통해 결과를 추출(콤마를 구분으로 여러단어 검색도 가능, 현재 키워드 검색 기준은 제목으로 세팅함) 2. 카테고리를 전체 또는 각 분야별로 설정해서 특정 분야만 스크랩도 가능 3. 제목 클릭 시 해당하는 뉴스 본문으로 사이트 이동 4. 게시일자를 오름차순, 내림차순 정렬 5. 파일 다운로드 : 결과물을 확장자 html로 내려받는다 (그냥 body 긁어오는거라 별 거 없음) 요즘..

얕은 복사(Shallow copy) vs 깊은 복사(Deep copy)

얕은 복사는 ‘=’ 연산자로 수행하는데 주소를 복사하기 때문에 한쪽에서 수정이 발생하면 다른 쪽도 동일하게 수정된다 즉, 복사된 것과 복사본이 동시에 변경된다. 깊은 복사는 얕은 복사를 해결하기 위한 방법으로 주소값을 참조하는게 아닌 새로운 메모리 공간에 값을 복사된다 즉, 복사된 것과 복사본이 서로 다른 메모리 공간을 차지하고 있다 clone() 메서드를 써도 되고, 배열의 경우 for문을 돌려주면 된다.

equals() 메서드와 == 연산자의 차이

equals()는 메서드이고 == 은 비교 연산자이다 equals()는 값을 비교하지만 == 연산자는 주소값을 비교한다 추가로, 리터럴(“”)로 초기화 하는 경우 constant pool에 리터럴 String 인스턴스를 생성해주기 때문에(주소값을 가짐) 한번 생성한 리터럴 인스턴스로 공유함 eqauls()와 == 의 결과 비교 String a = "aaa"; String b = a; String b2 = "aaa"; String c = new String("aaa"); System.out.println(a==b ? "true" : "false"); // true System.out.println(a==b2 ? "true" : "false"); // true System.out.println(a.equal..

공변 반환타입 (covariant return type)

원래 자바에서 오버라이딩의 성립 조건은 리턴타입, 매개변수, 메서드 이름 등 그대로 사용해야 하는데 공변 반환타입 덕분에 리턴 타입을 바꿔 쓸 수 있게 됐다. JDK1.5부터 오버라이딩할 때 부모 메소드의 반환타입을 자식 클래스의 타입으로 변경 가능하다. Object 클래스의 Clone()을 오버라이딩 public Point clone() { //반환타입을 Object에서 Point 변경 Object obj = null; try { obj = super.eat(); } catch(Exception e) {} return (Point)obj; //Point 타입으로 형변환 공변 반환타입을 사용하면 조상의 타입이 아닌, 실제로 반환되는 자손 객체의 타입으로 반환할 수 있어 번거로운 형변환이 줄었다. Poin..