springboot11 Bean 등록에 대한 재고 SpringBoot에서 Bean을 등록하는 방법은 무엇이 있을까. 1. 클래스에 직접 @Component 애노테이션을 사용하는 방식 2. @Configuration 애노테이션을 활용해 @Bean 등록하는 방식 위 2가지 방식이 보편적이다. 내가 지금까지 진행했던 보통의 애플리케이션 개발 과정에서는 1번을 압도적으로 많이 사용했던 것 같다. @Configuration 방식의 경우, 통상 외부 라이브러리를 Bean으로 등록하기 위함이라며 면접 질문에서 정석적으로 회자된다. 그 고정 관념 탓에, 나의 경우도 2번 방식은 외부 설정 이외에 사용하지 않았었다. Java9에서 나온, 새로운 추상화 개념인 모듈이라는 개념이 있다. 모듈에는 종속성(dependency)의 개념이 있으며, Public API를 내보내고 .. 2024. 10. 12. Spring boot multi datasource 등록 시 주의 사항 Spring Boot Multi datasource 등록 시 주의 사항최근 진행했던 프로젝트는 외부 휴무일 정보 API를 호출하여 DB에 적재하는 월배치용 Spring Batch 애플리케이션을 개발하는 것이었다.회사에는 여러가지 DataBase가 있는데, 그 중 메인 DB를 사용하기로 했고, spring batch 용 DB는 따로 사용하게 되었다.그래서 멀티 datasource bean 을 등록해줘야 했다.그 과정에서 정말 기초적이지만 실수했던 부분을 설명해보겠다.Multi Datasource하나의 프로젝트에서 여러 개의 데이터베이스를 연결하는 것.spring 에서는 기본적으로 yaml 파일을 통해 쉽게 datasource 구성이 가능하다.따로 java 코드로 bean 을 등록할 필요가 없을 것이다.하지.. 2024. 9. 18. [CI-CD 구축] AWS EC2, Docker 를 이용한 Spring Boot 자동 배포 인프라 구축은 참 쉽지 않다. 인프라 공부는 더더욱 어려운 것 같다. 무엇보다 실습을 하려면 비용이 참 많이 든다. 하지만, 원활한 개발을 위해서는 자동 배포를 구축해야지만, 서비스 개발에만 집중할 수 있다. 그래서 백엔드 개발자는 서버 개발 능력 이외에, 어느 정도 인프라 구축 및 환경에 대한 개념을 기본적으로 탑재해야 된다고 생각한다. 이번에 사이드 프로젝트 기획 및 인프라 구축을 해야될 일이 생겼다. 어떻게 최대한 쉽고 빠르게 구축할지 고민을 해뵜다. 이 전에는 jar 파일을 그대로 실행하기 위해 AWS EC2 인스턴스에 고대로 로컬과 비슷한 환경을 구성해 놓고, yaml 도 그대로 넣어놓고, 무중단 배포를 시도했다. Ubuntu 서버에서 할게 참 많았다. 도커를 공부하고, 사용해보면서 EC2 에 .. 2023. 6. 18. 결제 API 리팩토링 - [2] (feat. WebClient) https://sweeeetgoguma.tistory.com/entry/%EA%B2%B0%EC%A0%9C-API-%EB%A6%AC%ED%8C%A9%ED%86%A0%EB%A7%81-1-feat-%EC%A0%84%EB%9E%B5-%ED%8C%A8%ED%84%B 결제 API 리팩토링 - [1] (feat. 전략 패턴) 결제 API를 리팩토링 시작하며 외부 API를 연동 부분에 대해서 생각해봤다. 기존에도 카카오페이를 이용했었고, 지금도 카카오페이를 이용할 것이지만, 추가적으로 다른 결제 API를 연동할 수 있 sweeeetgoguma.tistory.com 지난 포스팅에 이어서 작성하겠습니다~ 실제 결제 API를 호출하기 위해서는 httpClient 기반의 모듈이 필요하다. 기존에는 동기방식, 멀티스레드를 이용.. 2022. 9. 22. DB 수정 & jpa 세팅 프로젝트의 전반적인 리팩터링을 다시 시작하며, 기존 mybatis를 이용했던 것을 그대로 옮겨왔다. 하지만 SQL Mapper를 이용한 설계 특성상 객체 지향적인 코드의 작성이 어려웠고, 또 기존 DB 설계의 문제도 있다는 것을 알게 되었다. DB의 전반적인 수정과 더불어, JPA를 이용해 다시 리팩터링을 해보기로 결정을 내렸다. 그 수정과정과 JPA 세팅 방법을 나열해보겠다. https://github.com/GroovyArea/My-ChickenBreast-Shop GitHub - GroovyArea/My-ChickenBreast-Shop: shop api with spring boot shop api with spring boot . Contribute to GroovyArea/My-ChickenB.. 2022. 8. 8. 2022.05.26 「트래픽이 몰렸을 경우」 이메일을 통해 인증 번호를 전송하는 방식은 매우 느리다. 서버 사용자가 늘어날수록 트래픽이 많이 몰려 인증 번호를 전송하는 시간이 무진장 늘어날 것이다. 이러면 안 된다. 그래서 찾아보았다. 트래픽이 몰렸을 경우에는 어떤 식으로 해결을 하는지? 동기와 비동기 방식이 있다. 동기는 첫 프로세스가 완료되어야 다음 프로세스로 넘어가는 방식이고, 완료 여부와 상관없이 다음 프로세스를 요청하거나 실행하는 것이 비동기 방식이다. 이메일 전송에 이 비동기 방식을 적용해 보고자 한다. Async Config 스프링에서는 @Async를 통해 비동기 방식을 쉽게 구현할 수 있다. configuration을 통해 스레드의 개수를 커스터 마이징 시켰다. Async 적용 비동기 방식으로 동작하길 바라는 메서드에 애노테이션을 적.. 2022. 5. 26. 2022.05.25 「Email 인증」 열심히 프로젝트를 하다가 초기 구상한 wiki를 다시 보게 되었다. 회원가입 시 이메일 api를 사용하기로 했는데 그걸 까먹었다.. 그래서 회원가입을 다시 건드리게 되었다. Java의 MailSender 인터페이스를 사용하여 SMTP 구글 이메일로 이메일 인증 번호를 클라이언트 요청 이메일로 보내주도록 설계하고 인증 번호를 redis DB에 저장하여 비교하고 회원가입을 이루게 할 것이다. Mail Sender // Mail implementation 'org.springframework.boot:spring-boot-starter-mail' 먼저 의존성을 추가했다. Application.yml 지금까지 Properties 파일을 사용하고 있었는데, 이번 기회에 yaml을 사용해보기로 결정했다. 이유는 인.. 2022. 5. 25. 2022.05.11 「SHA-256 + Salt & 인증」 인증 관련해서 사실 스프링 시큐리티를 사용해도 괜찮지만 순차적으로 가기 위해서 순수하게 SHA-256 암호화 알고리즘을 이용해 비밀번호 암호화와 로그인을 원시적으로 구현한 하루다.. 거진 12시간을 삽질한 것 같다. 암호화 알고리즘 이용과, Mybatis 매핑 문제도 있고, ModelMapper를 사용해 DTO VO 매핑이 계속 안되어서 하루 종일 멘털이 나갔었다. 다른 공부도 할게 너무 많은데 프로젝트만 비중이 많았던 하루라 너무 아쉽다. 하지만 삽질한 만큼 내 것이 되었으면 좋겠다. 오늘은 하루종일 삽질한 내용을 기반으로 한번 정리를 해보려고 한다. 여담으로 다이어트중인데 요새 상주하는 공부 환경에서 오트밀 미니 바이트를 제공해주는데 이거 진짜 너무 맛있다.. 예전엔 진짜 단 거 잘 참았는데 늙었나 .. 2022. 5. 11. 2022.05.10 「Rest Ful Api & DTO,VO mapping & Mysql Index & 상수화」 프로젝트를 진행 중에 수정사항이 너무도 많다는 것을 알게 되었다. 예전에 학원에서 프로젝트를 할 때는 어떻게 만들든 기한이 정해져 있었기 때문에 완성도가 우선이었고, 유지보수에 대한 프로그래밍에 신경을 쓰지 않았었다. 하지만 실제로 제대로 된 프로그래밍을 하다 보니 예전 버릇이 나오게 되었고, 이번 리뷰를 받은 김에 리팩터링을 빠르게 하며 정리를 해볼 생각이다. RestFul Api 의 return 값 1. 되도록 체이닝 하는 방식을 사용 2. response에 해당되는 헤더 메시지(상태 코드, 메시지 등등), 바디 값을 다 넣도록 노력하자 DTO, VO 간의 매핑 현재 Mybatis를 사용중이므로 테이블 자체의 Entity는 VO service mapper 계층 이동 시 VO를 이용해야 함 .. 2022. 5. 10. 2022.05.03 「주석을 작성하는 방법 & Back 중심 개발 수정 및 시작」 스프링 부트 프로젝트를 시작한 지 일주일이 좀 되어간다. 잘 되어가고 있나 생각을 해보았다. 하지만 아무리 생각해도 이상하다는 생각이 계속 들었다. 1. 분명 Backend 개발이 목적인데 왜 나는 Front(Thymeleaf, CSS 등등)에 시간을 더 쏟고 있는 것인가? 2. 주석 처리 방법이 난잡하다? 이를 고민하다가 결국 개발자분의 조언을 듣고 클래스와 메서드 단위의 주석을 작성하는 방법, Back 중심 개발을 시작하기로 생각했다. 주석을 다는 방법? 기존에 나는 기준 없이 다른 사람이 이 정도면 알아보겠지라는 생각으로 나름 주석을 잘 작성했다고 생각했다. 그건 나만의 착각이었다. 아무리 잘 작성했다 생각한 주석도 남이 볼 땐 그저 난잡하고 의미 없이 달린 주석일 수 있다는 생각을 하지 못했던 것.. 2022. 5. 3. 2022.04.20 의 기록 ▶ 오늘 하루 계획 파트 1 (11시 ~ 2시) 1. Gradle MVC 프로젝트 테스트 코드 리팩토링 2. Mysql 3단원 정리 파트 2 (3시 ~ 1시) 1. 스프링MVC 개념 정리 : 핸들러 추상클래스로 왜 이루어져 있는지 고민해보자 3개 2. 스프링부트 프로젝트 WIkI 정리 3. 노션 이력서 템플릿 및 초안 작성 4. 도커 2문서 5. 알고리즘 1문제 2022. 4. 20. 이전 1 다음 반응형