간단한 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 방식의 개발을 진행하면 상위 레이어를 구현할 때 하위 레이어가 이미 모두 구현되있으므로 하위 레이어를 포함한 단위 테스트를 구현할 ..
스프링의 컨트롤러 메서드는 크게 데이터를 반환하는 RestController와 뷰를 반환하는 일반적인 Controller로 나뉜다. RestController의 반환 값은 HttpMessageConverter에 의해 json과 같은 형식으로 변환되어 전달되고, Controller의 반환 값은 뷰의 이름으로 간주되어 ViewResolver가 서버 내의 적절한 뷰 파일을 찾아 처리한다. 초기화 ViewResolver를 호출하고 사용하는 클래스는 DispatcherServlet이므로, DispatcherServlet에 대해 간단히 알아야 한다. ApplicationContext가 초기화된 후에 DispatcherServlet 또한 초기화되는데, 이때 사용될 ViewResolver를 모두 찾아 리스트로 가져온다..
- Total
- Today
- Yesterday
- java switch case
- 람다식
- JPA JSON
- 우테코 5기
- 우테코
- stubbing
- 우테코 프리코스
- multiplebagsfetchexception
- Java
- 스프링
- RandomPort
- MySQL 이벤트 스케줄
- Fromtail
- 의존성 주입
- Spring Boot Monitoring
- GitHub Discussion Template
- Jenkins 예약 배포
- 생성자 주입
- invokedynamic
- GitHub Discussion
- JPA
- 자바
- Spring
- Spring 테스트
- springboottest
- 함수형 인터페이스
- logback-spring.xml
- GitHub Discussion 템플릿
- Payload 암호화
- MySQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |