@Service와 @Repository 애너테이션은 스프링 프레임워크에서 각각 서비스 계층과 데이터 접근 계층을 표현하는 데 사용된다. 이 두 애너테이션은 기능적으로 차이가 있을 뿐만 아니라, 내부 구조와 목적에서도 차이를 보인다. 결론부터 말하자면 두 애너테이션 모두 내부적으로는 @Component 애너테이션을 포함하고 있다. 그러나 @Repository는 추가적으로 데이터 접근 예외를 일관된 방식으로 처리하기 위한 예외 변환 기능을 제공한다. 이를 통해 애플리케이션은 더 구조적이고 명확하게 계층을 나눌 수 있으며, 각각의 역할에 맞는 클래스를 정의할 수 있다. 이러한 구분은 코드의 가독성과 유지보수성을 높이는 데 기여한다. @Service @Service 애너테이션은 비즈니스 로직을 구현하는..
@Controller와 @RestController 애너테이션은 스프링 프레임워크에서 웹 애플리케이션 개발 시 주로 사용되는 애너테이션이다. 이 두 애너테이션은 모두 클래스를 스프링 MVC 컨트롤러로 선언하지만, 그 동작 방식에는 중요한 차이가 존재한다. @Controller @Controller 애너테이션은 스프링 MVC의 전통적인 컨트롤러를 정의하는 데 사용된다. 이 애너테이션은 주로 뷰(View) 템플릿을 반환할 때 사용된다. @Controller 클래스 내의 메서드는 주로 JSP, Thymeleaf와 같은 템플릿 엔진을 통해 HTML 페이지를 반환한다. 뷰 리졸버(View Resolver)를 통해 뷰 이름을 해석하고 해당하는 HTML 페이지를 렌더링한다.@Controller는 기본적으로 뷰 리..
목차 지난 글에서, 도커로 카프카를 실행하고 자바 프로젝트의 yml파일을 아래와 같이 구성했다. spring: kafka: topic: myTopic: test-topic consumer: bootstrap-servers: localhost:9092 group-id: test auto-offset-reset: earliest producer: bootstrap-servers: localhost:9092 이번 글에선 위 설정을 바탕으로 실제 프로듀서와 컨슈머를 구현한 뒤, 간단한 사칙연산을 구현해 보겠다. 들어가기 전에 먼저, 위 설정은 보안과 관련된 부분이 전부 제거된 상태이기 때문에 MSK 사용 시 해당 설정을 추가해야 한다. KafkaProducerConfig 먼저 프로듀서에 대한 설정이다. 굉장히 ..
목차 한 달쯤 전에 올렸던 글에서, 야심 차게 MSK를 도입하겠노라고 선언을 했었다. [Cloud]Java 17 + WebFlux 환경에 AWS MSK 도입하기(1) - MSK? [Cloud]Java 17 + WebFlux 환경에 AWS MSK 도입하기(1) - MSK? 목차 Apache Kafka 아파치 카프카는 그 유명한 링크드인에서 개발해 11년에 공개한 오픈소스 메시지 브로커 프로젝트이다. Message Broker 오픈소스는 그렇다 치고 메시지 브로커라는 단어를 처음 보니 gnidinger.tistory.com 그 이후 이리 구르고 저리 구르다가 알게 된 사실은, 로컬 환경에서 MSK로 접근하는 건 불가능한 것은 아니지만 쉽지 않다는 것. 가장 쉽게 MSK에 접근하는 방법은 같은 VPC안에 EC..
[WebFlux]자주 사용하는 연산자 정리(1) [WebFlux]자주 사용하는 연산자 정리(2) - buffer [WebFlux]자주 사용하는 연산자 정리(3), 그리고 [WebFlux]자주 사용하는 연산자 정리(4) + 목차 마지막으로 연산자를 정리한 게 벌써 거의 세 달 전이다. 회사에 들어와 웹플럭스로 개발을 하며 정리하고 싶은 건 산더미 같았지만 다른 공부할 것이 너무 많고 바쁜 데다가 프로젝트까지 겹쳐 전혀 정리를 하지 못했다. 그래서 오랜만에 돌아온 연산자 정리 시간. 웹플럭스 연산자 사전이라도 있으면 좋겠다. defer() defer 연산자는 Mono와 Flux 둘 모두에서 사용가능한 연산자이다. 이 연산자는 리액티브 프로그래밍에서 지연 평가(Lazy Evaluation)를 수행하기 위한 연..
작은 프로젝트를 개발하면서는 만날 일이 없지만, 의외로 회사에서 일하다 보면 3분이 넘는 요청을 처리해야 하는 경우가 종종 있다. 스프링 부트의 경우, application.yml에 명시적인 타임아웃 설정이 없다면 연결 타임아웃은 기본 30초, 읽기 타임아웃은 기본적으로 무제한으로 설정된다. 하지만 AWS를 이용해 배포를 하는 경우, 특별히 설정을 해주지 않으면 60초 만에 타임아웃 에러가 뜨는데, 이런 경우 .yml 파일에 명시적으로 타임아웃을 길게 적어도 해결되지 않는 것을 확인할 수 있다. 해결 방법은 AWS의 어느 서비스를 사용하느냐에 따라 다르겠지만, 나의 경우 EC2, ELB, Route53을 사용하고 있다. 이런 경우 해결책은 생각보다 허무한데, 우선 AWS 콘솔에 로그인한 뒤, EC2에서 ..
[WebFlux]자주 사용하는 연산자 정리(1) [WebFlux]자주 사용하는 연산자 정리(2) - buffer [WebFlux]자주 사용하는 연산자 정리(3), 그리고 목차 WebFlux Operators [WebFlux]자주 사용하는 연산자 정리(1) [WebFlux]자주 사용하는 연산자 정리(2) - buffer [WebFlux]자주 사용하는 연산자 정리(3), 그리고 글의 순서는 연산자의 중요도나 로직의 흐름과는 아무 관련이 없다. 그저 내가 코드를 읽다가 마주친 순서를 마구잡이로 적어놓은 메모장에 근거할 뿐. 글 제목에 '+'가 붙어있는 이유는 연산자가 아니더라도 처음 봤거나 알아야 할 것 같은 경우라 판단이 들면 이 글에 같이 추가해 버렸기 때문이다. 굳이 연산자와 그 외 클래스를 나누어야 할..
목차 평소에 관성적으로 써오면서도 정확히 무슨 역할을 하는지 몰랐던 애너테이션 몇 개를 정리하고 넘어가려고 한다. 대상은 아래와 같다. @Lazy @LazyCollection @JsonManagedReference @JsonBackReference @JsonIgnoreProperties @JsonProperty @Lazy 스프링 프레임워크를 사용하면 소프트웨어 시작시 애플리케이션 컨텍스트 로드와 함께 등록된 모든 빈들이 생성된다. 따라서 코드의 규모가 커지고 빈의 개수가 많아질수록 필연적으로 메모리 점유율이 올라가고 시작시간이 느려질 수밖에 없는데, @Lazy는 이런 문제를 조금이라도 해결하기 위해 스프링 프레임워크에서 지원하는 애너테이션이다. 해당 애너테이션을 붙인 빈은 자동으로 지연로딩(Lazy Lo..
[WebFlux]자주 사용하는 연산자 정리(2) - buffer [WebFlux]자주 사용하는 연산자 정리(3), 그리고 [WebFlux]자주 사용하는 연산자 정리(4) + 목차 Method vs. Operator 별생각 없이 메서드나 연산자라는 단어를 마구 뒤섞어 쓰다가 의문이 들었다. 같은 뜻의 단어를 두 개나 사용할 필요가 있을까? 하고. 해서 연산자 정리도 할 겸 아주 얕게 알아보았는데, 결론부터 말하면 둘은 다른 개념이지만 아주 남남은 아니다. 요약하면 아래와 같다. 메서드(Method) - 클래스나 객체 내부에 정의된 함수. Mono와 Flux 역시 내부에 많은 메서드를 가지고 있음 연산자(Operator) - 실제 연산에서 사용되는 메서드. 스트림의 데이터 처리를 연산이라고 부르기 때문에 붙..
원래 계획은 리액티브 스트림에 이어서 모노, 플럭스까지 정리하는 거였지만, 하나도 모르는 내가 한 번에 몰아 정리하기는 불가능하다는 판단이 들어 글을 나누었다. 읽고, 실습해도 이상하게 개념이 잡히지 않는 웹플럭스, 쪼개서 알아보자. Reactive Streams 리액티브 스트림은 비동기/논블로킹 처리를 위한 스트림 기반의 프로그래밍 모델이다. 또한 데이터 생산자와 소비자 사이에서 백프레셔를 지원해 데이터의 흐름을 제어할 수 있으며, 이는 리액티브 선언문에 쓰여있는 대로 병목현상이나 예기치 못한 소프트웨어의 정지를 방지한다. 리액티브 스트림의 탄생 이전에는 라이브러리마다 다른 방식으로 같은 목적의 프로그램을 구현해야 했으며, 2013년 넷플릭스와 레드햇을 위시한 기업들이 공동으로 개발하며 표준화 작업을 ..
- Total
- Today
- Yesterday
- 유럽
- 야경
- 중남미
- 파이썬
- 남미
- BOJ
- 여행
- 맛집
- 유럽여행
- 기술면접
- java
- Python
- 알고리즘
- RX100M5
- a6000
- 동적계획법
- 세모
- Backjoon
- 스트림
- 세계일주
- 백준
- 세계여행
- 면접 준비
- spring
- 리스트
- Algorithm
- 칼이사
- 스프링
- 지지
- 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |