전체 글 55

클린 아키텍처(Clean Architecture)

클린 아키텍처를 알아보기 전에, 레이어드 아키텍처의 문제점에 대해 짚고 넘어가도록 하겠다.레이어드 아키텍처는 크게 도메인 패키지, 서비스 패키지, 웹 패키지로 구성되어있다.웹 패키지가 서비스 패키지에 의존하고, 서비스 패키지가 도메인 패키지에 의존하고 도메인 패키지는 영속성(JPA)에 의존하게 되는 구조이다. 여기서 레이어드 아키텍처의 문제점은, 영속성 레이어가 기반이 된다는 것이다. 이게 무슨 말이냐면 DB 구조나 세부사항이 도메인, 서비스, 웹 통틀어서 영향을 줄 수 있다는 것이다.레이어드 아키텍처의 JPA Entity 클래스를 보면 영속성 레이어의 세부사항이 많이 노출되어있다. 기본적으로, @Entity, @Column, @GeneratedValue 등 jakarta.persistence의 어노테이..

Architecture 2024.08.12

계층형 아키텍처(Layered Architecture)

아키텍처란?IEEE 국제 표준에서는 소프트웨어 아키텍처의 정의를 다음과 같이 설명한다.구성요소들간의 관계, 환경, 설계와 발전을 관리하는 원칙으로 이루어진 시스템의 근본적인 구조클래스, 파일, 컴포넌트, 모듈 등 코드들이 어떻게 연관되어있고, 상호작용하는지 설계하는 것이다.소프트웨어 아키텍처의 목표는 소프트웨어의 제작과 유지보수를 보다 쉽게 하는 것, 즉 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화하는 것이다.  아키텍처의 구성소프트웨어는 크게 도메인과 인프라스트럭처로 나누어져있다. 도메인이란 소프트웨어로 해결하고자 하는 문제 영역을 말하고(번역앱이라면 번역, 온라인 쇼핑몰이라면 판매 프로세스가 도메인) 도메인은 서비스의 본질로, 자주 바뀌지 않는다. 인프라스트럭처는 도메인을 소프트웨어..

Architecture 2024.08.05

Uncaught TypeError: Illegal invocation

ajax에서 API로 Multipart 파일을 보내려는 중 발생한 오류이다. 아래는 문제의 내 코드이다.$.ajax({ url: '/api/exampleApi', // API 엔드포인트 URL type: 'POST', // 요청 방식 (GET, POST 등) data: formData, // 전송할 데이터 contentType: false, // 전송할 데이터 타입 dataType: false, success: function(response) { // 요청이 성공했을 때 실행할 코드 console.log('Success:', response); }, error: function(jqXHR, textStatus, errorThrown) ..

Trouble Shooting 2024.07.02

Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.io.File` from Object value (token `JsonToken.START_OBJECT`) 오류 해결

js에서 ajax로 api를 호출할 때 json 형식으로 보내고자 했다. 그러나 api 호출 시 오류가 발생하였다.Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type java.io.File from Object value (token JsonToken.START_OBJECT)무언가 직렬화할 때 나는 문제인것같았다.아래는 내 코드이다.const config = files[0];const param = { name: $("#nameVal option:selected").text(), config: config, ra..

Trouble Shooting 2024.07.02

스프링에서의 WebSocket 설정과 SockJS

WebSocketws프로토콜을 기반으로 클라이언트와 서버 사이에 지속적인 완전 양방향 연결 스트림을 만들어주는 기술이다. 사전 지식폴링(Polling)>- 단방향- 클라이언트 -> 서버- 클라이언트에서 주기적으로 서버에 업데이트 있는지 확인하는 요청을 보냄 서버센트 이벤트(SSE; Server Sent Event)>- 단방향- 서버 -> 클라이언트- 한 번 연결하면 서버가 클라이언트에 지속적으로 데이터를 보냄- 클라이언트에서 서버로 데이터를 보낼 수 없음 웹 소켓(WebSocket)>- 양방향- 서버 클라이언트- 한 번 웹 소켓이 연결되면 계속 연결된 상태로 있어서 따로 업데이트가 있는지 요청을 보낼 필요가 없음- node의 모듈 및 라이브러리: ws, Socket.IO WebSocket 객체 생성하기..

Web 2024.06.18