study19 [Spring Boot] 전화번호 인증 with NCP SMS API & Redis 0. Naver SMS API 선택 이유 SMS 서비스에 ‘Cool SMS’를 많이 사용하지만, Nava SMS API의 경우 매월 50건의 무료메세지 발송 및 Naver Cloud Platform 첫 가입 시 10만 크레딧을 제공한다고 하여 선택하게 됐다. (할인 크레딧 신청) 해당 크레딧은 네이버 클라우드 플랫폼에서 제공하는 다른 솔루션에도 사용할 수 있으니 유용하게 쓸 수 있다. (단, 실제로 결제가 가능한 카드를 연동해야 한다.) 1. NCP 세팅 1.1. SMS 프로젝트 생성 콘솔 > Services > ‘Simple & Easy Notification Service’ 선택 프로젝트 생성하기 1.2. 발신번호 등록 SMS 메시지를 발송하기 위해서는 발신번호를 등록해야한다. Project > 발신.. 2023. 8. 3. [Spring Boot] AWS S3 이미지 업로드 1. AWS S3 세팅 1.1. 버킷 생성 1. AWS Console > S3 > 버킷 > 버킷 만들기 2. 버킷 이름 입력 3. ‘모든 퍼블릭 액세스 차단’ 선택 해제 후 모든 퍼블릭 액세스 차단에 대한 안내 문구 박스 체크 4. 버킷 만들기 선택 1.2. 버킷 정책 등록 1. Amazon S3 > 버킷 > 버킷 이름 선택 2. 권한 > 버킷 정책 > 편집 아래 내용 입력 후 저장 { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1405592139000", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::버킷이름/*", "arn:aws:s3:::버킷이름.. 2023. 8. 3. 가비아(gabia) DNS 등록하기 1. 가비아 홈페이지 접속 후 ‘My가비아’로 이동 2. 이용 중인 서비스에서 ‘도메인’ 선택 3. ‘DNS로 관리툴’ 선택 4. 등록하려는 도메인 ‘설정’ 선택 5. DNS 설정에서 ‘레코드 수정’ 선택 6. ‘레코드 추가’ 선택 및 호스트와 IP 주소 입력 후 ‘확인’ > ‘저장’ 선택 7. 일정 시간(최대 하루)이 지난 후 도메인 접속 https://www.gabia.com 웹을 넘어 클라우드로. 가비아 그룹웨어부터 멀티클라우드까지 하나의 클라우드 허브 www.gabia.com 2023. 7. 25. [GitHub] GitHub Issue & Pull Request Template 사용하기 GitHub에서 Issue와 Pull Request를 이용해 프로젝트를 진행하던 중 각 양식을 반복적으로 복사&붙여넣기 해야하는 일이 번거롭게 느껴졌다. 그래서 template을 이용해 양식을 사용해 본문 작성을 자동화했다. 프로젝트 루트 디렉토리에 .github 폴더 생성 프로젝트의 루트 디렉토리에 '.github' 폴더를 생성한다. .github 폴더 아래 각 템플릿 파일 생성 .github 폴더 아래에 'issue_template.md'와 'pull_request_template.md'를 생성해주고, 각 파일에 본문을 채워준다. 파일 생성 후 add → commit → push를 하면 아래와 같이 새로운 Issue & Pull Request 생성 시 본문이 채워진다. Issue Template에 대.. 2023. 7. 11. [Spring WebSocket] Spring WebSocket STOMP 적용 1. STOMP STOMP(Simple Text Oriented Messaging Protocol)는 메시징 전송을 효율적으로 하기 위한 프로토콜로, PUB/SUB 기반으로 동작한다. WebSocket만 사용해서 구현하면 해당 메시지가 어떤 요청인지, 어떤 포맷인지, 메시지 통신 과정을 어떻게 처리해야 하는지 정해져 있지 않아 일일이 구현해야 한다. STOMP를 서브 프로토콜로 사용하면 클라이언트와 서버가 서로 통신하는 데 있어 메시지의 형식, 유형, 내용 등을 정의해준다. 따라서 메시지를 송신, 수신에 대한 처리를 명확하게 정의할 수 있으며, WebSocketHandler를 직접 구현할 필요없이, @MessageMapping과 같은 어노테이션을 사용해서 메시지 발행 시 엔드포인트를 별도로 분리해서 관리.. 2023. 6. 19. [Spring REST Docs] Spring REST Docs 적용기 0. 들어가며 SSAFY에서 첫 번째 프로젝트를 진행할 당시 API 명세서를 노션에 작성하였다. 프로젝트 관리를 노션으로 했기 때문에 접근이 편하고, 가독성이 좋다는 장점이 있었지만, 개발을 진행하며 API가 수정되었는데 API 명세서에 반영되지 않아 프론트엔드 팀원에게 소환되는 일이 종종 발생했었다. 이러한 문제를 해결하기 위해 API 명세서 작성을 자동화해야겠다고 생각했고, 두 번째 프로젝트에서 바로 적용했다. 비교적 도입이 쉬운 Swagger가 아닌 Spring REST Docs를 채택한 이유는 세 가지다. 이전에 써봤다. Spring 스터디를 진행하며 Spring REST Docs를 완벽하게 이해하고 사용한 것은 아니지만, 어찌저찌 써본 경험이 이번 프로젝트에서는 더 잘 쓸 수 있을 것이라는 용기.. 2023. 5. 31. [Java] String Pool 0. String 객체 Java에서 문자열을 표현하는 String은 불변객체다. String name = "jeongyun"; name += "eo"; System.out.println(name); // jeongyuneo 위 코드에서 name에 문자열을 더한다고 해서 문자열의 값이 바뀌는 것이 아니라, 새로운 객체를 만들어 그 참조값을 참조하게 된다. 만약 같은 값을 갖는 문자열을 여러 번 선언한다면, Heap 영역에 매번 새로운 객체를 생성하게 될 것이다. 이는 메모리 낭비로 이어진다. 따라서 Java는 문자열 객체를 캐싱(caching)한다. 💡 캐싱(caching) - 데이터를 미리 복사해 임시 저장해놓는 것 - 데이터 접근 시간을 줄일 수 있음 1. String Pool Java의 Heap 영역.. 2023. 4. 18. [Hibernate] 하이버네이트 명명 전략(Hibernate Naming Strategy) 0. 들어가며 프로젝트를 시작하기에 앞서 다른 팀원들이 이전에 진행한 프로젝트 코드를 리뷰했는데, Java에서 사용하는 카멜 케이스를 DB에 스네이크 케이스로 저장하기 위해 @Column 어노테이션을 써서 일일이 네이밍을 지정해준 것을 봤다. 네이밍을 바꾸는 게 아닌 스네이크 케이스로만 바꾸는 용도라면 어노테이션을 써서 이름을 지정해주지 않아도 스네이크 케이스로 바꿔준다고 해당 팀원에게 알려주었는데 알려주면서도 JPA가 바꿔주는건지, 하이버네이트가 바꿔주는 건지 헷갈려서 찾아보았다. 1. 하이버네이트(Hibernate)란? 하이버네이트(Hibernate)는 자바 언어를 위한 ORM(Oriented Relational Mapping) 프레임워크다. JPA의 구현체로, JPA 인터페이스를 구현하며 내부적으로.. 2022. 9. 22. [Spring] @Bean vs @Component 0. 들어가며 Spring Container에서 관리하는 자바 객체를 Bean이라고 한다. Bean을 등록하는 방법은 아래 세 가지가 있다. XML Annotation Java Config 2, 3번 방법을 사용할 때 @Component와 @Bean 어노테이션 모두 객체를 Bean으로 등록하는 역할을 수행하는데 두 어노테이션의 차이가 무엇인지 궁금해서 찾아보았다. 1. @Bean @Bean 어노테이션은 Spring Container에 의해 관리될 Bean을 생성함을 나타낸다. @Bean 어노테이션을 이해하기 위해 가장 먼저 봐야할 것은 @Target 어노테이션이다. @Target 어노테이션은 해당 어노테이션이 사용될 수 있는 타입을 지정한다. @Bean의 타겟은 메소드와 어노테이션이다. 아직 어노테이션 .. 2022. 4. 17. 이전 1 2 3 다음