SpringBoot 3.X 버전 대에서 Querydsl설정을 위한 gradle 설정.설정 하고 build 후에 build > generated > sources > annotationProcessor 폴더에 QEntity들이 생성되는지 확인한다. plugins { id 'java' id 'org.springframework.boot' version '3.2.4' id 'io.spring.dependency-management' version '1.1.4'}group = 'jpa.project'version = '1.0-SNAPSHOT'sourceCompatibility = '17'configurations { compileOnly { extendsFrom annotati..
쿠버네티스 리소스의 status를 보고 Pod가 비정상 상태라면 데이터를 저장하고 비정상 상태가 지속 시간을 만족하면 알람이 발생되는 로직이 있었다.쿠버네티스 리소스의 status와 Alarm은 일대일 관계이기 때문에, @OneToOne관계로 설정을 했고 연관 관계 owner가 아닌 테이블에 mappedBy 설정으로 조회가 되게 설정 후 fetch = FetchType.LAZY 로 모두 설정해서 Lazy 로딩이 동작될 것으로 예상했지만, 예상햇던 대로 SQL query가 나가지 않는 이슈가 발생했다. Entity에 대한 설정은 아래와 같이 설정했다. Alarm Entity@ToString(exclude = {"k8sEvent"})@Entitypublic class Alarm { @Id @Uui..
회사에서 테스트 코드를 작성하던 도중 Exception 발생 시 catch 이후의 flow 를 검증해야 하는 상황이 발생했다. Exception Testing에 사용한 방법은 ExpectedException Rule 을 사용하고 있었다. ExpectedException Rule 같은 경우, 발생할(expect) exception 에 대해서 작성해 둘 뿐만 아니라 예상되는 message까지 쉽게 선언 할 수 있어서 좋은 테스트 방식으로 생각하고 있었다. 매우 간단하게 익셉션이 발생하는 메소드 호출 후 Mockito verify 메소드를 호출하면 될 것으로 예상했는데 막상 테스트 코드를 작성 하고 실행해보니 예상과 다르게 동작했다. 이를 확인해 보고자 junit wiki를 확인해보니 ExpectedExcep..

이전에 웹 애플리케이션 디렉토리 구조에 대해서 살펴봤었다. 웹 애플리케이션을 war 확장자로 패키징 하고, 이를 Tomcat과 같은 서블릿 컨테이너에 배포해서 서비스를 실행한다고 했었다. 이번 포스팅에서는 직접 war 패키징을 해보고 Tomcat에 수동 배포를 수행해 보려고 한다. 웹 애플리케이션 디렉토리 구조는 아래 글에 정리해 두었다. https://wanbaep.tistory.com/16 웹 애플리케이션 디렉토리 구조 웹 애플리케이션은 다음과 같은 디렉토리 구조를 가지며 이 구조는 웹 표준 디렉토리 구조이다. WebAppRoot ├── WEB-INF │ ├── classes │ ├── lib │ └── web.xml ├── index.html └── index. wanbaep.tistory.com ..
웹 애플리케이션은 다음과 같은 디렉토리 구조를 가지며 이 구조는 웹 표준 디렉토리 구조이다. WebAppRoot ├── WEB-INF │ ├── classes │ ├── lib │ └── web.xml ├── index.html └── index.jsp Intellij나 Eclipse와 같은 에디터에서 웹 애플리케이션을 작성하고 war 패키지로 빌드한 후, 이를 압축 해제 하면 위와 같은 구조가 나오는 것을 확인 할 수 있다. 주로 Tomcat과 같은 서블릿 컨테이너를 동작시켜 두고 Application Root 디렉토리 위치에 {WebApp}.war 파일을 업로드 해두면, 자동으로 .war 파일 압축을 해제한다. 물론 압축 해제된 내용은 위에 구조와 동일하다. 각 파일에 대해서 살펴보도록 하자. Web..

서블릿(Servlet) 프로그래밍 학부시절 웹 프로그래밍 교육 때 처음 서블릿은 종종 들어왔던 단어이다. 자바 웹과 관련된 용어 정도로만 알고 있었고, 정확한 정의를 이야기 할 수 없었다. 이번 포스팅을 통해서 좀 더 정확하게 내용을 정리해보려 한다. 먼저 Web Application 의 동작 순서를 아래 그림과 함께 살펴보자. 사용자가 브라우저에 요청을 입력하면 브라우저는 이를 HTTP Protocol의 요청으로 만들어서 웹 서버에 요청을 보낸다. 웹 서버는 받은 요청에 따라서 프로그램을 실행시킨다. 프로그램은 실행된 결과를 다시 웹 서버에 리턴하고 웹 서버는 프로그램에게 받은 결과를 HTTP Protocol의 응답으로 만들어서 브라우저에 응답한다. 최종적으로 사용자는 요청을 확인 할 수 있다. 위와 ..

HTTP 프로토콜 HTTP(Hyper-Text Transfer Protocol) 은 웹 브라우저와 웹 서버 간의 통신 프로토콜이다. HTTP 프로토콜은 단순히 HTML 페이지나 이미지 파일 전송을 넘어서 원격 컴퓨터에 로딩되어 있는 함수나 객체의 메서드를 호출할 때도 사용된다. HTTP 프로토콜을 응용하거나 확장한 다양한 기술들이 있는데 여기서는 종류만 살짝 살펴보고 넘어가자. RESTful(REpresentational State Transfer), SOAP (Simple Object Access Protocol) 클라이언트와 서버 사이에 서비스를 요청하고 응답을 하는 방식을 나타내는데, 두 가지 모두 HTTP 프로토콜을 응용하거나 확장한 기술이다. (관련한 내용은 추후에 정리해봐야겠다.) WebDAV..

데스크톱 애플리케이션을 시작으로 클라이언트 서버 애플리케이션에서 전통적인 방법과 개선된 방식을 살펴보고 마지막으로 웹 애플리케이션에 대해서 각 각 살펴보고 특징들을 정리해보려 한다. 데스크톱 애플리케이션 개인용 데스크톱에서 실행되는 애플리케이션으로 로컬 피씨로 프로그램을 다운받아 설치하고 실행하는 방식이다. 로컬 피씨의 모든 자원을 사용 할 수 있으며, MS Office 프로그램이나 게임을 설치해서 실해하는 것이 이에 해당한다. 장점 로컬 피씨의 모든 자원을 활용 가능하다. 네트워크 오버헤드가 없으므로 그만큼 속도가 빠르다. 단점 변경사항이 생길 때마다 다시 배포해야 하므로 배포가 번거롭다. → 배포 문제는 자동 갱신을 통해 해결이 가능하다. (애플리케이션을 실행할 때 먼저 서버에 갱신된 버전이 있는지 ..

WAS는 윈도우에서 개발하고 MySQL 데이터베이스는 리눅스(우분투)에 띄워서 개발하는 중에 MySQL에 접속되지 않는 현상이 있었다. 일단 리눅스 피씨의 MySQL에 새로운 사용자를 모든 IP에 대해 허용하도록 권한을 설정해서 생성했다. CREATE USER 'baetest'@'%' IDENTIFIED by 'password'; 그리고 웹 어플리케이션 에서 jdbc url을 localhost에서 접속했던 방법에서 url의 localhost만 리눅스 피씨의 IP로 변경해서 설정했다. jdbc.url=jdbc:mysql://[리눅스피씨 IP]:3306/workbook_db 그러나 실행해본 결과 아래와 같은 Exception 이 발생했다. com.mysql.cj.jdbc.exceptions.Communica..
- Total
- Today
- Yesterday
- consumer
- Prometheus Operator
- 애플리케이션 변화 과정
- springboot3.x
- Kafka
- producer
- Java 특징
- ExpectedException
- ServiceMonitor
- OneToOne
- minikube
- Servlet Container
- MySQL 외부 IP
- docker-compose
- kubernetes
- Spring Cloud Stream
- node add
- Java 장단점
- minikube node add
- 애노테이션 프로세서
- 웹 애플리케이션
- Java 란
- cpus
- WEB-INF
- StreamBridge
- DD파일
- 데스크톱 애플리케이션
- 서버 클라이언트
- Servlet
- 특정 ip
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |