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
오늘의 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 |