반응형 전체 글344 Main class name has not been configured and it could not be resolved from classpath 해결하기 우리가 스프링 부트를 멀티 모듈로 설계하고 처음으로 루트 모듈을 빌드하다 보면 다음과 같은 에러를 흔하게 접한다. Main class name has not been configured and it could not be resolved from classpath 루트 모듈에서는 실행할 스프링 부트 애플리케이션을 실행할 main 함수가 없기 때문이다. 이에 관한 예외를 해결하는 3가지 방법을 알아보자. 실습을 진행한 모듈은 다음과 같다. 1. 직접적인 mainClassName 지정루트 모듈 build.gradle 또는 build.gradle.kts에 아래와 직접적으로 mainClassName을 지정한다.//build.gradle의 경우bootJar { mainClassName = 'template.ap.. 카테고리 없음 2024. 8. 14. 컴퓨터가 소숫점 계산을 잘 하지 못하는 이유 이상한 소숫점 계산 컴퓨터는 소숫점 계산을 잘 하지 못한다고 한다.자바를 사용해 아래와 같은 테스트 코드를 만들어 보았다. public class CalculateExampleTest { @Test void test() { System.out.println(1.1 + 0.1 == 1.2); }} 어떤 값이 출력될까? 편하게 생각하면 '당연히 1.1 + 0.1은 1.2니까 true가 출력되겠네!' 라고 생각할 수 있다.눈으로 확인한 출력 값은 우리의 예상과 다르다. false가 출력됐다. 어떻게 false가 출력된 것일까..??이제 왜 이런일이 일어나는지 알아보자. 컴퓨터는 기본적으로 이진법을 사용한다. 0과 1만 사용하는 것이다.컴퓨터가 이진법을 사용하는 이유는 효율성은 물.. 개발 2024. 6. 13. Tomcat Connector 오늘은 지난시간에 자세히 다루지 못했던 Tomcat Connector에 대해 공부해보려고 한다. Connector는 클라이언트와의 요청을 처리해 서버(서블릿 컨테이너)로 넘겨주는 역할을 맡는다. Tomcat에는 크게 AJP Connector와 HTTP Connector 2가지가 있다.이 두 Connector는 BIO Connector(현재는 사용 X), NIO Connector, NIO2 Connector, Apr Connector로 구현된다. 참고로 BIO Connector는 Tomcat 9.0부터 사용할 수 없다.Tomcat 9.0부터 NIO 및 NIO2 Connector에서 OpenSSL을 사용하여 TLS(TLS/SSL) 암호화를 지원할 수 있다. 아래 표를 참고하면 커넥터에서 JSSE와 OpenS.. 개발 2024. 6. 3. @RequestBody 직렬화와 역직렬화 눈으로 확인하기 자바 스프링에서 @RequestBody 직렬화, 역직렬화에 대해 알아보겠다. Java에서 @RequestBody필자는 요청 바디에 json 객체를 담아 요청했다.따라서 헤더의 content-type은 application/json이다. @RequestBody를 사용하면 RequestResponseBodyMethodProcessor가 HTTP 요청을 우리가 정의한 자바 객체로 변환해준다. 그럼 어떻게 HTTP 요청을 자바 객체로 변환해주는지 살펴보자. 실습 코드는 아래와 같다.import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.s.. 개발/Spring MVC 2024. 5. 30. 도커와 가상화 기술 과거부터 현재까지 컴퓨팅 자원을 활용하는 방법은 크게 3가지가 있다.베어메탈, 하이퍼바이저, 컨테이너가 그 3가지다. 베어메탈에서 하이퍼바이저로 그리고 컨테이너로 발전해왔다.오늘은 이 3가지 방식에 대해 알아보겠다. 베어메탈베어메탈은 가상화 계층 없이 물리적 하드웨어 위에 직접 운영체제 및 애플리케이션을 설치하여 사용하는 컴퓨팅 환경이다.베어메탈의 장점은 물리적 자원을 가상화 계층 없이 사용하므로 성능에서 이점을 가질 수 있다. 그러나 베어메탈이 가지는 단점이 기업 입장에서 더 치명적이다.베어메탈방식은 서버를 확장하려면 매번 하드웨어적인 의미의 서버를 매번 구입해야한다. 비용적인 측면에서 부담스러우며 급하게 서버를 확장해야할 때는 직접 컴퓨터를 구매하며(배송 시간, 쇼핑 시간) 유연성이 떨어지고, 컴퓨터.. Docker 2024. 5. 27. Ubuntu 22.04 LTS WOL(Wake On Lan) 적용하기 먼저 제품이 WOL을 지원하는지 확인해야 한다. 컴퓨터가 부팅 시작하는 도중에 BIOS창으로 넘어가서 이를 확인하면 된다.또는 컴퓨터 설명서나 제품 판매 페이지에서 확인!!! 제품이 WOL 기능을 지원한다면 공유기에서 Wake On LAN(WOL) 설정을 해야한다. 필자는 LG U+ 공유기인데 WOL을 지원해서 WOL 기능을 적용할 컴퓨터의 맥 주소를 기입했다. 이후에는 아래 툴들을 설치 sudo apt-get install net-tools ethtool wakeonlan 이후 ifconfig를 통해 우리가 사용하는 네트워크 인터페이스를 구할 수 있다. 사용하는 네트워크 인터페이스를 확인한 후 아래와 같이 명령어를 입력한다. 필자의 경우는 enp3s0 sudo ethtool -s enp3s0 wol .. OS 2024. 5. 21. 윈도우 밀고 ubuntu 24.04 LTS 설치 도전! 이번에 알리에서 구매한 미니 pc에서 윈도우를 밀고 ubuntu를 설치하려고 한다.GUI 환경이 아닌 CLI를 설치할 예정이다. 1. ubuntu 24.04 LTS 설치 먼저 아래와 같이 ubuntu 사이트에 접속한다. https://ubuntu.com/download/server https://ubuntu.com/download/server ubuntu.com 필자는 현재 미니pc CPU 아키텍쳐(인텔 N-100)와 일치하는 ubuntu-24.04-liver.server-amd64.iso를 설치했다.반드시 본인 컴퓨터의 CPU 아키텍쳐와 동일한 iso를 설치해야 한다. 시간이 10분 정도 오래 걸렸다 ^^.. 2. Rufus 설치https://rufus.ie/ko/ Rufus - 간편하게 부팅 가능한 .. OS 2024. 5. 19. Apache Tomcat 서블릿 기반 스프링 MVC를 사용해 개발을 진행하고 있다면 서블릿 컨테이너이자 WAS(Web Application Server)로 대부분의 개발자들이 Tomcat을 선택할 것이다. 오늘은 많은 개발자들이 사용하고 있는 Tomcat에 대해 정리해보고자 한다.필자가 공식문서에서 참고한 Tomcat 문서의 버전은 10.1.24이다. Architecture전반적인 Tomcat 아키텍쳐와 그 구성요소를 살펴보겠다. 크게 Server, Service, Engine, Host, Connector, Context로 구성된다.Tomcat은 Servlet 사양의 빠르고 효율적인 구현을 목표로 설계되었다. ServerTomcat 환경에서 Server는 전체 컨테이너를 의미한다. 즉 Server는 전체 Catalina 서블릿.. 개발 2024. 5. 16. 모던 리눅스 교과서 정리 (5장 ~ 8장) 5장. 파일 시스템리눅스 리소스의 대부분은 실제 파일이다.리눅스에서 파일로 취급되는 것도 존재하는데 바로 디바이스와 의사 디바이스가 그런 종류다.예를 들어 커널은 PID나 프로세스를 실행하는 데 사용되는 바이너리처럼 프로세스에 대한 특정 런타임 정보를 노출한다. 이 모든 것이 공통적으로 지니는 점은 파일 열기, 파일에 대한 정보 수집, 파일 작성 등과 같이 표준화되고 통일된 인터페이스다.리눅스에서는 바로 파일시스템이 이런 통일된 인터페이스를 제공한다.이 인터페이스와 리눅스가 파일을 바이트 스트림으로 최급한다는 사실이 더해져서, 구조에 대한 별다른 염려 없이 다양한 파일 유형을 지원하는 도구를 만들 수 있게 된다. 일반적으로 파일 시스템은 커널에서 제공된다.파일 시스템은 권한이 내장되어 있다. 소유권은 .. 독서 2024. 4. 27. 모던 리눅스 교과서 정리 (1장 ~ 4장) 모던 리눅스 교과서를 드디어 완독했다. 오로지 본인이 기억하고 싶고, 중요하다고 생각했던 부분을 정리할 예정이다. 리눅스가 운영체제이므로 운영체제에 대한 기초적인 내용(ex 시스템 콜 기본, 운영체제 기본)이 나오는데 이와 같은 분을 생략할 예정이다. 1장. 리눅스 소개 리눅스는 유닉스의 전통을 따라 기본적으로 리소스의 전역 보기(글로벌 뷰)를 지원한다. 리소스란 소프퉤어 실행을 지원하는데 사용할 수 있는 모든 것을 말한다. 예를 들어 하드웨어와 그 추상화(CPU, RAM, 파일), 파일 시스템, HDD, SSD, 프로세스, 디바이스나 라웉이 테이블 같은 네트워킹 관련 항목, 사용자를 나타내는 자격증명이 포함된다. 리눅스는 프로세스 ID를 사용해 프로세스를 식별한다. 동일한 PID를 가진 프로세스가 리눅.. 독서 2024. 4. 22. Git rebase 브랜치를 합치는 방법은 두 가지가 있다. 병합(merge)과 리베이스(rebase)다. 이번에는 커밋 순서를 재배열하는 리베이스에 대해 알아보겠다. Base 브랜치는 커밋 하나를 기준으로 새로운 작업을 진행할 수 있는 분리된 작업 경로를 말한다. 새로운 브랜치가 파생되는 커밋을 베이스라고 한다. 병합에서는 이를 공통 조상 커밋이라고 한다. 아래 그림에서는 커밋 2가 베이스이자, 공통 조상 커밋이다. Rebase 리베이스는 베이스 앞에 '다시'를 의미하는 re가 붙은 단어다. 파생된 브랜치의 기준이 되는 베이스 커밋을 변경하는 것이다. 그럼 브랜치의 베이스는 왜 변경하는 것일까? 커밋의 진행 모습을 단순화하기 위해서다. 브랜치가 많아지면 커밋을 관리하고 파악하기 어렵다. 꼬여 있는 기찻길처럼 단계별로 커밋.. Git 2024. 1. 21. Git 병합 (Fast-Forward 병합, 3-way 병합) 병합 프로젝트에서 main 브랜치가 존재한다. 그럼 다른 브랜치에서 작업을 하고 이를 main 브랜치에 반영해야 한다. 분리된 브랜치를 하나의 브랜치로 합치는 작업을 병합이라고 한다. 각각의 브랜치에서 수정된 내용을 하나의 브랜치로 병합한다. 과거 수동(노가다)으로 코드를 하나하나 바꾸는 것은 정말 어렵고 귀찮은 일이었다. 깃을 사용해 자동 병합이 가능해지며 개발자의 삶이 윤택해졌다. 깃의 자동 병합은 원본을 기준으로 두 파일의 변경 이력을 비교하고, 변경된 파일 내용이 발견되면 자동으로 수정된 코드 내용을 병합한다. 그러나 자동으로 병합이 불가능한 것도 존재하는데, 이를 충돌이라고 한다. 병합 방식 병합 방식으로는 크게 2가지가 있다. Fast-Forward 병합 3-way 병합 실습 환경을 구축해보겠.. Git 2024. 1. 18. 이전 1 2 3 4 5 ··· 29 다음 반응형