spring(21)
-
[SpringBoot] @Builder.Default / 클래스 내에서 필드 초기화 / NullPointException
[문제발생] 테스트를 위해 @beforeEach를 이용해 DB에 데이터를 세팅해놓고, 양방향 맵핑시 데이터가 올바르게 들어갔는지 확인을 하는 과정이었다. @Test @DisplayName("답변에 연결된 질문 찾기 vs 질문에 달린 답변 찾기") @Transactional //테스트 환경에서는 리포지토리를 이용한 통신만 가능하다. void t009(){ QuestionEntity question = this.questionRepository.findById(Long.valueOf(3)).orElse(null); assertNotNull(question); List answerList = question.getAnswerList(); assertEquals(1, answerList.size()); } - ..
2023.03.21 -
[SpringBoot] 실행 전 데이터 세팅 방법, CommandLineRunner
로직을 테스트 해보려고 할 때 매번 데이터를 넣는건 속도도 느려지고 상당히 귀찮다. 이 방법으로 데이터를 미리 세팅해 놓을 수 있다. [예시 1] @Configuration @Profile({"dev", "test"}) // NotProd : 개발환경이 이거나, 테스트환경일 때만 실행 public class NotProd { @Bean public CommandLineRunner initData(MemberService memberService, ArticleService articleService) { return args -> { // 이 부분은 스프링부트 앱이 실행되고, 본격적으로 작동하기 전에 실행된다. memberService.join("user1", "1234"); memberService.j..
2023.03.20 -
[SpringBoot] 쿠키와 세션
쿠키 - 쿠키는 클라이언트가 값을 조작할 수 있다. 그래서 보안에 취약하다. - 세션은 서버에서만 값을 줄 수 있으며 난수로 주어진다. 즉, 보안성이 좋다. 주로 Controller에서 다루며 HttpServletRequest, HttpServletResponse에서 쿠키와 세션을 확인하거나 수정, 생성할 수 있다. 쿠키 사용 // 쿠키 생성 Cookie cookie = new Cookie(이름, 값); response.addCookie(cookie); // 쿠키 조회 Cookie[] cookies = request.getCookie(); // 쿠키 삭제 Coockie cookie = new Cookie("해당쿠키이름", null); cookie.setMaxAge(0) //수명 0으로 만들기 _ 파라미터..
2023.03.16 -
스프링 기본 - 싱글톤
* 웹 애플리케이션은 주로 여러 고객이 동시에 요청을 한다. --> 고객이 요청할 때마다 객체를 생성하면 안되기 때문에 싱글톤 적용이 필요하다. 싱글톤 패턴 - 클래스의 인스턴스가 1개만 생성되는 것을 보장하는 디자인 패턴 - private 생성자를 사용해서 외부에서 임의로 new키워드를 사용하지 못하게 막아야 한다. * 단점 코드가 많이 들어간다. 의존관계상 클라이언트가 구체 클래스에 의존한다 (DIP 위반) 클라이언트가 구체 클래스에 의존해서 OCP 원칙을 위반할 가능성이 높다. 테스트가 어렵다 내부 속성을 변경하거나 초기화하기 어렵다 private 생성자로 인해 자식 클래스를 만들기 어렵다 유연성이 떨어진다 스프링 컨테이너 * 기존에 배운 @Configuration과 @Bean을 통해 객체를 스프링..
2023.02.15 -
스프링 기본 - 객체지향 적용/ DI, loC
객체 지향 5가지 원칙 (SOLID) SRP (Single Responsibility Principle) 단일 책임의 원칙 - 모듈이 변경되는 이유가 한가지여야 한다. - 즉, 해당 모듈이 여러 대상 또는 액터들에 대해 책임을 가져서는 안되고, 오직 하나의 액터에 대해서만 책임을 져야 한다. OCP (Open-Closed Principle) 개방 폐쇄 원칙 - 확장에 대해 열려있고 변경에 대해서는 닫혀있어야 한다. - 개방 폐쇄 원칙을 지키기 위해서는 추상화에 의존해야 한다. ISP (Interface segregation principle) 인터페이스 분리 원칙 - 목적과 관심에 따라 인터페이스로 분리한다. - 자신의 관심에 맞는 인터페이스만을 접근하여 불필요한 간섭을 최소화한다. LSP (Liskov..
2023.02.15 -
스프링 db2 - MyBatis
2/1 * 설정 implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0' 2.2.0 -> 버전정보 별도로 추가해야 된다. applicatoin properties 설정 예시 #MyBatis mybatis.type-aliases-package=hello.itemservice.domain mybatis.configuration.map-underscore-to-camel-case=true logging.level.hello.itemservice.repository.mybatis=trace type-aliases-pakage: 패키지명 생략 configuration.map-underscore-to-camel-case : 언더바 문법을 ..
2023.02.01