레이어 간 의존성 관리를 위해 ui와 service, repository마다 모두 다른 dto를 사용한다고 가정해보자.이 경우 dto와 dto간 변환할 때마다 귀찮은 과정을 거쳐야 한다. User를 예시로 들어보자.repository 레이어의 User Entity와 service 레이어의 UserDto를 서로 변환하는 방법은 다음과 같다.1. Dto 내에서 객체 변환 메소드 만들기User entity@Entity@Builder@AllArgsConstructorpublic class User { @Id @GeneratedValue(Strategy = GenetrationType.IDENTITY) private Long id; private String userId; pr..
백엔드 Backend/기본 개념
@Getter@NoArgsConstructor@AllArgsConstructor@JsonInclude(JsonInclude.Include.NON_NULL)public class UserResponseDto { private String name; private String address; List orders;}@JsonInclude는 자바 객체 -> JSON 데이터로 직렬화 할 때, 어떤 속성을 가진 객체를 직렬화하거나 하지 않을 지 지정한다. 클라이언트에게 null값을 전달해주지 않고, null인 데이터는 아예 JSON 데이터로 직렬화 하지 않고 전달하지 않을 때 @JsonInclude 어노테이션을 사용할 수 있다. ✅orders처럼 컬렉션을 가져오거나, 빈값이 있는 데이터가 많을 ..
Cloud Native Application특징1. CI/CD (지속적인 통합 / 지속적 배포)2. MicroServices3. DevOps- 개발조직 + 운영조직 통합 : 마이크로서비스에 문제가 발생했을 경우에 바로 수정해서 다시 배포하는 과정을 반복- 시스템 기획 -> 구현 -> 테스트 -> 배포 과정을 시스템 종료될때까지 무한 반복 -> 고객이 원하는 최상의 결과물 만드는 데 목적- 기존의 방식은 개발기간이 6~10개월정도로., 고객 요구사항/변경사항 등등은 필요할 때 마다 바로 반영/수정될 수 있도록 하는 구조- 클라우드 -> 서비스 구조를 작은단위로 분하랗여 더 자주 통합/테스트/배포 가능한 구조4. Containers (가상화)- 운영체제 위에 컨테이너 서비스를 작동 하고, 컨테이너에서는 공통..

메시지 큐는 분산 시스템에서 컴포넌트간의 데이터를 전달하는데 주로 사용되는 통신 방법입니다. (MSA에서도 중요한 역할)대량의 데이터를 분산 시스템에서 다룰 때 큰 시스템 개선 효과를 볼 수 있습니다. 특징1. 비동기 메시지 전달queue에 메시지를 넣고 수신자의 응답을 기다릴 필요 없이 다음 작업으로 넘어갈 수 있습니다. 2. 데이터 유실 방지HTTP 직접 통신이 아닌 queue를 사용하기 때문에, 수신자쪽의 서버에 문제가 생기더라도 데이터가 유실되지 않은 채로 보관이 가능합니다.피크시간에 발생하는 부하가 분산되기 때문에 장애에 유연하고 독립적인 설계가 가능합니다.이 때 , 메시지 전달 속도의 차이를 조절하면 시스템의 전체적인 성능이 향상될 수 있습니다. 3. 발신자(producer)/수신자(consu..
실시간 알림, 채팅과 같이 실시간으로 통신이 필요한 기능을 구현하기 위해선 어떤 방식을 사용할 수 있을까요?1. polling일정 주기를 가지고 서버의 API를 호출하는 방법입니다.기본적인 HTTP 통신을 기반으로 하기 떄문에, 호환성이 좋다는 장점이 있습니다. 하지만 업데이트 주기가 길 경우 실시간으로 데이터가 갱신되지 않고, 짧을 경우 갱신 사항이 없음에도 서버에 요청이 들어와 서버에 부하가 생길 수 있습니다. 2. long-polling업데이트가 발생할 때에만 서버에서 응답을 보냅니다.서버로 요청이 들어올 경우, 일정 시간동안 대기했다가 요청한 데이터가 업데이트되면 응답을 보냅니다.하지만 마찬가지로 업데이트가 빈번하게 일어난다면 연결을 위한 요청이 똑같이 발생해, 서버에 부하가 일어날 수 있습니다..
캐시재사용 가능성이 높은 데이터를 메모리(RAM)에 저장하여 DB보다 빠르게 접근하기 위해 사용됩니다.단순하거나 변경이 잘 되지 않고, 자주 조회되는 데이터가 캐싱하기 적합합니다.데이터베이스에 접근하지 않고 저장된 데이터를 조회함으로써, 불필요한 트래픽을 줄이고 서버의 부하를 줄입니다. ✅ 단점용량의 한계가 있기 때문에 사용자증가/트래픽 증가 시 DB 성능이 떨어지고(매 트랜잭션마다 디스크에 접근) 시스템 다운의 위험이 있습니다.캐시와 DB 두 곳에서 같은 데이터임에도 값이 다를 경우가 존재하게 되는 데이터 정합성 이슈 (데이터불일치)가 있습니다. 응답캐싱웹서버의 응답을 메모리에 캐싱하는 방법으로, 다음 중 하나를 사용합니다.1. Local Cache애플리케이션 서버의 로컬 인메모리(메모리/디스크)에 저..
JWT는 Json Web Token의 줄임말입니다.구조아래의 3가지로 구성되어있으며, 점으로 구분되는 데이터입니다.HeaderPayloadSignature 1. Header일반적으로 토큰 유형과 사용중인 서명 알고리즘(Hmac, Sha256,Sha512...)가 포함{ "typ" : "JWT" "alg" : "SHA256"} 2. Payload등록된 클레임과 개인 클레임 등으로 이루어짐.등록된 클레임(필수아님) : iss(발행자), exp(만료시간), sub(제목), aud(대상)개인 클레임 : 정보 공유를 위한 사용자 지정 클레임{ "iss" : "dallae.log" "sub" : "about Jwt" "exp" : "165489753" ... "username" : "dallae"..
기능을 작성하다보면, final 클래스, 메소드, 변수를 작성할 필요가 생깁니다.시스템의 불변성을 보장하기 위해서 사용되는 이 final 키워드는 왜 사용하는지 알아보겠습니다.final 클래스public final class ...외부에서 상속이 불가능합니다.즉, 자식클래스를 생성하여 클래스 로직을 변경하는 것을 방지하기 위해 사용됩니다.외부에서는 이 클래스를 상속할 수 없으므로, 오버라이딩이 불가능해져 고유성/불변성을 유지할 수 있습니다.final 메소드class A { final void method() {...}}외부에서 이 클래스를 상속할 경우, final로 선언된 메소드는 오버라이딩이 불가능합니다.자식클래스가 이 메소드를 그대로 사용하게 만들기 위해 사용됩니다.final 필드class A { /..
SSH Key는 private key와 public key의 쌍으로 이루어져 있습니다.public key로 접근하려는 서버에 대한 인증 및 응답을 사용하는 식별 방법입니다.즉 외부 서버가 public key를 가지고 서버에 접근하려고 할 때, 서버는 private key로 복호화하여 유효한 서버인지 판단할 수 있습니다. private key클라이언트(사용자)가 안전하게 보관public key기타 외부 서버(호스트)에 공유되는 key SSH Key 생성$ ssh-keygen 이렇게 생성된 public key를 필요한 호스트 서버의 authorized_keys에 등록하면 private key로 인증을 거칠 수 있습니다. ssh-agent비밀번호를 암호화하여 저장하는 key chain

예외 계층 파악하기✔️ Throwable최상위 예외✔️ 오류 (Error)오류는 메모리부족(StackOverflow, OutOfMemory)이나 심각 시스템 오류로 발생합니다.애플리케이션에서 복구가 불가능합니다.✔️ 예외 (Exception)예외는 개발자가 구현한 로직에서 발생한 실수나 사용자의 영향에 의해 발생합니다.오류와 달리 개발자가 미리 상황에 맞게 예외 처리를 할 수 있습니다.이 때, 지정한 예외 뿐만 아니라 하위에서 발생한 것까지 모두 처리됩니다.개발자가 예외를 미리 처리하지 못하면, WAS가 오류를 처리해 페이지를 반환합니다. (500/404 페이지 등) 1. 체크 예외 (Checked Exception)컴파일러가 체크하는 처리해야하는 예외로, 어플리케이션 실행 전에 확인할 수 있습니다.tr..