반응형

전체 글 423

애드센스 '판매자 정보를 sellers.json 파일에 게시' 간단한 해결 방법

몇 달의 시도 끝에 드디어 승인된 구글 애드센스, 승인을 확인하자마자 사이트에 들어와보니 '판매자 정보를 Google Sellers.json 파일에 게시하시기 바랍니다. 현재 공개 상태를 검토하려면 계정 설정 페이지를 방문하세요.' 라는 경고 문구가 있었습니다. 자세한 내용 전에 아주 간단한 해결 방법부터 소개해드리겠습니다. 해결 방법은 애드센스 -> 계정 정보 -> 판매자 정보 공개 상태를 공개로 전환하는 것이 끝입니다. 자세히 알아보기를 통한 내용으로는 Sellers.json은 광고가 노출됨에 있어 도움이 되는 IAB Tech Lab 표준으로, 게시자는 계정 유형에 따라 해당 json 파일을 통해 개인 또는 업체 이름을 공유할 수 있고, 이를 통해 광고주는 게시자의 신원을 확인할 수 있습니다. 정보를..

IT Info 2021.11.15

네이버 클라우드 플랫폼 문자 발송 API 사용하기 (Spring Boot)

Simple & Easy Notification Service SMS, PUSH, 카카오 알림톡 등을 사용할 수 있는 서비스입니다. SMS의 경우 건당 9원, PUSH의 경우 건당 0.02원, 알림톡의 경우 건당 7.5원 등 비용이 발생합니다. (자세한 비용은 네이버 클라우드 플랫폼에서 확인 가능합니다.) * 월 무료 구간 (SMS 50건, PUSH 2000건)이 있기 때문에 토이프로젝트를 하며 사용해봤습니다. 문자 발송 API를 사용하기 위해 먼저 서비스에 가입을 해야합니다. 이후 Simple & Easy Notification Serive에서 프로젝트를 생성합니다. SMS API - SENS api.ncloud-docs.com 플랫폼에서 제공하는 API 사용 가이드입니다. 실제 예시 코드와 필수, 옵..

JPA @CreatedDate @LastModifiedDate 생성 시간, 수정 시간이 저장되는 원리

@CreatedDate, @LastModifiedDate 데이터를 저장할 때 '생성된 시간 정보'와 '수정된 시간 정보'는 여러모로 많이 사용되고 또 중요합니다. JPA를 사용하면서 @CreatedDate, @LastModifiedDate를 사용하여 생성된 시간 정보, 수정된 시간 정보를 자동으로 저장할 수 있는데요. 오늘 작업 중에 createAt, updatedAt 값이 계속 null로 들어가던 문제를 해결하면서 동작 원리에 대해 조금 더 살펴본 내용을 정리합니다. (null이 들어간 원인은 main method가 실행되는 Application class에 @EnableJpaAuditing 어노테이션을 적용하지 않아서였습니다.) * 내용 중 자주 등장할 'audit' 는 심사, 감사하다는 뜻입니다. ..

상수와 리터럴 (constant & literal) 정리

해당하는 내용은 'Java의 정석 - 남궁 성' 도서의 내용을 참고하여 정리한 것입니다. 상수 (constant) final int MAX_VALUE = 100; // 상수 선언과 동시에 초기화 상수(constant)는 변수와 마찬가지로 '값을 저장할 수 있는 공간' 이지만 변수와 달리 한 번 값을 저장하면 다른 값으로 변경할 수 없다는 특징이 있습니다. 사용 방법은 변수의 타입 앞에 'final' 키워드를 붙여서 사용합니다. * JDK 1.6 이전에는 상수 선언과 동시에 초기화가 필수였으나, 1.6 이후부터는 선언과 동시에 초기화하지 않아도 됩니다. 하지만 상수는 선언과 동시에 초기화하는 것이 좋습니다. 리터럴 (literal) int year = 2021; // year : 변수, 2021 : 리터럴..

Programming/Java 2021.10.27

카카오톡 뷰 채널에 티스토리 연동하기

'카카오톡 뷰 채널 만들고 티스토리 연동하는 방법' 얼마 전부터 카카오톡에 뷰라는 오픈형 큐레이터 기능이 생기고, 뷰를 통해 블로그나 티스토리에 있는 글을 연동하여 노출할 수 있게 되었습니다. 이렇게 연동된 글을 통해 블로그 방문자 수가 급증하는 등, 카카오 뷰는 블로그나 티스토리, 카페 등에 새로운 홍보를 할 수 있는 수단으로 떠오르고 있습니다. 기존에 블로그나 티스토리에 꾸준하게 쌓인 글이 있다면 카카오 뷰에 다음과 같은 채널 보드를 만드는 것은 어렵지 않습니다. 먼저 카카오톡에서 가운데 눈 모양의 아이콘을 클릭하고, 우측 상단에 설정 아이콘을 통해 오른쪽 이미지에 보이는 '내 활동 관리'로 들어갑니다. 보드를 만들기 위해서는 먼저 채널을 만들어야 하는데요. 채널을 만들기 위해서는 '카카오 비즈니스 ..

etc 2021.10.26

(mac) Port was already in use. 포트 찾아서 종료시키는 방법

Web server failed to start. Port was already in use. 개발 중 어플리케이션을 실행한 포트에 이미 다른 어플리케이션이 동작하고 있을 경우 발생하는 현상입니다. 해결 방법은 해당하는 포트에서 동작 중인 프로세스를 식별하여 중지하거나, 이 응용 프로그램을 다른 포트에서 실행하는 것인데요. 아래는 macOS Terminal에서 포트를 찾고, 중지시키는 방법입니다. lsof -i tcp:8081 특정 포트를 찾고 싶을 때 사용하는 명령어입니다. 여기서 8081이 port 번호입니다. 해당 명령어를 통해 프로세스가 실행되고 있는 PID를 알아냅니다. * lsof는 list open files의 약자로 시스템에서 열려있는 모든 파일과 해당 파일들을 열고 있는 프로세스들의 목록..

Programming/MacOS 2021.10.26

프로그래밍 시간 표현 단위 Unix Time ( = Epoch Time ) 이란

프로그래밍을 하게 되면 '1635083262' 와 같은 형식의 숫자만으로 시간을 표현하는 경우가 있습니다. 이 같은 표현 방식을 Unix Time 또는 Epoch Time 이라고 하는데요. Unix Time, Epoch Time은 부르는 이름만 다를 뿐 같은 것을 의미합니다. (POSIX Time 이라고도 합니다.) 이것은 시간을 나타내는 방식으로, '1970년 1월 1일 00:00:00 협정 세계시(UTC)' 부터의 경과 시간을 초로 환산하여 정수로 나타낸 것입니다. * 유닉스 시간에서 윤초(Leap Second)는 반영하지 않습니다. 이 시간 표현 방식은 유닉스 계열의 운영체제나 여러 다른 운영 체제, 파일 형식들에서 사용되며, 어떤 일이 발생했을 때 무엇이 먼저 발생하고, 나중에 발생했는지를 판단할..

Programming/Web 2021.10.24

스프링부트 REST API Excel download 방법

Spring boot REST API Excel download 기본적인 방법 (feat. apache poi) 스프링 부트 REST에서 poi 라이브러리를 사용하여 엑셀을 다운로드하는 방법입니다. poi 라이브러리는 아파치 소프트웨어 재단에서 만들었고, microsoft office 파일 포맷을 자바 언어로 읽고, 쓰는 기능을 제공하는 라이브러리입니다. 작업 환경은 아래와 같습니다. 'org.springframework.boot' version '2.4.10-SNAPSHOT' java 1.8 Gradle // https://mvnrepository.com/artifact/org.apache.poi/poi implementation group: 'org.apache.poi', name: 'poi', ve..

날짜와 시간을 다루는 LocalDate, LocalTime, LocalDateTime (java.time 패키지) 기본 개념

Java 날짜와 시간을 나타내는 Calendar class [Java] 날짜와 시간을 나타내는 Calender class 날짜와 시간은 어떤 프로젝트에서든 뺄 수 없는 데이터입니다. 개발을 하며 앞으로 계속 사용될 날짜와 시간에 대해 정리하고 싶어서 공부한 내용을 정 wildeveloperetrain.tistory.com java.time 패키지 java.time 패키지는 이전 포스팅에서 정리한 jdk1.0에서 나온 Date, jdk1.1에서 나온 Calendar의 단점을 해소하기 위해 jdk1.8부터 사용되었습니다. java.time 패키지 아래에는 4가지 하위 패키지가 존재하는데요. java.time : 날짜와 시간을 다루는데 필요한 핵심 클래스들을 제공 java.time.chrono : 표준(ISO..

Programming/Java 2021.10.19

Java 날짜와 시간을 나타내는 Calendar class

[Java] 날짜와 시간을 나타내는 Calender class 날짜와 시간은 어떤 프로젝트에서든 뺄 수 없는 데이터입니다. 개발을 하며 앞으로 계속 사용될 날짜와 시간에 대해 정리하고 싶어서 공부한 내용을 정리합니다. 'Date class'는 JDK 1.0부터 제공된 클래스로 제공되는 기능이 부족하여 JDK1.1부터 'Calendar class'가 나오게 되었습니다. 현재는 기존 클래스들의 단점을 개선한 JDK 1.8부터 나온 java.time 패키지의 'LocalDate', 'LocalTime', 'LocalDateTime'가 많이 사용되는데요. Date와 Calendar 역시 아직까지 사용되는 부분이 있기 때문에 간단하게 먼저 정리하려고 합니다. Calendar cal = new Calendar();..

Programming/Java 2021.10.18

@NotNull @NotEmpty @NotBlank 차이점 한번은 알고 가자

@NotNull @NotEmpty @NotBlank javax.validation.constraints package에 포함된 기능으로 api에서 값을 입력받을 때 validation 체크를 위해 사용되는 어노테이션입니다. 많이 사용하게 되는 어노테이션으로 한 번만 차이를 확실히 알고 나면 용도에 맞게 잘 사용할 수 있습니다. @NotNull 먼저 NotNull 입니다. The annotated element must not be null. Accepts any type. NotNull은 말 그대로 null 값만 허용하지 않습니다. 그렇기 때문에 "", " " 가 입력되었을 경우는 허용하게 됩니다. @NotEmpty 다음으로 NotEmpty 입니다. The annotatd element must not ..

RestTemplate 4xx, 5xx Code 처리하는 방법 (HttpClientException)

RestTemplate이란 간략하게 spring framework 3.0부터 지원되는 http 통신에 사용되는 템플릿입니다. RESTful 형식을 따르며 json, xml 형식의 데이터를 쉽게 받을 수 있습니다. * RestTemplate에 대한 자세한 내용은 다루지 않고 해당 에러에 관한 내용만 다루는 포스팅입니다. { "state": 400, "data": [], "result": "fail", "message": "QR 코드의 유효기간이 지났습니다.", "error": [] } RestTemplate의 문제점 중 하나는 위 예시의 json 데이터 처럼 4xx, 5xx의 응답 코드를 받았을 때 Exception을 발생시킨다는 것인데요. 통신을 하다보면 200 상태의 success 뿐만 아니라 4xx,..

Connection is not available, request timed out after 10000ms. 에러의 원인은

프로젝트 중 발생한 에러입니다. 해당 에러는 요청 시 바로 발생하지 않아서 모르고 있다가 개발서버에 올려 테스트하던 중 발생을 확인하고 조치하였습니다. 커넥션 풀과 관련된 HikariCP Dead lock 이라고 불리는 에러였으며, 해결하기 위해 자료를 찾아보며 커넥션 풀이 프로그램에서 중요하고, 또 그렇기 때문에 자세하게 공부하여 잘 적용해야 한다고 느꼈습니다. * 해당 포스팅의 내용은 커넥션 풀에 대해 이해도가 많이 부족하며, 에러의 원인과 해결에 대한 방법만 찾은 포스팅입니다. (해결 방법은 포스팅 하단에 있으며 미리 원인을 말씀드리면 Querydsl에서 transform을 사용하면서 DB connection leak이 걸렸습니다. querydsl에서 transform 사용 시 트랜잭션 내부에서 실..

Programming/Error 2021.10.02

SSLException: Unsupported or unrecognized SSL message

javax.net.ssl.SSLException: Unsupported or unrecognized SSL message 두 개의 REST API를 가지고 서로 요청을 주고받기 위해 RestTemplate을 사용하던 중 발생한 에러입니다. 초기 개발단계에서 하나의 REST API는 http:localhost:8081 으로 가동하였고, 다른 하나의 API는 http:localhost:8083으로 가동하여 restTemplate을 통해 요청을 보냈습니다. public ResponseEntity qrScan(QrScan qrScan) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); Http..

Programming/Error 2021.09.29
반응형