Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- wil
- 프로그래머스
- java
- 스파르타내일배움캠프WIL
- 99클럽
- 개발자스터디
- til
- 스파르타내일배움캠프
- 스파르타내일배움캠프TIL
- 백준
- AWS
- 자바
- Python
- 스파르타코딩클럽
- 컴퓨터구조론 5판
- 코딩테스트
- 개인공부
- 소프트웨어
- 부트캠프
- 중심사회
- 내일배움캠프
- 컴퓨터개론
- 개발자블로그
- Flutter
- Spring
- 운영체제
- 99일지
- MySQL
- 항해
- 국비
Archives
- Today
- Total
컴공생의 발자취
테스트 활용 과제 본문
728x90
반응형
2024.06.14.(금)
개인과제
- 진행 상황
- AOP 추가하기 : 완료
- Dto, Entity Test 추가하기 : 진행 중
- AOP 추가하기
- Java 로깅 logger, log4j, logback, slf4j 비교
- RequestContextHolder
- AOP 추가하기(코드)
aop > RequestInfoLogAop.java
package com.sparta.moviefeed.aop;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@Slf4j(topic = "RequestInfoLogAop")
@Aspect
@Component
public class RequestInfoLogAop {
@Pointcut("execution(* com.sparta.moviefeed.controller..*(..))")
private void forAllController() {}
@Around("forAllController()")
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
String method = request.getMethod();
String url = request.getRequestURI();
try {
// 핵심기능 수행
Object output = joinPoint.proceed();
return output;
} finally {
log.info("[RequestInfoLog] Method = {}, URL = {}", method, url);
}
}
}
- Dto, Entity Test 추가하기(코드)
test > entity > BoardTest
package com.sparta.moviefeed.entity;
import com.sparta.moviefeed.dto.requestdto.BoardRequestDto;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class BoardTest {
private BoardRequestDto boardRequestDto;
private Board board;
private String title;
private String content;
private User user;
@BeforeEach
void setUp() {
title = "Test Title";
content = "Test Content";
boardRequestDto = new BoardRequestDto(
title,
content
);
board = new Board(boardRequestDto, user);
}
@Test
@DisplayName("객체 생성 확인")
void testUserCreation() {
assertEquals(title, board.getTitle());
assertEquals(content, board.getContent());
assertEquals(user, board.getUser());
}
@Test
@DisplayName("게시물 수정")
void testUpdate() {
String newTitle = "Test NewTitle";
String newContent = "Test NewContent";
BoardRequestDto requestDto = new BoardRequestDto(newTitle, newContent);
board.update(requestDto);
assertEquals(newTitle, board.getTitle());
assertEquals(newContent, board.getContent());
}
}
- 오늘의 삽질
- aop > RequestInfoLogAop : Pointcut에서 .하나 빼먹음..
@Pointcut("execution(* com.sparta.moviefeed.controller{.여기ㅠ}.*(..))")
- aop > RequestInfoLogAop : Pointcut에서 .하나 빼먹음..
팀 회의
- 와이어프레임, erd, API 명세서 작성할 Tool 정하기
- figma board에서 모두 작성
- erd - ERDcloud / API명세서 - Notion 팀 페이지에 figma board에서 작성한 것을 기반으로 다시 작성
- code convention
- package name : 소문자, 대표적인 것 위주 ex) service, controller, repository...
- ResponseEntity : CommonResponse 사용
- 계층형? 도메인형? : 프로젝트 발제 후 결정
- git rules
- 깃허브 브랜치 네이밍 : 작업타입/#이슈번호 기능 ex) feat/#issueNum user
- 깃허브 커밋 규칙 : 작업타입 : 작업내용
코드 카타
* 프로그래머스로 진행
- SQL
- 5월 식품들의 총매출 조회하기
면담(질문)
* 대충 면담 후 내 기준 정리..
* 실제 이야기와 다르게 받아들였을 수 있다.
- Q : entity를 테스트 해보기 위해 생성자를 만들었는데, 이렇게 만들어진 생성자나 dto에 있는 생성자들도 테스트를 만들어야 하나요? 과제 조건에서 entity & dto의 메서드들에 대한 테스트를 만들라고 명시되어 있습니다.
- 일단 생성자는 메서드가 아니다.
- 3개 중에서 1개만 유효할 경우에 대한 고찰...
- Q : 취업 포트폴리오.. 어떻게 해야 경쟁력 있을까요?
부트캠프의 포트폴리오만으로는 경쟁력이 없다고 들었습니다..- 부트캠프의 포트폴리오만으로 들어간 사람도 있을텐데 그런 사람들은 굳이 부트캠프 포트폴리오만으로 들어갔다고 얘기할 필요가 없고, 들어가지 못한 사람들이 그렇게 얘기하기에 그런 말이 나올 수 있다.
그러니 너무 불안해하지 말고 지금의 공부에 집중하면 된다!!!
- 부트캠프의 포트폴리오만으로 들어간 사람도 있을텐데 그런 사람들은 굳이 부트캠프 포트폴리오만으로 들어갔다고 얘기할 필요가 없고, 들어가지 못한 사람들이 그렇게 얘기하기에 그런 말이 나올 수 있다.
- Q : 생성자를 여태까지 메서드인 줄 알았습니다..
이를 통해 개념이 부족하다고 생각이 들었는데, 어떻게 해야 할까요?- 일단, 지금 불편함이 없으면 그걸 다시 공부하는 데 스트레스 받지 않아도 된다. 나중에 다시 공부하면 되기 때문이다. 물론, 면접이나 이런 데에서 모른다면 부끄러운 일이 될 수 있지만, 지금 상황에서는 중요하지 않다.
- Q : 캠프를 수료 후 취업하게 된다면 첫 회사일텐데, 정확하게 어떤 회사를 가고 싶다는 기준이 없습니다. 그냥 일단은 들어가봐야 아니까 크게 생각하지 않았는데, 그렇게되면 흔히 말하는 물경력?이 될 수 있다고 확실한 기준을 잡는게 좋다는 얘기를 들었습니다.
- 공백기가 있는 것 보다는 물경력이 낫다. 그리고 회사에 들어갈 때 누가봐도 정말 아니다!라는 회사만 아니면 된다. 기본적으로 사수가 있고 기술적으로 리드해줄 수 있는 회사에 들어가야 한다.
오늘의 회고
- 12시간 중 얼마나 몰입했는가?
오전 시간만 제대로 몰입할 수 있었다.
오후에는 자취방 짐 빼거나 가족모임으로 이리저리 돌아다닌다고 제대로 집중하지 못했다.
그러므로 오전 시간인 약 3시간 정도 집중했다.
- 오늘의 생각
하.. 내 목표는 유지보수랑 예외처리(테스트 포함)를 잘 하는 개발자가 되자인데ㅠ
테스트.. 역시 너무 어려워ㅠ 어떻게하면 좋은 테스트 코드를 작성했다고 할 수 있을까?
막연하게 gpt에게 물어보고 일단은 그걸 토대로 내가 변형해서 따라 작성했는데..
이게 맞을까?
- 내일 학습할 것은 무엇인지
남은 과제를 진행해야겠지..
근데 dto, entity test에서 어떻게하면 좋은 테스트 코드를 지향할 수 있는지 계속해서 고민에 빠져든다.
728x90
반응형
'🌃 TIL' 카테고리의 다른 글
테스트 활용 과제 재제출 (0) | 2024.06.19 |
---|---|
테스트 활용 과제 제출 (0) | 2024.06.18 |
JWT 활용 과제 피드백 및 재제출 (0) | 2024.06.04 |
JWT 활용 과제 제출 (0) | 2024.06.01 |
entity 연관관계 프로젝트 적용 (0) | 2024.05.28 |