![[Project 회고록] 친구 추가 관련 기능 구현 시 테이블에 대한 고찰(친구 목록과 친구 요청에 대한 테이블을 나눌 것인가?)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fo2vxk%2FbtshRxsNfyi%2FAAAAAAAAAAAAAAAAAAAAAIrqpW63L0L6mn03wI5JNm-1zPeQXeK7Kr9R2tpRDAmE%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DZRcp1Wz29kGHNJrRY7RW8IgOxeo%253D)
개요 위 사진은 현재 개발중인 토이 프로젝트의 User - Friend의 테이블 구조이다. 친구 요청을 수락하여 서로 친구인 사용자 간의 개인 채팅방을 이용 가능하게 할 생각이었으며 친구 요청과 응답에 대한 프로세스를 하나의 테이블로 관리하고, 서로 친구가 된 친구목록을 또다른 테이블에 관리하려고 하였다. (여기서 말하는 친구 요청에 대한 응답은, 웹소켓으로 구현했음) 현재 요청과 응답에 대한 프로세스 또한 요청과 응답을 관리하는 테이블의 STATUS 컬럼의 도메인값을 NOREAD, READ, REJECT, ACCEPT 의 네 경우를 두고, 요청을 보낸 사용자가 친구 요청을 받은 사용자가 친구 요청을 보지 않았는지, 봤는데 수락도 거절도 아닌지, 거절했는지에 대한 상황을 View할 수 있게 설계했다. 수..
![[SpringBoot] CoolSMS 이용한 휴대폰 인증](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcsOCuC%2FbtshAAYqT2u%2FAAAAAAAAAAAAAAAAAAAAALWyzH8Emsos3-yr2dPIfHTvcB9NPktYn6eksjhvZGi7%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DAardreM4pL0Y7XIUk4o8HaF0sQg%253D)
서론 휴대폰과 이메일 중 압도적으로 휴대폰 사용량이 높다고 생각했고 이메일은 가입 시 인증받지 않는 곳도 많기 때문에 우선적으로 휴대폰인증을 구현하려고 했다. 이메일은 필요 시 SMTP 활용하여 구현 예정 기능 구현을 위해 찾아본 아래의 API 중 coolsms를 선택했다. 1. 네이버 SMS 2. Twilio 3. coolSMS 네이버는 한달에 50건이 무료고, Twilio는 가입 시 15달러를 준다고 한다. cool sms 사용하기 들어가기 앞서 유료임.. SMS를 보내는 것이기 때문에 당연한가 ? 세상에서 가장 안정적이고 빠른 메시지 발송 플랫폼 - 쿨에스엠에스 손쉬운 결제 전용계좌, 신용카드, 계좌이체 등 국내 결제 뿐만 아니라 해용신용카드로 한번의 카드번호 등록으로 자동충전까지 지원합니다. 전용..
![[SpringBoot] AWS S3 업로드 파일 제거 - 3(完)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FxPqBL%2FbtsgECW58yY%2FAAAAAAAAAAAAAAAAAAAAAAWCg2NZJ2UwA0Kk-eIoOAyW-Dq3tEl-WNEg7nN3L45W%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DhBYFa4irl8QXNo1l5xsWF1u%252BH6A%253D)
이전 글에서 이어집니다. [SpringBoot] AWS S3 이미지 업로드 - 1 토이 프로젝트를 하면서 기록 남겨놓으면 좋을것 같아서 포스팅 AWS 가입, AWS S3 BUCKET 생성과 IAM KEY 발급 과정은 생략하겠음. 트러블 슈팅 https://mag1c.tistory.com/354 https://mag1c.tistory.com/355 https://mag1c.t mag1c.tistory.com [SpringBoot] AWS S3 이미지 업로드 - 2 이전 글에서 이어집니다 https://mag1c.tistory.com/353 아쉬웠던 점은, 계속 S3에 디렉토리가 생긴다는 점이었으며, 이를 위해 코드 수정이 필요했다. 생각보다 엄청 간단했다. @Transactional @Override pu..
![[SpringBoot] AWS S3 이미지 업로드 - 2](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fbuwnbm%2FbtsgD9gc3Jk%2FAAAAAAAAAAAAAAAAAAAAAIZTeYBeLS80nCYXZNDHsHIM8LS6YxPrjIJQgoQZhr6x%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3Dq8Ic2IGOEj1qOByBszV4DDh%252FPWs%253D)
이전 글에서 이어집니다 [SpringBoot] AWS S3 이미지 업로드 - 1 토이 프로젝트를 하면서 기록 남겨놓으면 좋을것 같아서 포스팅 AWS 가입, AWS S3 BUCKET 생성과 IAM KEY 발급 과정은 생략하겠음. 트러블 슈팅 https://mag1c.tistory.com/354 https://mag1c.tistory.com/355 https://mag1c.t mag1c.tistory.com 아쉬웠던 점은, 계속 S3에 디렉토리가 생긴다는 점이었으며, 이를 위해 코드 수정이 필요했다. 생각보다 엄청 간단했다. @Transactional @Override public boolean img_modify(MultipartFile imgfile, UserDTO dto) throws IOExcepti..
![[SpringBoot] AWS S3 이미지 업로드 - 1](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fco9G4s%2FbtsgG5RGGlK%2FAAAAAAAAAAAAAAAAAAAAAJqYFuDH1um3WWDLjaswbxZpzrQnJlx85dLNwRkJKss2%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3D1H4O%252B%252B75DijPOkASX5%252FRTAgxic0%253D)
토이 프로젝트를 하면서 기록 남겨놓으면 좋을것 같아서 포스팅 AWS 가입, AWS S3 BUCKET 생성과 IAM KEY 발급 과정은 생략하겠음. 트러블 슈팅 https://mag1c.tistory.com/354 https://mag1c.tistory.com/355 https://mag1c.tistory.com/356 개발 환경 SpringBoot3.0.6 build.gradle DI implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' aplication.properties # S3 cloud.aws.credentials.accessKey=YourKey cloud.aws.credentials.secretKey=..
![[Java] 자바에서의 스레드 안전(Thread Safe)과 모니터(monitor)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FvGj0u%2Fbtshcge8vuH%2FAAAAAAAAAAAAAAAAAAAAAK1N8OnwaMtQoZBV8ioX9dGx64x0JBnoEvuHoBX7GNMm%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3Dtd8OJL%252BOyux869M8PEYjsCyJ%252Bck%253D)
연관 게시물 스레드 안전 - Thread Safe 연관 게시물 https://mag1c.tistory.com/365 [Java] 자바에서의 스레드 안전(Thread Safe)과 모니터(monitor) 자바에서의 Thread-Safe 1. Lock synchronized 아래 코드는 Synchronized 키워드를 사용하여 스레드의 안전성을 보 mag1c.tistory.com 자바에서의 Thread-Safe 1. Lock synchronized 아래 코드는 Synchronized 키워드를 사용하여 스레드의 안전성을 보장했다. @ThreadSafe public class Lock { @GuardedBy("this") private int nextValue; public synchronized int getN..

연관 게시물 [Java] 자바에서의 스레드 안전(Thread Safe)과 모니터(monitor) 자바에서의 Thread-Safe 1. Lock synchronized 아래 코드는 Synchronized 키워드를 사용하여 스레드의 안전성을 보장했다. @ThreadSafe public class Lock { @GuardedBy("this") private int nextValue; public synchronized int getNext() { r mag1c.tistory.com Thread Safe 스레드 안전(thread safety)은 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻한다. 보다 엄밀하게는..
![[Java] 스태틱 블록(Static block) (초기화 블록)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FdzDhff%2FbtsheD3efGr%2FAAAAAAAAAAAAAAAAAAAAAB0h7Ip7XZiQ2nYrCx2-lYkJz6433hdGQEyi4DWSBncv%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DsDIwAaXtL5Ts2l8aRUREBvPf7pA%253D)
기존에 내가 사용하고 자주 봤던 static이 붙은 것들은 public static int a; public static void main(String[] args){} 이정도인데, 업무 내에서 아래와 같은 코드를 발견했다. public Conf { static { loadConfiguration(); } } 얼추 인스턴스가 생성될 때 아래의 메서드를 실행하는 것 정도만 알겠는데 정확히 어떤 것인지 모르겠다. 개념정리를 해놓고 언제든 활용할 수 있도록 해보자. 초기화 블록 class Class { static int Field = 10; // 클래스 변수의 명시적 초기화 int Field2 = 20; // 인스턴스 변수의 명시적 초기화 } 필드는 위와같은 형태로 초기화가 진행되는데, 초기화 블록을 활용하..