We will find a way, we always have.

-interstellar

스프링 9

[Spring] 스프링 빈 프로퍼티 애노테이션 @Profile, @Order

스프링 빈 프로퍼티 애노테이션스프링 빈이란?스프링 빈은 스프링 IoC 컨테이너에서 관리하는 컴포넌트이다. IoC는 Inversion Of Control의 약자로 제어의 역전을 의미한다.이는 프로그래머가 작성한 프로그램의 흐름 제어를 다른 무언가에게 위임하는 디자인 패턴이다.스프링 빈을 등록한다는 것은 프로그래머가 작성한 객체의 생명 주기 관리를 스프링 프레임워크에게 넘긴다는 것이다.빈을 등록하는 방법으로는 @Component 애노테이션을 사용하여 컴포넌트 스캔을 통해 자동으로 등록하는 방법과 설정 클래스에 @Configuration 애노테이션을 붙여 @Bean 애노테이션을 통해 수동으로 등록하는 방법이 있다.이 외에도 등록하는 방법이 여럿 있지만 자주 사용되는 방법은 아니다. 이번 글에서 소개할 내용은..

Spring 2024.11.14

[독서] 자바 / 스프링 개발자를 위한 실용주의 프로그래밍 - 4

스프링과 객체지향 설계6. 안티패턴6.1 스마트 UI스마트 UI 패턴은 에릭 에반스(Eric Evans)의 도메인 주도 설계에서 소개되어 유명해진 패턴이다. 스마트 UI란 시스템의 UI레벨에서 너무 많은 업무를 담당하는 것을 말한다.  스마트 UI는 데이터 입출력을 UI 레벨에서 처리스마트 UI는 비즈니스 로직도 UI 레벨에서 처리스마트 UI는 데이터베이스와 통신하는 코드도 UI레벨에서 처리 백엔드 개발자에게 UI, 즉 의사소통하기 위해 사용되는 인터페이스가 바로 API이다. 그리고 컨트롤러(Controller)는 API를 만드는 컴포넌트이다. 그렇기에 컨트롤러는 스프링에서 UI를 만드는 도구라고 볼 수 있다. 스프링에서 스마트 UI는 컨트롤러의 핸들러 메서드에 지나치게 많은 로직이 들어가 있는 경우를 ..

카테고리 없음 2024.11.04

[Spring] 우리집을 못 찾겠군요 (feat: @RestControllerAdvice, @Order)

배경지식우리 코딩해듀오는 예외 상황을 좀 더 구체적으로 표현하고, 또 테스트도 정확하게 하고자 커스텀 예외를 사용하기로 컨벤션을 정했다. 그리고 각 도메인 별로 패키지를 나누어 각 패키지 마다 대빵 예외가 있고, 이 대빵 예외를 상속하는 세부 예외들이 있었다. @RestControllerAdvice도 각 패키지 안에 들어가 대빵 예외들을 잡아주고 common 패키지에선 최상위 예외인 Exception을 잡아주는 구조였다.    초반에는 각 도메인의 대빵 예외가 CoduoException이라는 찐대장 예외를 상속하는 구조였다가 너무 깊은 상속구조를 갖는 것 같아 CoduoExcpetion은 제거하였다.   문제 상황AccessCode로 페어룸을 찾는데 실패하면 PairRoomNotFoundException..

Spring 2024.08.18

[Spring] 액추에이터 Actuator

프로덕션 준비 기능지금까지 미션을 하면서 열심히 돌아가는 쓰레기를 목표로 코드를 짜고 그 다음에 열심히 또 리팩터링을 해 클린코드로 만들어 나갔다. 하지만 이제는 비즈니스 요구사항만 충족할 게 아니라 서비스에 문제가 있는지 없는지 모니터링해야 한다.   프로덕션을 운영 환경에 배포할 때 준비해야 하는 것들이 있는데 이들을 프로덕션 준비 기능이라고 한다. 지표(metric), 추적(trace), 감사(auditing)모니터링 애플리케이션이 잘 살아있는지, 커넥션 풀이 얼마나 사용되고 있는지 등을 확인할 수 있다.  액추에이터 의존성 추가 스프링 프로젝트에 액추에이터를 설정하려면 아래처럼 의존성을 추가해주면 된다.   implementation 'org.springframework.boot:spring-bo..

Spring 2024.08.05

[Spring] 애플리케이션과 테스트 동시에 실행하기(RestAssured 포트설정)

레벨2에선 이제 스프링을 사용하기 시작했다.멋들어지게 스프링을 사용하고 요구 사항을 만족하여 테스트를 돌려봐도 다 잘 돌아갔다. 하지만 애플리케이션을 띄우고 테스트를 실행하면 에러가 발생했다.   왜일까 문제 해결을 위해 고민해보자.  🙋‍♂️: 애플리케이션을 띄우지 않고는 테스트가 성공했으니, 테스트를 돌릴 때마다 애플리케이션을 종료하고 테스트를 돌리면 되지 않나요? 👨‍💻: 애플리케이션을 종료하면 안되는 상황이거나 애플리케이션을 재가동 시킬 때 많은 시간이 소모된다면? 🙋‍♂️: 흠... 어쩔 수 없네요. 다른 방법을 찾아보죠. 에러 로그를 쭈욱 내려다보면    org.springframework.boot.web.server.PortInUseException 이라고 다시 말해 포트는 이미 사용..

Spring 2024.05.04

[Spring] @ResponseBody vs ResponseEntity

서론스프링을 사용할 때 컨트롤러에서 직렬화할 데이터를 반환할 때 @ResponseBody를 사용할 지 ResponseEntity를 사용할 지 토론이 이어졌다.무엇을 사용하는게 좋을 지 살펴보자.본론@ResponseBody @ResponseBody는 스프링 버전 3.0에 등장한 녀석이다. 이 녀석을 사용한다면 반환값을 HttpMessageConverter를 통해 응답 바디로 직렬화할 수 있다.    위 코드는 스프링 @ResponseBody의 코드이고 아래는 @ResponseBody 사용 예시이다.  /reservations 로 GET 요청이 올 때 동작하는 메서드인데 @ResponseBody 사용방법이라고 해놓고 @ResponseBody 애노테이션은 보이지도 않는다. 무슨일인걸까??!!! 정답은 @Res..

Spring 2024.04.21

[Spring] query dsl Q클래스 파일 위치 설정 (스프링 버전 3.2 )

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화강의를 듣는 도중 마지막 부분에서 query dsl 도입을 하기 위해 build.gradle 파일을 설정하는데, 스프링이 버전업 되면서 기존 코드로는 설정이 되지 않아 문제가 발생하였다. 제공해주신 3.x 버전용 build.gradle 파일에서도 그래들 리프레쉬중 오류가 나거나 빌드 오류가 발생하거나 겨우 컴파일 성공하여도 Q 클래스가 main.java.generate 에 위치해있는 게 아니라 어디 저 멀리 build.generated 에 가있어 자바 프로젝트 내에서 import 가 되지 않는 문제들이 있었다. 해결 방안은 일단 컴파일 성공하는 단계에서 Q 클래스 파일 생성 위치를 알맞게 설정하는 것이다. plugins { id 'java'..

[디자인 패턴] 디자인 패턴 (feat: 스프링)

디자인 패턴 Design Pattern 디자인 패턴이란 소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 일반적인 해결책이다. 디자인 패턴의 분류 GoF(Gang of Four)의 디자인 패턴은 크게 생성 패턴, 구조 패턴, 행위 패턴으로 분류된다. 생성 패턴 (Creational Pattern) 생성 패턴의 목적 클래스의 캡슐화를 통해 코드의 유연성과 재사용 가능성을 향상시키는 패턴 생성 패턴의 예 추상 팩토리 (Abstract Factory) 빌더 (Builder) 팩토리 메서드 (Factory Method) 프로토타입 (Prototype) 싱글턴 (Singleton) 구조 패턴 (Structural Pattern) 구조 패턴의 목적 클래스와 객체를 조합하여 더 큰 구조를 만드는 패턴 인터페이스..