한이음 프로젝트 11

Entity <-> DTO 빌더 로직은 어디에 넣어야할까??

객체지향을 신경 쓰며 개발하다 보니, get을 쓰게 되면 이게 맞나.. 고민하고 이 메서드가 이 객체에게 책임이 있는가.. 쓰이는 게 맞나.. 고민하게 된다. 지금 닥친 문제는 Builder에서 나타난다. 고민사항 우리는 서비스와 controller에 Entity를 주고 받지 않고 , DTO를 사용한다. 그렇다면 보통 Entity를 DTO로 변환하는 과정이 추가되는데 이 과정에서 보통 Builder를 사용한다. 다음과 같은 세 가지 버전이 있을 것 같다. 서비스에 Builder가 나타난 ver 서비스 안에 builder가 보이는 로직인데 , 이는 중복 코드도 많아지고, service에 트랜잭션 순서만 드러나야지 이렇게 메서드가 들어가는 건 지양해야 할 듯싶어서 객체에게 메서드로 빼고 싶었다. @Trans..

[한이음 프로젝트]OAuth2 - Google 구현(+Spring Security 동작 원리)

google Oauth2를 구현해보겠다. 1. 일단 google에 사용자 인증 정보를 등록한 뒤, 정보를 받아온다.(이 부분은 구글링을 하면 더 자세하게 많이 나온다) 2.build.gradle spring-security Spring Security는 스프링 기반의 어플리케이션 보안을 담당하는 프레임워크입니다. Spring Security를 사용하면 사용자 인증, 권한, 보안처리를 간단하지만 강력하게 구현 할 수 있습니다. implementation 'org.springframework.boot:spring-boot-starter-security' jwt 모듈 implementation 'io.jsonwebtoken:jjwt-api:0.11.5' implementation 'io.jsonwebtoken..

[한이음] 스프링 AWS S3 파일 업로드 및 controller 에러 해결

파일 업로드 기능을 구현하려고 했었는데 멘토님이 AWS S3를 사용하시면 된다고 조언을 해주셨다. 오늘은 S3를 이용하여 연결하는 작업만 작성하려고 한다. S3버킷 생성 같은 건 다른 게시물을 참조하시길.. 1. 기본설정 build.gradle implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' application.yml cloud: aws: s3: bucket: //aws에 생성한 버킷 이름 적기 credentials: access-key: //aws 버킷 access key secret-key: //aws 버킷 secret-key region: static: ap-northeast-2 auto: false..

[한이음] MSA 프로젝트(5) - Spring Cloud Gateway 사용하기

이번에는 MSA에서 중요한 부분인 gateway를 구현하고자 한다. 사실 gateway도 담당자가 있긴 하지만 내가 구현해보았다, implementation 'org.springframework.cloud:spring-cloud-starter-netflix-zuul' 원래는 zuul로 구현하려 했는데 계속 다음 에러가 떠서 보니깐... 지원 안 하는 듯 아니 근데 다시 하니깐 되네 뭐람.. java - Can't import Netflix Zuul in Intellij Idea - Stack Overflow Can't import Netflix Zuul in Intellij Idea I am trying to follow a tutorial and build an API Gateway for my mic..

[한이음] MSA 프로젝트(4) - feign client 적용하기

스프링 환경에서 간편하게 외부 api를 호출할 수 있는 라이브러리인 feign client를 사용해보도록 하겠습니다. restTemplate 보다 훨씬 더 간편하게 api를 호출 할 수 있습니다. 유레카 서버에서 주기적으로 다른 서비스들의 정보를 가져오고 이를 로컬에 캐싱한다고 하였습니다. 그리고 이 정보를 이용하여 서비스 고유명만으로 통신이 가능합니다. 수정함(2022.08.16) 환경 설정 implementation 'org.springframework.cloud:spring-cloud-starter-openfeign' build.gradle에 spring cloud library를 설치해준다 (이거 안 해서 삽질함..) ext { set('springCloudVersion', "2021.0.3") ..

[한이음]Controller는 SRP(단일 책임 원칙)을 지키는걸까..?

최근 다음과 같은 로직의 코드를 짰다. 처음에 리팩토링이 아니라 통짜로 코드를 짜서 멘토님께서 리팩토링을 하라고 하셨다. 이 일은 내게 엄청난 고민을 안겨주었고 사실 해결은 못했지만.. 일단은 생각을 기록하는 의미로 기록해놓는다.! 구현하고 싶은 것 새로운 평가 등록 -> 기존 등급 내역을 불러옴 -> 새로운 평가를 반영 -> 새로운 등급 산출 -> 등급 갱신 참고 사항 새로운 평가란? : 아이디, 성실성, 적극성, 기술성, 협동력, 참여도 등급 테이블 구성?: 총 평가 인원, 아이디, 총합, 평균값, 등급(Gold, Silver, Bronze, Black) 1. 새로운 평가 등록(각 5점씩 5가지 항목) ex) 5 5 5 5 5 = 25점 2. 등급 테이블에서 총 평가 인원을 불러오기 총 평가 인원 +..

[한이음]MSA프로젝트(3)- 서비스 호출 구현

이 게시물은 5. [MSA 구현 퀵스타트] 서비스 디스커버리 초간단 구현 (tistory.com)의 글을 참조하며 본인의 코드에 적용하며 작성하는 글입니다. 본격적인 환경 설정을 끝냈으면 유레카 서비스를 하나 만들자 제공되는DiscoveryClient 객체를 이용하여 유레카 서버에 등록된 서비스 목록을 가져오는 API를 구현해본다. 제공하려는 서비스(bbl-career)의 하위 패키지로 Erueka 전용 패키지를 생성해주고 안에 Service와 Controller를 하나 만들어준다. 파일 구조는 다음과 같다. 1. 유레카 서버에 등록된 서비스 목록을 가져오는 API (/service) 1. 코드 작성 DiscoveryClient는 유레카 클라이언트에서 제공하는 객체로서 서비스들의 정보를 찾아서 제공해주는..

[한이음] MSA프로젝트- (2) Eureka 서버&클라이언트 설정

약 3달(?)정도 나는 스프링부트를 통해 서비스를 열심히 만들었다. 그래서 이제 이걸 가지고 본격적인 MSA 구축을 해보려고 한다. 첨부된 이미지 같은건 한이음 팀원 분의 코드인데 허락을 구하여 사용한다. 1. 유레카 서버 MSA를 위해 서비스 디스커버리로 유레카 서버를 만들어줘야 한다. 다음 의존성을 다운 받아준다 유레카 서버 - eureka-server implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server' 유레카 서버는 서비스들과 별개의 모듈을 생성해주어야한다. 그 후 application.yml 속성을 정의해주어야한다. server: port: 8761 // 접속할 포트 번호 spring: appli..

[한이음] CI/CD 와 S3

S3란? S3는 AWS에서 제공하는 일종의 파일 서버이다. 이미지 파일을 비롯한 정적 파일들을 관리하거나, 배포 파일들을 관리하는 기능을 지원하는 서버이다. 보통 이미지 업로드를 구현한다면, 이 S3를 이용하여 구현하는 경우가 많고, S3를 비롯한 AWS 서비스와 Travis CI를 연동하게 되면 아키텍처는 아래와 같아진다. 1. Travis CI와 S3를 연동해보자. 굳이 S3의 연동이 필요한 이유는 Jar 파일을 전달하기 위해서이다. ​ 실제 배포는 CodeDeploy로 이뤄지지만, 배포를 하는 CodeDeploy는 저장 기능이 없다. 따라서 Travis CI가 빌드한 결과물을 CodeDeploy가 가져갈 수 있도록 보관할 수 있는 공간이 필요한데, 이때 AWS S3를 주로 사용한다. ​ CodeDe..

[한이음] CI/CD

우리 프로젝트 중 CI/CD가 있는데 내 파트는 아니지만 처음 들어봤기 때문에 맨날 틈틈이 보다가 드디어 정리를 해본다.​ CI/CD는 한마디로 아래와 같이 정의할 수있다. 애플리케이션 개발부터 배포까지 모든 단계의 '자동화'를 통해서 좀 더 효율적이고 빠르게 배포할 수 있는 것을 말한다. ​ 애플리케이션을 완성했다면, 아래와 같은 순서로 사용자에게 서비스할 수 있다. ​ 컴파일 빌드 배포 여기서 CI/CD가 언급되는 곳은 배포 단계이다. 예를 들어 프로젝트에 2명 이상 참여를 하는데 한 명은 빈번한 merge를 실행하고 한명은 2~3일 만에 merge를 하면 충돌이 날것이고, 개발자는 그 충돌을 수정하는데 시간을 쓸 것이다. 이렇게 되면 수정하는데 시간을 더 써서 비효율적이다. 그렇기에 가능한 작은 단..

728x90