TIL
TIL_20230411
번잔중
2023. 4. 11. 23:57
오늘 할 일
- LeetCode 데일리 문제 풀기
- 김영한 스프링 기초 강의 듣고 정리하기
- 코드스테이츠 수업 정리(Section 4 - OAuth 2와 JWT를 이용한 샘플 애플리케이션 구현)
- Heart - 글 삭제시 연결된 태그 개수 음수로 변하는 부분 수정하기
- 운동하기 - 웨이트 트레이닝
오늘 배운 것
LeetCode 데일리 문제 풀기
- 오늘의 문제: 2390. Removing Stars From a String(https://leetcode.com/problems/removing-stars-from-a-string/)
- 문제 조건
- 별('*') 모양을 포함하는 문자열 s가 주어진다.
- 한 번의 동작에서
- s 내에 있는 별을 고른다.
- '*' 모양의 바로 왼쪽에 위치한 '*' 모양이 아닌 문자를 삭제한다. (별 하나에 문자 하나 삭제 가능)
- 모든 별이 제거된 문자열을 반환하면 된다.
- 입력은 동작이 항상 가능하도록 주어질 것이다.
- 결과 문자열이 항상 고유하다는 것을 알 수 있다.
- 문제 해결 과정
- 스택으로 해결해볼까 생각이 든다.
- 문자열 s를 문자 하나씩 검사해서 '*'이외의 문자는 push '*'이 나오면 pop 연산을 수행한다.
- 만약 스택이 비어있는 경우 '*'이 나오면 실패로 처리하면 되지만 해당 문제에서는 그런 경우는 고려하지 않는다.
- 스택, 리스트, 덱 등을 사용하면 시간 복잡도가 상당히 커진다.
- 그래서 StringBuilder에서 deleteCharAt() 메소드를 사용해서 마지막 원소를 제거해줄 수 있고, 시간 복잡도를 줄일 수 있었다.
김영한 스프링 기초 강의 듣고 정리하기
- 어제 배운 '회원 서비스 테스트'에서 수업 진도에 포함되지 않는 테스트 코드를 직접 작성해 봤습니다.
- 전체회원조회의 테스트 코드
- 해당 코드는 회원 2명을 가입시킨 다음 전체회원조회 로직인 memberRepository.findAll()에 가입된 회원 2명이 모두 포함되는지 확인하는 것으로 테스트를 진행했습니다.
- 회원조회의 테스트 코드
- 해당 부분에서도 마찬가지로 회원 2명을 가입시킨 후 memberRepository.findById(Long id)를 사용해서 Member를 반환받고 해당 Member가 찾는 멤버인지 비교해주는 방식으로 테스트를 진행했습니다.
@Test
void 전체회원조회() {
// given
Member member1 = new Member();
member1.setName("spring1");
Member member2 = new Member();
member2.setName("spring2");
// when
memberService.join(member1);
memberService.join(member2);
// then
List<Member> members = memberRepository.findAll();
assertThat(members.contains(member1) && members.contains(member2)).isEqualTo(true);
}
@Test
void 회원조회() {
// given
Member member1 = new Member();
member.setName("spring");
Member member2 = new Member();
member2.setName("summer");
// when
memberService.join(member1);
memberService.join(member2);
// then
Member findMember = memberRepository.findById(member1.getId()).get();
assertThat(member1).isEqualTo(findMember); // assertThat에 member2를 넣으면 fail
}
코드스테이츠 수업 정리(Section 4 - OAuth 2와 JWT를 이용한 샘플 애플리케이션 구현)
- CSR 방식으로 OAuth2를 구현하는 파트였습니다.
- OAuth2로 인증을 받은 후에 JWT를 발급해서 프론트엔드와 백엔드에서 로그인을 유지하는 방식입니다.
Heart - 글 삭제시 연결된 태그 개수 음수로 변하는 부분 수정하기
- 태그의 개수가 음수로 표시되는 부분이 있었습니다. 그래서 해당 부분을 고쳐보았습니다.
- 코드를 살펴보니 RecruitService의 deleteRecruit와 FreeService의 deleteFree의 코드에 있는 메서드에서 count 값이 0보다 큰 경우에만 값이 줄어들도록 설정했습니다.
- DB와 안맞는 개수를 직접 맞춰줬습니다. ㅎㅎ...
// before
tag.setFreeCount(tag.getFreeCount() - 1);
// after
tag.setFreeCount(tagCnt > 1 ? tagCnt - 1 : 0);
운동하기 - 웨이트 트레이닝
느낀점
- 리트코드에서 문자열 문제가 나왔습니다. 스택으로 할 수는 있었지만 시간복잡도가 난장판인 관계로 StringBuilder로 갈아타게 됐습니다.
- 코드스테이츠 수업 파트는 실제 개발하면서 OAuth2 기능을 구현할 때 많이 참고했던 부분이라 읽으면서 내용이 잘 기억났습니다. 그래도 이전에 정리해 둔 내용이 많아서 다행입니다. ㅎㅎ
- 프로젝트 때 다른 팀원들의 코드를 깊게 살펴보지 못했는데, 오늘 보니 많이 곤란했습니다... 이걸 어디서부터 고쳐야 할지 고민중입니다.
- 오늘도 오운완-!
내일 할 일
- LeetCode 데일리 문제 풀기
- 김영한 스프링 기초 강의 듣고 정리하기
- Heart - 회원가입, 회원정보 수정, 자유글 등록시 이미지 객체 없어도 코드 동작하도록 수정