
DB 마이그레이션을 진행하며 동시에 데이터의 일부를 개발 서버의 인메모리로 데이터를 관리할 일이 생겼다. DB와 웹 서버의 변경이 동시에 일어나야 하는 상황에서 다운타임이 없는 무중단 배포를 하는 것은 많이 까다롭다. 변경된 데이터를 다루는 API들에 대해서 정교하게 요청을 구분하고 프록시 서버로 라우팅을 해줘야 한다. 다행히(?) 변경하려는 서버는 운영 서버가 아닌 개발 서버이고, 웹서버도 한 대만 올라간 상태여서 비교적 간단한 중단 배포를 하기로 결정했다. 이 예시는 Jenkins, MySQL과 SpringBoot 서버 환경에서 진행되었으며 예약 명령어들을 사용해 밤 시간에 DB 및 웹 서버를 안전하게 예약하여 재배포하는 방법을 다룬다. DB 스키마 변경 예약하기 DB의 스키마 변경은 MySQL의 이..

간단한 SpringBoot Rest Api 서버를 배포한 뒤 해당 서버가 설치된 AWS EC2에 대한 모니터링이 필요해졌다.본 글은 설치 및 운영에 대한 가이드보다 어떠한 배경을 고려하여 도입하게 되었는지를 위주로 작성했다. 고려 사항과 목표 모니터링 시스템 구축 시 고려한 제약 사항은 아래와 같다.배포한 Api 서버가 초기 단계여서 아직 부하가 거의 없는 상황EC2에 대한 ssh 접속이 사내 네트워크에서만 접속이 가능하여 외부에서 대시보드로 상황을 확인할 수 있어야 함보안을 위해 모든 IP에서 접속 가능한 EC2의 인바운드 규칙은 443, 3000, 8080 포트로 제한이 되어있으며 EC2 한 대는 443과 8080은 이미 HTTPS 접속과 Api 서버에 사용 중이어서 사실상 3000번만 사용이 가능...

최근의 프로젝트에서 Spring Data JPA를 통해 상속관계를 사용했으나 적절하지 않음을 깨닫고 언제 슈퍼/서브타입을 사용해야 할지 정리하는 글입니다. 확장(Enhanced, Extended) ER과 슈퍼/서브타입 RDB의 엔티티 릴레이션(ER), 테이블은 정보를 저장하는 기본 단위이다.전통적인 릴레이션 모델링만으로는 현실의 다양한 데이터들을 효율적으로 나타내기 어려워 이를 조금 더 추상화한 확장 ER의 개념이 나오게 되었고 데이터의 상속 관계를 나타내기 위한 슈퍼/서브타입에 대한 개념이 여기에 포함된다.(명칭은 Super class & Subclass라 부르기도 하나 여기서는 슈퍼/서브타입 관계라 칭한다) 전통적인 모델링에서는 어떤 테이블의 하나의 열에 저장된 외래 키를 통해 다른 하나의 테이블만..

언제 JSON으로 데이터를 말아서 저장하면 좋은가? 저장될 데이터 구조의 변동성이 낮다면 일반적인 자료형으로 데이터를 저장하는 것이 바람직하다. 하지만 RDB를 사용하며, 데이터가 1. 비정형 데이터이거나 2. Key-Value 형태로의 저장이 적절하며 3. JSON으로 묶인 데이터의 세부 내용을 각각 참조할 상황이 적다면 NoSQL을 사용하지 않는 경우에도 해당 데이터를 JSON으로 저장하는 것이 적절할 수 있다. JSON 사용을 위한 Hypersistence-utils 의존성 추가하기 JPA에서 JSON 형태의 자료를 DB Column에 삽입하기 위해서는 별도의 의존성이 필요하다. 다음에 설명할 기술은 JPA의 구현체인 hibernate에만 부가적으로 사용 가능한 기능이므로 hibernate를 사용하..

GitHub의 Issue와 같은 기능에 템플릿을 적용하는 기능은 전부터 가능했었지만 Discussion에 템플릿을 적용하는 기능은 비교적 최신(2023.01)에 추가되었다. 간단히 GitHub Discussion을 활성화, 템플릿을 만들고 적용하는 과정을 소개하려 한다. GitHub Discussion 활성화하기 저장소의 Private, Public 여부와 관계없이 Discussion 기능을 사용할 순 있지만 별도의 활성화 과정이 필요하다. 저장소, 혹은 조직의 Settings 탭을 한참 내리면 Discussion을 활성화하는 창이 보인다. 체크박스를 클릭해 활성화하자. 아래와 같이 Discussions 탭이 새로 생성된 것을 확인할 수 있다. 기본 제공되는 카테고리 기본 제공되는 카테고리와 템플릿이 있..
최근 ORM 없이 순수 JDBC + Spring, 그리고 JDBC template을 통한 SQL mapper + Spring 조합의 웹앱들을 만들어보았다. Presentation, Service, Persistence 세 레이어를 ATDD 스타일로 구현하며 단위 테스트와 통합 테스트를 다양하게 작성해보았고, 괜찮았던 방법과 고민했던 포인트들을 적어보려고 한다. 각 레이어에 대한 단위 테스트는 Mockito를 통한 Slice 테스트로 Out - In 방식의 TDD에 용이한 Mockito Persistence -> Service -> Presentation 순서로의 In-Out 방식의 개발을 진행하면 상위 레이어를 구현할 때 하위 레이어가 이미 모두 구현되있으므로 하위 레이어를 포함한 단위 테스트를 구현할 ..
- Total
- Today
- Yesterday
- springboottest
- 생성자 주입
- multiplebagsfetchexception
- Jenkins 예약 배포
- GitHub Discussion
- 람다식
- 우테코 5기
- 우테코 프리코스
- 의존성 주입
- RandomPort
- Spring
- 우테코
- 자바
- java switch case
- Fromtail
- logback-spring.xml
- JPA
- Spring 테스트
- 스프링
- MySQL
- 함수형 인터페이스
- invokedynamic
- Payload 암호화
- Java
- GitHub Discussion 템플릿
- MySQL 이벤트 스케줄
- Spring Boot Monitoring
- JPA JSON
- stubbing
- GitHub Discussion Template
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |