[TIL] Spring Boot 로컬과 서버 환경 분리 | 정적 팩토리 메서드

2024. 8. 10. 01:18·TIL

 

8/9 진행사항

✅ 알고르즘 2문제

✅ 챕터1 과제수행

 

 

로컬과 서버 환경 분리

 

 

로컬&개발 환경과 운영환경을 분리하여 local 주소와 배포 주소로 접근하는 것을 목표로 한다.

 

application.yml

spring:
  profiles:
    default: dev
  application:
    name: product-service
  jpa:
    properties:
      hibernate:
        show_sql: true
        format_sql: true
        use_sql_comments: true
        highlight_sql: true
server:
  port: 19093
management:
  tracing:
    sampling:
      probability: 1.0

application.yml에는 공통된 설정을 넣어주었고, spring.profiles.default를 dev로 설정한다.

spring.profiles.default는 spring.profiles.active가 설정되지 않은 경우에만 적용된다.

애플리케이션이 시작될 때 활성화된 프로파일이 지정되지 않은 경우 'dev' 프로파일이 기본적으로 활성화된다.

 

Run Configuration에서 Active profiles를 설정하면 spring.profiles.default 설정은 무시된다.

 

application-dev.yml

spring:
  config:
    activate:
      on-profile: dev
  datasource:
    url: jdbc:mysql://localhost:3306/msa_exam
    username: root
    password: #password
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: create
  data:
    redis:
      host: localhost
      port: 6379
      username: default
      password: systempass
eureka:
  client:
    service-url:
      defaultZone: http://localhost:19090/eureka/
management:
  zipkin:
    tracing:
      endpoint: "http://localhost:9411/api/v2/spans"

개발 환경에서 접속되는 url들을 설정해 두었다.

spring.config.activate.on-profile은 없어도 잘 동작한다.

설정 분기를 명확하게 하고 싶을 때 쓰면 될 거 같다.

 

application-prod.yml

spring:
  config:
    activate:
      on-profile: prod
  datasource:
    url: jdbc:mysql://{rds endpoint}:3306/msa_exam
    username: admin
    password: # password
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: none
  data:
    redis:
      host: # redis host
      port: # redis port
      username: # username
      password: # password
eureka:
  client:
    service-url:
      defaultZone: # eureka url
management:
  zipkin:
    tracing:
      endpoint: # zipkin endpoint

application-prod는 local url -> 배포 url로 바꿔주기만 했다.

 

 

정적 팩토리 메서드 (static factory method)

 

정적 팩토리 메서드는 인스턴스 생성을 위한 대안적인 방법으로

생성자 대신 클래스 내 정적 메서드를 제공해 객체를 반환한다.

 

기존 entity -> dto 변환 작업을

생성자를 사용하는 방법에서

정적 팩토리 메서드를 사용하는 법으로 변경해 주었다.

 

생성자 사용

public OrderResponseDto(Order order) {
    this.orderId = order.getOrder_id();
    for(OrderProduct orderProduct : order.getProduct_ids()){
    	product_ids.add(orderProduct.getProduct_id());
	}
}

 

정적 팩토리 메서드 사용

public static OrderResponseDto fromEntity(Order order){
        return OrderResponseDto.builder()
                .orderId(order.getOrder_id())
                .product_ids(order.getProduct_ids().stream()
                        .map(OrderProduct::getProduct_id)
                        .collect(Collectors.toList()))
                .build();
    }

 

생성자를 사용하면 클래스이름과 같아야 하기 때문에 다양한 이름을 사용할 수 없지만

정적 팩토리 메서드를 사용하면 메서드의 목적이 더 명확해지고 가독성이 높아진다.

ex) OrderResponseDto.fromEntity : Order Entity에서 OrderResponseDto가 되는 메소드

 

또한, 생성자를 사용하면 항상 새로운 인스턴스를 생성해야 되는 단점이 있다.

정적 팩토리 메서드를 사용하면 인스턴스 생성을 제어하여 인스턴스 캐싱이나 싱글톤 패턴 구현에 유용하다.

 

https://f-lab.kr/insight/java-static-factory-methods

 

자바의 정적 팩토리 메소드와 그 장점

자바에서 정적 팩토리 메소드의 개념, 장점 및 사용 예시에 대해 설명하는 글입니다.

f-lab.kr

 

 


 

오늘의 tmi)

분명 이것저것 많이 한 거 같은데.. 실제 결과물은 적은 거 같은 느낌

벌써 2주가 갔다 10 to 16 이상으로의 추가 학습이 필요한 과정이라고 생각한다.

ci/cd는 일요일에 시간 나면 해야겠다,, 내일은 쉴래

msa_exam은 이제 그만 건들자,, 건들수록 수정하고 싶은 게 계속 보인다 끝이 안 날 거 같음ㅋㅋ

과제 요구사항에만 집중하는 걸로~!

 

'TIL' 카테고리의 다른 글

[TIL] RabbitMQ 이해하기  (0) 2024.08.13
[TIL] Docker란? | FeignClient DIP | Gateway FeignClient 순환참조  (0) 2024.08.13
[TIL] Spring Boot 프로젝트에 캐싱 적용하기  (0) 2024.08.09
[TIL] 양방향 연관관계 매핑 | Feign client Error Decoder  (0) 2024.08.08
[TIL] Zipkin이란? | Redis란?  (0) 2024.08.06
'TIL' 카테고리의 다른 글
  • [TIL] RabbitMQ 이해하기
  • [TIL] Docker란? | FeignClient DIP | Gateway FeignClient 순환참조
  • [TIL] Spring Boot 프로젝트에 캐싱 적용하기
  • [TIL] 양방향 연관관계 매핑 | Feign client Error Decoder
dev_ajrqkq
dev_ajrqkq
알고리즘 천재가 될 거야
  • dev_ajrqkq
    기록이 자산이다
    dev_ajrqkq
  • 전체
    오늘
    어제
    • 분류 전체보기 (146) N
      • Front-end (0)
      • Back-end (11)
        • Spring (1)
        • Java (8)
      • CS (9)
        • 데이터베이스 (5)
        • 네트워크 (4)
      • Algorithm (79) N
      • 이것저것 (0)
      • 버그잡기 (1)
      • TIL (37)
      • 후기 (1)
      • 취준 (0)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      티스토리챌린지
      오블완
      TypeScript
      코딩테스트준비
      Til
      개발자취업
      항해99
      99클럽
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.2
    dev_ajrqkq
    [TIL] Spring Boot 로컬과 서버 환경 분리 | 정적 팩토리 메서드
    상단으로

    티스토리툴바