자바 진영의 JPA와 TypeScript 진영의 TypeORM은 비슷한듯 다르다. 서비스 개발을 하면서 TypeORM을 사용했을 때는 TypeORM로 데이터를 조회할 때 자동으로 SoftDelete된 데이터는 제외해주는 기능이 있었는데, JPA에는 그런 기능이 없는 것이다.import jakarta.persistence.*;import org.hibernate.annotations.*;@Entity@SQLDelete(sql = "UPDATE my_table SET is_deleted = true WHERE id = ?")@Where(clause = "is_deleted = false")public class MyEntity { @Id @GeneratedValue(strategy = Genera..
드디어 만 3년차가 되었다. 사실 만 3년차 회고가 한참전에 올라갔어야 했는데 중간에 결혼을 하는 바람에 조금 늦어졌다. 이전 회고가 궁금하다면 아래 링크로.https://dakafakadev.tistory.com/219 만 2년차 회고우여곡절 끝에 개발자로 일한 지 만 2년이 되었다. 지난 2년을 돌아보니 좀 더 성장하지 못했다는 아쉬움이 남는다. 분명 더 성장할만한 기회들이 있었을텐데. 지난 만 1년차 회고를 오랜만에 읽dakafakadev.tistory.comhttps://dakafakadev.tistory.com/168 만 1년차 회고정신없이 업무를 하고 공부를 하다보니 어느새 만 1년차가 되었다. 갓 입사했을 때의 나와 비교하면 많이 성장했구나싶다가도 아직 많이 부족하다는 생각이 든다. 첫 회사..
상황 EC2는 총 세대가 있다. 두 대는 서비스용, 한 대는 서비스 관리용으로 프로메테우스 + 그라파나가 실행중이다. 그런데 이 EC2끼리 보안을 이유로 https로 통신하도록 만들어야 하는 상황이 있었다.문제 AWS에서 인증서 발급을 무료로 해주긴 하지만, 그건 도메인이 존재하는 경우였고, 도메인이 있어서 발급을 받는다해도 AWS에서는 인증서 파일을 제공하지 않을 뿐더러 인증서는 EC2에 바로 연결할 수 없고, 로드밸런서 등을 연결해야 했다. 하지만 더 큰 문제가 있었는데 우선 서버 자체가 https로 실행되어야 하기 때문에 서버 자체에 인증서 파일이 필요했다. 이제 서버 자체에 인증서 파일을 어떻게 만드느냐가 문제였다. Caddy를 사용할까 했지만 이것도 애초에 self-signed 인증서이고, 설정..
원래는 서버1 + 서버2가 붙어 있는 구조로 개발했었다. 그래서 EC2 두 대에 각각 서버 2가 있었던 상황이다. 이 상황에서 서버2만 한대로 따로 다른 EC2로 가게 되었다. 그런데 서버2는 이미 다른 사람들이 사용중이었다. 이 상황에서 어떻게 눈치채지 못하게 서버2를 다른 EC2로 갈아끼웠을까에 대한 이야기이다.서버 소스 분리 우선 서버 소스를 분리하는 작업이 먼저였다. 이 부분은 원래 분리를 고려하고 개발이 되었어서 그다지 어렵진 않았다. 서버1과 서버2의 url도 앞부분도 분리되어 있는 상태였다.새로운 EC2에 서버 세팅 새로운 EC2를 만들고 서버를 세팅했다. DB 연결에 문제가 있었지만 보안그룹 문제였다.ALB로 특정 경로만 다른 서버로 호스팅 설정 로드밸런서로 가서 [리스너 및 규칙]에서 설..
프로젝트에서 suneditor를 사용중인데 이미지 업로드를 구현할 일이 생겼다. 그래서 multer를 이용하여 이미지 업로드를 구현했는데 이 부분은 구글에 찾아봐도 잘 안 나와서 혼자 해결해서 누군가도 헤맬 것 같아 여기에 정리해둔다.MulterModule 설정@Module ({ imports: [ MulterModule. register({ storage: diskStorage({ destination: '/public/uploads', // public 하위의 uploads 폴더에 이미지가 저장됨. filename: (req, file, callback) => { const uniqueSuffix = Da..
오늘 아침에 막 출근해서 이슈를 처리하려는데 서버에 문제가 생겼다. 서버 로그를 살펴보니 DB에 연결되지 못하고 있었고, Unable to connect to the database(lock)이 발생하고 있었다.RDS 상태와 로그를 확인하자 제일 먼저 RDS 상태와 로그를 확인하기 위해 콘솔에 접속했다. RDS 상태는 정상. 에러로그에도 별다른 사항이 없었고, 모니터링 지표를 봐도 문제가 될 부분이 없었다.lock이 실제로 걸려 있는가? 원래 잘 작동되고 있던 서버였고, lock 관련해서는 이미 테스트를 했던터라 갑자기 발생한 게 의아했다. 우선 RDS의 상태가 정상인지 확인했는데 정상이었고, datagrip으로 접속해서 lock이 걸려 있는지 확인했다. 그런데 걸려 있는 락이 없었다.최후의 방법, 재기..
최근에 애드몹 설정을 한 앱을 앱스토어에 출시했다. 그 과정 중에 내가 찾아봐도 안 나왔거나 몰랐던 정보들이 있어서 이곳에 정리한다.미리보기는 테스트 화면으로 하지 말자 앱스토어에 앱을 검색하면 나오는 앱 사용 화면이 있다. 앱을 출시하려면 이걸 준비해야 하는데, 난 잘 몰라서 플러터로 실행하면 나오는 debug 리본이 노출되고, 애드몹 테스트 광고가 노출된 화면으로 캡처를 해서 제출했다. 결과는 반려. 스크린샷은 실제 사용하는 것처럼 보여야 한다고 한다. 그래서 debug 리본도 안 보이도록 처리하고, 애드몹 광고 영역도 가리고 스크린샷을 제출해서 심사 통과했다.애드몹 앱 등록을 위한 준비를 미리 하자 나도 그냥 앱에 애드몹 설정만 하면 되는 줄 알았는데, 알고보니 그게 아니라 앱스토어에 등록한 이후에..
서비스 오픈을 준비하면서 내가 가장 걱정했던 것인 AWS에 서버 구축하기를 마쳐서 그 과정을 정리해본다. 우선 구축하려는 아키텍처는 아래와 같았다.EC2 인스턴스 만들기 EC2 인스턴스를 만드는 과정은 다른 블로그에 잘 나와 있으므로 생략한다. 서버1을 먼저 인스턴스 생성으로 만든 후에 서버1을 이미지화하여 템플릿 생성 후 템플릿으로 인스턴스를 복제하여 서버2를 생성했다. 이때, 서버1을 접속하기 위한 .pem 파일을 함께 사용할 수 있었다. 만약 각 서버마다 다른 .pem 파일로 관리하기를 원한다면 새로 만들어주는 수 밖에 없는 듯하다.RDS로 Master-Slave 만들기RDS로 DB를 하나 만든 후, 그 DB를 선택하고 읽기 전용 복제본 생성을 선택한다. 이렇게 되면 Master로는 CRUD가 전부..