T-note
-
[Tnote] "참조관계"의 고민T-note 2024. 6. 29. 01:04
팀원과 회의중 "현재 외래키를 통한 참조관계로 개발을 진행했는데, 대다수의 기업에서 진행하는 방식에 따라 외래키 없는 참조관계로 리팩토링을 진행하자" 라는 의견이 나왔고 "어떤 방식의 참조관계 형성이 우리의 프로젝트에 더 효율적인지?" 에 대한 고민을 하며 나온 결론과 프로젝트에 적용한 방식에 대해서 소개하고자 합니다. 제가 고민한 "참조관계"에 대해서 말씀드리기 전에 간단하게 외래키에 대해서 짚고 넘어가겠습니다. 외래키는 데이터의 정합성을 돕는 역할로써 일종의 테이블을 연결하여 가상의 다리역할을 합니다. 이런 외래키는 아래와 같은 특징들을 가지고 있습니다1. 관계 데이터 모델의 릴레이션 간의 관계를 표현한다2. 다른 릴레이션의 기본키를 참조하는 속성이다.3. 참조하고(외래키) 참조되는(기본키) 양쪽 릴..
-
[에러] schema-validation 에러T-note 2024. 4. 8. 01:00
에러 상황 운영중이였던 프로젝트에서 refresh token에 대한 scheduler 서비스를 도입하는 과정에서 refresh token의 entity가 변경되었습니다. https://github.com/T-Notes/Tnote-BackEnd/tree/main/src/main/java/com/example/tnote/base/scheduler Tnote-BackEnd/src/main/java/com/example/tnote/base/scheduler at main · T-Notes/Tnote-BackEnd Contribute to T-Notes/Tnote-BackEnd development by creating an account on GitHub. github.com 진행 중에 배포하여서 기존의 스키마..
-
[티노트] 로깅T-note 2024. 3. 28. 23:41
Logging 정보를 제공하는 일련의 기록인 로그를 생성하도록 시스템을 작성하는 활동. 우리는 왜 로깅을 사용할까? 복잡한 시스템의 구조를 이해를 위함 버그에 대한 정보 제공 성능에 관한 통계와 정보 제공 로그 출력 System.out.println() 로깅 라이브러리 [ logback, log4j 등등 ] 2가지 방식이 있는데 우리는 로깅 라이브러리를 사용할 것입니다. syste.out을 안쓰는 이유 성능상 좋지 않다 system.out.print(), system.out.println()은 내부적으로 write(), newLine()을 사용한다. 이는 내부적으로 synchronized를 이용해 구현되어 다른 스레드들의 접근이 불가하여 성능을 낮춘다. 시스템 콜 호출 과정에서 블로킹으로 호출하기 때문이..
-
[Error] 502 Bad GatewayT-note 2024. 3. 14. 21:27
문제 nginx를 사용하게 되면서 http를 https로 수정을 하였습니다. 하고 나서 테스트를 진행하다가 cors문제 인듯 싶은데, 502 error 코드가 발생하였습니다.. 처음에는 cors문제 같아서 web config 파일 수정을 하였는데, 여전히 같은 문제,, 아래는 postman으로 테스트 하였을때 나오는 에러 상황입니다! 그래서 ec2 내부에서 에러 log를 쭉 읽다가 알았습니다... 이것을 읽고 생각이 났습니다.. 최근에 계정 탈퇴 관련 코드 수정을 하였는데, 그때 계정 탈퇴할때 외래키로 다른 테이블들이 묶여 있어서 안되는 이슈가 있었는데, 그걸 해결하고자 deleteAllByUserId 라는 메소드를 만들었는데, 그때 userID 가 없는 subject 엔티티에도 만들었었습니다... 원인..
-
[Tnote] npm를 통해서 https로 변경하기T-note 2024. 3. 11. 19:12
Http를 Https로 변경하는 방법은 무료 / 유료로 나눠지기도 하며 정말 다양한 방법이 있는거 같다. aws를 통해서 ssl 인증서를 받거나, sslforfree 사이트에서 무료 인증서를 받아서 진행할 수 있다 나는 Nginx를 통해서 간편하게 진행해보았다. Nginx Proxy Manager (NPM)은 오프 소스 웹 인터페이스를 사용하여 Nginx reverse proxy를 관리하기 위한 툴인데, docker를 사용하여 배포 및 설치할 수 있어서 되게 간편하다 내가 NPM을 사용하게 된 이유는 1. SSL 인증서 관리 : 무료이면서 Let's Encrypt 인증서를 자동 갱신청하여 HTTPS 보안 연결을 쉽게 할 수 있기 때문이다. 2. 웹 기반 UI : 처음하는 입장에서 NginxProxyMan..
-
[tnote] swap 메모리 설정T-note 2024. 3. 11. 12:16
문제 상황 AWS EC2 프리티어 유형인 t2.micro를 사용하여서 프로젝트를 진행중에 있는데, RAM이 1GB라서 그런건지 도커를 돌릴때 자주 서버가 먹통이 되는 문제가 있었다. 여기저기 구글링 해보니까 인스턴스 유형 업글이 아니라 swap 메모리 설정을 통해서 어느정도 해결을 할 수 있다는 사실을 알아서 이걸 통해서 해결해 보고자 합니다. 참고로 aws가 제공하는 권장 스왑 공간은 아래와 같습니다! 결국 RAM이 1GB이니까 2배인 2GB를 swap 공간에 할당하는 것을 권장합니다. 해결 방법 1. dd 명령을 통해 swap file 생성 sudo dd if=/dev/zero of=/swapfile bs=128M count=16 참고로, dd 명령어는 블록 단위로 파일을 복사하거나 파일 변환을 할 ..
-
[Error] 수정한 코드가 운영서버에 적용이 안됩니다!T-note 2024. 3. 7. 17:39
문제 상황 서버측에서 코드를 수정해서 배포서버에 푸시를 했는데도 불구하고 postman의 운영 도메인, 프론트 모두에서 코드가 적용이 되지 않는 문제가 생겼습니다. 저희는 code deploy에도 배포가 성공 한걸 확인하고, ec2 내부에서 수정된 코드가 적혀 있는 것을 보고 CICD 부분은 확실히 되었다고 생각을 하여, 테스트하고 있는 API ( 저희는 token 관련 API )에서 문제를 찾으려고 고생을 하였습니다 ㅜ... 그러다가 배포할때 deploy.log 파일을 찍어 보려고 log 파일을 여는 순간 문제를 찾았습니다. 현재 날짜가 3/7인데 2월 20일이 마지막으로 로그가 찍혀 있음을 알았다. 결국 배포가 잘 되지 않았다는 증거이다. 그렇다면 왜 배포가 잘 되지 않았을까? 고민을 하며 docke..