본문 바로가기

SpringBoot

(19)
28일차 - @RequestScope @RequestScope @RequestScope 새로운 요청이 발생하면 객체가 생성되어 자동으로 주입된다. RequestScope : 새로운 요청이 발생하여 응답 결과가 브라우저로 전달될 때까지 요청 정보가 담겨 있는 Request 객체를 사용할 수 있다. 이러한 사용 범위를 지칭함 타임리프 문법 const params = /*[[ ${param} ]]*/ null; param이 존재하면 params = param, 존재하지 않으면 params = null 주석 처리 되어서 실행되지 않는 게 아니라 주석도 문법!
27일차 - MockMvc, tailwind&Daisy UI, Toastr, @Transactional, Git 명령어 @AutoConfigureMockMvc @SpringBootTest @AutoConfigureMockMvc - 실제 운영 환경에서 사용될 클래스들을 통합하여 테스트한다. - 단위 테스트와 같이 기능 검증을 위한 것이 아니라, Spring Framework에서 전체적으로 flow가 제대로 동작하는지 검증하기 위해 사용한다. - 애플리케이션의 Bean, 설정을 모두 로드한다. => 운영 환경과 가장 유사하게 테스트할 수 있다. but 시간이 오래 걸린다. - 간단하게 테스트하기 위해서는 @WebMvcTest를 사용해야 한다.(같이 사용하면 서로의 MockMvc를 모킹해서 충돌 발생) MockMvc @Autowired MockMvc mvc; - 실제 객체와 비슷한 모의 객체 - 테스트 작성을 위한 환경 구축이..
26일차 - 스프링부트 게시판 조회수 구현, 빌더 패턴(@Builder) https://wikidocs.net/book/7601 점프 투 스프링부트 점프 투 스프링부트는 Spring Boot Board(SBB)라는 이름의 게시판 서비스를 만들어가는 과정을 설명한 스프링부트 입문서이다. 자바 설치부터 시작하여 서비스 운… wikidocs.net 3-15 추가 기능의 조회수를 구현해보았다. 다른 블로그들은 보통 Entity, Repository, Service, Controller를 모두 수정하여 구현했는데, 그 방법을 따라해보면 메인 화면은 잘 뜨는데 특정 게시글 클릭 시 오류가 계속 났었다. Controller에서 Question을 get한 이후에 update가 되게끔 순서를 잘못 기재해서 발생한 오류인가 싶어서 수정을 했는데도 오류가 났다. 여러 블로그를 참고해서 똑같이 구..
23일차 - 점프 투 스프링부트 3장(2) 마크다운 dependencies { ... implementation 'org.commonmark:commonmark:0.21.0' } 스프링부트가 내부적으로 관리하는 라이브러리에 포함되면 버전 정보가 필요없고 포함되지 않으면 버전 정보가 필요하다. 즉, commonmark는 스프링부트가 내부적으로 관리하는 라이브러리가 아니다. 스프링부트가 관리하는 라이브러리의 경우 버전 정보를 명시하지 않으면 스프링부트가 가장 궁합이 잘 맞는 버전으로 자동 선택한다. 따라서 라이브러리들의 호환성을 생각한다면 버전 정보는 따로 입력하지 않는 편이 좋다. 마크다운 컴포넌트 @Component public class CommonUtil { public String markdown(String markdown) { Parse..
22일차 - 점프 투 스프링부트 3장 스프링 시큐리티 스프링 기반 애플리케이션의 인증과 권한을 담당하는 스프링의 하위 프레임워크 dependencies { ... implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6:3.1.1.RELEASE' } build.gradle에 추가 - springsecurity6 버전 정보를 제거하고 사용하더라도 오류가 없다면 버전 정보 없이 사용하면 된다. @Configuration @EnableWebSecurity public class SecurityConfig { @Bean SecurityFilterChain ..
21일차 - 점프 투 스프링부트 2장 @SpringBootTest class SbbApplicationTests { @Autowired private QuestionRepository questionRepository; @Test void testJpa() { Optional oq = this.questionRepository.findById(2); assertTrue(oq.isPresent()); Question q = oq.get(); List answerList = q.getAnswerList(); assertEquals(1, answerList.size()); assertEquals("네 자동으로 생성됩니다.", answerList.get(0).getContent()); } } 위 코드를 실행하면 오류가 발생한다. 왜냐하면 Quest..
20일차 - 점프 투 스프링부트 데이터 초기화(베이스 데이터 추가하기) jpa: hibernate: ddl-auto: create ddl-auto: create 상태 (update로 설정하는 방법도 있지만, row를 변경하는 sql문을 실행하면 스프링부트를 재실행해도 변경된 값이 유지된다. 그러므로 create 상태에서 베이스 데이터를 추가해주는 방법을 선택한 것!) spring: profiles: active: dev 기본적으로 dev 환경임을 명시 @Configuration @Profile({"dev", "test"}) public class NotProd { @Bean public CommandLineRunner initData(...){ return args -> { ... }; } @Profile({"dev", "test"})..
19일차 - 스프링부트와 DB 연결하기, Spring Data JPA SELECT VERSION(); Maria DB인지 MySQL인지 확인하기 @RequiredArgsConstructor 필드 중에서 final이 붙은 것만 인자로 입력받는 생성자를 만든다. @NoArgsConstructor 인자가 없는 기본 생성자를 만든다. git reset HEAD^ 최신 커밋 취소 스프링부트와 DB 연결하기 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'org.mariadb.jdbc:mariadb-java-client' build.gradle 파일에 추가 server: port: 8010 // 서버 포트 spring: thymeleaf: // 타임리프 캐시 끄기 cache: fal..