본문 바로가기

프로젝트 & TIL/일별 공부 기록 (백엔드 스쿨)

(98)
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가 되게끔 순서를 잘못 기재해서 발생한 오류인가 싶어서 수정을 했는데도 오류가 났다. 여러 블로그를 참고해서 똑같이 구..
25일차 - Git Bash 명령어 Git Bash 명령어 history | fgrep ls | fgrep al : history 결과에서 ls, al이 포함된 결과만 추려서 보여준다. mv a.txt a : a 폴더로 a.txt를 옮긴다. mv a/a.txt b.txt : a 폴더에 있는 a.txt를 가져오면서, b.txt로 이름도 바꾼다. cp a.txt b.txt : a.txt 파일을 복사해서 b.txt 파일 생성 cp -r b a : b 폴더를 a 폴더 안에 복사한다.
24일차 - Git bash 명령어 CSS 복습 https://flukeout.github.io/ CSS Diner A fun game to help you learn and practice CSS selectors. flukeout.github.io plate apple => 가능. 스페이스는 후손을 선택 plate > apple => 불가능. >는 자식을 선택 Git Bash ~ : 홈 디렉토리 pwd : 현재 경로 clear : 화면 초기화 cd 폴더_이름 : 이동 cd ~ : 홈 디렉토리로 이동 ls : 현재 디렉토리에 있는 파일 리스트 출력 ll(ls -l) : 파일 리스트 자세하게 출력 ls -al : 파일 리스트 자세하게 출력 + 숨김 파일 표시 start . : 탐색기 열림 touch 파일_이름 : 파일 생성(파일 이름 앞에..
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"})..