Backend 29

스프링부트와 JPA 활용 2

섹션 2,3 - API 개발 기본, 준비- API Controller에 엔티티를 직접 노출시키면 안되는 이유문제1) 엔티티의 내용이 변경되면 Controller가 작동하지 않을 수 있음. 즉, 1:1로 만들어놓은 스펙 자체가 바뀌는 게 문제임.문제2) 엔티티를 그대로 받으면, 개발자는 문서를 까보지 않으면 엔티티 필드 중 어떤 필드를 받아오는 작업인지 모름.=> 그래서 반드시 별도의 Dto를 만들어야 함 (장애방지, 여러 종류의 Request를 위해 구분하는 용도)+) 마찬가지로 반환할 때도 별도의 Dto를 만드는게 엔티티를 직접 노출시키지 않아도 되고 유지보수 하기 좋음 - 강사님의 Update 시 return 철학@Transactionalpublic void update(Long id, String ..

Backend/JPA 2025.07.28

Java to Kotlin 비교 및 정리

Lec 01. 코틀린에서 변수를 다루는 방법- 모든 변수는 var / val 을 붙인다. var = 변경 가능, val = 변경 불가능 (read-only)- 프린트할 때 기본으로 println을 사용한다.- 타입을 명시적으로 작성하지 않아도, 타입이 추론된다.- Primitive Type과 Reference Type을 구분하지 않아도 된다. => 프로그래머가 boxing / unboxing을 고려하지 않아도 되도록 Kotlin이 알아서 처리 해준다.- Null 이 들어갈 수 있는 변수는 타입 뒤에 ? 를 붙여주어야 한다. => 아예 다른 타입으로 간주된다.- 객체를 인스턴스화 할 때 new를 붙이지 않아야 한다.Lec 02. 코틀린에서 null을 다루는 방법코틀린에서는 인자에 null이 허용됨을 명시해..

Backend/Kotlin 2025.03.23

Kafka TIL

Kafka란분산 스트리밍 플랫폼이다. 주로 실시간 데이터 피드의 빅데이터 처리를 목적으로 사용된다.대용량 데이터 스트림을 저장하고 실시간으로 분석하거나 처리하는 데 중점을 둔다.Kafka의 기본 구성 요소메시지 (Message)- Kafka를 통해 전달되는 데이터 단위이다. ex) 로그 데이터, 이벤트 데이터- 메시지는 키, 값, 타임스탬프, 그리고 몇 가지 메타 데이터로 구성된다.  프로듀서 (Producer)- 메시지를 생성하고 Kafka에 보내는 역할을 한다.- 프로듀서는 특정 토픽에 메시지를 보낸다. 토픽 (Topic)- 메시지를 저장하는 장소이다. 메시지는 토픽에 저장되었다가 소비자에게 전달된다.- 토픽은 여러 파티션으로 나누어질 수 있으며, 파티션은 메시지를 순서대로 저장한다. 파티션 (Par..

Backend/MSA 2025.01.01

RabbitMQ TIL

RabbitMQ란메시지 브로커이다. 데이터를 송신자로부터 수신자에게 전달하는 중단 매개체 역할을 한다. - 비동기 처리 : 데이터를 비동기적으로 처리하여 시스템의 응답성을 높인다.- 부하 분산 : 여러 소비자에게 메시지를 분산시켜 시스템의 부하를 균형 있게 분산한다.- 내결함성 : 메시지를 안전하게 저장하여 시스템 장애 시 데이터 손실을 방지한다. RabbitMQ의 기본 구성 요소RabbitMQ는 AMQP 프로토콜을 사용한다.  메시지 (Message)RabbitMQ를 통해 전달되는 데이터 단위이다. ex) 사용자 등록 정보, 주문 내역 프로듀서 (Producer)메시지를 생성하고 RabbitMQ에 보내는 역할을 한다.ex) 웹 애플리케이션이 사용자 등록 정보를 RabbitMQ에 보내는 경우 큐 (Que..

Backend/MSA 2025.01.01

대규모 시스템 학습 전 개념 정리 TIL

동시 접속자와 초당 요청량(TPS)대규모 시스템을 설계할 때 얼마나 많은 사용자가 시스템을 사용할 것인지 파악하는 것이 중요하다.가장 중요한 것은 동시 접속자의 요청 수이다. TPS(Transactions Per Second)초당 처리되는 트랜잭션의 수를 나타내는 지표이다. 시스템이 얼마나 많은 요청을 동시에 처리할 수 있는지를 나타내며, 시스템의 처리 능력을 가늠할 수 있게 해 준다. 시스템이 TPS을 견딜 수 있도록 설계해야 한다!            그리고 예상치 못한 이벤트로 인해 시스템이 TPS를 견디지 못해 중단되었을 경우의 상황도 대비해야 한다.1. 애플리케이션의 수를 늘린다.2. 오류 상황에서 사용자가 대기할 수 있도록 대기열을 설정한다.3. 자동 스케일링을 통해 시스템의 자원을 동적으로 ..

Backend/MSA 2024.12.30

241223 장애 예방조치 개념 TIL

장애 예방 전략1) 클러스터링 (Clustering)클러스터링이란 여러 서버를 하나의 시스템처럼 구성하여, 고가용성과 로드 밸런싱을 제공하는 방법이다.클러스터 내의 각 서버는 동일한 데이터를 공유하고, 하나의 서버에 장애가 발생하면 다른 서버가 그 역할을 자동으로 수행한다.+) 고가용성 : 시스템이 지속적으로 가동 가능한 상태를 유지하는 능력 2) 로드 밸런싱 (Load Balancing)로드 밸런싱은 네트워크 트래픽을 여러 서버에 분산시키는 기술이다. 이를 통해 각 서버의 부담을 줄인다. 3) 지오 리던던시 (Geo-Redundancy)지오 리던던시는 데이터를 지리적으로 떨어진 여러 장소에 저장하여 한 지역에서 장애가 발생해도, 다른 지역에서 서비스를 지속할 수 있도록 하는 방법이다. 4) 성능 및 용..

241220 시큐어 코딩 개념과 실습 TIL

CORS (Cross-Origin Resource Sharing)애플리케이션을 개발한 후 방화벽에서 GET, POST, PATCH, PUT, DELETE 메서드를 허용하고,SPA로 개발된 프론트 페이지에 접속하여 요청을 했는데 403, 405 에러가 났다? -> CORS 적용 안했는지 의심해보기 CORS란?한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 리소스에서 접근할 수 있도록 브라우저에서 제공하는 보안 기능이다.웹 애플리케이션은 기본적으로 동일 출처 정책에 따라 동작하며, 이는 보안상의 이유로 다른 출처의 리소스 접근을 제한한다. 동일 출처 정책 (Same-Origin Policy) 이란?보안 메커니즘으로, 웹 브라우저의 출처와 동일한 출처의 리소스만 접근할 수 있도록 제한하는 것이다.예를 들..

Backend/MSA 2024.12.20

241219 모니터링 시스템 개념과 실습 TIL

모니터링 시스템 개념모니터링이란, 시스템의 성능, 안전성과 가용성을 실시간으로 관찰하고 측정하는 과정이다.모니터링은 시스템을 상태를 지속적으로 감시하고, 잠재적인 문제를 신속하게 발견해 대응할 수 있게 해준다.Spring Boot ActuatorSpring Boot Actuator는 Spring Boot 애플리케이션의 상태와 성능을 모니터링하고 관리할 수 있도록 다양한 엔드포인트를 제공하는 기능이다. 모든 엔드포인트를 노출하는 설정은, 실제 운영 환경에서 보안 위험을 증가시킬 수 있음. 필요한 엔드포인트만 노출하거나 따로 보안 설정을 해줘야 함. Spring Boot Actuator 실습 새로운 프로젝트를 생성하고, 의존성과 application.yml을 수정한다.spring.application.nam..

Backend/MSA 2024.12.19

241218 프로젝트 마무리 회고 TIL

2차 프로젝트가 마무리되었다!https://github.com/Sparta-Phoenix/logistics-platform GitHub - Sparta-Phoenix/logistics-platformContribute to Sparta-Phoenix/logistics-platform development by creating an account on GitHub.github.com 프로젝트 마무리 기념으로 개인적으로 아쉬웠던 점들을 간단히 기록해보고자 한다. 1) 캐싱을 더 잘 활용할 수 있었는데 아쉬웠다.시간관계상 필수 요구사항인 허브 단건 조회에만 캐싱을 적용했는데, 생각해보니 업체 관리자들도 정보를 빈번하게 조회할 것 같았고 목록 조회도 자주 일어날 것 같아서 업체 단건 조회와 페이징에도 캐싱을 적..

구글과 카카오 모빌리티 API 사용해 예상 이동 거리, 예상 시간 측정하기

0) 서론 현재 진행 중인 프로젝트에서 도로명 주소를 가지고 출발지와 도착지의 예상 이동 거리와, 예상 시간을 측정하는 기능 구현을 맡게 되었다.어떤 API를 사용할까 고민 하다가 앞선 Geocoding 구현 덕분에 구글 API KEY가 있는 상태였기 때문에, 일단 구글 Distance Matrix API 를 선택했다. 하지만 최종적으로는 카카오 모빌리티 API를 선택했다. 무슨 일이 있었을까? 1) API KEY 발급받기이전 위도 경도 작업을 하면서 앞선 포스팅에 설명해뒀기 때문에 여기선 설명을 생략한다. 2) Service 구성하기공식 사용 설명서에 들어가보면, 이동 거리와 시간을 구할 수 있는 방법이 다양하게 나와있다.나는 위도 경도를 사용할 것이기 때문에 공식 문서에서 아래와 같은 요청 예시를 활..