본문 바로가기

반응형
SMALL

Server

(34)
[우당탕탕 개발 일지] @Builder의 잘못된 사용 예시, List 필드가 있으면 Builder를 신중하게 사용하자! 에러 발생 🚨 Cannot invoke add 어쩌구 is null 요런 에러는 십중팔구 99퍼 List 필드에 초기화를 안해줘서 발생하는 에러인데,, 나는 Entity 필드 new ArrayList() 초기화 해줬는데 왜 안되지...? 😧 멘탈이 잠깐 나갈 뻔 했다. 에러 로그를 타고 타고 들어가서 고심한 결과,,, 여기!!! Order 생성 메소드에서 Order 생성을 빌더로 하고, orderItems 필드는 초기화를 안 해줬더랬다~ 그러니 orderItems는 null로 초기화 되고, NullPointerException 에러가 발생할 수밖에 😳 그래서 빌더 대신 생성자 방식으로 Entity를 생성해줬고, 그 결과 테스트가 아주 잘 통과된다! 🤩 하하하. 빌더를 잘못 쓰면 안된다고만 듣고 그 사례는..
[우당탕탕 개발 일지] JUnit5로 예외 테스트 JPA 기반의 Spring Boot 활용 관련 강의를 보고 공부하던 중, 예외 처리를 테스트하는 중이었다. @Test 어노테이션에 expected 옵션으로 예외 테스트를 할 수 있다고 배웠다! 테스트하려는 상황은, 중복된 회원을 create 했을 때 예외가 발생하는 상황이었다. 흠..? 🤔 테스트를 돌리기도 전에 입구 컷! 알고보니 강의는 JUnit4를 사용했고, 내 로컬은 JUnit5를 사용하고 있다는 차이가 있었다. >. {예외가 발생할 코드}); 위와 같은 형식으로 사용해주면 된다! Ref..
[우당탕탕 개발 일지] Github Action과 CodeDeploy로 SpringBoot CICD 세팅하기 새로운 프로젝트를 슬슬 시작하는 과정에 있다. 편리함을 위해 이번 프로젝트에서는 CICD 도입을 맡게 되었다. 스프링 부트 기반의 프로젝트를 CICD 연결했던 과정을 기록해보겠다! 더보기 준비물 - 스프링부트 기반 프로젝트 - 깃허브 액션 - AWS Code Deploy - AWS EC2 GitHub - prgrms-web-devcourse/Team-06-Final-BE Contribute to prgrms-web-devcourse/Team-06-Final-BE development by creating an account on GitHub. github.com 위 레포지토리를 CICD 연결했다! CI (Continuous Integration) 지속적 통합은 새로운 코드의 변경 사항이 정기적으로 빌드 ..
AWS와 Github로 Node CICD 연결하기 CI (Continuous Integration, 지속적 통합) CI, 즉 지속적 통합은 새로운 코드의 변경 사항이 정기적으로 빌드 및 테스트 되어 한 레포지토리에서 통합되는 것을 의미합니다. 개발자들이 협업을 진행할 때, 병합 과정에서의 충돌을 방지할 수 있고 작업을 빠르고 효율적으로 진행할 수 있습니다. 그럼 깃허브 액션을 사용하여 Node 파일을 CI 세팅해봅시다. Github Actions Secrets 먼저 깃허브 액션을 사용하기 위해, .env 파일 내용을 환경변수로 등록해야 합니다. setting > security > secrets and variables > actions 으로 들어가서 .env 파일의 내용을 환경변수로 등록해주세요. New Repository secrete 버튼을 눌러서..
[날카로운 질문하는 머쓱이] 빈 스코프에 따른 생명 주기 스프링 IoC 컨테이너는 Bean 객체들을 책임지고 의존성을 관리한다. 스프링 Bean은 객체와 같이 초기화 및 종료 작업이 나눠 진행된다. 객체 생성부터 의존 관계 주입 -> 초기화 콜백 메서드 호출 -> 사용 -> 소멸 전 콜백 메서드 호출 -> 스프링 종료 와 같은 생명 주기를 가진다. 여기서 빈 생명주기 콜백은 3가지 방법으로 관리된다. 1. 인터페이스 (InitializingBean, DisposableBean) - InitializingBean 인터페이스의 afterPropertiesSet 메서드로 초기화를 진행한다. - DisposableBean 인터페이스의 destroy 메서드로 소멸을 진행한다. - 스프링 초기에 나온 방식으로 지금은 거의 사용하지 않는다. - 스프링 전용 인터페이스이기 ..
[날카로운 질문하는 머쓱이] N+1 문제 오늘의 질문 빠밤 >~< N+1 문제 ..? 처음 들어봤다! N+1 문제 JPA 연관 관계에서 발생하는 이슈로, 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 개수(n)만큼 연관 관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오게 되는 것 예를 들어, 주문 내역에서 구매 상품(연관 관계가 설정된 엔티티)들을 조회할 때, 구매 상품 수만큼 조회 쿼리가 발생한다. 발생 이유 JPA는 메서드 이름을 분석하고 JPQL을 생성하여 실행된다.(JPQL은 SQL을 추상화 한 객체지향 쿼리 언어로써 특정 SQL에 종속되지 않고 엔티티 객체와 필드 이름을 가지고 쿼리를 실행한다.) 조회 쿼리(예를 들면 findAll())를 날리면 연관 관계를 무시하고, 해당 엔티티만을 조회하는 쿼리를 실행한다. 그렇기 때문..
[우당탕탕 개발일지] 로그인 가능한 사용자 계정 추가하기 & PasswordEncoder 우당탕탕 강의를 들으며 코드를 작성해가는 중입니다 ㅇㅁㅇ ..!! 오늘의 문제 발생 @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("user").password("{noop}user123").roles("USER") .and() .withUser("admin").password("{noop}admin123").roles("ADMIN") ; } 어제와 다름 없이 사용 중지된 Adapter에서 오버라이딩 하여 inMemoryAuthentication() 이라는 메서드를 사용하여 사용자와 관리자 계정을 추가했다. 그래서 대체 방..
[우당탕탕 개발일지] WebSecurityConfigurerAdapter 지원 불가 이번 주부터 Spring Security 관련 강의 듣기를 시작했다. ((두근두근)) 어려움의 프레임으로 돌돌 쌓인 보안 관련 친구라 설렘 반 두려움 반 입니다! 그리고 설정에서부터 막혔다. ㅇㅁㅇ !! 강사님은 WebSecurityConfigurerAdapter을 상속해서 쓰셨는데, 찾아보니 지원 중지 됐다고 한다. (WHAT ?!) 2020년까지도 멀쩡했던 친구 같은데,,, 왜,,, ㅠㅅㅠ 해결방법은 따로 Bean을 등록해서 사용해주는 것이었다. 복잡시러워라 ㅇㅅㅇ https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter Spring Security without the WebSecurityCon..

반응형
LIST